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.
CIF was created by Ivan Sutherland and Ron Ayres in 1976, with improvements by Carlo H. Séquin, Douglas Fairbairn and Stephen Trimberger. The written specification was later updated by Robert Sproull and Richard Lyon and revised by Stephen Trimberger.[1]
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).
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] ;
Sin el campo de rotación, los cuatro números especifican una caja cuyo centro está en ( xpos , ypos ) y tiene longitud en x y ancho en y. Todos los números en CIF son enteros que se refieren a centimucinas de distancia, a menos que se especifique el escalado de subrutina (que se describe más adelante). El campo de rotación opcional contiene dos números que definen un punto final de vector que comienza en el origen. El valor predeterminado de este campo es (1, 0), que es un vector que apunta hacia la derecha. Por lo tanto, la cláusula de rotación 10 5define una rotación de 26,6 grados en sentido antihorario con respecto a la normal. De manera similar, 10 -10rotará en sentido horario 45 grados. Tenga en cuenta que la magnitud de este vector de rotación no tiene significado.

La WIREinstrucción (o la letra W) se utiliza para construir una ruta que conecta un conjunto de puntos. La ruta puede tener un ancho distinto de cero y esquinas redondeadas. Tras la WIREpalabra clave, se especifica el valor del ancho y, a continuación, un número arbitrario de pares de coordenadas que describen los puntos extremos. La figura B.2 muestra un ejemplo de cable. Cabe destacar que el redondeo de los puntos extremos y las esquinas se gestiona de forma implícita.
La ROUNDFLASHinstrucción (o la letra R) dibuja un círculo relleno, dados el diámetro y la coordenada central. Por ejemplo, la instrucción:
R 20 30 40;
dibujará un círculo que tiene un radio de 10 (diámetro de 20), centrado en (30, 40).

La POLYGONinstrucción (o la letra P) toma una serie de pares de coordenadas y dibuja un polígono relleno a partir de ellos. Dado que los polígonos rellenos deben ser cerrados, el primer y el último punto de coordenadas están conectados implícitamente y no tienen por qué ser iguales. Los polígonos pueden ser arbitrariamente complejos, incluyendo concavidad y autointersección. La figura B.3 ilustra una instrucción para polígonos.
Jerarquía
La CALLinstrucción (o la letra C) invoca una colección de otras instrucciones que se han empaquetado con DSy DF. A todas las subrutinas se les asignan números cuando se definen y estos números se utilizan en CALLpara identificarlas. Si, por ejemplo, una LAYERinstrucción y una BOXinstrucción se empaquetan en la subrutina 4, entonces la instrucción:
C 4;
Esto hará que el cuadro se dibuje en esa capa.
Además de simplemente invocar la subrutina, una CALLinstrucción puede incluir transformaciones para afectar la geometría dentro de la subrutina. Se pueden aplicar tres transformaciones a una subrutina en CIF: traslación, rotación y simetría. La traslación se especifica como la letra Tseguida de un desplazamiento x, y. Estos desplazamientos se agregarán a todas las coordenadas en la subrutina para trasladar sus gráficos a través de la máscara. La rotación se especifica como la letra Rseguida de un punto final de vector x, y que, al igual que la cláusula de rotación en la BOXinstrucción, define una línea al origen. La línea sin rotar tiene el punto final (1, 0), que apunta a la derecha. La simetría está disponible en dos formas: MXpara reflejar en x y MYpara reflejar en y. La simetría es un poco confusa, porque MXcausa una negación de la coordenada x, lo que efectivamente refleja alrededor del eje y.

Se pueden aplicar diversas transformaciones a un objeto, y el orden en que aparecen en la lista determina la secuencia de aplicación. La figura B.4 muestra algunos ejemplos que ilustran la importancia del orden de las transformaciones (nótese que las figuras B.4c y B.4d producen resultados diferentes al reordenar las transformaciones).
Definir subrutinas para su uso en una CALLinstrucción es bastante sencillo. Las instrucciones que se van a empaquetar se encierran entre las instrucciones DS(inicio de definición) y (fin de definición). Los argumentos de la instrucción son el número de subrutina y un factor de escala de subrutina. No hay argumentos para la instrucción. El factor de escala de una subrutina consta de un numerador seguido de un denominador que se aplicará a todos los valores dentro de la subrutina. Este escalado permite expresar números grandes con menos dígitos y facilita el reescalado de un diseño. El factor de escala no se puede cambiar para cada invocación de la subrutina, ya que se aplica a la definición. Como ejemplo, la subrutina de la Fig. B.4 se puede describir formalmente de la siguiente manera:DFDSDF
DS 10 20 2; B10 20 5 5; W1 5 5 10 15; DF;
Tenga en cuenta que el factor de escala es 20/2, lo que permite eliminar el cero final de todos los valores dentro de la subrutina.
En las subrutinas CIF se permite una profundidad arbitraria de la jerarquía. Se permiten referencias hacia adelante siempre que una subrutina se defina antes de su uso. Por lo tanto, la secuencia es:
DS 10; ... C 11; DF; DS 11; ... DF; C 10;
es legal, pero la secuencia:
C 11; DS 11; ... DF;
No lo es. Esto se debe a que la invocación real de la subrutina 11 no ocurre hasta después de su definición en el primer ejemplo.
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).
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 ::= cc? 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 ::= cualquier carácter ASCII excepto dígito, upperChar, "-", "(", ")" o ";" userChar ::= cualquier carácter ASCII excepto ";" commentChar ::= cualquier carácter ASCII excepto "(" o ")"
Véase también
- Formato de flujo GDS II
- OASIS (Estándar de Intercambio de Sistemas Abiertos de Obras de Arte)
- EDIF , un formato de archivo independiente del proveedor creado en los años 90.
Referencias
- ↑ Sproull, Robert; Lyon, Richard; Trimberger, Stephen (11 de febrero de 2025). El formulario intermedio de Caltech para la descripción del diseño de LSI (Informe técnico). Instituto Tecnológico de California. TR 2686. Consultado el 17 de septiembre de 2025 .
Enlaces externos
- Herramientas informáticas para el diseño VLSI - Apéndice B: Formato intermedio de Caltech por Steven M. Rubin
- Introducción al CIF
- Hon, Robert W. y Sequin, Carlo H., "Guía para la implementación de LSI", 2.ª edición, Memorando técnico SSL-79-7 del Centro de Investigación de Xerox Palo Alto, enero de 1980.
- formatos de archivo EDA