Syntax 对参数执行算术运算以初始化其他常量

Syntax 对参数执行算术运算以初始化其他常量,syntax,parameters,verilog,register-transfer-level,Syntax,Parameters,Verilog,Register Transfer Level,我有一个需要一些基本参数的设计。它需要对给定的基本参数进行一些运算(比较、添加等),然后根据结果初始化其他参数(或常量)。例如,看看下面的代码 module foo(a,b); parameter wl_in = 8; parameter sc_in = 3; parameter wl_out = 9; parameter sc_out = 2; parameter big_wl = //to be determined... parameter big_sc = //to be deter

我有一个需要一些基本参数的设计。它需要对给定的基本参数进行一些运算(比较、添加等),然后根据结果初始化其他参数(或常量)。例如,看看下面的代码

module foo(a,b);

parameter wl_in = 8;
parameter sc_in = 3;
parameter wl_out = 9;
parameter sc_out = 2;

parameter big_wl = //to be determined...
parameter big_sc = //to be determined...

//some logic

endmodule
我想确定两个
wl
s中哪个更大,然后将其分配给
big\u wl
。同样适用于
sc
。然后我将使用这些参数来定义数组、定义数组边界等

我尝试使用
if/else
语句,但这种方法出现了错误


在Verilog-2001中如何执行此操作?

您可以使用条件运算符
a?b:c
用于此

parameter big_wl = wl_in > wl_out ? wl_in : wl_out;
对于更复杂的操作,可以使用常量函数。这类函数的输出仅由其输入定义,并且不引用函数之外的任何内容

function integer max(integer v1,v2);
begin
  if (v1 > v2)
     max = v1;
  else
     max = v2;
end
endfunction

parameter big_wl = max(wl_in, wl_out);
在SystemVerilog中,可以使用
let
构造

let max(v1,v2) = v1>v2 ? v1 : v2;
这样做的好处是参数是无类型的,而不是固定为整数