Verilog分配部分阵列内存

时间:2018-08-27 13:33:48

标签: arrays memory verilog

我正在尝试在Verilog中定义存储器阵列的某些部分,例如

module test (
  input clk,
  input [7:0]  in1,
  input [23:0] in2
);

wire [7:0] array_in2 [2:0];
reg  [7:0] buffer    [5:0];

genvar i;

generate
  for (i = 0; i < 3; i = i + 1) begin: fillmsg
    assign array_in2[i] = in2[i*8 +:8];
  end
endgenerate

always @(posedge clk) begin
  //buffer <= {8'd0, in1, 8'd1, array_in2}; // does not work
  buffer[0] <= 8'd0;
  buffer[1] <= in1;
  buffer[2] <= 8'd1;
  buffer[5:3] <= array_in2; // <--- does not work either
end

endmodule

但是我没有成功。有谁知道如何完成这项任务?

编辑:

dave_59建议的一种分配方法是一次分配一个数组元素

integer j;
always @(posedge clk) begin
  for (j=0; j<3; j=j+1) begin
    buffer[i+3] <= array_in2[i];
  end
end

1 个答案:

答案 0 :(得分:0)

Verilog不允许一次对多个数组元素进行操作。您需要移至SystemVerilog才能使代码正常工作。通常,只需将文件扩展名更改为* .sv即可。然后,您的两个作业都应该工作。