Magic VLSI Layout Tool Version 8.2 *

Magic Distribution Release Notes

Table of Contents

Magic 8.3 Release Notes
Magic 8.2 Release Notes
Magic 8.1 Release Notes
Magic 8.0 Release Notes
Magic 7.5 Release Notes
Magic 7.4 Release Notes
Magic 7.3 Release Notes
Magic 7.2 Release Notes
Magic 7.1 Release Notes
Magic 6.5 Release Notes

Magic Version 8.3 Release Notes

Date: April 8, 2020 to present

Version 8.3 Development Code General Disclaimer:

Magic versions since 8.2 are developed entirely within the usual git system. Simple development (i.e., bug fixing) is done largely in the master branch, although there are specific branches for larger development efforts. The system on checks the status of the git repository nightly. If the VERSION file has been updated since the last check, the master branch is merged into the "magic-8.3" branch, and a new tarball is compiled from the source. At the same time, the repository is mirrored to github.

Consequently, when pulling source from git, always use the branch "magic-8.3" for compiling, unless attempting to get a bleeding-edge commit.

Issues with the code should be handled through the github issue system. Pull requests made on github will be honored.

Version 8.3 New Features:

Branch bplane: Implementation of binary planes to replace the "subcell tile plane". This implementation was lifted from code in the open-source version of MicroMagic. The method reduces the deep call stacks created when running things like connectivity searches. Performance increases of at least 3 to 5 times have been seen on extraction using this method, and various other methods that search or flatten deep hierarchy (e.g., DRC or connectivity searches) also realize significant performance gains.

Version 8.3 Features Under Development:

Branch checksum: Implementation of checksums. The idea behind this improvement is that subcells often get copied from place to place and versioning control can be difficult. The change to put full paths in the "use" lines in the .mag file helps but makes subcells non-relocatable. The timestamp method is also problematic, because it forces magic to re-run DRC, extraction, etc., on any file that has updated a timestamp, regardless of whether or not any changes have been made. By using information from both a timestamp and a checksum on the layout (layer geometry + labels and properties), magic can ensure that a cell in different locations is the same cell, and can avoid forcing updates on cells with new timestamps, if the cell contents have not changed.

Branch drc-types: New implementation of DRC errors. The idea behind this is that the existing DRC implementation does not save DRC information in the layout, but only indicates where a DRC error exists, without details. The new method would assign a number to each DRC rule (this part already implemented in the master branch), and this number would be used as the layer type when painting to the DRC error plane. A new paint routine variant is needed to create new types on the fly, such that the overlap of errors is represented by a new number. Then "drc why" and "drc count" do not need to re-run DRC checks to determine the reason for an error. Also, geometry returned by "drc list count" can track the boundary of the actual error rather than dumping individual rectangles coming from each tile edge check. This will lead to consistency between "drc why" and "drc count", and the value returned by "drc count" will be more representative of the actual number of errors.

Branch extresist: New implementation for "extresist". The problem with the existing "extresist" method is that it is based on writing and reading information using "ext2sim". The .sim format, however, does not understand most of the extraction device types that magic's extractor can produce, and it has no concept of the substrate at all, and it has no hierarchy. All of these problems (and more!) can be solved by reading the .ext files (using the routines in extflat/). Otherwise, the extresist method would retain the behavior of generating a ".res.ext" file for each cell containing modified nodes and devices, such that the "ext2spice" command can optionally use or ignore this information when generating the final SPICE netlist, depending on the command option "ext2spice extresist on".

Version 8.3 Features Under Consideration:

Branch (not yet created): New implementation for LEF and DEF reading and writing. The existing "lef" section of the techfile relates LEF and DEF layers directly to magic layers. This is largely a mistake; because LEF and DEF files represent mask layout, they contain the same layer geometry as would be found in a GDS file. Therefore the LEF and DEF reading and writing should follow the same operator rules as for GDS and which are found in the "cifinput" and "cifoutput" sections of the techfile. This implies that where these sections employ the "calma" keyword to specify GDS layers, they should probably in the same sections employ a "lef" keyword to specify the names of LEF layers. This would likely make the entire "lef" section of the techfile unnecessary. But it also implies that both LEF and DEF read and write routines need to be completely recast to be like the CIF and GDS file operators, which implies a major code rewrite.

