在 Verilog 中初始化数组

Initializing arrays in Verilog

如何初始化数组Save_state?此语句在输出中给出 X 值:

reg [9:0] count 
 reg [9:0] Save_state [0: 1024]; 

 always @ (posedge Clock )
 Count <=count+1 ;
 Save_state[count] <=count ;

您可以使用重置端口来初始化countsave_state,例如以下代码:

integer i;
reg [9:0] count;
reg [9:0] save_state [0:1024];

always @(posedge clock or posedge reset) begin
    if (reset) begin
        count <= 0;
        for (i=0; i<=1024; i=i+1)
            save_state[i] <= 0;
    end
    else begin
        count <= count + 1;
        save_state[count] <= count;
    end
end

else 块中的两个语句在 always 块的末尾同时应用。

您也可以使用初始块。这在仿真中是允许的,并且在某些架构上是可综合的(Xilinx FPGA 和 CPLD 支持寄存器初始化)

reg [9:0] count 
reg [9:0] Save_state [0: 1024]; 

integer i;
initial begin
  count = 0;
  for (i=0;i<=1024;i=i+1)
    Save_state[i] = 0;
end

always @ (posedge Clock ) begin
   count <= count + 1;
   Save_state[count] <= count;
end

虽然对于这个特定示例,其中 Save_state 数组的元素将始终具有相同的值,但您可以这样做(可在 Xilinx 和 Altera 上综合,AFAIK):

reg [9:0] Save_state [0: 1024]; 

integer i;
initial begin
  for (i=0;i<=1024;i=i+1)
    Save_state[i] = i[9:0];
end

并且在您开始模拟时,Save_state 中已经存储了值 0,1,2,...,1023。