Caltech Intermediate Form

Last updated
Caltech Intermediate Form(at)
Filename extension
.cif
Type of format EDA file format

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. The format allows hierarchical description, which makes the representation concise. In addition, it is a terse but human-readable text format.

Contents

Overview

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. Comments can be inserted anywhere by enclosing them in parentheses.

There are only a few CIF statements and they fall into one of two categories: geometry or control. The geometry statements are: LAYER to switch mask layers, BOX to draw a rectangle, WIRE to draw a path, ROUNDFLASH to draw a circle, POLYGON to draw an arbitrary figure, and CALL to draw a subroutine of other geometry statements. The control statements are DS to start the definition of a subroutine, DF to finish the definition of a subroutine, DD to delete the definition of subroutines, 0 through 9 to include additional user-specified information, and END to terminate a CIF file. All of these keywords are usually abbreviated to one or two letters that are unique.

Geometry

The LAYER statement (or the letter L) sets the mask layer to be used for all subsequent geometry until the next such statement. Following the LAYER keyword comes a single layer-name parameter. For example, the command:

    L CC; 

sets the layer to be the CMOS contact cut (see Fig. B.1 for some typical MOS layer names).

NMnMOS metal
NPnMOS polysilicon
NDnMOS diffusion
NCnMOS contact
NInMOS implant
NBnMOS buried
NGnMOS overglass
CMFCMOS metal 1
CMSCMOS metal 2
CPGCMOS polysilicon
CAACMOS active
CSGCMOS select
CWGCMOS well
CCCMOS contact
CVACMOS via
COGCMOS overglass
FIGURE B.1 CIF layer names for MOS processes.

The BOX statement (or the letter B) is the most commonly used way of specifying geometry. It describes a rectangle by giving its length, width, center position, and an optional rotation. The format is as follows:

    B length width xpos ypos [rotation] ; 

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. The default value of this field is (1, 0), which is a right-pointing vector. Thus the rotation clause 10 5 defines a 26.6-degree counterclockwise rotation from the normal. Similarly, 10 -10 will rotate clockwise by 45 degrees. Note that the magnitude of this rotation vector has no meaning.

FIGURE B.2 A sample CIF "wire" statement. The statement is: W25 100 200 100 100 200 200 300 200; CIFfigb02.png
FIGURE B.2 A sample CIF "wire" statement. The statement is: W25 100 200 100 100 200 200 300 200;

The WIRE statement (or the letter W) is used to construct a path that runs between a set of points. The path can have a nonzero width and has rounded corners. After the WIRE keyword comes the width value and then an arbitrary number of coordinate pairs that describe the endpoints. Figure B.2 shows a sample wire. Note that the endpoint and corner rounding are implicitly handled.

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

    R 20 30 40; 

will draw a circle that has a radius of 10 (diameter of 20), centered at (30, 40).

FIGURE B.3 A sample CIF "polygon" statement. The statement is: P 150 100 200 200 200 300 100 300 100 200; CIFfigb03.gif
FIGURE B.3 A sample CIF "polygon" statement. The statement is: P 150 100 200 200 200 300 100 300 100 200;

The POLYGON statement (or the letter P) takes a series of coordinate pairs and draws a filled polygon from them. Since filled polygons must be closed, the first and last coordinate points are implicitly connected and need not be the same. Polygons can be arbitrarily complex, including concavity and self-intersection. Figure B.3 illustrates a polygon statement.

Hierarchy

The CALL statement (or the letter C) invokes a collection of other statements that have been packaged with DS and DF. All subroutines are given numbers when they are defined and these numbers are used in the CALL to identify them. If, for example, a LAYER statement and a BOX statement are packaged into subroutine 4, then the statement:

    C 4; 

will cause the box to be drawn on that layer.

In addition to simply invoking the subroutine, a CALL statement can include transformations to affect the geometry inside the subroutine. Three transformations can be applied to a subroutine in CIF: translation, rotation, and mirroring. Translation is specified as the letter T followed by an x, y offset. These offsets will be added to all coordinates in the subroutine, to translate its graphics across the mask. Rotation is specified as the letter R followed by an x, y vector endpoint that, much like the rotation clause in the BOX statement, defines a line to the origin. The unrotated line has the endpoint (1, 0), which points to the right. Mirroring is available in two forms: MX to mirror in x and MY to mirror in y. Mirroring is a bit confusing, because MX causes a negation of the x coordinate, which effectively mirrors about the y axis.

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; CIFfigb04.gif
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;

Any number of transformations can be applied to an object and their listed order is the sequence that will be used to apply them. Figure B.4 shows some examples, illustrating the importance of ordering the transformations (notice that Figs. B.4c and B.4d produce different results by rearranging the transformations).

