SystemVerilog 中初始化多维参数化数组
SystemVerilog Initialize multi dimensional parameterized array in
我正在尝试在 SystemVerilog 中初始化一个多维参数化数组,如下所述:
...
parameter INPUT_WIDTH = 16;
parameter NUM_ELEMENTS = 4;
...
reg signed [INPUT_WIDTH-1 : 0 ] ss_res_reg[NUM_ELEMENTS-1:0];
我想在 rst
的每个下降沿将 ss_res_reg
初始化为零,所以:
always_ff @(posedge clk or negedge rst) begin
if(~rst) begin
ss_res_reg <= '{NUM_ELEMENTS{NUM_ELEMENTS{1'b0}}};
end else begin
ss_res_reg <= ss_res;
end
end
问题出在这一行 ss_res_reg <= '{NUM_ELEMENTS{INPUT_WIDTH{1'b0}}};
。如果我将其更改为 ss_res_reg <= '{NUM_ELEMENTS{16'b0}};
,它就可以正常工作。但是,当我想使用 INPUT_WIDTH
参数时,Xilinx 工具给我以下错误:syntax error near {
。我也尝试了 ss_res_reg <= '{NUM_ELEMENTS{16{1'b0}}};
并得到了同样的错误。有谁知道我做错了什么?
错误在于您无法复制解压缩的数组元素。
有一个简单的解决方案:
if(~rst)
for (integer i=0; i<NUM_ELEMENTS; i++)
ss_res_reg[i] <= {INPUT_WIDTH{1'b0}};
您可以在分配模式中使用 default
标签来分配具有任意维数的解压缩数组的所有元素:
always_ff @(posedge clk or negedge rst) begin
if(~rst) begin
ss_res_reg <= '{default:'0};
end else begin
ss_res_reg <= ss_res;
end
end
'0
表示用0填充打包数组
我正在尝试在 SystemVerilog 中初始化一个多维参数化数组,如下所述:
...
parameter INPUT_WIDTH = 16;
parameter NUM_ELEMENTS = 4;
...
reg signed [INPUT_WIDTH-1 : 0 ] ss_res_reg[NUM_ELEMENTS-1:0];
我想在 rst
的每个下降沿将 ss_res_reg
初始化为零,所以:
always_ff @(posedge clk or negedge rst) begin
if(~rst) begin
ss_res_reg <= '{NUM_ELEMENTS{NUM_ELEMENTS{1'b0}}};
end else begin
ss_res_reg <= ss_res;
end
end
问题出在这一行 ss_res_reg <= '{NUM_ELEMENTS{INPUT_WIDTH{1'b0}}};
。如果我将其更改为 ss_res_reg <= '{NUM_ELEMENTS{16'b0}};
,它就可以正常工作。但是,当我想使用 INPUT_WIDTH
参数时,Xilinx 工具给我以下错误:syntax error near {
。我也尝试了 ss_res_reg <= '{NUM_ELEMENTS{16{1'b0}}};
并得到了同样的错误。有谁知道我做错了什么?
错误在于您无法复制解压缩的数组元素。
有一个简单的解决方案:
if(~rst)
for (integer i=0; i<NUM_ELEMENTS; i++)
ss_res_reg[i] <= {INPUT_WIDTH{1'b0}};
您可以在分配模式中使用 default
标签来分配具有任意维数的解压缩数组的所有元素:
always_ff @(posedge clk or negedge rst) begin
if(~rst) begin
ss_res_reg <= '{default:'0};
end else begin
ss_res_reg <= ss_res;
end
end
'0
表示用0填充打包数组