NAME¶
magic - VLSI layout editor
SYNOPSIS¶
magic [
-T technology ] [
-d
device_type ] [
-g graphics_port ] [
-m monitor_type ] [
-D ] [
file ]
DESCRIPTION¶
Magic is an interactive editor for VLSI layouts that runs under all variants of
UNIX, including Mac OS-X and Cygwin. This man page is a reference manual; if
you are a first-time user, you should use the Magic tutorials to get
acquainted with the system (see the online resources links below).
Magic uses two windows: one for text and a separate window for displaying
layouts. Magic runs under the window system X11 (use under Cygwin requires the
presence of an X11 server in Windows; the server that comes packaged with
Cygwin works well). The command line switch "-d" can be used to tell
Magic which kind of display you are running. Specifically, this is useful to
tell magic to use OpenGL graphics instead of plain X11 ("-d OGL"),
or to use 24 bit plane graphics instead of 8 bit planes ("-d
24BITS") if both are available on a video card with overlay support.
Here are the options accepted by Magic:
- -T
- The next argument is the name of a technology. The tile
types, display information, and design rules for this technology are read
by Magic from a technology file when it starts up. The technology defaults
to ``scmos''.
- -d
- The next argument is the type of workstation or graphics
display being used. Magic supports these types:
- NULL
- A null device for running Magic without using a graphics
display, such as a batch job. Note that the special case
"-dnull" (lowercase, no space) has a more streamlined startup
specifically for batch processing.
- X11
- X-windows, version 11. The is the preferred interface.
Magic acts as a client to the X window server and interfaces to all
graphics terminals supported by the X server.
- OGL
- OpenGL graphics running under X11. This is the preferred
interface on systems having hardware-accelerated 3D graphics video cards
and drivers.
- Addition information on Magic's X11 driver, including
options for .Xdefaults files, may be found in ``Magic Maintainer's Manual
#4: Using Magic Under X Windows''.
- XWIND
- Simply another name for the X11 driver.
If no device is specified, Magic tries to guess which driver is appropriate (by
checking the environment variables and by poking around in /dev).
When Magic starts up it looks for a command file in
${CAD_ROOT}/magic/sys/.magicrc and processes it if it exists. Then Magic looks
for a file with the name ``.magicrc'' in the home directory and processes it
if it exists. Finally, Magic looks for a .magicrc file in the current
directory and reads it as a command file if it exists. The .magicrc file
format is described under the
source command. If magic is compiled with
Tcl/Tk support, then any magic or Tcl/Tk commands may be used inside the
startup file. The startup file name was changed to ".magicrc" to
avoid conflicts with a common system file named ".magic". However,
the name ".magic" will be searched after ".magicrc" for
backward compatibility.
Magics uses types of commands: Key macros and long commands. The first form
consists of single-key (or button) abbreviations called ``macros''; macros are
invoked by pressing a single key or mouse button. Certain macros are
predefined in the systemwide ${CAD_ROOT}/magic/sys/.magicrc file, but you can
override them and add your own macros using the
macro command
(described below under COMMANDS FOR ALL WINDOWS). The special macro
"." is reserved to mean "execute the last typed long
command".
You can enter long commands in the terminal console at the console prompt, or
from the layout window by typing a
: or
; key, which are the two
other reserved macros meaning "switch keyboard focus to the console
window". After typing the
: or
; key, type the text of the
command, which will be written to the terminal window. Multiple commands may
be specified on one line by separating them with semicolons.
Most commands deal with the window underneath the cursor, so if a command
doesn't do what you expect make sure that you are pointing to the correct
place on the screen. There are several different kinds of windows in Magic
(layout, color, and netlist); each window has a different command set,
described in a separate section below.
Magic uses a three button mouse. The buttons are interpreted in a way that
depends on the current tool, as indicated by the shape of the cursor (see the
tool command). The various tools are described below. The initial tool
is
box. These interpretations apply only when mouse buttons are pressed
in the interior of a layout window.
- Box Tool
- This is the default tool, and is indicated by a crosshair
cursor. It is used to position the box and to paint and erase:
- left
- This button is used to move the box by one of its corners.
Normally, this button picks up the box by its lower-left corner. To pick
the box up by a different corner, click the right button while the left
button is down. This switches the pick-up point to the corner nearest the
cursor. When the button is released, the box is moved to position the
corner at the cursor location. If the box has been set to snap to the
window's grid (see the :snap command), then the box corner is left
aligned with the grid that the user has chosen for the window with the
:grid command, even if that grid is not visible.
- right
- Change the size of the box by moving one corner. Normally
this button moves the upper-right corner of the box. To move a different
corner, click the left button while the right button is down. This
switches the corner to the one nearest the cursor. When you release the
button, three corners of the box move in order to place the selected
corner at the cursor location (the corner opposite the one you picked up
remains fixed). Snapping to the window's grid is handled as for the left
button.
- middle (bottom)
- Used to paint or erase. If the crosshair is over paint,
then the area of the box is painted with the layer(s) underneath the
crosshair. If the crosshair is over white space, then the area of the box
is erased.
- Wiring Tool
- The wiring tool, indicated by an arrow cursor, is used to
provide an efficient interface to the wiring commands:
- left
- Same as the long command wire type.
- right
- Same as the long command wire leg.
- middle (bottom)
- Same as the long command wire switch.
- Netlist Tool
- This tool is used to edit netlists interactively. It is
indicated by a thick box cursor.
- left
- Select the net associated with the terminal nearest the
cursor.
- right
- Find the terminal nearest the cursor, and toggle it into
the current net (if it wasn't already in the current net) or out of the
current net (if it was previously in the net).
- middle (bottom)
- Find the terminal nearest the cursor, and join its net with
the current net.
- Rsim Tool
- Used when running the IRSIM simulator under Magic. A
pointing hand is used as the cursor.
- left
- Moves the box just like the box tool.
- right
- Moves the box just like the box tool.
- middle (bottom)
- Displays the Rsim node values of the selected paint.
LONG COMMANDS FOR LAYOUT WINDOWS¶
These commands work if you are pointing to the interior of a layout window.
Commands are invoked by typing a colon (``:'') or semi-colon (``;''), followed
by a line containing a command name and zero or more parameters. In addition,
macros may be used to invoke commands with single keystrokes. Useful default
macros are set in the global
.magicrc file (in
${CAD_ROOT}/magic/sys, normally
/usr/local/lib/magic/sys). You
can list all current macros with the
macro command, described under
``LONG COMMANDS FOR ALL WINDOWS''. Unique abbreviations are acceptable for all
keywords in commands. The commands are:
- addpath searchpath
- Add more directories to the end of Magic's cell search
path. See the documentation for the path command for an explanation
of the search path.
- array xsize ysize
- Make many copies of the selection. There will be
xsize instances in the x-direction and ysize instances in
the y-direction. Paint and labels are arrayed by copying them. Subcells
are not copied, but instead each instance is turned into an array instance
with elements numbered from 0 to xsize-1 in the x-direction, and
from 0 to ysize-1 in the y-direction. The spacing between elements
of the array is determined by the box x- and y-dimensions.
- array xlo ylo xhi yhi
- Identical to the form of array above, except that
the elements of arrayed cells are numbered left-to-right from xlo
to xhi and bottom-to-top from ylo to yhi. It is legal
for xlo to be greater than xhi, and also for ylo to
be greater than yhi.
- box [args]
- Used to change the size of the box or to find out its size.
There are several sorts of arguments that may be given to this
command:
- (No arguments.)
- Show the box size and its location in the edit cell, or
root cell of its window if the edit cell isn't in that window.
- direction [distance]
- Move the box distance units in direction,
which may be one of left, right, up, or down.
Distance defaults to the width of the box if direction is
right or left, and to the height of the box if
direction is up or down.
- width [size]
- height [size]
- Set the box to the width or height indicated. If
size is not specified the width or height is reported.
- x1 y1 x2 y2
- Move the box to the coordinates specified (these are in
edit cell coordinates if the edit cell is in the window under the cursor;
otherwise these are in the root coordinates of the window). x1 and
y1 are the coordinates of the lower left corner of the box, while
x2 and y2 are the upper right corner. The coordinates must
all be integers.
- calma [option] [args]
- This command is used to read and write files in Calma GDS
II Stream format (version 3.0, corresponding to GDS II Release 5.1). This
format is like CIF, in that it describes physical mask layers instead of
Magic layers. In fact, the technology file specifies a correspondence
between CIF and Calma layers. The current CIF output style (see
cif ostyle) controls how Calma stream layers are generated
from Magic layers. If no arguments are given, the calma command
generates a Calma stream file for the layout in the window beneath the
cursor in file.strm, where file is the name of the
root cell. This stream file describes the entire cell hierarchy in the
window. The name of the library is the same as the name of the root cell.
Option and args may be used to invoke one of several
additional operations:
- calma flatten
- Ordinarily, Magic arrays are output using the Calma ARRAY
construct. After a calma flatten command, though, arrays will be
output instead as a collection of individual cell uses, as occurs when
writing CIF.
- calma help
- Print a short synopsis of all of the calma command
options.
- calma labels
- Output labels whenever writing a Calma output file.
- calma lower
- Allow both upper and lower case to be output for label
text. This is the default behavior; calma nolower causes lower case
to be converted to upper case on output.
- calma noflatten
- Undoes the effect of a prior :calma flatten command,
re-enabling the output of Magic arrays using the Calma ARRAY
construct.
- calma nolabels
- Don't output labels when writing a Calma output file.
- calma nolower
- Convert lower to upper case when outputting labels.
- calma read file
- The file file.strm is read in Calma format
and converted to a collection of Magic cells. The current CIF input style
determines how the Calma layers are converted to Magic layers. The new
cells are marked for design-rule checking. Calma format doesn't identify
the root of the collection of cells read in, so none of the cells read
will appear on the display; use load to make them visible. If the
Calma file had been produced by Magic, then the name of the root cell is
the same as the library name printed by the :calma read
command.
- calma write fileName
- Writes a stream file just as if no arguments had been
entered, except that the output is written into
fileName.strm instead of using the root cell name for the
file name.
- channels
- This command will run just the channel decomposition part
of the Magic router, deriving channels for the area under the box. The
channels will be displayed as outlined feedback areas over the edit
cell.
- cif [option] [args]
- Read or write files in Caltech Intermediate Form (CIF). If
no arguments are given, this command generates a CIF file for the window
beneath the cursor in file.cif, where file is the
name of the root cell. The CIF file describes the entire cell hierarchy in
the window. Option and args may be used to invoke one of
several additional CIF operations:
- cif arealabels [yes | no]
- Enables/disables the cif area-label extension. If enabled,
area labels are written via the 95 cif extension. If disabled,
labels are collapsed to points when writing cif and the 94 cif
construct is used. Area-labels are disabled by default (many programs
don't understand cif area-labels).
- cif help
- Print a short synopsis of all of the cif command
options.
- cif istyle [style]
- Select the style to be used for CIF input. If no
style argument is provided, then Magic prints the names of all CIF
input styles defined in the technology file and identifies the current
style. If style is provided, it is made the current style.
- cif ostyle [style]
- Select the style to be used for CIF output. If no
style argument is provided, then Magic prints the names of all CIF
output styles defined in the technology file and identifies the current
style. If style is provided, it is made the current style.
- cif read file
- The file file.cif is read in CIF format and
converted to a collection of Magic cells. The current input style
determines how the CIF layers are converted to Magic layers. The new cells
are marked for design-rule checking. Any information in the top-level CIF
cell is copied into the edit cell. Note: this command is not undo-able (it
would waste too much space and time to save information for undoing).
- cif see layer
- In this command layer must be the CIF name for a
layer in the current output style. Magic will display on the screen all
the CIF for that layer that falls under the box, using stippled feedback
areas. It's a bad idea to look at CIF over a large area, since this
command requires the area under the box to be flattened and therefore is
slow.
- cif statistics
- Prints out statistics gathered by the CIF generator as it
operates. This is probably not useful to anyone except system
maintainers.
- cif write fileName
- Writes out CIF just as if no arguments had been entered,
except that the CIF is written into fileName.cif instead of
using the root cell name for the file name. The current output style
controls how CIF layers are generated from Magic layers.
- cif flat fileName
- Writes out CIF as in the cif write command, but
flattens the design first (e.g. creates an internal version with the cell
hierarchy removed). This is useful if one wishes to use the and-not
feature of the CIF output styles, but is having problems with interactions
of overlapping cells.
- clockwise [degrees]
- Rotate the selection by 90, 180 or 270
degrees. After the rotation, the lower-left corner of the selection's
bounding box will be in the same place as the lower-left corner of the
bounding box before the rotation. Degrees defaults to 90. If
the box is in the same window as the selection, it is rotated too. Only
material in the edit cell is affected.
- copy [direction [amount]]
- copy to x y
- If no arguments are given, a copy of the selection is
picking up at the point lying underneath the box lower-left corner, and
placed so that this point lies at the cursor position. If direction
is given, it must be a Manhattan direction (e.g. north, see the
``DIRECTIONS'' section below). The copy of the selection is moved in that
direction by amount. If the box is in the same window as the
selection, it is moved too. Amount defaults to 1. The second
form of the command behaves as though the cursor were pointing to (
x, y) in the edit cell; a copy of the selection is picked up
by the point beneath the lower-left corner of the box and placed so that
this point lies at ( x, y).
- corner direction1 direction2 [layers]
- This command is similar to fill, except that it
generates L-shaped wires that travel across the box first in
direction1 and then in direction2. For example, corner
north east finds all paint under the bottom edge of the box and
extends it up to the top of the box and then across to the right side of
the box, generating neat corners at the top of the box. The box should be
at least as tall as it is wide for this command to work correctly.
Direction1 and direction2 must be Manhattan directions (see
the section DIRECTIONS below) and must be orthogonal to each other. If
layers is specified then only those layers are used; otherwise all
layers are considered.
- delete
- Delete all the information in the current selection that is
in the edit cell. When cells are deleted, only the selected use(s) of the
cell is (are) deleted: other uses of the cell remain intact, as does the
disk file containing the cell. Selected material outside the edit cell is
not deleted.
- drc option [args]
- This command is used to interact with the design rule
checker. Option and args (if needed) are used to invoke a
drc command in one of the following ways:
- drc catchup
- Let the checker process all the areas that need rechecking.
This command will not return until design-rule checking is complete or an
interrupt is typed. The checker will run even if the background checker
has been disabled with drc off.
- drc check
- Mark the area under the box for rechecking in all cells
that intersect the box. The recheck will occur in background after the
command completes. This command is not normally necessary, since Magic
automatically remembers which areas need to be rechecked. It should only
be needed if the design rules are changed.
- drc count
- Print the number of errors in each cell under the box.
Cells with no errors are skipped.
- drc find [nth]
- Place the box over the nth error area in the
selected cell or edit cell, and print out information about the error just
as if drc why had been typed. If nth isn't given (or is less
than 1), the command moves to the next error area. Successive invocations
of drc find cycle through all the error tiles in the cell. If
multiple cells are selected, this command uses the upper-leftmost one. If
no cells are selected, this command uses the edit cell.
- drc help
- Print a short synopsis of all the drc command options.
- drc off
- Turn off the background checker. From now on, Magic will
not recheck design rules immediately after each command (but it will
record the areas that need to be rechecked; the command drc on can
be used to restart the checker).
- drc on
- Turn on the background checker. The checker will check
whatever modifications have not already been checked. From now on, the
checker will reverify modified areas as they result from commands. The
checker is run in the background, not synchronously with commands, so it
may get temporarily behind if massive changes are made.
- drc printrules [file]
- Print out the compiled rule set in file, or on the
text terminal if file isn't given. For system maintenance
only.
- drc rulestats
- Print out summary statistics about the compiled rule set.
This is primarily for use in writing technology files.
- drc statistics
- Print out statistics kept by the design-rule checker. For
each statistic, two values are printed: the count since the last time
drc statistics was invoked, and the total count in this editing
session. This command is intended primarily for system maintenance
purposes.
- drc why
- Recheck the area underneath the box and print out the
reason for each violation found. Since this command causes a recheck, the
box should normally be placed around a small area (such as an error
area).
- dump cellName [child refPointC]
[parent refPointP]
- Copy the contents of cell cellName into the edit
cell so that refPointC in the child is positioned at point
refPointP in the edit cell. The reference points can either be the
name of a label, in which case the lower-left corner of the label's box is
used as the reference point, or as a pair of numbers giving the (
x, y) coordinates of a point explicitly. If
refPointC is not specified, the lower-left corner of
cellName cell is used. If refPointP is not specified, the
lower-left corner of the box tool is used (the box must be in a window on
the edit cell). After this command completes, the new information is
selected.
- edit
- Make the selected cell the edit cell, and edit it in
context. The edit cell is normally displayed in brighter colors than other
cells (see the see command to change this). If more than one cell
is selected, or if the selected cell is an array, the cursor position is
used to select one of those cells as the new edit cell. Generally, Magic
commands modify only the current edit cell.
- erase [layers]
- For the area enclosed by the box, erase all paint in
layers. (See the ``LAYERS'' section for the syntax of layer lists).
If layers is omitted it defaults to *,labels. See your
technology manual, or use the layers command, to find out about the
available layer names.
- expand [toggle]
- If the keyword toggle is supplied, all of the
selected cells that are unexpanded are expanded, and all of the selected
cells that are expanded are unexpanded. If toggle isn't specified,
then all of the cells underneath the box are expanded recursively until
there is nothing but paint under the box.
- extract option [args]
- Extract a layout, producing one or more hierarchical
.ext files that describe the electrical circuit implemented by the
layout. The current extraction style (see extract style below)
determines the parameters for parasitic resistance, capacitance, etc. that
will be used. The extract command with no parameters checks
timestamps and re-extracts as needed to bring all .ext files
up-to-date for the cell in the window beneath the crosshair, and all cells
beneath it. Magic displays any errors encountered during circuit
extraction using stippled feedback areas over the area of the error, along
with a message describing the type of error. Option and args are
used in the following ways:
- extract all
- All cells in the window beneath the cursor are re-extracted
regardless of whether they have changed since last being extracted.
- extract cell name
- Extract only the currently selected cell, placing the
output in the file name. If more than one cell is selected, this
command uses the upper-leftmost one.
- extract do [ option ]
- extract no option
- Enable or disable various options governing how the
extractor will work. Use :extract do with no arguments to print a
list of available options and their current settings. When the
adjust option is enabled, the extractor will compute compensating
capacitance and resistance whenever cells overlap or abut; if disabled,
the extractor will not compute these adjustments but will run faster. If
capacitance is enabled, node capacitances to substrate (perimeter
and area) are computed; otherwise, all node capacitances are set to zero.
Similarly, resistance governs whether or not node resistances are
computed. The coupling option controls whether coupling
capacitances are computed or not; if disabled, flat extraction is
significantly faster than if coupling capacitance computation is enabled.
Finally, the length option determines whether or not pathlengths in
the root cell are computed (see extract length below).
- extract help
- Prints a short synopsis of all the extract command
options.
- extract length [ option args ]
- Provides several options for controlling which
point-to-point path lengths are extracted explicitly. The extractor
maintains two internal tables, one of drivers, or places where a
signal is generated, and one of receivers, or places where a signal
is sent. The components of each table are hierarchical label names,
defined by means of the two commands extract length driver name1
[ name2 ...] and extract length receiver name1
[name2 ...]. If extraction of pathlengths is enabled (``
:extract do length''), then when the root cell in an extract
command is being extracted, the extractor will compute the shortest and
longest path between each driver and each receiver on the same electrical
net, and output it to the .ext file for the root cell. Normally,
one should create a file of these Magic commands for the circuit drivers
and receivers of interest, and use source to read it in prior to
circuit extraction. Extract length clear removes all the entries
from both the driver and receiver tables.
- extract parents
- Extract the currently selected cell and all of its parents.
All of its parents must be loaded in order for this to work correctly. If
more than one cell is selected, this command uses the upper-leftmost
one.
- extract showparents
- Like extract parents, but only print the cells that
would be extracted; don't actually extract them.
- extract style [style]
- Select the style to be used for extraction parameters. If
no style argument is provided, then Magic prints the names of all
extraction parameter styles defined in the technology file and identifies
the current style. If style is provided, it is made the current
style.
- extract unique [#]
- For each cell in the window beneath the cursor, check to
insure that no label is attached to more than one node. If the #
keyword was not specified, whenever a label is attached to more than one
node, the labels in all but one of the nodes are changed by appending a
numeric suffix to make them unique. If the # keyword is specified,
only names that end in a `` #'' are made unique; any other
duplicate nodenames that don't end in a `` !'' are reported by
leaving a warning feedback area. This command is provided for converting
old designs that were intended for extraction with Mextra, which would
automatically append unique suffixes to node names when they appeared more
than once.
- extract warn [ [no] option |
[no] all ]
- The extractor always reports fatal errors. This command
controls the types of warnings that are reported. Option may be one
of the following: dup, to warn about two or more unconnected nodes
in the same cell that have the same name, fets, to warn about
transistors with fewer than the minimum number of terminals, and
labels, to warn when nodes are not labeled in the area of cell
overlap. In addition, all may be used to refer to all warnings. If
a warning is preceded by no, it is disabled. To disable all
warnings, use `` extract warn no all''. To see which warning
options are in effect, use `` extract warn''.
- extresist [cell [threshold] ]
- Postprocessor for improving on the resistance calculation
performed by the circuit extractor. To use this command, you first have to
extract the design rooted at cell with
:extract cell, and then flatten the design using
ext2sim(1), producing the files cell.sim and
cell .nodes. Then run :extresist cell to
produce a file, cell.res.ext, containing differences between
the network described by the .ext files produced the first time
around, and a new network that incorporates explicit two-point resistors
where appropriate (see below). This file may be appended to
cell.ext, and then ext2simrun for a second time, to
produce a new network with explicit resistors. The threshold
parameter is used to control which nodes are turned into resistor
networks: any node whose total resistance exceeds threshold times
the smallest on-resistance of any transistor connected to that node will
be approximated as a resistor network.
- feedback option [args]
- Examine feedback information that is created by several of
the Magic commands to report problems or highlight certain things for
users. Option and args are used in the following ways:
- feedback add text [style]
- Used to create a feedback area manually at the location of
the box. This is intended as a way for other programs like Crystal to
highlight things on a layout. They can generate a command file consisting
of a feedback clear command, and a sequence of box and
feedback add commands. Text is associated with the feedback
(it will be printed by feedback why and feedback find).
Style tells how to display the feedback, and is one of
dotted, medium, outline, pale, and
solid (if unspecified, style defaults to pale).
- feedback clear
- Clears all existing feedback information from the
screen.
- feedback count
- Prints out a count of the current number of feedback
areas.
- feedback find [nth]
- Used to locate a particular feedback area. If nth is
specified, the box is moved to the location of the nth feedback
area. If nth isn't specified, then the box is moved to the next
sequential feedback area after the last one located with feedback
find. In either event, the explanation associated with the feedback
area is printed.
- feedback help
- Prints a short synopsis of all the feedback command
options.
- feedback save file
- This option will save information about all existing
feedback areas in file. The information is stored as a collection
of Magic commands, so that it can be recovered with the command source
file.
- feedback why
- Prints out the explanations associated with all feedback
areas underneath the box.
- fill direction [layers]
- Direction is a Manhattan direction (see the section
DIRECTIONS below). The paint visible under one edge of the box is sampled.
Everywhere that the edge touches paint, the paint is extended in the given
direction to the opposite side of the box. For example, if
direction is north, then paint is sampled under the bottom
edge of the box and extended to the top edge. If layers is
specified, then only the given layers are considered; if layers
isn't specified, then all layers are considered.
- findbox [zoom]
- Center the view on the box. If the optional zoom
argument is present, zoom into the area specified by the box. This command
will complain if the box is not in the window you are pointing to.
- flush [cellname]
- Cell cellname is reloaded from disk. All changes
made to the cell since it was last saved are discarded. If cellname
is not given, the edit cell is flushed.
- garoute option [args]
- This command, with no option or arg, is like
the route command: it generates routing in the edit cell to make
connections specified in the current netlist. (See the route
command for further information). Unlike the route command, this
command is intended to be used for routing types of circuits, such as
gate-arrays, whose routing channels can be determined in advance, and
which require the ability to river-route across the tops of cells. The
channels must have been predefined using garoute channel
commands prior to this command being invoked. Unlike the route
command, where the box indicates the routing area, this command ignores
the box entirely. The new wires are placed in the edit cell. The netlist
used is that selected by the route netlist command, or the current
netlist being edited in a netlist window if no route netlist
command has been given. Options and args have the following
effects:
- garoute channel [type]
- garoute channel xlo ylo xhi yhi
[type]
- Define a channel. If xlo, ylo, xhi,
and yhi are provided, they are interpreted as the coordinates of
the lower-left and upper-right of the bounding box for the channel
respectively. Otherwise, the coordinates of the box are used. The boundary
of each channel is adjusted inward to lie halfway between routing grid
lines if it does not lie there already; if the channel is adjusted, a
warning message is printed. The channel defined is an ordinary routing
channel if type is not specified; such channels are identical to
those used by the router of the route command. If type is
given, it must be either h or v. The channel thereby created
will be a river-routing channel inside which only left-to-right
routes are possible (`` h'') or top-to-bottom (``v'').
Unlike a normal channel, a river-routing channel may contain terminals in
its interior.
- garoute generate type [file]
- Provides a primitive form of channel decomposition for
regular structures such as gate-array or standard-cell layouts. Generates
a collection of garoute channel commands, either to the standard
output, or to file if the latter is specified. The type
parameter must be either h or v. The entire area contained
within the box is turned into routing channels. Each cell inside this area
has its bounding box computed for purposes of routing by looking only at
those layers considered to be ``obstacles'' to routing (see ``Tutorial #7:
Netlists and Routing'' for details). The bounding box just computed is
then extended all the way to the sides of the area of the box tool,
vertically if type is h or horizontally if type is
v. This extended area is then marked as belonging to a
river-routing channel of type type; adjacent channels of this type
are merged into a single channel. After all cells are processed, the areas
not marked as being river-routing channels are output as normal
channels.
- garoute help
- Print a short synopsis of all the garoute command
options.
- garoute nowarn
- If a given terminal appears in more than one place inside a
cell, the router can leave feedback if it is not possible to route to all
of the places where the terminal appears. The garoute nowarn
command instructs the router to leave feedback only if it is not possible
to route to any of the locations of a terminal. (This is the
default behavior of garoute router).
- garoute route [netlist]
- Route the edit cell. If netlist is not specified,
the netlist used is the same as when garoute is given with no
options. If netlist is given, then it is used instead.
- garoute reset
- Clear all channels defined by garoute channel in
preparation for redefining a new set of channels.
- garoute warn
- The opposite of garoute nowarn, this command
instructs the router to leave feedback if it is not possible to route to
all of the places where a terminal appears when a terminal has more than
one location, even if not all of those locations are actually selected for
routing by the global router.
- getcell cellName [child refPointC]
[ parent refPointP]
- This command adds a child cell instance to the edit cell.
The instance refers to the cell cellName; it is positioned so that
refPointC in the child is at point refPointP in the edit
cell. The reference points can either be the name of a label, in which
case the lower-left corner of the label's box is used as the reference
point, or as a pair of numbers giving the ( x, y)
coordinates of a point explicitly. If refPointC is not specified,
the lower-left corner of cellName cell is used. If refPointP
is not specified, the lower-left corner of the box tool is used (the box
must be in a window on the edit cell). The new subcell is selected. The
difference between this command and dump is that dump copies
the contents of the cell, while getcell simply makes a reference to
the original cell. Cellname must not be the edit cell or one of its
ancestors.
- getnode [alias on | alias off]
- getnode [abort [str]]
- Getnode prints out the node names (used by the extractor)
for all selected paint. If aliasing turned on, getnode prints all the
names it finds for a given node. It may not print every name that exists,
however. When turned off, it just prints one name. The abort option allows
the user to tell getnode that it is not important to completely search
nodes that have certain names. For example, getnode abort Vdd will
tell getnode not to continue searching the node if it determines that one
of its names is Vdd. A getnode abort, without a string argument,
will erase the list of names previously created by calling getnode
abort with string arguments. Getnode can be safely aborted at any time
by typing the interrupt character, usually ^C. See Tutorial #11: Using
IRSIM and RSIM with Magic for more information on this command.
- grid [xSpacing [ySpacing [xOrigin
yOrigin]]]
- grid off
- If no arguments are given, a one-unit grid is toggled on or
off in the window underneath the cursor. Grid off always turns the
grid off, regardless of whether it was on or off previously. If numerical
arguments are given, the arguments determine the grid spacing and origin
for the window under the cursor. In its most general form, grid
takes four integer arguments. XOrigin and yOrigin specify an
origin for the grid: horizontal and vertical grid lines will pass through
this point. XSpacing and ySpacing determine the number of
units between adjacent grid lines. If xOrigin and yOrigin
are omitted, they default to 0. If ySpacing is also omitted, the
xSpacing value is used for both spacings. Grid parameters will be retained
for a window until explicitly changed by another grid command. When
the grid is displayed, a solid box is drawn to show the origin of the edit
cell.
- identify instance_id
- Set the instance identifier of the selected cell use to
instance_id. Instance_id must be unique among all instance
identifiers in the parent of the selected cell. Initially, Magic
guarantees uniqueness of identifiers by giving each cell an initial
identifier consisting of the cell definition name followed by an
underscore and a small integer.
- iroute subcommand [args]
- This command provides an interactive interface to the Magic
maze-router. Routing is done one connection at a time. Three internal
hint layers, magnet, fence, and rotate, allow
the user to guide routing graphically. Routes are chosen close to magnets
(if possible), routing does not cross fence boundaries, and rotate areas
reverse the preferred routing directions for each layer. The maze-router
seeks to find a lowest-cost path. Parameters specifying costs for
horizontal and vertical routing on each layer, cost for jogs and contacts,
and cost (per unit area) for distance between a path and magnets, help
determine the nature of the routes. Several search parameters
permit tuning to achieve acceptable routes in as short a time as possible.
Routing can always be interrupted with ^C. The iroute subcommands
are as follows:
- iroute
- Routes from cursor to inside box.
- iroute contact [type] [parameter]
[value1] ... [ valuen]
- An asterisk, *, can be used for type and
parameter. This command is for setting and examining parameters
related to contacts.
- iroute help [subcommand]
- Summarizes irouter commands. If a subcommand is
given, usage information for that subcommand is printed.
- iroute layers [type] [parameter]
[value1] ... [ valuen]
- An asterisk, *, can be used for type and
parameter. This command is for setting and examining parameters
related to route layers.
- iroute route [options]
- Invokes the router. Options are as follows:
-sLayers layers = layers route may start on
-sCursor = start route at cursor (DEFAULT)
-sLabel name = start route at label of given name
-sPoint x y = start route at given coordinates
-dLayers layers = layers route may end on
-dBox = route to box (DEFAULT)
-dLabel name = route to label of given name
-dRect xbot ybot xtop ytop = route to rectangle of given coordinates
-dSelection = route to selection
- iroute saveParameters <filename>
- Saves all current irouter parameter settings. The
parameters can be restored to these values with the command `` source
filename''.
- iroute search [searchParameter]
[value]
- Allows parameters controlling the search to be modified. If
routing is too slow try increasing rate. If the router is producing
bad results, try reducing rate. Its a good idea to make
width at least twice as big as rate.
- iroute spacings [route-type] [type]
[spacing] ... [typen spacingn]
- Default minimum spacings between a route-type placed by the
router and other types are derived from the drc section of the
technology file. The defaults can be overridden by this command. The
special type SUBCELL is used to specify minimum spacing to
unexpanded subcells.
- iroute verbosity [level]
- Controls the number of messages printed during routing:
0 = errors and warnings only,
1 = brief,
2 = lots of statistics.
- iroute version
- Prints irouter version information.
- iroute wizard [wizardparameter]
[value]
- Used to examine and set miscellaneous parameters. Most of
these are best left alone by the unadventurous user.
- label string [pos [layer]]
- A label with text string is positioned at the box
location. Labels may cover points, lines, or areas, and are associated
with specific layers. Normally the box is collapsed to either a point or
to a line (when labeling terminals on the edges of cells). Normally also,
the area under the box is occupied by a single layer. If no layer
argument is specified, then the label is attached to the layer under the
box, or space if no layer covers the entire area of the box. If
layer is specified but layer doesn't cover the entire area
of the box, the label will be moved to another layer or space. Labels
attached to space will be considered by CIF processing programs to be
attached to all layers overlapping the area of the label. Pos is
optional, and specifies where the label text is to be displayed relative
to the box (e.g. ``north''). If pos isn't given, Magic will pick a
position to ensure that the label text doesn't stick out past the edge of
the cell.
- layers
- Prints out the names of all the layers defined for the
current technology.
- load [file]
- Load the cell hierarchy rooted at file.mag
into the window underneath the cursor. If no file is supplied, a
new unnamed cell is created. The root cell of the hierarchy is made the
edit cell unless there is already an edit cell in a different window.
- move [direction [amount]]
- move to x y
- If no arguments are given, the selection is picked up by
the point underneath the lower-left corner of the box and moved so that
this point lies at the cursor location. If direction is given, it
must be a Manhattan direction (e.g. north). The selection is moved
in that direction by amount. If the box is in the same window as
the selection, it is moved too. Amount defaults to 1. Selected
material that is not in the edit cell, is not affected. The second form of
the command is as though the cursor were pointing to ( x, y)
in the edit cell; the selection is picked up by the point beneath the
lower-left corner of the box and moved so that this point lies at (
x, y).
- paint layers
- The area underneath the box is painted in
layers.
- path [searchpath]
- This command tells Magic where to look for cells.
Searchpath contains a list of directories separated by colons or
spaces (if spaces are used, then searchpath must be surrounded by
quotes). When looking for a cell, Magic will check each directory in the
path in order, until the cell is found. If the cell is not found anywhere
in the path, Magic will look in the system library for it. If the
path command is invoked with no arguments, the current search path
is printed.
- plot option [args]
- Used to generate hardcopy plots direct from Magic.
Options and args are used in the following ways:
- plot gremlin file [layers]
- Generate a Gremlin-format description of everything under
the box, and write the description in file. If layers isn't
specified, paint, labels, and unexpanded subcells are all included in the
Gremlin file just as they appear on the screen. If layers is
specified, then just the indicated layers are output in the Gremlin file.
Layers may include the special layers labels and
subcell. The Gremlin file is scaled to have a total size between
256 and 512 units; you should use the width and/or height
Grn commands to ensure that the printed version is the size you want. Use
the mg stipples in Grn. No plot parameters are used in Gremlin
plotting.
- plot help
- Print a short synopsis of all the plot command
options.
- plot parameters [name value]
- If plot parameters is invoked with no additional
arguments, the values for all of the plot parameters are printed. If
name and value are provided, then name is the name of
a plot parameter and value is a new value for it. Plot parameters
are used to control various aspects of plotting; all of them have
``reasonable'' initial values. Most of the parameters available now are
used to control Versatec-style plotting. They are:
- cellIdFont
- The name of the font to use for cell instance ids in
Versatec plots. This must be a file in Vfont format.
- cellNameFont
- The name of the font to use for cell names in Versatec
plots. This must be a file in Vfont format.
- color
- If this is set to true, the :plot versatec
command will generate output suitable for a four-color Versatec plotter,
using the styles defined in the colorversatec style of the
plot section of the technology file. If color is
false (the default), then :plot versatec generates normal
black-and-white plots.
- directory
- The name of the directory in which to create raster files
for the Versatec. The raster files have names of the form
magicPlotXXXXXX, where XXXXXX is a process-specific
identifier.
- dotsPerInch
- Indicates how many dots per inch there are on the Versatec
printer. This parameter is used only for computing the scale factor for
plotting. Must be an integer greater than zero.
- labelFont
- The name of the font to use for labels in Versatec plots.
This must be a file in Vfont format.
- printer
- The name of the printer to which to spool Versatec raster
files.
- showcellnames
- If ``true'' (the default) then the name and
instance-identifier of each unexpanded subcell is displayed inside its
bounding box. If this parameter is ``false'' then only the bounding box of
the cell is displayed.
- spoolCommand
- The command used to spool Versatec raster files. This must
be a text string containing two ``%s'' formatting fields. The first ``%s''
will be replaced with the printer name, and the second one will be
replaced with the name of the raster file.
- swathHeight
- How many raster lines of Versatec output to generate in
memory at one time. The raster file is generated in swaths in order to
keep the memory requirements reasonable. This parameter determines the
size of the swaths. It must be an integer greater than zero, and should be
a multiple of 16 in order to avoid misalignment of stipple patterns.
- width
- The number of pixels across the Versatec printer. Must be
an integer greater than 0, and must be an even multiple of 32.
- plot versatec [size [layers]]
- Generate a raster file describing all the the information
underneath the box in a format suitable for printing on Versatec
black-and-white or color printers, and spool the file for printing. See
the plot parameters above for information about the parameters that are
used to control Versatec plotting. Size is used to scale the plot:
a scalefactor is chosen so that the area of the box is size inches
across on the printed page. Size defaults to the width of the
printer. Layers selects which layers (including labels and
subcells) to plot; it defaults to everything visible on the screen.
- plow direction [layers]
- plow option [args]
- The first form of this command invokes the plowing
operation to stretch and/or compact a cell. Direction is a
Manhattan direction. Layers is an optional collection of mask
layers, which defaults to *. One of the edges of the box is treated
as a plow and dragged to the opposite edge of the box (e.g. the left edge
is used as the plow when plow right is invoked). All edges on
layers that lie in the plow's path are pushed ahead of it, and they
push other edges ahead of them to maintain design rules, connectivity, and
transistor and contact sizes. Subcells are moved in their entirety without
being modified internally. Any mask information overlapping a subcell
moved by plowing is also moved by the same amount. Option and
args are used in the following ways:
- plow boundary
- The box specifies the area that may be modified by plowing.
This area is highlighted with a pale stipple outline. Subsequent plows are
not allowed to modify any area outside that specified by the box; if they
do, the distance the plow moves is reduced by an amount sufficient to
insure that no geometry outside the boundary gets affected.
- plow help
- Prints a short synopsis of all the plow command
options.
- plow horizon n
- plow horizon
- The first form sets the plowing jog horizon to n
units. The second form simply prints the value of the jog horizon. Every
time plowing considers introducing a jog in a piece of material, it looks
up and down that piece of material for a distance equal to the jog
horizon. If it finds an existing jog within this distance, it uses it.
Only if no jog is found within the jog horizon does plowing introduce one
of its own. A jog horizon of zero means that plowing will always introduce
new jogs where needed. A jog horizon of infinity ( plow nojogs)
means that plowing will not introduce any new jogs of its own.
- plow jogs
- Re-enable jog insertion with a horizon of 0. This command
is equivalent to plow horizon 0.
- plow noboundary
- Remove any boundary specified with a previous plow
boundary command.
- plow nojogs
- Sets the jog horizon to infinity. This means that plowing
will not introduce any jogs of its own; it will only use existing
ones.
- plow nostraighten
- Don't straighten jogs automatically after each plow
operation.
- plow selection [direction
[distance]]
- Like the move or stretch commands, this moves
all the material in the selection that belongs to the edit cell. However,
any material not in the selection is pushed out of its way, just as though
each piece of the selection were plowed individually. If no arguments are
given, the selection is picked up by the point underneath the lower-left
corner of the box and plowed so that this point lies at the cursor
location. The box is moved along with the selection. If direction
is given, it must be a Manhattan direction (e.g. north). The
selection is moved in that direction by amount. If the box is in
the same window as the selection, it is moved too. Amount defaults
to 1. If there is selected material that isn't in the edit cell, it is
ignored (note that this is different from select and move).
If direction isn't given and the cursor isn't exactly left, right,
up, or down from the box corner, then Magic first rounds the cursor
position off to a position that is one of those (whichever is
closest).
- plow straighten
- Straighten jogs automatically after each plow operation.
The effect will be as though the straighten command were invoked
after each plow operation, with the same direction, and over the area
changed by plowing.
- resist cell [tolerance]
- This command is similar to extresist above, but used
for extracting resistance networks for individual nodes. Only the node
underneath the box is processed. The network for this node is output to
the file cell.res.ext. See the description for
extresist for an explanation of tolerance.
- route option [args]
- This command, with no option or arg, is used
to generate routing using the Magic router in the edit cell to make
connections specified in the current netlist. The box is used to indicate
the routing area: no routing will be placed outside the area of the box.
The new wires are placed in the edit cell. Options and args
have the following effects:
- route end [real]
- Print the value of the channel end constant used by the
channel router. If a value is supplied, the channel end constant is set to
that value. The channel end constant is a dimensionless multiplier used to
compute how far from the end of a channel to begin preparations to make
end connections.
- route help
- Print a short synopsis of all the route command
options.
- route jog [int]
- Print the value of the minimum jog length used by the
channel router. If a value is supplied, the minimum jog length is set to
that value. The channel router makes no vertical jogs shorter than the
minimum jog length, measured in router grid units. Higher values for this
constant may improve the quality of the routing by removing unnecessary
jogs; however, prohibiting short jogs may make some channels
unroutable.
- route metal
- Toggle metal maximization on or off. The route command
routes the preferred routing layer (termed ``metal'') horizontally and the
alternate routing layer vertically. By default wires on the alternate
routing layer are then converted, as much as possible, to the preferred
layer before being painted into the layout. Enabling metal maximization
improves the quality of the resulting routing, since the preferred routing
layer generally has better electrical characteristics; however, designers
wishing to do hand routing after automatic routing may find it easier to
disable metal maximization and deal with a layer-per-direction
layout.
- route netlist [file]
- Print the name of the current netlist. If a file name is
specified, it is opened if possible, and the new netlist is loaded. This
option is provided primarily as a convenience so you need not open the
netlist menu before routing.
- route obstacle [real]
- Print the obstacle constant used by the channel router. If
a value is supplied, set the channel router obstacle constant to that
value. The obstacle constant is a dimensionless multiplier used in
deciding how far in front of an obstacle the channel router should begin
jogging nets out of the way. Larger values mean that nets will jog out of
the way earlier; however, if nets jog out of the way too early routing
area is wasted.
- route origin [x y]
- Print the x- and y-coordinates of the origin of the routing
grid. By default, the routing grid starts from (0,0). However, by
supplying an x and y coordinate to the route origin
command, the origin can be set to any other value. This command is
primarily useful when routing a chip that has been designed with routing
on the same pitch as the router will use, but where the left and bottom
edges of the pre-existing routing don't line up with the routing grid
lines (for example, the pre-existing routing might have been centered on
routing grid lines). The alternative to specifying a different origin for
the routing grid would be to translate all the material in the cell to be
routed so that the prewiring lined up properly with routing grid
lines.
- route settings
- Print the values of all router parameters.
- route steady [int]
- Print the value of the channel router's steady net
constant. If a value is supplied, set the steady net constant to the
value. The steady net constant, measured in router grid units, specifies
how far beyond the next terminal the channel router should look for a
conflicting terminal before deciding that a net is rising or falling.
Larger values mean that the net rises and falls less often.
- route tech
- Print the router technology information. This includes
information such as the names of the preferred and alternate routing
layers, their wire widths, the router grid spacing, and the contact
size.
- route viamin
- Minimize vias in (previously) routed netlist. This
subcommand removes unnecessary layer changes in all nets in the current
netlist to minimize via count. The preferred routing layer, layer1
in the router section of the technology file, is favored by the
algorithm. Note that `` route viamin'' is an independent routing
postpass that can be applied even if the routing was not generated by the
route command, provided the layers and widths agree with the
router section of the technology file.
- route vias [int]
- Print the value of the metal maximization via constant. If
a value is supplied, set the via constant to the value. The via constant,
measured in router grid units, represents the tradeoff between metal
maximization and the via count. In many cases it is possible to convert
wiring on the alternate routing layer into routing on the preferred
routing layer (``metal'') at the expense of introducing one or two vias.
The via constant specifies the amount of converted wiring that makes it
worthwhile to add vias to the routing.
- rsim [options] [filename]
- Runs rsim under Magic. See Tutorial #11: Using IRSIM and
RSIM with Magic for more information on what options and files are
required by rsim. Normally, IRSIM requires a parameter file for the
technology and a .sim file describing the circuit.
- The rsim command without any options can be used to
interact with a previously-started rsim. Type rsim and you will see
the rsim prompt. To get back to magic, type q.
- save [name]
- Save the edit cell on disk. If the edit cell is currently
the ``(UNNAMED)'' cell, name must be specified; in this case the
edit cell is renamed to name as well as being saved in the file
name. mag. Otherwise, name is optional. If specified,
the edit cell is saved in the file name.mag; otherwise, it
is saved in the file from which it was originally read.
- see option
- This command is used to control which layers are to be
displayed in the window under the cursor. It has several forms:
- see no layers
- Do not display the given layers in the window under the
cursor. If labels is given as a layer name, don't display labels in
that window either. If errors is given as a layer, no design-rule
violations will be displayed (the checker will continue to run, though).
If layers is given as "*", all mask layers will be
disabled, but errors and labels will still be shown. See the
"LAYERS" section at the end of this manual page for an
explanation of layer naming in Magic.
- see layers
- Reenable display of the given layers. Note that
"*" expands to all mask layers, but does not include the label
or error layers. See the "LAYERS" section at the end of this
manual page for details.
- see no
- Don't display any mask layers or labels. Only subcell
bounding boxes will be displayed.
- see
- Reenable display of all mask layers, labels, and
errors.
- see allSame
- Display all cells the same way. This disables the facility
where the edit cell is displayed in bright colors and non-edit cells are
in paler colors. After see allSame, all mask information will be
displayed in bright colors.
- see no allSame
- Reenable the facility where non-edit cells are drawn in
paler colors.
- select option
- This command is used to select paint, labels, and subcells
before operating on them with commands like move and copy
and delete. It has several forms:
- select
- If the cursor is over empty space, then this command is
identical to select cell. Otherwise, paint is selected. The first
time the command is invoked, a chunk of paint is selected: the largest
rectangular area of material of the same type visible underneath the
cursor. If the command is invoked again without moving the cursor, the
selection is extended to include all material of the same type, regardless
of shape. If the command is invoked a third time, the selection is
extended again to include all material that is visible and electrically
connected to the point underneath the cursor.
- select more
- This command is identical to select except that the
selection is not first cleared. The result is to add the newly-selected
material to what is already in the selection.
- select less
- This chooses material just as select does, but the
material is removed from the selection, rather than added to it. The
result is to deselect the chosen material.
- select [more | less] area
layers
- Select material by area. If layers are not
specified, then all paint, labels, and unexpanded subcells visible
underneath the box are selected. If layers is specified, then only
those layers are selected. If more is specified, the new material
is added to the current selection rather than replacing it. If less
is specified, the new material is removed from the selection
(deselected).
- select [more | less] cell
name
- Select a subcell. If name isn't given, this command
finds a subcell that is visible underneath the cursor and selects it. If
the command is repeated without moving the cursor then it will step
through all the subcells under the cursor. If name is given, it is
treated as a hierarchical instance identifier starting from the root of
the window underneath the cursor. The named cell is selected. If
more is specified, the new subcell is added to the current
selection instead of replacing it. If less is specified, the new
subcell is removed from the selection (deselected).
- select clear
- Clear out the selection. This does not affect the layout;
it merely deselects everything.
- select help
- Print a short synopsis of the selection commands.
- select save cell
- Save all the information in the selection as a Magic cell
on disk. The selection will be saved in file cell.mag.
- select and the see command
- Select interacts with the see command. When
selecting individual pieces of material, only visible layers are
candidates for selection. When selecting an entire area, however, both
visible and non-visible material is selected. This behavior allows entire
regions of material to be moved, even if see has been used to turn
off the display of some of the layers.
- sideways
- Flip the selection left-to-right about a vertical axis
running through the center of the selection's area. If the box is in the
same window as the selection, it is flipped too. Selected material not in
the edit cell is not affected.
- simcmd cmd
- Sends the command cmd to rsim for execution. See
Tutorial #11: Using IRSIM and RSIM with Magic for more
information.
- snap [on]
- snap [off]
- Control whether the box and point are snapped to the grid
selected for the windows in which they appear (the grid was set by the
grid command), or to the standard 1x1 grid. The default is for
snapping to be off, i.e., snapping to a 1x1 grid. With no
arguments, snap prints whether snapping is enabled or not.
- startrsim [options]
[filename]
- Similar to the rsim command, except it returns to
Magic as soon as rsim is started. See Tutorial #11: Using IRSIM and
RSIM with Magic for more information.
- straighten direction
- Straighten jogs in wires underneath the box by pulling them
in direction. Jogs are only straightened if doing so will cause no
additional geometry to move.
- stretch [direction [amount]]
- This command is identical to move except that simple
stretching occurs as the selection is moved. Each piece of paint in the
selection causes the area through which it's moved to be erased in that
layer. Also, each piece of paint in the selection that touches unselected
material along its back side causes extra material to be painted to fill
in the gap left by the move. If direction isn't given and the
cursor isn't exactly left, right, up, or down from the box corner, then
Magic first rounds the cursor position off to a position that is one of
those (whichever is closest).
- tool [name | info]
- Change the current tool. The result is that the cursor
shape is different and the mouse buttons mean different things. The
command tool info prints out the meanings of the buttons for the
current tool. Tool name changes the current tool to
name, where name is one of box, wiring, or
netlist. If tool is invoked with no arguments, it picks a
new tool in circular sequence: multiple invocations will cycle through all
of the available tools.
- unexpand
- Unexpand all cells that touch the box but don't completely
contain it.
- upsidedown
- Flip the selection upside down about a horizontal axis
running through the center of the selection's area. If the box is in the
same window as the selection then it is flipped too. Selected material
that is not in the edit cell is not changed.
- what
- Print out information about all the things that are
selected.
- wire option [args]
- This command provides a centerline-wiring style user
interface. Option and args specify a particular wiring
option, as described below. Some of the options can be invoked via mouse
buttons when the wiring tool is active.
- wire help
- Print out a synopsis of the various wiring commands.
- wire horizontal
- Just like wire leg except that the new segment is
forced to be horizontal.
- wire leg
- Paint a horizontal or vertical segment of wire from one
side of the box over to the cursor's x- or y-location (respectively). The
direction (horizontal or vertical) is chosen so as to produce the longest
possible segment. The segment is painted in the current wiring material
and thickness. The new segment is selected, and the box is placed at its
tip.
- wire switch [layer width]
- Switch routing layers and place a contact at the box
location. The contact type is chosen to connect the old and new routing
materials. The box is placed at the position of the contact, and the
contact is selected. If layer and width are specified, they
are used as the new routing material and width, respectively. If they are
not specified, the new material and width are chosen to correspond to the
material underneath the cursor.
- wire type [layer width]
- Pick a material and width for wiring. If layer and
width are not given, then they are chosen from the material
underneath the cursor, a square chunk of material is selected to indicate
the layer and width that were chosen, and the box is placed over this
chunk. If layer and width are given, then this command does
not modify the box position.
- wire vertical
- Just like wire leg except that the new segment is
forced to be vertical.
- writeall [force]
- This command steps through all the cells that have been
modified in this edit session and gives you a chance to write them out. If
the force option is specified, then ``autowrite'' mode is used: all
modified cells are automatically written without asking for permission.
COMMANDS FOR ALL WINDOWS¶
These commands are not used for layout, but are instead used for overall,
housekeeping functions. They are valid in all windows.
- closewindow
- The window under the cursor is closed. That area of the
screen will now show other windows or the background.
- echo [-n] str1 str2 ... strN
- Prints str1 str2 ... strN in the text window,
separated by spaces and followed by a newline. If the -n switch is
given, no newline is output after the command.
- help [pattern]
- Displays a synopsis of commands that apply to the window
you are pointing to. If pattern is given then only command
descriptions containing the pattern are printed. Pattern may
contain '*' and '?' characters, which match a string of non-blank
characters or a single non-blank character (respectively).
- logcommands [file [update]]]
- If file is given, all further commands are logged to
that file. If no arguments are given, command logging is terminated. If
the keyword update is present, commands are output to the file to
cause the screen to be updated after each command when the command file is
read back in.
- macro [char [command]]
- Command is associated with char such that
typing char on the keyboard is equivalent to typing ``:'' followed
by command. If command is omitted, the current macro for
char is printed. If char is also omitted, then all current
macros are printed. If command contains spaces, tabs, or semicolons
then it must be placed in quotes. The semicolon acts as a command
separator allowing multiple commands to be combined in a single
macro.
- openwindow [cell]
- Open a new, empty window at the cursor position. Placement,
sizing, and methods of manipulation are determined by the conventions of
the window system in use. If cell is specified, then that cell is
displayed in the new window. Otherwise the area of the box will be
displayed in the new window.
- pushbutton button action
- Simulates a button push. Button should be left,
middle, or right. Action is one of up, or
down. This command is normally invoked only from command scripts
produced by the logcommands command.
- quit
- Exit Magic and return to the shell. If any cells,
colormaps, or netlists have changed since they were last saved on disk,
you are given a chance to abort the command and continue in Magic.
- redo [n]
- Redo the last n commands that were undone using
undo (see below). The number of commands to redo defaults to 1 if
n is not specified.
- redraw
- Redraw the graphics screen.
- scroll direction [amount]
- The window under the cursor is moved by amount
screenfulls in direction relative to the circuit. If amount
is omitted, it defaults to 0.5.
- send type command
- Send a command to the window client named by
type. The result is just as if command had been typed in a
window of type type. See specialopen, below, for the
allowable types of windows.
- setpoint [x y [windowID]]
- Fakes the location of the cursor up until after the next
interactive command. Without arguments, just prints out the current point
location. This command is normally invoked only from command scripts.
- If windowID is given, then the point is assumed to
be in that window's screen coordinate system rather than absolute screen
coordinates.
- sleep n
- Causes Magic to go to sleep for n seconds.
- source filename
- Each line of filename is read and processed as one
command. Any line whose last character is backslash is joined to the
following line. The commands setpoint, pushbutton,
echo, sleep, and updatedisplay are useful in command
files, and seldom used elsewhere.
- specialopen [x1 y1 x2 y2] type
[args]
- Open a window of type type. If the optional x1 y1
x2 y2 coordinates are given, then the new window will have its lower
left corner at screen coordinates ( x1, y1) and its upper
right corner at screen coordinates ( x2, y2). The
args arguments are interpreted differently depending upon the type
of the window. These types are known:
- layout
- This type of window is used to edit a VLSI cell. The
command takes a single argument which is used as the name of a cell to be
loaded. The command open filename is a shorthand for the
command specialopen layout filename.
- color
- This type of window allows the color map to be edited. See
the section COMMANDS FOR COLORMAP EDITING below.
- netlist
- This type of window presents a menu that can be used to
place labels, and to generate and edit net-lists. See the section COMMANDS
FOR NETLIST EDITING below.
- underneath
- Move the window pointed at so that it lies underneath the
rest of the windows.
- undo [count]
- Undoes the last count commands. Almost all commands
in Magic are now undo-able. The only holdouts left are cell
expansion/unexpansion, and window modifications (change of size, zooming,
etc.). If count is unspecified, it defaults to 1.
- updatedisplay
- Update the display. This command is normally invoked only
from command scripts. Scripts that do not contain this command update the
screen only at the end of the script.
- view
- Choose a view for the window underneath the cursor so that
everything in the window is visible.
- windscrollbars [on|off]
- Set the flag that determines if new windows will have
scroll bars.
- windowpositions [file]
- Write out the positions of the windows in a format suitable
for the source command. If file is specified, then write it
out to that file instead of to the terminal.
- zoom [factor]
- Zoom the view in the window underneath the cursor by
factor. If factor is less than 1, we zoom in; if it is
greater than one, we zoom out.
When the netlist menu is opened using the command
special netlist, a menu
appears on the screen. The colored areas on the menu can be clicked with
various mouse buttons to perform various actions, such as placing labels and
editing netlists. For details on how to use the menu, see ``Magic Tutorial #7:
Netlists and Routing''. The menu buttons all correspond to commands that could
be typed in netlist or layout windows.
COMMANDS FOR NETLIST WINDOWS¶
The commands described below work if you are pointing to the interior of the
netlist menu. They may also be invoked when you are pointing at another window
by using the
send netlist command. Terminal names in all of the
commands below are hierarchical names consisting of zero or more cell use ids
separated by slashes, followed by the label name, e.g.
toplatch/shiftcell_1/in. When processing the terminal paths, the search
always starts in the edit cell.
- add term1 term2
- Add the terminal named term1 to the net containing
terminal term2. If term2 isn't in a net yet, make a new net
containing just term1 and term2.
- cleanup
- Check the netlist to make sure that for every terminal
named in the list there is at least one label in the design. Also check to
make sure that every net contains at least two distinct terminals, or one
terminal with several labels by the same name. When errors are found, give
the user an opportunity to delete offending terminals and nets. This
command can also be invoked by clicking the ``Cleanup'' menu button.
- cull
- Examine the current netlist and the routing in the edit
cell, and remove those nets from the netlist that are already routed. This
command is often used after pre-routing nets by hand, so the router won't
try to implement them again.
- dnet name name ...
- For each name given, delete the net containing that
terminal. If no name is given, delete the currently-selected net,
just as happens when the ``No Net'' menu button is clicked.
- dterm name name ...
- For each name given, delete that terminal from its
net.
- extract
- Pick a piece of paint in the edit cell that lies under the
box. Starting from this, trace out all the electrically-connected material
in the edit cell. Where this material touches subcells, find any terminals
in the subcells and make a new net containing those terminals. Note: this
is a different command from the extract command in layout
windows.
- find pattern [layers]
- Search the area beneath the box for labels matching
pattern, which may contain the regular-expression characters ``
*'' `` ?'', `` ['', `` ]'', and `` \''
(as matched by csh(1); see the description of the find
button in ``Magic Tutorial #7: Netlists and Routing''). For each label
found, leave feedback whose text is the layer on which the label appears,
followed by a semicolon, followed by the full hierarchical pathname of the
label. The feedback surrounds the area of the label by one unit on all
sides. (The reason for the one-unit extension is that feedback rectangles
must have positive area, while labels may have zero width or height). If
layers are given, only labels attached to those layers are
considered.
- flush [netlist]
- The netlist named netlist is reloaded from the disk
file netlist.net. Any changes made to the netlist since the
last time it was written are discarded. If netlist isn't given, the
current netlist is flushed.
- join term1 term2
- Join together the nets containing terminals term1
and term2. The result is a single net containing all the terminals
from both the old nets.
- netlist [name]
- Select a netlist to work on. If name is provided,
read name.net (if it hasn't already been read before) and
make it the current netlist. If name isn't provided, use the name
of the edit cell instead.
- print [name]
- Print the names of all the terminals in the net containing
name. If name isn't provided, print the terminals in the
current net. This command has the same effect as clicking on the ``Print''
menu button.
- ripup [netlist]
- This command has two forms. If netlist isn't typed
as an argument, then find a piece of paint in the edit cell under the box.
Trace out all paint in the edit cell that is electrically connected to the
starting piece, and delete all of this paint. If netlist is typed,
find all paint in the edit cell that is electrically connected to any of
the terminals in the current netlist, and delete all of this paint.
- savenetlist [file]
- Save the current netlist on disk. If file is given,
write the netlist in file.net. Otherwise, write the netlist
back to the place from which it was read.
- shownet
- Find a piece of paint in any cell underneath the box.
Starting from this paint, trace out all paint in all cells that is
electrically connected to the starting piece and highlight this paint on
the screen. To make the highlights go away, invoke the command with the
box over empty space. This command has the same effect as clicking on the
``Show'' menu button.
- showterms
- Find the labels corresponding to each of the terminals in
the current netlist, and generate a feedback area over each. This command
has the same effect as clicking on the ``Terms'' menu button.
- trace [name]
- This command is similar to shownet except that
instead of starting from a piece of paint under the box, it starts from
each of the terminals in the net containing name (or the current
net if no name is given). All connected paint in all cells is
highlighted.
- verify
- Compare the current netlist against the wiring in the edit
cell to make sure that the nets are implemented exactly as specified in
the netlist. If there are discrepancies, feedback areas are created to
describe them. This command can also be invoked by clicking the ``Verify''
menu button.
- writeall
- Scan through all the netlists that have been read during
this editing session. If any have been modified, ask the user whether or
not to write them out.
Color windows display two sets of colored bars and a swatch of the color being
edited. The left set of color bars is labeled Red, Green, and Blue; these
correspond to the proportion of red, green, and blue in the color being
edited. The right set of bars is labeled Hue, Saturation, and Value; these
correspond to the same color but in a space whose axes are hue (spectral
color), saturation (spectral purity vs. dilution with white), and value (light
vs. dark).
The value of a color is changed by pointing inside the region spanned by one of
the color bars and clicking any mouse button. The color bar will change so
that it extends to the point selected by the crosshair when the button was
pressed. The color can also be changed by clicking a button over one of the
``pumps'' next to a color bar. A left-button click makes a 1% increment or
decrement, and a right-button click makes a 5% change.
The color being edited can be changed by pressing the left button over the
current color box in the editing window, then moving the mouse and releasing
the button over a point on the screen that contains the color to be edited. A
color value can be copied from an existing color to the current color by
pressing the right mouse button over the current color box, then releasing the
button when the cursor is over the color whose value is to be copied into the
current color.
COMMANDS FOR COLORMAP WINDOWS¶
These commands work if you are pointing to the interior of a colormap window.
The commands are:
- color [number]
- Load number as the color being edited in the window.
Number must be an octal number between 0 and 377; it corresponds to
the entry in the color map that is to be edited. If no number is
given, this command prints out the value of the color currently being
edited.
- load [techStyle displayStyle
monitorType]
- Load a new color map. If no arguments are specified, the
color map for the current technology style (e.g, mos), display
style (e.g, 7bit), and monitor type (e.g, std) is re-loaded.
Otherwise, the color map is read from the file
techStyle.displayStyle. monitorType.cmap in
the current directory or in the system library directory.
- save [techStyle displayStyle
monitorType]
- Save the current color map. If no arguments are specified,
save the color map in a file determined by the current technology style,
display style, and monitor type as above. Otherwise, save it in the file
techStyle.displayStyle.monitorType.cmap in the
current directory or in the system library directory.
DIRECTIONS¶
Many of the commands take a direction as an argument. The valid direction names
are
north,
south,
east,
west,
top,
bottom,
up,
down,
left,
right,
northeast,
ne,
southeast,
se,
northwest,
nw,
southwest,
sw, and
center. In some cases, only
Manhattan directions are permitted, which means only
north,
south,
east,
west, and their synonyms, are allowed.
LAYERS¶
The mask layers are different for each technology, and are described in the
technology manuals. The layers below are defined in all technologies:
- *
- All mask layers. Does not include special layers like the
label layer and the error layer (see below).
- $
- All layers underneath the cursor.
- errors
- Design-rule violations (useful primarily in the see
command).
- labels
- Label layer.
- subcell
- Subcell layer.
Layer masks may be formed by constructing comma-separated lists of individual
layer names. The individual layer names may be abbreviated, as long as the
abbreviations are unique. For example, to indicate polysilicon and
n-diffusion, use
poly,ndiff or
ndiff,poly. The special character
- causes all subsequent layers to be subtracted from the layer mask.
For example,
*-p means ``all layers but polysilicon''. The special
character
+ reverses the effect of a previous
-; all subsequent
layers are once again added to the layer mask.
SEE ALSO¶
ext2sim(1),
ext2spice(1),
cmap(5),
dstyle(5),
ext(5),
sim(5),
glyphs(5),
magic(5),
displays(5),
net(5)
Online documentation can be found at the following URLs:
http://opencircuitdesign.com/magic/
http://vlsi.cornell.edu/magic/
The OpenCircuitDesign website contains HTML versions of all the documentation
found in the Magic "doc" subdirectory, including tutorials,
technology file manual; download, compile and install instructions, and
command reference.
FILES¶
${CAD_ROOT}/magic/sys/.magic startup file to create default macros
~/.magic user-specific startup command file
${CAD_ROOT}/magic/nmos/* some standard nmos cells
${CAD_ROOT}/magic/scmos/* some standard scmos cells
${CAD_ROOT}/magic/sys/*.cmap colormap files, see CMAP(5) man page
${CAD_ROOT}/magic/sys/*.dstyle display style files, see DSTYLE(5) man page
${CAD_ROOT}/magic/sys/*.glyphs cursor and window bitmap files, see GLYPH(5) man page
${CAD_ROOT}/magic/sys/*.tech technology files, see ``Maintainer's Manual
#2: The Technology File''
${CAD_ROOT}/displays configuration file for Magic serial-line displays
CAD_ROOT variable. If the shell environment variable
CAD_ROOT is
set, Magic uses that location instead of the installed location
(/usr/local/lib, by default). Normally one would change the search path (see
below) rather than redirect the entire
CAD_ROOT location.
Search path. Magic's system and library files, such as technology files
and display-style files, normally are placed in the ${CAD_ROOT}/magic area.
However, Magic first tries to find them in the user's current directory. This
makes it easier for an individual user to override installed system files. The
search path is defined by the Magic command
path,
AUTHORS¶
Original: Gordon Hamachi, Robert Mayo, John Ousterhout, Walter Scott,
George Taylor
Contributors: Michael Arnold (Magic maze-router and Irouter command), Don
Stark (new contact scheme, X11 interface, various other things), Mike Chow
(Rsim interface). The X11 driver is the work of several people, including Don
Stark, Walter Scott, and Doug Pan.
Developers: Ongoing development (magic version 6.5 and higher) made
possible by Stefanos Sidiropolous, Tim Edwards, Rajit Manohar, Philippe
Pouliquen, Michael Godfrey, and others.
Many other people have contributed to Magic, but it is impossible to list them
all here. We appreciate their help!
BUGS¶
If Magic gets stuck for some reason, first try typing Control-C into the
terminal window (in the Tcl/Tk version, this is the
original terminal,
not the Tk console window). Most of Magic's lengthy database searches are
interruptible. If this doesn't work, kill the process. The Tcl/Tk version
automatically creates periodic backups that may be recovered with "magic
-r".
Report bugs to
magic-dev@csl.cornell.edu. Please be specific: tell us
exactly what you did to cause the problem, what you expected to happen, and
what happened instead. If possible send along small files that we can use to
reproduce the bug. A list of known bugs and fixes is also available from the
above address. Tell us which version of magic you are running.