IC Validator LVS User Guide: Version S-2021.06, June 2021
IC Validator LVS User Guide: Version S-2021.06, June 2021
Contents
New in This Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
Related Products, Publications, and Trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Customer Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Statement on Inclusivity and Diversity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2. Netlist Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
NetTran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Translating Netlists to IC Validator Format Using NetTran . . . . . . . . . . . . . . . . . 49
3
Feedback
Contents
4
Feedback
Contents
*.EQUIV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
*.MEGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
*.RESI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
*.SCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
.OPTION SCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Classifying Nonstandard Numeric SPICE Parameters . . . . . . . . . . . . . . . . 88
Line Continuation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Verilog Netlist Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Cell Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
Instance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
Assign Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Bus (Vector) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Defining Global Supply Nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Defining Local Supply Nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Supply Net Translation Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
The -verilog-busLSB Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Verilog Compiler Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
5
Feedback
Contents
6
Feedback
Contents
7
Feedback
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
Courier bold Indicates user input—text you type verbatim—in examples, such
as
prompt> write_file top
Edit > Copy Indicates a path to a menu command, such as opening the Edit
menu and choosing Copy.
Customer Support
Customer support is available through SolvNetPlus.
Accessing SolvNetPlus
The SolvNetPlus site includes a knowledge base of technical articles and answers to
frequently asked questions about Synopsys tools. The SolvNetPlus site also gives you
access to a wide range of Synopsys online services including software downloads,
documentation, and technical support.
To access the SolvNetPlus site, go to the following address:
https://solvnetplus.synopsys.com
If prompted, enter your user name and password. If you do not have a Synopsys user
name and password, follow the instructions to sign up for an account.
If you need help using the SolvNetPlus site, click REGISTRATION HELP in the top-right
menu bar.
1
LVS Overview
The IC Validator Layout Versus Schematic (LVS) process compares the extracted netlist
from the layout to the original schematic netlist to determine if they match.
The comparison check is considered clean if all of the devices and nets of the schematic
match the devices and the nets of the layout. Optionally, the device properties can also be
compared to determine if they match within a tolerance. When properties are compared,
all of the properties must match to achieve a clean comparison.
Two main processes make up the LVS flow. The first process in the flow is extraction, in
which the IC Validator tool analyzes the layers within the layout database and extracts
all of the devices and nets. The second process in the flow is LVS compare, in which
the actual comparison of devices and nets occurs. The LVS runset contains a series of
function calls that control both extraction and netlist comparison. This chapter has the
following sections:
• LVS Compare
• Global Netlist Modifications
• Equivalence Point Generation
• Equivalence Point Comparison
• Compare Results
LVS Compare
The IC Validator layout versus schematic process checks to see if the netlist extracted
from the layout matches the original schematic netlist. The comparison is considered
clean if all of the devices and nets of the schematic match all the devices and nets in the
layout. Optionally, the device properties can also be checked to determine if they match
within a user-defined tolerance. In this case, all of the properties must match to get a clean
comparison.
The compare flow begins with reading in both the schematic and layout netlists, as shown
in Figure 1. To obtain compare results,
• First, the IC Validator tool makes global netlist modifications, which facilitates the
comparison of netlists. For example, if two or more ports are connected to the same
net across all instances, the ports are merged.
• Next, the IC Validator tool considers a list of cell pairs (one from the schematic and
one from the layout) to be compared. You can specify this list of cell pairs, or it can be
determined automatically by the tool. The pair of cells used for comparison is called an
equivalence cell pair. After determining the equivalence pairs, the tool begins the actual
comparison process.
• Finally, the tool performs optional device filtering and merging operations. At this stage,
the tool compares the logic of the schematic and layout cell.
The ports are merged as a result of applying this argument. See Figure 4.
When ports are merged, the resulting port has a name such as SchMergedNet#N or
LayMergedNet#N. The following scenarios do not have merged ports:
• Power and ground nets are not pushed down when they are shorted.
• For a schematic or layout equivalence cell pair, hierarchically connected pins are not
pushed down for the pair.
• A pair participates in a multiple equivalence point (that is, multiple schematic cells
paired with one layout cell or vice versa) does not have merged ports.
Note:
System-generated equivalence cell pairs are used only to inject more hierarchy
into the comparison and improve performance. If compare errors are detected
in a system-generated equivalence pair, that cell pair is exploded into the parent
cell. The IC Validator tool selects system-generated cells with names matched
in a case-sensitive manner, however, the names can be case-insensitive when
the uppercase argument of the run_options() function is true.
In this figure, the compare engine compares the equivalence cell pairs in the following
order:
1. Compare invb::invb
2. Compare nor2b::nor2b
3. Compare macro_a::macro_a
4. Compare top::top
failure are reported at the user-equivalence cell level. When the comparison continues
further up the hierarchy, an abstracted instance of the cell is used in the parent cell.
In Figure 7, the left side of the diagram illustrates the comparison of an inverter at the child
level. There are differences in the nets and ports between the schematic and the layout.
Only ports VSS and VDD are compared. Errors are reported at the child level.
When the comparison continues at the parent level, the IC Validator tool creates an
abstracted instance of the cell (invb on the right side of diagram) and
1. Uses matched ports information from child cell comparison (VDD, VSS)
2. Assumes match among previously-unmatched, like-named ports (A, Z)
3. Discards extra ports (A1)
In this figure, there are compare errors inside the child cell, however, it is possible to
compare the connections to the ports of invb in the parent cell.
The system-generated equivalence cell pairs are used only to inject additional hierarchy
into the comparison. If compare errors are detected in a system-generated equivalence
pair, that cell pair is exploded into the parent cell.
Filtering Devices
The IC Validator tool uses the filter() function to remove devices that do not need to
be compared. Filtering is based on the predefined filter options. You can customize the
conditions for filtering by defining your own filter functions.
In the following example, all NMOS devices that have their gate, source, and drain pins
shorted are filtered using a predefined filter option called NMOS_1.
filter(compare_state,
device_type = NMOS,
filter_options = {NMOS_1});
Merging Devices
Device merging facilitates comparisons by reducing the configuration of devices to their
simplest form. Device merging is an iterative cycle alternating between passes of parallel
merging and series merging. The merging process does not merge power and ground
nets, port nets, or static nets. Merging continues until no further parallel or series merging
occurs.
The different types of merging are presented in the following sections.
Parallel Merging
Devices are parallel if every corresponding pin pair between the devices is connected to
the same net. Two or more parallel devices are combined into a single merged device with
the same device type and net connections, as shown in Figure 8.
In some designs, it might be necessary to limit the merging based on the device
properties. In the following example, the PMOS p1 devices are parallel merged if the
widths of the devices are within 20 percent and the length of the devices are within 30
percent.
merge_parallel(
compare_settings,
device_type = PMOS,
device_names = {"p1"},
exclude_tolerances = {{"w",[-20,+20]}, {"l",[-30, +30]}},
);
Series Merging
NMOS and PMOS devices are in series when their drain and source pins are connected
sequentially. All devices in the chain must be of the same device type. The nets
that connect the drain or source pins of neighboring devices cannot have any other
connections or be a port of the cell. A single merged device is created with multiple gate
pin connections corresponding to the number of devices in the chain, and the gate pins on
the merged device are automatically designated as swappable, as shown in Figure 9.
The following call to the merge_series() function merges all NMOS devices. Notice that
each chain of MOS devices that gets merged must have the same device name.
merge_series(
compare_settings,
device_type = NMOS
);
If MOS devices in series have connected gates, you can merge them by using the
merge_connected_gates argument, as shown in the following example:
merge_series(
compare_settings,
device_type = NMOS,
merge_connected_gates = true
);
Path merging is used for complex structures where groups of devices are stacked. When
two or more transistors are found in a path, they are combined into a single device with
logically equivalent gate-pin inputs. Recognition of these constructs allows devices in the
schematic to be equated to devices in the layout that are logically equivalent even though
their implementations might not match. To turn on path merging, set the multiple_paths
argument, as shows below:
merge_series(
compare_settings,
device_type = NMOS,
multiple_paths = true
);
short_equivalent_nodes(state = my_compare_state,
device_type = NMOS,
device_names = {"nm1"},
short_nodes = SAME_DEVICE_NAME_ONLY,
width_ratio_tolerance = { [-15,+15], RELATIVE }
);
In Figure 12, the width ratio of the NMOS devices connected to net A is 8/4 = 2 and the
width ratio of the gates connected to net B is 11/5 = 2.2. IC Validator uses the smallest
width ratio as the base ratio. Therefore, the relative difference calculation is (2.2 - 2) / 2
= 10 percent. This meets the tolerance of within 15 percent and the equivalent nodes are
merged.
There are four different mappings that occur when you compare the schematic and layout
circuits. Table 1 defines these mappings.
B = N_8
The selection of mappings by the netlist comparison tool among the four legal mapping
sets is random, that is, any of the four mappings could be reported by the netlist
comparison tool. Such randomness in net matching is acceptable in two situations:
• The symmetric nets occur directly within the top cell of the netlists being compared.
• The symmetric nets are internal, non-port nets within any level of hierarchy.
However, such randomness is not acceptable when comparing child cell ports. The reason
is that child cell port matching tables are used to validate the connectivity of parent cell
nets connecting to placements of the child cell. To illustrate this, look at the circuit block in
the table and place it in a parent cell. You see the following circuits, as shown in Figure 15.
Assume that the net names in the parent cell in the schematic and layout are intended to
be matched. Refer to Table 1 that showed four possible mappings for the child cell. There
is a potential randomness in the tool findings that the parent compares. For example, if
the tool chooses Mapping #1, the parent cell is a clean comparison. However, if the tool
chooses any of the other mappings, the compare fails. For successful LVS comparison,
there must be a mechanism for resolving the symmetry of child cell ports.
There are two methods used for resolving symmetry:
• Calculate port swappability rules
• Match by net name
Resolving Symmetry Using Port Swappability Rules
When symmetry occurs for child cell port nets, port swappability rules are derived based
on their symmetry. These rules describe various sets of logically equivalent connections to
the port nets when the cell of interest is placed inside a parent cell. Port swappability rules
take two forms:
• Independently swappable ports. A group of ports by which parent connections might be
swapped while maintaining logical equivalence, regardless of connectivity to all other
ports of the cell.
• Dependently swappable ports. A group of ports by which parent connections might
be swapped while maintaining logical equivalence, but only if connections are also
swapped to a secondary group of ports at the same time.
In Figure 16, nets C and D can be swapped without altering the functionality of the circuit,
resulting in net A and B being independently swappable ports. However, net A and net
B are dependently swappable because to swap A and B, you must also swap Net1 with
Net2.
Port swappability rules are used to compare parent cell connections to child cell symmetric
ports. To turn on the port swappability rules, set the detect_permutable_ports argument
as follows:
match : published function (
state = compare_settings,
detect_permutable_ports = true
);
Next, consider the same circuits, but with names that correspond between the schematic
and layout circuits, as shown in Figure 18.
The presence of corresponding net names is used by the netlist comparison algorithm
to reliably match a specific symmetric layout net to a specific schematic net, as shown in
Table 2
Table 2 Schematic and Layout
Matching
Schematic Layout
A = A
B = B
Schematic Layout
Net1 = Net1
Net2 = Net2
Net names are also used to differentiate symmetric child cell ports for the purpose of
checking parent cell connectivity to child cell ports.
To use text to resolve symmetry, turn on the swappability rules by setting the
match_by_net_name argument:
match : published function (
state = compare_settings,
match_by_net_name = true
);
Note:
The equate_by_net_name_fails argument of the match_conditions()
function reports net names found in both the schematic and layout, but cannot
be used as an initial match reference point because the number of connections
to the net is not the same between the two cells.
Compare Results
The list of output files generated by IC Validator during a compare run are shown in
Figure 19. In the current directory, the topcell.LVS_ERRORS summary file contains the
summary of the comparison, which includes the final comparison result (PASS or FAIL),
the number of failed and passed equivalences, debugging messages, and diagnostics.
In the run_details directory, the topcell_lvs.log file contains detailed messages from the
compare engine run.
In the run_details directory, there is a compare directory that contains one subdirectory
for each equivalence cell pair. Each of these equivalence cell subdirectories contains four
files: the summary of the comparison for the equivalence cell pair, a mapping table, the
schematic netlist specific to the equivalence cell pair, and the layout netlist specific to the
equivalence cell pair. Of these four files, the sum.sch_equiv_cell.layout_equiv_cell file is
particularly useful for debugging, as it contains the PASS and FAIL statuses, error and
warning information, and diagnostics.
Mismatches between the layout and schematic netlists occur in three main categories, as
shown in Table 3.
Table 3 Summary File Messages
All errors are reported in the topcell.LVS_ERRORS file and sum.sch_cell.lay_cell file.
Net Mismatches
For compare opens and shorts, the compare failure report lists:
• Number of open or shorted nets
• Nets that participate in the short or open
• Number of instance connections on each shorted or open net
• Matched instances connected to each shorted or open net
• Instance pin connections for all matched instances connected to each net
Figure 20 shows the diagnostic message issued for a short detected in the layout netlist.
In the schematic, VDD and Z connect to two instance pins. In the layout, VDD connects to
four instance pins and therefore reveals that there is a short.
The second part of the diagnostic shows that there is a matched device on the shorted
VDD net called M2. See the list of connections for each pin, which indicates the shorted
nets by using an exclamation point (!). Here you see that the schematic M2 SRC pin
connects to Z whereas the layout M2 SRC pin connects to VDD. Therefore the short
must be near the SRC pin of the device. The Class column is an integer value that
indicates instance pin swappability. If two pins have the same class value, they are
legally swappable. Since pins DRN and SRC have a class value of 1, these two pins are
swappable.
Not all net mismatches are pure opens or shorts. Nets might connect to incorrect pins of
a cell or device. Disconnected nets could have unequal or equal connection counts. Such
errors are generically reported as unmatched net groups. Consider the schematic and
layout circuits shown in Figure 21.
For this case, the IC Validator tool issues a diagnostic summary, as shown in Figure 22.
In the first part of the summary, the connection counts are equivalent for each unmatched
net: SUM has one connection and X has two connections.
The next two summaries compare the connection information for matched devices.
Instance 1 is an and2b cell found in the schematic and in the layout. They are each
connected to net X which is unmatched. Instance 2 is an invb cell that contains two
unmatched nets. The names of nets reveal that there is a connection error. Net X on the
layout must be connected to the input of the inverter and net SUM must be connected to
the output of the inverter.
Instance Mismatches
Instance mismatches might impact either device or cell instances. There are two types of
mismatches: missing instances or extra instances. In other words, a layout equivalence
cell either has fewer or more instances of a particular device as compared with the
schematic.
Missing or extra instances are flagged only after filtering and device merging has occurred.
Device filtering and merging are configured by the LVS runset using the filter(),
merge_parallel(), and merge_series() functions.
In this figure, the “p” device and the two “n” devices have no match in the schematic.
Notice that the coordinates of the extra devices are provided.
Extra layout devices are created in the following situations:
• Extra devices are erroneously drawn in the layout.
• Devices are not filtered as expected (connectivity problem).
• Devices failed to merge with neighboring series or parallel devices (connectivity error
or property error).
To debug instance mismatches, use the netlist statistics tables in the sum.sch_cell.lay_cell
file. Figure 25 shows the statistics report. Notice that there are statistics tables specific to
the schematic and layout netlists.
Property Errors
Property errors result from mismatched property values for matched devices. By default,
property checking occurs only when the cells being compared are topologically equivalent,
that is, when there are no mismatched nets and no mismatched devices. However, the
check_property_for_failed_equiv argument of the compare() function enables
properties to be checked for matched devices, even if there are other topological errors.
In Figure 26, two devices contain property mismatches. In the first instance, the “n” device
has a length mismatch. In the second instance, the “p” device has length and width
mismatches.
Next steps:
• Identify if the layout is missing the device by investigating the connections of the
missing schematic device. If the device is not missing, review the filtered device lists to
ensure they are expected, and look for hierarchical extraction issues.
• Files to review:
◦ Filtered devices report in the sum.sch_lay_cell file
◦ ./run_details/cell.dls file shows a device leveling summary
Examples
In the following example, M5 is the schematic instance name, PMOS is the device type,
and p is the device name.
DIAGNOSTIC: 1 missing layout instance
Next steps:
• Identify if the layout is missing device and net content by investigating the devices
connected to the extra schematic net. If a device is not missing, review the filtered
device lists for hierarchical extraction issues.
Review other diagnostics to see if there is any indication of shorted layout nets or
device leveling, as well as the LAYOUT_ERRORS file for text short issues, and resolve
these first.
• Files to review:
◦ Filtered devices report in the sum.sch_lay_cell file
◦ ./run_details/cell.dls file shows a device leveling summary
Examples
In the following example, n11 is the schematic net name and 4 is the number of
connections this net contains.
DIAGNOSTIC: 1 missing layout net
Examples
The following report shows open nets for GND.
DIAGNOSTIC: 2 open layout nets
Group 1 of 2:
Instance 1 of 1:
Instance name M2 M2
Instance type NMOS[n] NMOS[n]
Instance 1 of 2:
Instance name M1 M1
Instance type NMOS[n] NMOS[n]
the same between the layout and schematic, and could be resolved by swapping the child
pins connections.
A swappable pin is an equivalence point pin whose connections inside the equivalence
point are indistinguishable with another. They have the same class in the LVS report file.
The LVS report marks the suspected pin swaps with a !, and suggests a new connection
with +.
Potential causes:
• The child cell instance pins might be labeled incorrectly.
• The design may not have adequate text to differentiate symmetrical nets.
• The parent level net connections might be incorrect.
• If the design is not complete, or if there are many other LVS discrepancies,
it is possible that there is not enough information to determine the instance
correspondence, and the matched instances are not expected to compare.
Next steps:
• Review the net connections to the child pins to ensure that they connect to the correct
pin.
• Text can be used to break symmetry and resolve swappability issues. Review the text
in the diagnostic report to ensure it is correct.
• Check the instance names in the diagnostic report or the instance locations, to ensure
they are the same.
Examples
The following report shows a single group of two instances that are identified as having a
pin swap. In instance 1, schematic instance x1 of equivalence point cs_add, has a child
pin named “C”, which is connected to net “n6”, and a child pin named “COUT”, which is
connected to net n8. In the layout, net CIN is connected to both child pins “C” and “COUT”.
The net connections to this instance, marked with !, are not equivalent between the layout
and schematic. In instance 2, schematic instance x2 of the same equivalence point has
a connection to unmatched net n8 to child pin “C”, while the layout shows that net “7” is
connected to child pin “C”.
The diagnostic recommendation in this example is marked with “+”. The guidance is to the
swap the layout net “CIN” with layout net “7”, which resolves the mismatch in both cases.
DIAGNOSTIC: 1 swapped-pin instance group
Group 1 of 1:
Instance 1 of 2:
Instance 2 of 2
4 ! n8 (C) ! 7 (C)
suggested + CIN (C)
Next steps:
• If there are many other mismatched nets and devices, review and resolve those first to
increase symmetrical correspondence.
• Review net connections to these equivalence points to ensure the nets are connected
correctly, and that layout and schematic equivalence points are intended.
• Review equivalence points and determine if they are expected to correspond.
Examples
DIAGNOSTIC: 1 potential duplicate equivalence points set
device to be leveled. For more detailed reporting, including the instance ___location of the
device being leveled out, consider setting the runset option:
lvs_options( ..
device_leveled_summary_file = DETAILED
);
It is possible that the equivalence point that contains the leveled device cannot be
resolved through design modification or runset modification. For example, some designs
intentionally overlap cells and devices. In this case, the equivalence point should be
excluded from compare. This can be done by ignoring equivalence points from compare.
The following can be set in an equivalence file, include file, or configuration file:
equiv_options({{schematic_cell="cellA", layout_cell="cellA",
ignore=true});
Examples
DIAGNOSTIC: Potential missing devices due to leveling out
Some layout devices leveled out of the cell during device extraction.
2
Netlist Formats
This chapter describes NetTran (a netlist translation utility) and the SPICE and Verilog
netlist formats.
NetTran
NetTran is a netlist translation utility. You can run it from the UNIX command line, or it can
be called within an IC Validator runset.
The IC Validator schematic() and read_layout_netlist() functions read input
netlists and translate them to IC Validator netlist format if the netlists are not already
in that format. NetTran does the translation. The results of the schematic() and
read_layout_netlist() functions are used by the compare() function.
Netlist Translation
Schematic netlists are compared to the extracted layout netlist during LVS. The schematic
netlist must be translated to the IC Validator format before the IC Validator tool can use
it for LVS comparison, as shown in Figure 28. The IC Validator netlist format contains a
hierarchical description of schematic devices and their interconnections.
[-sp-chopDevPrefix] [-sp-chopXPrefix]
[-sp-devMap map_file] [-sp-dollarPins] [-sp-dummyNets]
[-sp-dupPort WARNING | ABORT] [-sp-dupProp FIRST | LAST | ABORT]
[-sp-fshort model_name...]
[-sp-ignoreCdlResi] [-sp-implicitBulk] [-sp-multiplier name ...]
[-sp-resolveDupInstances] [-sp-scale scalefactor]
[-sp-subcellSuffix] [-sp-subcellSuffixName string]
[-sp-subcellSuffixExclude cellname] [-sp-threePinRes]
[-sp-voltThresh number] [-verilog-b0 netName] [-verilog-b1 netName]
[-verilog-busLSB] [-verilog-addDummyDev name_or_rval]
[-verilog-dummyDevPortFile filename]
[-verilog-lib file...] [-verilog-localizeGlobalSupply]
[-verilog-localizeModuleSupply]
[-verilog-preferModuleSupply]
[-verilog-R] [-verilog-voltmap filename]
[-acctFile file] [-cell cell] [-cellPorts portName] [-clf file]
[-comp] [-dupCell USE_MULTIPLE | USE_ONE | ABORT]
[-dupCellReportFile file] [-noFloatingPins]
[-equiv file] [-finst instance_name ...]
[-fopen model_name...] [-forceGlobalsOn] [-keys key(s)]
[-logFile file] [-mprop] [-noflatten] [-undefFile file]
[-wireLog file] [-outType netlist_type]
[-retainComments netlist_type]
-outName file
Table 5 describes the general purpose NetTran command-line options. Table 6 and Table 7
describe the command-line options specific to SPICE and Verilog.
Table 5 General Purpose NetTran Command-Line Options
Option Description
-acctFile file Writes an accounting file. Does not reflect the presence of a
multiplier in the output file.
-cell cell Sets the top cell for output netlist. Only cells contained in
the hierarchy of the top cell are output. If -uppercase is also
specified, cell can be specified using either the original cell
name or the cell name in uppercase characters.
-cellPorts portName ... Adds ports to top-cell port list. You must use the -cell option to
specify the top cell.
Option Description
-clf file Adds command-line options to the NetTran run using a text file.
It performs a left-to-right replacement with the options from the
specified file. This command-line option takes only one file, but
you can use multiple -clf options on a command line.
The content of the text file is not preprocessed by the UNIX
shell, such as for wildcard expansion.
NetTran expands text in the file that has a $ sign at the start
of a variable as an environment variable. For example, the
MY_PATH environment variable set on the command line as
% setenv MY_PATH /u/path
could be used in the text file to set the path for the input netlist in
SPICE format:
-sp $MY_PATH/M0.sp
-dupCell USE_MULTIPLE | Specifies how to handle multiple cell definitions that have the
USE_ONE | ABORT same name. The default is USE_MULTIPLE.
See the duplicate_cell argument of the
read_layout_netlist() and schematic() functions for more
information.
-dupCellReportFile file Specifies the duplicate cell report file name. The default name is
dupCell.log.
-finst instance_name Filters out devices or instances with a specific instance name;
the wildcard * is supported. If -uppercase is also specified,
instance_name can be specified using either the original
instance name or the instance name in uppercase characters.
-fopen model_name ... Filters out devices or instances with the specified model names.
The nets that were once connected to the device terminal are
left unconnected, that is, left open. This option applies to all
devices. If -uppercase is also specified, model_name can be
specified using either the original model name or the model
name in uppercase characters.
-fopen takes a list of model names. For example,
icv_nettran -fopen nch pch nch_dw pch_dw
In the following example, NetTran filters out all devices with the
model name EFG.
icv_nettran -sp myfile -fopen EFG
Option Description
-forceGlobalsOn If a cell port has a global name, forces the port to be part of the
global net with the same name. The global net name propagates
up the hierarchy; that is, NetTran replaces the local name of an
instance pin connecting to such a port with the global net name
itself.
For example,
*.global VSS
.SUBCKT top
X1 a one
-globalNets netName ... Inserts a global net tag into the output netlist for the specified
netName nets. Global net names are also propagated onto ports
of instances exploded out of a cell by NetTran. If -uppercase
is also specified, netName can be specified using either the
original net name or the net name in uppercase characters. See
.GLOBAL for more information about the .GLOBAL statement.
-keys key(s) Defines the keys that control environment variable access.
-logFile file Specifies the summary log file name. The default name is
icv_nettran.log.
Option Description
-outType netlist_type Specifies the output netlist type: ICV, SPICE, SPICE_FLAT,
VERILOG. The default is ICV.
Note:
The SPICE_FLAT netlist type outputs a flattened SPICE netlist
under the specified top cell.
Limitation: The SPICE and SPICE_FLAT netlist types can only be
translated from VERILOG+SPICE. Other input combinations, such
as ICV+SPICE, might not give correct results.
-retainComments Retains comments from the input netlist in the output netlist.
netlist_type The netlist type can be SPICE or ICV. See Comments in Output
Netlist for more information about how comments appear in the
output file.
You can also use the retain_comments argument of the
read_layout_netlist() and schematic() functions to retain
comments.
This feature is available when the -outType command-line
option is SPICE or ICV. The default is ICV.
-splitNetlistFile file_name Splits the output into multiple netlist files by the specified cells.
Each netlist that is split contains one specified cell and its
subcells. The file includes multiple cell names, with each cell
name on its own line. For example,
CELL_A
CELL_B
CELL_C
-undefFile file Specifies the file name to which undefined cells are written.
Option Description
Table 6 describes the NetTran command-line options for the translation of SPICE netlists.
Table 6 SPICE Translation Command-Line Options
Option Description
-sp-devMap map_file Maps device model names to new names using a predefined
mapping file format.
-sp-dupPort WARNING | ABORT Controls the duplicate ports in the SPICE cell port list
(implicitly defined). For a $PINS statement, duplicate pins are
not allowed. The default is WARNING.
See the duplicate_port option in the spice_settings
argument of the read_layout_netlist() and schematic()
functions for more information.
-sp-dupProp FIRST | LAST | Specifies whether NetTran handles the first or last of the
ABORT duplicate properties. The default is LAST.
Option Description
-sp-fshort model_name... Filters resistor, capacitor, and inductor passive devices with
the specified model name. Nets connecting the A and B pins
of each device instance are shorted in the translated netlist. If
-uppercase is also specified, model_name can be specified
using either the original model name or the model name in
uppercase characters.
When using this option, net-naming rules for resolved nets
are as follows, in order of highest to lowest priority:
1. Global nets are selected.
2. Port nets are selected.
3. Nets are selected, based on alphabetical order.
-sp-implicitBulk Outputs an implicit pin format for the bulk pin. This
command-line option applies only to BJT.
Option Description
-sp-multiplier name ... Lists user-defined multiplier factors. When using this option,
different instances and devices can have unique multiplier
factors. When this option is not used, the default is "M".
See the spice_multiplier_names argument of the
lvs_options() function for more information.
In the following example, the multiplier option is not used:
icv_nettran -sp in.sp -outName out
Therefore, for the following netlist input, M is a multiplier:
X1 G D S B nch M=2
For the following netlist input, MULT is a common parameter,
not a multiplier:
X2 G D S B nch MULT=2
For the following netlist input, MULT is renamed to M and
considered a multiplier:
M1 G D S B nch MULT=2
In the following example, the multiplier option is used:
icv_nettran -sp in.sp -sp-multiplier MA MB
-outName out
For the following netlist input, an error occurs because both
MA and MB multipliers are used:
X1 G D S B nch MA=2 MB=3
The following is another example of using the multiplier
option:
icv_nettran -sp in.sp -sp-multiplier MA MB
-outName out
For the following netlist input, MA is a multiplier but no
expansion is performed:
M1 G D S B nch MA=2
In the following example, the multiplier and expansion options
are used:
icv_nettran -sp in.sp -sp-multiplier MA MB
-outName out -mprop
For the following netlist input, MA is a multiplier and
expansion is performed:
M1 G D S B nch MA=2
-sp-scale scalefactor Overwrites the scaling factor (*.SCALE and .OPTION SCALE)
for all input netlists in the SPICE format.
Option Description
-sp-subcellSuffix Renames all subcells under the top cell. The top cell must be
specified.
Note:
This command-line option does not rename the empty
cell. For example,
.subckt top .subckt top
X1 A X1 A
X2 B X2 B_top
.end .end
-sp-subcellSuffixExclude Specifies exclusive list of subcells that are not renamed with
cellname ... -sp-subcellSuffix. The wildcard (\*) is supported.
-sp-voltThresh number Specifies the voltage source threshold value for shorts. The
default is 0.
• Shorts voltage sources with a value <= number.
• Strips voltage sources with a value > number.
Table 7 describes the NetTran command-line options for the translation of Verilog netlists.
Table 7 Verilog Translation Command-Line Options
Option Description
-verilog-busLSB Specifies that the Verilog bus starts with the least significant bit
(0).
Option Description
-verilog-dummyDevPortFile Sets the file which contains the ports to be added to the dummy
filename devices. If this file is not set, all of the top-cell ports are added.
If the file is set, only the ports mentioned in the file are added.
-verilog-lib file ... Specifies the input netlist in the Verilog format as a reference
library.
-verilog-voltmap filename Specifies the Verilog global net mapping file. If -uppercase is
also specified, names of cells, instances, and nets in the file
can be specified using either the original names or the names
in uppercase characters.
output, inout, or wire before being used. The IC Validator tool does not make use of this
definition.
NetTran reports a warning message when it detects a floating pin, unless you use the
-noFloatingPins command-line option. For the port that does not have a corresponding
pin connection, a dummy net, with the name icv_floatnet_xx, is added. For example,
module nor3b(GND, VDD, A, B, QN)
...
endmodule
The syntax for a Verilog netlist is of the form .BULK(VDD), whereas the syntax for an
IC Validator netlist is of the form VDD=BULK.
Property Values
Although standard netlist formats allow property values in several measurement units,
NetTran accepts only specific units, as shown in Table 8.
Note:
The following characters are case-insensitive.
Table 8 Property Value
f femto 1e-15
p pico 1e-12
n nano 1e-9
u micro 1e-6
m milli 1e-3
k kilo 1e+3
g giga 1e+9
t tera 1e+12
Note:
The behavior of M (case-sensitive) can be changed by using *.MEGA. See the
*.MEGA control statement for more information.
In the following example, NetTran converts a SPICE netlist to an IC Validator netlist and
resolves all wires or shorts. The wireLog file contains all the nets that are dissolved in the
process.
% icv_nettran -sp filename.sp -outName filename.nt -wireLog filename.log
For example,
# wire.txt - Dissolved nets log file
# format: cellName origNetName newNetName
add4 VDD2 VDD
cs_add VDD5 VDD
cs_add n36 VDD
nor2b VDD6 VDD5
name translations of Virtuoso schematic database names to legal CDL names. You can
map net, instance, and SUBCKT names using this method. The resulting netlist from
NetTran contains the Virtuoso schematic database names, as shown in the first item in
any list of two items in Example 1.
In this example, the -sp-devMap option loads a Cadence® name mapping file.
icv_nettran -sp filename.cdl -sp-devMap mapfile -outName filename.nt
Net, instance, and model names in the right column of the associated map file structures
are replaced in the NetTran output netlist using names from the left column.
Cell-Specified Comments
The cell-specified comments are related to a SUBCKT definition. The comments are
written to the immediately previous line or the same line of the SUBCKT definition. Blank
lines are ignored.
For example, the input SPICE netlist has these comments:
* this is my cell
.SUBCKT my_cell port1 port2 port3
NetTran attaches the comment "this is my cell" to the my_cell cell for the three cases. The
output netlist has this comment:
/* this is my cell */
{cell my_cell
{port port1 port2 port3 }
... Cell instances ...
}
NetTran merges cell-specified comments that are more than one line and removes the
blank lines. For example, the input SPICE netlist has these comments:
* this is my cell
*
* edited by Joe
.SUBCKT my_cell port1 port2 port3 * there are 3 ports
When comments are at the end of subckt definitions after the last instance definition in the
subckt scope or on the same line as the .ends statement, NetTran prints the comments
after the cell definition. For example, the input SPICE netlist has these comments:
.SUBCKT MY_CELL a b
M1 a b c d nch w=5 l=2
.ENDS * the end of my cell
.SUBCKT MY_CELL a b
M1 a b c d nch w=5 l=2
* the end of my cell
.ENDS
Instance-Specified Comments
The instance-specified comments are related to an instance or a device. The comments
are written to the immediately previous line or the same line of the instance or device
definition. Blank lines are ignored. For example, the input SPICE netlist has these
comments:
* this is my input resistor
R1 1 2 10MEG
If there is more than one comment attached to an instance, NetTran merges the
comments and removes blank lines. NetTran does not translate the SPICE power source,
such as the E-card and V-card devices, so it puts the comments immediately below the
instance. For example, the input SPICE netlist has this comment:
* DC GAIN (100K) AND POLE 1 (100HZ)
EP1 3 0 1 2 100K
RP1 3 4 1K
Because the EP1 instance is ignored by NetTran, NetTran attaches the comment to the
next available element, that is, RP1. The output netlist has the comment:
/* DC GAIN (100K) AND POLE 1 (100HZ) */
{inst RP1=R {TYPE RES}
{pin 3=A 4=B}}
{prop R=1000}
}
Global Comments
If a comment cannot be attached to any instance, it is treated as a global comment at the
end of the output netlist. For example, the input SPICE netlist has these comments:
* ANALYSIS
.TRAN 0.01MS 0.2MS
* VIEW RESULTS
.PLOT TRAN V(1) V(5)
<end of file>
Because NetTran does not translate the .TRAN and .PLOT statements, the two comments
ANALYSIS and VIEW RESULTS are put in the last part of the output netlist. To distinguish
the global comments from multiple input files, NetTran prints the file name before the
comment. The output netlist has the comment:
<cell/instance of ICV netlist>
/* test.sp */
/*
ANALYSIS
VIEW RESULTS
*/
Devices
The SPICE element definitions are:
Bipolar Transistor
The syntax is:
Qxxx coll base emit [bulk] mname
+ [[AREA=]area] [L=l] [W=w] [M=m]
+ [$SUB=bulk] [$EA=area] [$L=l] [$W=w] [$X=x] [$Y=y]
For example,
Q1 a b c gnd npn9 AREA=9p
Q2 a b c npn9 9p
Q3 a b c npn10x10 AREA=9p W=10u L=10u M=9 $SUB=GND
Argument Description
[AREA=]area Optional. Represents the bipolar emitter area value. It must be a numeric
value or a parameter.
$SUB=bulk Optional. Represents the bulk node for the element. It overrides the regular
optional bulk node name, if present.
Argument Description
$EA=area Optional. Represents the bipolar emitter area value. It overrides the regular
[AREA=]area, if present.
Capacitor
Syntax 1:
Cxxx a b [[capacitance] mname]
+ [L=l] [W=w] [A=a] [P=p] [M=m]
+ [$[mname] | $.MODEL=mname]
+ [$SUB=bulk] [$A=a] [$P=p] [$X=x] [$Y=y]
Syntax 2:
Cxxx a b [[mname] C=capacitance]
+ [L=l] [W=w] [A=a] [P=p] [M=m]
+ [$[mname] | $.MODEL=mname]
+ [$SUB=bulk] [$A=a] [$P=p] [$X=x] [$Y=y]
Note:
In Syntax 1, mname and capacitance can be swapped. The mname argument is
chosen from one of them, as it is nonnumeric.
For example,
C1 a b ncap C=10
C2 a b 20 $.MODEL=ncap
C3 a b C=30 W=5 L=10 $[ncap] $SUB=GND
Argument Description
Argument Description
mname Optional. Represents the element model name. It must follow after the
capacitor negative node name.
$[mname] or Optional. Represents the element model name. It overrides the regular
$.MODEL=mname optional mname parameter.
$SUB=bulk Optional. Represent the first optional node for the element.
$A=a Optional. Represents the area. It overrides the regular [A=a], if present.
Diode
Syntax 1:
Dxxx a b mname [AREA=area] [PJ=pj]
+ [M=m]
+ [$SUB=bulk]
+ [$X=x] [$Y=y]
Syntax 2:
Dxxx a b mname [area [pj]]
+ [M=m]
+ [$SUB=bulk]
+ [$X=x] [$Y=y]
For example,
D1 a b nd 10
D2 a b pdioAREA=20
D3 a b ndioAREA=1 PJ=4 $SUB=GND
Argument Description
[AREA=]area Optional. Represents the diode area value. It must be a numeric value or a
parameter.
$SUB=bulk Optional. Represent the first optional node for the element.
Inductor
The syntax is
Lxxx a b [mname] [[L=]inductance]
+ [M=m]
+ [$[mname] | $.MODEL=mname] [$SUB=bulk]
+ [$X=x] [$Y=y]
For example,
L1 a b iname 50
L2 a b 100 $.MODEL=iname
L3 a b L=200 $[iname] $SUB=GND
Argument Description
mname Optional. Represents the element model name. It must follow after the
inductor negative node name.
$[mname] or Optional. Represents the element model name. It overrides the regular
$.MODEL=mname optional mname parameter.
$SUB=bulk Optional. Represents the first optional node for the element.
JFET
The syntax is
Jxxx drn gate src[bulk] mname [AREA=area]
+ [L=l] [W=w] [M=m]
+ [$SUB=bulk]
+ [$X=x] [$Y=y]
For example,
J1 d g s b JN L=2u W=4u
J2 d g s b JN L=2u W=4u M=3 $SUB=gnd
J3 d g s b JN AREA=20 W=5 L=10 $SUB=GND
Argument Description
Jxxx JFET (Junction gate Field Effect Transistor) element name. It must
begin with a J.
AREA=area Optional. Represents the JFET area value. It must be a numeric value
or a parameter.
$SUB=bulk Optional. Represents the first optional node for the element.
MOSFET
The syntax is
Mxxx drn gate src [bulk [bulk2 [bulk3 [bulk4]]]] mname
+ [L=l] [W=w] [AD=ad] [AS=as] [PD=pd] [PS=ps] [NRD=nrd] [NRS=nrs]
+ [RDC=rdc] [RSC=rsc] [M=m]
+ [$X=x] [$Y=y]
For example,
M1 d1 g1 s1 b1 mn W=0.8u L=0.35u
M2 d2 g2 s2 b1 b2 b3 b4 mn W=0.8u L=0.35u M=4
M3 d3 g3 s3 gnd mn L=2u W=2u AD=0.5u AS=0.7u PS=0.2u PD=0.3u NRS=0.15
Argument Description
bulk[n] Optional. MOSFET bulk node name. Up to four optional bulk nodes are
supported.
Resistor
Syntax 1:
Rxxx a b [[resistance] mname]
+ [L=l] [W=w] [M=m]
+ [$[mname] | $.MODEL=mname]
+ [$SUB=bulk] [$L=l] [$W=w] [$X=x]
+ [$Y=y]
Syntax 2:
Rxxx a b [[mname] R=resistance]
+ [L=l] [W=w] [M=m]
+ [$[mname] | $.MODEL=mname]
+ [$SUB=bulk] [$L=l] [$W=w] [$X=x]
+ [$Y=y]
Note:
In Syntax 1, mname and resistance can be swapped. The mname argument is
chosen from one of them, as it is nonnumeric.
For example,
R1 a b ndres R=10
R2 a b 20 $.MODEL=pdres
R3 a bR=30 W=5 L=10 $[ndres] $SUB=GND
Argument Description
mname Optional. Represents the element model name. It must follow after the
resistor negative node name.
Argument Description
$[mname] or Optional. Represents the element model name. It overrides the regular
$.MODEL=mname optional mname parameter.
Cell Definition
The SPICE format uses .SUBCKT syntax to define cells in a netlist, and it ends with an
.ENDS statement. The syntax is
For example,
Example 1:
.SUBCKT INVB1 GND VDD I O
M1 O I GND GND n L=0.7u W=13.5u
M2 O I VDD VDD p L=0.8u W=20.5u
.ENDS
Result of Example 1:
M1 L=0.7u W=13.5u
M2 L=0.8u W=20.5u
Example 2:
.SUBCKT INVB2 GND VDD I O L=0.5u
M1 O I GND GND n L=L W=13.5u
M2 O I VDD VDD p L=0.8u W=20.5u
.ENDS
Result of Example 2:
M1 L=0.5u W=13.5u, where L=L is substituted for SUBCKT param list L=0.5u
M2 L=0.8u W=20.5u, where L=0.8u is not substituted for SUBCKT param list
L=0.5u
Example 3:
.PARAM WIDTH=0.8u
.SUBCKT INVB3 GND VDD I O L=0.5u
M1 O I GND GND n L=L W=WIDTH
M2 O I VDD VDD p L=0.8u W=20.5u
.ENDS
Result of Example 3:
M1 L=0.5u, W=0.8u, where L=L is substituted for SUBCKT param list L=0.5u
and W is substituted for WIDTH value 0.8U that is assigned in .PARAM
M2 L=0.5U, W=20.5U, where L=0.8u is substituted by SUBCKT param list
L=0.5U
Argument Description
.SUBCKT cell_name cell_name is the reference name for the cell instance.
n1 ... Optional. Node names for external reference. Any element nodes that
are in the cell, but are not in this list are strictly local, except nodes
assigned using the .GLOBAL or *.GLOBAL commands.
param=val Optional. Parameter name set to a value that is applied only in the cell.
To override this value, assign the value in the cell instance.
.ENDS cell_name Use the .ENDS statement command to end all cell definitions that begin
with a .SUBCKT. Use the .ENDS cell_name statement to terminate a
cell named cell_name.
Note:
The nested_cell_name statement after the .ENDS command is required when
the cell is nested.
For example,
.SUBCKT IP1 IN OUT
.SUBCKT CELL1 I O
M1 O I GND GND N L=0.7U W=13.5U
.ENDS CELL1
.SUBCKT CELL2 P N
C1 P N C=2
X1 P N CELL1
.ENDS CELL2
X2 IN OUT CELL1
.ENDS IP1
Inside the IP1 cell statement, the X1 cell instance inside CELL2 is a legal statement,
because the CELL1 and CELL2 nested cells are in the same hierarchical scope of cell
IP1.There are two nested cells and two other cells named CELL1. Because cells IP1
and IP1 are not in the same hierarchy, they have different local scopes. Therefore the
definitions of CELL1 in this example are legal definitions and do not result in duplicate
cells.
For example,
.SUBCKT CELLA A B C L=4.166u M=4
Q1 A B C PNP L=L M=M
.ENDS
X1 P1 P2 P3 CELLA M=3
X2 N1 N2 N3 CELLA L=5u
The M=M inside cell CELLA is directly substituted by statement SUBCKT param M=4.The L=L
of cell instance X1 is directly substituted by cell param L=4.166u of CELLA; the M=3 of cell
instance X1 statement indicates there are three X1 instances connected in parallel, and
they can be represented as X1_1, X1_2 and X1_3. The M value of the original cell instance
X1 is reset to M=1 for X_1, X1_2 and X1_3; the M value cannot be passed through the cell
CELLA. The L=5u of cell instance X2 directly substitutes the original cell param L=4.166u.
Argument Description
n1 ... Node names for external reference by pin order. Any element nodes
that are in the cell, but are not in this list, are strictly local.
Unreferenced node names are considered to be floating pins. By
default, the IC Validator tool allows floating pins with a warning
message. For the port that does not have a corresponding pin
connection, a placeholder net, with the name icv_floatnet_xx, is
added.
Argument Description
$PINS port1=net1 ... $PINS followed by ports assignment is another way to specify a cell
ports connection by nets.
• Port connection swap: A cell instance's ports connections swap is
allowed. For example:
.SUBCKT CELL A B C
...
.ENDS
X1 CELL $PINS A=n1 B=n3 C=n2
X2 CELL $PINS C=n2 A=n1 B=n3
where X1 and X2 are functionally equivalent; they both have the
same port connection assignments, but with different placement
orders.
• Floating pin: A cell instance refers fewer pins than the specified cell
definition allows; those pins are not referenced in the cell instance
and are considered to be floating pins. For example:
.SUBCKT CELL A B C
...
.ENDS
X1 CELL $PINS A=n1 C=n2
where the cell definition port B is floating because it is not in the cell
instance X1 pin assignment list.
Unreferenced node names are considered to be floating pins. The
IC Validator default allows floating pins with a warning message.
For the port that does not have a corresponding pin connection, a
dummy net, with the name icv_floatnet_xx, is added.
• Duplicate ports are not supported within a $PINS statement. For
example:
.SUBCKT CELL PORT1 PORT2 PORT1
...
.ENDS
X1 CELL $PINS PORT1=A PORT2=B PORT1=A
where PORT1 has duplicate port assignments and IC Validator
reports it as an error.
param=val Optional. Parameter name set to a value that overrides the value in the
cell definition.
String Parameters
The string parameter, like a number parameter, is a basic element to a property value.
The string parameter is atomic. Therefore, it cannot be divided or replaced through
interpretation. The standard string parameter is indicated by double quotation marks.
The syntax is:
"string"
For example, "ABC", "-5", and "A56" are valid string parameter values.
If the double quotation marks are not paired properly, a parse error occurs. For example:
ABC", "-5
The double-quoted strings, "mode0", cell initial parameter, "1.2v", device property, "-1",
and cell instance property, "1" are all defined as string parameters.
Here is an example of double-quoted strings in an IC Validator netlist.
{param_global str1="mode0"
{cell CELL_X
{param_init str2="1.2v"}
{inst M1=NMOS {TYPE MOS}
{prop str3="-1"}
...}
{inst X1=MODEL_X {TYPE CELL}
{param str4="1"}
...
}
The double-quoted strings, "mode0", cell initial parameter, "1.2v", device property, "-1",
and cell instance property, "1" are all defined as string parameters.
There is a duplicate port name, Z, in cell INVB, and the nets N1 and N3 of the X1 instance
cell are shorted together hierarchically. The following statement shows the equivalence
netlist:
.SUBCKT INVB GND VDD Z I Z
M1 Z I GND GND n L=0.7u W=13.5u
M2 Z I VDD VDD p L=0.8u W=20.5u
.ENDS
The following statement shows the equivalence netlist where only one cell is preserved:
.SUBCKT INVB GND VDD Z I
M1 Z I GND GND n L=0.7u W=13.5u
M2 Z I VDD VDD p L=0.8u W=20.5u
.ENDS
Cells that have the same cell name but different port counts or port names are not
regarded as duplicate cells. However, NetTran does not allow this situation. Therefore,
only one cell name is preserved; the other duplicate cells and cell names of their cell
instances are automatically renamed and a WARNING message is issued.
This example shows two instance cells, X1, which refer to the same cell, child, in cell
definition, top. The IC Validator tool issues the following error message:
GNFerror: Duplicate instance "X1" in cell "top".
When resolving duplicate instances, the IC Validator tool renames these instances by
adding a suffix, as indicated by the following message:
Renaming duplicate instance from "X1" to "X1_DUP#1" in cell "top"
Control Statements
The IC Validator tool supports the following control statements in the SPICE netlist.
.GLOBAL
The .GLOBAL statement globally assigns a node name. All references to a global node
name used in the circuit at any level of the hierarchy are connected to the same node.
The .GLOBAL statement is most often used when subcircuits are included in a netlist file.
This statement assigns a common node name to internal, nonport subcircuit nodes. Power
supply connections of all subcircuits are often assigned using a .GLOBAL statement, so
that power supply nodes do not have to be specified in the port list of each subcircuit. For
example, .GLOBAL VCC connects all subcircuits with the internal node name VCC.
The syntax is
where node specifies global nodes, such as supply and clock names, and overrides local
subcircuit definitions.
Note:
The *.GLOBAL statement is equivalent to the .GLOBAL statement.
.CONNECT
The .CONNECT statement connects two or more nodes. NetTran uses the first node name
to replace all other listed node names during netlist translation.
• If a .CONNECT statement is defined outside a subcircuit, the statement applies to the top
cell of the netlist.
• If a .CONNECT statement is defined within a subcircuit, the statement applies only to
that subcircuit. However, if a global net is connected using a .CONNECT statement
inside a subcircuit, the .CONNECT statement is applied to the entire global net.
• When a *.CONNECT or .CONNECT statement is specified for global nets, the *.CONNECT
or .CONNECT statement shorts (merges) global nets everywhere that global net names
occur in the netlist hierarchy, regardless of the position of the *.CONNECT or .CONNECT
statement.
The syntax is
Note:
The *.CONNECT statement is equivalent to the .CONNECT statement.
.INCLUDE
The syntax is
.INCLUDE filename
Argument Description
filename Specifies the file name. The name can be full a path or relative name. The file
name can contain a dollar sign ($) followed by a UNIX environment variable
name. NetTran expands the text automatically.
For example,
.INCLUDE /home/janet/incdir/xyz.cdl
.INCLUDE $DIR/abc.cdl
If NetTran encounters multiple .INCLUDE instructions to the same file, it processes the first
instruction and ignores the other instructions.
.LDD
The *.LDD statement recognizes $LDD[model] as the model name when the -sp-
checkLdd command-line option is specified. If this command-line option is not specified,
NetTran recognizes $LDD[model] as the model name.
The syntax is
.LDD[model]
.PARAM
The .PARAM statement defines parameters or tokens that have associated numeric values.
During netlist translation, NetTran replaces tokens with the corresponding numeric values
defined by .PARAM statements. The following rules govern the interpretation of SPICE
.PARAM statements:
• If a redefinition of a .PARAM statement occurs, NetTran uses the first .PARAM statement
and ignores subsequent definitions. This behavior applies regardless of whether the
.PARAM statements all occur in a single file or occur across multiple files joined by
.INCLUDE instructions.
• When NetTran is invoked with multiple SPICE netlists on the command line, any
.PARAM statement within any netlist is interpreted only within the local scope of that
netlist.
• If a .PARAM statement occurs within a subcircuit definition, NetTran interprets the
.PARAM statement only within the context of that subcircuit definition.
• NetTran applies a .PARAM statement to tokens referenced either before or after the
.PARAM statement.
The syntax is
m1 a b c d W=w
.ends SUB
*.BUSDELIMITER
The *.BUSDELIMITER statement specifies delimiter characters for bus pins inside a SPICE
netlist. This syntax is used by NetTran when it must apply a bus defined inside a separate
netlist format, such as Verilog, to underlying bus pins used inside a SPICE netlist. Valid
delimiter characters understood by NetTran include a bracket ([), a curly brace ({), a less-
than sign (<), or an underscore (_). Only the leftmost character is specified within the
*.BUSDELIMITER statement. If unspecified, the default bus delimiter character understood
by NetTran is a bracket ([).
*.CAPA
The *.CAPA statement omits capacitors from the schematic netlist.
*.CONNECT
The .CONNECT statement connects two or more nodes together.
This statement has the same functionality as .CONNECT. See .CONNECT for more
information.
*.DIODE
The *.DIODE statement omits diodes from the schematic netlist.
*.EQUIV
The *.EQUIV statement replaces an old node name or device model name with a new
node name or device model name.
Use the *.EQUIV statement to short nets in the netlist. For example, a schematic netlist
contains a standard cell with two ports, gnd! and gnda!, and a RAM cell with one port,
vss. In a layout, gnd!, gnda!, and vss are connected to a global power net, vss. In the
layout netlist during LVS, vss is properly connected to gnd!, gnda!, and the vss pin of the
standard cell and RAM. To match layout nets to schematic nets, gnd!, gnda!, and vss have
to be connected. You can connect these nets by adding the *.EQUIV statement in the
schematic netlist and retranslating it using NetTran.
The syntax is
For example,
*.EQUIV VSS=gnd! VSS=gnda! VSS=vss
*.RESI
The *.RESI statement specifies the threshold value (tvalue) or model name (mname) of
shorted resistors. If the resistance between any two nodes in the *.RESI statement is
less than or equal to the threshold value, the two nodes are shorted. You can also short a
resistor by specifying its model name (mname).
The default threshold value is 2000 for *.RESI statements without a threshold value or
model name. The threshold value specified by a *.RESI statement applies to all of the
resistor elements in the same netlist, and the value can be overwritten by another *.RESI
statement (including a *.RESI statement with the default of 2000).
The *.RESI statement falls within the scope of the file. When there are multiple *.RESI
statements in the same file, the *.RESI value is cell-based and can be updated.
The syntax is
Argument Description
tvalue Optional. Represents the threshold value of the shorted resistors. The default
threshold value is 2000.
[mname] Optional. Represents the model name of the shorted resistors. Must be placed
within square brackets []. Multiple model names are also supported within
different square brackets [] as well as with a space between the model names.
For example,
• *.RESI $shorts resistors with resistance value <= 2000
• *.RESI = 10 $shorts resistors with resistance value <= 10
• *.RESI [res1] [res2] $shorts resistors with model name res1 or res2
• *.RESI 10 [res1] $shorts resistors with resistance value <= 10, or with
model name res1
*.SCALE
The *.SCALE statement specifies the base unit of the netlist. The IC Validator tool supports
the parsing of the input SPICE netlist and generates the SPICE layout netlists (cell.net)
with this syntax. If this CDL syntax is not defined, the SPICE netlist format unit is meter.
The syntax is
*.SCALE meter | micron
Units such as nano and pico are not allowed. The IC Validator tool and NetTran report
an error if these values are used. The following is an example of a meter-based SPICE
netlist:
*.SCALE meter
In this netlist, the properties of M1 are L=1 micron and W=13 micron. The syntax, *.SCALE
meter is optional, as the SPICE format is meter-based.
In this netlist, the properties of M1 are L=1 micron and W=13 micron.
Micron-based SPICE netlist 2:
*.SCALE micron
.SUBCKT invb GND VDD A Z
M1 GND A Z GND n L=1u W=13u
M2 VDD A Z VDD p L=1u W=20.5u
.ENDS
In this netlist, the properties of M1 are L=0.000001 micron and W=0.000013 micron.
When the netlist() function extracts cell.net in the SPICE flow with micron units,
*.SCALE micron must be applied in the netlist.
Note:
Properties are generated by user functions. The IC Validator tool does not
know the real units of individual properties. Therefore, additional translation of a
generated SPICE netlist is not recommended.
.OPTION SCALE
The IC Validator tool supports both the .OPTION SCALE and .OPTIONS SCALE statements
to scale geometric properties of instances in the netlist. One-dimensional geometric
property values, such as length, width, and perimeter, are multiplied by the specified
scale factor; two-dimensional property values, such as area, are multiplied by the
square of the specified scale factor. Nonstandard properties can be reclassified as one-
.OPTION SCALE=scalefactor
• *.AREA_UNIT:
• *.NON_UNIT:
The supported device types are: MOS, RES, CAP, IND, BJT, DIODE, and JFET.
Example 1
To apply LENGTH_UNIT to S only in MOSFET devices,
*.LENGTH_UNIT S(MOS)
Example 2
To exclude the prop_1 parameter name from a MOSFET device,
*.NON_UNIT prop_1(MOS)
Use the property name without specifying a device type to apply the parameter to all
device types. For example, to apply LENGTH_UNIT to S for all devices,
*.LENGTH_UNIT S
These statements can also be used to classify parameters on subcircuits by specifying the
subcircuit name. For example, to apply AREA_UNIT to S for an instance with the subcircuit
name syfns_res,
*.AREA_UNIT S(syfns_res)
*.MEGA
When the *.MEGA statement is specified, the property unit, M (case-sensitive), is treated
as mega to be scaled at a value of 1e+6.
Line Continuation
In a SPICE netlist format, the plus sign (+) is a line continuation character. Text on a line
that starts with a plus sign goes with the last valid line above it. For example,
.SUBCKT mycell a b
+c
R1 a b res
.ENDS
translates to:
{Cell mycell
{ports a b c}
{inst...}
}
The line continuation character, however, is not applied to comments except in the header
section. For example,
<file beginning>
* comment
+ I'm still a comment
$ comment
+ I'm still a comment, $ is the same as *
.SUBCKT mycell a b
* here is the comment
+c Note: c is not a comment
R1 a b res
.ENDS
Comments
There are two kinds of comments in a SPICE netlist format:
• Asterisk (*). The asterisk is always placed at the beginning of a line, following the
comment strings.
• Dollar sign ($). The dollar sign is used for comments that do not begin at the first
character position in a line. The strings after the dollar sign in a line are comments.
Cell Definition
The Verilog format uses the keyword module to define cells in a netlist. A module can be
an element or a collection of lower-level design cells. Each module must have a cell name,
which is the identifier for the module, and a port list, which describes the input and output
terminals of the module.
The syntax is
Port
The syntax for port declaration is
Format 1:
Format 2:
For example,
Format 1:
module AND( A, B, C);
input A;
input B;
output C;
...
endmodule
Format 2:
module OR2T( inout VSS,
output X,
input A, B,
inout VDD);
...
endmodule
Net
An example of the syntax is
wire a; // Declare net a for the circuit
wire b,c; // Declare net b and c for the circuit
wire d = 1'b0; // Net d is fixed to logic value 0 at declaration
Instance
The syntax is
Assign Statements
NetTran shorts two nets if there is a Verilog assign statement. The syntax is
For example,
assign net1 = net2;
NetTran shorts two nets, net1 and net2, and uses the name net2 to substitute for the name
net1. If the shorted net is connected to a port, it retains the port name as the retained net
and, in other cases, the net name.
Bus (Vector)
Nets can be declared as vectors, that is, multiple bit-widths. If the bit-width is not specified,
the default is scalar (1 bit).
For example, to declare the vectors:
output [3:0] X // 4-bit X
input [0:2] Y
input [2:12] Z
If the instance name is not specified, the assigned name mapping applies to the entire
cell. If the instance name is assigned, the name mapping is performed only on that specific
instance.
Here is an example of a Verilog voltage mapping file:
sub1 B1 VDD1 B0 GND1
sub3 B1 VDD2 B0 GND2
top_io top_io1 B0 GND1 B1 VDD1
top_io top_io2 B0 GND2 B1 VDD2
Note:
The translation of 1'b0 and other numeric values can be derived similarly.
The port byte_sel_n from the cell test is not defined. The default is to treat the port as the
net, from bus [4] to bus [0]. When the -verilog-busLSB option is set, NetTran treats the
port from bus [0] to bus [4].
If the Verilog netlist is well defined, that is, it has no undefined cells except primitives, the
-verilog-busLSB option does not need to be set. NetTran translates the netlist to the
correct order.
For example, with the Verilog netlist shown in Example 2, the IC Validator netlist is as
shown in Example 3, and the IC Validator netlist translated with the -verilog-busLSB
option is as shown in Example 4.
input [1:0] s;
input \i[0][0] , \i[1][1] ;
endmodule
{net_global }
{cell mid
{port s[0] s[1] i[1][1] i[0][0]}
{inst X2=nd02d4 {TYPE CELL}
{pin i[0][0]=a1 i[1][1]=a2 s[0]=zn}}
{inst X1=nd02d4 {TYPE CELL}
{cell top
{inst X1=mid {TYPE CELL}
{pin bus[1]=i[0][0] bus[0]=i[1][1] s_top[1]=s[1] s_top[0]=s[0]}}
}
{net_global }
{cell mid
{port s[0] s[1] i[1][1] i[0][0]}
{inst X2=nd02d4 {TYPE CELL}
{pin i[0][0]=a1 i[1][1]=a2 s[0]=zn}}
{inst X1=nd02d4 {TYPE CELL}
{pin i[0][0]=a1 i[1][1]=a2 s[1]=zn}}
}
{cell top
{inst X1=mid {TYPE CELL}
{pin bus[0]=i[0][0] bus[1]=i[1][1] s_top[0]=s[1] s_top[1]=s[0]}}
}
}
}
}
`include
The file inclusion (`include) is used to insert the contents of the entire file into the current
file during compilation.
NetTran parses and ignores the following directives:
`accelerate
`celldefine
`define
`endcelldefine
`endprotect
`protect
`remove_gatenames
`timescale
`include
The syntax is
`include "file_name"
The file name can be a relative or absolute path. Inclusions are ignored.
For example:
`include "sources/FileA.v"
`include "FileB.v"
3
Building the Substrate
This chapter describes the different methods the IC Validator tool uses to create substrate
layers for different processes.
Overview
To build full-chip connectivity for ERC, DRC, and device extraction runsets, you need the
correct substrate definition. A less than optimal substrate definition might cause device
extraction errors, extra ports in the extracted netlist, and hierarchically complex layers that
can degrade performance.
The IC Validator tool uses different methods to create substrate layers depending on
the requirements of the process. The following runset methods are used to generate
substrates: cell_extent : not, buildsub, and get_substrate().
Note:
The get_substrate method is a legacy method suitable only for processes
that do not have multiple potential regions. This method is not covered in this
user guide.
Choosing a substrate definition method requires balancing accuracy and
performance. Example 5 shows the cell_extent : not method. Example 6
shows the buildsub method.
When accuracy is a concern and the process demands a generated substrate layer from
only input polygons that form isolated substrate regions, the buildsub method must
be used. The cell_extent : not method does not check for input polygons that form
isolated regions, and it uses all of the input polygons to generate the substrate layer. The
following figures illustrate the differences between the cell_extent : not and buildsub
methods.
Figure 29 shows four green input NWELL polygons to the cell_extent : not and
buildsub methods.
Note:
The top left NWELL ring polygon and bottom left NWELL polygon are the only
polygons that form isolated substrate regions.
Figure 30 shows the gray output layer from the cell_extent : not method. This method
uses all of the NWELL shapes to create the final psub substrate output layer. Therefore, all
of the NWELL polygons are subtracted from the output layer.
Figure 31 shows the gray output from the buildsub method. This method uses only input
NWELL polygons that form isolated substrate regions. Therefore, only the NWELL polygon
that formed a ring and the NWELL that divided the chip were subtracted from the output
layer.
Therefore, use the buildsub method if the process requires a generated bulk layer from
the input well polygons that form the isolated regions.
Use the cell_extent : not method if well polygons that form isolated regions are not
a concern and you need all well polygons to be subtracted from the generated substrate
layer.
Select “don’t care” if all well polygons in the layout form isolated regions.
Example 7 shows a PMOS device with two bulk layers:
Figure 32 shows the yellow NWELL layer is subtracted from the gray generated psub layer
using the cell_extent : notmethod. If devices with two bulk layers are extracted, the
cell_extent : not method causes device extraction errors.
When the IC Validator tool executes device extraction, the pmos() function shows the
missing bulk connection errors, as shown in Example 8. The rectangular NWELL shapes
are subtracted incorrectly from the substrate derivation layer. With this case, the buildsub
method is the better choice, as this NWELL structure is not subtracted from the generated
substrate layer.
The buildsub method is advantageous in this case because it does not subtract NWELL
from the output that does not form isolated regions. As a result, the instance-specific
NWELL structures do not create the extra ports in the netlist.
• Performance issues do exist when using the buildsub method. If a design contains
many instance-specific NWELL rings in the designs, the buildsub method performs an
aggressive pull-down to all cells, which complicates the hierarchy and causes runtime
problems for downstream connections and device extraction functions.
If certain functions have performance issues and the pulled polygon count is high in the
summary file, as shown in Example 10, use the cell_extent : not method or use
the manual buildsub method, as shown in Example 11.
psub = manual_buildsub(NWELL);
4
Hierarchical Device Extraction
This chapter describes the device functions and arguments, which include device names,
terminals, and extraction information.
layer is required when terminal layers do not touch or interact with the body layer. Use
a recognition layer to indicate multifinger devices. Figure 34 shows an example of a
recognition layer. Processing layer. Specifies the polygons that are required to compute
properties (optional). Use this layer to calculate device properties. Figure 35 shows
how the processing layer interacts with the device. Reference layer. Optional layer that
specifies the intended ___location in the hierarchy for the extracted device.
The IC Validator tool extracts one device for each body layer that interacts with all of the
other required polygons.
Devices are defined with a body layer, terminal layers, and a recognition layer in
Figure 34. All terminals touch the body layer (A) and use a recognition layer when
terminals do not touch the body layer (B).
A body polygon is always required to recognize devices or generate device errors for
missing terminals. Device layers without an interacting body polygon do not generate a
device extraction error. When both a recognition polygon and a body polygon are declared
for device recognition, both a body polygon and a recognition polygon are required to
recognize devices or generate device errors for missing terminals. If either the body
or recognition polygon is missing, no device is extracted and no extraction errors are
generated.
Figure 34 Defining Devices With a Body Layer, Terminal Layers, and a Recognition Layer
The processing layer interaction with the device: (A) body layer, (B) recognition layer, and
(C) within the specified range of the body is shown in Figure 35.
Device Terminals
When you specify a device, the IC Validator extraction functions require a specific number
of terminals. For example, resistors, capacitors, or inductors must have exactly two
terminals. Otherwise, the IC Validator tool reports an extraction error for either too many
terminals or too few terminals (see Figure 36). If a bipolar junction transistor (BJT) or
diode is missing a terminal, the device might not be recognized. If the BJT or diode has
an extra terminal, the IC Validator tool might extract additional devices. For a MOSFET,
you can require either one or two source/drain terminals using the source_drain_config
argument.
Examples of resistors with different numbers of terminals are shown in Figure 36. When
two terminals connect to the body (A) the device is extracted. If there are too few (B) or too
many (C) terminals, the IC Validator tool does not extract the device.
Example 12 shows how to generate the layers and the pnp() function.
Example 13 shows how to generate the layers and the pnp() function.
Capacitors
Capacitor devices consist of two overlapping layers, where the overlapping region is the
device area.
Metal-to-Metal Capacitor
The metal-1 to metal-2 capacitor (A) and the generated layers for extraction (B) are shown
in Figure 39. You generate the device_body layer by performing a Boolean AND of the
metal-1 and metal-2 layers.
You generate the terminal layers by performing a Boolean NOT of the device_body layer
and the metal-1 and metal-2 layers.
device_body = cap_body,
terminal_a = m1_terminal,
terminal_b = m2_terminal,
);
MOS Capacitors
You create decoupling capacitors by using a MOSFET with the source and drain
electrically connected to the bulk, and the gate electrically connected to VCC. Even though
the device is a MOSFET, circuit simulation is faster without a loss in accuracy by treating
these devices as capacitors.
A layout and its generated layers are shown in Figure 40.
Figure 40 MOS Capacitor (A. Layout - Source and Drain Are Connected, B. Generated
Layers)
Diode Extraction
The diode device consists of two overlapping layers. The NP and PN diodes are
extracted using the np() and pn() functions, respectively. You specify the body using the
body_layer argument. An example of a pn() diode is shown in Figure 41.
Figure 41 Diode Drawn in Layout (A) and Generated Layers for the pn() Function (B)
Example 16 shows how to generate the layers and specify the device in the pn() function.
{{cathode }, welltie}
}
);
…
pn(
matrix = my_devices,
device_name = "PN_DIODE",
device_body = cathode,
anode = anode,
cathode = cathode,
optional_pins = {{psub}}
);
Inductor Extraction
The inductor() function extracts inductors that have a device layer and two terminal
layers. You generate the inductor layers from a Boolean AND between a border layer and
the metal layers, as shown in Figure 42.
Figure 42 Inductor Drawn in Layout (A) and Generated Layers for inductor() Function (B)
MOSFETs
A MOSFET consists of a gate polygon, two source/drain polygons, and optionally,
one or more bulk terminals. You generate the gate from a Boolean AND between a
polysilicon and diffusion layer, as shown in Figure 43 and the source and drain polygons
from a Boolean NOT. The gate layer must be connected by using the connect() or
incremental_connect() function. You create different types of MOSFETs through
Boolean operations between the gate and other layers, such as implants, nWell, and thick
oxide.
Figure 43 MOSFET Drawn in Layout and Generated Layers for nmos() and pmos()
Functions
Resistor Extraction
A resistor device consists of a resistive body polygon, usually path-like in shape, which
has terminals at each end. Figure A of Figure 44 shows an example a polysilicon resistor
formed by a silicide block layer with silicided polysilicon terminals and the derived layers
for the resistor() function. You create the body polygon by using a Boolean AND
operation and the terminals by using a Boolean NOT operation. You specify an optional
resistance value per square and an additional bulk terminal, which encloses the device.
Figure 44 Polysilicon Resistor Layout (A) and Generated Layers for Device Extraction (B)
Example 19 shows a polysilicon resistor formed by a silicide block layer with silicided
polysilicon terminals.
5
Device Property Calculations
This chapter describes device properties that can be attached to the primitive devices in
a netlist. These properties can be used for simulation and LVS comparison between the
schematic and layout netlists.
Property Calculations
Properties can be attached to the primitive devices in a netlist, and they can be used
for simulation and LVS comparison between the schematic and layout netlists. Layout
netlist device properties are derived from the polygons that are selected for each device
instance during device extraction. These device properties can typically be divided into two
categories based on their hierarchical characteristics and how they are used.
Compare Properties
Compare properties are found in both the schematic and layout netlists and are compared
with the expectation that they should be the same within some tolerance to successfully
pass LVS. These properties are also typically able to be extracted without flattening the
hierarchy, therefore making it possible for the hierarchy to be preserved for LVS.
Simulation Properties
Simulation properties are needed for simulation, but are not found in the schematic netlist
and are not compared during LVS. These properties often require a larger ambit around
the device for accurate extraction and, therefore, might require some additional flattening
to be extracted, which results in a loss of netlist hierarchy.
By default, the compare and simulation properties are attached to devices in the netlist
that are used during LVS compare. The simulation properties might require flattening of
the netlist hierarchy, which can make LVS more difficult to debug. For this reason, use
the dual hierarchy flow to separate the simulation properties into a separate file called
the annotation file. This file allows the simulation properties to be passed downstream to
the StarRC tool to be combined in the flat netlist for simulation, while also maintaining the
hierarchy in the netlist used for LVS comparison.
An example of MOS properties is shown in Figure 45.
Compare properties:
M1 d g s b n l=1e-06 w=1.3e-05
The Length (l) and Width (w) properties for this MOS device are compared between the
Schematic and Layout netlists.
Simulation Properties:
M1 d g s b n l=1e-06 w=1.3e-05
+ as=1.17e-10 ad=3.9e-11 ps=1.8e-05 pd=1.9e-05
The Source Area (as), Drain Area (ad), Source Perimeter (ps), and, Drain Perimeter (ps)
properties for this MOS device are used for simulation only and might require device
leveling for accuracy.
Default Properties
Each device extraction function has default properties and default property calculation
functions, as shown in Table 19. The default property and property calculation function
definitions are in the function prototypes in ICV_INSTALL_DIRECTORY/include/
device_public.rh.
Table 19 Device Extraction Function Default Properties
properties argument of the extraction function. The property is saved using the
dev_save_double_properties() if dev_is_property() is true.
Example
calc_diode_properties: published function (void) returning void
{
area : double = diode_area();
pj : double = diode_perim();
if (dev_is_property("area")) {
dev_save_double_properties({{"area", area}});
}
if (dev_is_property("pj")) {
dev_save_double_properties({{"pj", pj}});
}
}
The default property calculation function is used to calculate the properties, but only the
“area” property is output.
• Custom property calculation function and nondefault properties
np(my_dev_matrix, "my_diode_name", my_anode, my_cathode,
properties = {{"my_custom_property", DOUBLE, PICO}},
property_function = my_custom_property_function
);
cap_ capacitor()
gdm_ gendev_manual()
ind_ inductor()
res_ resistor()
Dedicated utility functions are provided for the most common measurements on the
device polygons. The mos_length_min() utility function measures the minimum length
of the gate body for calculating the device length property “l”. The mos_width_1() and
mos_width_2() utility functions measure the coincident edge lengths between the body
and source/drain polygons for calculating the device with property “w”.
if(dev_is_property("nfin")){
dev_save_double_properties({{"nfin", fin_count}});
}
if(dev_is_property("area")){
dev_save_double_properties({{"area", gate_area}});
}
}
Example of an extracted device with “l”, “w”, “area”, and “nfin” properties:
M1 d g s b n l=1.0u w=13.0u area=13.0p nfin=5.0
6
Layout-Versus-Schematic Flows
Layout-versus-schematic (LVS) flows are described in the following sections:
• Creating a Black-Box LVS Flow
• Netlist-Versus-Netlist Flow
You can also provide LVS black-box options for each black-box cell separately. This is
useful if the configuration for each black box is unique. For example,
lvs_black_box_options(
equiv_cells = {{"invb", "invb"}},
equate_ports = {{"A","A1"}}
);
lvs_black_box_options(
equiv_cells = {{"nor2b", "nor2b"}}
);
• Passed to the IC Validator runset with the -e command-line option. The -e command-
-e command-line optionblack-box flow, LVS
When a cell is designated as a black-box cell, the IC Validator tool matches the schematic
ports to the layout ports by name. When a black-box cell is successfully matched, it is
labeled as such in the summary details for the cells in which it was placed. For example,
Post-compare summary (* = unmatched devices or nets):
Matched Schematic Layout Instance types
unmatched unmatched [schematic, layout]
--------- --------- --------- --------------------
8 0 0 [invb, invb] (blackbox)
3 0 0 [nand2b, nand2b]
1 0 0 [nand3b, nand3b]
3 0 0 [nor2b, nor2b] (blackbox)
1 0 0 [nor3b, nor3b]
--------- --------- --------- --------------------
16 0 0 Total instances
21 0 0 Total nets
Usage Models
This section shows several black-box examples:
• Example 1: All Ports Match Between Netlists
• Example 2: Port Names Do Not Match Between Netlists
• Example 3: Extra Ports in Layout Black-Box Cell
• Example 4: Extra Schematic Ports on Black-Box Cells
• Example 5: Extra Untexted Layout Ports on Black-Box Cells
• Example 6: Untexted Layout Ports on Black-Box Cells
• Example 7: Symmetry and Black-Box Cells
LVS successfully runs to completion because the port counts and names match. If the port
counts or names do not match between the schematic and layout, then, by default, the
IC Validator tool reports an error.
The LVS run stops and prints the following message in the LVS log file (add4_lvs.log):
Processing black boxes' pins...
ERROR: Schematic port "A" does not have a corresponding port in the
layout in blackbox {invb, invb}
ERROR: Layout port "A1" does not have a corresponding port in the
schematic in blackbox {invb, invb}
You can fix this error by manually defining the port mapping for the pins that do not match
using the lvs_black_box_options() function for this equivalence. For example,
lvs_black_box_options(
equiv_cells = {{"invb","invb"}},
equiv_ports = {{"A","A1"}}
);
The LVS run stops and prints the following message in the LVS log file (add4_lvs.log):
Processing black boxes' pins...
ERROR: Layout port "B" does not have a corresponding port in the
schematic in blackbox {invb, invb}
• ERROR_NO_ABORT
The tool prints the error message but continues to compare the topology of the
design. The tool ignores all connections to extra pins of black-box cells. For
example,
match(
...
report_black_box_errors = {
extra_layout_ports = ERROR_NO_ABORT,
extra_schematic_ports = ERROR_NO_ABORT
},
...
);
If the only problem found in the design is the extra layout black-box port error, the
final LVS result is reported as FAIL with the following message:
ERROR: Following are 8 layout port-error blackbox instances.
Check lvs.log file for extra ports in the blackbox cells.
------------------------------------------------
599CF7565 (invb)(-108.000, 0.000)
599CF7566 (invb)(18.000, 0.000)
599CF7567 (invb)(108.000, 0.000)
599CF7568 (invb)(-24.000, 0.000)
599CF7569 (invb)(-84.000, 0.000)
599CF75610 (invb)(-54.000, 0.000)
599CF75611 (invb)(48.000, 0.000)
599CF75612 (invb)(90.000, 0.000)
• WARNING
The tool reports a warning and continues to compare the topology of the design.
The tool ignores all connections to extra pins of the black-box cell. For example,
match(
...
report_black_box_errors = {
extra_layout_ports = WARNING,
extra_schematic_ports = WARNING
},
...
);
The following warning messages are printed in the LVS log file (add4_lvs.log):
Processing black boxes' pins ...
WARNING: Layout port "B" does not have a corresponding port in the
schematic in blackbox {invb, invb}
• NONE
With this setting, the tool does not report a warning or error in the LVS log file and
continues to compare the topology of the design. All connections to extra pins of the
black-box cell are ignored.
The following error message is printed in the LVS log file (add4_lvs.log):
Processing black boxes' pins...
ERROR: Schematic port "A" does not have a corresponding port in the
layout in blackbox {invb, invb}
As in Example 3, which has extra layout ports, you can fix this error in one of two ways:
1. Manually remove the port using the remove_schematic_ports argument of the
lvs_black_box_options() function. You can also use this argument if there are extra
schematic ports that need to be removed. For example,
lvs_black_box_options(
equiv_cells = {{"invb","invb"}},
remove_schematic_ports = {"A"}
);
The tool prints the error message but continues to compare the topology of the
design. The tool ignores all connections to extra pins of the black-box cells. For
example,
match(
...
report_black_box_errors = {
extra_layout_ports = ERROR_NO_ABORT,
extra_schematic_ports = ERROR_NO_ABORT
},
...
);
If the only problem found in the design is the extra schematic black-box port error,
the final result is reported as FAIL with the following message:
ERROR: Following are 8 schematic port-error blackbox instances.
Check lvs.log file for extra ports in the blackbox cells.
• WARNING or ERROR
Even though the created port is an extra port, when the tool is processing the port, by
default an untexted port error is reported and the IC Validator tool stops. For example,
Processing black boxes' pins...
ERROR: Layout port "1" is untexted in blackbox {invb, invb}
Now, the tool reports an error in the LVS log file and continues to compare the topology
of the design but ignores all connections to extra, untexted pins of the black-box cell. For
example,
ERROR: Following are 8 layout port-error blackbox instances.
Check lvs.log file for extra ports in the blackbox cells.
Note:
All untexted black-box ports are ignored if the error is downgraded to a warning.
For example, even if you have the following settings, only the warning for the
untexted layout ports is reported and no error for the extra port is reported:
match(
...
report_black_box_errors = {
untexted_layout_ports = WARNING,
extra_layout_ports = ERROR
},
...
);
The following error messages are printed in the LVS log file (add4_lvs.log):
Processing black boxes' pins ...
ERROR: Schematic port "A" does not have a corresponding port in the
layout in blackbox {invb, invb}
ERROR: Layout port "1" is untexted in blackbox {invb, invb}
Setting both options to a non-fatal value, such as WARNING, however, forces the IC
Validator tool to report an error because the tool cannot find a match for the 'A' port. For
example,
match(
...
report_black_box_errors = {
untexted_layout_ports = WARNING,
extra_layout_ports = WARNING
},
...
);
You can avoid this issue by explicitly setting the port matching in the
lvs_black_box_options argument, as shown in Example 1. For example,
lvs_black_box_options(
equiv_cells = {{"invb","invb"}},
equate_ports = {{"A","1"}}
);
If these cells are not black-box cells, then the IC Validator tool recognizes that the 'A' and
'B' pins are logically swappable based on the topology of the 'nor2b' contents, and the LVS
report is clean. However, in the following flow, this situation results in an LVS failure:
> cs_add != cs_add (level = 1)
Error summary:
16 matched devices
19 matched nets
...
Diagnostic summary:
The most possible equated nets are grouped for cross probing.
Group 1 of 1:
...
To have the IC Validator tool recognize these pins as swappable in the black-box flow, you
need to manually define the swappable pins in the lvs_black_box_options() function.
For example,
lvs_black_box_options(
equiv_cells = {{"nor2b", "nor2b"}},
schematic_swappable_ports = {{"A","B"}}
);
Netlist-Versus-Netlist Flow
The IC Validator tool has a netlist-versus-netlist (NVN) flow that you can use to compare
two netlists of any origin. An NVN flow differs from an LVS flow in that the NVN flow does
not perform device extraction from a layout netlist; instead, the IC Validator tool reads and
compares two standalone netlists.
Partial runset Mostly standard devices are defined in Device mapping functions are required
netlists. This is a topological comparison with for nonstandard devices. The runset is
merging, filtering, and checking of properties. fully configurable for compare settings.
Full runset A combination of standard and nonstandard Device mapping functions are required
devices are defined in the netlists. This is a for all devices. The runset is fully
topological comparison with merging, filtering, configurable for compare settings.
and property checking
Note:
In an NVN flow, the term schematic refers to the reference netlist and layout
refers to the candidate netlist. This terminology is used because the IC Validator
NVN flow uses the same compare engine as is used for other LVS flows. All
output is formatted in terms of schematic and layout.
type and name, pin names, mapping to schematic devices, and swappable pins and
properties.
Table 22 shows the correspondence between the device configuration functions and NVN
mapping functions.
Table 22 Device Configuration and NVN Mapping Functions Correspondence
capacitor() map_capacitor()
gendev() map_gendev()
inductor() map_inductor()
nmos() map_nmos()
np() map_np()
pmos() map_pmos()
npn() map_npn()
pn() map_pn()
pnp() map_pnp()
resistor() map_resistor()
NVN mapping function calls are required for every device instance in each imported
netlist. This option is the default.
• PARTIAL_RUNSET
The mapping of device instance to device type can be inferred from the netlist without
an explicit mapping function call for each instance.
• init_compare_matrix()
• read_layout_netlist()
• schematic()
In addition, you can use any compare setting functions that have device_type
and device_name arguments. These functions are: check_property(),
check_property_off(), filter(), filter_off(), fopen(), merge_parallel(),
merge_parallel_off(), merge_series(), merge_series_off(), and
recalculate_property().
• Runset (full_nvn.rs):
#include <icv.rh>
// import netlists
sch = schematic({{"ADD4_sch.sp", SPICE}});
lay = read_layout_netlist({{"ADD4_layout.sp", SPICE}});
compare_state = init_compare_matrix(
netlist_vs_netlist = FULL_RUNSET
);
// map functions
map_nmos(compare_state, "n");
map_pmos(compare_state, "p");
In the full runset flow example, the schematic and layout input netlists are defined and
the compare state is initialized with the FULL_RUNSET option of the netlist_vs_netlist
argument. The netlists are small, so only one NMOS function and one PMOS function are
needed. Parallel merging is enabled on each MOS device, and the top cell names are
defined in the compare() function. Everything needed to run NVN is set.
Run the NVN flow as follows:
%icv full_nvn.rs
• Runset (partial_nvn.rs):
#include <icv.rh>
// import netlists
sch = schematic({{"ADD4_sch.sp", SPICE}});
lay = read_layout_netlist({{"ADD4_layout.sp", SPICE}});
compare_state = init_compare_matrix(
netlist_vs_netlist = PARTIAL_RUNSET
);
// map functions
// no map functions required
and layout netlists must be specified on the command line along with the formats. The cell
names must also be defined. For devices to be appropriately matched, they must have the
same name, same number of pins, and the same standard pin names.
The following example shows the command line for an NVN run without a runset:
%icv -nvn -ln layout_filename -lnf layout_format -s schematic_filename \
-sf schematic_format -c layout_top_cell [-stc schematic_top_cell]
Note:
If the layout or schematic format is ICV, it must be IC Validator format 2.0 or
greater.
Output Files
For the no runset mode, the IC Validator tool default settings are used. Therefore, the
compare() function writes the default output files.
For the partial and full runset modes, the settings of the compare() function determine the
output files.
7
Compare Functions Basics
A A, AREA Area
M M, MULT Multiplier
PJ PJ Perimeter of junction
W W, WIDTH Width
Complementary Functions
Complementary functions are used to selectively deactivate compare functionality that
was activated by a previous function for a set of devices. The complementary compare
functions are
check_property() — check_property_off()
filter() — filter_off()
merge_series() — merge_series_off()
merge_parallel() — merge_parallel_off()
short_equivalent_nodes() — short_equivalent_nodes_off()
Precedence Rule
The following compare functions can be set at the device name level and the device type
level.
check_property()
check_property_off()
filter()
filter_off()
merge_parallel()
merge_parallel_off()
merge_series()
merge_series_off()
recalculate_property()
short_equivalent_nodes()
short_equivalent_nodes_off()
The function settings use this precedence:
A. Compare functions with the device type specified.
B. Compare functions with the device name specified.
The precedence order is B > A.
To enable parallel merging for all RES devices except those devices formed from polygon
layers, use syntax as shown here:
merge_parallel(my_devices, RESISTOR);
merge_parallel_off(my_devices, RESISTOR, {{"poly_res"}});
The first statement turns parallel merging on for all resistors. The second function turns off
parallel merging for only poly_res.
If you repeat a function for the same level, such as device_name, the second function
replaces the first one. In the following example, poly_res is used twice:
merge_parallel_off(my_devices, RESISTOR, {{"poly_res"}});
merge_parallel(my_devices, RESISTOR, {{"poly_res"}});
In this case, merge_parallel() is enabled for poly_res because both statements are
specified at the same level of precedence and the second function call replaces the first.
8
Netlist Modification
To achieve a clean comparison result, the topologies and properties of the netlists must be
modified. Topology modifications consist of device merging, recalculation of properties for
merged devices, and device filtering. The functions used for netlist modification provide a
number of different options by which the modifications can be controlled or customized.
Merging Devices
You use device merging to modify the connected device topologies by reducing multiple
parallel or series connected devices into a single merged device instance. For example, a
reduction of multiple devices makes it possible to match a single device in one netlist to an
equivalent merged device in another netlist. Additionally, for series merged MOS devices,
merged devices with logically equivalent gate connections can be generated for series
connected transistor stacks to make it possible to match different, but logically equivalent,
transistor stacks.
Merging is controlled based on various characteristics such as device type, device name,
equivalence cells, and device property tolerances. Additionally, when devices are merged,
the properties must be recalculated for the new merged device. Device merging functions
have default equations that are used for recalculating the property values for commonly
used properties for the merged devices. Default equations and properties are described
in the IC Validator Reference Manual. Custom property merging functions can also be
defined.
The merging functions, and how merging is controlled based on these various device
characteristics, are discussed in this chapter. Most of the examples are provided in the
context of parallel merged MOS devices, but the ability to control merging based on
properties, property calculations, and tolerances extends to other devices and merge
functions.
merge_parallel(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
exclude_tolerances = {{property = "string",
tolerance = doubleconstraint,
tolerance_type = RELATIVE | ABSOLUTE},
...}, //optional
exclude_function = "string", //optional
property_functions = {{property_function = "string",
property = "string"}, ...}, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...}, //optional
xref_parallel_map_property = "string" //optional
);
The merge_parallel_off() function defines the criteria for excluding certain devices
from being merged in parallel by type, device name, or equivalence cells.
Syntax
merge_parallel_off(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...} //optional
);
merge_parallel(compare_settings, NMOS);
In the layout netlist, the na devices are merged into a single merged device with W=4 and
L=0.525, as shown in Figure 49. In the schematic, the na device has L=0.5, which might
cause an LVS failure depending on the check_property() function tolerances.
Or, you can leave out the name specification in the merge_parallel() function such that
all devices are to be merged. Certain devices can be specified by name to not be merged
using the merge_parallel_off() function.
merge_parallel(compare_settings, NMOS);
merge_parallel_off(compare_Settings, NMOS, {"nb"});
With either method, the resulting modified netlists are the same. The na devices are
merged, and the nb devices are not merged, as shown in Figure 50.
In the layout netlist, the na devices are merged and the nb devices are not merged, as
shown in Figure 51.
In the layout netlist, L=0.5 is the minimum instead of L=0.525 for the merged na device.
See Figure 53.
In the layout netlist, there are two parallel merged na devices, one with W=2 L=0.5 and the
other with W=2 L=0.55. The L properties have more than an 0.02 difference in length, as
shown in Figure 55.
Prototypes for the intrinsic IC Validator utility functions used in the res_merge_pq()
function, such as the lvs_is_resistor() and lvs_sum_of_products() functions, are
in the icv_compare.rh header file, and they are defined in Chapter 4, “Compare Utility
Functions” in the IC Validator Reference Manual.
compare_entrypoint_functions.rs
#include "math.rh"
#include "icv_compare.rh"
Syntax
merge_series(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
exclude_tolerances = {{property = "string",
tolerance = doubleconstraint,
tolerance_type = RELATIVE | ABSOLUTE},
...}, //optional
exclude_function = "string", //optional
property_functions = {{property_function = "string",
property = "string"}, ...}, //optional
merge_connected_gates = true | false, //optional
multiple_paths = true | false, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...}, //optional
gendev_series_pins = {pin_a = "string",
pin_b = "string"} //optional
);
The merge_series_off() function defines the criteria for excluding certain devices from
being merged in series by type, device name, or equivalence cells.
Syntax
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...} //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...} //optional
);
The gate connections for the series merged devices, G#0 and G#1, are logically
equivalent and are swappable. This makes it possible to match the series transistors with
different gate connection orders, as shown in Figure 59.
Example of Series Merged Paths for MOS Devices
In this example, the multiple_paths argument expands stacks into multiple merged
series devices, each with swappable ports. See Figure 60.
merge_series(compare_settings, NMOS, {"nb"},
multiple_paths = true);
The merged series instances in the modified netlists represent two devices in series.
On the layout side, for example, XSerChain#0 contains M8 in series with M7, and
XSerChain#1 contains M8 in series with M6, as shown in Figure 61. Since the SD#0
and SD#1 ports are swappable, the merged series chains make it possible to match the
different topologies for the Y and GND connections compared to the series chains in the
schematic, as shown in Figure 62.
Syntax
short_equivalent_nodes(
state = compare_state,
device_type = NMOS | PMOS,
device_names = {"string", ...}, //optional
short_nodes = SAME_DEVICE_NAME_ONLY | ANY_DEVICE_NAME |
ANY_DEVICE_TYPE, //optional
width_ratio_tolerance = {{}, RELATIVE},
tolerance = doubleconstraint,
tolerance_type = RELATIVE | ABSOLUTE},
//optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...}, //optional
stack_type = {SERIES_PARALLEL}, //optional
exclude_tolerances = {property = "string",
tolerance = doubleconstraint,
tolerance_type = RELATIVE | ABSOLUTE},
tolerance_calculation_method = CASCADE |
RATIO}
//optional
);
on device type, name, and the cell name that contains the device. See Figure 67 and
Figure 69.
Syntax
short_equivalent_nodes_off(
state = compare_state,
device_type = NMOS | PMOS,
device_names = {"string", ...}, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"}, ...} //optional
);
Filtering
The filter() function defines the criteria for removing devices from the netlist. Devices
can be specified for filtering by type, name, and equivalence cell. Devices can be filtered
using standard, predefined filtering criteria or by specifying user-defined filter functions.
The connections that remain after the device is removed can be opened or shorted.
Syntax
filter(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_name = {"string", ...}, //optional
filter_options = {option, ...}, //optional
filter_function = "string", //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...}, //optional
schematic_filter_options = {option, ...}, //optional
layout_filter_options = {option, ...}, //optional
short_pins = {"string", ...} //optional
);
The filter_off() function defines the criteria for excluding certain devices from being
filtered by type, device name, or equivalence cells.
Syntax
filter_off(
state = compare_state,
device_type = NMOS | PMOS | NPN | PNP | PN | NP |
RESISTOR | CAPACITOR | INDUCTOR | GENERIC,
device_names = {"string", ...}, //optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...} //optional
);
Option Description
NMOS_1 Filters devices when gate, source, and drain pins are shorted.
NMOS_2 Filters devices when gate, source, and drain pins are floating.
NMOS_4 Filters devices when source and drain pins are tied to ground.
NMOS_5 Filters devices when source and drain pins are shorted.
In Figure 70, filterable devices with NMOS_1 and NMOS_3 are in the input layout netlist.
Transistor M3 is filterable by NMOS_3. Transistor M4 is filterable by either NMOS_1 or
NMOS_3.
When the devices are filtered, the pins are left open, as shown in Figure 71.
Custom Filtering
Custom filtering can be accomplished by defining a custom filter function. As with all
user-defined functions for compare-related functions, the filter functions are defined in a
separate user-function file that is referenced in the compare() function.
Example of Custom Filtering for a Resistor
In the following example, resistors are filtered using a custom, user-defined function.
Resistors are filtered if the device has the device name, r_delete_me, and is connected
to a net called, special_net. The custom filter function is an entrypoint function.
Therefore, it is defined in a separate entrypoint function file that is referenced by
the user_functions_file argument of the compare() function. See Figure 72 and
Figure 73.
runset.rs
#ifndef COMPARE_ENTRYPOINT_FUNCTIONS_RS
#define COMPARE_ENTRYPOINT_FUNCTIONS_RS
#include <icv_compare.rh>
#include <math.rh>
}
}
}
#endif
The custom filter function is called in the filter() function in the main runset.rs before
calling compare(), as follows:
runset.rs
filter(compare_settings, RESISTOR,
filter_function = "filter_res_by_net_and_device_name"
);
9
Table-Based Lookup Functionality
This chapter explains the table-based functionality for design for manufacturing (DFM).
Overview
Table-based lookup functionality is a mechanism by which you import postmanufacturing
effects into the design cycle for better simulation results. These postmanufacturing effects
can be sampled, and then populated in lookup tables. The information in the lookup tables
can be imported into the IC Validator flow by the remote functions called by the nmos()and
pmos() functions.
One use of the table-based lookup functionality in DFM applications is to model the
effective changes in a MOS device channel length and width due to postmanufacturing
contour inaccuracies introduced by L-shaped poly or diffusion layers. In Figure 74
the dotted line shows how the effective channel length and width can change after
manufacturing from L-shaped poly and diffusion contours.
• W is the drawn channel width. L is the drawn channel length.
• ΔW and ΔL are the change in W and L after manufacturing.
• Effective channel width is W' = W + ΔW. Effective channel length is L' = L + ΔL.
You can save the width and length changes via a lookup table, and then use the
mos_get_dfm_double() function in the remote functions called by the nmos()and pmos()
functions to return the width and length changes at the runset level. You can then use
these values to change the effective width and length for better simulation accuracy.
The IC Validator tool searches the files, in order, to find the table specified in the table-
lookup extraction function. The table lookup file can be specified as either a relative or
full path.
3. Use the table-lookup extraction function, mos_get_dfm_double(), within the remote
functions called by the nmos()and pmos() functions. See Table-Lookup Extraction
Function for information about the mos_get_dfm_double() function.
• Lines that start with # are comments. They are allowed anywhere.
• Empty lines are allowed anywhere.
• An end statement follows the last row of return values for any given table.
• Multiple tables can be defined, each with a unique name and delimited with begin and
end statements.
• The table file can be encrypted using the IC Validator pxlcrypt executable.
% pxlcrypt plain_text.txt encrypted.txt
on the input table name and specified array values. You can use more than one extraction
function in remote functions called by the nmos()and pmos() functions.
The table-lookup extraction function syntax is:
mos_get_dfm_double (
table = "string",
index = {double, ...}
);
table
Specifies the name used to locate the lookup table within the files specified by
the dfm_files argument of the init_device_matrix() function. Table names
are case-sensitive.
index
Values used in referencing the table to determine the return value. The input
array size must match the table dimension. For example, an error message is
reported if the lookup table is five-dimensional but the input array size is 6. The
input array can contain numeric variables created within the remote functions
called by the nmos()and pmos() functions.
Use the returned value to calculate the effective length (L') and width (W') within a device
configuration function and netlist.
In the following example, the DFM input array contains the numeric values created from
the dev_touch_length() function. The array is then used by the mos_get_dfm_double()
function to find the delta width.
my_mos_prop_func : function(void) returning void
{
delta_width : double = 0.0;
DFM : list of double = {};
src_drn = dev_pin("SRC");
DFM.push_back (dev_touch_length(ox, src_drn));
DFM.push_back (dev_touch_length(ox, src_drn));
DFM.push_back (1.0);
nmos(matrix,
device_name = "nfet",
drain = src_drn,
gate = gate,
source = src_drn,
properties = {{"delta_width", DOUBLE}},
property_function = my_mos_prop_func
);
based functions to give numeric input values to the mos_get_dfm_double() function. The
IC Validator tool returns a user-accessible numeric value from the table.
The IC Validator tool uses the following three-dimensional table to cross-reference input
values x, y, and z for a return value V. The table contains five x input values, four y
input values, and two z input values. The xy-dimension values are the extracted length
measurements ox, oy, px, and py. The z-dimension value represents a flag to return values
from either poly rounding or diffusion rounding.
# 3-D table example
begin rounding_effects_3d
3 5 4 2
0.00 0.12 0.16 0.18 0.22
0.00 0.80 0.90 0.96
1 2
0.00 0.00 0.00 0.00 0.00
0.00 0.01 0.02 0.04 0.08
0.00 0.02 0.04 0.08 0.10
0.00 0.04 0.08 0.10 0.16
0.00 0.00 0.00 0.00 0.00
0.00 0.02 0.03 0.05 0.09
0.00 0.03 0.05 0.09 0.11
0.00 0.05 0.09 0.11 0.17
end
For device D1, ox and oy are 0.18 μm and 0.96 μm, respectively. The z flag is 1 for
diffusion rounding. From the input table data shown earlier, 0.18 μm is x4, 0.96 is y4 and 1
is z1. The IC Validator tool returns the value intersecting vx4, vy4, and vz1. This value is 0.1
μm.
For device D2, px and py are 0.2 μm and 0.8 μm, respectively. The z flag is 2 for poly
rounding. From the input table data, interpolation is required because 0.2 μm is between
the input values x4 and x5. The value 0.8 μm, however, is y2. The z value is noted as z2.
The IC Validator tool returns a value based on this interpolation equation:
In the following example, a three-dimensional table is used because different return values
exist for diffusion and poly rounding. If a higher degree of table data hierarchy is needed,
increase the table dimension. For example, a four-dimensional table might be needed if
the return value differs based on whether the chip block was analog or digital.
The following NMOS extraction example demonstrates the runset usage of table-based
extraction with a resultant layout netlist.
my_mos_prop_func : function(void) returning void
{
DFM : list of double = {};
EV_W1 = mos_width_1();
EV_W2 = mos_width_2();
EV_L1 = mos_length_1();
EV_L2 = mos_length_2();
py : polygon_set = dev_processing_layer("py");
oy : polygon_set = dev_processing_layer("oy");
poly_route : polygon_set = dev_processing_layer("poly_route");
px : polygon_set = dev_processing_layer(px);
ox : polygon_set = dev_processing_layer(ox);
DFM.push_back(DIFFx);
DFM.push_back(DIFFy);
DFM.push_back(1.0);
delta_width = mos_get_dfm_double("rounding_effects_3d", DFM);
DFM = {};
DFM.push_back(POx);
DFM.push_back(POy);
DFM.push_back(2.0);
delta_length = mos_get_dfm_double("rounding_effects_3d", DFM);
nmos(matrix,
device_name = "table_base_nmos",
drain = src_drn,
gate = gate,
source = src_drn,
processing_layer_hash = {
"py" =>{py},
"oy" =>{oy},
"poly_route" =>{poly_route},
"px" =>{px},
"ox" =>{ox}
},
recognition_layer = gate_size,
properties = {{"effective_width", DOUBLE},
{"effective_length", DOUBLE}},
property_function = my_mos_prop_func
);