私はVerilogでいくつかのハードウェアを設計していますが、物事を柔軟に保つために、パラメーターを使用して幅を設定し、コードを変更せずに必要に応じて幅を変更できるようにしています。私が遭遇した問題の1つは、複数のセルへの並列書き込みを実行できるようにしたいコードのセクションにあります。
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がこのコードを好まない理由や、修正して希望の動作を維持する方法もわかりません。