![](/img/trans.png)
[英]Verilog Error: Object on left-hand side of assignment must have a variable data type
[英]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.