Branch (not yet created): Improved implementation of the new CIF operator "grow-min" to accomodate more complex geometry (defining a different operator, if necessary). The problem with grow-min is that it only works well for simple, isolated rectangles. To drop an implant layer over a FET and ensure that the layer meets minimum width requirements when the device gets too small is an easier problem. To make sure that two catecorner wells do not have either a spacing violation or a too-narrow bridge of material between them after grow and shrink operations. Note that no algorithm for this has been determined yet, although there are a number of possibilities. No trivially simple algorithm looks possible for this.

Magic Version 8.2 Release Notes

Date: April 24, 2017 to April 8, 2020

Version 8.2 Distribution Code General Disclaimer:

Magic version 8.2 is developed entirely within the usual git system. Simple development (i.e., bug fixing) is done largely in the master branch, although there are specific branches for larger development efforts. The system on checks the status of the git repository nightly. If the VERSION file has been updated since the last check, the master branch is merged into the "magic-8.2" branch, and a new tarball is compiled from the source. At the same time, the repository is mirrored to github.

Consequently, when pulling source from git, always use the branch "magic-8.2" for compiling, unless attempting to get a bleeding-edge commit.

Since starting the nightly mirror to github, there is no longer a Bugzilla page on (which had been largely shut down due to being a spam attractor). Issues with the code should be handled through the github issue system. Pull requests made on github will be honored.

Important note: Revisions 198 and 199 had a bad error that can deallocate a cell name when using the "save" command, leading to unpredictable output when writing output files. This error was fixed in revision 200. Do not use revision 198 or 199.

Version 8.2 New Features:

As of revision 30, the Cairo graphics interface code is complete and the code base is reasonably stable.

Hierarchical DRC modified so that errors which exist in subcells in isolation, but which are resolved by layout in the parent cell, are no longer shown or counted in the parent cell.

LEF parser enhanced to handle many more keywords

Added cell versioning. The full path to each subcell file is recorded in the .mag file in the "use" statement. On reading, the subcell is pulled from this location. If not found at the location, the cell may be pulled from a location if found in the current search path. A warning is issued for cells that are not found at their specified location unless the "-dereference" switch is passed to the load command, which suppresses such warnings. This enhancement is still considered provisional. The ultimate goal is to check layout by checksum and determine whether a cell matches the expected layout through checksum matching; once this is done, warnings will not be issued unless a checksum mismatch is found.

The "plow" command was restored to its original function, although it is still, on the whole, not very useful.

GDS compositing implemented. Magic views with the GDS_FILE property set will pull data directly from the GDS file when writing GDS output. This effectively makes the cell an "abstract view". However, there is still a difference in the handling of cells that are declared "abstract" by the presence of the property "LEFview": Abstract cells with this property (which usually come from reading LEF macro libraries) have no hierarchy, so the position in the GDS source file cannot be trusted to contain all the information in the cell. Therefore when writing GDS output, the entire GDS library (minus header and trailer) will be dumped to the output, with all cells other than the one being output given a unique prefix to avoid the possibility of conflicting with names of cells present in the design. This can lead to a very large output GDS file. By contrast, cells that are read from GDS with the "gds readonly true" option set are abstract, but they do not have the LEFview property set, and they contain the hierarchy of subcells from the GDS data, intact. Therefore when writing GDS output, only the data for the cell (and each of its subcells) is pulled from the GDS source file and written to the GDS output. Therefore, generally it is recommended to switch from "LEFview" abstract views to abstract views created from GDS data (or else views that are not abstract at all) before writing GDS output.

Added a "port" flag to layers in the cifinput/cifoutput sections of the techfile, to specify that text in a GDS file on the given layer:purpose pair are to be translated directly to port labels. The "text" flag remains, but is used to indicate GDS layer:purpose pairs that are for text (indicating the GDS data type, but not indicating whether the label is or is not a port). The "noport" flag is used to specify that a layer is for non-port labels only.

Added a variation of the "widespacing" DRC rule to accomodate run-length restrictions.

Added extraction device "csubcircuit", indicating a capacitor device that is to be extracted as a subcircuit rather than a primitive.

Added command option "ext2spice lvs" as a shorthand for setting a number of ext2spice options specifically for running LVS.

