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