Spacing tables may be imported from Cadence Virtuoso ASCII technology files, or may be created and used exclusively within Xic. The format is the same as the width and width--length spacing tables found in Virtuoso constraint definitions.
In Xic, spacing tables are not independent objects, but are owned by a MinSpace or MinSpaceTo design rule. Each rule of these types can have a spacing table. The tables are printed when an Xic technology file is generated, as part of the rule specification string. The rule text is printed using backslash line continuation characters for legibility, as the rule string will be rather long when the table is included. The same format is used when listing rules in the Edit Rules window, and in the text editor used to edit the spacing table text from the rule editor windows for these rules.
Below is the text for a spacing table, which will be explained as an example.
SpacingTable 0.0900 2 0x0 11 \
0.0050 0.0050 0.0900 \
0.2050 0.3850 0.1100 \
0.4250 0.3850 0.1100 \
0.4250 0.4250 0.1600 \
1.5050 0.3850 0.1100 \
1.5050 0.4250 0.1600 \
1.5050 1.5050 0.5000 \
4.5050 0.3850 0.1100 \
4.5050 0.4250 0.1600 \
4.5050 1.5050 0.5000 \
4.5050 4.5050 1.5000 \
The SpacingTable keyword begins the definition. Note that each line ends with a backslash character. This ``hides'' the return character, so that logically the text forms a single line. One could certainly enter the text as a single line, the hidden line breaks are for readability only. The kind and number of text tokens that form the definition are well defined, so there is no ambiguity in where the table definition ends, when it is included in a larger string.
Following the initial keyword are four numeric tokens. The first is the default spacing in microns, as a floating-point number. This will apply when the table does not resolve a value. This should be the same number as the default spacing in the associated design rule, but will override that value if different.
The second number is the table dimensionality, which is either 1 or 2. The example is a two dimensional table, which is probably most common. Each row of a two dimensional table contains three numbers, for width, length, and the spacing value. In a one dimensional table, the length values are not present.
The third number is a hexadecimal value which is used as a flags byte. The flags are saved in tables imported from Virtuoso, and represent unhandled features. The only purpose of these flags is to regurgitate the needed keywords when a Cadence technology file is produced with the !dumpcds command. The flags are not documented, but the least significant bit is actually an ``ignore'' flag used only by Xic. The main thing to be aware of is that the spacing table will only be active if the flags integer is 0. If not zero, the table will be carried with the rule, but will not be used in analysis. The default spacing, given in the first number, will apply in any case.
The fourth number is a positive integer giving the number of rows in the table. Each ``row'' consists of two or three floating-point numbers, for one and two dimensional tables. The row data follow.
The first number in each row is the width parameter. In Xic, this parameter is obtained from the object whose edges are currently being evaluated for MinSpace or MinSpaceTo violations. If the object is a rectangle, the width is the smaller of the rectangle width and height. If the object is a wire, the width is the wire's width. If the object is a non-rectangular polygon, the width is the smaller of the bounding box width and height.
In two-dimensional tables, the second parameter (length) is the parallel run length of the two edges normal to the spacing direction being tested.
The remaining parameter is a spacing value that applies for the given width, and length in two-dimensionsl tables.