-3

我遇到了 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”中绑定参数选择 testbench.sv:613:错误:无法评估 genvar 案例表达式:选择

第 613 行是case (select) line. 我已经对此进行了很多研究,并且在其他情况下也看到了极其相似的代码,因此我不确定到底是什么问题。

4

1 回答 1

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为 bereg而不是 a wire(还请记住,reg类型不是文字硬件寄存器,不幸的是,它是学习 Verilog 更令人困惑的事情之一)

于 2018-01-09T04:24:29.353 回答