# VLSItools Internals: [cp]File Format

## HTML: Cliff Maier

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.

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: 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.