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



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

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_wl。对于CCD_ 3也是如此。然后我将使用这些参数来定义数组,定义数组边界等。

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

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

相关内容

最新更新