Provided by:
magic_7.5.214-1_i386 
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.
COMMANDS -- GENERAL INFORMATION
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.
MOUSE BUTTONS FOR LAYOUT WINDOWS
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.
MOUSE BUTTONS FOR NETLIST WINDOWS
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.
MOUSE BUTTONS FOR COLORMAP WINDOWS
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/.magicstartup 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/*.cmapcolormap files, see CMAP(5) man page
${CAD_ROOT}/magic/sys/*.dstyledisplay style files, see DSTYLE(5) man page
${CAD_ROOT}/magic/sys/*.glyphscursor and window bitmap files, see GLYPH(5) man page
${CAD_ROOT}/magic/sys/*.techtechnology files, see ``Maintainer's Manual
#2: The Technology File''
${CAD_ROOT}/displaysconfiguration 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.