Defining subroutines for use in a CALL statement is quite simple. The statements to be packaged are enclosed between DS (definition start) and DF (definition finish) statements. Arguments to the DS statement are the subroutine number and a subroutine scaling factor. There are no arguments to the DF statement. The scaling factor for a subroutine consists of a numerator followed by a denominator that will be applied to all values inside the subroutine. This scaling allows large numbers to be expressed with fewer digits and allows ease of rescaling a design. The scale factor cannot be changed for each invocation of the subroutine since it is applied to the definition. As an example, the subroutine of Fig. B.4 can be described formally as follows:

    DS 10 20 2;       B10 20 5 5;       W1 5 5 10 15;     DF; 

Note that the scale factor is 20/2, which allows the trailing zero to be dropped from all values inside the subroutine.

Arbitrary depth of hierarchy is allowed in CIF subroutines. Forward references are allowed provided that a subroutine is defined before it is used. Thus the sequence:

    DS 10;        ...       C 11;     DF;     DS 11;        ...     DF;     C 10; 

is legal, but the sequence:

    C 11;     DS 11;        ...      DF; 

is not. This is because the actual invocation of subroutine 11 does not occur until after its definition in the first example.

Control

CIF subroutines can be overwritten by deleting them and then redefining them. The DD statement (delete definition) takes a single parameter and deletes every subroutine that has a number greater than or equal to this value. The statement is useful when merging multiple CIF files because designs can be defined, invoked, and deleted without causing naming conflicts. However, it is not recommended for general use by CAD systems.

Extensions to CIF can be done with the numeric statements 0 through 9. Although not officially part of CIF, certain conventions have evolved for the use of these extensions (see Fig. B.5).

0 x y layer N name;Set named node on specified layer and position
0V x1 y1 x2 y2 ... xn yn;Draw vectors
2A "msg" T x y;Place message above specified location
2B "msg" T x y;Place message below specified location
2C "msg" T x y;Place message centered at specified location
2L "msg" T x y;Place message left of specified location
2R "msg" T x y;Place message right of specified location
4A lowx lowy highx highy;Declare cell boundary
4B instancename;Attach instance name to cell
4N signalname x y;Labels a signal at a location
9 cellname;Declare cell name
91 instancename;Attach instance name to cell
94 label x y;Place label in specified location
95 label length width x y;Place label in specified area
FIGURE B.5 Typical user extensions to CIF.

The final statement in a CIF file is the END statement (or the letter E). It takes no parameters and typically does not include a semicolon.

BNF grammar

The following is the grammar for the CIF format with cifFile being the top level grammar node.

cifFile ::= (blank* command? semi)* endCommand blank* command ::= primCommand | defDeleteCommand | defStartCommand semi (blank* primCommand? semi)* defFinishCommand primCommand ::= polygonCommand | boxCommand | roundFlashCommand | wireCommand | layerCommand | callCommand | userExtensionCommand | commentCommand polygonCommand ::= "P" path boxCommand ::= "B" integer sep integer sep point (sep point)? roundFlashCommand ::= "R" integer sep point wireCommand ::= "W" integer sep path layerCommand ::= "L" blank* shortname defStartCommand ::= "D" blank* "S" integer (sep integer sep integer)? defFinishCommand ::= "D" blank* "F" defDeleteCommand ::= "D" blank* "D" integer callCommand ::= "C" integer transformation userExtensionCommand ::= digit userText commentCommand ::= "(" commentText ")" endCommand ::= "E" transformation ::= (blank* ("T" point |"M" blank* "X" |"M" blank* "Y" |"R" point)*)* path ::= point (sep point)* point ::= sInteger sep sInteger sInteger ::= sep* "-"? integerD integer ::= sep* integerD integerD ::= digit+ shortname ::= c c? c? c? c ::= digit | upperChar userText ::= userChar* commentText ::= commentChar* | commentText "(" commentText ")" commentText semi ::= blank* ";" blank* sep ::= upperChar | blank digit ::= "0" | "1" | ... | "9" upperChar ::= "A" | "B" | ... | "Z" blank ::= any ASCII character except digit, upperChar, "-", "(", ")", or ";" userChar ::= any ASCII character except ";" commentChar ::= any ASCII character except "(" or ")"

See also

Related Research Articles

<span class="mw-page-title-main">Circumference</span> Perimeter of a circle or ellipse

In geometry, the circumference is the perimeter of a circle or ellipse. The circumference is the arc length of the circle, as if it were opened up and straightened out to a line segment. More generally, the perimeter is the curve length around any closed figure. Circumference may also refer to the circle itself, that is, the locus corresponding to the edge of a disk. The circumference of a sphere is the circumference, or length, of any one of its great circles.

<span class="mw-page-title-main">Fortran</span> General-purpose programming language

Fortran is a third generation, compiled, imperative programming language that is especially suited to numeric computation and scientific computing.

<span class="mw-page-title-main">Similarity (geometry)</span> Property of objects which are scaled or mirrored versions of each other

In Euclidean geometry, two objects are similar if they have the same shape, or if one has the same shape as the mirror image of the other. More precisely, one can be obtained from the other by uniformly scaling, possibly with additional translation, rotation and reflection. This means that either object can be rescaled, repositioned, and reflected, so as to coincide precisely with the other object. If two objects are similar, each is congruent to the result of a particular uniform scaling of the other.