Added option "-hide" to the "lef write" command. This helps to keep output LEF macros from having unnecessarily complicated internal geometry by tracking all of the layout associated with each I/O pin. Instead, only geometry touching the cell boundary (or any single rectangle nearest to the boundary, if there is no geometry actually touching the boundary) is marked as "PIN" in the output LEF macro. All pins are surrounded by a gap wide enough to meet DRC spacing rules, and the rest of the cell is filled with obstruction layers on each metal layer present in the cell.

Added escape sequence substitution for DRC rules. This allows the dimension printed by the "drc why" command option to give measurements in microns (or microns squared, for area rules), and to track with grid scaling. This avoids the need to put both the internal and micron units in the DRC definition and avoids the possibility that they might not match each other.

Added command option plot svg to create scalable graphics, when using the Cairo graphics interface ("magic -d XR").

Added a new cifinput/cifoutput operator "boundary" which translates a layer:purpose pair to a cell boundary using the "property FIXED_BBOX" method.

Extended the device extraction in the techfile extract section to allow multiple extraction methods to be defined for a single tile type. The only restriction is that the definitions must all describe unique situations that are clearly unambiguous. This allows, e.g., nfet with ndiff for source and drain to extract as one device, but nfet with ndiff on source and mvndiff on drain to extract as a different device. Added an optional "+" or "-" keyword at the end of the device extraction definition to indicate a layer (usually a marker layer) that must be present (or absent) specifically for that device. This allows, e.g., an nfet with deep nwell underneath to be extracted differently than an nfet not in deep nwell, or a device with an "ESD" or "RF" marker layer to be extracted as a different device.

Revised substrate extraction to accomodate deep nwell layers. The "substrate" keyword in the extract section can take an optional list of layers starting with "-" to indicate layer types (such as deep nwell) that shield layout from the substrate.

Restored the use of "extresist" with the extension to handle subcells, ports, and all extraction device types (also see "Features Under Development" below).

Added antenna rule violation checks using the new "antennacheck run" command.

Added a "DRC Manager" window to the GUI (lightly developed).

Added new CIF operators "close", to close up internal holes created by grow/shrink operators; and "grow-min" to ensure a minimum layer width (which should be used only in simple geometry cases).

Magic Version 8.1 Release Notes

Date: September 16, 2014 to April 24, 2017

Version 8.1 Distribution Code General Disclaimer:

As of revision 158, this version is "DISTRIBUTION" code. It can generally be expected to be stable. There is, however, no guarantee as to the correctness of generated layout from magic, due to the current sketchiness of technology files available for current fabrication processes. It should produce correct output for the standard "scmos" set of technology files supported by the MOSIS foundry service. For all other processes (especially deep submicron) it is always best to have a good array of backup (commercial) EDA tools. Most foundries provide DRC (design rule checking) services (sometimes free), and it is always best to check for clean DRC before final submission, particularly in regard to antenna and density rules that magic does not check. All layout should pass rigorous DRC, LVS (layout vs. schematic), extraction, and simulation.

Version 8.1 New Features:

First planned effort is to resolve the long-standing problems with Magic's inability to understand the concept of a substrate. The extraction methods will be rewritten to generate a specific node for the substrate, understand how to connect the substrate to metal through p-taps, and be able to detect soft p-tap connection errors.

This effort was largely completed with version 8.1.58 (April 6, 2015). The source code for 8.1 is now reasonably stable, and should be expected to work without undue issues. The completed changes are mostly reflected in Magic's ability to extract the substrate correctly in a hierarchical netlist.

Magic Version 8.0 Release Notes

Date: Februrary 3, 2009 to September 16, 2014

Version 8.0 New Features:

Version 8.0 adds outline vector fonts (courtesy of the freefont project), and aims to clean up a lot of problems associated with labels in Magic. Version 8.0.22 (December 2008) has the first reasonably stable code for handling vector fonts; all the display, manipulation, and selection routines for both X11 and OpenGL are complete.

In addition, Version 8.0 adds some "cifoutput" operators for use with the new "cif paint" command, for manipulating layout using boolean operators.

