From bd94c72472ea188eab0225e7cac891b603b0575d Mon Sep 17 00:00:00 2001 From: Stephen Williams Date: Mon, 18 Apr 2022 20:01:59 -0700 Subject: [PATCH] Document using gtkwave with Icarus Verilog Recover the Icarus Verilog documentation for using GTKWave. It needs a bit of rework, and formatting. --- Documentation/usage/GTKWave_Example2.png | Bin 0 -> 40810 bytes Documentation/usage/gtkwave.rst | 118 +++++++++++++++++++++++ Documentation/usage/index.rst | 1 + 3 files changed, 119 insertions(+) create mode 100644 Documentation/usage/GTKWave_Example2.png create mode 100644 Documentation/usage/gtkwave.rst diff --git a/Documentation/usage/GTKWave_Example2.png b/Documentation/usage/GTKWave_Example2.png new file mode 100644 index 0000000000000000000000000000000000000000..2de993933e9ad55768a88dc74d3fd1e4255141de GIT binary patch literal 40810 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

4l&z6Vq>2yp8 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%0D{`84kZK0na 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 literal 0 HcmV?d00001 diff --git a/Documentation/usage/gtkwave.rst b/Documentation/usage/gtkwave.rst new file mode 100644 index 000000000..04fdff3ff --- /dev/null +++ b/Documentation/usage/gtkwave.rst @@ -0,0 +1,118 @@ + +Waveforms With GTKWave +====================== + +GTKWave is a VCD waveform viewer based on the GTK library. This viewer support +VCD and LXT formats for signal dumps. GTKWAVE is available on github +`here `_. Most Linux distributions already +include gtkwave prepackaged. + +.. image:: GTKWave_Example2.png + +Generating VCD/FST files for GTKWAVE ------------------------------------ +Waveform dumps are written by the Icarus Verilog runtime program vvp. The user +uses $dumpfile and $dumpvars system tasks to enable waveform dumping, then the +vvp runtime takes care of the rest. The output is written into the file +specified by the $dumpfile system task. If the $dumpfile call is absent, the +compiler will choose the file name dump.vcd or dump.lxt or dump.fst, depending +on runtime flags. The example below dumps everything in and below the test +module: + +.. code-block:: verilog + + // Do this in your test bench + + initial + begin + $dumpfile("test.vcd"); + $dumpvars(0,test); + end + +By default, the vvp runtime will generate VCD dump output. This is the default +because it is the most portable. However, when using gtkwave, the FST output +format is faster and most compact. Use the "-fst" extended argument to +activate LXT output. For example, if your compiled output is written into the +file "foo.vvp", the command: + +.. code-block:: console + + % vvp foo.vvp -fst + +will cause the dumpfile output to be written in FST format. Absent any +specific $dumpfile command, this file will be called dump.fst, which can be +viewed with the command: + +.. code-block:: console + + % gtkwave dump.fst + +A Working Example +----------------- + +First, the design itself: + +.. code-block:: verilog + + module counter(out, clk, reset); + + parameter WIDTH = 8; + + output [WIDTH-1 : 0] out; + input clk, reset; + + reg [WIDTH-1 : 0] out; + wire clk, reset; + + always @(posedge clk) + out <= out + 1; + + always @reset + if (reset) + assign out = 0; + else + deassign out; + + endmodule // counter + +Then the simulation file: + +.. code-block:: verilog + + module test; + + /* Make a reset that pulses once. */ + reg reset = 0; + initial begin + $dumpfile("test.vcd"); + $dumpvars(0,test); + + # 17 reset = 1; + # 11 reset = 0; + # 29 reset = 1; + # 5 reset =0; + # 513 $finish; + end + + /* Make a regular pulsing clock. */ + reg clk = 0; + always #1 clk = !clk; + + wire [7:0] value; + counter c1 (value, clk, reset); + + initial + $monitor("At time %t, value = %h (%0d)", + $time, value, value); + endmodule // test + +Compile, run, and view waveforms with these commands: + +.. code-block:: console + + % iverilog -o dsn counter_tb.v counter.v + % vvp dsn + % gtkwave test.vcd & + +Click on the 'test', then 'c1' in the top left box on GTKWAVE, then drag the +signals to the Signals box. You will be able to add signals to display, +scanning by scope. diff --git a/Documentation/usage/index.rst b/Documentation/usage/index.rst index 7aa16ec38..e6a5eeda4 100644 --- a/Documentation/usage/index.rst +++ b/Documentation/usage/index.rst @@ -15,6 +15,7 @@ Icarus Verilog. command_files verilog_attributes vvp_flags + gtkwave vpi ivl_target reporting_issues