我的设计需要一些基本参数。它需要对给定的基本参数进行一些运算(比较、加法等(,然后根据结果初始化其他参数(或常数(。例如,看看下面的代码,
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;
这样做的好处是参数是无类型的,而不是固定为整数。