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