Verilogでメモリの一部を表すために8 * 2ビット配列を作成しました
reg [1:0] m [0:7]
このメモリにはリセット信号があり、リセットが1の場合、このメモリのすべてのビットを0にリセットする必要があります。しかし、mのすべてのビットを簡潔に設定する方法がわかりません。何百もある場合、メモリ内の数千ビット、次の方法は明らかに実行不可能です。
always@(posedge clk or posedge reset)
begin
if (reset)
begin
m[0]<=2'b00;
m[1]<=2'b00;
m[2]<=2'b00;
m[3]<=2'b00;
m[4]<=2'b00;
m[5]<=2'b00;
m[6]<=2'b00;
m[7]<=2'b00;
end
else
....
end
for
ループを使用します。
integer i;
always@(posedge clk or posedge reset)
begin
if (reset)
begin
for (i=0; i<8; i=i+1) m[i] <= 2'b00;
end
else
....
end
これについては、 IEEE Std 1800-2012 (たとえば、セクション12.7.1 forループ)で説明されています。
現在のシステムVerilog構文を使用できる場合、これは機能するはずです。
always_ff @(posedge clk or posedge reset)
begin
if(reset) begin
m <= '{default:2'b00};
end
else
...
end
1800-2012 IEEE標準 のセクション5.11(配列リテラル)を参照してください。
これは実際には、forループが使用されることを意図した1つの場所です。
for (i=0; i<8; i++)
begin
m[i] <= 2'b00;
end