378 lines
15 KiB
TeX
378 lines
15 KiB
TeX
%----------------------------------------------------------------------------
|
|
% Magic tutorial number 6
|
|
%----------------------------------------------------------------------------
|
|
|
|
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
|
|
\documentclass[letterpaper,twoside,12pt]{article}
|
|
\usepackage{epsfig,times}
|
|
|
|
\setlength{\textwidth}{8.5in}
|
|
\addtolength{\textwidth}{-2.0in}
|
|
\setlength{\textheight}{11.0in}
|
|
\addtolength{\textheight}{-2.0in}
|
|
\setlength{\oddsidemargin}{0in}
|
|
\setlength{\evensidemargin}{0pt}
|
|
\setlength{\topmargin}{-0.5in}
|
|
\setlength{\headheight}{0.2in}
|
|
\setlength{\headsep}{0.3in}
|
|
\setlength{\topskip}{0pt}
|
|
|
|
\def\hinch{\hspace*{0.5in}}
|
|
\def\starti{\begin{center}\begin{tabbing}\hinch\=\hinch\=\hinch\=hinch\hinch\=\kill}
|
|
\def\endi{\end{tabbing}\end{center}}
|
|
\def\ii{\>\>\>}
|
|
\def\mytitle{Magic Tutorial \#6: Design-Rule Checking}
|
|
|
|
%----------------------------------------------------------------------------
|
|
|
|
\begin{document}
|
|
|
|
\makeatletter
|
|
\newcommand{\ps@magic}{%
|
|
\renewcommand{\@oddhead}{\mytitle\hfil\today}%
|
|
\renewcommand{\@evenhead}{\today\hfil\mytitle}%
|
|
\renewcommand{\@evenfoot}{\hfil\textrm{--{\thepage}--}\hfil}%
|
|
\renewcommand{\@oddfoot}{\@evenfoot}}
|
|
\newcommand{\ps@mplain}{%
|
|
\renewcommand{\@oddhead}{}%
|
|
\renewcommand{\@evenhead}{}%
|
|
\renewcommand{\@evenfoot}{\hfil\textrm{--{\thepage}--}\hfil}%
|
|
\renewcommand{\@oddfoot}{\@evenfoot}}
|
|
\makeatother
|
|
\pagestyle{magic}
|
|
\thispagestyle{mplain}
|
|
|
|
|
|
\begin{center}
|
|
{\bfseries \Large \mytitle} \\
|
|
\vspace*{0.5in}
|
|
{\itshape John Ousterhout} \\
|
|
\vspace*{0.5in}
|
|
Computer Science Division \\
|
|
Electrical Engineering and Computer Sciences \\
|
|
University of California \\
|
|
Berkeley, CA 94720 \\
|
|
\vspace*{0.25in}
|
|
{\itshape (Updated by others, too.)} \\
|
|
\vspace*{0.25in}
|
|
This tutorial corresponds to Magic version 7. \\
|
|
\end{center}
|
|
\vspace*{0.5in}
|
|
|
|
{\noindent\bfseries\large Tutorials to read first:}
|
|
\starti
|
|
\> Magic Tutorial \#1: Getting Started \\
|
|
\> Magic Tutorial \#2: Basic Painting and Selection \\
|
|
\> Magic Tutorial \#4: Cell Hierarchies
|
|
\endi
|
|
|
|
{\noindent\bfseries\large Commands introduced in this tutorial:}
|
|
\starti
|
|
\> :drc
|
|
\endi
|
|
|
|
{\noindent\bfseries\large Macros introduced in this tutorial:}
|
|
|
|
\starti
|
|
\> y
|
|
\endi
|
|
|
|
\vspace*{0.75in}
|
|
\section{Continuous Design-Rule Checking}
|
|
|
|
When you are editing a layout with Magic, the system automatically
|
|
checks design rules on your behalf. Every time you paint or
|
|
erase, and every time you move a cell or change an array structure,
|
|
Magic rechecks the area you changed to be sure you haven't
|
|
violated any of the layout rules. If you do violate rules,
|
|
Magic will display little white dots in the vicinity of the
|
|
violation. This error paint will stay around until you
|
|
fix the problem; when the violation is corrected, the error paint
|
|
will go away automatically. Error paint is written to disk
|
|
with your cells and will re-appear the next time the cell is
|
|
read in. There is no way to get rid of it except to fix the
|
|
violation.
|
|
|
|
Continuous design-rule checking means that
|
|
you always have an up-to-date picture
|
|
of design-rule errors in your layout. There is never any need
|
|
to run a massive check over the whole design unless you
|
|
change your design rules. When you
|
|
make small changes to an existing layout, you will find out
|
|
immediately if you've introduced errors, without
|
|
having to completely recheck the entire layout.
|
|
|
|
To see how the checker works, run Magic on the
|
|
cell {\bfseries tut6a}. This cell contains several
|
|
areas of metal (blue), some of which are too close to each
|
|
other or too narrow. Try painting and erasing metal to make
|
|
the error paint go away and re-appear again.
|
|
|
|
\section{Getting Information about Errors}
|
|
|
|
In many cases, the reason for a design-rule violation will
|
|
be obvious to you as soon as you see the error paint.
|
|
However, Magic provides several commands for you to use
|
|
to find violations and figure what's wrong in case it
|
|
isn't obvious. All of the design-rule checking commands
|
|
have the form
|
|
|
|
\starti
|
|
\ii {\bfseries :drc} {\itshape option}
|
|
\endi
|
|
|
|
where {\itshape option} selects one of several commands understood
|
|
by the design-rule checker. If you're not sure why error
|
|
paint has suddenly appeared, place the box around the error paint
|
|
and invoke the command
|
|
|
|
\starti
|
|
\ii {\bfseries :drc why}
|
|
\endi
|
|
|
|
This command will recheck the area underneath the box, and print
|
|
out the reasons for any violations that were found. You can
|
|
also use the macro {\bfseries y} to do the same thing. Try this
|
|
on some of the errors in {\bfseries tut6a}. It's a good
|
|
idea to place the box right around the area of the error paint:
|
|
{\bfseries :drc why} rechecks the entire area under the box, so it
|
|
may take a long time if the box is very large.
|
|
|
|
If you're working in a large cell, it may be hard to see the
|
|
error paint. To help locate the errors, select a cell
|
|
and then use the command
|
|
|
|
\starti
|
|
\ii {\bfseries :drc find} [{\itshape nth}]
|
|
\endi
|
|
|
|
If you don't provide the {\itshape nth} argument, the command
|
|
will place the box around one of the errors in the selected
|
|
cell, and print out the reason for the error, just as if you
|
|
had typed {\bfseries :drc why}. If you invoke the command repeatedly,
|
|
it will step through all of the errors in the selected cell.
|
|
(remember, the ``.'' macro can be used to repeat the last long
|
|
command; this will save you from having to retype {\bfseries :drc find}
|
|
over and over again). Try this out on the errors in {\bfseries tut6a}.
|
|
If you type a number for {\itshape nth}, the command will go to the
|
|
{\itshape nth} error in the selected cell, instead of the next one.
|
|
If you invoke this command with no cell selected, it searches
|
|
the edit cell.
|
|
|
|
A third drc command is provided to give you summary information
|
|
about errors in hierarchical designs. The command is
|
|
|
|
\starti
|
|
\ii {\bfseries :drc count}
|
|
\endi
|
|
|
|
This command will search every cell (visible or not) that
|
|
lies underneath the box to see if any have errors in them.
|
|
For each cell with errors, {\bfseries :drc count} will print out
|
|
a count of the number of error areas.
|
|
|
|
|
|
\section{Errors in Hierarchical Layouts}
|
|
|
|
The design-rule checker works on hierarchical layouts as well
|
|
as single cells. There are three overall rules that describe the
|
|
way that Magic checks hierarchical designs:
|
|
|
|
\begin{enumerate}
|
|
\item The paint in each cell must obey all the design rules by itself,
|
|
without considering the paint in any other cells, including
|
|
its children.
|
|
|
|
\item The combined paint of each cell and all of its descendants
|
|
(subcells, sub-subcells, etc.) must be consistent. If a
|
|
subcell interacts with paint or with other subcells in a way
|
|
that introduces a design-rule violation, an error will appear
|
|
in the parent. In designs with many levels of
|
|
hierarchy, this rule is applied separately to each
|
|
cell and its descendants.
|
|
|
|
\item Each array must be consistent by itself, without considering
|
|
any other subcells or paint in its parent. If the neighboring
|
|
elements of an array interact to produce a design-rule violation,
|
|
the violation will appear in the parent.
|
|
\end{enumerate}
|
|
|
|
To see some examples of interaction errors, edit the cell
|
|
{\bfseries tut6b}. This cell doesn't make sense electrically,
|
|
but illustrates the features of the hierarchical checker.
|
|
On the left are two subcells that are
|
|
too close together. In addition, the subcells are too close to
|
|
the red paint in the top-level cell. Move the subcells and/or
|
|
modify the paint to make the
|
|
errors go away and reappear. On the right side of {\bfseries tut6b} is
|
|
an array whose elements interact to produce a design-rule
|
|
violation. Edit an element of the array to make the
|
|
violation go away. When there are interaction errors between
|
|
the elements of an array, the errors always appear near one of the
|
|
four corner elements of the array (since the array spacing is uniform,
|
|
Magic only checks interactions near the corners; if these
|
|
elements are correct, all the ones in the middle must be correct
|
|
too).
|
|
|
|
It's important to remember that each of the three overall rules
|
|
must be satisfied independently. This may sometimes result in
|
|
errors where it doesn't seem like there should be any. Edit
|
|
the cell {\bfseries tut6c} for some examples of this. On the
|
|
left side of the cell there is a sliver of paint in the parent
|
|
that extends paint in a subcell. Although the
|
|
overall design is correct, the sliver of paint in the parent
|
|
is not correct by itself, as required by the first overall
|
|
rule above. On the right side of {\bfseries tut6c} is an array
|
|
with spacing violations between the array elements. Even though the
|
|
paint in the parent masks some of the problems,
|
|
the array is not consistent by itself so errors
|
|
are flagged. The three overall rules are more conservative
|
|
than strictly necessary, but
|
|
they reduce the amount of rechecking Magic must do. For example,
|
|
the array rule allows Magic to deduce the correctness of an
|
|
array by looking only at the corner elements; if paint from the
|
|
parent had to be considered in checking arrays, it would be necessary
|
|
to check the entire array since there might be parent paint masking
|
|
some errors but not all (as, for example, in {\bfseries tut6c}).
|
|
|
|
Error paint appears in different cells in the hierarchy, depending
|
|
on what kind of error was found. Errors resulting from paint in
|
|
a single cell cause error paint to appear
|
|
in that cell. Errors resulting from interactions and arrays appear
|
|
in the parent of the interacting cells or array. Because of the
|
|
way Magic makes interaction checks, errors can sometimes ``bubble
|
|
up'' through the hierarchy and appear in multiple cells. When
|
|
two cells overlap, Magic checks this area by copying all the paint
|
|
in that area from both cells (and their descendants) into a buffer
|
|
and then checking the buffer. Magic is unable to tell the difference
|
|
between an error from one of the subcells and an error that comes
|
|
about because the two subcells overlap incorrectly. This means that
|
|
errors in an interaction area of a cell may also appear in the
|
|
cell's parent. Fixing the error in the subcell will cause the error
|
|
in the parent to go away also.
|
|
|
|
\section{Turning the Checker Off}
|
|
|
|
We hope that in most cases the checker will run so quickly and
|
|
quietly that you hardly know it's there. However, there will
|
|
probably be some situations where the checker is irksome. This
|
|
section describes several ways to keep the checker out of your
|
|
hair.
|
|
|
|
If you're working on a cell with lots of design-rule violations
|
|
the constant redisplay caused by design-rule checking may get
|
|
in your way more than it helps. This is particularly true if
|
|
you're in the middle of a large series of changes and don't care
|
|
about design-rule violations until the changes are finished.
|
|
You can stop the redisplay using the command
|
|
|
|
\starti
|
|
\ii {\bfseries :see no errors}
|
|
\endi
|
|
|
|
After this command is typed, design-rule errors will no longer
|
|
be displayed on the screen. The design-rule checker will continue
|
|
to run and will store error information internally, but it won't
|
|
bother you by displaying it on the screen. When you're
|
|
ready to see errors again, type
|
|
|
|
\starti
|
|
\ii {\bfseries :see errors}
|
|
\endi
|
|
|
|
There can also be times when it's not the redisplay that's
|
|
bothersome, but the amount of CPU time the checker takes to recheck
|
|
what you've changed.
|
|
For example, if a large subcell is moved to overlap
|
|
another large subcell, the entire overlap area will have to be
|
|
rechecked, and this could take several minutes. If the prompt
|
|
on the text screen is a ``]'' character, it means that the
|
|
command has completed but the checker hasn't caught up
|
|
yet. You can invoke new commands while the checker is
|
|
running, and the checker will suspend itself long
|
|
enough to process the new commands.
|
|
|
|
If the checker takes too long to interrupt itself and
|
|
respond to your commands, you have several options.
|
|
First, you can hit the interrupt key (often \^{}C) on the keyboard.
|
|
This will stop the checker immediately and wait for your next
|
|
command. As soon as you issue a command or push a mouse button,
|
|
the checker will start up again. To turn the checker off
|
|
altogether, type the command
|
|
|
|
\starti
|
|
\ii {\bfseries :drc off}
|
|
\endi
|
|
|
|
From this point on, the checker will not run. Magic will
|
|
record the areas that need rechecking but won't do the
|
|
rechecks. If you save your file and quit Magic, the information
|
|
about areas to recheck will be saved on disk. The next time
|
|
you read in the cell, Magic will recheck those areas, unless
|
|
you've still got the checker turned off. There is nothing
|
|
you can do to make Magic forget about areas to recheck;
|
|
{\bfseries :drc off} merely postpones the recheck operation to a
|
|
later time.
|
|
|
|
Once you've turned the checker off, you have two ways to make
|
|
sure everything has been rechecked. The first is to type the
|
|
command
|
|
|
|
\starti
|
|
\ii {\bfseries :drc catchup}
|
|
\endi
|
|
|
|
This command will run the checker and wait until everything
|
|
has been rechecked and errors are completely up to date.
|
|
When the command completes, the checker will still be enabled
|
|
or disabled just as it was before the command.
|
|
If you get tired of waiting for {\bfseries :drc catchup},
|
|
you can always hit the interrupt key to abort the command;
|
|
the recheck areas will be remembered for later. To turn the
|
|
checker back on permanently, invoke the command
|
|
|
|
\starti
|
|
\ii {\bfseries :drc on}
|
|
\endi
|
|
|
|
\section{Porting Layouts from Other Systems}
|
|
|
|
You should not need to read this section if you've created
|
|
your layout from scratch using Magic or have read it from
|
|
CIF using Magic's CIF or Calma reader. However, if you are
|
|
bringing into Magic a layout that was created using a
|
|
different editor or an old version of Magic that didn't
|
|
have continuous checking, read on. You may also need to
|
|
read this section if you've changed the design rules in
|
|
the technology file.
|
|
|
|
In order to find out about errors in a design that wasn't
|
|
created with Magic, you must force Magic
|
|
to recheck everything in the design. Once this global recheck
|
|
has been done, Magic will use its continuous checker to deal
|
|
with any changes you make to the design; you should
|
|
only need to do the global recheck once. To make the global recheck,
|
|
load your design, place the box around the entire design,
|
|
and type
|
|
|
|
\starti
|
|
\ii {\bfseries :drc check}
|
|
\endi
|
|
|
|
This will cause Magic to act as if the entire area under the
|
|
box had just been modified: it will recheck that entire area.
|
|
Furthermore, it will work its way down through the hierarchy;
|
|
for every subcell found underneath the box, it will recheck
|
|
that subcell over the area of the box.
|
|
|
|
If you get nervous that a design-rule violation might somehow have been
|
|
missed, you can use {\bfseries :drc check} to force any area
|
|
to be rechecked at any time, even for cells that were
|
|
created with Magic. However, this should never be
|
|
necessary unless you've changed the design rules. If the
|
|
number of errors in the layout ever changes
|
|
because of a {\bfseries :drc check}, it is a bug in Magic and you
|
|
should notify us immediately.
|
|
|
|
\end{document}
|