如何在Verilog的二维数组中将所有位设置为0?

Mic*_*ael 9 arrays verilog multidimensional-array

我已经构建了一个8*2bits阵列来表示Verilog中的一块内存

reg [1:0] m [0:7]
Run Code Online (Sandbox Code Playgroud)

该存储器有一个复位信号,如果复位为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
Run Code Online (Sandbox Code Playgroud)

too*_*lic 7

使用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
Run Code Online (Sandbox Code Playgroud)

这在IEEE Std 1800-2012中描述(例如,第12.7.1节"for循环").


ngu*_*rie 7

如果您可以使用当前的系统 verilog 语法,那么这应该有效:

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

请参阅1800-2012 IEEE 标准的第 5.11 节(数组文字)。

  • @Michael Presentation 关于设计中有用的 SV 功能:http://sutherland-hdl.com/papers/2013-SNUG-SV_Synthesizable-SystemVerilog_presentation.pdf 和 IEEE 标准在我的回答中链接到 (2认同)