PUFF on Linux
    PUFF - Computer Aided Design for Microwave Integrated Circuits    



PUFF is a program for laying out and analyzing microstrip and stripline circuits on IBM-compatible personal computers.  The program is fast and easy to use.  Circuits are laid out on the screen using cursor keys, and may be analyzed for scattering parameters in the frequency domain, or impulse and step responses in the time domain.  PUFF's element library includes several lumped elements, transmission lines, and coupled lines.  Multiport scattering parameter files may be read into the program to represent transistors, to create hypothetical components, or to compare theory and experiment.  PUFF also produces photographic artwork on dot-matrix and HP LaserJet printers.  Support for VGA, EGA and CGA graphics is included.

PUFF is a scattering parameter and layout calculator for microwave circuits.  It was created as an inexpensive and simple-to-use alternative to professional software.  PUFF uses a simple interactive schematic-capture type environment.  After a circuit is laid out on the screen using cursor keys, a frequency or time domain analysis is available with a few keystrokes.  This process is dramatically faster than with net-lists, and errors are rare since the circuit is always visible on the screen.

PUFF Version 2.1 includes support for VGA displays, LaserJet printers, and HP-GL plotters.  The program can analyze the dielectric and metal losses, dispersion in impedance and effective dielectric constant, and effects due to finite strip thickness and surface roughness.

PUFF was intended for students and researchers when it was first developed.  The program has also become popular with working engineers, scientists and amateur radio operators.  The development of PUFF was sponsored by the National Science Foundation, the Jet Propulsion Laboratory, and Hughes Aircraft Company.

PUFF 2.1 runs on OUR computers under Windows 95 but will not print unless the user returns to the "Start" button, activates "Shut Down" and reboots to "Restart the Computer in DOS Mode."  The program should run as it ran on earlier versions of DOS.  However, if the user enters into MS-DOS while inside Windows 95 by activating "Programs" and then the "MS-DOS Prompt" buttons, the program will run but will not print.

Using PUFF 2.1 with Windows 95, 98, NT, 2000, & XP

PUFF v2.0 to v2.1 Enhancements


PUFF originally was an old MS-DOS program for analyzing microwave circuits, developed in the 1980s and 1990s at California Institute of Technology (CalTech), by Scott W. Wedge [California Institute of Technology], Richard C. Compton [Cornell University], David B. Rutledge [California Institute of Technology], and later enhanced by Andreas Gerstlauer [University of California at Irvine].  It was distributed for a very modest fee, together with an instruction book and Pascal source code.  The latter made it possible to compile it also on Linux, albeit with some modifications and additional code to handle the graphics; I (Pieter-Tjerk de Boer) made instructions for this available in late 2000.

In early 2010, Leland C. Scott got in touch with the original authors who then agreed to make the code freely available under the GPLv3 license.  Also, we got permission to distribute the original manual in PDF format.  This opens up the possibility to distribute a complete Linux version on the Internet for free, and encourages further development of the program.


Compiling the program from source should be trivial on any i386 or AMD64 Linux system on which the Free Pascal compiler is installed, by simply typing 'make'.  This procedure may also work on other architectures and perhaps other UNIX-like operating systems; reports on this would be much appreciated!

The fact that PUFF comes with source code makes it possible to port it to other systems than the original MS-DOS.  Using the Free Pascal compiler, most of the original Turbo Pascal code compiles without problems on Linux.  The main part that needed work to get PUFF running, was the graphics part: Free Pascal does not (yet?) have support for using X11 graphics in a way that is compatible with Turbo Pascal, so some new code was needed.  Furthermore, some miscellaneous other modifications were needed, in areas such as memory allocation and keyboard reading.

For people who would like to compile PUFF on their own Linux systems, I've made available a .tgz-archive which contains the needed files along with detailed instructions in the README file.  Note that this tgz-file does not contain the PUFF source code itself; you must obtain a copy of this yourself, from one of the sources mentioned above.

Compared to the original version (dated 2000-11-12) of this package, the present version (from 2001-02-18) fixes a few problems; for details, see the HISTORY file in the archive.

If you have a relatively recent version of the Free Pascal compiler (e.g., 1.9.x), the Makefile provided in the linuxpuff.tgz file does not work (it does work with versions around 1.0.2).  For these recent versions, Lorenzo IK4XQM has made a new Makefile, which is available here.

In early 2010, the original program was made available under the GPLv3 license, and therefore a complete Linux package is now available for free here, including the original manual and Pascal source code: here it is.

Pre-complied puff binary for a Kali 2020 or similar Debian-based system.

Usage & Getting Started

The program and its user interface are firmly rooted in 1980s personal computer technology: no mouse, few colors, graphics that use a fixed text font size (in fact, originally the entire screen resolution was fixed).  Without mouse control and menus, some learning is needed to use the program, but once one gets used to it, it works quite quickly.

For those who don't have the patience for the complete 60 page manual (included in PDF format), here's a quick tutorial for analyzing a simple (non-microwave) low-pass filter:

First start PUFF, e.g. by typing './puff' in the directory where you compiled PUFF, and press any key except Escape (ESC) to actually enter the program.

Next, follow the following steps:

What to Type              What it Does

 [F3]                     Go to the Parts Window.
 lumped 10 [alt-M] H      First component is a coil of 10 microhenry.
 [down arrow]             Go to next component.
 lumped 100 pF            A capacitor of 100 pF.
 [F1]                     Go to the Layout Window.
 b                        Choose component b, i.e., our 100 pF cap.
 [down arrow]             Place one cap.
 =                        Connect to ground.
 [up arrow]               Walk back over the cap.
 1                        Connect to in/output 1.
 a                        Choose component a, i.e. our coil.
 [right arrow]            Place the coil.
 2                        Connect to in/output 2.
 b                        Choose component b again.
 [down arrow]             Place another copy of this cap.
 =                        Ground it.
 [F2]                     Go to the Analysis Window.
 p                        Make a plot.

You now have a plot of S-parameters that are listed in the top-left window (S11 and S21 by default, i.e., input return loss on port 1 and transfer function from port 1 to port 2).  You can change the frequency and dB range by using the UP and DOWN arrows to go the axis start and end points and typing different values there; for the present network, a range from 0 to 10 MHz makes much more sense than the default.  Type 'p' to replot.

Some more hints:


[PUFF screenshot]

Feedback is welcome, by e-mail to pa3fwm@amsat.org.

Back to PA3FWM's amateur-radio software page

Knowledge is Power

GBPPR Projects