XCircuit News and Notes of Interest


New development release: Xcircuit 3.0

New stable release: Xcircuit 2.5.5

New in version 2.5.3: Circuit netlists are retained until validated, so queries on the netlist do not require complete netlist regeneration.

New in version 2.5.2: Added support for displaying multiple instances of an object, with different parameters, on the same library page. This lets xcircuit conveniently handle multiple gates in a single package, such as 7400-series chips, for purposes of PCB netlisting.

New in version 2.5.1: Added support for numerical parameters. The object comparison routines have been cleaned up to prevent propagating appended underscores (a real bugaboo), and the XCircuit copyright has been recast to GPL (it's about time).

New in version 2.4.0: Should be mostly transparent to the end user. Fine rotations of +/- 1 degree are allowed; the behavior of some menu options (delete, unselect, copy, edit rotate) was changed to be consistent with others. Other internal changes should hopefully (?) overcome problems with unreadable X resources and timeout conflicts with the X server.

New in version 2.3.6: Filename filtering in the file list window. Flag added to pin label properties to allow a pin label to be seen outside of the object. "Edit-in-place" capability added (shows objects in the hierarchy above the edit object).

New in version 2.3.5: Some bug fixes to the netlist code, and more extensions of the Python interpreter interface. Improved handling of backup (crash) files, including saving a backup after x number of changes as well as after a lengthy (10-minute) timeout, saving library object changes in the crash file, and recovering separate multiple-page files without destroying the original file and page names. Added a method to track unsaved changes and prompt before exit.

New in version 2.3.4: Autoconf rewritten for Mac OS/X (Darwin) compile. Netlist output from xcircuit directly into Python is possible, but Python scripts to interpret the mess that comes out are not finished. Revision 2 fixed some errors with drawing modes introduced by the expanded key binding functionality, and improves the crash file mechanism (in particular, so that it is impossible to load a non-crash file when prompted for recovery, and the temporary file name is replaced by the original file name).

The change from 2.3.3 to 2.3.5 reflects a number of bug fixes and a slew of enhancements. Most of the enhancements are extensions of the Python interface, although the significant enhancement which prompted the change to subversion 2.3.5 was the handling of temporary files and checking for unsaved changes before exiting.

Old stable release: Xcircuit 2.3.3

The embedded Python interpreter has been causing numerous problems. All the errors trace back to Python version 1.5, which (unfortunately) comes installed on certain operating systems such as RedHat 7.1 (and others). Version 1.5 has a known bug causing a segmentation fault when executing the routine convertenviron() in source Modules/posixmodule.c line 302 (in source version 1.5.2). The bug is outlined in the python bugs list. Revision 14 of xcircuit 2.3.3 avoids the problem by refusing to use the embedded interpreter if it claims to be version 1.5. The solution is to update Python; if you're wary of replacing the version your OS depends on, it can be compiled in a separate directory, and xcircuit can be linked to that version by giving the switch "--with-python=DIR" to the "configure" script, substituting the proper directory for "DIR".

Changes from 2.3.2 to 2.3.3 include corrections to netlist compilation in PCB format. In addition, the library parts list has been updated to a style which facilitates PCB netlisting for board-level components such as resistors, capacitors, inductors, and such. The syntax for "info labels" has been expanded to include parameters with default string "?" being parsed as equivalent to "%i". Device index numbers generated by "%i" are now numbered relative to the component type, not simply incremented for each component found in the object.

A major change is the switch from "imake" to GNU "automake" for the compile sequence. Autoconf is good for dealing with system-dependent things. The use of ghostscript as a rendering engine, the use of XPM (which is not standard on many systems), and the use of Python (which goes through changes about as rapidly as xcircuit, so it keeps changing versions) means that what once used to be a simple "xmkmf; make" process now requires significant amounts of staring at the Imakefile and figuring out just what exactly is on your system. The GNU make requires the alternate sequence of "./configure; make" which is supposed to find things like Python and XPM on the system and build the Makefile accordingly. It may take a few versions to get the details ironed out; meanwhile, the Imakefile is still in the distribution as a backup.

The change from minor version 2 to minor version 3 was prompted by a change in the output syntax for labels in conjunction with changes mentioned below. Problems arising from compatibility issues between 2.3 and earlier versions were ironed out between the original 2.3 release and 2.3.2.

The netlisting routines have been thoroughly overhauled and tested against "torture test" schematics. Most changes in this version are structural (that is, transparent to the end-user), but some changes to the way labels are done will be noticeable, including the addition of tab stops and tab forward/backward, the timely demise of the embedded backspace character (effectively rendered obsolete by the use of backward-tabbing), and better reporting of embedded non-printable characters when editing a label string.

The switch to linked-lists for internally describing the structure of label strings should make versions since 2.2.3 compile on some systems (most notably recent versions of RedHat) which parse pointer arithmetic strangely and caused crashes when dealing with parameterized objects in earlier versions. More testing in conjunction with the tutorial section on schematic capture and PCB led to bug fixes in code dealing with parameters. Current version 2.3.2 is probably fairly close to a new stable release.

New in 2.2.1 and 2.2.2 are assignable key and mouse button bindings. The command-line scripting language functions "bind" and "unbind" (available both in Python and the original xcircuit scripting language) allow complete reassignment of key and button macros, so users can maintain some level of compatibility with other commonly-used CAD tools.

Previous stable release: Xcircuit 2.2.0 (March 2001)

There is a new release for March 28, 2001 of Xcircuit-2.2.0 fixing several bugs in the code, especially one bad one that would cause a segmentation violation if xcircuit was compiled without "-g" debug option. Thanks to Thanks to Kawamura Masao (kawamura@mlb.co.jp) of Media Lab. Inc., Japan, for tracking down this bug.

Version 2.2.0 is the first distribution in which the schematic capture system is considered stable and (as far as now known) error-free. There have been some changes made between versions 2.1 and 2.2, so those users who have not updated should do so. Some of the newer features have been exercised only marginally, and the adventurous are forewarned to use caution and save often.

In addition to the schematic capture, Xcircuit has a number of new features, foremost among them the capability to pass parameters to objects. Currently, only string parameters can be created/removed/edited, but later I will be adding support for integer parameters (such as the position of points and lines, or the position/rotation/justification of text).

Because the schematic capture system is somewhat more difficult to use than the drawing part of the program, there is a second tutorial, the Schematic Capture Tutorial. This teaches the basics of SPICE, sim, and pcb netlist generation: Use of parameterized strings, pin and information labels, schematics vs. symbols, and multi-page files.

Python Embedded Interpreter

Versions 2.2.1 and 2.2.2 moved toward a heavy reliance on Python as an interpreter. Python replaces the admittedly ad-hoc script "language" which was used with the .xcircuitrc file, and (in version 2.2) the "startup.script" file, and only contained enough functionality to control various aspects of the xcircuit environment on startup. Version 2.2.2 allows access to all xcircuit elements and their properties, and next versions should include access to all page and circuit netlist properties. It is intended that Python scripts will take care of writing netlists, giving more control over formatting the netlist output.

Ghostscript rendering

As of version 2.0b4, Xcircuit has a new powerful feature: the ability to read any arbitrary PostScript file and display it as a background to the xcircuit page, using ``ghostscript'' as a rendering engine. This of course requires that ghostscript be installed on your system, and that the correct path for it is given in the Imakefile at compile time. This is a particularly useful feature for VLSI designers (like me) who want to show photographs of their chips, annotated with names of circuit blocks, cutout views of the fabrication layers, and occasional subcircuit schematics. At the moment, this feature is limited to one background image per page. For small PostScript files, the rendering can be virtually instantaneous. Large images such as scanned photos incur a substantial delay; however, the image is buffered to minimize the number of times the image must be re-rendered.

Version 2.5.3 fixes an unintended ``feature'' of the renderer, so that now changes made in the output dialog box (page scale and orientation) will not alter the position of the xcircuit part of the file relative to the background. Comments made about not changing the output scale from 1.0 no longer apply (January 30, 2002).

XCircuit on SourceForge

The latest XCircuit development source is available here but is now duplicated on SourceForge, a CVS Repository for the source and downloads. I now maintain XCircuit through CVS updates, so SourceForge is the first to receive any code changes. See SourceForge's Web page for details about SourceForge and the services it provides. The xcircuit home page is duplicated at http://xcircuit.sourceforge.net/, though not necessarily up-to-date.

If you are interested in being an xcircuit developer, please contact me, and you can be added to the developer's list on SourceForge.

Currently, the CVS repository is set up on SourceForge, but the web page and download area are still at bach.ece.jhu.edu. This state may remain for a while.

XCircuit Compatibility Status

XCircuit has been compiled successfully under XCircuit should compile out-of-the-box on Linux systems. For all other UNIX versions, check the README file for any platform-specific instructions. With the automake system, running ``configure'' should handle all platform-specific needs. If using imake instead, it will be necessary to hand-edit the Imakefile for platform-specific definitions.

If you have portability problems (or preferably solutions!) please send me e-mail.


Notes of Possible Interest


Back to the xcircuit home page. . .

email: tim@bach.ece.jhu.edu