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

Performing arithmetic on parameters to initialize other constants

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

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中哪个更大,然后赋值给big_wlsc 也是如此。然后我将使用这些参数来定义数组,定义数组边界等

我尝试使用 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;

这样做的好处是参数是无类型的,不固定为整数。