In 2012, I developed hierarchical SPICE output in conjunction with netgen development version 1.4 (now the distribution version). Magic version 8.0 has a number of new extraction features, such as declaring parameters to be passed to subcircuits, and allowing MOSFETs, resistors, and other devices to be output as subcircuits.

Magic Version 7.5 Release Notes

Date: Februrary 9, 2006 to February 3, 2008

Version 7.5 New Features:

Revision 2 contains extensions of the technology file format that allow multiple DRC styles, style variants, and a scaling factor which allows DRC rules to be written in vendor dimensions, which are rounded up to the nearest lambda or internal unit.

The "extract" section's capacitance descriptions were simplified to allow simple translation between a process description document and the magic techfile.

Major overhaul of the point-to-point maze router, which now works decently well, and doesn't crash the program.

Support for HPGL and HPRTL was added to the raster and PNM plot routines.

Added layer and cell locking capability (commands "tech layer lock" and "instance lock", respectively).

Added the ability to parse a "site.def" file, which is untouched by re-installation of the software.

Revised the contact generation algorithm to place contact cuts in non-rectangular and non-manhattan areas.

Added an extraction method for FET devices with asymmetric source and drain.

Modified subcircuit device extraction to allow parameter passing to SPICE subcircuit calls.

Magic Version 7.4 Release Notes

Date: Februrary 9, 2006 to February 3, 2008

Magic Version 7.3 Release Notes

Date: September 12, 2003 to Februrary 8, 2006

Version 7.3 New Features:

Version 7.3 Technology Files: is an example technology file taking advantage of the new features. In particular, it makes use of the keyword stackable in the contacts section to define a very efficient set of stackable contacts in an 8-metal-layer process. In addition, it makes use of the format 29 extensions, including the asterisk notation for indicating the union of a layer and all contact types containing that layer as a residue, and the new DRC checking keywords "surround", "overhang", and "rect_only".

Note how readable this file is compared to existing technology files (formats 28 and earlier). This technology file has been stripped down, removing high-voltage devices, metal fill layers, metal resistor layers, and the second polysilicon layer, and defining only one or two styles for CIF/GDS input, output, and extraction. However, with the new style, adding these back in will make the file only marginally less readable.

Caution, caution, caution. This technology file does not correspond to any specific fabrication process. It was created for demonstration and test purposes. To match a specific foundry process, values will need to be tweaked, layers added, etc. is a slight modification of the above file for use with technologies defining nine metal layers. It requires magic 7.3 revision 6 (or newer), which defines the 9th metal layer in the graphics colormap and style files. Note how this file takes advantage of the new techfile enhancements, making the addition of the new top-metal layer trivial.

Version 7.3 Bug Fixes from Version 7.2:

Note for AMD 64-bit users (January 2006): I had been having awful problems with the 64-bit version that seemed to be unrelated to magic but related instead to the NVidia graphics driver for the AMD 64-bit platform. Apart from magic, the server would crash on a fairly regular basis, and would crash upon exiting magic. I just updated to the version 8178 of the driver, and so far I have not seen any problems. The last buggy version of the driver that I installed was 7174; I don't know which exact version fixed the problem (there were 5 revisions between 7174 and 8178).

There should be no bug fixes between versions 7.2 and 7.3, as for the time being, any required bug fixes will be made to both versions.

As of revisions starting in the mid-twenties or so, the above statement is probably no longer true. This partly reflects the intent to make version 7.3 the main development branch shortly (before the end of 2004).

Magic Version 7.2 Release Notes

Date: August 29, 2002 to June 3, 2004
I have been working hard on the next-generation "magic" product. While it is in no condition to be called stable, it is a working product and so I am releasing it as BETA code. This is an upgrade from the previous designation as ALPHA code, as several chips have been successfully designed and manufactured using version 7.2. For differences between the 7.1 CVS source version available from Cornell and the 7.2 development version posted here, please see the following sections.

The new development version is 7.3, with the introduction of a complete overhaul of the way magic deals with contacts, allowing arbitrary stacked contacts. Currently this is in a ALPHA state. Information on this version can be found at the Magic 7.3 page.

Revision 36 was reposted on 4/21/03, as I fixed a bug in the extract section which was producing incorrect length and width values for any transistors extracted with technology files not using the new "device" keyword (which is basically all of them except for the default one that comes with the source). The revision number is not updated because I have Revision 37 still on my laptop at home, but did not have the chance to transfer it to my web host yet. However, the fix is critical for correct circuit extraction; otherwise, area and perimeter values are interpreted as length and width on read-in, producing poor results (to say the least).

