2011-11-25 113 views
2

使用gtkwave我無法查看memory如何查看記憶波形?

module internal_memory(
     output [31:0] hrdata, 
     input mem_enable, 
     input [31:0] haddr, 
     input [31:0] hwdata, 
     input hwrite, 
     input hreset, 
     input hclk 
    ); 
     reg [31:0] memory [0:1023]; // <-------------- can't find its waveform 
     reg [31:0] internal_hrdata; 

     always @(posedge hclk, hreset) begin 
      if (!hreset) begin 
       internal_hrdata <= 32'h0000_0000; 
      end 
      else begin 
       if (mem_enable) begin 
        if (hwrite) begin 
         memory[haddr] <= hwdata; 
        end 
        else begin 
         internal_hrdata <= memory[haddr]; 
        end 
       end 
      end 
     end 

     assign hrdata = internal_hrdata; 

    endmodule 

你能提出來查看memory波形?

或者如何在gtkwave或任何.vcd /波形查看器中顯示二維數組?

回答

3

您需要先將內存轉儲到VCD文件中。我熟悉的2個模擬器需要額外的模擬選項,用於將記憶轉儲到VCD中;也許你的也是。

+1

看着你的模擬器文檔的「VCD」,然後轉儲,你可以模擬頂級節點。 –

+0

我正在使用伊卡洛斯verilog。好吧,我想我必須弄清楚這一點。無論如何感謝您的答案。 – e19293001

+0

我已經通過了Icarus Verilog的文檔。可悲的是,它沒有幫助。 – e19293001

8

我知道這是一個古老的問題,但我最近不得不查看模擬內存與Icarus/GTKWave的課程最終項目,並希望爲任何閱讀此問題的人解答。我能夠在Icarus Verilog Portability筆記中找到答案(請參閱源文件)。

隨着伊卡洛斯,則需要轉儲每個數組字(存儲位置),要在明確一下:

module top; 
    reg [7:0] array [2:0]; 
    initial begin 
    $dumpvars(0, array[0], array[1]); 
    ... 
    end 
endmodule 

您可以自動用傾倒的所有單元的陣列中的for循環:

module top; 
    integer idx; // need integer for loop 
    reg [7:0] array [2:0]; 
    initial begin 
    for (idx = 0; idx < 2; idx = idx + 1) $dumpvars(0, array[idx]); 
    ... 
    end 
endmodule 

來源:http://iverilog.wikia.com/wiki/Verilog_Portability_Notes(傾銷陣列的話)