Как просмотреть форму волны памяти? - PullRequest
2 голосов
/ 25 ноября 2011

Я не могу просмотреть 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

Что вы можете предложить для просмотра формы волны memory?

Или как отобразить двумерный массив в gtkwave или в любом .vcd / Waveform Viewer?

Ответы [ 2 ]

10 голосов
/ 13 декабря 2013

Я знаю, что это старый вопрос, но недавно мне пришлось просматривать смоделированную память с помощью 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

Источник: http://iverilog.wikia.com/wiki/Verilog_Portability_Notes (Сброс слов массива)

3 голосов
/ 26 ноября 2011

Вам необходимо сначала сбросить память в файл VCD.2 симулятора, с которыми я знаком, требуют дополнительных опций симуляции для сброса памяти в VCD;возможно, ваш тоже.

...