Icvlvsug
Icvlvsug
LVS
User Guide
Version O-2018.06, June 2018
Copyright Notice and Proprietary Information
©2018 Synopsys, Inc. All rights reserved. This Synopsys software and all associated documentation are proprietary to
Synopsys, Inc. and may only be used pursuant to the terms and conditions of a written license agreement with
Synopsys, Inc. All other use, reproduction, modification, or distribution of the Synopsys software or the associated
documentation is strictly prohibited.
Destination Control Statement
All technical data contained in this publication is subject to the export control laws of the United States of America.
Disclosure to nationals of other countries contrary to United States law is prohibited. It is the reader's responsibility to
determine the applicable regulations and to comply with them.
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH
REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Trademarks
Synopsys and certain Synopsys product names are trademarks of Synopsys, as set forth at
http://www.synopsys.com/Company/Pages/Trademarks.aspx.
All other product or company names may be trademarks of their respective owners.
Free and Open-Source Software Licensing Notices
If applicable, Free and Open-Source Software (FOSS) licensing notices are available in the product installation.
Third-Party Links
Any links to third-party websites included in this document are for your convenience only. Synopsys does not endorse
and is not responsible for such websites and their practices, including privacy practices, availability, and content.
Synopsys, Inc.
690 E. Middlefield Road
Mountain View, CA 94043
www.synopsys.com
1. LVS Overview
LVS Compare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-2
Global Netlist Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4
The push_down_pins Argument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4
Using the remove_dangling_nets Argument . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6
Equivalence Point Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6
Equivalence Point Comparison. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-7
Hierarchical Treatment of Failed Equivalence Cells . . . . . . . . . . . . . . . . . . . . . 1-8
Filtering Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9
Merging Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9
Parallel Merging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9
Series Merging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10
Shorting Equivalent Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-12
Comparing the Schematic and Layout Netlists . . . . . . . . . . . . . . . . . . . . . . . . . 1-14
Defining Match Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-14
Handling Circuit Symmetry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-14
Compare Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-20
Net Mismatches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-22
Instance Mismatches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-25
Property Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-28
iii
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
2. Netlist Formats
NetTran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2
Translating Netlists to IC Validator Format Using NetTran . . . . . . . . . . . . . . . . 2-2
Netlist Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3
Skeletal Equivalence File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3
Wire Resolution Log File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3
Command-Line Syntax for NetTran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-4
Translating Standard Netlists to IC Validator Format. . . . . . . . . . . . . . . . . . . . . 2-12
Property Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-13
SPICE Translation Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-13
CDL Map File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-14
Verilog Translation Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-15
Creating a Skeletal Equivalence File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-15
Comments in Output Netlist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-15
Cell-Specified Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-15
Instance-Specified Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-17
Global Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-17
SPICE Netlist Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-18
Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-18
Bipolar Transistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-18
Capacitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-19
Diode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-21
Inductor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-22
JFET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-22
MOSFET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-23
Resistor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-25
Cell Definition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-26
Nested Cells Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-27
Cell Instance Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-28
String Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-31
Double-Quoted String Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-31
Duplicate Ports Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-32
Identical Cells Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-33
Duplicate Cells Definition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-33
Duplicate Cell Instance Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-33
Control Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-34
.GLOBAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-34
.CONNECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-35
Contents iv
IC Validator LVS User Guide Version O-2018.06
.INCLUDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-35
.PARAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-36
*.BUSDELIMITER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-37
*.CAPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-37
*.CONNECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-37
*.DIODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-37
*.EQUIV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-37
*.RESI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-38
*.SCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-39
.OPTION SCALE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-40
Classifying Nonstandard Numeric SPICE Parameters . . . . . . . . . . . . . . . . 2-40
Line Continuation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-41
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-42
Verilog Netlist Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-42
Cell Definition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-42
Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-42
Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-43
Instance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-43
Assign Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-44
Bus (Vector) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-44
Defining Global Supply Nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-45
Defining Local Supply Nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-45
Supply Net Translation Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-45
The -verilog-busLSB Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-47
Verilog Compiler Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-49
Chapter 1: Contents
Contents 1-vv
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
6. Layout-Versus-Schematic Flows
Creating a Black-Box LVS Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-2
Setting Up a Black-Box Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-2
Usage Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-3
Example 1: All Ports Match Between Netlists . . . . . . . . . . . . . . . . . . . . . . . 6-4
Example 2: Port Names Do Not Match Between Netlists . . . . . . . . . . . . . . 6-4
Example 3: Extra Ports in Layout Black-Box Cell . . . . . . . . . . . . . . . . . . . . 6-5
Example 4: Extra Schematic Ports on Black-Box Cells . . . . . . . . . . . . . . . 6-8
Example 5: Extra Untexted Layout Ports on Black-Box Cells. . . . . . . . . . . 6-10
Example 6: Untexted Layout Ports on Black-Box Cells . . . . . . . . . . . . . . . 6-11
Example 7: Symmetry and Black-Box Cells . . . . . . . . . . . . . . . . . . . . . . . . 6-13
Contents vi
IC Validator LVS User Guide Version O-2018.06
8. Netlist Modification
Merging Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-2
Merging Parallel Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-2
Merged Device Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-6
Excluding Merging by Tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-8
Custom Merging Equations for Device Properties . . . . . . . . . . . . . . . . . . . . . . . . . . 8-9
Series Merging Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-11
Parallel Device Merging Short Equivalent Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-18
Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-21
Filtering Standard Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-22
Custom Filtering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-24
Chapter 1: Contents
Contents vii
1-vii
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
Contents viii
Preface
This preface includes the following sections:
• About This User Guide
• Customer Support
1-ix
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
Audience
This user guide is designed to enhance both beginning and advanced users’ knowledge of
LVS.
Related Publications
For additional information about the IC Validator tool, see the documentation on the
®
Synopsys SolvNet online support site at the following address:
https://solvnet.synopsys.com/DocsOnWeb
You might also want to see the documentation for the following related Synopsys products:
™
• Custom Compiler
• IC Compiler™
• IC Compiler II™
• StarRC™
Release Notes
Information about new features, enhancements, changes, known limitations, and resolved
Synopsys Technical Action Requests (STARs) is available in the IC Validator Release Notes
on the SolvNet site.
To see the IC Validator Release Notes,
1. Go to the SolvNet Download Center located at the following address:
https://solvnet.synopsys.com/DownloadCenter
2. Select IC Validator, and then select a release in the list that appears.
Chapter 1: Preface
About This User Guide 1-x
IC Validator LVS User Guide Version O-2018.06
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
Chapter 1: Preface
About This User Guide 1-xi
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
Customer Support
Customer support is available through SolvNet online customer support and through
contacting the Synopsys Technical Support Center.
Accessing SolvNet
The SolvNet site includes a knowledge base of technical articles and answers to frequently
asked questions about Synopsys tools. The SolvNet site also gives you access to a wide
range of Synopsys online services including software downloads, documentation, and
technical support.
To access the SolvNet site, go to the following address:
https://solvnet.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 SolvNet site, click HELP in the top-right menu bar.
Chapter 1: Preface
Customer Support 1-xii
1
LVS Overview 1
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
1-1
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
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-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 1-4.
Figure 1-4 Merged Ports Using the push_down_pins Argument
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.
• Instance counts
• Port counts
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.
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
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)
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 1-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 1-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
);
argument is SAME_DEVICE_NAME_ONLY, the nodes are shorted only when the MOS devices
belong to the same device_name. To short any device of the same device type, set
short_nodes to ANY_DEVICE_NAME.
In the following example, all NMOS devices with device_name equal to “nm1” have
equivalent nodes shorted, if they meet the width ratio tolerance of within 15 percent.
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 1-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.
Figure 1-12 Shorted Equivalent Nodes
There are four different mappings that occur when you compare the schematic and layout
circuits. Table 1-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 1-15.
Assume that the net names in the parent cell in the schematic and layout are intended to be
matched. Refer to Table 1-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
In Figure 1-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 in order to swap A and B, you must also swap Net1 with
Net2.
Figure 1-16 Port Swappability
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 1-18.
Figure 1-18 Corresponding Net Names
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 1-2
Schematic Layout
A = A
B = B
Net1 = Net1
Schematic Layout
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 1-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 1-3.
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 1-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 1-21.
Figure 1-21 Net Mismatches
For this case, the IC Validator tool issues a diagnostic summary, as shown in Figure 1-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.
Figure 1-22 Diagnostic Summary
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.
Figure 1-24 shows the format of a diagnostic message for extra layout devices.
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 1-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 1-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.
Figure 1-26 Property Mismatches
This chapter describes NetTran (a netlist translation utility) and the SPICE and Verilog netlist
formats.
2-1
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
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.
SPICE
Verilog
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 2-2. The IC Validator netlist format contains a
hierarchical description of schematic devices and their interconnections.
Figure 2-2 LVS Process Flow
IC Validator
Format Netlist Compare
engine
Layout Netlist
(from extraction)
Equivalence
cell pairings
Runset
Table 2-1 describes the general purpose NetTran command-line options. Table 2-2 and
Table 2-3 describe the command-line options specific to SPICE and Verilog.
Option Description
-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.
-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 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.
Option Description
-fopen model_name ... Filters out devices with the specified model names. The nets
that used to be 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
-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” on page 2-34 for more information
about the .GLOBAL statement.
Option Description
-logFile file Specifies the summary log file name. The default name is
icv_nettran.log.
-outType netlist_type Specifies the output netlist type: ICV, SPICE, VERILOG. The
default is ICV.
Limitation: Only use the SPICE netlist type to translate
VERILOG+SPICE. Other input combinations, such as
ICV+SPICE, might not give correct results.
Option Description
-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” on page 2-15 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.
-undefFile file Specifies the file name to which undefined cells are written.
Table 2-2 describes the NetTran command-line options for the translation of SPICE netlists.
Table 2-2 SPICE Translation Command-Line Options
Option Description
Option Description
-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-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.
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
Option Description
-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 2-3 describes the NetTran command-line options for the translation of Verilog netlists.
Table 2-3 Verilog Translation Command-Line Options
Option Description
-verilog-addDummyDev Adds dummy resistors to ports of the top cell in the Verilog
devName netlist.
-verilog-busLSB Specifies that the Verilog bus starts with the least significant
bit (0).
-verilog-localizeGlobal Disables the global net generation of global supply nets. See
Supply “Supply Net Translation Precedence” on page 2-45.
You can disable all global net generation in this numeric value
translation by specifying the
-verilog-localizeModuleSupply and
-verilog-localizeGlobalSupply command-line options.
Option Description
-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.
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 2-4.
Table 2-4 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
M mega 1e+6
G giga 1e+9
T tera 1e+12
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
To generate a log file of all wire construction, set the -wireLog NetTran command-line
option. The wireLog file reports the original preshorted net name and the new postshorted
net name.
The syntax is
icv_nettran -icv infile -wireLog wire_log_file -outName netlist
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
)
)
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
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.
$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
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 pdio AREA=20
D3 a b ndio AREA=1 PJ=4 $SUB=GND
Argument Description
[AREA=]area Optional. Represents the diode area value. It must be a numeric value or a
parameter.
[PJ]=pj Optional. Represents the diode periphery 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
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 b R=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
.SUBCKT cell_name [n1 ...] [param=val]
...
.ENDS [cell_name]
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. 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.
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.
Argument Description
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.
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
.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.
The IC Validator tool provides mechanisms for handling duplicate cell instances. For
example, you specify a duplicate cell instance by using the
resolve_duplicate_instances argument of the schematic() and
read_layout_netlist() functions or the -sp-resolveDupInstances command-line
option.
For example,
.SUBCKT child GND VDD QN A B
...
.ENDS
.SUBCKT top GND VDD A1 B1 A2 B2
X1 A B C D E child
X1 C B D A E child
.ENDS
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
.GLOBAL node ... node
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
.CONNECT net1 net2
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.
.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
.PARAM paramname = number
• Global parameter
.PARAM w=3u
.subckt SUB a b
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
*.EQUIV new_name = old_name
For example,
*.EQUIV VSS=gnd! VSS=gnda! VSS=vss
*.RESI
The *.RESI statement specifies the threshold value (tvalue) or model name (mname) of the
shorted resistors. If the resistance between any two nodes in the resistor 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 (modelName).
The default threshold value is 2000 for *.RESI statements that have no listed 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 *.RESI statement with the default of 2000).
The syntax is
*.RESI [[=] [tvalue]] [[mname1]] [[mname2]] ...
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-dimensional geometric,
two-dimensional geometric, or nongeometric properties by using the *.LENGTH_UNIT,
*.AREA_UNIT, and *.NON_UNIT statements.
Multiple .OPTION SCALE statements are allowed, but a later .OPTION SCALE overrides the
previous one.
If the .OPTION SCALE statement is inside a .SUBCKT, it must be the first line or NetTran
reports an error. Even inside a .SUBCKT, its scope is still global within the netlist.
If NetTran merges multiple netlists into a single netlist, each netlist uses its own definition of
.OPTION SCALE.
If .OPTION SCALE is set to a scale factor, the value is resolved to a nonscale number, with a
warning message from NetTran. For example, 1u is resolved to 1e-06.
The syntax is
.OPTION SCALE=scalefactor
• *.AREA_UNIT:
In addition to devices parameter names prefixed with A, the *.AREA_UNIT statement
treats additional parameter names such as area scaling during NetTran unit conversion.
The syntax is
*.AREA_UNIT parameter_1(device_type_1) ... parameter_n(device_type_n)
• *.NON_UNIT:
The *.NON_UNIT statement excludes parameter names prefixed with W, L, P, or A from
NetTran unit conversion. The syntax is
*.NON_UNIT parameter_1(device_type_1) ... parameter_n(device_type_n)
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)
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
module cell_name(port1, ..., portN);
...
endmodule
Port
The syntax for port declaration is
Format 1:
module cell_name list_of_port_name;
list_of_port_declaration1
endmodule
Format 2:
module cell_name list_of_port_name_declaration2;
endmodule
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
model_name instance_name (connections);
Assign Statements
NetTran shorts two nets if there is a Verilog assign statement. The syntax is
assign old_name = new_name;
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
You can disable all global net generation in this numeric value translation by specifying both
the -verilog-localizeModuleSupply and -verilog-localizeGlobalSupply options.
Table 2-14 illustrates the 1'b1 translation under various combinations of conditions.
Table 2-14 1’b1 Translation
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-2, the IC Validator netlist is as
shown in Example 2-3, and the IC Validator netlist translated with the -verilog-busLSB
option is as shown in Example 2-4.
Example 2-2 Verilog Netlist
module top ();
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]}}
}
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
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"
This chapter describes the different methods the IC Validator tool uses to create substrate
layers for different processes.
3-1
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
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 3-1 shows the cell_extent : not method. Example 3-2 shows the buildsub
method.
Example 3-1 cell_extent : not Method
sub1 = cell_extent(
cell_list = {"*"}
);
psub = sub1 not NWELL
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 3-1 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 3-2 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 3-2 Gray Output Layer From cell_extent : not Method
Figure 3-3 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.
Figure 3-3 Gray Output Layer From buildsub Method
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 3-3 shows a PMOS device with two bulk layers:
Example 3-3 PMOS Device
pmos(my_devices, "p", psd, pgate, psd, {{device_layer=NWELL,
pin_name="BULK1"}, {device_layer=psub, pin_name="BULK2"}})
Figure 3-4 shows the yellow NWELL layer is subtracted from the gray generated psub layer
using the cell_extent : not method. 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 3-4. 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.
Example 3-4 Missing Bulk Connection
runset.rs:108:pmos[p]:device extraction errors
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Structure Pin Error Type (position x, y)
- - - - - - - - - - - - - - - - - - - - - - - - - - -
invb BULK2 MISSING_TERMINALS (5.5000, 35.7500)
nor2b BULK2 MISSING_TERMINALS (5.5000, 35.7500)
nor2b BULK2 MISSING_TERMINALS (8.5000, 35.7500)
nor3b BULK2 MISSING_TERMINALS (11.5000, 35.7500)
nor3b BULK2 MISSING_TERMINALS (7.5000, 35.7500)
nor3b BULK2 MISSING_TERMINALS (15.5000, 35.7500)
nand2b BULK2 MISSING_TERMINALS (5.5000, 35.7500)
In Figure 3-5, the cell_extent : not method creates untexted ports to upper-level
cells in the netlist with port 2.
Example 3-5 Untexted Ports to Upper-Level Cells
{CELL invb
{PORT 2 GND VDD Z A}
{PROP top=50.000000 bottom=0.000000 left=0.000000 right=12.000000}
{INST M1=n {TYPE MOS} {COORD x=5.5000 y=10.5000}
{PROP l=1.0000 w=13.0000}
{PIN Z=DRN A=GATE GND=SRC 2=BULK}}
{INST M2=p {TYPE MOS} {COORD x=5.5000 y=35.7500}
{PROP l=1.0000 w=20.5000}
{PIN Z=DRN A=GATE VDD=SRC VDD=BULK}}
}
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 3-6, use the cell_extent : not method or use the
manual buildsub method, as shown in Example 3-7.
The manual buildsub method, as shown in Example 3-7 is logically equivalent to the
buildsub method. However, this method uses the pull_down_to() and
copy_by_layout_equiv_cells() functions to pull the output polygons to only the
equivalence cells. This is a much less intrusive pull-down step, which outputs a cleaner,
more efficient polygon than the polygon generated by the published buildsub method.
Example 3-7 Manual buildsub Method
manual_buildsub : function (
layer1 : polygon_layer,
oversize_value: double = 0.0
) returning isolated_regions : polygon_layer {
all_cells_extent = cell_extent( cell_list = {"*"} );
equiv_cell_extent = copy_by_layout_equiv_cells(all_cells_extent);
all_cell_extent_pgon = copy(equiv_cell_extent);
CHIP_LAYER=size( all_cell_extent_pgon, oversize_value);
sized_chip_layer=size(CHIP_LAYER, 0.01);
chip_ring=sized_chip_layer not CHIP_LAYER;
layer1_touch_chip_edge = layer1 interacting chip_ring;
new_chip_extent = ( CHIP_LAYER not layer1_touch_chip_edge);
layer1_donuts = donuts(layer1);
negate_layer1_layer =not (CHIP_LAYER, layer1_donuts);
isolated_regions = new_chip_extent not ( new_chip_extent not
negate_layer1_layer);
isolated_regions = pull_down_to( isolated_regions,
equiv_cell_extent, duplicate=ALL );
);
psub = manual_buildsub(NWELL);
This chapter describes the device functions and arguments, which include device names,
terminals, and extraction information.
4-1
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
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 4-1.
All terminals touch the body layer (A) and use a recognition layer when terminals do not
touch the body layer (B).
Figure 4-1 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 4-2.
Figure 4-2 Processing Layer Interaction With the Device
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 two few terminals (see Figure 4-3). If a bipoloar 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 4-3. 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 4-1 shows how to generate the layers and the pnp() function.
Example 4-1 Vertical BJT
pnp_collector = BJT_BORDER;
pdiff = DIFFUSION and PPLUS;
pdev = pdiff and NWELL;
psd = pdev not POLY;
pnp_emitter = psd and BJT_BORDER;
pnp_base = NWELL and BJT_BORDER;
…
input_cdb = incremental_connect(
connect_sequence = input_cdb,
connect_items = {{{pnp_collector}, psub},
{{pnp_base}, welltie},
{{pnp_emitter}, psd}}
);
…
pnp(
matrix = my_devices,
device_name = "PNP_VERTICAL",
collector = pnp_collector,
base = pnp_base,
emitter = pnp_emitter,
body_position = COLLECTOR,
recognition_layer=BJT_BORDER
);
Example 4-2 shows how to generate the layers and the pnp() function.
Example 4-2 Lateral BJT
pdiff = DIFFUSION and PPLUS;
pdev = pdiff and NWELL;
psd = pdev not POLY;
pnp_collector = psd not EMITTER_MK;
pnp_emitter = psd and EMITTER_MK;
pnp_base = interacting(NWELL, p_emitter);
…
input_cdb = incremental_connect(
connect_sequence = input_cdb,
connect_items = {{{pnp_collector}, psd},
{{pnp_base}, welltie},
{{pnp_emitter}, psd}}
);
…
pnp(
matrix = my_devices,
device_name = "PNP_LATERAL",
collector = pnp_collector,
base = pnp_base,
emitter = pnp_emitter,
// Only the base touches all layers, so it is the body
body_position = BASE
);
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 4-6. 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.
Figure 4-6 Metal-to-Metal Capacitor (A. Layout, B. Generated Layers)
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 4-7.
Figure 4-7 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 4-8.
Figure 4-8 Diode Drawn in Layout (A) and Generated Layers for the pn() Function (B)
Example 4-5 shows how to generate the layers and specify the device in the pn() function.
Example 4-5 Diode Extraction
ndiff = DIFFUSION not PPLUS;
pdiff = DIFFUSION not ndiff;
pdev = pdiff and NWELL;
anode = pdev not POLY;
cathode = NWELL;
…
input_cdb = incremental_connect(
connect_sequence = input_cdb,
connect_items = {{{anode}, psd},
{{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 4-9.
Figure 4-9 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 4-10 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 4-10 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 4-11 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 4-11 Polysilicon Resistor Layout (A) and Generated Layers for Device Extraction (B)
Example 4-8 shows a polysilicon resistor formed by a silicide block layer with silicided
polysilicon terminals.
Example 4-8 Resistor Extraction
poly_resistor = POLY and SILICIDE_BLK;
poly_field = POLY not SILICIDE_BLK;
…
input_cdb = incremental_connect(
connect_sequence = input_cdb,
connect_items = {{{poly_field}, contact}
}
);
…
resistor(
matrix = my_devices,
device_name = "poly_resistor",
device_body = poly_resistor,
terminal_a = poly_field,
termaial_b = poly_field,
optional_pins = {{psub}},
resistor_value = 20
);
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.
5-1
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
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 5-1.
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 5-1. The default property and property calculation function
definitions are in the function prototypes in $ICV_HOME_DIR/include/device_public.rh.
Table 5-1 Device Extraction Function Default Properties
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
capacitor()
area_capval. Capacitance per unit area coefficient for parallel plate capacitance. The
default is 0.
coinedge_capval. Capacitance per unit length for coincident edges between the first
and second terminal layers. The default is 0.
fringe_edge_capval. Capacitance per unit length coefficient for the first terminal layer
overlapping the edge of the second terminal layer. The default is 0.
perim_capval. Capacitance per unit length coefficient for edges of the overlapping area
that are not otherwise accounted for by the coincident edge or fringe edge coefficients.
The default is 0. When coinedge_capval is 0, the coincident edges are considered part
of the perimeter. When fringe_edge_capval is 0, the fringe edges are considered part
of the perimeter.
If all of the coefficients are 0, the default calculation for the capacitance property “c” is 0.
cap_ capacitor()
gdm_ gendev_manual()
ind_ inductor()
res_ resistor()
In addition to the device utility functions, the general-purpose functions, which include math
functions, string functions, diagnostic functions, and number conversion functions, can be
used in the device property calculation functions. One function that can be particularly useful
when writing and debugging property functions is the note()diagnostic function.
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-1
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
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"}}
);
The use of arguments available in the lvs_black_box_options() function that control the
black-box configuration is discussed in the “Usage Models” section.
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
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}
and the ports are removed in the first run, a second IC Validator run is needed to
complete the LVS run. For example,
lvs_black_box_options(
equiv_cells = {{"invb","invb"}},
remove_layout_ports = {"B"}
);
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.
❍ 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"}
);
❍ 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 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
The results are the same as in Example 3.
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
},
...
);
untexted_layout_ports = ERROR,
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.
Table 6-1 summarizes the modes. Details of the modes are discussed in following sections.
Table 6-1 Netlist-Versus-Netlist Modes
Partial runset Mostly standard devices are defined in Device mapping functions are
netlists. This is a topological comparison required for nonstandard devices.
with merging, filtering, and checking of The runset is fully configurable for
properties. compare settings.
Full runset A combination of standard and nonstandard Device mapping functions are
devices are defined in the netlists. This is a required for all devices. The runset is
topological comparison with merging, fully configurable for compare
filtering, and property checking settings.
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.
capacitor() map_capacitor()
gendev() map_gendev()
Table 6-2 Device Configuration and NVN Mapping Functions Correspondence (Continued)
inductor() map_inductor()
nmos() map_nmos()
np() map_np()
pmos() map_pmos()
npn() map_npn()
pn() map_pn()
pnp() map_pnp()
resistor() map_resistor()
• 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
Implicit type mappings must not conflict. This means that the mapping of device name to
device type must be consistent across all calls to compare-related functions. When a conflict
occurs, an error occurs.
The following is an example partial NVN runset:
• Input schematic netlist (ADD4_sch.sp):
.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
• 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
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-1
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
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 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.
Appendix7:7:Compare
Chapter CompareFunctions
FunctionsBasics
Basics
Precedence Rule 7-3
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
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.
8-1
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
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.
Syntax
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
);
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
);
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 8-2. In the schematic, the na device has L=0.5, which might
cause an LVS failure depending on the check_property() function tolerances.
Figure 8-2 Modified Netlists
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 8-3.
In the layout netlist, the na devices are merged and the nb devices are not merged, as
shown in Figure 8-4.
Figure 8-4 Modified Netlists
In the layout netlist, L=0.5 is the minimum instead of L=0.525 for the merged na device. See
Figure 8-6.
Figure 8-6 Modified Netlists
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 8-8.
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 the in the 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 8-12.
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 8-14. 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 8-15.
Syntax
short_equivalent_nodes(
state =
compare_state,
device_type =
NMOS | PMOS,
device_names =
{"string", ...}, //optional
short_nodes =
SAME_DEVICE_NAME_ONLY | ANY_DEVICE_NAME,
//optional
width_ratio_tolerance = {tolerance = doubleconstraint,
tolerance_type = RELATIVE | ABSOLUTE},
//optional
equiv_cells = {{schematic_cell = "string",
layout_cell = "string"},
...}, //optional
stack_type = {SERIES_PARALLEL} //optional
);
Syntax
short_equivalent_nodes_off(
state = compare_state,
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 8-23, 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 8-24.
Figure 8-24 Modified Netlists
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 use-function file that is referenced in the compare() function.
#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"
);
This chapter explains the table-based functionality for design for manufacturing (DFM).
9-1
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
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 9-1 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.
Figure 9-1 Effective Channel Width and Length
L
poly
rounding
W
D1 D2 poly
W diffusion
diffusion L
rounding
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.
Appendix9:9:Table-Based
Chapter Table-BasedLookup
LookupFunctionality
Functionality
Using Table-Based Lookup 9-3
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
• 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
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
);
Appendix9:9:Table-Based
Chapter Table-BasedLookup
LookupFunctionality
Functionality
Table-Based Lookup Example 9-5
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
rounding effects). These layers are collected by device extraction and processed by
layer-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.
Figure 9-3 Example Effective Channel Width and Length
px=0.2
py=0.8
W=1.56
D1 D2 poly
ox=0.18
diffusion
oy=0.96 L=0.30
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:
x – x4
V(v x v y2 v z2) = v x v y2 v z2 + ---------------- v x5 – v x4
x5 – x4
0.20 – 0.18
V(v x v y2 v z2) = 0.05 + ------------------------------- 0.09 – 0.05
0.22 – 0.18
V(v x v y2 v z2) = 0.07
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);
Appendix9:9:Table-Based
Chapter Table-BasedLookup
LookupFunctionality
Functionality
Table-Based Lookup Example 9-7
IC Validator LVS
IC Validator LVS User
User Guide
Guide O-2018.06
Version O-2018.06
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
);