Imported Upstream version 20011021

parent ce7d4575
gwave was written by Steve Tell <tell@cs.unc.edu>
gwave was written by Steve Tell <tell@cs.unc.edu> or <steve@telltronics.org>
20010327
Completed the basics of having two displayed measurements by adding
a guile function and some menu code to flip between the
built-in "val(cursor1)" and "val(cursor1)-val(cursor0)" functions
for the second measurement.
20010822
Enhance file-reading to handle the spice3raw variant produced by
Silvaco's SmartSpice.
Handle log scales properly for plotting with GNU Graph.
20010911
Better handling of logscale-X, zooming and scrollbar due to a
patch from Paul Maurer
20010927
configure now rejects non-GNU versions of "graph" even if they're
earlier in $PATH
20011020
Clean abort with better error message if we can't find the scheme
files or they're fouled up
Some installation notes for gwave.
Prerequesites:
Gtk-1.2 (http://www.gtk.org/)
Guile (http://www.gnu.org/software/guile/guile.html)
Guile-Gtk (http://www.ping.de/sites/zagadka/guile-gtk/)
GNU Plotutils-2.2 or later (optional, only used for ploting/exporting)
On Red Hat 6.2 Linux, I use these RPMs:
gtk+-1.2.6-7 (included in RH6.2)
gtk+-devel-1.2.6-7 (included in RH6.2)
glib-1.2.6-7 (included in RH6.2)
glib-devel-1.2.6-7 (included in RH6.2)
guile-gtk-0.19-1
http://www.ping.de/sites/zagadka/guile-gtk/download/guile-gtk-0.19.tar.gz
guile-1.4-2sgt
http://www.telltronics.org/~tell/dist/guile-1.4-2sgt.i386.rpm
http://www.telltronics.org/~tell/dist/guile-1.4-2sgt.src.rpm
An ancient version of guile shipped with RedHat 6.2.
It is unusable with gwave.
On RedHat 7.1, I use:
gtk+-1.2.9-4 (included in RH7.1)
gtk+-devel-1.2.9-4 (included in RH7.1)
glib-1.2.9-1 (included in RH7.1)
glib-devel-1.2.9-1 (included in RH7.1)
guile-gtk-0.19-1
guile-1.4-3sgt
On RedHat 7.1, you can also use the guile-1.3.4 that comes standard.
In that case, use guile-gtk 0.18
The guile-1.4 RPMs listed above are of my own construction (you've
been warned).
CAUTION: Use only a guile-gtk known to work with whatever version of
guile you have. Here are combinations known to work:
guile guile-gtk
1.4 0.19
1.3.4 0.18
1.3.4 0.17
Mixing guile-gtk 0.19 with guile-1.3.4 definitely fails,
as does guile-gtk 0.18 with guile-1.4.
I don't yet know of any guile-gtk for the guile-1.5.x prereleases or
the upcomming new guile-1.6 release.
Gwave may work with earlier versions of guile too, but I haven't
tested this recently. The Guile and guile-gtk shipped with RedHat
Linux even as late as release 6.2 are of this ancient category, and I
haven't tried building gwave with them recently.
I recommend verifying that guile, gtk, and guile-gtk all work
individualy before trying to build gwave using them. Gtk and
guile-gtk both come with "test-gtk" programs in their respective
examples directories which are ideal for this purpose.
** Please try this before reporting guile-gtk related problems with gwave.
In order to generate postscript or PNM file output, gwave requires GNU
graph, from the GNU plotutils package. The old berkely/sysv "graph"
program sometimes found on commercial unixes doesn't work. Configure
attempts to locate GNU graph and ignore other programs named "graph"
that may be found in $PATH. If the automatic detection doesn't work,
try somthing like this:
GRAPH="/path/to/gnu/graph" ./configure ...
Then, run configure as described below.
Running gwave without installing it.
------------------------------------
After compiling, you may wish to test gwave before doing a "make install."
Gwave normally looks for its guile support files beneath
$PREFIX/share/guile in the standard guile module structure; the
complete pathnames would be somthing like
$PREFIX/share/guile/app/gwave/cmds.scm
If gwave can't find any of its startup guile code, it aborts with a
moderately useful error message.
The GWAVE_GUILE_DIR environment variable can be used to make gwave
look in an alternate directory for these guile files. Set
GWAVE_GUILE_DIR to the full pathname of the src directory in this
distribution, for example if this file is called
/home/tell/build/gwave-20000301/INSTALL, set
GWAVE_GUILE_DIR=/home/tell/build/gwave-20000301/src
Basic Installation
==================
......
# -*- mode: Makefile -*-
## Process this file with automake to produce Makefile.in
SUBDIRS=spicefile
SUBDIRS=spicefile utilities src scheme doc remote
INCLUDES=-I$(srcdir)/spicefile
bin_PROGRAMS = gwave
gwave_SOURCES = cmd.c gtkmisc.h wavewin.c draw.c \
gwave.c event.c gwave.h gtkmisc.c pixmaps.c wavelist.c dnd.c print.c
gwave_LDADD = $(srcdir)/spicefile/libspicefile.a
gwave_LDFLAGS = @GTK_LIBS@
CFLAGS = @CFLAGS@ @GTK_CFLAGS@
# TODO: get autoconf/automake to compile/link with these if we don't
# HAVE_POSIX_REGEXP: regexp.h regexp.c regerror.c regmagic.h
MOSTLYCLEANFILES = core *~
CLEANFILES = core *~
DISTCLEANFILES = core *~
MAINTAINERCLEANFILES = core *~
EXTRA_DIST=regexp.tar.gz gwave.gtkrc autogen.sh
EXTRA_DIST=autogen.sh gwave.spec TODO
# distribute some extra directories that don't have anything to build
# or install in them
dist-hook:
mkdir $(distdir)/doc
cp -p doc/* $(distdir)/doc
mkdir $(distdir)/examples
cp -p examples/* $(distdir)/examples
mkdir $(distdir)/iconwork
cp -p iconwork/* $(distdir)/iconwork
rsync -C -p examples/* $(distdir)/examples
mkdir $(distdir)/icons
rsync -C -p icons/* $(distdir)/icons
......@@ -59,71 +59,48 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
AWK = @AWK@
CC = @CC@
GRAPH = @GRAPH@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_CONFIG = @GTK_CONFIG@
GTK_LIBS = @GTK_LIBS@
GUILEGTK_CFLAGS = @GUILEGTK_CFLAGS@
GUILEGTK_LIBS = @GUILEGTK_LIBS@
GUILE_CFLAGS = @GUILE_CFLAGS@
GUILE_LDFLAGS = @GUILE_LDFLAGS@
LN_S = @LN_S@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
PACKAGE = @PACKAGE@
PERL = @PERL@
RANLIB = @RANLIB@
READLINE_LIB = @READLINE_LIB@
VERSION = @VERSION@
bggtk = @bggtk@
ggtk_extra_loadpath = @ggtk_extra_loadpath@
ggtk_hack_cflags = @ggtk_hack_cflags@
ggtk_hack_dir = @ggtk_hack_dir@
ggtkhack_files = @ggtkhack_files@
SUBDIRS = spicefile
SUBDIRS = spicefile utilities src scheme doc remote
INCLUDES = -I$(srcdir)/spicefile
bin_PROGRAMS = gwave
gwave_SOURCES = cmd.c gtkmisc.h wavewin.c draw.c gwave.c event.c gwave.h gtkmisc.c pixmaps.c wavelist.c dnd.c print.c
gwave_LDADD = $(srcdir)/spicefile/libspicefile.a
gwave_LDFLAGS = @GTK_LIBS@
CFLAGS = @CFLAGS@ @GTK_CFLAGS@
# TODO: get autoconf/automake to compile/link with these if we don't
# HAVE_POSIX_REGEXP: regexp.h regexp.c regerror.c regmagic.h
MOSTLYCLEANFILES = core *~
CLEANFILES = core *~
DISTCLEANFILES = core *~
MAINTAINERCLEANFILES = core *~
EXTRA_DIST = regexp.tar.gz gwave.gtkrc autogen.sh
EXTRA_DIST = autogen.sh gwave.spec TODO
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES =
PROGRAMS = $(bin_PROGRAMS)
DEFS = @DEFS@ -I. -I$(srcdir) -I.
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
gwave_OBJECTS = cmd.o wavewin.o draw.o gwave.o event.o gtkmisc.o \
pixmaps.o wavelist.o dnd.o print.o
gwave_DEPENDENCIES = $(srcdir)/spicefile/libspicefile.a
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
CONFIG_CLEAN_FILES = gwave.spec
DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
Makefile.am Makefile.in NEWS acconfig.h aclocal.m4 config.h.in \
configure configure.in install-sh missing mkinstalldirs
Makefile.am Makefile.in NEWS TODO acconfig.h acinclude.m4 aclocal.m4 \
config.h.in configure configure.in gwave.spec.in install-sh missing \
mkinstalldirs
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
GZIP_ENV = --best
SOURCES = $(gwave_SOURCES)
OBJECTS = $(gwave_OBJECTS)
all: all-redirect
.SUFFIXES:
.SUFFIXES: .S .c .o .s
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile
......@@ -131,7 +108,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4
cd $(srcdir) && $(ACLOCAL)
config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
......@@ -166,54 +143,8 @@ distclean-hdr:
-rm -f config.h
maintainer-clean-hdr:
mostlyclean-binPROGRAMS:
clean-binPROGRAMS:
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
distclean-binPROGRAMS:
maintainer-clean-binPROGRAMS:
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
list='$(bin_PROGRAMS)'; for p in $$list; do \
rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
done
.c.o:
$(COMPILE) -c $<
.s.o:
$(COMPILE) -c $<
.S.o:
$(COMPILE) -c $<
mostlyclean-compile:
-rm -f *.o core *.core
clean-compile:
distclean-compile:
-rm -f *.tab.c
maintainer-clean-compile:
gwave: $(gwave_OBJECTS) $(gwave_DEPENDENCIES)
@rm -f gwave
$(LINK) $(gwave_LDFLAGS) $(gwave_OBJECTS) $(gwave_LDADD) $(LIBS)
gwave.spec: $(top_builddir)/config.status gwave.spec.in
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
......@@ -345,7 +276,7 @@ distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
cp -pr $$/$$file $(distdir)/$$file; \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
......@@ -363,22 +294,6 @@ distdir: $(DISTFILES)
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook
cmd.o: cmd.c gwave.h spicefile/wavefile.h spicefile/spicestream.h
dnd.o: dnd.c config.h gwave.h spicefile/wavefile.h \
spicefile/spicestream.h gtkmisc.h
draw.o: draw.c gwave.h spicefile/wavefile.h spicefile/spicestream.h
event.o: event.c gwave.h spicefile/wavefile.h spicefile/spicestream.h
gtkmisc.o: gtkmisc.c
gwave.o: gwave.c config.h gwave.h spicefile/wavefile.h \
spicefile/spicestream.h
pixmaps.o: pixmaps.c
print.o: print.c config.h gwave.h spicefile/wavefile.h \
spicefile/spicestream.h
wavelist.o: wavelist.c config.h gwave.h spicefile/wavefile.h \
spicefile/spicestream.h
wavewin.o: wavewin.c config.h gwave.h spicefile/wavefile.h \
spicefile/spicestream.h
info-am:
info: info-recursive
dvi-am:
......@@ -390,7 +305,7 @@ installcheck: installcheck-recursive
all-recursive-am: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
install-exec-am: install-binPROGRAMS
install-exec-am:
install-exec: install-exec-recursive
install-data-am:
......@@ -399,49 +314,39 @@ install-data: install-data-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-recursive
uninstall-am: uninstall-binPROGRAMS
uninstall-am:
uninstall: uninstall-recursive
all-am: Makefile $(PROGRAMS) config.h
all-am: Makefile config.h
all-redirect: all-recursive-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs: installdirs-recursive
installdirs-am:
$(mkinstalldirs) $(DESTDIR)$(bindir)
mostlyclean-generic:
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \
mostlyclean-compile mostlyclean-tags \
mostlyclean-generic
mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
mostlyclean: mostlyclean-recursive
clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-tags \
clean-generic mostlyclean-am
clean-am: clean-hdr clean-tags clean-generic mostlyclean-am
clean: clean-recursive
distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile \
distclean-tags distclean-generic clean-am
distclean-am: distclean-hdr distclean-tags distclean-generic clean-am
distclean: distclean-recursive
-rm -f config.status
maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS \
maintainer-clean-compile maintainer-clean-tags \
maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \
maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
......@@ -450,11 +355,7 @@ maintainer-clean: maintainer-clean-recursive
-rm -f config.status
.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
mostlyclean-compile distclean-compile clean-compile \
maintainer-clean-compile install-data-recursive \
uninstall-data-recursive install-exec-recursive \
install-data-recursive uninstall-data-recursive install-exec-recursive \
uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
all-recursive check-recursive installcheck-recursive info-recursive \
dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
......@@ -470,12 +371,10 @@ maintainer-clean-generic clean mostlyclean distclean maintainer-clean
# distribute some extra directories that don't have anything to build
# or install in them
dist-hook:
mkdir $(distdir)/doc
cp -p doc/* $(distdir)/doc
mkdir $(distdir)/examples
cp -p examples/* $(distdir)/examples
mkdir $(distdir)/iconwork
cp -p iconwork/* $(distdir)/iconwork
rsync -C -p examples/* $(distdir)/examples
mkdir $(distdir)/icons
rsync -C -p icons/* $(distdir)/icons
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
......
Gwave NEWS --- history of user-visible changes. -*- text -*-
New in 20011020:
- better measurement: value at both cursors or difference in values at cursors
- enhanced handling of log scales
- yet more file-reading improvements and general bug fixes
New in 20001123:
- Saving wave and panel configuration as guile scripts.
- Executing guile scripts from menu or command line (-s <script> option)
- Remote control using the gwave-exec and gwaverepl utilities
New in 20001004:
- Spice3/Ngspice rawfile improvements: binary files now work!
- Other minor file-reading improvements.
- spice source code to examples for which I could still find it.
New in 20001004:
- Major improvements to handling of binary files produced by HSPICE.
- Overhaul of input of spice3/ngspice raw files; more robust and tolerant
of complex numbers.
- User interface improvements: tooltips added. User's .gwaverc no longer
required to do lots of standard setup. system.gwaverc can be copied
to $HOME/.gwaverc and edited to taste.
- sp2sp utility included for converting any spice file readable by gwave into
a convenient tabular ascii format.
New in 20000518:
- Logarithmic scales working on both X and Y axis.
New in 20000509:
- First public guile/guile-gtk release.
- Popup menu on visible-wave button can activate per-waveform dialog box
- Logarithmic scale on Y axis working; on X axis it isn't quite there yet.
New in 20000108:
- Merged in guile and guile-gtk; the GUI is mostly written in guile now.
- Some additional improvements to reading of HSPICE input. Reading partial
files from simulations still in progress works for ascii .tr0 files.
New in 1990716:
Improved handling of HSPICE ascii format in libspicefile - tested on files
from 98.4 on HP-UX and Solaris.
......
gwave - a viewer for the output of spice-like simulators
and other viewing of analog data.
gwave - a viewer for the output of spice-like simulators and other
sorts of of analog data.
by:
Steve Tell
Microelectronic Systems Laboratory
University of North Carolina at Chapel Hill
CB 3175 Sitterson Hall
Chapel Hill, NC 27599-3175
tell@cs.unc.edu
tell@cs.unc.edu or steve@telltronics.org
Installation:
./configure (see file INSTALL or run configure --help for more info)
gmake
test gwave on some files in the examples directory
gmake install
See the INSTALL file
Usage:
gwave [-t filetype] your-waveform-file
gwave [options] [waveform-file ...]
The gwave main window is dominated by one or more "WavePanels" or
graticules in which waveforms can be displayed. WavePanels can be
added and deleted with the menus.
As waveform files are loaded from the command line or File->Read menu
item, a window containing a scrolling list of variables in the file
pops up. Use the left mouse button to drag-and-drop variables into
the WavePanels. Double-clicking a variable in the the list adds it to
panel that most recently had a variable dropped in it. If you choose
to close the variable list to neaten up your desktop, or lose the list
under other windows, use the View->Variable List menu to display it
again or bring it to the top.
To the left side of the WavePanels are buttons corresponding to each
waveform shown in the panel. A waveform shown in a panel is called a
VisibleWave. There are two GUI functions overloaded onto the button for a
VisibleWave:
- Click with the left mousebutton to "select" one or more VisibleWaves.
- Press and hold the right mousebutton to pop up a menu of operations
related to that particular VisibleWave.
To delete waves, select one or more of them and then press the
"delete" button at the top of the main window. Alternately, use the
delete item on the VisibleWave-button popup menu.
Click on the waveform panels with the left and center mouse buttons to
set two cursors for measuring. Hold down these mouse buttons to drag
the cursors.
Gwave can read several file formats. It attempts to guess file formats
based on filename, and then tries all file formats until one succedes.
These file formats are known:
Pressing and holding the right mouse button while the cursor is in a
waveform panel brings up a popup menu. From this menu you can insert
and delete waveform panels. Some of the zoom commands are also
replicated on this menu.
CAzM transient output (*.[BNW])
HSPICE binary and ascii formats (*.tr0, *.sw0, *.ac0)
Spice2 and Spice3 "raw" output (*.raw)
An ascii format with whitespace-seperated columns and column headings,
such as that produced by ACS (Al's circuit simulator). (*.acs, *.asc, *.ascii)
Use the View->Variable List menu to see a list of a list of signals in
your simulation files, then drag-and-drop signals into the desired waveform
panels. Additional signals can be added to the same waveform panel
simply by double-clicking them.
Configuration save/restore
A gwave panel and VisibleWave setup can be saved and restored. To save
all settings for all data files, use the "Save Configuration as Script" from
the man window's File menu. To save the configuration for one file only,
use the "Save" option on that file's scrolling variable-list window.
Scripts saved by either method can be run to restore gwave
configuration in two ways:
- From the main window of a fresh gwave session, use the "File->Execute
Script" menu item.
- From the unix shell command line. Either type "gwave -s <script>," or
simply type the name of the script. Either way, gwave will start and run the
named script, producing wave panels set up exactly as they were when saved.
To delete waves, select one or more of them using the buttons down the
left side of the main window, and then press the "delete" button.
Scripts written by gwave that restore only a single file's
configuration can also be applied to another file, provided that the
second data file has variables with the same names as those in the
first. Load the new data file, using the main window File->Read menu
item. Then, from the variable-list File menu, pick "Apply Script to
File" and choose the script. Variables in the new data file will be
displayed in panels in the same manner as those from the original
file. This can be extremely useful, say for comparing the results of
simulating the same circuit under different temperature or component-value
conditions.
In addition to the configuration-script-writing facilities described
here, you are welcome to create your own guile scripts for specialized
gwave applications. For general guile information, see
http://www.gnu.org/software/guile/guile.html For information on
gwave-specfic features available for scripting gwave using guile, see
the text files gwave-concepts.txt, gwave-hooks.txt,
gwave-procedures.txt, and gwave-variables.txt All of gwave's menus and
many of its user-interface features are written in guile; the code in
the scheme subdirectory may also be useful as an example.
Remote Control
A running gwave process may be remotely controlled by any process that
has permission to connect to the same X server. Use the "xauth" and
"xhost" utilities carefully to control access to your X server at all
times. This is especialy true when running gwave; anyone who can
connect to your X server can cause your gwave to execute arbitrary
guile code.
The gwave-exec command sends a single guile expression to gwave to
be executed, and displays the result and output of that command.
For example
gwave-exec '(x-zoom! 10e-6 20e-6)'
Click on the waveform panels with the left and center mouse buttons to set two
cursors for measuring. Hold down these mouse buttons to drag the cursors.
will zoom gwave's display so that the region of time from 10 to 20
nanoseconds is visible.
Pressing and holding the right mouse button while the cursor is in a
waveform panel pops up a menu. From this menu you can insert
and delete waveform panels. Some of the zoom commands are also
replicated on this menu.
The gwaverepl program enters an interactive "read-evaluate-print" loop
in which multiple guile expressions may be entered. Each expression
is evaultated, and the results printed. Gwaverepl uses the GNU
Readline facility for input line-editing and history scrollback, so
all of the usual emacs (or vi) editing keys may be used. Type the
End-Of-File character (usually Control-D) to exit gwaverepl.
Bug: do not use gwave-exec or gwaverepl when running multiple
instances of gwave at a time on the same X server.
Waveform Input files.
Gwave understands CAzM transient output (.N/.B/.W) files, the binary
and ascii outputs from HSPICE (.tr0, .sw0, and .ac0) files, and
tabular ascii files with a header line. Gwave tries to guess the type
of the file based on filename, and then tries all file formats until
one succedes.
Details on using Gwave with the output of various simulators:
Berkeley Spice3F5 and ng-spice. Gwave can read both the the ascii and
binary forms of the spice "rawfile" output. If difficulty is
encountered with the binary format, Try selecting the ascii form by
setting the environment variable SPICE_ASCIIRAWFILE to "1" before
running spice3.
The "Export Postscript" and "Export PNM" options on the main File menu
provide the rudiments of output for inclusion in other
documentation. They require the graph program from GNU Plotutils to be
installed and found in your $PATH at configure time, and simply write
out files called gwave_out.ps and gwave_out.pnm into the current
directory. In the future, a dialog box will allow configuring the
print and export output.
For more info on GNU plotutils, see
http://www.gnu.ai.mit.edu/software/plotutils/plotutils.html
Known problems: - HSPICE data files generated without ".options probe"
may not be read correctly. workaround: try using ".options probe".
This mostly happens with AC sweeps. (I think this has been fixed -
feedback to the contrary is welcome)
Independent variables must be increasing in value. This isn't a
problem for transient and AC analyses, but for DC sweeps it is
possible to make them go backwards. Old versions of gwave would draw
bogus waveforms for these; Gwave 19990927 and later refuse to read
these files.
Reading of binary rawfiles has only been tested with both ng-spice and
gwave running on a little-endian machine. Your mileage may vary (but
please send bug reports!)
ACS (Al's Circuit Simulator, http://www.geda.seul.org/tools/acs/index.html)
Gwave should identify and read ACS output files, generated with the '>'
option to a .tran statement.
Avanti's HSPICE.
Gwave should work with both ascii and binary output in the form of
.tr0/.sw0/.ac0 files. If one form doesn't work for you, try the other form.
Binary .tr0 files only work when gwave is run on a big-endian machines; if
running hspice on your Sun and gwave on linux, use ascii .tr0 files.
(Put .options post=2 in your spice deck) I used to have problems with
some .ac0 files but I believe this is fixed. Try putting ".options probe"
in your input file if you have troubles.
Tanner Research T-Spice.
It has been a while since I tried tspice, but gwave should read the output,
at least from transient analysis runs. Tspice output is in a variant of the
cazm format, not surprising since Tanner bought the rights to cazm from MCNC.
Silvaco SmartSpice
Gwave works with the variant of berkeley spice rawfile format produced by
SmartSpice. Both ascii and binary files should work.
Your own custom waveforms:
The easiest of the input formats to generate with simple scripts and
other tools is the "ascii" format. See the ACS-simulator output file
tpwl.acs in the examples directory for an example of this format. The
first line lists the variable names, seperated by whitespace. The
variable in the first column is assumed to be the independent
variable, for example "time." Subsequent lines in the file contain
the data, one timestep per line. The independent variable must be
nondecreasing. Lines in the file can be arbitrarily long.
Note that the '#' in examples/tpwl.acs is for the benefit of other
tools (such as gnuplot), that don't expect column titles or variable
names in the file. To gwave, the first line is not a comment but
contains whitespace-seperated fields naming the variables. The result
is that gwave thinks the independent variable name is "#Time," but
don't let that bother you.
----------------------------------------------------------------------