Я проектирую некоторое оборудование в Verilog, но, чтобы сохранить гибкость, я использую параметры для установки ширины, чтобы я мог изменять ширину по мере необходимости без изменения кода. Одна проблема, с которой я столкнулся, заключается в разделе кода, где я хочу иметь возможность выполнять параллельную запись в несколько ячеек.
parameter DATA_WIDTH = 16;
parameter BUFFER_SIZE = 16;
parameter LOAD_WIDTH = DATA_WIDTH*BUFFER_SIZE;
input [LOAD_WIDTH-1:0] i_load_data;
reg [DATA_WIDTH-1:0] r_data_buf[BUFFER_SIZE-1:0];
...
always@(posedge clk) begin
....
else if (i_load_flag) begin
for(i = 0; i < BUFFER_SIZE; i = i + 1)
r_data_buf[i] <= i_load_data[i * BUFFER_SIZE + BUFFER_SIZE - 1:i * BUFFER_SIZE];
end
end
Мне нужно сохранить r_data_buf как массив из-за способа чтения данных. Мне также непонятно, почему verilog не нравится этот код, поскольку все является константой во время компиляции, или как я могу это исправить и при этом получить желаемое поведение.