VLSItools Internals: [cp]File Format
authors: Robert Philhower and Steve Simmons
The compose files (called [cp] files) are used by VLSItools to hold
layout and netlist information combined in a single file. In many
ways, these files are abstractions. Wiring segments are specified not
with a pair of coordinates, but rather with two logical connection
points. These points can be an instance connection, an external
connector, or a via. Net names and a net-based organization are
preserved. COMPASS design automation does not publicly document this
file so this document is the result of reverse engineering.
Limitations of analysis
Cells made with the VLSICompose editor as well as those placed and routed automatically by VLSIchipComp have been examined. No special optimization feature were utilized in the compilation. No maximum capacitance settings used either. Some aspects of the file format are still unknown.
Large-scale File Structure
The first two lines of a [cp] file are the comment lines read by VLSItools. If the file is edited, these comments should be removed. VLSItools will recreate them when it next writes the file.
The rest of the file is divided into two sections.
The first section is the file header. It consists of 4 lines that
should appear in a specific order. The second section (the bulk of the file)
consists of the netlist and wiring definitions.
Each line in these sections begins with a single letter which identifies
the function of the line.
Header Section
The header section has the following four lines given in order:
File type description
- Format: V 5 VLSIcompose
- Description:
Each VLSI file type that is readable to the human eye is given a V number, which for compose (cp) files, is 5. Following this is the name of the program that generally reads this type of file.
Abutment Box
- Format: A x1 y1 x2 y2
- Description:
The coordinates describe the lower left hand and upper right and corners of the abutment box. It describes the abutment box for the whole standard cell.
Bounding Box
- Format: B x1 y1 x2 y2
- Description:
The coordinates describe the lower left hand and upper right hand corners of the abutment box. It describes the bounding box for the whole standard cell.
Format
- Format: F F
- Description:
The format command has one parameter, which for [cp] files appears to be always "F." It appears to mark the end of the header section.
Bulk of File
After the header, the rest of the file consists of the following:
- External Connectors
- Instances
- Wiring Nets
- Abutment Connections
- End Marker
While it is not known if this ordering is mandatory, it should be generally maintained for consistency.
External Connectors
- Format:
C [*|conn-name] x y layer width connid * [*|conn-type][N|S|E|W] name
- Description:
conn-name is the connector name.
x and y are the coordinates of the connector,
width is the width of the connector, connid is
the connector number which will be used later to attach wires to this
connector, conn-type refers to the connector type,
the [N|S|E|W] tells which edge of the chip
this connector is on, and name is the connector name
as given in the LogicAssistant.
Instances
- Format:
I instname llcx llcy orientation cellname celltype * [*|F]
- Description:
instname is the name of the instance as defined in the LogicAssistant,
llcx and llcy are the coordinates of the
lower left hand corner of the standard cell instance.
orientation gives the orientation (rotation, mirror image) of
the instance. (See table.)
cellname and celltype are the name and type of the file
containing the connector placement information for the standard cell.
celltype is normally scp
. [*|F] tells
whether this instance is a flypaper instance. (F is flypaper, * is not.)
Orientation Codes
0 standard
1 rot90cc
2 rot180
3 rot90c
4 mx(x=-x)
5 mxRot90cc
6 my(y=-y)
7 myRot90cc
Wiring Nets
Wiring nets are described as a sequence of commands. The first set of commands locates any points in the net which are not connectors or instance connectors. This set includes any necessary via definitions. Next, comes a command which describes the bounding box around the wire. Last, there are segment descriptors which list every segment in the net.
Wire Point Definition
- Format:
P cx cy * layer
- Description:
cx and cy are the X and Y coordinates of the point, and
layer is the layer it exists on.
Join Point Definition
- Format:
J cx cy * layer
- Description:
cx and cy are the X and Y coordinates of the point, and
layer is the layer it exists on.
This is similar to the Wire Point definition. (The name ``join'' comes from the word VLSIcompose uses when you try to select a J point (or a P point for that matter).) J lines are rarely seen and seem to be associated with wires with a connection on only one end. Whenever a J line has appeared in a [cp] file, it has only one segment connecting to it.
Via Definition
Format: D cx cy *
viatype 0 width height
- Description:
cx and cy are the X and Y coordinates of the center
of the via, the viatype is taken from the ``.tec'' technology
file, and width and height describe the size of the
via in the X and Y directions.
Wiring Region
\begin{description}
\item[Format:] \exact{W} \fillin{x1} \fillin{y1} \fillin{x2} \fillin{y2}
\fillin{netname}
\item[Description:]
The W command is associated with 0 or more point defining commands (P, J,
or D commands) preceding it and contains 1 or more segment commands (S
commands) following it. The W command has four numeric parameters
which define the region (llc,urc). All the segments defined by the S
commands, all the points defined by the P, J, and D commands, and all the
instance connectors referenced by the S commands are contained within
this region.
\end{description}
Segment Definition
\begin{description}
\item[Format:] \exact{S} \fillin{width} \sixchoice{H}{V}{HN}{VN}{N}{*}
\twochoice{\fillin{layer}}{.} \fillin{descr1}
\fillin{descr2}
\item[Description:]
\fillin{width} is the segment width, `H' and `V' represent direction
(horizontal or vertical) of the segment. If neither `H' nor `V' is
present, the segment is in some other direction. (This is used for
unrealized interconnect.) A trailing `N' indicates
that the net name should appear on this segment. The `*' is used if
no symbols apply. ({\em I.E.} an unrealized interconnect without net name.)
The \fillin{layer} tells the
layer the segment is in. Replacing \fillin{layer} with a period (.)
makes the segment an unrealized interconnect for future routing.
\fillin{descr1} and \fillin{descr2} are location descriptions
of the two points to connect. Location descriptions are described
below.
\end{description}
Location Descriptions
The actual metal wiring is specified as Wiring Nets and Abutment Connections.
These items have a special type of parameter called a location description.
A location description may be one of three types: External Connector,
Pin, or Instance Connector.
\begin{description}
\item[External Connector]
\begin{description}
\item[Format:] \exact{C} \fillin{connid}
\item[Description:] These refer to external connectors which are
defined in section~\ref{sec-conn}.
\end{description}
\item[Pin]
\begin{description}
\item[Format:] \exact{P} \fillin{pinid}
\item[Description:] These refer to pin, join, or via instances which are
defined previously. The \fillin{pinid} is the sequential
number of the pin (or via) instance within the file. ({\em E.G.} the
to refer to the first pin within a file, \fillin{pinid} is 1.)
\end{description}
\item[Instance Connector]
\begin{description}
\item[Format:] \exact{I} \fillin{instname} \fillin{connid}
\item[Description:] These refer to connectors (pins) on instances defined
earlier. The \fillin{connid} field refers to the connector numbers in the
phantom definition of the instance.
\end{description}
\end{description}
Abutment Connections
\begin{description}
\item[Format:] \exact{A} \twochoice{H}{V} \fillin{loc1} \fillin{loc2}
\exact{* *}
\item[Description:]
An abutment connection is a connection between two standard cells that
are abutted. \twochoice{H}{V} determines whether the connection is
horizontal or vertical. \fillin{loc1} and \fillin{loc2} are connection
locations as described in section~\ref{sec-loc}. These should only be
instance connectors or external connectors in this case.
\end{description}
End Marker
\begin{description}
\item[Format:] \exact{E}
\item[Description:]
This item marks the end of the [cp] file.