Verilog 如何查看内存波形?

Verilog 如何查看内存波形?,verilog,waveform,hdl,Verilog,Waveform,Hdl,我无法使用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] me

我无法使用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
模块内部存储器(
输出[31:0]hr数据,
输入mem_enable,
输入[31:0]haddr,
输入[31:0]数据,
输入hwrite,
输入hreset,
输入hclk
);

reg[31:0]内存[0:1023];// 您需要先将内存转储到VCD文件中。我熟悉的两个模拟器需要额外的模拟选项,以便将内存转储到VCD中;也许你的也是。

我知道这是一个老问题,但我最近不得不用Icarus/GTKWave查看课程期末专题的模拟内存,并想为阅读此问题的任何人回答这个问题。我在Icarus Verilog可移植性说明中找到了答案(见来源)

使用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
模块顶部;
整数idx;//循环需要整数
reg[7:0]数组[2:0];
初始开始
对于(idx=0;idx<2;idx=idx+1)$dumpvars(0,数组[idx]);
...
结束
端模

来源:(转储数组词)

在你的模拟器文档中查找“VCD”,然后转储你正在模拟的顶级节点。我使用的是icarus verilog。嗯,我想我得弄清楚这个。无论如何,谢谢你的回答。我已经阅读了Icarus Verilog的文档。可悲的是,它没有帮助。有可能实施一个PLI程序来转储内存吗?