verilog:在case语句中定义参数值?

时间:2013-02-26 11:39:04

标签: parameters verilog fpga hdl

我需要定义依赖于其他输入的参数值。我尝试了以下方式,但它不起作用。任何其他替代方法?

 module (...)
...
input sel ;
..
case (sel)
0: parameter data1 =5;
1: parameter data1 =5;
endcase
...

由于

1 个答案:

答案 0 :(得分:3)

参数是常量,因此不能在运行时更改,也不能用于动态结构。

如果您需要根据输入设置值,这些输入在执行期间会发生变化,您只需要定义正确宽度的导线或标识。

或者对于常量,您可以使用向下传递值的分层参数,但它们必须都基于参数或常量。

module top();
  localparam DATA_WIDTH = 32;

  middle #(
    .DATA_WIDTH( DATA_WIDTH )
  ) middle_0();

endmodule

module middle #(
  parameter DATA_WIDTH = -1

  //DO NOT MODIFY
  parameter DATA_OUT_WIDTH = DATA_WIDTH + 10;
)(
  output [DATA_OUT_WIDTH-1:0] data_tx
);
endmodule

对于你的情况:

module (...)
...
input sel ;
..
  reg [3:0] data1;
  always @*
    case (sel)
      0: data1 =5;
      1: data1 =5;
    endcase
  end

endmodule