<span class="mw-page-title-main">Atari BASIC</span> Dialect of the BASIC programming language

Atari BASIC is an interpreter for the BASIC programming language that shipped with Atari 8-bit computers. Unlike most American BASICs of the home computer era, Atari BASIC is not a derivative of Microsoft BASIC and differs in significant ways. It includes keywords for Atari-specific features and lacks support for string arrays.

In computer science, imperative programming is a programming paradigm of software that uses statements that change a program's state. In much the same way that the imperative mood in natural languages expresses commands, an imperative program consists of commands for the computer to perform. Imperative programming focuses on describing how a program operates step by step, rather than on high-level descriptions of its expected results.

<span class="mw-page-title-main">Data definition language</span> Syntax for defining data structures

In the context of SQL, data definition or data description language (DDL) is a syntax for creating and modifying database objects such as tables, indices, and users. DDL statements are similar to a computer programming language for defining data structures, especially database schemas. Common examples of DDL statements include CREATE, ALTER, and DROP. If you see a .ddl file, that means the file contains a statement to create a table. Oracle SQL Developer contains the ability to export from an ERD generated with Data Modeler to either a .sql file or a .ddl file.

TI-BASIC is the official name of a BASIC-like language built into Texas Instruments' graphing calculators. TI-BASIC is a language family of three different and incompatible versions, released on different products:

FOCAL is an interactive interpreted programming language based on JOSS and mostly used on Digital Equipment Corporation (DEC) Programmed Data Processor (PDP) series machines.

<span class="mw-page-title-main">Vilnius BASIC</span> Dialect of the BASIC programming language

Vilnius BASIC, sometimes known as BK BASIC, is a dialect of the BASIC programming language running on the Elektronika BK-0010-01/BK-0011M and UKNC computers. It was developed at Vilnius University, located in Lithuania which was a republic of the Soviet Union at the time.

HP Time-Shared BASIC is a BASIC programming language interpreter for Hewlett-Packard's HP 2000 line of minicomputer-based time-sharing computer systems. TSB is historically notable as the platform that released the first public versions of the game Star Trek.

The computer programming languages C and Pascal have similar times of origin, influences, and purposes. Both were used to design their own compilers early in their lifetimes. The original Pascal definition appeared in 1969 and a first compiler in 1970. The first version of C appeared in 1972.

In the C programming language, data types constitute the semantics and characteristics of storage of data elements. They are expressed in the language syntax in form of declarations for memory locations or variables. Data types also determine the types of operations or methods of processing of data elements.

Color BASIC is the implementation of Microsoft BASIC that is included in the ROM of the Tandy/Radio Shack TRS-80 Color Computers manufactured between 1980 and 1991. BASIC is a high level language with simple syntax that makes it easy to write simple programs. Color BASIC is interpreted, that is, decoded as it is run.

TUTOR, also known as PLATO Author Language, is a programming language developed for use on the PLATO system at the University of Illinois at Urbana-Champaign beginning in roughly 1965. TUTOR was initially designed by Paul Tenczar for use in computer assisted instruction (CAI) and computer managed instruction (CMI) and has many features for that purpose. For example, TUTOR has powerful answer-parsing and answer-judging commands, graphics, and features to simplify handling student records and statistics by instructors. TUTOR's flexibility, in combination with PLATO's computational power, also made it suitable for the creation of games — including flight simulators, war games, dungeon style multiplayer role-playing games, card games, word games, and medical lesson games such as Bugs and Drugs (BND). TUTOR lives on today as the programming language for the Cyber1 PLATO System, which runs most of the source code from 1980s PLATO and has roughly 5000 users as of June 2020.

In number theory, a narcissistic number in a given number base is a number that is the sum of its own digits each raised to the power of the number of digits.

This is an overview of Fortran 95 language features. Included are the additional features of TR-15581:Enhanced Data Type Facilities, which have been universally implemented. Old features that have been superseded by new ones are not described – few of those historic features are used in modern programs although most have been retained in the language to maintain backward compatibility. The current standard is Fortran 2023; many of its new features are still being implemented in compilers.

IBM System/3 BASIC was an interpreter for the BASIC programming language for the IBM System/34 midrange computer.

IBM System/36 BASIC was an interpreter for the IBM System/36 midrange computer.

SUPER BASIC, sometimes SBASIC for short, is an advanced dialect of the BASIC programming language offered on Tymshare's SDS 940 systems starting in 1968 and available well into the 1970s.

BASIC-8, is a BASIC programming language for the Digital Equipment (DEC) PDP-8 series minicomputers. It was the first BASIC dialect released by the company, and its success led DEC to produce new BASICs for its future machines, notably BASIC-PLUS for the PDP-11 series. DEC's adoption of BASIC cemented the use of the language as the standard educational and utility programming language of its era, which combined with its small system requirements, made BASIC the major language during the launch of microcomputers in the mid-1970s.

References