GTKWAVE(1)
π GTKWAVE(1) β Simulation Wave Viewer π
okay so this is the manual page for gtkwave(1), and bestie, if you're about to open up a waveform viewer you came to the right place. grab a snack, we're going in π«Ά
β¨ NAME β¨
gtkwave β the visualization tool for VCD, LXT, LXT2, VZT, FST, and GHW files. that's it, that's the whole vibe π
π SYNTAX π
gtkwave [option]... [DUMPFILE] [SAVEFILE] [RCFILE]
πΈ DESCRIPTION πΈ
okay so, gtkwave is literally the visualization tool for VCD, LXT, LXT2, VZT, FST, and GHW. and if you're like "what are those" β don't worry, I got you:
- VCD is an industry standard simulation dump format. the classic. the main character.
- LXT, LXT2, VZT, and FST were designed specifically for use with
gtkwave. they're the home team π - GHW is the native VHDL format generated by GHDL.
and here's the tea π: native dumpers already exist in Icarus Verilog and in the open source version of VeriWell for the LXT formats β so you do NOT need to do the whole conversion song and dance with vcd2lxt(1) or vcd2lxt2(1) in order to take direct advantage of LXT with those simulators. no cap, it just works.
also! AET2 files can be processed too, as long as libae2rw is available. but ngl that one's only of interest to the people using IBM EDA toolsets. if that's you, hi bestie, love your work π
π OPTIONS π
one bullet per flag, no skips, we're doing all of them because that's what icons do π
-n,--nocli<directory name> β use a file requester to pick the dumpfile name. cute, clicky, no typing.-f,--dump<filename> β specify the dumpfile name. plain and simple.-F,--fastloadβ generate/use VCD recoder fastload files. this is similar to the-g,--gigaoption, except the spill file that gets generated is not deleted. so when you reload the VCD file another time β whether by pressing the reload button or by re-invokinggtkwaveat a later time β it uses that generated spill file instead of reading the value change section of the VCD file. this speeds up reloads on large files greatly because only the variable declaration section needs to be parsed. note that the spill file contains the file size and modification date of the VCD file, so it can detect if it's stale and needs to be regenerated. iconic.-o,--optimizeβ optimize VCD to FST. this automatically callsvcd2fst(1)to do the file conversion. this option is highly recommended with large VCD files in order to cut down on the memory usage required for file viewing. can be used in conjunction with-v,--vcd.-a,--save<filename> β specify the savefile name. useful suffixes for desktop integration are.gtkwand.sav(β οΈ the.savone is deprecated).-A,--autosavenameβ assume the savefile is a suffix modified dumpfile name, i.e. remove the suffix and replace it with".gtkw".-r,--rcfile<filename> β specify an override.gtkwavercfilename.-l,--logfile<filename> β specify the simulation logfile name. you can specify multiple logfiles by preceding each one with the command flag. and the cute part? by selecting the numbers in the text widget, the marker will immediately zoom to that specific time value. obsessed β¨-d,--defaultskipβ if there is no.gtkwavercfile in the home directory or current directory, and it's not explicitly specified on the command line, then when this option is enabled: do not use an implicit configuration file, and instead default to the old"whitescreen"behavior. the vibes of yesteryear.-D,--dualid<which> β specify multisession identifier information. the format of"which"ism+nnnnnnnnwhere m is the session number 0 or 1 and nnnnnnnn is a hexadecimal value indicating the shared memory ID of an array of twogtkwave_dual_ipc_tdata structures. the intended use of this flag is for front ends such astwinwave(1). (yes, twinwave. two waves. slay π )-s,--start<time> β specify the start time for LXT2/VZT block skip.-e,--end<time> β specify the end time for LXT2/VZT block skip.-t,--stems<filename> β specify a stems file for source code annotation. this will automatically launch thertlbrowse(1)helper process. seexml2stems(1)for info on stems file generation.-c,--cpu<numcpus> β specify the number of CPUs available for parallelizable ops (e.g., block prefetching on VZT reads). multitasking queen behavior π§-N,--nowmβ disable window manager for most windows. the intended use of this is to be used in conjunction with the--scriptoption, however this also can be used to reparent into an alternate window manager.-M,--nomenusβ do not render the menubar. this is mainly used for making a restricted applet that cannot initiate file I/O on its own, however it also can be used as a workaround in earlier versions of GTK+ that do not handle GTKSocket/GTKPlug focus interactions properly. π-H,--noheaderβ do not use headerbars (the ones that provide hamburger style menus rendered in the toolbar), but revert back to non-headerbar operation. this is for GTK 3 only.-S,--script<filename> β specify the Tcl command script file for execution.-T,--tcl_init<filename> β specify the Tcl command script to be loaded on startup. this implies the--wishcommand flag.-W,--wishβ enable the Tcl command line on stdio. all script commands can be typed in on stdin.-R,--repscript<filename> β specify the Tcl command script for periodic execution.-P,--repperiod<value> β specifies the delay in milliseconds between successive executions of the repscript. default is 500.-X,--xid<XID> β specify the XID (in hexadecimal) of the window for a GtkPlug to connect to.GTKWavedoes not directly render to a window, but instead renders into a GtkPlug expecting a GtkSocket at the other end. β οΈ note that there are issues with accelerators working properly, so menus are disabled in the componentized version ofGTKWavewhen it functions as a plug-in.-1,--rpcid<RPCID> β specify the RPCID of the GConf (or GSettings) session. this is a decimal value of zero or greater, and it's the identifier used by GConf to know what update data to listen to. β οΈ this option only works if--with-gconf(or--with-gsettings) was specified during./configure.-2,--chdir<DIRNAME> β specify a new current working directory. this is typically used in OSX to rungtkwaveif it was compiled and placed in an.appbundle. β οΈ note that if the environment variableGTKWAVE_CHDIRis defined, the argument is a dummy argument. this is to support OSX, because theopencommand has difficulty passing spaces as command line arguments, and it's possible forpwd(1)to return spaces. tragic, honestly.-3,--restoreβ restore the previous default (0) or--rpcidRPCID numbered session. this only works for one dumpfile, savefile, rcfile, and current working directory, so it has the effect of restoring the most recently loaded file. if used in conjunction with the--rpcidoption, that option must be specified earlier in the command line than the--restoreoption. if RPCID is not specified, then the default of 0 is used. β οΈ this option only works if--with-gconf(or--with-gsettings) was specified during./configure. and heads up: for GSettings, limitations in its implementation allow it to only restore the previous session.-4,--rcvarβ specify single rc variable values individually. these take effect after any other rc variables have been loaded from internal defaults or from configuration files. order matters, bestie.-5,--sstexcludeβ specify the sst exclusion filter filename.-6,--darkβ setgtk-application-prefer-dark-theme = TRUE. dark mode era π€ iconic, no notes.-7,--saveonexitβ at exit, a requester is brought up to prompt the user to write a save file. canceling the requester prevents it from writing the file. so polite of it.-I,--interactiveβ specifies that"interactive"VCD mode is to be used, which allows a viewer to navigate a VCD trace whileGTKWaveis processing the VCD file. when this option is used, the filename is overloaded such that it is the hexadecimal value for the shared memory ID of a writer. π‘ note that the shared memory ID can be passed straight from stdin by using the--vcdoption; see the manpage forshmidcat(1)for more details.-L,--legacyβ specifies that the viewer should use legacy VCD mode rather than the VCD recoder. β οΈ note that using legacy mode will require considerably more memory than the recoder, and its use is discouraged for very large traces. proceed with caution bestie.-g,--gigaβ specifies that the viewer should use gigabyte mempacking when recoding (possibly slower). this is equivalent to setting thevlist_spillandvlist_prepackflags in the rc file.-C,--comphierβ specifies that the viewer should use compressed hierarchy names when loading the dumpfile (available for VCD recoder, LXT, LXT2, and VZT). this will use less memory, at the expense of compression/decompression delay. tradeoffs, we love them.-v,--vcdβ use stdin as a VCD dumpfile. piping queen π-O,--output<filename> β specify the filename for stdout/stderr redirect. to disable messages to the console, use/dev/nullas the filename. shhh π€«-z,--slider-zoomβ enable slider stretch zoom for the horizontal time slider. clicking then dragging the very left or right edge of the slider can be used to provide fine-grained real-time zooming. so satisfying fr fr β¨-V,--versionβ display the version banner, then exit.-h,--helpβ display help, then exit.-x,--exitβ exit after loading the trace (for loader benchmarking). speedrun mode πββοΈ
π FILES π
~/.gtkwavercβ (see manpagegtkwaverc(5)) your personal config, your personal vibe.
π EXAMPLES π
to run this program the standard way, type:
gtkwave dumpfile.vcd
alternatively you can run it with a save file as:
gtkwave dumpfile.vcd dumpfile.gtkw
to run interactively using shared memory handle 0x00050003:
gtkwave -I 00050003 dumpfile.gtkw
to pick up a dumpfile automatically from a save file (e.g., when launching from an icon):
gtkwave --save dumpfile.gtkw
to run from the app bundle gtkwave.app in OSX using /bin/sh:
GTKWAVE_CHDIR=`pwd`;export GTKWAVE_CHDIR;open -n -W -a gtkwave
--args --chdir dummy --dump des.vzt --save des.gtkw
alternatively, run the following Perl script gtkwave.app/Contents/Resources/bin/gtkwave to process command line arguments from OSX shell scripts.
β οΈ note that to pass non-flag items which start with a dash, it is required to specify--in order to turn off flag parsing. a second--will disable parsing of any following arguments, such that they can be passed on to Tcl scripts and retrieved viagtkwave::getArgv. double dash = double the power, iykyk.
command line options are not necessary for representing the dumpfile, savefile, and rcfile names. they are merely provided to allow specifying them out of order. so chill of them honestly.
π BUGS π
okay bestie, listen, even iconic software has β¨quirksβ¨ and we're gonna spill all the tea:
- On AIX, you gotta add
-bmaxdata:0x80000000(or-bmaxdata:0xd0000000/dsaif you're on AIX 5.3) to your compiler flags forxlcif you want GTKWave to be able to access more than 256MB of virtual memory. The value shown lets the VMM use up to 2GB (or 3.25GB on AIX5.3). You might lowkey need this for very large traces, no cap. - Shift and Page operations using the wave window hscrollbar? Yeah, they may be nonfunctional as you move away from the dump start for very large traces π. Like, a trace that goes out to 45 billion ticks has been known to exhibit this problem. It's giving precision loss, fr fr β this stems from using the
gfloatelement of the horizontal slider to encode the time value for the left margin, so the result is a loss of precision for very large values. If this is a problem, just use the hotkeys or buttons at the top of the screen, periodt. - When running under Cygwin, it is required to enable
Cygserverif shared memory IPC is being used π. Specifically, this occurs whenrtlbrowse(1)is launched as a helper process. See the Cygwin documentation for more info on how to enableCygserver.
π AUTHORS π
Anthony Bybell <bybell@rocketmail.com> β the main character who made all this happen, we stan π
π SEE ALSO π
gtkwaverc(5)lxt2vcd(1)vcd2lxt(1)vcd2lxt2(1)vzt2vcd(1)vcd2vzt(1)xml2stems(1)rtlbrowse(1)twinwave(1)shmidcat(1)
and that's a wrap on the whole page, bestie!! π this was version 3.3.126, dated 3.3.126, and written by the one and only Anthony Bybell π¦ go forth and slay your waveforms π β¨
π¦ where this page comes from
- arch rolling: gtkwave 3.3.128-1 Β· GPL-2.0-or-later AND MIT
- epel 10: gtkwave 3.3.128-1.el10_3 Β· GPL-2.0-or-later
- fedora 44: gtkwave 3.3.126-2.fc44 Β· GPL-2.0-or-later
- fedora 44: gtkwave 3.3.127-1.fc44 Β· GPL-2.0-or-later
- nixos 26.05: gtkwave 3.3.127
- nixpkgs unstable: gtkwave 3.3.128
- ubuntu resolute: gtkwave 3.3.126-1
- ubuntu stonking: gtkwave 3.3.127-1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms