我正在尝试在SystemVerilog中初始化多维参数化数组,如下所述:
...
parameter INPUT_WIDTH = 16;
parameter NUM_ELEMENTS = 4;
...
reg signed [INPUT_WIDTH-1 : 0 ] ss_res_reg[NUM_ELEMENTS-1:0];
我想在ss_res_reg
的每个下降沿将rst
初始化为零,所以:
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}}};
并得到了同样的错误。有人知道我在做什么错吗?
答案 0 :(得分:1)
错误在于您无法复制未打包的数组元素。
有一个简单的解决方案:
if(~rst)
for (integer i=0; i<NUM_ELEMENTS; i++)
ss_res_reg[i] <= {INPUT_WIDTH{1'b0}};
答案 1 :(得分:1)
您可以在分配模式中使用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填充压缩数组