![](/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.