2

memorygtkwave を使用して表示できません:

    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/waveform ビューアで 2 次元配列を表示する方法は?

4

2 に答える 2

11

これは古い質問であることは知っていますが、最近、コースの最終プロジェクトで Icarus/GTKWave を使用してシミュレートされたメモリを表示する必要があり、この質問を読んでいる人のためにこれに答えたいと思いました。Icarus Verilog Portability notes (ソースを参照) で答えを見つけることができました。

Icarus では、明示的に調べたい各配列ワード (メモリ位置) をダンプする必要があります。

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 (配列ワードのダンプ)

于 2013-12-13T08:22:08.570 に答える
3

最初にメモリを VCD ファイルにダンプする必要があります。私がよく知っている 2 つのシミュレーターでは、メモリを VCD にダンプするための追加のシミュレーション オプションが必要です。おそらくあなたもそうです。

于 2011-11-26T01:27:49.200 に答える