GTKWave is a fully featured GTK+ based waveform viewer which reads LXT, LXT2, VZT, and GHW files as well as standard Verilog VCD/EVCD files and allows their viewing. GTKWave is developed for Linux, with ports for various other operating systems including Microsoft Windows (either natively as a Win32 application or via Cygwin) and Mac OS X.
Because GTKWave is designed to handle many signals at once, it has three signal searching modes (Regular Expressions, Hierarchy, and Tree) as well as the ability to display data in many different formats such as signed or unsigned decimal, hexadecimal, octal, ASCII, real number, binary, and even analog. Source code annotation is possible for Verilog; a parser currently does not exist to do this for VHDL however it would not be difficult to integrate such a feature.
The GTKWave 1.3 branch is the only branch currently being developed. A 2.0.x branch, which was designed as a visualization tool for the asynchronous logic tool Balsa was being developed at one time by Advanced Processor Technologies Group (APT), but this version is no longer in development. In order to reduce confusion as to what version is newer, the 1.3 branch has been actively developed such that new features like source code annotation, embedding of the viewer as a GtkPlug plugin applet in other applications such as TwinWave, and partial loading of dumpfiles have been added and the version number has been promoted to 3.0.x. Note that users who intend to use Balsa must still use the 2.0.x branch as this functionality has not been ported to 3.0.x.
The viewer supports not only post-mortem viewing of VCD files but also interactive viewing of VCD data. With this feature, the output of a simulator can go to a named pipe which can then be fed to the viewer through a shared memory proxy. The user can then navigate the dump as it is being written to the fifo, watch it build in realtime, etc. Coupled with the GtkPlug mechanism, this allows for the viewer to be integrated with other simulators in order to provide an interactive environment all in one window.
shmidcat is a utility provided with GTKWave that facilitates the partial loading of dumpfiles. It uses a shared memory interface in order to provide high performance data sharing with Verilog simulators.
Newer versions of the viewer dynamically recode the signals in VCD files into a series of loosely-packed LZSS variant streams which feed into VList structures which are post-compressed with zlib and then optionally dumped off to a software-managed swap file. This increases viewer capacity significantly such that it is no longer required to run the viewer on a 64-bit machine in order to read multi-gigabyte VCD files, and in addition per-signal access latency when the swap file is used is O(lg n) (with n being the number of transitions for a given signal) as a side-effect of using VLists so performance with a swap file degrades slightly or can even improve due to the decreased possibility of thrashing.