为Verilog中的参数化数组赋值



假设我有以下模块定义,

module foo(b)
input b;
parameter length = 8;
reg [length-1:0] dummy ;

现在,我想给这个伪数组赋值。例如,我想把它全部变成1。如果长度没有参数化,我可以这样做,

always @(posedge b)
dummy <= 8'hFF;

但当长度被参数化时,我希望这样做,

always @(posedge b)
dummy <= length'hFFFF //won't even compile. even if it did, how many F's should there be?

如何将1(或0(分配给长度已参数化的整个数组?或者更一般地说,在指定参数化数组的长度时,如何分配值?

您可以进行位扩展:

always @ (posedge b)
dummy <= {length{1'b1}};

{}内部的内容由";参数-1";,将与具有相同:

always @ (posedge b)
dummy <= {1'b1,1'b1,1'b1,1'b1....};

您可以编写

always @(posedge b)
dummy <= ~1'b0;

这利用了这样一个事实,即Verilog在应用运算符之前对操作数进行扩展,当它们位于上下文确定的表达式中时。

在SystemVerilog中,您可以编写

always @(posedge b)
dummy <= '1;

最新更新