为什么数组不能为wdata赋值?

Why the array cannot assign value for wdata?

我写了一个测试,当我写入数据时,另一个数组会保留数据以与红色数据进行比较正确与否。但是,数组只打印 x 给我。

reg [31:0]  wdata;
reg [31:0]  array_wdata [0:15];
wire [31:0] rdata;

task check_read; 
      begin
      integer i;

     for (i=0; i<16; i+=1)
       begin
          @(negedge clk) begin
         wr_en_i = 1;
         wdata = wdata + 1;
         array_wdata[i] = wdata;
          end
       end

     for (i=0; i<16; i+=1)
       begin
          $display( "\tArray data[i]=%0d", array_wdata[i]);
       end

end
endtask

您将 wdata 声明为 reg,这意味着它将具有初始值 X。由于您只看到 X 被打印出来,这可能意味着您没有分配初始值第一次调用 check_read 任务之前的值。另外,X加1,结果还是X。

要去除这些 X,您需要在调用任务之前设置 wdata。例如:

module tb;

reg wr_en_i;
reg [31:0]  wdata;
reg [31:0]  array_wdata [0:15];
wire [31:0] rdata;
bit clk;
always #5 clk++;

task check_read; 
      begin
      integer i;

     for (i=0; i<16; i+=1)
       begin
          @(negedge clk) begin
         wr_en_i = 1;
         wdata = wdata + 1;
         array_wdata[i] = wdata;
          end
       end

     for (i=0; i<16; i+=1)
       begin
          $display( "\tArray data[i]=%0d", array_wdata[i]);
       end

end
endtask

initial begin
    wdata = 'h5555;
    check_read();
    #500 $finish;
end

endmodule

输出:

Array data[i]=21846
Array data[i]=21847
Array data[i]=21848
Array data[i]=21849
Array data[i]=21850
Array data[i]=21851
Array data[i]=21852
Array data[i]=21853
Array data[i]=21854
Array data[i]=21855
Array data[i]=21856
Array data[i]=21857
Array data[i]=21858
Array data[i]=21859
Array data[i]=21860
Array data[i]=21861