如何查看内存波形?

e19*_*001 2 verilog waveform hdl

我无法memory使用gtkwave 查看:

    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
Run Code Online (Sandbox Code Playgroud)

您有什么建议来查看波形memory

或者如何在gtkwave或任何.vcd /波形查看器中显示二维数组?

小智 10

我知道这是一个老问题,但我最近不得不用Icarus/GTKWave查看模拟记忆,用于课程最终项目,并希望为阅读此问题的任何人回答这个问题.我能够在Icarus Verilog Portability笔记上找到答案(参见来源).

使用Icarus,您需要转储要显式查看的每个数组字(内存位置):

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

您可以使用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
Run Code Online (Sandbox Code Playgroud)

资料来源:http://iverilog.wikia.com/wiki/Verilog_Portability_Notes(倾倒数组字)


too*_*lic 3

您需要先将内存转储到VCD文件中。我熟悉的 2 个模拟器需要额外的模拟选项才能将内存转储到 VCD 中;也许你的也是如此。