どのようにメモリ波形を表示するには?

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

2

2 答え

私はこれが古い質問だと知っていますが、最近コースの最終プロジェクトのためにIcarus/GTKWaveでシミュレートされたメモリを見なければなりませんでした。私は答えをIcarus Verilogポータビリティノート(ソースを参照)で見つけることができました。

イカルスでは、あなたが明示的に見たい各配列ワード(メモリ位置)をダンプする必要があります:

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

8
追加された

最初にメモリをVCDファイルにダンプする必要があります。私が慣れ親しんでいる2つのシミュレータには、メモリをVCDにダンプするための余分なシミュレーションオプションが必要です。おそらくあなたもそうです。

3
追加された
あなたのシミュレータのドキュメントで "VCD"を探し、シミュレートしているトップレベルのノードをダンプします。
追加された 著者 Ross Rogers,
私はイカルスのVerilogを使用しています。まあ、私はこれを理解しなければならないと思います。とにかく答えてくれてありがとう。
追加された 著者 e19293001,
私はIcarus Verilogの文書を読んでいました。残念ながら、それは助けにはなりませんでした。
追加された 著者 e19293001,
メモリをダンプするためのPLIプログラムを実装することは可能ですか?
追加された 著者 e19293001,