在 Verilog 中为参数化数组赋值

Assigning values to parametrized arrays in 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 <= ~1'b0;

这利用了以下事实:当运算符位于上下文确定的表达式中时,Verilog 在应用运算符之前先扩展操作数。

在SystemVerilog中,你可以这样写

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

您可以进行位扩展:

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

{} 中的内容由“parameter-1”扩展,等同于:

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