繁体   English   中英

错误(10219):Mux.v处的Verilog HDL连续分配错误(19):分配左侧的对象“ muxout”必须具有网络类型

[英]Error (10219): Verilog HDL Continuous Assignment error at Mux.v(19): object “muxout” on left-hand side of assignment must have a net type

我想用计数器和MUX制作分频器。

我为项目制作3个模块

// 4位计数器

module Counter (input clk, input reset, output reg[3:0] out);

   always@(posedge clk or posedge reset)
   begin
      if(reset)
         out = 4'b0000; 
      else
      begin
         if(clk)
            if(out < 4'b1111)
            out = out + 4'b0001;
            else
            out = 4'b0000;
      end
   end


endmodule

//模块4by1 Mux

module Mux (input [3:0] muxin , input [1:0] sel, output reg muxout);


   function _4by1mux;

      input [3:0] muxin;
      input [1:0] sel;

      case (sel)
         2'b00 : _4by1mux = muxin[0];
         2'b01 : _4by1mux = muxin[1];
         2'b10 : _4by1mux = muxin[2];
         2'b11 : _4by1mux = muxin[3];
      endcase
   endfunction

   assign muxout = _4by1mux(muxin, sel);


endmodule

//模块freqDivider

 module freqDivider(input clk, input reset, input [1:0] sel, output reg muxout);

   wire [3:0]counterbus;

   Counter ct1 (clk, reset, counterbus);
   Mux mux1 (counterbus, sel, muxout);

endmodule

模块freqDivider位于顶部,我调用模块Counter和Mux

但是模块Mux有问题

Error (10219): Verilog HDL Continuous Assignment error at Mux.v(19):
object "muxout" on left-hand side of assignment must have a net type

这个错误

ps。 输入sel将随时间改变

该错误是由于muxout输出具有reg类型而不是类型wire 在verilog中,线可以具有两种总体类型,即网络(如wire类型)或变量(如reg类型)。 要将值/逻辑分配给网络类型,您需要使用assign语句,而不always块。 要将值/逻辑分配给变量类型,只能使用always块,不能assign语句。 因此,您可以在Mux模块中将您的assign always阻塞,或者,为了更简单的解决方案,不要将muxout输出设置为reg ,而只需忽略reg关键字,它将成为wire

错误是您已将mux_out声明为reg类型,而不是wire类型。 任何端口的默认类型是wire。 您正在通过assign关键字对该网络进行连续分配。 reg类型的网络上,赋值只能在程序块内部进行(初始的,始终是)。

output reg更改为mux_out ,仅output

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM