tecc - technology compiler for space |
tecc [-sten] [-m maskdatafile] [-p process] file |
The following options can be specified: |
-s |
Silent mode. |
||
-t |
Table-format output file goes to stdout. |
||
-e |
Print expanded condition list for each new mask and element. |
||
-n |
Do not compress table-format element-definition file. This option is useful during element-definition file development. It makes tecc run faster, and space somewhat slower. |
-m maskdatafile |
Specifies the maskdatafile. Default, the maskdatafile is obtained from the process directory. |
-p process |
Specifies the process. The default process is determined by the current project directory or, if it is defined, the environment variable ICDPROCESS. process can be a process name, a process number or a process directory. |
The program tecc acts as a pre-processor for technology descriptions for the circuit extraction program space. From a user-defined element-definition file, tecc produces a table-format element-definition file that can be used as input for space. The user-defined input file should have the extension '.s', while the table-format output file will be called to the input file with '.t' substituted for '.s'. |
In the user-defined element-definition file the elements are listed that can be recognized from the layout description. Here, we only describe some basics of the element definition file. For a full description, see the different Space User Manuals. For each of the elements, at least a name and a condition list has to be specified. The name of an element is used to identify the element when error messages are generated or, for transistor elements, to identify the element in the circuit that is extracted. It is not allowed to use the same name in more than one element definition. A condition list specifies how the presence of a particular element depends on the presence or absence of the different masks. The condition list is a boolean expression where the masks are used as the variables of the expression. In the expression, the AND operation is performed using simple concatenation, the OR operation is performed using the '|' character (AND has precedence over OR) and the INVERT operation is performed using the '!' character. Parentheses may be used to nest the expression. References to masks in adjacent areas can be made by preceding the mask names with a '-' character, or a '=' character. The following (cross-section) gives an example. ------------+ +------------- =in | | -in ------------+ +------------- +------------------------------ | ps -ps +------------------------------ ------------------------------------------ substrate When preceding the mask name with a '-' character, a reference is made to a mask that is in an adjacent area. When preceding the mask name with a '=' character, a reference is made to a mask that is in an area that is opposite to the area that contains the masks preceded with the '-' sign. The above can be used to define the elements that are present on the boundary between two regions of different mask combinations (e.g. edge capacitances) or elements that are present between the boundaries themselves (e.g. lateral capacitances between parallel wires). In the following, the syntax and semantics of the element-definition file is described. The element-definition file may contain specifications for, among other things, the units, the key list, the resize list, the new list, the conductor elements, the transistor elements, the contact elements and the capacitance elements. Each of these specifications is optional but their order is fixed. |
Unit specification |
unit variable value . . With one of the above commands, the unit of a variable in the conductor list, the contact list or the capacitance list is specified. The string variable can be either resistance to specify the unit for sheet resistance, c_resistance to specify the unit for contact resistance, a_capacitance to specify the unit for area capacitance, e_capacitance to specify the unit for edge capacitance (or - if the capacitance is specified by means of distance, capacitivity pairs - for lateral capacitance), capacitance to specify the unit for capacitance, distance to specify the unit for distance in distance, capacitivity pairs, or resize to specify the unit for resizing masks. The unit of each variable is specified by value, expressed in S.I. units. |
The key list |
keys: mask1 mask2 ... maskN In the key list the masks are enumerated that should be used as key masks during element recognition. Based on the key masks tecc produces a hash table that allows space to find circuit elements without separately checking the element conditions that refer to the presence or absence of the key masks. Adjacent masks (that are specified by preceding them with a '-' or '=' character) might also be used as a key mask. By carefully choosing the key masks, the speed of element recognition will be optimal, while the hash table will be not too large (the size of the hash table will be equal to 2 ^ N, where N is the number of key masks). When no key list is specified, but maxkeys N is specified instead, tecc will select the key masks itself. Up to a maximum of N, tecc will select the masks that are most frequently used for specifying the element conditions. When neither a key list nor a maximum number of keys is specified, tecc will assume that maxkeys is equal to 12. |
Resize mask specification |
resize: condition_mask : mask : value . . This command allows to grow masks with a certain value (when a positive value is specified) or shrink masks with a certain value (when a negative value is specified). The second mask that is specified must be equal to the condition mask that is specified, and they must be original mask names (e.g. not a newly created mask name). For one mask, more than one resize statement may be specified. |
New mask specification |
new: condition_list : name . . This command allows to create a new mask from the combination of other masks. The new mask, given by name, is defined everywhere where the combination of masks satisfies the condition list of the specification. The characters '-' and '=' may not be used in the condition list for a new mask. Apart from the fact that the new command may be used to develop more compact element definition files, it can also be used to define one or more substrate layers. |
The conductor list |
conductors [ type ] : name : condition_list : mask : sheet-resistivity [ : carrier_type] . . The conductor list contains the definitions for the conducting layers in the circuit. For each conductor specification, a specification of the actual conductor mask and a specification of the sheet-resistivity (in ohms) is required. For bipolar devices in particular, it is also necessary to specify the carrier-type of the conductor. The type can be n for n doped conductors, p for p doped conductors and m otherwise. The default carrier-type is m. Default, when extracting resistances, linear resistances will be extracted for a conductor. However, when a conductor type is specified with a conductor list, the extracted resistances for all conductors in that list will be of the specified type. An element definition file may contain more than one conductor list. |
The field-effect transistor list |
fets: name : condition_list : mask_g mask_ds [ condition_list ] |
[ : connect_b ] |
. For a field-effect transistor (e.g. MOS or junction FET), the name and the condition list are followed by a specification of the gate mask mask_g and the drain/source mask mask_ds. The gate mask and the drain/source mask must be masks that are defined as a conductor in the conductor list. Optionally, in parentheses, a condition list for the drain/source region can be specified. Further, optionally, at the end of the specification after a colon, a bulk connection connect_b can be specified for the transistor. This connection may consist of (1) a mask that is specified as a conductor in the conductor list, (2) the string "@sub" to denote the substrate area below the transistor gate, or (3) the notation "%(condition_list)" to denote a substrate area described by the condition list. |
The bipolar transistor list |
bjts : name : condition_list : type : mask_em mask_ba mask_co |
[ : connect_b ] |
. |
The connect list |
connects : name : condition_list : mask1 mask2 . . The connect elements connect different semiconductor regions of the same carrier-type. They define the connectivity relation between the different conductors. Mask1 and mask2 are the conductor masks that are connected. Note: the connection of conductor layers via a contact or via should be specified in the contact list (see below). |
The contact list |
contacts [ type ] : name : condition_list : mask1 mask2 : contact-resistance . . The contact elements connect different conductors that are on top of each other. Mask1 and mask2 are the conductor masks that are connected by the contact. For mask1 or mask2 also the string "@sub" or the "%(condition_list)" notation may be used. The parameter at the end of the specification specifies the contact resistance in ohm for a (hypothetical) contact of 1 meter * 1 meter. Default, when extracting resistances, linear resistances will be extracted for a contact. However, when a contact type is specified with the contact list, the extracted resistances for all contacts in that list will be of the specified type. An element definition file may contain more than one contact list. |
The capacitance list |
[ junction ] capacitances [ type ] : name : condition_list : mask1 [ mask2 ] : capacitivity . . In the capacitance list, both ground and coupling capacitances can be defined. Ground capacitances are defined by using the string "@gnd", the string "@sub" or the notation "%(condition_list)" for either mask1 or mask2. The difference between the use of the string "@gnd" and the two other cases is that (1) in the first case the ground capacitance will be connected to a node called "GND" while in the other two cases the ground capacitance will be connected to a node called "SUBSTR", and (2) - in case of substrate resistance extraction (see the Space Substrate Resistance Extraction User's Manual) - "@gnd" represents ideal ground while "@sub" and "%(condition_list)" represent substrate areas between substate resistances are computed. Omitting mask2 is equivalent to using the string "@gnd" for mask2. Furthermore, capacitances are distinguished between surface capacitances, edge capacitances and lateral capacitances. To define edge capacitance, masks preceded with a '-' character are used in the condition list, and either mask1 or mask2 has to be preceded with a '-' character to denote an edge of an interconnection. To define lateral capacitances, masks preceded with a '-' character and mask preceded with a '=' character are used in the condition list, and either mask1 or mask2 is preceded with a '-' character to denote one edge of an interconnection and the other mask is preceded with a '=' character to denote another (opposite) edge of an interconnection. For surface capacitances, capacitivity is the capacitance per square meter. For edge capacitances, capacitivity is the capacitance per meter edge length. For lateral capacitances, the capacitance can be specified in two different ways. If only one value is specified, as in the above, capacitivity is the capacitance for a configuration where the spacing between two parallel wires is equal to length of the two wires. In that case, it is assumed that the lateral coupling capacitance is proportional to the distance between the two wires and inverse proportional to their spacing. Lateral coupling capacitances can also be defined as follows. name : condition_list : mask1 mask2 : distance1 capacitivity1 |
distance2 capacitivity2 |
|
. |
|
. |
In this case, the distance, capacitivity pairs specify the capacitance between two parallel wires of a length of 1 meter for different values of the distance between them. The lateral coupling capacitance for other configurations is then found from an interpolation between two distance, capacitivity pairs. For the interpolation, functions of type y = a/(x^p) and type y = a/x + b are used. If the actual distance is larger or smaller than any specified distance, an extrapolation is done using the above functions. Default, when extracting capacitances, linear capacitances will be extracted. However, when a capacitance type is specified with the capacitance list, the extracted capacitances for all capacitance definitions in that list will be of the specified type. An element definition file may contain more than one capacitance list. Normally, the positive node and the negative node of the extracted capacitance will be arbitrarily connected to the layers that are specified with mask1 and mask2. However, if the keyword "junction" is used before the keyword "capacitance" of the capacitance list, for all elements in that list, mask1 specifies the positive node of the element and mask2 specifies the negative node of the element. Default, junction capacitances will be extracted as linear capacitances. However, using the parameter jun_caps junction capacitances can be extracted in different ways. This explained in more detail in the Space User's Manual. |
Comment |
Comments can be included in the element-definition file by preceding them with a '#' character. All text following the '#' character, until the end of the line, will be skipped as comment. |
The following gives an example of a complete element-definition file for a cmos process. # process : c5th # author : A.J. van Genderen, TU-Delft # date : Feb. 15, 1988 unit resistance 1 # Ohm unit c_resistance 1e-12 # Ohm per meter ^ 2 unit a_capacitance 1e-3 # Farad per meter ^ 2 unit e_capacitance 1e-9 # Farad per meter unit capacitance 1e-18 # Farad conductors : condM : in : in : 0.040 condP1 : ps sp : ps : 33 condP2 : ps sn : ps : 30 condP3 : ps !sn !sp : ps : 20 condD1 : od !ps sp : od : 45 # p+ condD2 : od !ps sn : od : 30 # n+ condD3 : od !ps !sn !sp : od : 38 # terminal fets : nenh : ps od sn !sp !nw !cop !con !cps : ps od penh : nw ps od sp !sn !cop !con !cps : ps od contacts : contP : cps in ps !od : in ps : 90 contD1 : con in od !ps : in od : 270 contD2 : cop in od !ps : in od : 90 capacitances : # ground capacitances capM : in !ps !od : in @gnd : 0.036 capMe : !in -in !ps !od : -in @gnd : 0.080 capP : ps !od : ps @gnd : 0.069 capPe : !ps -ps !od : -ps @gnd : 0.051 # diff - substr: capD1 : od !ps sn : od @gnd : 0.041 # diff - substr: capD1e : !od !-ps -od -sn : -od @gnd : 0.21 # diff - well: capD2 : od !ps sp : od @gnd : 0.120 # diff - well capD2e : !od !-ps -od -sp : -od @gnd : 0.80 # coupling capacitances capMP : in ps : in ps : 0.075 capMPe : !in -in ps : -in ps : 0.090 capMD1 : in !ps od sn : in od : 0.065 capMD1e : !in -in !ps od sn : -in od : 0.090 capMD2 : in !ps od sp : in od : 0.066 capMD2e : !in -in !ps od sp : -in od : 0.090 # lateral coupling capacitances capMeMe : -in !in =in : -in =in : 2.4 capPePe : -ps !ps =ps : -ps =ps : 1.8 capMePe : -in !in !ps =ps : -in =ps : 1.2 |
file.s |
input file |
|||
file.t |
output file |
space(1ICD) |
When no silent mode is specified, tecc will print information about the hash table that is being constructed for element recognition. This information can be used to tune the specification of the key masks. Furthermore, tecc will check if legal mask names are used and if conductor masks are used with transistor, contact and capacitance definitions. During extraction itself it will be checked if appropriate conductor elements are present; for transistor elements and capacitance elements this is required, for contact elements this is not required. |