web-dev-qa-db-ja.com

Verilogの2次元配列ですべてのビットを0に設定するにはどうすればよいですか?

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
9
Michael

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ループ)で説明されています。

7
toolic

現在のシステムVerilog構文を使用できる場合、これは機能するはずです。

always_ff @(posedge clk or posedge reset)
begin
  if(reset) begin
    m <= '{default:2'b00};
  end
  else
    ...
end

1800-2012 IEEE標準 のセクション5.11(配列リテラル)を参照してください。

4
nguthrie

これは実際には、forループが使用されることを意図した1つの場所です。

for (i=0; i<8; i++)
  begin
    m[i] <= 2'b00;
  end
1
Russell