假设我有以下模块定义,
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;