Menu
Coddy logo textTech

Dumpfile And Dumpvars

Часть раздела Основы путешествия по Verilog на Coddy. Урок 76 из 90.

Waveform — это визуальное представление изменений сигналов во времени. Waveform показывает, как сигналы (например, clk, a, b, out) изменяются во время симуляции. Горизонтальная ось показывает время, а вертикальная ось показывает значения сигналов (0, 1, X, Z).
 

$dumpfile и $dumpvars — системные задачи, используемые для создания файла waveform (VCD-файла), который можно просматривать в таком просмотрщике waveform, как GTKWave. VCD расшифровывается как Value Change Dump. Это файл, в котором записываются все изменения сигналов во время симуляции. Вы можете открыть этот файл в просмотрщике waveform, чтобы визуально увидеть сигналы.

$dumpfile

$dumpfile задаёт имя файла waveform для создания.

Синтаксис:

$dumpfile("filename.vcd");

Пример:

$dumpfile("my_waveform.vcd");

Это создаёт файл с именем my_waveform.vcd.

$dumpvars

$dumpvars указывает, какие сигналы записывать в файл waveform.

Синтаксис:

$dumpvars(level, module_name);
ПараметрЗначение
levelСколько уровней иерархии сохранить (0 = все уровни)
module_nameИз какого модуля сохранить сигналы

Примечание: иерархия означает модули внутри других модулей. Использование 0 записывает все сигналы из верхнего модуля и каждого модуля внутри него, тогда как 1 записывает только сигналы из верхнего модуля.

Распространённое использование

initial begin
  $dumpfile("dump.vcd");
  $dumpvars(0, testbench);
end
  • $dumpfile("dump.vcd") → создаёт файл с именем dump.vcd
  • $dumpvars(0, testbench) → записывает все сигналы в модуле testbench и всех подмодулях

Пример с тестовым модулем

module or_gate (
  input x,
  input y,
  output z
);
  assign z = x | y;
endmodule

module testbench;
  reg x, y;
  wire z;
  
  or_gate dut (
    .x(x),
    .y(y),
    .z(z)
  );

  initial begin
    $dumpfile("dump.vcd");
    $dumpvars(0, testbench);
    
    $display("Creating waveform file...");
    
    x = 0; y = 0; #10;
    x = 0; y = 1; #10;
    x = 1; y = 0; #10;
    x = 1; y = 1; #10;
    
    $finish;
  end
endmodule

Примеры уровня dumpvars

levelЧто записывается
0Все сигналы в модуле и всех sub-модулях
1Только сигналы в указанном модуле (не в sub-модулях)
challenge icon

Задание

Добавьте отсутствующие операторы $dumpfile и $dumpvars, чтобы создать файл waveform.

Что нужно сделать:

  1. Добавьте $dumpfile, чтобы создать файл с именем waveform.vcd
  2. Добавьте $dumpvars, чтобы сохранить все сигналы в модуле testbench

Попробуйте сами

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

module testbench;
  reg a, b;
  wire c;
  
  and_gate dut (
    .a(a),
    .b(b),
    .c(c)
  );

  initial begin
    // TODO: Добавьте $dumpfile для создания "waveform.vcd"
    
    
    // TODO: Добавьте $dumpvars для дампа всех сигналов в testbench
    // Подсказка: $dumpvars(0, testbench);
    
    if ($test$plusargs("vcd")) begin
        $display("VCD file created successfully");
    end
    
    $display("Simulation running...");
    
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    
    $display("Simulation complete. Open waveform.vcd");
    $finish;
  end
endmodule
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog