0
0
VerilogHow-ToBeginner · 3 min read

How to View Waveform from Verilog Simulation Easily

To view waveforms from a Verilog simulation, use the system tasks $dumpfile to specify the output file and $dumpvars to record signal changes. Run your simulation, then open the generated .vcd file in a waveform viewer like GTKWave to see the signal transitions visually.
📐

Syntax

Use these two main system tasks inside an initial block in your testbench:

  • $dumpfile("filename.vcd"); - sets the name of the waveform file.
  • $dumpvars(0, top_module_name); - records all signals in the specified module and its submodules.

These commands tell the simulator to save signal changes to a file you can open later.

verilog
initial begin
  $dumpfile("waveform.vcd");
  $dumpvars(0, testbench);
end
💻

Example

This example shows a simple testbench that generates a clock and resets a signal, while dumping waveforms to waveform.vcd. After running the simulation, open waveform.vcd in GTKWave or another viewer to see the signal changes.

verilog
`timescale 1ns/1ps
module testbench;
  reg clk = 0;
  reg reset = 1;

  // Clock generation
  always #5 clk = ~clk;

  initial begin
    $dumpfile("waveform.vcd");
    $dumpvars(0, testbench);

    #10 reset = 0;
    #100 $finish;
  end
endmodule
Output
# Simulation runs and creates waveform.vcd file
⚠️

Common Pitfalls

  • Forgetting to call $dumpfile and $dumpvars means no waveform file is created.
  • Using $dumpvars with incorrect module name will record no signals.
  • Not running the simulation long enough ($finish) can result in incomplete waveforms.
  • Trying to open the waveform file before simulation finishes will fail.

Always verify the waveform file exists after simulation and open it with a compatible viewer.

verilog
initial begin
  // Wrong: missing $dumpfile and $dumpvars
  #100 $finish;
end

// Correct way:
initial begin
  $dumpfile("waveform.vcd");
  $dumpvars(0, testbench);
  #100 $finish;
end
📊

Quick Reference

CommandPurpose
$dumpfile("file.vcd")Set waveform output file name
$dumpvars(level, module)Record signals from module and submodules
$finishEnd simulation
Open .vcd file in GTKWaveView waveform visually

Key Takeaways

Use $dumpfile and $dumpvars inside an initial block to create waveform files.
Run the simulation long enough and call $finish to complete waveform recording.
Open the generated .vcd file with a waveform viewer like GTKWave to see signals.
Ensure the module name in $dumpvars matches your top-level testbench module.
Without these steps, no waveform file will be created or viewable.