Environment for working with HDLs. This builds a number of tools from source and relies on some scripts to facilitate HDL work.
All the programs are fetched (as a git
submodule, via svn
, or as a direct download) and built. You can do this with the included Makefile targets for individual tools:
verilator
-- Build Verilatorgtkwave
-- Build GTKWave
Additional targets include:
build-all
-- Build all the toolsusage
-- list all available build targetsclean-installed
-- remove the installed tools in./opt/
(this will not respectPREFIX
so that you don't nuke your /opt directory)clean-downloaded
-- remove all downloaded program sourcesmrproper
-- remove downloaded program contents
Tools will, by default, be installed in ./opt/
. However, you can pass a PREFIX
option to the Makefile if for whatever reason you want to install these somewhere else (not advised).
Verilog to C++ compiler. This is not required to be built for working with Rocket Chip (it will build its own version of Verilator).
Open source (GPL2) waveform viewer with TCL integration.
Perl tools for working with Verilog netlists.
TCL script that, when passed to GTKWave, will generate a saved waveform view (a .gtkw
file) that has all the signals in a given VCD file grouped by module. An example invocation would be:
gtkwave -S addWavesRecursive.tcl dump.vcd > dump.gtkw
You can then start GTKWave using this saved view with:
gtkwave dump.vcd dump.gtkw
After 904555632a5131686c20921593ba7010efece916, this is O(n log n)
in the number of signals. Previously, this was O(n^2)
.
Perl script to prune a VCD file to only include specific modules (and all their submodules). An example invocation would be:
./vcd-prune dump.vcd -m MyModule -o dump-short.vcd
This will only dump signals contained in MyModule or its submodules. For testing a small part of a huge design (e.g., a RoCC unit attached to Rocket Chip), this can cut down dramatically on the size of the VCD file and the processing time of addWavesRecursive.tcl
and startup time of a waveform viewer.
Verilator
-- Verilog to C++ compilerGTKWave
-- Lightweight waveform viewerscripts/
addWavesRecursive.tcl
-- TCL script for GTKWave that populates the waveform viewer with signals nested into the module hierarchy
Bash script that takes care of the boilerplate operations necessary to launch GTKWavewith addWavesRecursive
.
This comes up as these tools are intended to be used on large amounts of data
Tool | Complexity | What is N? | Critical Region |
---|---|---|---|
addWavesRecursive.tcl |
n log n | number of signals | tree merge |
vcd-prune |
n | number of lines | regex |
gtkwave-helper |