Verilog назначить часть памяти массива - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь определить некоторую часть массива памяти в 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

но я не был успешным. У кого-нибудь есть идеи, как можно выполнить это задание?

EDIT:

Как 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 голосов
/ 27 августа 2018

Verilog не разрешает операции с более чем одним элементом массива одновременно. Вам нужно перейти на SystemVerilog, чтобы ваш код работал. Обычно достаточно лишь изменить расширение файла на * .sv. Тогда оба ваших задания должны работать.

...