\documentstyle{article}
\newcommand{\mosaico}{{\tt MOSAICO}}
\begin{document}
\subsection{Wolfe and \mosaico}

If a chip contains some standard cells like those in the MSU library,
you should use {\tt  wolfe} and not \mosaico if you want to obtain a dense layout.

You should determine an  optimal partitioning of all the standard
cells in your chip. Then place and route each partition using wolfe,
then use \mosaico to wire up all the pieces together.
The process of determining  an optimal  partition is currently not
supported by any tool (i.e. it must be done by hand, trying to be a little
smart about it). 

Please consider the following ideas:
\begin{itemize}
\item You can control the aspect ratio of a wolfe cell using the {\tt
-r} option (specifying the number of rows). Alternatively, you can use
{\tt makeSoft} to specify a target bounding box for the cell.
\item You can control the position of each terminal in a wolfe cell
using the {\tt TERM\_EDGE} and {\tt TERM\_RELATIVE\_POSITION}
properties. {\tt padp} provides an easy ASCII interface to enter such
properties, {\tt puppy} can choose the optimal value for those
properties based on its own floorplanning criteria.
\item It is not a good idea to have a partition containing only one standard
cell, but it is disastrous to have many such partitions. You can merge
standard cells into the same partition using {\tt nle} or {\tt alba
-p} (please refer to the appropriate manuals). 
\end{itemize}

\subsection{Hand layout and \mosaico}

Some rules should be followed to allow a painless integration of hand layout in
a chip which has to be routed by \mosaico. The rules
are listed here ordered by importance:
\begin{itemize}
\item Do not allow terminals to overlap.
\item Keep the terminals at least 7 lambdas apart (for scmos) \footnote{The
recommended spacing between terminals is the minimum center to center distance
of two MET1-MET2 vias}. One easy way to guarantee this result even
after compaction is to implement all the terminals using MET1-MET2 vias.
\item The layers  allowed for terminals are MET1, MET2 and POLY.
Terminals on NDIF, PDIF or other layers cannot be connected by
\mosaico.
\item Make all the cells rectangular.
\item Place all the formal terminals along the periphery of the cell.
\item Try to use the same layer to implement all the terminals that appear on the same
side of a cell. Example: make all the terminals on the TOP of the cell
in MET1 and all the terminals coming out form the LEFT edge of the
cell in MET2. This rule 
\end{itemize}

The restrictive rules mentioned above guarantee an easy job for
\mosaico. However, \mosaico has been designed to handle much harder
situations, like irregular shaped cells, terminals internal to the
cell, overlapping terminals. Please be warned that each of these
situations cause \mosaico to go through some complicated heuristics to
determine the best way to guarantee the connections of problematic
terminals.

Any internal terminal must be reachable from the outside using a
straight segment in one of the layers used to implement the terminal. 
Unreachable terminals are generally detected by {\tt vulcan}.

\mosaico (and more precisely {\tt cds}) uses the concept of
``projection of a terminal onto a channel''. There 
are 4 channels surrounding each cell, independently of the shape of
the cell. Each terminal in a cell is projected onto one channel. 

There are a number of ways in which terminals interact among
themselves.  If two terminals overlap , they must be projected onto
two different channels. Similarly, if the straight segment necessary
to connect to an internal terminals ``A'' overlaps another terminal
``B'' , then terminals ``A'' and ``B'' must also be projected onto
different channels.

If it is not possible to map interacting terminals onto different
channles, \mosaico will fail to connect either one of them. A loud
warning is generated in such a case.


\end{document}
