Tim's directory of miscellaneous and mostly outdated programs
Tim's Law: A program grows as the exponent of its revision number.
My ongoing project is a complete open-source VLSI design
flow, both digital and analog. I have collected together
some older tools such as Magic, IRSIM, and Netgen, updating
and upgrading them, and a few tools of my own, including
XCircuit and Qrouter. This body of work represents several
complete design flows, including verilog to layout (digital
standard cell flow), schematic capture with layout-vs.-schematic
(LVS) checking, and custom layout.
All of these tools are kept in a git repository, and each has
its own webpage with download and installation information,
Wiki pages, and copious documentation.
Other CAD tool programs:
- pplot is a plotting program for turning
circuit layouts in CIF format into neatly printed plots on your
printer. My hacks to this program include EPS compatibility and
color printer output. Version since 12/2/97 can be compiled under
Linux. By the way, if you're interested in how just about *ANY*
printer (including, for instance, the HP color deskjets) can be turned
into an instant PostScript® printer, then look at the
pplot README file, or
Note: Several bug fixes were made on 8/17/98; pplot will now
print on high-resolution color laser printers. The output from a
QMS MagiColor2-EX (2400 x 600 DPI) or Xerox/Tek Phaser 2135
(1200 x 1200 DPI) is especially nice, with the
stipple patterns so dense that they look essentially opaque.
A bugfix introduced on 8/16/01 prevents PostScript errors if a
page device larger than 8.5 inches is specified.
Click here for a sample color output from pplot (originally PostScript®):
(19.3KB GIF). Unfortunately, this plot doesn't really tell the
whole story. The GIF is generated by ghostscript, which uses
the standard monitor resolution of 72dpi, which interacts with
device-dependent code in the program. Consequently, stipple
patterns come out large and ungainly. At 300dpi, they look
reasonably good, and at 600dpi, nearly opaque.
- net.tar.gz is a netlist
compiler program for analog and digital VLSI circuits.
The original program was written by Chris Terman of MIT as
part of the "rsim" simulator. Later, the "rsim" code was heavily
modified by Mark Horowitz and others at Stanford to become the
popular IRSIM switch simulator (see the web page on
magic). Thanks to
Jim Burr for information on the origin of net.
In summary, input for the program net is a circuit
description in a format which is a subset of LISP (see
net.doc). The output of "net" is a file in ".sim" format,
although the format has been extended to include other device types
such as bipolar transistors and capacitors.
News: This program has now been ported to Linux (April 2000).
Here is the source tree of net.
In order to netlist compare with extracted output from
"magic", I use the program "netcomp", which is part of the "netgen"
package of netlist-handling tools. As of December, 2002, this
package has been redesigned with a new "make" process to match the
rest of the open-source tool suite. This guarantees compilation
under Linux (the development platform), although other operating
systems may require some manual tweaking of compile-time options.
Netgen has also been redesigned to (optionally) compile under Tcl,
with a full-word command-line syntax, and the "netgen" and "netcmp"
parts of the package have been combined.
Go to the magic-7.2 page from
the Magic VLSI home page for download and information.
Netgen was written by Massimo Sivilotti (written when he was a
student at Caltech, around 1990; now he's at Tanner Research).
Version 1.1 has been hacked on by me. Details of where I expect
to go with this can be found in the netgen-1.1 source top directory,
- xbm2cif.tgz is a simple
program which converts bitmaps to CIF format for inclusion into layouts.
Given that one can do a conversion into XBM format from practically
any graphics format using "xv", this program allows basically any
graphic to be compiled into CIF and included into layouts. Compile
with a simple "cc" command; no special linking is required.
Updated March 2015: Because my programming skills in 1991 were
Usage: xbm2cif [scale] file_in.xbm file_out.cif
- CIO-DIO96.3.1.tgz (v3.1)
is a Linux driver program for various ComputerBoards digital I/O cards,
namely the CIO-DIO96 board,
but also including all of the ISA-based 82C55-based digital I/O
cards (CIO-DIO48, CIO-DIO24, NICB-DIO96 clone of the National
Instruments ``DIO-96'', PCI-DIO48 and family, and the compact PCI
boards as well). Use of this card and driver along with custom C
software is how I test all my electronic designs.
- September 5, 2001
- April 10, 2001 (fixes for PCI-DIO48H
- July 19, 2002 (fixes for Linux kernel
version 2.4 compatibility)
- September 4, 2002 (some Makefile fixes
for "make install")
- February 26, 2003 (correct support for
the PCI-DIO24H card)
- April 28, 2004 (support for ICS Advent
cards: PCI-DIO24DB, PCI-DIO24HD, and the /CT variants.
Thanks to Corinne Boyer at the Gemini Observatory in Hawaii)
- June 16, 2005 (support for Linux kernel
versions 2.6---see below for earlier kernel versions)
- August 24, 2006 (bug fix; thanks to
Dierdre Horan for the bug report)
is the version compatible with Linux kernel versions 2.4 and earlier.
For more information, see the
Linux Lab Project.
Also see the "test" directory and file "diotest.c" in the driver
distribution for example use of the driver.
diowrapper.tgz was contributed
by Conrad Rehill; it is a wrapper program designed to act as a frontend
for systems controlled by a DIO card. Conrad uses it for various
household controls. His DIO card and driver program are "the basis for
a home burglar alarm, fire alarm, relay controller for my
heat/AC/circulator". See the README file in the top-level directory
for more information. In brief: the original driver is in subdirectory
dio96/src_driver/. Make and install this first (including loading the
dio96.o kernel module). The wrapper software is in subdirectory
dio96/src/. Go to that directory and run "make". Executables end up
in the dio96/bin directory. I have not had time to play around with
these programs, so until I do, I cannot provide much more information
on how to use the system.
is an outdated version for the NI clone card, also compatible with
most of the ComputerBoards DIO-series cards. This older driver is
not PCI-compatible, and in general the use of the new driver is
Other X11 programs:
Every once in a while, an application that I rely upon heavily
starts looking obsolete. "gv" has recently been added to
that list. It's a great program for viewing PostScript and PDF
files, much better than the overblown "acroread" (which won't
even read plain PostScript). However, it was written using the
Athena 3D widgets. Athough the Athena 3D widget set hardly takes
up much disk space, the powers that be no longer include it in
standard X11 distributions. And I couldn't figure out how to
compile it as a standalone library. So after a year of using
the pathetic "ggv", I decided I'd had enough, and I would write
my own PostScript and PDF viewer, using the same method I applied
to XCircuit and Magic and IRSIM, which is to write it as a
Tcl/Tk extension, give it a set of commands for command-line
manipulation in the interpreter, and let Tcl/Tk take care of the
graphics. Of course, it still uses ghostscript as the underlying
rendering engine (and a very good one it is).
What makes gvtk different than the rest? Well, since
it's interpreter-based, the GUI is pretty simple for now but
can be about as complicated as anyone cares to write the
scripts for. The command-line interface is very flexible,
allowing for multiple files to be handled, multiple windows
to be used, each with its own ghostscript sub-process, and
the GUI can worry about how to tile together and track multiple
pages and all that other cruft.
The initial version (1.0) is rough around the edges but good
enough to use as a viewer (I, for one, will not use ggv again).
In the existing GUI, use the left mouse button to pan the image
around the window, and use the mouse wheel to zoom in and out.
Page-Up and Page-Down keys move through the pages,
and Home goes to the first page, and End to the
last. The File menu button supports file browsing, and
multiple windows, and windows with multiple pages. Expect more
to come. . .
Source code available here:
(July 13, 2009)
- xbiff is a modified version of the standard xbiff mail monitor
into which I have folded the Xpm pixmap package, allowing full-color
mailbox icons. The pixmap icons can be read in from the application
defaults, and can use "*pixmapFilePath:" in .Xdefaults
just like it uses "*bitmapFilePath:". Behavior is to look
for a pixmap down this path, then the current directory; if not found,
it then looks for bitmaps of the same name. Supports Xpm pixmap masks
(using a color called "None" in the xpm file) and color
override information. Xbiff additionally supports audio playing
processes to generate different sounds for incoming mail (no,
``You've got mail!'' is not included. . . but you can always record
it yourself. . .)
Update: (11/16/99) Bug fix to prevent zombie processes from
accumulating after forking the audio play executable.
Update: (7/22/03) Fixed a few problems that prevent compilation
on Linux systems.
is available here.
Sample xbiff pixmap icon.
Required: Xpm extension for X11 (included with modern versions
- xman is the repaired version of the usual xman program. xman
typically does not come with Linux distributions, perhaps because
no one ever fixed this error, which causes xman to segmentation
fault when the manual page window is popped down. It appears that
xman was attempting to close a file descriptor which was not open.
Possibly the bug has not been noticed before because other UNIX
platforms treat the closing of a null file descriptor in a more
graceful manner? Anyway, this program will eventually become
obsolete due to the rise of admittedly far superior HTML man pages.
But for now, systems come with an ungodly mess of both (not to mention
emacs info pages, how-to text pages, latex, and postscript), so I
find it useful to have a correctly working xman lying around.
xman.tar.gz is available here and
via anonymous ftp.
- Xw.tar.gz is a port to Linux (and X11R6,
in general) of the HP Xw widget set library. For reference on
how to use the Xw widget set, try to get a copy of Douglas A. Young's
excellent X Window Systems Programming and Applications with Xt
(Prentice Hall, Inc., 1989). For traditional hackers used to using
source code as reference, probably enough can be gleaned from the
XCircuit source code to get started.
- url is a program I wrote in response to a
co-worker who asked if it were possible to print the URL at the top
of a Netscape printout, which he says is possible under all versions
of Netscape except the UNIX one. This little program, an
exercise in understanding X11 "Atoms" and Widget trees, will search
out the window on your display running Netscape and request the
current URL from it. The optional first parameter to url is
a (remote) display name, so you can see what Netscape page someone
else is reading, as long as they have X11 access enabled (i.e.,
Updated 3/2/00 with a bug fix by Robert Mitchell of
WFF/NASA which prevents url from getting confused by Netscape
windows other than the Print window, and picks up the _MOZILLA_URL
Atom from the correct window.
Simple (manual) compile instructions
are written in the first few comment lines of the program.
urlfilter is the companion script written
by Ed Hawkins III at JHU-APL for getting the url program to
write the current URL to the top of the printed page. Format is to
put the web page title on the upper left hand corner and the URL on
the upper right hand corner. Format adjusts appropriately for both
portrait and landscape page orientations. The PostScript statements
in the filter script can be customized to change the font and
appearance of the URL title on the page.
To use urlfilter, from the Netscape Print window, select
urlfilter | lpr
(i.e., prepend the urlfilter and pipe into whatever program you use for
the print spooler).
urlfilter.pl is a port of the urlfilter
script (above) to Perl. Make sure you configure this script so that
the first line points to your Perl executable (/usr/bin/perl on Linux,
but may be elsewhere on other systems), and that the variable $URL
points to the executable for url.c (above). Thanks to Robert
Mitchell for this script.
urlfilter.awk is a variation of the
urlfilter script using awk instead of sh or perl (above),
kindly provided by Jonathan R. Senning
(firstname.lastname@example.org), math and
CS professor at Gordon College, Wenham, Massachusetts. He has added
page numbering and date, printed at the bottom of the page. By
streaming the input, it works faster than the Perl and Shell versions
and does not alter the original Netscape PostScript output. This is
probably the best of the ``urlfilter'' versions listed here, and I
recommend it over the others.
RPM packages of urlfilter also provided by Jonathan Senning:
- xtdnn is a program which I wrote in 1991 for
drawing and solving time-delay neural networks (temporal backpropagation).
Connections and their strengths are drawn on-screen in color and updated
during the learning process.
Required: Xw widget set.
- xdigit is one of my past research topics
in acoustic classification: a speech recognition network which uses
time delays, except that it relies on basic hebbian learning, a
perceptron-like one-layer network, and is geared toward analog
Required: Xw widget set.
UNIX utility programs:
Back to my home page. . .
---As always, Caveat end-user.
Last updated: March 10, 2015 at 3:36pm