Revision 37 introduces autoconf to magic. Inevitably, this will produce a whole new round of porting problems for Solaris, Cygwin, OS X, etc. However, once the essential bugs are ironed out, it should result in fewer porting problems overall. For the moment, both configure and make config methods are retained.

Revision 49 changes the "varargs" method to "stdarg" (one of the items in "TODO"). This became urgent when the latest version of gcc claimed not to support the varargs method for variable arguments any more. HOWEVER, the stdarg method is different on different operating systems. The GNU autoconf system checks for this. The original "make config" script does not. In "make config", the correct setting is made for Linux. However, until some bug reports come back, I'm not certain which systems this will or will not compile on.

Revision 55 incorporates a port to the 64-bit Linux platform. Correct operation has been confirmed on an AMD Opteron machine running RedHat GinGin64 (2.4.20 kernel), loading a design with a half-million standard-cell gates and a half-million nets.

Version 7.2 New Features:

Version 7.2 Tcl/Tk-specific Features:

Magic 7.2 To-Do List:

Version 7.2 Fixes from version 7.1:

Magic Version 7.1 Release Notes

Date: September 1, 2000 to February 19, 2004

Features of Magic version 7.1:

The source for the all-inclusive version 7.1 is available as CVS source. To download the source, do the following:
% cvs -d login
% cvs -d checkout magic
The password for user anoncvs is anonymous. The CVS checkout command will create a directory called simply "magic" in the current working directory.

The Magic CVS source page contains instructions and additional information on the very latest work-in-progress development version of Magic.

For more information on features of Magic 7.1 that stem from the Magic 6.5.2 implementation, please take a look at the Magic-6.5.2 page.

Magic Version 6.5.2 Release Notes

Date: September 1, 2000

OpenGL Graphics Interface

Magic version 6.5.2 is an enhancement to the venerable magic VLSI layout tool including support for OpenGL as an optional graphics interface (X11, SunView, and the defunct X10 and AED are still available). The major benefit of using OpenGL is the freedom from the constraint of 8-bit color planes to represent VLSI layers. Instead, the magic "look and feel" of transparent color layers is reproduced by a 3D hardware color blending function.

Warning: You will need hardware-accelerated 3D graphics support for OpenGL to make reasonable use of this program. This should be readily available on all SGI platforms; check for compatibility with other systems.

Currently, Linux requires an OpenGL-compliant video card and the Xi Graphics, Inc., 3D Accelerated-X server (see Other OpenGL-capable X-servers are available from MetroLink, Precision Insight, SuSE, and RedHat. The XFree86 server, beginning with version 4.0, supports OpenGL and also 8-bit color overlays. The overlay visual is the best way to use the X11 version in an otherwise-24-bit graphics environment.

Note that most X servers which have OpenGL support will provide it whether you have the accelerated hardware or not. Functions which do not have hardware support will be emulated in software. Running magic with OpenGL graphics using software-emulated color blending is an exercise in futility.

Graphics cards typically need 32MB of video RAM to fully implement OpenGL in the kind of resolution (1280 x 1024 or more) that you would want to have in order to do VLSI layout (here's a hint: Don't do VLSI layout on anything smaller than a 19" monitor).

For comparison:

  1. Magic using X11 (magic -d X11) (82KB GIF image)
  2. Magic using OpenGL (magic -d OGL) (185KB GIF image)

Also new in Version 6.5.2

This package includes other enhancements by Philippe Pouliquen ( at JHU (except no. 4 is mine):

New features:

New commands (by Philippe Pouliquen, JHU-ECE):

Note that in version 7.2, the commands "child", "parent", "list", "listall", and "listtop" have all been replaced by the two commands "cellname" and "instance".

Known bugs in the OpenGL interface:

Known bugs in 6.5.2 extensions:

Please contact me (see address at bottom of page) with any bug reports or suggestions.

For your information:

The READ_ME file for magic 6.5.2, taken from the top-level source, and the open_gl.txt file from source subdirectory doc/.


Last updated: April 8, 2020 at 11:38am