在 Verilog 中为参数化数组赋值

zek*_*eke 0 syntax verilog register-transfer-level

假设我有以下模块定义,

module foo(b)
input b;
parameter length = 8;

reg [length-1:0] dummy ;
Run Code Online (Sandbox Code Playgroud)

现在,我想为这个虚拟数组赋值。例如,我想将其全部设为 1。如果长度没有参数化,我可以这样做,

always @(posedge b)
 dummy <= 8'hFF;
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 5

你可以做位扩展:

always @ (posedge b)
  dummy <= {length{1'b1}};
Run Code Online (Sandbox Code Playgroud)

{} 内的内容由“parameter-1”扩展,与具有相同:

always @ (posedge b)
  dummy <= {1'b1,1'b1,1'b1,1'b1....};
Run Code Online (Sandbox Code Playgroud)