我遇到了4x1多路复用器的问题。代码如下:
module mux4x1( select, d0, d1, d2, d3, q );
input[1:0] select; //CWP 0, CWP 1
input[31:0] d0, d1, d2, d3;
output[31:0] q;
wire[31:0] q;
wire[1:0] select;
wire[3:0] d;
case (select)
2'b00 : assign q = d0;
2'b01 : assign q = d1;
2'b10 : assign q = d2;
2'b11 : assign q = d3;
endcase
endmodule
不幸的是,当我尝试在其他地方使用它时,它会给我以下错误:
testbench.sv:613:错误:无法在`testModule.RWTest.mux1'中绑定参数select testbench.sv:613:错误:无法评估genvar案例表达式:选择
第613行是case (select) line
。我已经对此进行了相当多的调查,并且在其他情况下我看到了非常相似的代码,因此我不确定问题究竟是什么。
答案 0 :(得分:1)
您需要将case
语句放在程序块中,如下所示:
always @(*) begin
case (select)
2'b00: q = d0;
2'b01: q = d1;
2'b10: q = d2;
2'b11: q = d3;
endcase
end
请记住,所有逻辑都需要使用always @(*)
(如上面的代码)或单独的assign
语句中的组合块内。请注意,这些应该是"顶级"在模块中,即没有像你试图在代码中那样围绕assign
的逻辑。
请注意,作为此更改的结果,您需要将q
的类型修改为reg
而不是wire
(还要记住reg
类型不是文字硬件寄存器,不幸的是它是学习Verilog的更令人困惑的事情之一)