Caltech Intermediate Form

Caltech Intermediate Form (CIF) is a file format for describing integrated circuits.

CIF provides a limited set of graphics primitives that are useful for describing the two-dimensional shapes on the different layers of a chip.

Each statement in CIF consists of a keyword or letter followed by parameters and terminated with a semicolon.

Spaces must separate the parameters but there are no restrictions on the number of statements per line or of the particular columns of any field.

For example, the command: sets the layer to be the CMOS contact cut (see Fig.

It describes a rectangle by giving its length, width, center position, and an optional rotation.

The format is as follows: Without the rotation field, the four numbers specify a box the center of which is at (xpos, ypos) and is length across in x and width tall in y.

All numbers in CIF are integers that refer to centimicrons of distance, unless subroutine scaling is specified (described later).

The optional rotation field contains two numbers that define a vector endpoint starting at the origin.

After the WIRE keyword comes the width value and then an arbitrary number of coordinate pairs that describe the endpoints.

The ROUNDFLASH statement (or the letter R) draws a filled circle, given the diameter and the center coordinate.

Figure B.4 shows some examples, illustrating the importance of ordering the transformations (notice that Figs.

B.4 can be described formally as follows: Note that the scale factor is 20/2, which allows the trailing zero to be dropped from all values inside the subroutine.

The statement is useful when merging multiple CIF files because designs can be defined, invoked, and deleted without causing naming conflicts.

FIGURE B.2 A sample CIF "wire" statement. The statement is: W25 100 200 100 100 200 200 300 200;
FIGURE B.3 A sample CIF "polygon" statement. The statement is: P 150 100 200 200 200 300 100 300 100 200;
FIGURE B.4 The transformations of a CIF "call": (a) Subroutine 10: BOX 100 200 50 50; WIRE 10 50 50 100 150; (b) Invocation: C 10 T -50 0 MX MY; (c) Invocation: C 10 R 0 -1 MX; (d) Invocation: C 10 MX R 0 -1;