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

Parameters verilog:在case语句中定义参数值?,parameters,verilog,fpga,hdl,Parameters,Verilog,Fpga,Hdl,我需要定义依赖于其他输入的参数值。我试过下面的方法,但不起作用。还有其他替代方法吗 module (...) ... input sel ; .. case (sel) 0: parameter data1 =5; 1: parameter data1 =5; endcase ... 感谢参数是常量,因此不能在运行时更改,也不能用于动态结构 如果您需要根据输入设置值,这些输入在执行过程中会发生变化,您只需要定义正确宽度的导线或reg 或者,对于常量,您可以使用分层参数,在其中向下传递值,但它

我需要定义依赖于其他输入的参数值。我试过下面的方法,但不起作用。还有其他替代方法吗

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

感谢

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

如果您需要根据输入设置值,这些输入在执行过程中会发生变化,您只需要定义正确宽度的导线或reg

或者,对于常量,您可以使用分层参数,在其中向下传递值,但它们必须全部基于参数或常量

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

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

如果您需要根据输入设置值,这些输入在执行过程中会发生变化,您只需要定义正确宽度的导线或reg

或者,对于常量,您可以使用分层参数,在其中向下传递值,但它们必须全部基于参数或常量

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

谢谢你的帮助。但是我需要定义参数,因为我已经使用参数编写了模块。如果我将参数更改为reg,我可能需要更改整个代码?我尝试重载参数,但这会给出一个错误,因为正在实例化的模块不需要该参数。请建议如果它被用于定义数据路径宽度,那么它将不起作用,如果只是用于赋值右侧的常量,那么它应该起作用。是的,我的要求只是常量,而不是定义数据路径宽度reg将起作用,但如果我改为reg,我将不得不更改代码的其他方面。无论如何,将尝试@Adam12-该参数依赖于另一个模块。所以这个常量值是从另一个模块定义的。由于ip问题,我只能发布代码,而且代码太大,无法发布。所以我只给出了一个示例代码。谢谢你的帮助。但是我需要定义参数,因为我已经使用参数编写了模块。如果我将参数更改为reg,我可能需要更改整个代码?我尝试重载参数,但这会给出一个错误,因为正在实例化的模块不需要该参数。请建议如果它被用于定义数据路径宽度,那么它将不起作用,如果只是用于赋值右侧的常量,那么它应该起作用。是的,我的要求只是常量,而不是定义数据路径宽度reg将起作用,但如果我改为reg,我将不得不更改代码的其他方面。无论如何,将尝试@Adam12-该参数依赖于另一个模块。所以这个常量值是从另一个模块定义的。由于ip问题,我只能发布代码,而且代码太大,无法发布。所以我只给出了一个示例代码。你能发布完整的代码吗?不清楚为什么要使用依赖于输入端口的参数(常数)。您能发布完整的代码吗?不清楚为什么要使用依赖于输入端口的参数(常数)。