Professional Documents
Culture Documents
User Guide
Version L-2016.03, March 2016
Copyright and Proprietary Information Notice
© 2016 Synopsys, Inc. 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.
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
Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . lv
Customer Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . lvi
1.
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
SiliconSmart Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
SiliconSmart Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
SiliconSmart Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Entering SiliconSmart Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Command Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Specifying Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.
Setting Up SiliconSmart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Managing Your Job Scheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Setting a Job Scheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Stand-Alone Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Load Sharing Facility (LSF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Sun Grid Engine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
RTDA NC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Using CDPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
CDPL Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Using CDPL Parameters in SiliconSmart. . . . . . . . . . . . . . . . . . . . . . . . . 15
Launch Control Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Worker Control Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
CDPL Logs and Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Viewing CDPL Runtime Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
CDPL Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Parameters for Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Debugging Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Monitoring Log Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
v
Contents
Secondary Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Additional CDPL Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Automatic Reruns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Using RSH to Create a Custom Pool . . . . . . . . . . . . . . . . . . . . . . . . 23
Prevent CDPL from Clogging the Home Directory . . . . . . . . . . . . . . 24
Resetting Farm/Queue Settings During the Flow . . . . . . . . . . . . . . . 24
Managing Licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Obtaining a New SiliconSmart License . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Upgrading Licenses . . . . . . . . . . . . . . . . . . 25
Selecting a Simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Running with FineSim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Running with FineSim Multiple-CPU Simulation . . . . . . . . . . . . . . . . . . . 27
Running with FineSim-Embedded . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Compatibility with FineSim-Embedded. . . . . . . . . . . . . . . . . . . . . . . 29
Disk Space Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Using finesim_embedded with Verilog-A Model . . . . . . . . . . . . . . . . 29
Running with HSPICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Running with HSPICE in Client Server Mode . . . . . . . . . . . . . . . . . . . . . 30
Running with HSPICE-Embedded . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Setting Simulator Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Specifying Simulator Options for Leakage . . . . . . . . . . . . . . . . . . . . 32
Setting Default Simulator Options . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Setting Up Your Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.
SiliconSmart Data Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Data Flow Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Basic Data Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Creating the Characterization Point . . . . . . . . . . . . . . . . . . . . . . . . . 36
Setting Global Parameters for all Cells. . . . . . . . . . . . . . . . . . . . . . . 36
Importing Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Customizing Cell Instance Files (Optional) . . . . . . . . . . . . . . . . . . . 37
Precharacterizing (Optional). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Configuring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Characterizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Modeling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
New Characterization versus Recharacterization . . . . . . . . . . . . . . . . . . 39
Setting Up for Your Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Requirements for Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
vi
Contents
Launching SiliconSmart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Modifying the Log File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Creating a Characterization Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Editing the configure.tcl File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Setting Your Characterization Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Selecting a Characterization Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Select by Your Starting Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Select by Characterization Approach. . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Recharacterization Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Pure Recharacterization Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Flow Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Functional Recognition Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Flow Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Skeleton Liberty-Based Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Flow Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Incremental Characterization Flow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Flow Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Recharacterization with Selective Extraction of Information from an Existing
Liberty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Extracting All Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Extracting Loads and When Conditions . . . . . . . . . . . . . . . . . . . . . . 58
Extracting Slews and When Conditions . . . . . . . . . . . . . . . . . . . . . . 58
Extracting Port Directions and Functional Information . . . . . . . . . . . 59
Combining Import-Based Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Function-Based Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Extracting a Function from the Netlist with FR . . . . . . . . . . . . . . . . . . . . . 60
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Using Commands in this Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Manually Defining a Function in the Instance Files . . . . . . . . . . . . . . . . . 61
Structure-Based Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Automatic Vector Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Using Commands in this Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Manually Defining Simulation Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Sequence-Based Flow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Additional Flow Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
vii
Contents
4.
Importing and Configuring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Editing the configure.tcl File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Global Configuration Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Pin Type Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Asymmetric Slew Thresholds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Setting Pin Type Parameter Defaults . . . . . . . . . . . . . . . . . . . . . . . . 73
Operating Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Example configure.tcl File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Importing Cells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Editing Instance Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Specifying Netlist Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Defining Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Describing Cell Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Specifying Characterization and Modeling Options . . . . . . . . . . . . . . . . . 81
Specifying Pin Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Example Instance Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Example 1 — Complete Instance File . . . . . . . . . . . . . . . . . . . . . . . 83
Example 2 — Two-Input And-Or-Inverted Combinational Cell . . . . . 84
Example 3 — Flip-Flop with Asynchronous Set Pin . . . . . . . . . . . . . 85
Cell Types and Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Combinational Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Boolean functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Truth Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Sequential Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Flops and Latches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
State Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Complementary Inputs and Differential Pins . . . . . . . . . . . . . . . . . . . . . . 94
Specifying Pins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Specifying Behavior and Conditions. . . . . . . . . . . . . . . . . . . . . . . . . 96
I/O Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Memory Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Multi-Bit Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
viii
Contents
ix
Contents
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Modeling Multi-Bit Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Setting Advanced Configuration Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Using the set_config_opt Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Basic Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Specifying set_config_opt -type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Applying Load Harness to a Cell . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Setting Pin Type Parameters for Arc-Based Measurements . . . . . . 152
State Dependent Measurements (State Partitioning). . . . . . . . . . . . 152
State Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Disabling Measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Controlling Don’t Care Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Table Dimensions and Sweep Order . . . . . . . . . . . . . . . . . . . . . . . . 157
Controlling the Output Pin in Constraint Measurements . . . . . . . . . 159
Excluding Output Pins during Constraint Measurement. . . . . . . . . . 159
Working with Extreme Constraint Values . . . . . . . . . . . . . . . . . . . . . 161
Multicycle Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Separate Cell Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Specifying Load and Slew Ranges. . . . . . . . . . . . . . . . . . . . . . . . . . 163
Default Arc Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Controlling Generation of Default Arcs . . . . . . . . . . . . . . . . . . . . . . . 166
Generating Default Tables for Constraint Arcs . . . . . . . . . . . . . . . . . 167
Generating Default Tables for Power Arcs . . . . . . . . . . . . . . . . . . . . 168
Generating Default Tables for Leakage Power Arcs . . . . . . . . . . . . . 168
How are Default Tables Created?. . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Changing Characterization Parameters of Pins . . . . . . . . . . . . . . . . . . . . 172
Partial Voltage Swings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
nochange Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Simulation Harnesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Creating a Harness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Output Loads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Setting Measurement and Stimulus Nodes . . . . . . . . . . . . . . . . . . . 178
Power in Simulation Harnesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Applying a Harness to a Circuit Under Test . . . . . . . . . . . . . . . . . . . 180
Example for Applying a Harness to a Cell . . . . . . . . . . . . . . . . . . . . 181
Weak Drive States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Specifying Weak Drive States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Setting Parameters for Weak Drive States . . . . . . . . . . . . . . . . . . . . 183
Using Different Simulators for Different Measurements . . . . . . . . . . . . . . 183
Autoranging and Automatic Parameter Determination . . . . . . . . . . . . . . . 184
Drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Selecting the Driver Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Importing Driver Cells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
x
Contents
5.
Characterizing and Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Precharacterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Before Precharacterization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Simulation-Related Settings for Precharacterization . . . . . . . . . . . . 200
Binning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Using model_expanded_states . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Using the precharacterize Command. . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Additional Precharacterization Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Family-Based Precharacterization . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Event-Based Precharacterization. . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Characterization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Before Characterizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Using the characterize Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Running Selective Simulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Recharacterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Recharacterizing without a configure.tcl File . . . . . . . . . . . . . . . . . . . . . . 208
Generating Models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Using the model Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Distributed Modeling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Generated Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Automatic Default Arc Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Model Preprocessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Suggested Usage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Enabling MPP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Using Non-HSPICE Simulators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Running MPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Netlist Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Failures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Example Netlists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Liberty Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Supported Construct Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Styling Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Writing Min/Max Capacitance and Min/Max Transition Attributes . . 217
Slew Derating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Generic Slew Derating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
xi
Contents
6.
Memory Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
SiliconSmart Memory Support. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Supported Simulators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Memory Characterization Data Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Recommended Memory Characterization Flows . . . . . . . . . . . . . . . . . . . 240
Basic Memory Characterization Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Using this Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Using Commands in this Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Memory Recharacterization Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Using this Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Incremental CCSN Memory Characterization Flow . . . . . . . . . . . . . . . . . 242
Using this Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Using Commands in this Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Excluding Generation of CCSN Models . . . . . . . . . . . . . . . . . . . . . . 245
Generating Single CCBs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Example Run Script for CCS-Noise Add-On Flow . . . . . . . . . . . . . . 246
Enabling Donut-Style Memory Netlists for CCS-Noise . . . . . . . . . . . . . . 247
Importing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Creating the Template File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Template File Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Template File Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
xii
Contents
Configuring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
configure.tcl Checklist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
configure.tcl File Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Defining the Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Instance File Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Example Instance Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Synchronous 2-port Register File. . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Synchronous 2-port SRAM with Independent Read and Write Operation
267
Synchronous ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Finding Internal Nodes for Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Memory Characterization Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Active Node Based Netlist Pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Using Constraint Seeds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
FineSim Pro Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Memory Characterization through Back-Annotation . . . . . . . 276
Usage 1 . . . . . . . . . . . . . . . . . . . . . 276
Usage 2 . . . . . . . . . . . . . . . . . . . . . 277
Limitations with Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Liberty Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Input Capacitance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Setup/Hold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
CCS Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Individual Bit Modeling Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Extra-Margin Adjustment Pins in Memories . . . . . . . . . . . . . . . . . . . . . . . 282
Path Based Constraint Support for Memories . . . . . . . . . . . . . . . . . . . . . . . . . 284
User-Defined Node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Defining New Pintypes . . . . . . . . . . . . . . . . 287
Auto-Generated Node . . . . . . . . . . . . . . . . . . 287
xiii
Contents
Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Modeling Statistical Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Sensitivity and Sigma Calculation . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Statistical Hold Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
stat_hold Characterization Using the Monte Carlo Approach . . . . . . . . . 300
stat_hold Characterization Using the Simulator Bisection Approach . . . . 300
AOCV/POCV Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
AOCV Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Running AOCV Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Monte Carlo Simulation-Based Methodology . . . . . . . . . . . . . . . . . . 304
Sensitivity-Based Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
AOCV Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
POCV Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Monte Carlo Simulation-Based Methodology . . . . . . . . . . . . . . . . . . 309
Sensitivity-Based Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
LVF Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
POCV Characterization Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Separate Early/Late Sigma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Supported Characterization Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
.........................................................
Process Model Requirements and Simulator Support . . . . . . . . . . . 315
Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Sensitivity-Based LVF Characterization: . . . . . . . . . . . . . . . . . . . . . . . . . 316
configure.tcl Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Additional Control Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Monte Carlo-Based LVF Characterization . . . . . . . . . . . . . . . . . . . . . . . . 322
configure.tcl Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Separate Early/Late Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
LVF Add-On Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
LVF Table Checks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Detailed LVF Table Check Descriptions . . . . . . . . . . . . . . . . . . . . . . 326
Parameters to Control Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
AOCV/POCV (Side File Format) Model Generation from LVF Data . . . . . . . . 329
Flow 1: Using the CCI Command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Flow 2: Generate AOCV/POCV Side Files with LVF in a Single Run. . . . 329
Additional Control Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
xiv
Contents
8.
IBIS Characterization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Introduction to IBIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
IBIS Characterization Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Dynamic Curve Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Static Curve Measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
On-Die Termination (ODT) Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Post-Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Regression Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Notes on Parameter Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Adding a Submodel Construct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Programmable Driver Strength Support . . . . . . . . . . . . . . . . . . . . . . . . . 348
Design of Experiments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Example of ODT and Programmable Driver Cell Setup . . . . . . . . . . . . . . 350
Using IBIS in SiliconSmart. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Configuration, Characterization, and Modeling . . . . . . . . . . . . . . . . . . . . 351
Using the active_pvts Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
C_comp Measurement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Setting Up SiliconSmart for IBIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Cells Supported . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Cell Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Final SiliconSmart IBIS Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
IBIS 5.0 Support. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
IBIS Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Model Name Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Pin Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
IBIS Parameter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
IBIS Pin Type Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
IBIS Pin-Level Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
IBIS Cell-Level Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Eye-Diagram Generation Parameters for IBIS Validation . . . . . . . . . 368
Parameter Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
IBIS Merging Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Using ibis_merge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
IBIS-AMI Model Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Checking the Generated IBIS File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Frequently Asked Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
How can I control the number of points in the VT waveform table in an IBIS
model? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
xv
Contents
9.
Generating Data Sheets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Using the generate_datasheet Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
Usage Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Cell Schematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Data Sheet Content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Example Data Sheet Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Simple Combinational Cell Data Sheet . . . . . . . . . . . . . . . . . . . . . . 386
Sequential Cell Data Sheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Banner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Header and Subheader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Input Pin Capacitance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Delay and Output Transition Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Constraint Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Dynamic Energy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Leakage Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Setup and Conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Customizing the Provided Data Sheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Customization Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Setting the Data Sheet Customization File . . . . . . . . . . . . . . . . . . . . . . . 394
Modifying, Adding, and Overriding Parameters . . . . . . . . . . . . . . . . . . . . 395
Modifying and Adding Existing Parameters . . . . . . . . . . . . . . . . . . . 395
Overriding Existing Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Setting Transition Time and Load Pin Parameters . . . . . . . . . . . . . . . . . . 396
Reporting a List of Load/Slew Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Customizing Data Sheet Format and Content . . . . . . . . . . . . . . . . . . . . . . . . . 399
General Report Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Table Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Generating User-Supplied Truth Tables . . . . . . . . . . . . . . . . . . . . . . 404
Variable Substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
xvi
Contents
10.
Validating the Output Liberty File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Qualifying the Liberty File with qualify_library . . . . . . . . . . . . . . . . . . . . . . . . . 407
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
Using qualify_library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Library Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Consistency Between CCST and NLDM Timing Models . . . . . . . . . 410
Consistency Between CCSN and NLDM Timing Models . . . . . . . . . 410
Voltage Range Check. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Cell Sensitivity Check. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Data Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Minimum Load Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Tolerance Adjustment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Addressing Failures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
qualify_library Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Example run.tcl Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Viewing Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Comparing Liberty Files with compare_library . . . . . . . . . . . . . . . . . . . . . . . . 419
Using compare_library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Basic Library Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Numerical Comparison. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Selective Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Adding User-Defined Attributes for Comparison . . . . . . . . . . . . . . . 421
Comparison Tolerances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Viewing Tolerances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Specifying Tolerances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Tolerance Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
compare_library Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Output Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Summary File (summary.log) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Difference Files (*.diff) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Numerical Data Files (*.csv). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Graphical User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
xvii
Contents
11.
Timing Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Timing Measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Propagation Delays and Transition Time . . . . . . . . . . . . . . . . . . . . . . . . . 434
Differential Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Current Source Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
CCS Timing Waveform Reduction . . . . . . . . . . . . . . . . . . . . . . . . . . 436
CCS Receiver Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
CCS Receiver Capacitance Methodology . . . . . . . . . . . . . . . . . . . . 437
Maximum Capacitance Measurement for TIEH/TIEL Cells . . . . . . . . . . . 439
Output-to-Output Timing Arc Support . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Tri-State Enable and Disable Transition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Timing Measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Three-State Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Three-State Disable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Pin Capacitance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Modeling Three-State Pin Capacitance . . . . . . . . . . . . . . . . . . . . . . 446
Output Pin Capacitance on Bi-directional and Tri-state Pins . . . . . . 447
Constraints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Setup/Hold Measurements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Enabling the Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Dependent Measurement Operation . . . . . . . . . . . . . . . . . . . . . . . . 449
Path-Based Constraint Analysis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Enabling Path-Base Constraint Analysis . . . . . . . . . . . . . . . . . . . . . 454
Example of Functional Description. . . . . . . . . . . . . . . . . . . . . . . . . . 455
Measuring Path-Based Setup and Hold . . . . . . . . . . . . . . . . . . . . . . 457
Methodology. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Constraint Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Independent Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Dependent Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Dependent-Setup Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Dependent-Hold Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
Debugging Dependent Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
Correction for Dependent-Setup & Dependent-Hold Constraint Modes 475
xviii
Contents
12.
Power and Electromigration Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Internal Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Hidden vs. Switching Internal Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Multi-Output Pin Cells Power Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
Output Switching Energy Subtraction . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
Splitting default_load Internal Energy Among Multiple Output Pins. . . . . 509
3-D Table Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Filling Power Tables that Do Not Occur . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Pin Capacitance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Setting Asymmetric cin Thresholds . . . . . . . . . . . . . . . . . . . . . . . . . 516
Negative Energy Values in internal_power Groups . . . . . . . . . . . . . . . . . . . . . 517
Leakage Energy Subtraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Leakage Energy Stabilization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Input Pin Currents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Leakage Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
Gate Leakage Current . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
xix
Contents
13.
CCS-Noise Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
Overview of CCS-Noise Characterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
Enabling CCS-Noise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
configure (CCS-Noise) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
characterize (CCS-Noise) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
model (CCS-Noise) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Selectively Choosing Pin-Based Noise Models . . . . . . . . . . . . . . . . . . . . 547
Generating Single CCBs for Input and Output Pins . . . . . . . . . . . . . . . . . 548
CCS-Noise Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
CCS-Noise IV. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
CCS-Noise Waveform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
CCS-Noise Propagation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
CCS-Noise Miller Capacitance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
xx
Contents
14.
Command Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
Setup Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
add_back_bias_supplies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
add_channel_length_variation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
add_channel_width_variation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
add_fixed_value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
add_flop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
add_forbidden_state . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
add_function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
add_harness_elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
add_latch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
add_liberty_group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
add_one_hot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
add_opc_grounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
add_opc_statistical_parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
add_opc_supplies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
add_pin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
add_process_parameter_variation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
add_switch_tuple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
add_switching_set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
add_table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
add_transistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
add_user_stimulus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
analyze_netlists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591
cell_families_by_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
change_parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
clear_config_opts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
clear_liberty_attribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
clear_liberty_group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
configure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
create_harness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
create_operating_condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
define_cell_ccb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
xxi
Contents
define_differential_receiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
define_parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
enable_api . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
expand_side_inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
find_internal_nodes_for_constraint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
find_potential_internal_nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
get_word_line_node. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
merge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
pintype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
remove_driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
remove_parameter_block. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
remove_pintype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
report_arcs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
set_boundary_distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
set_bus_value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
set_cell_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
set_config_opt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
set_harness_parent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
set_length_unit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
set_liberty_attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
set_location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
set_log_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
set_log_level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
set_log_stdout_level. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
set_maskable_enable_control_output . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
set_measurement_node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
set_netlist_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
set_opc_parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
set_opc_parameter_distribution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
set_opc_process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
set_opc_temperature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
set_opc_default_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
set_output_differential . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
set_parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
set_pins_to_bundle_map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641
set_pintype_parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
set_points_boundary_distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
set_stimulus_node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
xxii
Contents
set_subckt_ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644
set_sweep_parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
test_internal_nodes_for_constraint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
validate_hdl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
Query Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
get_cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
get_config_opt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
get_location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
get_parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
get_pintype_parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
get_version_info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
list_parameter_blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
list_parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
list_pintype_parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
list_pintypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
print_options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
report_drivers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
report_pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
report_sim_results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
report_sim_stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
write_config_opts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
Processing Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
characterize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
compare_library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
delete_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
generate_datasheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674
import_driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
precharacterize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
qualify_library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
Memory Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
Tcl Memory Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
set_memory_type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
set_memory_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
set_mem_internal_node. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
set_maximum_addressable_word . . . . . . . . . . . . . . . . . . . . . . . . . . 692
xxiii
Contents
set_rom_code_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
set_separate_statetable_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
set_bypass_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
set_pipeline_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
set_writethrough_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
set_bist_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
set_extramargin_adjustment_mode . . . . . . . . . . . . . . . . . . . . . . . . . 695
set_maskablewrite_enable_control_output . . . . . . . . . . . . . . . . . . . 695
set_light_sleep_enable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
set_deep_sleep_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
set_shut_down_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
set_asynchronous_reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
set_register_scan_reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
create_readwrite_port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
Functional Mode Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
set_clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
set_address_bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
set_data_bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
set_asynchronous_write_through . . . . . . . . . . . . . . . . . . . . . . . . . . 701
set_asynchronous_write_through_logic . . . . . . . . . . . . . . . . . . . . . . 702
set_output_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
set_read_enable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
set_write_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
set_chip_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
set_memory_enable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
set_bypass_enable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
set_writethrough_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
set_bist_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
set_pipelinemode_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
set_extramargin_adjustment_enable . . . . . . . . . . . . . . . . . . . . . . . . 709
set_extramargin_adjustment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
set_testclk_enable name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
set_maskable_enable_control_output . . . . . . . . . . . . . . . . . . . . . . . 710
set_maskablewrite_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
set_data_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
set_pipeline_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
Test Mode Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
set_testmode_clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
set_testmode_address_bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
set_testmode_data_bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
set_testmode_read_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
set_testmode_write_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
set_testmode_chip_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
set_testmode_memory_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
xxiv
Contents
set_testmode_bypass_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
set_testmode_writethrough_enable . . . . . . . . . . . . . . . . . . . . . . . . . 718
set_testmode_bist_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
set_testmode_pipelinemode_enable . . . . . . . . . . . . . . . . . . . . . . . . 719
set_testmode_extramargin_adjustment_enable. . . . . . . . . . . . . . . . 720
set_testmode_extramargin_adjustment . . . . . . . . . . . . . . . . . . . . . . 720
set_testmode_maskablewrite_enable . . . . . . . . . . . . . . . . . . . . . . . 721
set_testmode_data_output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
set_testmode_pipeline_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
General Memory Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
add_input_pin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
add_output_pin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
set_input_pins_tiedto_low . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
set_input_pins_tiedto_high. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
set_internal_supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
set_output_state_on_shutdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
set_shutdown_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
Scan Chain Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
set_scan_chain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
set_scan_chain_def . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
set_scan_input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
set_scan_clock. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
set_scan_reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
set_scan_preset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
set_scan_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
set_scan_internal_node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
xxv
Contents
ibis_pulldown_supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
ibis_pullup_supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
ibis_c_comp_max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
ibis_c_comp_min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
ibis_c_comp_typ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
ibis_c_series_max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
ibis_c_series_min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
ibis_c_series_typ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
ibis_clamping_iv_points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
ibis_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
ibis_l_series_max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
ibis_l_series_min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739
ibis_l_series_typ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739
ibis_model_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739
ibis_polarity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739
ibis_r_series_max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
ibis_r_series_min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
ibis_r_series_typ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
ibis_vdiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
liberty_model Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
delay_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
param Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
absolute_leakage_threshold_value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
active_pvts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
add_constraint_margin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
add_lvf_constraint_margin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
add_lvf_delay_margin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
add_lvf_slew_margin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
add_stat_constraint_margin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
advanced_dp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
advanced_node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
advanced_sof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
aocv_correlation_coeff_between_stages . . . . . . . . . . . . . . . . . . . . . . . . 764
aocv_early_sigma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
aocv_fanout_cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
aocv_fanout_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
aocv_fast_char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
aocv_input_pin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
xxvi
Contents
aocv_interconnect_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
aocv_late_sigma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
aocv_mc_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
aocv_num_fanouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
aocv_num_stages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
aocv_output_pin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
aocv_passive_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
aocv_sample_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
aocv_sensitivity_based . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
archive_condition_for_pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
archive_condition_on_failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
archive_condition_on_success . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
archive_level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
auto_fix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
back_bias_connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
backup_simulation_tmpdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
bjt_model_names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
bundle_bit_independent_descriptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
bundle_bit_independent_descriptor_mode . . . . . . . . . . . . . . . . . . . . . . . 770
cap_model_names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
ccb_separator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
ccb_single_fanout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
ccb_single_fanout_bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772
ccbs_for_input_driving_passgate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772
ccs_delay_abs_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
ccs_delay_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
ccs_noise_iv_dc_analysis_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
ccs_noise_miller_resistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
ccs_power_modeling_load_indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774
ccs_power_modeling_slew_indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774
ccs_power_optimize_waveform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774
ccs_receiver1_check_ratio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774
ccs_receiver2_check_ratio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
ccs_segment_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
ccsn_add_second_level_ccb_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
ccsn_cmiller_check_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
ccsn_cmiller_default_value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776
ccsn_exclude_pin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776
ccsn_ignore_char_failures_during_modeling . . . . . . . . . . . . . . . . . . . . . 776
xxvii
Contents
ccsn_initial_delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
ccsn_model_default_pin_based_models . . . . . . . . . . . . . . . . . . . . . . . . 777
ccsn_truncate_long_ccb_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
ccsn_model_passgate_ccb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
ccsn_use_enhanced_hw_method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
ccsn_use_enhanced_miller_cap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
ccsn_use_optimal_node_selection_method . . . . . . . . . . . . . . . . . . . . . . 778
ccsn_use_partial_netlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779
ccsp_cross_point_selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779
cdpl_alt_submission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780
cdpl_host_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780
cdpl_long_task_alert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780
cdpl_submission_cmd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
cdpl_submission_timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
cdpl_task_max_lifespan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
cdpl_worker_max_tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782
cdpl_worker_timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782
cell_families . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782
cell_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782
char_engine_max_lifespan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783
check_pins_in_netlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783
check_sof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783
check_templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784
combine_delay_and_cin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784
combine_energy_and_cin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784
combine_lvf_cin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784
combine_timing_and_power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
compact_ccs_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
configure_all_states_for_ccb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
configure_constraint_delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
configure_internal_node_arcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786
configure_from_function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786
configure_from_structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786
configure_preferred_secondary_input . . . . . . . . . . . . . . . . . . . . . . . . . . 786
configure_write_fugues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787
configure_zdisable_pull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787
constraint_exclude_outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787
constraint_glitch_time_delta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
constraint_matched_internal_state . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
xxviii
Contents
constraint_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
constraint_monotonicity_tolerance_pct . . . . . . . . . . . . . . . . . . . . . . . . . . 789
constraint_outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789
constraint_pulse_cratering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789
constraint_seed_by_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789
constraint_seed_step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
constraint_seed_values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
constraint_simulated_seed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
constraint_simulated_seed_acq_based . . . . . . . . . . . . . . . . . . . . . . . . . 791
constraint_simulated_seed_finesim_mode . . . . . . . . . . . . . . . . . . . . . . . 791
constraint_simulated_seed_simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
constraint_simulation_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
constraint_trigger_node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
construct_ncx_templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
current_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
current_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
cut_netlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
cut_stat_netlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
datasheet_truth_table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
dc_current_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
dc_current_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
dc_current_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
dc_current_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795
default_load_position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795
default_netlist_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795
default_position_selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
default_slew_position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
delay_based_constraint_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
delay_matching_cin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
detect_internal_power_nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797
detect_internal_power_nodes_for_pruning . . . . . . . . . . . . . . . . . . . . . . . 797
differential_delay_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797
differential_delay_probe_style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
differential_pair_timing_duplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
dio_model_names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799
disable_negative_power_adjustments . . . . . . . . . . . . . . . . . . . . . . . . . . 799
disable_sim_stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799
do_zero_modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799
dontcare_bias_on_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800
xxix
Contents
dontcare_values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800
driver_load_steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800
ecsm_power_modeling_load_indices . . . . . . . . . . . . . . . . . . . . . . . . . . . 801
ecsm_power_modeling_slew_indices . . . . . . . . . . . . . . . . . . . . . . . . . . . 801
ecsm_threshold_pcts_fall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801
ecsm_threshold_pcts_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801
em_analyze_power_nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802
em_table_with_current_types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802
em_threshold_simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802
em_threshold_simulator_cmd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802
em_threshold_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803
em_use_xba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803
enable_ac_decap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803
enable_ac_decap_merge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804
enable_cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804
enable_cell_leakage_power_modeling . . . . . . . . . . . . . . . . . . . . . . . . . . 804
enable_dc_leakage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805
enable_exhaustive_modeling_of_ccbs . . . . . . . . . . . . . . . . . . . . . . . . . . 805
enable_external_simulator_pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805
enable_fast_sweep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805
enable_fse_log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
enable_gated_hold_constraint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
enable_macro_pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
enable_memory_pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
enable_netlist_pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
enable_parallel_sweeps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
enable_parasitic_sweep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
enable_rechar_reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
enable_status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
energy_fast_mode_leakage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
energy_fast_mode_leakage_interval . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
ensure_constraint_monotonicity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
event_rank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 809
excluded_acquisitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 809
extrapolate_ccs_cin_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 809
finesim_so_path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810
force_removal_recovery_modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810
fr_archive_condition_on_failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810
fr_archive_condition_on_success . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
xxx
Contents
fse_preprocess_cmd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
fse_user_cmd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
gate_leakage_time_scaling_factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
generate_all_ccbs_after_passgate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812
graphviz_location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812
gzip_cellmodel_libs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
harness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
HDL_cell_postprocess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
hdl_vector_time_step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
hierarchy_separator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
hsp_keep_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
hspice_client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
ibis_add_submodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
ibis_ami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
ibis_ami_bit_time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
ibis_ami_sample_interval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
ibis_ami_taps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
ibis_ami_weights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
ibis_c_comp_user_only . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
ibis_clamping_curve_make_monotonic . . . . . . . . . . . . . . . . . . . . . . . . . 817
ibis_clamping_iv_analysis_mode_dc . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
ibis_clamping_iv_num_points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818
ibis_cref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818
ibis_diff_pin_single_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
ibis_odt_driver_only . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
ibis_odt_linear_regression_max_scale . . . . . . . . . . . . . . . . . . . . . . . . . . 819
ibis_odt_linear_regression_min_scale . . . . . . . . . . . . . . . . . . . . . . . . . . 819
ibis_odt_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
ibis_odt_mode_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
ibis_odt_pulldown_modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
ibis_odt_pullup_modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
ibis_odt_receiver_only . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
ibis_pin_alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
ibis_pin_mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
ibis_plan_for_corner_merge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
ibis_prog_driver_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
ibis_prog_driver_mode_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
ibis_rref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
ibis_single_pvt_corner_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
xxxi
Contents
ibis_source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
ibis_typ_pvt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
ibis_use_exact_mode_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824
ibis_validate_bit_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825
ibis_validate_bit_time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825
ibis_validate_input_pin_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
ibis_validate_prbs_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
ibis_validate_terminating_resistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
ibis_vcross_high . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
ibis_vcross_low . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
ibis_vdiff_ac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
ibis_vdiff_dc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
ibis_version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
ibis_vinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
ibis_vinh_max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
ibis_vinh_min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
ibis_vinh_typ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
ibis_vinl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
ibis_vinl_max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
ibis_vinl_min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
ibis_vinl_typ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
ibis_vmeas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
ibis_vmeas_max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
ibis_vmeas_min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
ibis_vmeas_typ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
ibis_vref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
ibis_vt_curve_make_monotonic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
ibischk_cmd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
ideal_netlist_ext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
import_explicit_points_per_arc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
import_liberty_ndw. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
initial_delay_multiplier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
insert_liberty_default_ndw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
init_internal_pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
initialization_cycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
internal_ground_nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
internal_ground_supply_spice_nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
internal_nodes_transition_data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
internal_power_nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
xxxii
Contents
internal_power_supply_spice_nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
intrinsic_cap_with_phase_diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
io_retry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
job_scheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
keep_loading_effect_with_pruning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
leakage_current_substitution_value . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
leakage_sum_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
left_bus_identifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
liberty_attributes_at_bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
liberty_blackbox_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838
liberty_cap_unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839
liberty_cell_postprocess. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839
liberty_combine_complementary_models . . . . . . . . . . . . . . . . . . . . . . . . 840
liberty_constraint_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
liberty_current_unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
liberty_data_reduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
liberty_fast_option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841
liberty_fill_out_power_with . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841
liberty_flavor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841
liberty_increasing_delay_with_ecsm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
liberty_increasing_delay_with_ccs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
liberty_increasing_delay_with_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
liberty_increasing_delay_with_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
liberty_increasing_time_points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
liberty_increasing_transition_with_load . . . . . . . . . . . . . . . . . . . . . . . . . 844
liberty_leakage_power_unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844
liberty_max_capacitance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844
liberty_max_capacitance_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844
liberty_max_transition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
liberty_min_capacitance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
liberty_min_transition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
liberty_minimize_constraint_when . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
liberty_minimize_groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
liberty_minimize_timing_when . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
liberty_multi_rail_format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847
liberty_power_down_function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848
liberty_power_down_function_pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848
liberty_resistance_unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848
liberty_select_min_period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 849
xxxiii
Contents
liberty_select_min_pulse_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 849
liberty_state_independent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 849
liberty_statetable_for_gcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850
liberty_time_unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850
liberty_timing_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850
liberty_whens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
lvf_check_errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
lvf_check_sigma_pct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
lvf_check_slew_sigma_pct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
lvf_check_suppress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
lvf_constraint_models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
lvf_constraint_seed_step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
lvf_enable_sanity_check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
lvf_model_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
lvf_param_abs_threshold. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
lvf_param_rel_threshold. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
lvf_sigma_max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
lvf_sigma_min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
lvf_sigma_scaling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
lvf_to_ocv_input_pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
lvf_to_ocv_load_indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
lvf_to_ocv_method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
lvf_to_ocv_slew_indices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
lvf_to_ocv_output_pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856
lvf_tol_early_to_late . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856
lvf_tol_sigma_to_nom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856
make_cdb_path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
make_small_dc_current_values_as_zero . . . . . . . . . . . . . . . . . . . . . . . . 857
max_constraint_iterations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
maximum_stack_depth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
measure_side_input_power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
memory_ccsn_partial_netlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
miller_capacitance_check_tolerance_pct . . . . . . . . . . . . . . . . . . . . . . . . 858
miller_capacitance_edge_ratio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
miller_output_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
min_disk_space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
min_period_precharge_threshold_factor . . . . . . . . . . . . . . . . . . . . . . . . 859
min_period_with_precharge_delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
minimum_constraint_sum_margin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
xxxiv
Contents
model_arc_and_pin_cap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861
model_as_non_unate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861
model_back_bias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861
model_bundle_bit_level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861
model_bus_timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863
model_default_arcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863
model_default_constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864
model_default_power_arc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864
model_ecsm_threshold_pct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864
model_equalize_cap_averaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
model_exclude_supplies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
model_expanded_states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866
model_failed_cells_in_lib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866
model_input_leakage_current . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866
model_leakage_current_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866
model_mpw_attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867
model_neg_constraint_chk_opposite_edge . . . . . . . . . . . . . . . . . . . . . . 867
model_neg_constraint_sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867
model_neg_constraint_sum_margin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867
model_neg_constraint_sum_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . 868
model_negative_constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 868
model_negative_delays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
model_negative_energy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
model_negative_leakage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
model_normalized_constraint_driver_waveform . . . . . . . . . . . . . . . . . . . 869
model_normalized_driver_waveform . . . . . . . . . . . . . . . . . . . . . . . . . . . 870
model_pg_pin_groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 870
model_pin_cap_calc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 870
model_power_on_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871
model_power_per_supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871
model_reverse_polarity_current . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871
model_rise_fall_capacitance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871
model_rise_fall_capacitance_range . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872
model_sensitization_vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872
model_significant_digits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872
model_significant_digits_area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872
model_uncharacterized_tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873
mpw_rail_to_rail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873
monitor_internal_nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873
xxxv
Contents
mpp_simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874
mpw_table_dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874
mpw_v2_transition_inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874
netlist_max_sweeps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875
new_operating_condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875
nmos_drn_gate_shorted_model_names . . . . . . . . . . . . . . . . . . . . . . . . 875
nmos_drn_src_shorted_model_names . . . . . . . . . . . . . . . . . . . . . . . . . . 875
nmos_gate_src_shorted_model_names . . . . . . . . . . . . . . . . . . . . . . . . . 876
nmos_model_names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
nochange_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
nochange_variance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
non_scan_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877
normal_queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877
normalized_driver_significant_digits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877
nsamples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
opc_grounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
opc_process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
opc_supplies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
opc_temperature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879
opc_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879
output_sweep_order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879
param_change_period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879
parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
partition_by_output_transitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
path_based_clock_nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
path_based_signal_nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
path_constraint_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
path_constraint_enable_negative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
path_constraint_enable_positive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
path_constraint_feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
path_constraint_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
path_constraint_pintype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
periodic_clock_stimulus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
pin_name_alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
pmos_drn_gate_shorted_model_names . . . . . . . . . . . . . . . . . . . . . . . . 883
pmos_drn_src_shorted_model_names . . . . . . . . . . . . . . . . . . . . . . . . . . 883
pmos_gate_src_shorted_model_names . . . . . . . . . . . . . . . . . . . . . . . . . 884
pmos_model_names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
point_to_point_default_selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
xxxvi
Contents
potential_internal_node_list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
power_dynamic_end_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
power_load_energy_on_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
power_meas_grounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
power_meas_map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
power_meas_supplies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
power_stabilization_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
power_stabilization_threshold_absolute . . . . . . . . . . . . . . . . . . . . . . . . . 887
prechar_autorange_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
prechar_binning_abs_tol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
prechar_binning_constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
prechar_binning_hidden_power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
prechar_binning_max_bins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
prechar_binning_method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
prechar_binning_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
prechar_binning_power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
prechar_binning_rel_tol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
prechar_binning_timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
prechar_enable_fast_analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
prechar_keep_intermediate_files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
prechar_numsteps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
prechar_sampling_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
prechar_simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893
prechar_state_partitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893
preferred_switching_input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893
reduce_ccs_power_table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893
primary_index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894
propagate_warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894
publish_internal_pin_states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894
receiver_cap_for_zdisable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
receiver_trip_threshold_pct_fall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
receiver_trip_threshold_pct_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
rechar_add_attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
rechar_update_attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896
reduce_ecsm_power_table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896
replace_negative_leakage_with . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896
report_constraint_iterations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897
res_model_names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897
right_bus_identifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897
xxxvii
Contents
run_list_maxsize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898
running_prechar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898
save_farm_logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898
scan_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898
scan_input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899
scan_enable_inverted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899
scan_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899
scan_output_inverted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899
scan_start_pin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
scan_type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
scd_debug_subtract_power_tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
scheduler_poll_time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
sdf_cond_equality_operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
secondary_run_list_maxsize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
separate_cell_initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902
separate_cell_initialization_levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902
signal_capture_pct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
simcomp_version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
simulator_case_sensitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
simulation_max_inactive_time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
simulation_max_runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
simulation_node_initialization_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
simulation_tmpdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905
simulator_bisection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905
simulator_cmd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905
simulator_default_options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906
simulator_options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906
simulator_warning_limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906
single_bit_degenerate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906
single_cell_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907
sis_cell_type_memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907
sis_exclude_internal_power_nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
sis_gzip_enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
sis_gzip_enable_for_lib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
sis_pruning_with_flat_netlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
sishapes_channel_length_offset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909
sishapes_minimum_feature_length . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909
slew_derate_lower_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909
xxxviii
Contents
slew_derate_upper_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909
slew_matching_cin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
spectre_ccb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
spectre_fake_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
spectre_macmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
srf_multiplier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911
stat_hold_sensitivity_ratios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911
state_coverage_exclude_pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911
state_partitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912
state_rank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912
state_selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913
statistical_avoid_screening_acquisition . . . . . . . . . . . . . . . . . . . . . . . . . 913
statistical_constraint_screening_points . . . . . . . . . . . . . . . . . . . . . . . . . . 913
statistical_constraint_screening_tolerance . . . . . . . . . . . . . . . . . . . . . . . 914
statistical_enable_constraint_sensitivity . . . . . . . . . . . . . . . . . . . . . . . . . 914
statistical_model_sigma_montecarlo . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
statistical_montecarlo_sample_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
statistical_reduction_factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
statistical_screening_points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
statistical_screening_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
statistical_significant_transistors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
statistical_simulation_points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
statistical_simulator_bisection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
statistical_timing_abs_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
statistical_timing_rel_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917
statistical_two_sided_screening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917
statistical_use_pruned_netlist_for_nominal . . . . . . . . . . . . . . . . . . . . . . 917
submit_list_maxsize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918
subtract_pin_capacitance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918
sweep_states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918
table_dimension_for_internal_node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918
table_dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
time_res_high . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
time_res_low . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
update_cache_last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
use_ccs_init_delay. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920
use_ccs_native_current . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920
use_ccsn_initial_delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920
use_exact_when . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
xxxix
Contents
use_gates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
use_measured_slew_for_combined_setuphold . . . . . . . . . . . . . . . . . . . 921
use_save_for_initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
use_simulator_licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
verilog_atpg_syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
verilog_combine_function_timing_blocks . . . . . . . . . . . . . . . . . . . . . . . . 922
verilog_default_combinational_delay . . . . . . . . . . . . . . . . . . . . . . . . . . . 923
verilog_default_constraint_delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923
verilog_default_sequential_delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923
verilog_delay_path_polarity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923
verilog_flavor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924
verilog_function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924
verilog_functional_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924
verilog_hierarchy_separator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924
verilog_model_notifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925
verilog_model_power_as_inout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925
verilog_model_power_as_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925
verilog_model_power_supplies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925
verilog_model_removal_as_hold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
verilog_model_use_recrem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927
verilog_model_use_setuphold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927
verilog_notifier_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927
verilog_table_indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927
verilog_udp_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928
verilog_unit_delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928
verilog_unused_pins_format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928
vg_allow_floating_nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929
vg_enable_constraint_measurements . . . . . . . . . . . . . . . . . . . . . . . . . . 929
vg_enable_hidden_measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929
vg_enable_pulse_measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
vg_enable_steady_measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
vg_enable_switching_measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
vg_explicit_leakage_states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
vg_log_level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931
vg_max_arcs_per_input_transition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931
vg_max_leakage_states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931
vg_partial_circuit_collapse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
vg_restricted_inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
vg_restricted_states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
xl
Contents
vg_state_selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
voltage_name_map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
weak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
whens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
workers_as_daemons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
pintype Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
acquire_ccs_timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945
acquire_retaining_arcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945
aocv_input_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946
autorange_height . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946
autorange_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946
autorange_load_minmax_ratio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947
autorange_load_source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947
autorange_timeshift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947
bundle_from . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
bundle_to . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
bundle_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948
bus_from . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949
bus_to . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949
bus_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949
ccs_max_voltage_error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949
ccs_power_max_current_error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
ccsn_dc_normalize_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
ccsn_default_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
ccsn_iv_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
ccsn_numsteps_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951
cin_bias_capacitance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951
cin_high_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951
cin_high_threshold_fall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
cin_high_threshold_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
cin_low_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
cin_low_threshold_fall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952
cin_low_threshold_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953
clock_active_period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953
clock_inactive_period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953
common_differential_cin_input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953
configure_delay_from_outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954
constraint_alternate_input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954
constraint_autorange_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954
xli
Contents
constraint_default_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954
constraint_default_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
constraint_dependent_margin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
constraint_explicit_points_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
constraint_explicit_points_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
constraint_glitch_check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
constraint_largest_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
constraint_largest_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
constraint_monotonic_check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
constraint_numsteps_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
constraint_numsteps_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
constraint_resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957
constraint_scaled_points_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958
constraint_scaled_points_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958
constraint_smallest_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958
constraint_smallest_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958
current_resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959
cycle_time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959
decap_fall_time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959
default_bus_value_0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959
default_bus_value_1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960
default_height . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960
default_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960
default_load_index_position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960
default_load_index_position_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961
default_load_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961
default_load_pct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961
default_load_scale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961
default_pintype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962
default_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962
default_total_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962
default_total_slew_multiplier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963
default_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963
default_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963
delay_matching_cin_driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964
delay_matching_cin_max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964
dependent_max_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964
differential_pair_timing_duplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964
differential_slew_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965
xlii
Contents
dontcare_bias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965
dontcare_value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966
downto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966
driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966
driver_fall_time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966
driver_initial_delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
driver_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
driver_pwl_fall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
driver_pwl_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
driver_pwls_fall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968
driver_pwls_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969
driver_rise_time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969
driver_waveform_limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969
driver_waveform_min_dt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969
driver_waveform_points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970
ecsm_fixed_levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970
ecsm_higher_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971
ecsm_lower_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971
ecsm_threshold_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971
ecsm_use_fixed_levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971
ecsm_waveform_set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972
em_table_with_current_types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972
emulated_driver_ratio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972
enable_clamped_predriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972
enable_common_mode_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
enable_multi_threshold_receiver_cap . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
exclude_ecsm_start_end_points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
explicit_points_frequency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
explicit_points_height . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974
explicit_points_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974
explicit_points_rload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974
explicit_points_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
explicit_points_timeshift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
explicit_points_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
explicit_points_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
failure_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
failure_threshold_fall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
failure_threshold_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
fallback_threshold_pcts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977
xliii
Contents
force_driver_char_reuse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977
full_transition_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977
full_transition_fall_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977
full_transition_rise_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978
glitch_high_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978
glitch_low_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979
hyper_coeffs_three_point_method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979
ibis_above_rail_multiplier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979
ibis_acq_to_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979
ibis_acq_to_model2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980
ibis_below_rail_multiplier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980
ibis_c_comp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980
ibis_composite_current . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
ibis_copyright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
ibis_default_r_fixture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981
ibis_disclaimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
ibis_ground_clamp_supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
ibis_input_differential_nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
ibis_input_node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
ibis_input_pin_open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
ibis_isso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
ibis_iv_diff_pin_v_sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
ibis_manufacturer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
ibis_max_gnd_clamp_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
ibis_max_power_clamp_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984
ibis_max_pulldown_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
ibis_max_pullup_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
ibis_min_gnd_clamp_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
ibis_min_power_clamp_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
ibis_min_pulldown_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
ibis_min_pullup_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
ibis_model_to_acq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
ibis_notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
ibis_numsteps_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
ibis_output_differential_nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
ibis_output_node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
ibis_power_clamp_supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
ibis_rail_extrapolate_linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
ibis_typ_gnd_clamp_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
xliv
Contents
ibis_typ_power_clamp_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
ibis_typ_pulldown_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
ibis_typ_pullup_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
ibis_vt_v_fixture_differential_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
ibis_vt_v_fixture_falling_non_differential_output . . . . . . . . . . . . . . . . . . . 990
ibis_vt_v_fixture_rising_non_differential_output . . . . . . . . . . . . . . . . . . . 990
initial_common_mode_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990
initial_delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
largest_frequency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
input_fall_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991
input_rise_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
largest_height . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
largest_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
largest_rload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993
largest_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993
largest_timeshift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993
largest_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994
largest_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994
liberty_bundle_as_pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994
liberty_bus_as_pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995
liberty_internal_pin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995
liberty_pin_groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995
liberty_tmax_input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996
liberty_tmax_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996
limit_noise_pulse_range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
logic_high_level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
logic_high_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997
logic_high_param_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
logic_high_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
logic_high_threshold_fall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
logic_high_threshold_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999
logic_low_level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999
logic_low_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999
logic_low_param_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000
logic_low_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000
logic_low_threshold_fall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000
logic_low_threshold_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001
max_asynch_recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001
max_asynch_removal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001
xlv
Contents
max_cmpw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001
max_constraint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002
max_constraint_multiplier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002
max_hold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002
max_hold_hbm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002
max_min_period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003
max_ncmpw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003
max_recover_hbm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003
max_recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003
max_removal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
max_removal_hbm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
max_setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
max_setup_hbm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
max_tout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005
max_width_factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005
maxload_tout_resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005
members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005
min_adjust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006
min_asynch_recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006
min_asynch_removal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006
min_cmpw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006
min_constraint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007
min_constraint_multiplier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007
min_hold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007
min_hold_hbm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007
min_min_period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008
min_ncmpw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008
min_recover_hbm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008
min_recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008
min_removal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
min_removal_hbm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
min_setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
min_setup_hbm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009
mpw_min_adjust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
nochange_clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
node_activity_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
node_stability_pruning_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
noise_immunity_current . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
noise_immunity_from_prop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
xlvi
Contents
noise_immunity_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
num_ccs_samples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
numsteps_frequency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
numsteps_height . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
numsteps_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
numsteps_rload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
numsteps_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013
numsteps_timeshift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013
numsteps_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013
numsteps_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014
opt_load_high . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014
opt_load_low . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014
partial_swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
output_fall_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
output_rise_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
partial_swing_minimum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
passive_glitch_check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
peak_ratio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
phased_inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
pin_category . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
pintype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
pocv_input_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
power_period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
prop_delay_current . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
prop_delay_inp_level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
prop_delay_inp_level_fall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
prop_delay_inp_level_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
prop_delay_level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
prop_delay_out_level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
prop_delay_out_level_fall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
prop_delay_out_level_rise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
rc_filter_capacitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
rc_filter_resistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
scaled_points_frequency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
scaled_points_height . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
scaled_points_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1022
scaled_points_rload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1022
scaled_points_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1022
xlvii
Contents
scaled_points_timeshift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1022
scaled_points_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023
scaled_points_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023
si_driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023
side_pin_driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023
skip_constraint_outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
slew_based_margin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
smallest_frequency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
smallest_height . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
smallest_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
smallest_rload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
smallest_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
smallest_timeshift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
smallest_voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027
smallest_width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027
smc_constraint_style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027
smc_degrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1028
smc_degrade_absolute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1028
smc_degrade_check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1028
smc_degrade_maximum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
smc_degrade_pushout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
smc_max_degrade_absolute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
smc_slew_degrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030
smc_slew_degrade_absolute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030
soi_transition_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030
stable_time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030
subtract_leakage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
sweep_method_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
sweep_method_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032
switchpoint_default_slew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032
target_bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032
tie_cell_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
total_slew_multiplier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
trailing_delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
use_floating_hiz_output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034
verilog_attach_edges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034
voltage_resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034
voltage_resolution_threshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035
validation Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035
xlviii
Contents
absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039
capacitance_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039
capacitance_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039
capacitance_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
ccs_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
ccs_noise_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
ccs_noise_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
ccs_noise_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
ccs_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
ccs_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
ccsn_current_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
ccsn_current_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
ccsn_current_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043
ccsn_height_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043
ccsn_height_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043
ccsn_height_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044
ccsn_output_voltage_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . 1044
ccsn_output_voltage_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . 1044
ccsn_output_voltage_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . 1045
ccsn_width_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045
ccsn_width_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045
ccsn_width_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1046
compare_library_interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1046
compare_library_top_failures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047
data_range_max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047
data_range_min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047
delay_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047
delay_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
delay_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
delay_sensitivity_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
delay_sensitivity_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049
delay_sensitivity_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049
delay_variance_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049
delay_variance_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049
delay_variance_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
ecsm_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
ecsm_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
ecsm_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
enable_total_power_comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051
xlix
Contents
energy_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051
energy_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051
energy_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
gends_config_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
generate_sdf_cmd_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
hdl_target_simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
hdl_target_simulator_path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
hold_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
hold_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054
hold_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054
hyperbolic_noise_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054
hyperbolic_noise_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
hyperbolic_noise_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
index_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
input_capacitance_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . 1056
input_capacitance_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . 1056
input_capacitance_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . 1056
leakage_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1056
leakage_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057
leakage_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057
mpw_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057
mpw_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057
mpw_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
nochange_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
nochange_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058
nochange_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059
noise_immunity_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059
noise_immunity_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059
noise_immunity_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1060
noise_iv_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1060
noise_iv_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1060
noise_iv_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061
noise_prop_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061
noise_prop_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061
noise_prop_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062
product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062
qualification_10nm_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062
qualification_data_range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063
qualification_correlation_lc_shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063
l
Contents
qualification_lc_compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063
qualification_lc_shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063
qualification_lc_suppress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064
recovery_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064
recovery_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064
recovery_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064
relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065
removal_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065
removal_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065
removal_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066
retain_slew_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066
retain_slew_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066
retain_slew_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1067
retaining_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1067
retaining_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1067
retaining_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068
sdf_source_tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068
sdf_source_tool_cmd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068
setup_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069
setup_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069
setup_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069
slew_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070
slew_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070
slew_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070
slew_sensitivity_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
slew_sensitivity_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
slew_sensitivity_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
slew_variance_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
slew_variance_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072
slew_variance_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072
zdis_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072
zdis_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072
zdis_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
zen_absolute_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
zen_product_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
zen_relative_tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074
Selecting the SOI Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075
Characterizing and Modeling for SOI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076
li
Contents
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1079
Using Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1080
Looping and Conditional Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081
Tcl Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081
Using the API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086
API Command Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087
add_obj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088
copy_obj. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089
del_obj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090
get_models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090
get_obj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090
get_obj_attr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091
get_obj_level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092
get_obj_list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093
get_obj_match . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094
get_obj_name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096
get_obj_owner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096
get_obj_type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097
get_order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098
get_style. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098
get_style_by_id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1100
read_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101
remove_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101
set_obj_attr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102
set_obj_multi_attr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103
set_obj_name. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1104
set_order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1104
set_order_by_id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105
set_style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107
set_style_by_id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
unset_obj_attr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109
write_model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1110
Signal Extensions for Tcl/Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112
Python 2.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112
libjpeg. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1114
Tcl/Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115
lii
Contents
TclPro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1116
CUDD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1117
elmer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118
zlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
itcl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
BLT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1120
SWIG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1121
Berkeley DB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1123
libedit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124
Graphviz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125
Eclipse Public License - v 1.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125
Gnuplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125
GNU Lesser General Public License v2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
liii
Contents
liv
About This Manual
This user guide describes how to use the SiliconSmart tool to perform library
characterization from a set of cell functional descriptions, associated SPICE
netlists, and process model files. This manual is intended for engineers who
create .lib libraries.
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
Convention Description
Edit > Copy Indicates a path to a menu command, such as opening the
Edit menu and choosing Copy.
Customer Support
Customer support is available through SolvNet online customer support and
through contacting the Synopsys Technical Support Center.
Accessing SolvNet
SolvNet includes an electronic knowledge base of technical articles and
answers to frequently asked questions about Synopsys tools. SolvNet also
gives you access to a wide range of Synopsys online services, which include
downloading software, viewing Documentation on the Web, and entering a call
to the Support Center.
To access SolvNet:
1. Go to the SolvNet Web page at https://solvnet.synopsys.com.
2. If prompted, enter your user name and password. If you do not have a
Synopsys user name and password, follow the instructions to register with
SolvNet.
If you need help using SolvNet, click Help on the SolvNet menu bar.
■
Open a case with your local support center from the Web by going to
https://solvnet.synopsys.com/EnterACall (Synopsys user name and
password required). Choose the Open A Support Case tab to begin.
■
Send an e-mail message to your local support center.
• E-mail support_center@synopsys.com from within North America.
• Find other local support center e-mail addresses at
http://www.synopsys.com/support/support_ctr.
■
Telephone your local support center.
• Call (800) 245-8005 from within the continental United States.
• Call (650) 584-4200 from Canada.
• Find other local support center telephone numbers at
http://www.synopsys.com/support/support_ctr.
Introduction
This chapter introduces the SiliconSmart tool, its scope, capabilities, basic
usage and syntax.
SiliconSmart Architecture
The SiliconSmart architecture consists of the following components:
■
SiliconSmart Shell:
• Includes a Tcl shell interface called siliconsmart. This shell has
been extended with SiliconSmart commands that provide a rich set of
features to manage characterization and modeling over a distributed
network.
• Provides access to the SiliconSmart characterization and modeling
engines.
■
Job Management System (JMS):
• Schedules characterization jobs across the network using one of
several job scheduling modes: Platform® Load Sharing Facility (LSF®),
SunSM Grid Engine, NC, or stand-alone.
• Allocates CPU and license resources for the characterization and
modeling engines.
■
Characterization Engine:
• Generates and executes the SPICE simulations necessary to acquire
the data necessary to model the signal integrity behavior of a cell
accurately.
• Builds a central database of the timing, power, and signal integrity data
from the distributed circuit simulations.
■
Modeling Engine:
• Builds Liberty models for a library of standard cells for use with
Synopsys PrimeTime and compatible tools.
• Builds effective current source models (ECSMs) for a library of standard
cells for use with Cadence® SignalStorm™.
SiliconSmart Usage
A basic understanding of the information in this chapter is helpful for successful
usage of the tool and is necessary if you want to integrate SiliconSmart into
your automated library design flow.
The following sections describe basic SiliconSmart usage:
■
SiliconSmart Syntax
■
Entering SiliconSmart Commands
■
Logging
SiliconSmart Syntax
You can use the siliconsmart command to launch the SiliconSmart shell or
to execute a command script for automated processing. The siliconsmart
command has the following syntax:
siliconsmart [-help] [-x command] [-commands] [script_file]
Option Description
Example 1
sis_cci> import –lib my_io.lib –netlist_dir netlists
-ext .spi my_io_cell
Command Help
SiliconSmart provides a description of each command through the help
command. Entering the help command by itself displays usage lines for all
commands. The help command also accepts the name of a command or a
wildcard pattern for selecting one or more commands. If a single command is
specified, help displays the usage of the command and a summary of its
behavior. If multiple commands are selected with a wildcard expression, the
help command displays the usage line for all selected commands. For
example, entering the command help *location, produces the following
output:
Example 2
Command Usage
------------------------- -------------------------------------
get_location get_location
set_location set_location directory
See Also
■
Command: help
Specifying Cells
Many commands in siliconsmart operate on one or more cells at a time.
For instance, characterize can be used to characterize one cell or a set
of cells. Each of these commands accepts the following forms:
■
All cells — If the keyword all is used, all cells in the current characterization
directory are selected. This is the default when nothing is specified. The
following example characterizes all cells in the current characterization
directory:
characterize all
■
One or more cells — The names of one or more cells can be specified on
the command-line. The following example characterizes the cells BUF1 and
NAND1:
characterize BUF1 NAND1
■
List of cells — A Tcl list of cell names can also be specified as an argument
on the command-line. The following example characterizes the cells BUF1
and NAND1:
set cell_list {BUF1 NAND1}
characterize cell_list
■
Wildcard expression — Any cell names matching the expression are
selected. The following example characterizes all cells beginning with BUF
or NAND:
characterize BUF* NAND*
Logging
SiliconSmart keeps a log file of everything it does. This provides a mechanism
to check for errors or warnings after running the tool. By default, the log file is
named siliconsmart.log. You can change the file name and the directory to
which it is saved with the set_log_file command.
Each logged message has a severity level of ERROR, WARNING, INFO, or
VERBOSE. By default, all messages of informational level or higher are written
to the log file. The level of messages displayed and written to the log file can be
Setting Up SiliconSmart
This chapter describes setting up the SiliconSmart tool and performing tasks
required for characterization.
A job generally refers to a characterization sequence for a specific cell. The job
is initiated by the job scheduler with a specified job or process ID. You can use
any of the following methods for job scheduling with SiliconSmart:
■
Stand-alone mode — An operational mode of the SiliconSmart tool in which
load sharing is not used, and tool runs all jobs on the local machine.
■
LSF — Load Sharing Facility, a suite of products created and maintained by
Platform Computing Corporation that maximizes computational resources
by controlling the creation, scheduling, and distribution of jobs across a
network of machines.
■
Grid Engine — Sun Grid Engine, a resource management software solution
from Sun Microsystems™.
■
NC — NetworkComputer, a high performance job scheduler from Runtime
Design Automation™.
Stand-Alone Mode
When you execute the SiliconSmart tool in stand-alone mode, it runs on your
local machine without a network. The SiliconSmart tool submits all cell
characterization jobs to your local machine as a background process.
To run the SiliconSmart tool with this job scheduling option, set the
job_scheduler parameter to standalone in the configure.tcl file. In
stand-alone mode, no queue exists. Therefore, when in stand-alone mode, the
SiliconSmart tool ignores the submit_list_maxsize parameter and uses
run_list_maxsize to determine the number of jobs to run simultaneously.
To configure the SiliconSmart tool to run with your LSF installation, set the
job_scheduler parameter to LSF in your configure.tcl file.
Table 2 describes some of the LSF commands and options that you can use in
the SiliconSmart tool to monitor submitted jobs. For more information about
LSF, see the LSF User’s Guide.
Table 2 LSF Commands and Options
Status Description
pend The job is waiting for an available resource. It has not yet been started.
To configure the SiliconSmart tool to run with your Grid Engine installation,
complete the following steps:
1. Put Grid Engine binaries in your PATH by sourcing the Grid Engine settings
file with the following commands:
• For Bourne shell — source grid_install_path/default/common/
settings.sh
• For C shell — source grid_install_path/default/common/settings.csh
2. If this is a site-wide configuration, set the job_scheduler parameter in
your site_config file as follows:
job_scheduler = "grid";
RTDA NC
The SiliconSmart tool supports Runtime Design Automation's
NetworkComputer (NC) as a job scheduler. This can be used by setting the
name of the parameter job_scheduler to nc. Because a cluster in NC is
equivalent to a queue in LSF, you must specify a cluster name as the value of
normal_queue.
Using CDPL
The Common Distributed Processing Library (CDPL) is a common framework
available to all Synopsys applications needing to incorporate parallel
computing. Parallel computing, a process in which a single task is divided into
smaller tasks which are then executed concurrently, can be used effectively to
Introduction
CDPL is set as the distributed computing engine when the parameter
advanced_dp is set to 1. It is on by default, which is the preferred and
recommended distributed processing engine.
It supports most standard farm software (LSF, SGE, RTDA-NC, Custom Pool,
Local-Standalone).
Within the SiliconSmart tool, CDPL:
■
Creates a “master” process that identifies which tasks need to be
performed. It then bundles the tasks together and, depending on the user
farm and job scheduler settings, submits the jobs to the farm by sending the
tasks to “workers”.
■ Controls the workers and their tasks (start/stop/kill).
■
Manages any task dependencies and passes any string messages between
the workers and master.
■
Monitors unexpected issues of the workers and master and the channel
between them.
CDPL Interface
The CDPL integration in SiliconSmart is seamless for the user. Since it is
turned on by default, the user does not have to make any setup changes.
Several parameters have been made available to control the master and worker
jobs; however, these have set defaults such that the user may not have to
change them unless faced with farm/network problems. See Using CDPL
Parameters in SiliconSmart for more information on these parameters.
Below are some examples of specifying the job_scheduler and
normal_queue parameter values for running SiliconSmart on supported farm
software:
■
For SGE/GRID:
set_config_opt job_scheduler grid
set_config_opt normal_queue {-P bnormal –l mem_free=2G}
■
For LSF:
set_config_opt job_scheduler lsf
set_config_opt normal_queue {bnormal -R "rusage[mem=2000]"}
■
For RTDA-NC:
set_config_opt job_scheduler nc
set_config_opt normal_queue {-r rhel5 –e DEFAULT}
See Also
■
Command: set_config_opt
■
Parameter: job_scheduler
■
Parameter: normal_queue
setup__A__lh__CLK__lh__ACQ_1 of mycell
driver_23404.tcl
characterization_23404.tcl
configuration_23404.tcl
modeling_23404.tcl
run_23404.sh*
worker.W1.amsemt20c30.23460.log
worker.W2.amsemt20c30.23580.log
worker.W3.amsemt20c30.26188.log
sis.W1.amsemt20c30.23460.log
sis.W2.amsemt20c30.23580.log
sis.W3.amsemt20c30.26188.log
cell.stat.gz
2. Execute the following at the char_point directory level to bring up the GUI:
$CDPL_HOME/bin/dpmanager
3. In the GUI, select File > Open and Analyze. A window appears.
4. In the window, select char_point > runtime > cdpl > master.*.log to view.
CDPL Debugging
There may be a variety of reasons why a run of SiliconSmart launched on a
farm may fail. Outside of actual cell characterization and simulation failures
(which would be a cell, technology, device, methodology, or setup issue), this
section describes some of the best known methods for debugging CDPL and
farm related problems.
Some of the common guidelines to follow before launching jobs are to:
1. Check that the customer Farm Software is supported by CDPL.
2. Check that the machine is able to submit jobs (submit host).
3. Check that the user has appropriate permissions to submit jobs to the
respective farm.
4. Check that your launch scripts work well on standalone tests.
5. Check that all farm settings are sourced correctly through scripts.
6. Know your farm. Can the machine types all run the SiliconSmart tool? Is
there enough available memory? How is the reaction time (slowness,
loaded/stressed, farm conditions)?
Performing these checks ahead of running ensures that an appropriate set of
settings is being used that is conducive to the farm and the complexity of
circuits being characterized.
The following sections detail CDPL debugging:
■
Parameters for Debugging
■
Debugging Steps
■
Monitoring Log Files
■
save_farm_logs — this parameter saves the stderr and stdout logs from
remote machines where jobs were submitted.
■ set_log_level — set this parameter to verbose or debug to report
elaborate information in the log file to help debugging.
See Also
■
Parameter: archive_condition_on_success
■
Parameter: archive_condition_on_failure
■
Parameter: save_farm_logs
■
Command: set_log_level
Debugging Steps
CDPL provides a GUI, called “dpmanager”, which shows the status and health
of a run. It provides valuable information on how many workers were submitted,
how long have they been executing, or staying idle and so on.
To invoke the dpmanager GUI:
prompt> setenv CDPL_HOME <SIS_installation_path>/cdpl_runtime/
prompt> $CDPL_HOME/bin/dpmanager
Select Open and Analyze and choose the master.machine.pid.log file from
$charpoint/runtime/cdpl. This will load all the worker information from the log
files to the user can view them easily.
Secondary Queue
The SiliconSmart tool allows a maximum of two different queues to group tasks
with different resource requirements on different machines. For example, a
library may contain simple cells which do not require high memory machines to
run, as well as more complex cells which need higher memory machines. To
avoid having to submit the whole library to a queue with high memory
machines, it is possible to use the secondary queue mechanism in
SiliconSmart/CDPL to categorize and divide.
set_config_opt secondary_run_list_maxsize 5
Example 6
set_config_opt normal_queue {bnormal ….}
set_config_opt –type energy normal_queue {bhuge ….}
set_config_opt –type constraint normal_queue {blong …}
Above, the primary queue will be “bnormal” and secondary queue will be
“blong”
■
The following is required to trigger the secondary queue mechanism:
• The parameter secondary_run_maxlist > 0
Automatic Reruns
The SiliconSmart parameter auto_fix allows for automatic re-submission of
failed tasks. This takes care of any tasks/arcs/measurements which may fail
due to any random farm, network, licenses or machine issues.
This mechanism applies to all steps of the flow (import, configure, ,
model).
The failing tasks are immediately re-submitted at least once (the default for
auto_fix = 1). Setting it to a larger integer value will invoke more tries before
giving up on the failing tasks.
See Also
■
Parameter: auto_fix
The syntax for the file is: (flag | hostname | slots | tmpDir | protocol | command).
The above example creates a customer pool specifying a 128 worker, 2 node
configuration for a distributed processing run.
configure -timing
cdplResetMaster
set_config_opt run_list_maxsize 10
set_config_opt normal_queue {long -R rusage[mem=2000]}
characterize
model -timing
Managing Licenses
This section describes how to start, support, and maintain your license server.
Sometimes you must reconfigure or restart the license server, such as when a
license or software application is upgraded or when a license has been
terminated. Licenses require restarting in these instances.
If you have received a new license or a software upgrade, review the Upgrading
Licenses section.
Upgrading Licenses
For the purpose of this explanation, your license file is referred to as
license.dat. Use the license file name already in use at your site and complete
the following steps to upgrade your license:
1. Either edit your existing license file to include new license keys, or rename
your existing license file and create a new license file containing the new
keys.
2. Execute a license reread to inform the FLEXlm license daemon that the keys
have changed as follows:
install_path/lmgr/platform/lmreread -c /
path_to_license_file/ \ license.dat
3. Generate a status report to ensure the licenses have been reread correctly,
as follows:
install_path/lmgr/platform/lmstat -a -c /
path_to_license_file/ \ license.dat
Selecting a Simulator
The SiliconSmart tool supports the following simulators for characterization.
To select the simulator, set the simulator parameter to the desired name:
set simulator simulator_name
4. For standalone simulations, you need to make sure that the SiliconSmart
tool is invoked on a machine with the right configuration.
For LSF, instruct bsub to lock the desired CPUs and CPU distribution:
set normal_queue {regression –n 4 -R "rusage[mem=2000]
span[hosts=1]"}
The -match option must be given an expression; it accepts wild cards in the
Tcl regexp format.
Example 10
setenv FINESIM_VA2C_INCLUDE install_dir/SiliconSmart-2015.06/
etc/va2c_include/
setenv FINESIM_VA2C_SO_DIR charpt_location/so_dir
Note: This option is only valid with the SiliconSmart and HSPICE
product packaging introduced in the 2015.06 release. It requires
the 2015.06 (or later) versions of HSPICE and will not work with
previous HSPICE versions.
Arguments
tag
One of the following simulation types:
• common — used in all simulations.
• leakage — used for leakage decks.
• power — used for power characterization simulations.
• tran — used for transient simulations.
• optimize — used for optimization simulations, such as automatic load
ranging.
• csm — higher resolution options used for capturing ECSM and CCS
waveforms.
simulator
One of the supported simulator flavors.
options
A string of simulator-specific options that are to be added to each of the
simulations. The order of the lines is preserved, meaning later lines can
override earlier ones.
set simulator_options {
"common,finesim: probe=1 finesim_mode=spicehd"
"leakage,finesim: finesim_method=gear"
}
Before you launch SiliconSmart, make sure follow the steps in Chapter 2,
Setting Up SiliconSmart to set up the SiliconSmart tool and prepare your
environment.
The following sections will guide you through a SiliconSmart characterization
session:
■
Data Flow Overview
■
Setting Up for Your Characterization
■ Selecting a Characterization Flow
• Recharacterization Flow
• Incremental Characterization Flow
• Function-Based Flow
• Structure-Based Flow
• Sequence-Based Flow
• Additional Flow Options
• Additional Characterization Flows
■
Creating a run.tcl File for Characterization
Importing Cells
SiliconSmart begins with an extracted netlist and optionally, a Liberty model for
a set of cells. For each cell netlist that is imported, an instance file is created.
A SiliconSmart instance file describes the structure (pins and pin directions),
logical behavior, electrical characteristics, and characterization options.
The SiliconSmart tool will always attempt to create a complete instance file for
each cell netlist:
■ If a netlist is imported and a Liberty model is available for the cell, the
SiliconSmart tool will import the functional description of the cell from the
netlist (if Functional Recognition is enabled) and timing and power models
from the Liberty model.
■
If a netlist is imported and a Liberty model is not provided, the SiliconSmart
tool will attempt to extract the function from the netlist. If successful, the
instance file will contain the function; if not the instance file will contain only
pin information.
After creating or setting your characterization point, you will need to use the
import command to import cells from a Liberty (.lib) file, a SPICE netlist, or a
SiliconSmart characterization directory into an existing characterization
directory.
The use of this command depends on the characterization flow you will be
using. Please see the Selecting a Characterization Flow section for a guide on
using this command based on your chosen flow.
See Also
■
Importing Cells
■
Command: import
Precharacterizing (Optional)
The precharacterization step uses binning or grouping states with similar delay,
constraint or energy characteristics, and by multi-corner load ranging to reduce
overall characterization time. The precharacterization step is optional, and must
be used before running the configure command.
See Also
■
Precharacterization
■
Command: precharacterize
Configuring
Once all of the cell instance files are correct, a characterization plan must be
generated for each one. The configure command analyzes each cell and
generates the plans.
See Also
■
Configuring Cells
■
Command: configure
Characterizing
The characterize command uses the SiliconSmart JMS to efficiently
distribute the characterization simulation jobs across your network, taking
advantage of the CPUs and simulation licenses you have made available.
SiliconSmart supports LSF, Grid Engine, and NC load balancing software and
third-party simulators (such as Mentor Graphic Eldo and Cadence Spectre®).
See Also
■
Characterization
■ Command: characterize
Modeling
Once the simulations are complete, you can use the model command to
generate models of one or more cells.
See Also
■
Generating Models
■
Command: model
• The input and output slew thresholds you want to use for slew
measurements.
• The input and output propagation delay thresholds.
• The process, voltage and temperature combinations you want to
characterize.
Note: Much of the above information may already be in your existing
Liberty model (if you have one).
Launching SiliconSmart
Before you launch the SiliconSmart tool, be aware that the location from which
you launch siliconsmart will be the directory that contains the SiliconSmart
session log file (siliconsmart.log). This section briefly explains how to launch
and exit the SiliconSmart tool. Complete the following steps:
1. To launch the SiliconSmart interactive client, enter the following command:
siliconsmart
When launched, the SiliconSmart tool loads ~/.siliconsmartrc. This file can
contain custom scripts that run every time the SiliconSmart tool is launched.
For example:
set_log_level VERBOSE
proc time { args } {
set start [clock seconds]
eval $args
set end [clock seconds]
puts "Elapsed time: [expr $end - $start]"
}
If you do not specify a file name or directory, the SiliconSmart log file defaults to
siliconsmart.log and is saved in the directory from which you launched
SiliconSmart.
See Also
■
Logging
■
Command: set_log_file
char_dir
characterization simulation
decks
cdpl
¹ºÆÂÂŽŰ»É
See Also
■
Editing the configure.tcl File
■ Command: create
2. Open the char_dir/config/configure.tcl file with the text editor of your choice.
3. Modify the simulator parameters to reflect FineSim or the simulator you are
using, as shown in the following example:
set simulator finesim
set simulator_cmd {finesim input_deck -o listing_file}
After overriding parameter values, you have completed the configuration of the
library, and can now import and configure your cells in preparation for
characterization.
See Also
■
Editing the configure.tcl File
■
Example configure.tcl File
■
Command: set_location
■
Command: set_opc_process
■
Command: set_config_opt
This forces the SiliconSmart tool to re-load the configure.tcl file and use the
specified characterization directory for all subsequent operations.
Note: If you make changes to the configure.tcl file, you must reload
the file with the above command to retrieve the changed file.
2. To confirm you have set the correct location, issue the following command:
get_location
See Also
■
Command: get_location
■
Command: set_location
Pure Recharacterization
Flow
Functional Recognition
Flow
Automatic Vector
Simulation
Manually Defining
Simulation Vectors
Recharacterization Flow
Recharacterization requires an existing Liberty model. This flow imports a
Liberty model and preserves as much of the structure and formatting of the
library as possible while replacing the data tables with the newly characterized
data.
The recharacterization flow is usually performed in scenarios where there is a
need to regenerate the same Liberty at a different PVT condition, or with
different netlists, and so on. The typical requirement is to be maintain the same
Liberty structure, load/slope conditions, attributes, when conditions.
■
Skeleton Liberty-Based Flow — this flow generates a new Liberty model
from scratch (employing user inputs for load/slope/when conditions) while
preserving the attributes and other groups from the reference Liberty. Any
processing performed previously on the reference Liberty can be carried
over into the brand new Liberty model.
■
Incremental Characterization Flow — this is another specialized form of the
Recharacterization flow which allows the user to only characterizes a new
view and add to an existing Liberty model while preserving all the original
data as is. An example would be to add CCS-Noise to an existing NLDM
Liberty.
Requirements
This flow requires the following:
■
An existing Liberty model which contains functional information and data for
slews/loads/timing arcs.
■
Netlist and corresponding process files.
Note: A configure.tcl is not required for this flow. If you do not
provide one, it will be created automatically. See
Recharacterizing without a configure.tcl File for more
information.
Flow Steps
The following details the steps in this flow:
1. Prepare for characterization:
• Set/create charpoint.
• Set log file.
• Set location.
• Source cells.
2. Set farm and any required general settings.
#Farm Settings
set_config_opt job_scheduler grid
set_config_opt run_list_maxsize 100
set_config_opt normal_queue {-P bnormal -l "mem_free=4G”}
#Flow
import -fast -liberty $lib_file -netlist_dir $netlist_dir
-extension .spf -overwrite $cells
See Also
■
Recharacterization
Requirements
This flow requires the following:
■
An existing Liberty model which contains data for slews/loads/timing arcs.
■
Netlist and corresponding process files.
■
A configure file.
Note: This is optional; if a configure.tcl is not included for this flow,
a basic configure.tcl file will be created automatically. See
Recharacterizing without a configure.tcl File for more
information.
Flow Steps
The following details the steps in this flow:
1. Prepare for characterization:
• Set/create charpoint.
• Set log file.
• Set location.
• Source cells.
2. Set farm and any required general settings.
3. import the following:
#Farm Settings
set_config_opt job_scheduler grid
set_config_opt run_list_maxsize 100
set_config_opt normal_queue {-P bnormal -l "mem_free=4G”}
#Flow
import -recognize -liberty $lib_file -netlist_dir $netlist_dir
-ext .spf -overwrite $cells
configure –timing –power $cells
characterize $cells
model –timing –power $cells
See Also
■
Recharacterization
Requirements
This flow requires the following:
■ An existing Liberty model with information you wish to preserve.
■
Netlist and corresponding process files.
Note: A configure.tcl is not required for this flow. If you do not
provide one, it will be created automatically. See
Recharacterizing without a configure.tcl File for more
information.
Flow Steps
The following details the steps in this flow:
1. Prepare for characterization:
• Set/create charpoint.
• Set log file.
• Set location.
• Source cells.
2. Set farm and any required general settings.
3. import the following:
• An existing Liberty model that contains the information you wish to
preserve.
• The netlist.
• The cells to be recharacterized.
Note: In the absence of a configure.tcl file, a basic configuration file
will be created automatically with information taken from the
Liberty. See Recharacterizing without a configure.tcl File for
more information.
See Also
■
Recharacterization
Requirements
This flow requires the following:
■
An existing Liberty model which contains functional information and data for
slews/loads/timing arcs.
■
Netlist and corresponding process files.
Note: In the absence of a configure.tcl file, a basic configuration file
will be created automatically with information taken from the
Liberty. See Recharacterizing without a configure.tcl File for
more information.
Flow Steps
The following details the steps in this flow:
1. Prepare for characterization:
• Set/create charpoint.
• Set log file.
• Set location.
• Source cells.
2. Set farm and any required general settings.
3. import the following:
• An existing Liberty model that contains functional information and
slews/loads/timing arcs.
• The netlist.
• The cells to be recharacterized.
Note: In the absence of a configure.tcl file, a basic configuration file
will be created automatically with information taken from the
Liberty. See Recharacterizing without a configure.tcl File for
more information.
6. model the specified data; the SiliconSmart tool will only add that data,
preserving the rest of the library as before. If you are adding data to arcs,
those arcs must already exist in the model or else they must be
characterized (if a new model is being generated).
See Also
■
Recharacterization
You have the flexibility to choose what to import from a Liberty: extract a
function from a netlist, keep the attributes from the Liberty, create final Liberty
models from scratch, or use hybrid modeling.
Function-Based Flow
Function-based flow is the most automated approach, where cells are
characterized based on a function in one of the following ways:
■
Extracting a Function from the Netlist with FR — uses Functional
Recognition to discover and use a pre-defined function in the netlist.
• Functional Recognition Flow — uses Functional Recognition to import
a function from a netlist and import other data from an existing Liberty
model (often for Recharacterization Flow).
• Automatic Vector Simulation — uses Functional Recognition and Vector
Generation based on the structure of the circuit.
■
Manually Defining a Function in the Instance Files — manually defines a
function in the instance files.
Requirements
This flow requires the following:
■
A netlist containing functional information — a netlist which contains the
necessary behavioral information for the cell.
■
configure.tcl — the configure file for characterization.
■
run.tcl — the flow file for characterization.
Structure-Based Flow
This approach characterizes by targeting specific arcs or locations and
simulating vectors, rather than characterizing specific cells. This approach can
work for more cells at a time, and is recommended to be used when running
into capacity limitations in other flows. The following flows are available:
■
Automatic Vector Simulation — uses Functional Recognition and Vector
Generation to find and characterize arcs based on an existing function.
■ Manually Defining Simulation Vectors— uses a user-defined stimulus to
specify arcs, rather then allowing functions to find them automatically.
Requirements
This flow requires the following:
■
A netlist containing functional information — a netlist which contains the
necessary behavioral information for the cell.
■
configure.tcl — the configure file for characterization.
■
run.tcl — the flow file for characterization.
See Also
■
Functional Recognition
■
Using Vector Generation
■
Command: set_parameter
■
Parameter: configure_from_structure
■
Parameter: state_partitions
Sequence-Based Flow
The sequence-based characterization approach characterizes by using a user-
defined input stimulus to specify arcs to be characterized and the sequence to
be performed, without using automated methods. This is the most user-
intensive flow, as it does not use functions. This approach is useful when a
function is too complex or is not being recognized by the SiliconSmart tool.
Sequence-based flow is done through the add_user_stimulus command,
which is detailed in the Adding a User-Defined Stimulus section.
used, the SiliconSmart tool will perform this distribution internally and use it
directly for simulation purposes.
Alternatively, you can specify custom load/slew with
explicit_points_load and explicit_points_slew, which makes the
load/slew information easily visible in the instance or flow files.
If you need to read, edit, or source this explicit load/slope information, you can
use the generate_auto_index command to create an auto index file which
includes these explicit slew and load points. The generated file will be
<cell>.auto_indx, located in the <charpoint>/<control> directory with
set_config_opt commands for explicit_points_load and
explicit_points_slew.
In a typical flow, you may not need to read or edit this auto index file and it will
automatically be sourced. However, if there is a need to read or edit the file, you
must use generate_auto_index before the configure command; any
interceptions may be made right then after the command completes execution
and then the configure, characterize, and model steps of the flow will
proceed as normal.
See Also
■
Command: generate_auto_index
■
Parameter: explicit_points_load
■
Parameter: explicit_points_slew
■
Autoranging and Automatic Parameter Determination
3. Add a command to specify the location and name of the log file which you
want to use to save the messages (info/warning/error) of the current
SiliconSmart session:
set_log_file char_dir/siliconsmart.log
The complexity of the above flow file will depend on the complexity of the flow.
For example, if specific cell types require special overrides, or any pre or post
processing that needs to be performed, or any other customized step. These
will all need to be added to the flow file.
This chapter describes importing and configuring the set of functions for
describing a cell’s function and behavior.
Note: Before importing and configuring cells, make sure that you have
set up the tool by following the steps in the Setting Up for Your
Characterization section.
The below sections detail the flow and the necessary steps to import and
configure in preparation for characterization:
■ Editing the configure.tcl File
■ Importing Cells
• Cell Types and Behavior
• Describing Cell Behavior
■ Editing Instance Files
■
Creating a run.tcl File
■
Configuring Cells
• Function-Based Configuration
• Structure-Based Configuration
• Sequence-Based Configuration
• Setting Advanced Configuration Options
■
time_res_high (block: param)
■
trailing_delay (block: pintype)
See Chapter 15, SiliconSmart Parameters for more information on these
parameters and their usage.
The default configure.tcl file contains one pin type called default. When
working with I/O cells or others with level-translation capability, you must create
additional pin type definitions. You must create as many pin type definitions as
required to fully capture all the level translation features of the CUT.
Pin type blocks can be inherited from one another. To do this, use the ->
operator as follows:
Example 19
pintype io_pad -> default {
set logic_low_name VSS
set logic_high_name VDD3
}
In this example, all parameters defined in pin type default are copied into the
new pin type (io_pad). The logic_low_name and logic_high_name
parameters are immediately overridden for the CUT pins that are associated
with the io_pad pin type. The original parameters within the default pin type
are not modified.
These parameters are added in the pin type group. These parameters override
the previous more encompassing parameters:
Example 21
Logic_low_threshold 0.25
Logic_high_threshold 0.55
For symmetric thresholds, only the previous two parameters would need to be
specified as before. The rest of the more specific parameters, would be derived
from these 2 general parameters automatically.
The slew derate feature will be disabled automatically if a real asymmetrical
slew thresholds are used (i.e., logic_high_threshold_rise !=
logic_high_threshold_fall AND/OR logic_low_threshold_rise
!= logic_low_threshold_fall). If slew thresholds are not asymmetrical,
slew derate feature will be enabled and the value will be calculated based on
value of parameters logic_high_threshold_rise &
logic_low_threshold_rise and slew_derate_upper_threshold &
slew_derate_lower_threshold.
The definition of these parameters corresponds to Liberty modeling parameters
for rise and fall slew thresholds, as follows:
Example 22
logic_high_threshold_rise -> slew_upper_threshold_pct_rise
logic_low_threshold_rise -> slew_lower_threshold_pct_rise
logic_high_threshold_fall -> slew_upper_threshold_pct_fall
logic_low_threshold_fall -> slew_lower_threshold_pct_fall
■
prop_delay_level
■
smallest_slew
■
smallest_load
See Chapter 15, SiliconSmart Parameters for more information on these
parameters and their usage.
Operating Conditions
Process, voltage, and temperature (PVT) conditions are specific to your
environment and must always be specified in the configure.tcl file. In the default
configure.tcl file, one operating condition is defined. You must edit this
operating condition to describe your specific environment. You can define any
number of operating conditions, but each must have a unique name. An
operating condition is created with the create_operating_condition
command.
Each operating condition requires definitions for process, voltage, and
temperature. The process definition is a list of strings that indicate the process
technology files. These strings are placed verbatim into the generated SPICE
decks. The process definitions are specified with the command
set_opc_process. This command takes the name of an existing operating
condition and a list of process strings as its arguments.
The voltage definitions define a name and value pair. All defined voltages are
available as global nodes in the SPICE decks generated by the tool. The
temperature definition specifies the temperature at which the CUT is
characterized. The voltage pairs are added with the command
add_opc_supplies. One or more pairs may be added with each call.
set_opc_temperature is used to set the operating temperature.
# Specify the process lines. The following lines are included in the
# SPICE deck verbatim and must be correct for the given simulator.
set_opc_process best_pvt {
{.lib "/home/charWiz/spiceModels/process.lib" FF}
{.lib "/home/charWiz/spiceModels/process.lib" FF_3V}
}
# This defines the supply rails and sets the operating temperature.
add_opc_supplies best_pvt VSS 0.0 VDD 1.1 VDD3 3.63
set_opc_temperature best_pvt 0
You can now use the operating condition name, best_pvt, as an element in
the active_pvts described in the example to generate a Liberty model at this
process corner. Consider the following example:
Example 24
set active_pvts {best_pvt}
This statement indicates to SiliconSmart the PVT that will be used for
characterization and model generation. Only one PVT should be specified with
active_pvts. If a multi-PVT characterization is desired, it is recommended to
run characterization for each PVT separately in its own respective charpoint.
Importing Cells
Use the import command to import the cells from a Liberty (.lib) file, a SPICE
netlist, or a SiliconSmart characterization directory into an existing
characterization directory.
In the above example, assume you have a Liberty model and want to add one
or more cells to the SiliconSmart characterization directory. Use the –liberty
option to import a set of cells from the Liberty file. The Liberty model of each
cell is saved and an instance file is generated for each cell. A netlist file for each
cell must also be imported.
If the netlists are available in an existing directory, the directory can be
specified with the -netlist_dir switch and SiliconSmart will copy the netlist
file for each cell and automatically invoke Functional Recognition to try and
discover the function. Otherwise, each cell's netlist must be copied into the
netlists directory. Use this option to recharacterize the cell or produce a new
model.
In the above example, assume you only have a netlist for a cell and want to
generate a new model. If you use the –netlist option to import the cell’s
netlist, a skeleton instance file will be generated for the cell. SiliconSmart will
read the netlist and attempt to figure out the direction of each pin on the
subcircuit definition and generate the appropriate instance file. You must then
edit the instance file to provide the behavioral definition of the cell.
Note: You cannot use both the -netlist and -recognize switches
together with the import command.
In the above example, the import command copies the Liberty model of each
cell, the cell’s SPICE netlist, and generates an instance file for the cell. If the
-configure option is specified, a new configure.tcl file will be generated
based on the configuration parameters from SiliconSmart.
The following example illustrates the effect of the various import switches. This
example will focus on a 4-to-1 multiplexer with select pins S0 and S1, data
inputs A0, A1, A2, and A3, and an output pin Z. When pin S0 transitions, the
logical value of Z depends only on pins A0 and A1. However, the electrical
behavior may change depending on the states of A2 and A3.
Importing this cell using the default options will generate the following calls in
the cell’s instance file for the S0 to Z arc where both transition from low to high:
Example 28
set_config_opt -from S0 -to Z state_partitions explicit
set_config_opt -from S0 -to Z whens
{A0&!A1&!A2&!A3 A0&!A1&!A2&A3 A0&!A1&A2&A3 A0&!A1&A2&!A3}
In this example, the first line specifies that the when clauses for this arc will be
specified explicitly. In this case, there are four cases as extracted from the
Liberty file and they appear in the second line. The next two sets of lines record
the load and slew points from the Liberty model. This makes the simulations
use the same points that the timing models use.
If the model is instead imported using the following command:
Example 29
import -state_independent -use_default_slews -use_default_loads
MUX41
then the following lines will be generated in the cell’s instance file:
Example 30
set_config_opt -from S0 -to Z state_partitions one
##
## Pin definitions
##
add_pin A default -input
add_pin Z default -output
The netlist file can be stored anywhere in the network file system, but typically
SiliconSmart copies them into the char_dir/netlists directory to make them
easily available. In this case, the path contains the command get_location
to make the location independent of the actual location of the characterization
directory. A typical example looks like this:
Example 32
set_netlist_file [get_location]/netlists/BUF1.cir
Defining Pins
The first section of the instance file also specifies each of the pins on the cell
and its electrical characteristics with the add_pin command. Using this
command, you can specify the name of a pin, its pin type, and the direction of
the pin.
As an example, the following commands define three pins on a simple
bidirectional I/O cell where pin PAD has a pin type of pad_3v instead of
default:
Example 33
add_pin A default –input
add_pin PAD pad_3v –inout
add_pin Z default –output
Three special direction switches are also provided. The switch –clock
indicates that the pin is an input pin used as a clocking signal. When the cell is
modeled, clock pins are identified as appropriate for the model format.
The switch –supply is used for adding supply pins such as VDD or VSS.
The switches –internal and –spice_node are used to create internal
nodes, which are described in more detail in the I/O Cells section.
The switch -retention is used for defining retention pins, which are
described in more detail in the Defining a Retention Cell section.
## state_partitions option
set_config_opt -type timing state_partitions none
set_config_opt -type constraint state_partitions none
set_config_opt -type mpw state_partitions none
set_config_opt -type energy state_partitions none
set_config_opt -type leakage_power state_partitions none
set_config_opt -type noise state_partitions one
set_config_opt -type leakage_power state_partitions one
set_config_opt -type { noise timing } -from A -to Z
state_partitions one
## explicit_points_load option
set_config_opt -type { noise timing } -from A -from_dir lh -to Z
-to_dir lh -pin Z explicit_points_load { 0 3.692e-15 9.179e-15
2.972e-14 1.186e-13 1.524e-13 1.914e-13 }
## explicit_points_slew option
set_config_opt -type { noise timing } -from A -from_dir lh -to Z
-to_dir lh -pin A explicit_points_slew { 8.811e-12 2.558e-11
8.822e-11 1.427e-10 2.115e-10 2.956e-10 5.292e-10 6.9e-10 8.614e-
10 }
set_netlist_file [get_location]/netlists/HDBUFD1.cir
##
## Pin definitions
##
add_pin A default -input
add_pin Z default -output
##
## Cell function definition
##
add_function Z A
##
## User-specified characterization and modeling configuration
options
##
## state_partitions option
set_config_opt -type timing state_partitions none
set_config_opt -type constraint state_partitions none
set_config_opt -type mpw state_partitions none
set_config_opt -type energy state_partitions none
set_config_opt -type leakage_power state_partitions none
set_config_opt -type noise state_partitions one
set_config_opt -type leakage_power state_partitions one
set_config_opt -type { noise timing } -from A -to Z
state_partitions one
## explicit_points_load option
set_config_opt -type { noise timing } -from A -from_dir lh -to Z
-to_dir lh -pin Z explicit_points_load { 0 3.692e-15 9.179e-15
2.972e-14 1.186e-13 1.524e-13 1.914e-13 }
## Pin definitions
add_pin A0 default -input
add_pin A1 default -input
add_pin B0 default -input
add_pin B1 default -input
add_pin Y default -output
## Pin definitions
add_pin D default -input
add_pin SN default -input
add_pin CK default -clock
add_pin Q default -output
add_pin QN default -output
■
Structural Cell Description
■
Constraint Measurements to Internal Nodes
Combinational Cells
Combinational cells are those in which each output pin is a function of only one
or more input pins and the cell contains no state information. These cells can
be imported through Functional Recognition, recharacterization, or a new
characterization flow:
■
Adders
■
Buffers
■
Inverters
■
Multiplexers (and one-hot)
■
Level-shifters
■
Arithmetic cells
■
Other translation function cells
The SiliconSmart tool provides Tcl commands for describing their behavior
using a combination of Boolean functions and truth tables. This section
describes the use of both mechanisms.
The order of the commands is important. In case of conflict, the initial
command takes priority with subsequent commands serving to fill in undefined
states.
The following sections describe combinational cells:
■
Boolean functions
■ Truth Tables
Boolean functions
The simplest command for specifying a cell’s function is the add_function
command.
In the simplest form, this command accepts the name of an output pin and a
Boolean expression defining its logical function. The Boolean expression can
be a function of any input or bidirectional pin, internal pins (see the Constraint
Measurements to Internal Nodes section), or state registers (see the
Sequential Cells section).
SiliconSmart does not attempt to simulate illegal states, such as when the
output is undefined and in which the cell is not expected to enter under normal
operation. These can occur in cells with differential inputs or in one-hot
multiplexers where two input pins can not be in the same state. As an example,
the following command defines the function of a buffer with differential input
pins:
Example 41
add_function Z {DP&!DN} –illegal {DP&DN | !DP&!DN}
In this example, Z follows the differential pair DP and DN and is undefined if the
pins are not in different states. See the Complementary Inputs and Differential
Pins section for more information on differential signaling and one-hot
multiplexers.
Truth Tables
SiliconSmart supports the use of truth tables to describe the logical function of
combinational cells. Truth tables can be easier to understand when working
with logically complex cells. A truth table can take as input the same inputs as a
Boolean function. That is, a combination of input and bi-directional pins,
internal pins, and state registers. These appear as columns in the left side of
the table. Columns on the right side define the output values and can consist of
output or bidirectional cells and internal pins.
A truth table is created with the add_table command.
For example, the truth table for a NAND gate looks like this:
Example 42
add_table {
A B : Z
0 0 : 1
0 1 : 1
1 0 : 1
1 1 : 0
}
As an example, consider a cell with input A, tri-state control pin EN, a bi-
directional pin PAD, and an output Z. The following table reflects the typical
behavior:
Example 44
add_table {
A EN PAD : PAD Z
0/1 1 0/1 : 0/1 0/1
- 0 0/1 : Z 0/1
- 0 Z : Z X
}
The first row in the table reflects the case where PAD is enabled and the value
on A and driven onto PAD. Notice that the value appears in both columns for
PAD. Pin Z reflects the value of PAD.
The second row covers the case where PAD is in tri-state mode and is being
driven externally. The input column shows the value being driven externally and
the output column indicates that the driver is disabled. Again, pin Z reflects the
state of PAD.
Finally, the last row covers the case where PAD is not driven internally or
externally. In this case, the value of Z is undefined.
Sequential Cells
Sequential cells are any cells capable of retaining one or more bits of state
information. These can include:
■
Flip-flops (edge-triggered)
■
Latches (level-triggered)
■
Retention logic cells
■ Dynamic cells
For standard sequential cells, you can import the functions from a Liberty or
extract the functions with a Functional Recognition flow. For more complex
sequential cells (such as retention logic cells), it is more difficult for the
SiliconSmart tool to define the nuances of the cell functionality. In this case, it is
best to first add necessary information to the cell instance files, and then, if
necessary, use add_user_stimulus if the complex functionality cannot be
expressed using any of the standard TCL functions.
SiliconSmart provides two methods for describing sequential cells: the
add_flop and add_latch commands for describing standard flops and
latches, and state tables via the add_table command for specifying complex
circuits.
This following sections describes the use of each of these functions.
■
Flops and Latches
■
State Tables
This flop has two registers, IQ and IQN, and the data pin D is clocked in
whenever CK rises (transitions to true). The following command could then
use the state register IQ to control an output pin Q:
Example 46
add_function Q IQ
As mentioned previously, the state register of a flop can also be used in the
data expression of the flop itself. For example, the following command
describes a toggle flop in which the output either captures the D input or toggles
based on whether the enable pin EN is true, respectively:
Example 47
add_flop IQ IQN CK {D&EN | IQN&!EN}
The state register of one element can also be used in the data expression of a
second element. For example, the following commands create two simple
latches in series that implement a standard D-flip flop:
Example 48
add_latch IQ1 IQN1 !EN D
add_latch IQ2 IQN2 EN IQ1
Notice that the data expression of the second is the state register of the first.
This description is logically equivalent to using a single call to add_flop.
Following is a simple example of a 1 bit retention flop (without the reset & clear
functionality):
■ Input pins: SCANIN, CLOCK, DATA, SHIFT, BACKUPPOWER (retention
pin)
■
Output pins: OUT, SCANOUT
■
Additional Power supplies: vdd_backup (power supply for retention latch)
In this example, the retention pin is for a slave latch and can also function as a
scan cell. The retention pins are generally defined as -retention.
The following should be added to the instance file:
add_pin scanin default -input
add_pin data default -input
add_pin scanenable default -input
add_pin clk default –clock
add_pin RETN backuppower -retention
add_pin out default -output
add_pin scanout default –output
add_pin -supply vdd default
add_pin -supply vdd_backup backup_power
add_pin –supply vss_backup backup_power
add_pin -supply vss default
set_liberty_attribute -pin vdd_backup pg_type backuppower
You can now define the cell logic function for the retention flop using add_flop
or add_function:
add_flop IQ IQN CLK
{(((SCANENABLE&(!SCANIN))|((!SCANENABLE)&DATA))&(!RETN))}
State Tables
State tables are similar to truth tables, but instead of specifying the value of
output pins, they define the value of a set of state registers in terms of the input
pins and the current value of the state registers. State tables are a powerful
means of describing complex state machines in table format.
A state table looks similar to a truth table and is created with the same
command. However, instead of having two sets of columns it has three: input
pin state, current state, and next state.
For example, the state table for a latch looks like this:
Example 49
add_table {
D EN : IQ : IQ
0/1 1 : - : 0/1
- 0 : 0/1 : 0/1
}
The tilde (~) in front of the r token in the second line is the negation token and
is true any time CK is not rising. The example also uses two state registers, IQ
and IQN. Any number of state registers can be defined so long as all the
registers appear in the same order in both the current_state_regs and the
next_state_regs groups.
D0
S0
D1 Y
S1
D2
S2
Figure 6 One-Hot Mux
Specifying Pins
The following commands are used to specify pins:
■
add_switching_set — A general-purpose command that allows you to
specify a set of pins of which any individual pin can transition independently
or any pair of pins can transition together. A set of pins can be a simple pair,
such as a complementary clock pair, or a larger set, such as in a one-hot
multiplexer.
This command can be called multiple times to define multiple sets of pins.
When specifying a set of pins that switch in pairs it is important to describe
the function of the cell to include only the valid states and not the illegal
ones.
■
add_switch_tuple — Similar to add_switching_set but operates at a lower-
level and provides greater control. The input to this command is a list of pins
that are allowed to switch simultaneously. SiliconSmart will then look for
switching events in which each of those pins all switch together. This allows
groups where more than two inputs can switch together. However, it also
means that all possible combinations of pins must be specified.
For example, the following commands allow any set of four pins to switch
together out of a set of 6:
add_switch_tuple { S0 S0B S1 S1B }
add_switch_tuple { S0 S0B S2 S2B }
add_switch_tuple { S1 S1B S2 S2B }
This case would occur in a one-hot mux in which the select lines are
complementary.
■
define_differential_receiver — Specifies a pair of differential input pins and
the output that is the result of the inputs. This is similar to the
add_switching_set command, except that only the specified output is a
differential function. This means that SiliconSmart will only look for
transitions where the two input pins transition opposite each other for the
specified output and normal (nondifferential) transitions for all other output
pins. This case arises in some I/O cells in which the inputs do not always
behave differentially, such as USB cells.
This command specifies that the output is high when A is high and B is low.
It also specifies that A and B can never both be high or both low as would be
true for complementary inputs. If the illegal states are not defined,
SiliconSmart will also find the transitions in which a single pin transitions.
SiliconSmart assumes that each of the pairs of pins within a switching set
are equivalent and only generates a single rising and single falling event for
each pin, independent of the pin it happens to be paired with. For example,
if there are three input pins A, B, and C, only one arc will be generated where
A is rising. If A is paired with B falling, it will not necessarily generate the
case of A rising and C falling. The reason is that the characterization time
quickly becomes unreasonable and the Liberty format, among others, does
not support modeling these cases.
■
add_forbidden_state — Specifies a Boolean equation that, when true, is an
illegal condition. SiliconSmart will not consider any illegal condition when
generating a simulation. Using the example of add_switch_tuple, shown
above, the illegal conditions could be defined using
add_forbidden_state as follows:
add_forbidden_state { !(S0^S0B) }
add_forbidden_state { !(S1^S1B) }
add_forbidden_state { !(S2^S2B) }
# Only one select pair can be true at any given time
add_forbidden_state {S0&S1 | S0&S2 | S1&S2}
I/O Cells
I/O cells have more complex logical behaviors that must be described. Many of
these cells can use Functional Recognition to discover functions, or as a
Memory Cells
Although memory cells cannot be configured with Functional Recognition or
Vector Generation, memory characterization can be performed in a specialized
template-based flow which will construct the functionality using a state table for
conforming memories. Functions can also be defined manually with the
add_user_stimuls command.
See Chapter 6, Memory Characterization for more information on memory
cells, including details on configuration and characterization.
Multi-Bit Cells
A multi-bit register is a collection of multiple, single-bit flops, where each single-
bit flop shares control signals with the other flops and performs an identical
function.
See Importing and Configuring Multi-Bit Cells for information on importing and
configuring multi-bit cells, or Modeling Multi-Bit Cells for information on
modeling multi-bit cells.
D1 IQ1
0
Z
D2 IQ2
1
CK
Figure 7 Two Flops Feeding A Multiplexor
D1 0
node 1 IQ1
SD1 1
SE
0
D2 0 Z
node 2 IQ2
1
SD2 1
CK
Figure 8 Muxes in Front of Flops Feeding A Mux
These could be added by modifying the data expression of the flops or by using
two add_function commands with internal pins, shown here:
Example 53
add_pin node1 default -internal
add_pin node2 default -internal
add_function node1 {D1&!SE | SD1&SE}
add_function node2 {D2&!SE | SD2&SE}
add_flop IQ1 IQN1 CK node1
add_flop IQ2 IQN2 !CK node2
add_function Z {IQ1&!CK | IQ2&CK}
Note: In this example, node1 and node2 are dummy node names,
which can be used at any point in the instance file when that
particular internal node needs to be referenced. It can be
associated with a -spice_node switch, where the value of the
spice_node is the actual netlist node name. So, in this
example, n576 is an actual SPICE node name from the netlist.
The first two lines create the internal pins. By providing the SPICE node name
of each internal pin, SiliconSmart is able to make measurements to these pins.
When a constraint measurement is to be made on the first flop, node1 will be
used as the output pin.
Configuring Cells
Before running characterization, you must set up the characterization plan by
setting up, importing, and/or editing a configure.tcl file for the characterization
and instance files for each cell. Once you have set up the below, you can then
run the configure command.
■
Editing the configure.tcl File — setting global behavior and parameters for
all cells.
■
Importing Cells — importing cells into the characterization directory.
■
Editing Instance Files — setting behavior for individual cells.
■
Analyzing the Netlist (Optional) — recognizes structure to reduce overall
characterization time.
■
Precharacterization (Optional) — uses binning and grouping to reduce
overall characterization time.
■ Using the configure Command — configures the cells and creates
characterization plans.
Precharacterization (Optional)
An optional step for configuring is precharacterization. This steps analyzes the
state-dependent behavior of any state-dependent arcs and again reduces the
overall characterization time by collapsing states with similar timing and power
characteristics. Precharacterization only needs be performed once for a given
library.
See Also
■
Precharacterization
■
Command: precharacterize
The template files created by the configuration process are saved in your
char_dir/etc/templates directory. For each successfully configured cell, a file is
created with the name of the cell and a .t file extension.
Once characterization plans have been generated, the cells can be
characterized. The characterization process takes the characterization plan for
each cell and generates the file necessary to describe each measurement to
be performed. Each cell has a corresponding charpt/results/$cell directory. This
$charpt/results is considered the cache storage of the current characterization
run.
The caching stores information about a run, so that if these cells/arcs are run
again and certain pre-determined criteria have not changed, then those cells/
arcs will not be rerun again. Instead they will be considered as "cached". This
helps in saving valuable runtime.
Below are examples of scenarios during characterization where the tool will
consider if there is a cache hit or cache miss if parameter enable_cache is
turned on (default is off).
Cache Hit:
■
Changed a modeling related parameter (for example, min vs. max
capacitance selection method)
■
Changed LSF to grid or used AMD vs. Intel machines, etc.
■
Added model_api code to post process Liberty files
■
Tweaked settings for 1 out of 1000 cells; there will be cache hit for 999 cells
Cache Miss:
■
Changed a simulation related parameter (for example,
constraint_resolution)
■
Chose a different simulator
■
Contents of process models is identical but the directory location is different
■
Changed configuration mechanism (for example, the parameter
combine_timing_and_power is turned off when rerun)
The rest of this chapter describes setting configuration behavior for cells in
order to generate the characterization plan.
See Also
■
Chapter 5, Characterizing and Modeling
■
Command: configure
Function-Based Configuration
There are several function-based configuration flows for extracting, defining,
and importing a function for characterization. Figure 9 provides a high-level
illustration of these various import flows.
Functional Recognition
This section describes the functional recognition feature (SiliconSmart FR)
included with SiliconSmart. To facilitate setting up libraries for characterization
with SiliconSmart, you can use the functional recognition (FR) feature for cases
in which an existing Liberty model is not available. FR is also useful as a
validation step to verify whether the function extracted from the netlist does
indeed match the function that may be available in a pre-existing Liberty model.
Additionally, FR is useful for extracting functions for complex cells whose
functional description is not available in Boolean form (perhaps it only exists in
behavioral Verilog.)
See Function-Based Flow for a step-by-step Functional Recognition flow.
The following sections describe functional recognition in SiliconSmart:
■
Functional Recognition Methodology
■
Using Functional Recognition
■
Setting Up Functional Recognition
■
Log Files and Debugging
When SiliconSmart FR has trouble identifying the port direction, you must
provide the port direction using -inputs, -clocks, and -outputs switches if
the cell Liberty file is not available.
The various modes in which you may use the import command are as follows:
■
Case 1 — function extracted from Liberty; slew/loads/whens also extracted
from Liberty (recharacterization flow). Consider the following example:
Example 56
import -liberty import_lib -netlist_dir netlist_dir -ext ext
cells
■
Case 2 — function extracted using FR. Only the function is placed in the .inst
file via FR: new model flow. Note that the -recognize switch is not needed
because it’s the default if the -liberty switch is not specified. Consider the
following example:
Example 57
import -netlist_dir netlist_dir -ext ext cells
■
Case 3 — function extracted from FR; port directions extracted from Liberty
file.
This case is useful when FR has a difficult time figuring out port directions
for some cells. In this case, the port directions in the Liberty file will be used
instead.
Consider the following example:
Example 58
import -recognize -liberty import_lib -netlist_dir netlist_dir
-ext ext –use_default_whens –use_default_slews
–use_default_loads cells
■ Case 4 — hybrid flow, function extracted from FR; slew/load/whens/port-
directions extracted from Liberty file. Consider the following example:
Example 59
import -recognize -liberty import_lib -netlist_dir netlist_dir
-ext ext cells
■
Case 5 — hybrid flow, function extracted from FR; slew/loads/whens from
autoranging and state partitioning settings; port directions from Liberty file.
Although slew/loads/whens are not extracted from the model, this still allows
re-char modeling flow to preserve model structure. Consider the following
example:
Example 60
import -recognize -liberty import_lib -overwrite -netlist_dir
netlist_dir -ext ext -use_default_whens cells
Note: For the hybrid cases 3 and 4, the FR function overrides the
function in the Liberty model. See Figure 9 for a high-level
illustration of the various flows.
You can use the following switches with the import command (in the
SiliconSmart FR flow).
■
-flatten — flattens hierarchical netlists.
■
-model_file — specifies the process model file to be used by FR for
finding transistor models. It overrides any model files specified in the
set_opc_process commands within the configure.tcl file.
■
-inputs, -outputs, -inouts, -powers, -grounds — specify input
ports, output ports, inout ports, power rails, and ground ports explicitly for
complex cells when it may not be possible to detect the direction of ports
automatically from the netlist file.
■
-extension — Specifies the file name extension for the file netlist. This is
used when generating the cell instance files when importing from a Liberty
file. If used with the -netlist_dir switch it also specifies the extension of
the files to be copied.
■ -merge_reg_out_inv — FR will generate the function Q and QN with IQ
and IQN, instead of !IQ and !QN.
■ -clocks — Identifies clock pins. Regular expressions can be used in the
-clocks switch.
■
SPICE netlists (1 file per cell):
• Berkeley SPICE compatible format only. Native Spectre netlists not yet
supported.
■
Process models:
• Complete definition of the process model files via the
add_opc_process command in the configure.tcl file.
■
Power rails:
• Complete add_opc_supplies definition in the configure.tcl file
• power_meas_supplies and power_meas_grounds parameters.
■
Clock pins:
• These must be identified when importing sequential cells using the
-clocks switch on the import command. Consider the following example:
Example 61
import -recognize -netlist_dir netlist_dir -ext ext –clocks
{clk tclk} cells
You must list the clock pin as both a clock pin and an input pin, otherwise
SiliconSmart FR will have trouble identifying the clock direction.
Consider the following example:
Example 62
import -netlist_dir {netlists} -extension .cir -clocks {CLK}
-inputs {CLK ZTDATA} -outputs {Q} {cells}
■
Model names:
• If using subcircuit wrappers for all transistors in the netlists (as would be
the case for statistical characterization netlists), the
nmos_model_names and pmos_model_names parameters must also
be defined.
• If there are diodes in the netlist, the dio_model_names parameter
must be defined.
• If there are capacitor models in the netlist (instead of flat capacitor
values), the cap_model_names parameter must be defined.
• If there are resistors in the design, the res_model_names parameter
must be defined.
xor A^B
or A+B, A|B
A blank between pin names implies an and operation. You can change
operator precedence with parentheses, as in the example (A+B)*C.
White space between pin names and operators is allowed, but in this case the
expression must be written as a Tcl list by enclosing the entire expression
within curly braces, { }. The following statements are equivalent:
Example 63
add_function Y C*(A+B)
add_function Y { C (A + B) }
Structure-Based Configuration
Structure-based flow targets specific arcs or locations and simulating vectors,
rather than characterizing specific cells. This approach can work for more cells
at a time, and is recommended to be used when running into capacity
limitations in other flows.
■
Vector Generator (VG)
■
Adding a User-Defined Stimulus
You can also set it in a run script, or you can set the following right after the
set_location command:
Example 65
set_location char_point
set_parameter configure_from_structure true
■
all_per_path — similar to one_per_path except that all possible
combinations of side input settings are considered.
■ all_per_block_set — similar to one_per_block_set except that all
possible combinations of side input settings are considered.
Other values for state_partitions (all, explicit, ones_count) are
not permitted and should not be used with VG.
As usual, setting state_partitions to none will disable some set of arcs.
For instance, the following command in the instance file will disable all delay
arcs from A to Y:
set_config_opt -type delay -from A -to Y state_partitions none
Use VG only with the new characterization and modeling flow. Thus, always
use the import command with the -use_default_whens,
-use_default_loads, and -use_default_slews switches.
Example 66
//a complete flow:
# Enable VG
set_parameter configure_from_structure true
# Run FR in parallel
import -fast -recognize -netlist_dir data/netlists
-use_default_whens -use_default_slews -use_default_loads
-liberty data/import.lib -extension .cir cells
# run characterization
characterize cells
Sequence-Based Configuration
The sequence-based flow characterizes by using a user-defined input stimulus
to specify arcs to be characterized and the sequence to be performed, without
using automated methods. This is the most user-intensive flow, as it does not
use functions. This approach is useful when a function is too complex or is not
being recognized by the SiliconSmart tool.
The following sections describe using a user-defined input stimulus:
■
Adding a User-Defined Stimulus
■
add_user_stimulus Examples
add_user_stimulus Constructs
The following sections describe AUS constructs:
■
Specifying Initial States
■
-rise_fall Construct
■
-all_permutations Construct
■
-explicit_permutations Construct
■
-cell Construct
■
-substitute Construct
Examples
add_user_stimulus {
{ in {D 0 CP 0} out {Q X} initial {IQ 1 IQN 0} }
{ in {CP 1} out {Q 0} }
{ in {D 1}}
{ in {CP 0}}
{ in {CP 1} out {Q 1}
meas {type delay from CP to Q}}
}
will create:
delay__CP__lh__Q__lh__ACQ_1.typ_pvt.initialization
.ic
* IQ = 1
+XDFQD1BWP_inst.IQ = 1.10
* IQN = 0
+XDFQD1BWP_inst.IQN = 0.00
-rise_fall Construct
The -rise_fall construct produces two AUS stimuli, one with the
subsequent AUS as is and a second stimuli with the pins listed in the argument
having inverted polarity.
Syntax
add_user_stimulus -rise_fall {pin_list}
Description
All pin(s) specified as argument to-rise_fall must be associated with a
switching activity in the AUS stimuli. Pin(s) associated with a Z state are legal in
the argument, provided it switches state, and the Z state shall remain
untouched by –rise_fall.
The pin(s) under AUS’s initial block will not be touched by –rise_fall
construct, even if a pin that found its way accidentally in initial block is part of
the rise_fall pin_list argument.
This is typically used to automatically derive the HL (LH) stimuli from the LH
(HL) stimuli that we specified using an AUS.
Examples
Example 67
add_user_stimulus \
{
{ in { bin 0 } out { bout 0 } }
{ in { bin 1 } out { bout 1 }
meas { type delay from bin to bout states “1” }
}
}
Example 68
add_user_stimulus \
-rise_fall { bin bout } \
{
{ in { bin 0 } out { bout 0 } }
{ in { bin 1 } out { bout 1 }
meas { type delay from bin to bout states “1” }
}
}
-all_permutations Construct
-all_permutations replicates the subsequent AUS stimulus as an initial
value setting for all binary combinations of the argument (pin_list).
Syntax
add_user_stimulus -all_permutations {pin_list}
Description
The state of each permutation will be ANDed (logical AND) with the state of the
AUS stimuli. Associating a logic level (0/1/Z) to the permuted pin(s) in the
AUS stimuli is not illegal, but defeats the purpose of permutation. You need to
make sure that the permuted pin(s) don’t appear in the AUS stimuli, unless
there is an exceptional requirement.
Example 69
add_user_stimulus -all_permutations {PIN0 PIN1 PIN2} {
{in {OE 1 D0 0} out {PAD 0} }
{in {OE 1 D0 1} out {PAD 1}
meas {type delay from D0 to PAD states "OE"} }
}
The above AUS stimulus produces all 8 combinations of PIN0, PIN1, PIN2:
Example 70
OE&!PIN0&!PIN1&!PIN2
OE&!PIN0&!PIN1&PIN2
OE&!PIN0&PIN1&!PIN2
OE&!PIN0&PIN1&PIN2
OE&PIN0&!PIN1&!PIN2
OE&PIN0&!PIN1&PIN2
OE&PIN0&PIN1&!PIN2
OE&PIN0&PIN1&PIN2
-explicit_permutations Construct
-explicit_permutations is used to specify explicit or selective
combinations of states for an AUS stimuli. It replicates the subsequent AUS
stimulus for all the specified state in the argument.
Syntax
add_user_stimulus -explicit_permutation { {pin_names}
{pin’s_state_0} {pin’s_state_1} ... {pin’s_state_N}}
Description
-explicit_permutations, as the name implies, is used to specify explicit
or selective combinations of states for an AUS stimuli. It replicates the
subsequent AUS stimulus for all of the specified states in the argument.
Example 73
add_user_stimulus -explicit_permutations {{PIN0 PIN1 PIN2} {0 0
1} {0 1 1}} {
{in {OE 1 D0 0} out {PAD 0} }
{in {OE 1 D0 1} out {PAD 1}
meas {type delay from D0 to PAD states "OE"} }
}
PIN0 0
PIN1 1
PIN2 1
PIN0 1
PIN1 1
PIN2 0
Note: The states generated with the wildcard are not the same as the
previous example; the wildcard assumes an order of PIN2-
PIN1-PIN0.
-cell Construct
The –cell construct takes a list a cell(s) as the argument, and applies the
subsequent AUS stimulus to all the specified cells.
Syntax
add_user_stimulus -cell {cell_list}
Description
The mode of application/usage would be to create a master AUS file, which has
stimuli that is common for a set/subset of cells. This master AUS file could then
be simply referenced in each of the applicable cell’s instance files.
The –cell construct can accept wildcards as argument in cell_list.
Sourcing an AUS stimuli (or file) with –cell {X Y Z} construct, in the
instance file of X is legal.
Examples
Example 77
add_user_stimulus \
-cell { PAD1 PAD2 PAD3 PAD4 } \
-rise_fall { DO PAD } \
-all_permutations { PIN0 PIN1 PIN2 } \
{
{ in { OE 1 DO 0 } out { PAD 0 } }
{ in { OE 1 DO 1 } out { PAD 1 }
meas { type delay from DO to PAD states “OE” }
}
}
-substitute Construct
The -substitute construct is useful in representing a set/group of pins by a
user specified pattern, and use the pattern in the subsequent AUS stimulus.
–substitute helps in applying an AUS stimulus or method across the
pattern.
Syntax
add_user_stimulus -substitute {pattern1 pin_list_1 pattern2
pin_list_2 ... patternN pin_list_N}
Description
A pattern can be thought of as a variable that doesn’t require a Tcl subst
invocation, and uses the cross-product across all the specified patterns. An
example specification such as:
Example 78
-substitute { dpin {d0 d1} epin {e0 e1}}
would typically generate 4 arcs viz. d0->e0, d0->e1, d1->e0, and d1->e1.
The pin_list_N Tcl list can accept wildcards as an argument on pins.
For any given cell, a pattern must match at least one of the cell’s pins.
Examples
Example 79
# Measure LH hidden energy for pins d0 and d1
add_user_stimulus -substitute { dpin { d0 d1 } } \
{
{ in { dpin 0 } out { p 0 } }
{ in { dpin 1 }
meas { type energy from dpin } }
}
add_user_stimulus Examples
The following examples describe various AUS functions:
■
Multiple Measurements in a Single Stimulus
■
Specifying Constraints for Pulse Generator Cells
■
Specifying Transparent Edge Setup Time for Pulse Latch
■
Specifying Differential Arcs
■
Output-to-Output Delays
■
Configuring Arcs from Internal Nodes
■
Tcl foreach Loops and Variable Substitution for States
■
Tcl foreach Loops and Variable Substitution for Pins
■
Using not for a Gated Constraint
Example 81
add_user_stimulus \
-substitute { apin { a1 a2 } ypin { y1 y2 } } \
{
{ in { apin 0 } out { ypin 0 } }
{ in { apin 1 } out { ypin 1 }
meas { type delay from apin to ypin states “1”} }
}
Output-to-Output Delays
The following specification can be used to get all four measurements (two
clk_in -> out-lh and two delayed_clk_in -> out-hl):
Example 85
add_user_stimulus -all_permutations {sel} {
{in {clk_in 0} out {delayed_clkin 0 out 0}}
{in {clk_in 1} out {out 1}
meas {type delay from clk_in to out}}
{out {delayed_clkin 1 out 0}
meas {type delay from clk_in to delayed_clkin}
meas {type delay from clk_in to out}}
{in {clk_in 0} out {out 1}
meas {type delay from clk_in to out}}
{out {delayed_clkin 0 out 0}
meas {type delay from clk_in to delayed_clkin}
meas {type delay from clk_in to out}}
}
The main requirement is that the row which has the output-to-output
measurement must have measurements from the input to both outputs
specified.
The above AUS will generate the following arcs:
■
Input->Output arcs:
delay__clk_in__hl__delayed_clkin__hl
delay__clk_in__hl__out__lh
delay__clk_in__lh__delayed_clkin__lh
delay__clk_in__lh__out__lh
■
Output->Output arcs:
delay__delayed_clkin__hl__out__hl
delay__delayed_clkin__lh__out__hl
add_user_stimulus {
{ in {INT 0 EN 1} out {Q 0} }
{ in {INT 1} out {Q 1} meas {type delay from INT to Q} } }
foreach { d0 d1 q0 q1 } {
0 1 0 1
1 0 1 0
} {
add_user_stimulus [subst {
{ in { d $d0 c 0 } }
{ in { c 1 } out { q $q0 } }
{ in { d $d1 c 0 } }
{ in { c 1 } out { q $q1 } meas { type delay from d to q } }
}]
}
The above example will result in a hold measurement for D with respect to CP
where output Q should not change:
hold__D__hl__CP__lh__ACQ_1
pin(Q1) {
direction : output;
related_power_pin : VDD;
related_ground_pin : VSS;
timing() {
related_pin : "CK" ;
timing_type : rising_edge ;
}
}
}
When the imported multi-bit cell is modeled at the individual member level, the
parameter model_bundle_bit_level must be enabled before the import
command. When enabled, the tool will automatically create the instance file at
the member level, where:
■ Each member of the bundle is defined as a pin
■
The functionality is defined for each bit of the multi-bit flip-flop
■
Members are mapped to the bundle
An unstitched multi-bit flip-flop has parallel data and scan inputs, and parallel
functional and scan outputs. The output of a bit is not chained to the next
register bit.
Instance file:
##Defining individual pins
add_pin CK default –clock
add_pin D0 default –input
add_pin D1 default –input
add_pin D2 default –input
add_pin D3 default –input
add_pin SI0 default –input
add_pin SI1 default –input
add_pin SI2 default –input
add_pin SI3 default –input
add_pin SE default –input
add_pin Q0 default –output
add_pin Q1 default –output
add_pin Q2 default –output
add_pin Q3 default –output
##Function definition at pin level
add_flop IQ0 IQN0 CK {((D0&(!SE))|(SI0&SE))}
add_flop IQ1 IQN1 CK {((D1&(!SE))|(SI1&SE))}
add_flop IQ2 IQN2 CK {((D2&(!SE))|(SI2&SE))}
add_flop IQ3 IQN3 CK {((D3&(!SE))|(SI3&SE))}
add_function Q0 IQ0
add_function Q1 IQ1
add_function Q2 IQ2
add_function Q3 IQ3
##Mapping the pins to bundles
set_pins_to_bundle_map -bundle Q -pins { Q0 Q1 Q2 Q3 }
set_pins_to_bundle_map -bundle IQ -pins { IQ0 IQ1 IQ2 IQ3 }
set_pins_to_bundle_map -bundle SI -pins { SI0 SI1 SI2 SI3 }
set_pins_to_bundle_map -bundle IQN -pins { IQN0 IQN1 IQN2 IQN3 }
set_pins_to_bundle_map -bundle D -pins { D0 D1 D2 D3 }
A stitched multi-bit flip-flop has a serial scan chain. It has a single shared or
dedicated output pin to output the scan signal, that is, each output is chained to
the next register bit.
Instance file:
##Defining individual pins
add_pin CK default –clock
add_pin D0 default –input
add_pin D1 default –input
add_pin D2 default –input
add_pin D3 default –input
add_pin SI default –input
add_pin SE default –input
add_pin Q0 default –output
add_pin Q1 default –output
add_pin Q2 default –output
add_pin Q3 default –output
##Function definition at pin level
add_flop IQ0 IQN0 CK {((D0&(!SE))|(SI&SE))}
add_flop IQ1 IQN1 CK {((D1&(!SE))|(IQ0&SE))}
add_flop IQ2 IQN2 CK {((D2&(!SE))|(IQ1&SE))}
add_flop IQ3 IQN3 CK {((D3&(!SE))|(IQ2&SE))}
add_function Q0 IQ0
add_function Q1 IQ1
add_function Q2 IQ2
add_function Q3 IQ3
##Mapping the pins to bundles
set_pins_to_bundle_map -bundle Q -pins { Q0 Q1 Q2 Q3 }
set_pins_to_bundle_map -bundle IQ -pins { IQ0 IQ1 IQ2 IQ3 }
set_pins_to_bundle_map -bundle IQN -pins { IQN0 IQN1 IQN2 IQN3 }
set_pins_to_bundle_map -bundle D -pins { D0 D1 D2 D3 }
1 2+2+1=5 2^4=16
2 2+(2+1)*2=8 2^6=64
4 2+(2+1)*4=14 2^10=1024
8 2+(2+1)*8=26 2^18=262144
16 2+(2+1)*16=50 2^34=1.7e+10
As seen in the table above, the number of states that can be captured becomes
prohibitive for multi-bit cells with 4-bits and above.
There are three different modes for multi-bit register characterization modes,
controlled by the parameters bundle_bit_independent_descriptor and
bundle_bit_independent_descriptor_mode.
The options for these two parameters are given in the table below.
Default 0 N/A
Mode 1 1 1
Mode 2 1 2
Default
When the parameter bundle_bit_independent_descriptor is disabled
(default), all representative states can be captured from the full state space.
This is not recommended for multi-bit cells that are 4-bits and above, as this
can be prohibitive in performance and size.
Mode 1
When parameters bundle_bit_independent_descriptor and
bundle_bit_independent_descriptor_mode are both set to 1, the
SiliconSmart tool treats each 1-bit entity of the multi-bit register independently,
reducing the number of states to be characterized by restricting the states of
the cross-bit input pins.
Mode 2
When the parameter bundle_bit_independent_descriptor is set to 1
and bundle_bit_independent_descriptor_mode is set to 2, in addition
to the states allowed by Mode 1, the SiliconSmart tool allows additional states
of the cross-bit inputs for constraints, leakage power and internal power
acquisitions. The states allowed for timing arcs are the same as in Mode 1. The
state coverage in Mode 2 is improved (compared to Mode 1), thereby improving
the accuracy in STA and power analysis.
Example
Consider the following 4-bit flip-flop.
■
Changing Characterization Parameters of Pins — this section describes the
cases (normally state-dependent characterization) in which it is necessary
to vary the characterization parameters, such as SPICE options or load
ranges, based on the state of inputs to the cell.
■
Simulation Harnesses — this section describes simulation harnesses for
adding an additional load to a cell, such as a resistor termination network,
or circuitry between input pins and the stimulus driving them.
■
Weak Drive States — this section describes how to handle cells in which the
drive strength of a pin can vary over a large range. Weak states typically
occur when a pad pin can be pulled high or low by a very low-drive source,
such as pull-up and pull-down resistors.
■
Using Different Simulators for Different Measurements — this section
describes using different simulators for different types of data.
■
Autoranging and Automatic Parameter Determination — these sections
describe options for improving the accuracy of characterization by allowing
the SiliconSmart tool to automatically determine the load range of a cell and
how to use actual cells to drive the input stimulus to a cell.
■
Multicycle Initialization — this section describes how to handle cells that
must be run through one or more simulation cycles before the
measurements are taken.
■
Drivers — this section describes methods of driving input transitions.
■
Disabling Measurements
■
Controlling Don’t Care Pins
■
Table Dimensions and Sweep Order
■
Controlling the Output Pin in Constraint Measurements
■
Excluding Output Pins during Constraint Measurement
■
Working with Extreme Constraint Values
■
Multicycle Initialization
■
Separate Cell Initialization
■
Specifying Load and Slew Ranges
Basic Usage
Below is the basic syntax and usage for set_config_opt.
Syntax
set_config_opt
-cell cell -ccb ccb -opcond opcond
[-type (decap | decap_ccs | delay | zen | zdis | energy | timing
| setup | hold | recovery | asynch_recover | removal |
asynch_removal | leakage_power | constraint | cmpw | ncmpw | mpw
| input_capacitance | nochange | nochange_hold | nochange_setup
| noise | noise_iv | noise_immunity | noise_prop | ccs_noise |
ibis_iv | ibis_vt | statistical_delay | stat_leakage_power |
statistical_hold | statistical_setup | binning | binning_timing
| binning_energy | binning_constraints | nldm_noise)]
[-from (pin | pin_list)]
[-from_direction (direction | direction_list)]
[-reference pin]
[-reference_direction (direction | direction_list)]
[-pin pin]
[-to (pin|pin_list|none)]
[-to_direction (direction | direction_list)]
[-when expression]
option value
See Also
■
Command: set_config_opt
Examples
To have SiliconSmart select a single state for the delay arc from pins A to Z,
use the following command:
set_config_opt -type delay -from A -to Z state_partitions one
Enter the following commands to generalize the previous example to set the
state partitioning for all timing (delay, Z-enable, and Z-disable) arcs ending at
pin Z:
Example 91
set_config_opt -type timing -to Z state_paritions one
The pin name none is used for measurements that may involve only an input
pin, such as energy measurements. To set the when clauses for all hidden
energy measurements involving pins A, A_SCAN, and OE, use the following
commands:
Example 92
set when_clauses { ... user defined when clause expressions ... }
set_config_opt -type energy -from {A A_SCAN OE} -to none
state_partitions explicit
set_config_opt -type energy -from {A A_SCAN OE} -to none whens
when_clauses
Currently, SiliconSmart does not support 3D table imports from source Liberty
but gives you an informative error while importing. The requirement of doing 3D
characterization is very rare and it depends on designs in which an output is
not buffered and secondary output(s) are connected directly from that.
SiliconSmart does not support the import of 3D tables but it does support 3D
characterization. So if you need 3D tables, you can update the .inst file for the
same.
Remember to update the slew and load points as per your source Liberty file.
You can override the default values for slews specified in the configure.tcl file on
a per-cell basis by using the set_config_opt command in the instance file.
The import command generates instance files using set_config_opt in
conjunction with explicit_points_slew for all types of measurements to
record the slew (and load) points to be used, arc-by-arc.
However, as we describe here, it is necessary to specify slew values for
constraint measurements in a slightly different manner compared to the
standard timing and noise measurements. Consider the following example of a
configure.tcl file that contains the following line:
Example 94
set explicit_point_slews { 1 2 3 4 5 }
Without any other mention of slews in the instance file, you will see 5-valued
slew tables in the .lib for all types of measurements.
To override timing/power/noise measurements, you would write in the *.inst file:
Example 95
set_config_opt -type { timing noise } -pin { CK D }
explicit_points_slew { 10 20 30 40 50 60 70 }
This will produce 7-valued slew tables in the .lib for timing and noise.
To override the explicit slew rates for constraint measurements (setup, hold,
recover, removal, and MPW), the pin type parameter
This produces 3-valued slew tables in .lib for the constraint measurements.
Suppose the following line was specified in the instance file instead:
Example 97
set_config_opt -type { constraint } -pin { CK D }
explicit_points_slew { 100 200 300 }
This would have no effect on the constraint measurements and in fact they
would revert back to the 5 slew points from the original configure.tcl file. This is
because the pin type parameter constraint_explicit_points_slew
defaults to the value of explicit_points_slew when this pin type
parameter is set and must explicitly be overridden.
This can be a problem if you are using an instance file generated by a previous
version of SiliconSmart that does not support the
constraint_explicit_points_slew parameter. Your instance file would
have explicit_points_slew instead of
constraint_explicit_points_slew. You can work around this issue as
follows:
■
Directly edit the instance file to replace the string
explicit_points_slew with constraint_explicit_points_slew
for constraint measurements. This is the simplest option if it is feasible to
individually modify each cell's instance file.
■
Re-import an existing .lib in a recharacterization flow. The import command
has been modified to use constraint_explicit_points_slew
instead of explicit_points_slew in all the instance files for constraints.
This usage works as a shortcut for controlling all child types at once. Specifying
any type that is a parent type (contains at least one child) will automatically
apply the usage of set_config_opt to that parent and all of its children.
Below are examples of different -type parent/child relations, shown in tree
structures.Note that these do not include all of the set_config_opt types.
■
Timing
■
Constraint
■
Noise
■
Binning
Timing
The type timing applies to all timing-related measurements including delay,
slew, zenable, zdisable, binning_timing (for timing arcs during pre-
characterization), and retain measurements.
Constraint
The type constraint applies to all the different types of constraint or
relational measurement types available within the SiliconSmart tool: setup,
hold, recovery, removal, asynch_recover, asynch_removal, binning_constraint,
binning_setup, binning_hold, etc.
Note: The constraint tree is too large to display here in one image
and has been broken up into the below three figures. Please note
that the removal and setup types are direct children of the
constraint type and included in that type.
Noise
The type noise includes both NLDM noise (SI) as well as CCS-Noise. Each
has further child types, as shown in the following figure.
Binning
The type binning applies to all the corresponding timing, constraint, energy
measurements for precharacterization.
This example applies the harness res_term to the cell on delay measurements
to the pin PAD when !A&B is true.
The resulting model will include data for each case with a when condition
indicating the state of the secondary pins.
The middle ground between these options is the explicit setting. This allows
you to explicitly define the conditions under which an arc is to be characterized
by specifying a set of Boolean expressions that define the when conditions for
the arc. The actual when conditions are specified by setting the whens option to
a list of Boolean expressions. SiliconSmart sets the secondary pins necessary
to fulfill the requirements of each when clause and use the don’t care settings
to tie off any remaining pins.
The following sections detail using the state_partitions option with the
above example:
■
Full State Dependency
■
Single State Partitions
■
Explicit State Partitions
■
Disabling Measurements
■
Controlling Don’t Care Pins
■
Specifying Constant Values
Results in:
delay A-hl Y-hl (B-1 C-1 S0-0 S1-0)
delay A-hl Y-hl (B-1 C-0 S0-0 S1-0)
delay A-hl Y-hl (B-0 C-1 S0-0 S1-0)
delay A-hl Y-hl (B-0 C-0 S0-0 S1-0)
delay A-lh Y-lh (B-1 C-1 S0-0 S1-0)
delay A-lh Y-lh (B-1 C-0 S0-0 S1-0)
delay A-lh Y-lh (B-0 C-1 S0-0 S1-0)
delay A-lh Y-lh (B-0 C-0 S0-0 S1-0)
Results in:
delay A-hl Y-hl (B-0 C-0 S0-0 S1-0)
delay A-lh Y-lh (B-0 C-0 S0-0 S1-0)
Please note that the state of don’t care pins are chosen arbitrarily by the
SiliconSmart tool.
Results in:
delay A-hl Y-hl (B-0 C-1 S0-0 S1-0)
delay A-lh Y-lh (B-0 C-1 S0-0 S1-0)
Disabling Measurements
Set state_partitions to none to disable certain measurements, as shown
below.
To disable all measurements:
set_config_opt state_partitions none
Results in:
delay A-hl Y-hl (B-0 C-1 S0-0 S1-0)
delay A-lh Y-lh (B-0 C-1 S0-0 S1-0)
where B-0 is determined by the SiliconSmart tool and C-1 is specified by the
set_config_opt command.
For example:
add_fixed_value A 1
State Selection
When multiple states are available to satisfy a particular when condition, the
actual state characterized can be controlled with the state_rank and
state_selection parameters:
■
state_selection — specifies whether to choose the best or the worst
case as specified by the state_rank list. A state_selection of
arbitrary selects a state in a deterministic but arbitrary manner.
■
state_rank — specifies a list of possible states in order from best to
worst.
The list need not be exhaustive. Unspecified states will be considered only if no
state in the list can actually occur. The expressions in the list may cover states
not actually available for a given arc. Those states will not be considered. For
example, the list {A !A} is valid even for arcs that can only occur when B. In
that case the list will be equivalent to {A&B !A&B}.
State ranking is used with the state binning feature described in the
Precharacterization section. In this case, multiple states are combined into a
single simulation and the when condition is set to the OR of each of these
states. The state ranking feature is then used to select the best or worst of
these states.
For example, consider the arc A->Y. The conditions B&C&!D and B&!C&D have
very similar timing but the worst-case is B&!C&D. These can be combined by
setting the when condition to B&C&!D | B&!C&D and then using the state
ranking feature to select the worst case. The commands would be:
Example 99
set_config_opt -from A -to Y state_partitions explicit
set_config_opt -from A -to Y whens { "B&C&!D | B&!C&D" ... }
set_config_opt -from A -to Y state_rank { "B&C&!D" "B&!C&D" }
set_config_opt -from A -to Y state_selection worst
Disabling Measurements
At times it is useful to disable particular measurements to prevent them from
being characterized and appearing in the model. This is done by setting the
configuration option state_partitions to none. When this value is
specified for one or more measurements, no states are processed and the
measurement is removed from the system.
For example, consider a cell with a drive strength control pin DS that controls
the electrical behavior of the PAD pin. If this pin is not expected to switch in a
design, the switching and internal energy measurements can be disabled. The
following command does this:
Example 100
set_config_opt -type energy -from DS state_partitions none
The resulting model will not contain the internal_energy groups for this pin.
behavior of the cell. However, the state of these pins can affect the electrical
behavior of the cell by changing the internal state of the circuit or because the
pins intentionally control some electrical aspects of the circuit.
The configuration option dontcare_value controls the value assigned to the
don’t care pins. This option controls the value assigned to all don't care pins for
the measurement. If more control is needed, the value can be specified for a
specific pin by using the -pin option to specify the name of a pin. For example,
the following commands set the default value for all pins to 1, except for pins
DS1 and DS2 which are set to 0 for any delay arcs to PAD:
Example 101
set_config_opt dontcare_value 1
set_config_opt -type delay -to PAD -pin DS1 dontcare_value 0
set_config_opt -type delay -to PAD -pin DS2 dontcare_value 0
In this example, when pin A transitions, pins PAD and Z both transition. In the
Liberty format the delay through arc A-to-PAD can be represented by a 2-D or
3-D delay table. A 2-D table includes the input slew rate on A and the output
load on PAD. A 3-D table adds the output load on Z. The decision of which table
to use depends on the design of the cell, and whether the load on Z
significantly impacts the delay from A to PAD.
The table dimensions are controlled through the configuration option
table_dimensions. By default, this option is set to 2, which limits the model
to 2-D lookup tables, forcing this case to be modeled as two separate arcs. If
this option is set to 3, 3-D tables are used as appropriate. The following
example sets the table dimension for all delay arcs to 3:
Example 102
set_config_opt –type delay table_dimensions 3
The Liberty format does not support table dimensions greater than 3. In
Figure 16, 3-D tables would be selected for the arc from A to PAD because Z
also switches.
The Liberty power events behave somewhat differently than the delay arcs.
Because the energy events are only concerned with which pins are
transitioning, the three pins in the example cannot be separated and a single
Liberty internal_energy event will be generated. The table_dimensions
configuration option still determines the dimensions of the table, which
determines the number of output pins on which the load is swept. A table
dimension of 2 relates to a single swept output load.
When more outputs exists than table dimensions permit to be swept,
SiliconSmart arbitrarily selects a set of output pins. When necessary, the pins
selected can be controlled with the configuration option
output_sweep_order. This specifies a priority list of pins to be swept, the
first pin being the one that is always swept over. The first swept pin is also the
pin on which the energy event will be placed in the Liberty model.
Using the example in Figure 16 for the switching event where A, PAD, and Z all
switch, SiliconSmart defaults to generating a 2-D energy table. Because two
output pins are switching, SiliconSmart chooses either the PAD or Z pins.
However, because the PAD pin is typically preferred in this case, the following
command forces SiliconSmart to preferentially select PAD over Z:
Example 103
set_config_opt output_sweep_order {PAD Z}
The result is that the capacitive load is swept on pin PAD and not on Z. In the
generated Liberty model the internal_energy event will be placed on pin
PAD.
Usage Examples
Example 105
set_config_opt -type {setup recovery} constraint_outputs {o so}
In the above example, for any setup/recovery measurements, only nodes o and
so will be used for checking constraint criteria. For any hold/removal
measurements, 5 internal nodes will be tested for criteria, in addition to the
primary output o.
Example 106
set_config_opt -type {setup recovery} constraint_outputs {o so}
Example 107
set_config_opt -type {hold removal} constraint_exclude_outputs
{o so IQ1_internal IQ1_internal_1 IQ13_internal IQ5_internal
IQ5_internal_1}
Assume that the above list of nodes contains all of the nodes possible for this
particular example where constraints can be tested. If all of the nodes are
included in the exclude list, the SiliconSmart tool will generate the following
warning:
Warning: Cannot exclude all outputs ['o', 'so', 'IQ1_internal',
'IQ1_internal_1', 'IQ13_internal', 'IQ5_internal',
'IQ5_internal_1']. This setting will be ignored.
It will then ignore this list and consider all the nodes for constraint tests/
measurements.
Example 108
set_config_opt -type {setup recovery} constraint_outputs {o so
dummy6}
Multicycle Initialization
Due to their design or the process technology used, some cells must be run
through multiple cycles before accurate timing or power data can be collected.
SiliconSmart supports the ability to simulate any timing, switching power, or
hidden power arc for additional cycles prior to collecting the data. SiliconSmart
automatically determines the stimulus sequence necessary to cycle between
the states.
The number of initialization cycles performed is controlled through the
configuration option initialization_cycles. This option is set with the
set_config_opt command to an integer value of zero or more.
The following example causes SiliconSmart to execute each switching and
hidden power simulation for two additional cycles at the start before initiating
the actual measurement to be taken:
Example 109
set_config_opt -type energy initialization_cycles 2
The cycle time of the initialization cycles is controlled by the pin type parameter
cycle_time.
desirable to have only the internal nodes from the top-level circuitry in the
netlist have their voltages initialized by nodeset or ic. In this case,
parameter separate_cell_initialization_levels should be set to
top-internal-only.
The generated slew indices, using different algorithms for index values
generation, will be as follows:
■
log: 1.0p 3.16p 10p 31.62p 100p 316.22p 1000p
■
log2x: 1p 2p 4p 8p 16p 32p 1000p
■
linear2x: 1p 2p 4p 8p 16p 32p 1000p
1200
Log
1000 Log2x
800
600
400
200
0
1 2 3 4 5 6 7
Figure 17 Examples of generated slew indices using log and log2x algorithms
Notice that two different sets of load points are used, one for a rising output
transition and a different one for the falling transition. In the case of the explicit
slew points, the -to_direction option (abbreviated -to_dir) is omitted so
the points apply to both the rising and falling cases.
Note: Default tables for constraints are not controlled by specifying the
-library_type switch to the model command.
The above concept can be explained with an example. Consider a cell with a
timing arc which has four when conditions w1, w2, w3, w4. The
-library_type is set to be worst.
For the same cell, with a NLDM and CCST Liberty, the default table will be
made up as follows:
It is possible that for some arcs, some when conditions, only rise or fall tables
may be present. In such cases, the default table will be made up as follows:
combination of measurement type, from/to pin, and input pin state (when
condition). Typical uses include changing the load range of a pin based on drive
strength or changing the expected voltage levels.
To use this feature, create two pin types where one is a duplicate of the other,
except for the specific changes. Apply the first pin type to the pin in the cell's
instance file using the add_pin command. For the measurements in which the
second pin type is needed, use the set_config_opt command to set the pin
type.
For example, assume pin PAD is typically of pin type pad_2v. The following
commands create a second pin type, named pad_3v, where the logic high
voltage is changed to VDD3:
Example 111
pintype pad_3v->pad_2v {
set logic_high_name VDD3
}
In the cell's instance file, the new pin type can be applied for any delay
measurements in which the PAD pin is being driven and the pin HV is high with
the following command:
Example 112
set_config_opt -type delay -to PAD -when HV -pin PAD pintype pad_3v
The -pin option is used to indicate that the pin type of pin PAD is being set.
This case can also be accomplished by a single line directly setting
logic_high_name:
Example 113
set_config_opt -type delay -to PAD -when HV -pin PAD
logic_high_name VDD3
This method can also be used to change other electrical aspects of a pin, such
as load or slew ranges. The import command handles the setting of load and
slew ranges this way to preserve the load and slew table values from the
original Liberty model.
nochange Constraints
Liberty nochange arcs are used to describe a time period in which one signal
must not change relative to transitions on another signal.
By default, nochange measurements are not performed. To enable these
measurements, the pin type parameter nochange_clock must be set to 1 in
the pin type of the clock pin.
Additionally, two other parameters must be set in the parameter block default.
These parameters control the failure criteria for active and inactive setup and
hold constraints:
■
nochange_variance — specifies an absolute allowable amount of delay
variance in seconds. The default is four times the high simulation resolution
as set in the parameter time_res_high.
■
nochange_threshold — specifies a voltage threshold as a percentage of
the full-rail swing beyond which the output must not fluctuate. The default
value is 0.10, meaning that the output can not vary by more than 10% of its
full rail swing.
The first 3 lines enable measurement of the nochange and the last 3 prevent
nochange from being measured with pins other than E and C and at nodes
other than G.
With this and internal node detection, it should be possible to get all interesting
nochange models in the Liberty without requiring model_api post-processing.
Simulation Harnesses
Simulation harnesses are collections of circuit elements, passive or active
devices or sources, that are connected to a CUT during characterization. A
Creating a Harness
A harness is created by calling the create_harness command with the name
of the harness to be created. This creates an empty harness container to which
elements can be added with the add_harness_elements command, as
shown below:
Example 118
create_harness name
add_harness_elements name { elements … }
where Code is the code for one of the elements in Table 5. Each element type
requires a specific number of nodes (connections) to be specified. A node is a
unique name representing a connection point, similar to nodes in SPICE.
Table 5 Harness Elements
Each pin on the CUT and supply defined in the current operating condition is a
node that can be connected. Additional nodes are created implicitly as they are
referenced.
For example, the following command creates a voltage divider termination
circuit that connects between the PAD pin and the supply name VTT:
Example 120
add_harness_elements harness1 {
R rs PAD node1 25
R rt node1 VTT 25
C Cload PAD 0 load_pad
}
In this example, two 25 ohm resistors, rs and rt, are created. Resistor rs
connects the PAD pin to node node1; resistor rt connects node1 to supply
VTT. The capacitor Cload is the output load on the PAD pin. See the Output
Loads section for details.
User-supplied subcircuits can be included in the harness. In this case, the
number of nodes depends on the specific subcircuit. The subcircuit definition
must be included in the simulation by adding the appropriate lines to the
process lines of the operating condition in the configure.tcl file.
Output Loads
The capacitive load does not need to be connected directly to the output pins,
but must effectively load the pin.
The value of the capacitor must be a parameter that will be swept through a
range of values by SiliconSmart during characterization.
You can use the set_sweep_parameter command to specify a capacitor
parameter that relates to the load for a given pin. For example, consider the
following harness:
Example 121
add_harness_elements harness1 {
R rs PAD node1 25
R rt node1 VTT 25
C Cload PAD 0 load_pad
}
In this case, capacitor Cload is the load on pin PAD and the parameter
load_pad is the parameter that will be swept during characterization. You can
specify this with the following command:
Example 122
set_sweep_parameter harness1 -load PAD load_pad
If the cell had additional outputs, additional capacitors would be needed and
the set_sweep_parameter command would have to be called for each.
This command takes the name of an existing harness, the name of an output or
bidirectional pin, and the name of a node to associate with the pin. For
example, if the resistor termination harness from the last section is used,
measurements for pin PAD could be taken from node node1.
The command to do this is as follows:
Example 124
set_measurement_node harness1 PAD node1
The second term reflects the steady-state (leakage) current of the cell over the
duration of the simulation and removes this from the dynamic energy value.
The dynamic energy consumed by the cell is the sum of the dynamic energies
for each supply listed in the power_meas_supplies parameter, minus the
energy used to charge the interconnect capacitances.
The charge applied to the interconnect is estimated as CV2, where C is the
capacitive load on the output pin and V is the voltage range of the output pin.
Because of this estimation, it is important that the capacitive load for a cell is
always directly attached to the output pin(s).
In the following figure, circuit (A) shows the correct way to connect a capacitive
load and circuit (B) shows the incorrect way.
If necessary, two different harnesses can be used, one for timing delay and one
for power measurement. The set_config_opt command allows the harness
to be set per measurement type.
The harness is a simple resistor divider network from the output pin (DP and
DM) to a termination voltage VTT. The measurements for pins DP and DM will be
taken at the intermediate nodes in the resistor network. Additionally, it needs to
supply load capacitors for the output pins DP, DM, and Z.
The following creates the harness and sets it up appropriately:
Example 127
create harness1
add_harness_elements harness1 {
R dp_res1 DP dp_node 25
R dp_res2 dp_node VTT 25
R dm_res1 DM dm_node 25
R dm_res2 dm_node VTT 25
C dp_cap DP 0 dp_load
C dm_cap DM 0 dm_load
C z_cap Z 0 z_load
}
set_measurement_node harness1 DP dp_node
set_measurement_node harness1 DM dm_node
set_sweep_parameter harness1 -load DP dp_load
set_sweep_parameter harness1 -load DM dm_load
set_sweep_parameter harness1 -load Z z_load
The harness will be applied for all delay arcs and switching events to pins DP,
DM and the leakage power measurements. This is done by adding the following
commands to the cell’s control file:
Example 128
set_config_opt -type delay -to DP harness harness1
set_config_opt -type delay -to DM harness harness1
set_config_opt -type energy -to DP harness harness1
set_config_opt -type energy -to DM harness harness1
set_config_opt -type leakage_power harness harness1
In this case you would specify the weak drive states with the following
command:
Example 130
set_config_opt weak {OEN&(PU&!PD|PD&!PU)}
This Tcl code first gets the current value of simulator_options and then
creates a new value by using the Tcl join command to combine the original
values with the new line (tran: converge=3). The \n at the end of the
command tells the join command to combine the lines with a new-line
character. In this case, the switches to set_config_opt indicate that the new
options should be applied to add arcs to the pin PAD. This is a common
scenario where a few specific arcs of a complex I/O cell do not converge in the
simulator.
Note: Previous releases of SiliconSmart used the values 1 and 0 for the
autorange_load parameter. These values now map to pin
and off.
In the above example, mpw arcs will not be considered candidates for the
autoranging load measurements.
The scaled_points_* parameters specify the location of the points relative
to the specified or auto-ranged smallest and largest values. The
explicit_points_* parameters have precedence if they are non-empty.
Example 135
set_config_opt -cell DFF -pin Q {
autorange_load pin
explicit_points_load {}
scaled_points_load {0 0.1 0.3 0.6 1}
}
The timeshift value corresponds well to the setup value for the pin to clock
constraint. To autorange the value, SiliconSmart performs a single setup
measurement using a fast slew rate on the data pin and the same slew rate
used during the noise immunity data (default slew) on the clock pin. By default,
timeshift autoranging is enabled as it yields the best noise immunity results.
To activate load optimization, set the following parameters in the pintype
block:
■
explicit_points_load — This parameter must not be defined.
■
autorange_load — This parameter must be set to pin or state.
■
max_tout — This parameter must be set to the expected maximum output
transition time on the output pin.
■
maxload_tout_resolution — The resolution to which the actual output
transition time must match the desired (max_tout). Value is in seconds and
defaults to 10e-12.
■ opt_load_low/opt_load_high — These parameters define the range
over which the optimizer attempts to determine the load required to achieve
the specified maximum transition time, max_tout, on the pin.
■
smallest_load — Load autoranging is used only to determine the largest
load. The smallest load must be explicitly specified with this parameter.
Drivers
The SiliconSmart tool supports the following methods of driving input
transitions:
■
A simple linear piecewise-linear (PWL) source.
■
An emulated active driver using a nonlinear PWL source.
■
True active drivers using an actual cell to drive the transition.
■
An active waveform driver using a waveform that recreates the output of
active driver
■ Custom drivers using a user-specified waveform.
By default, the SiliconSmart tool uses a linear ramp.
Emulated Drivers
Emulated drivers are a new nonlinear waveform that emulates the shape of a
realistic waveform from a typical timing path. This driver mode has the
advantage of fast simulation times associated with linear PWLs with the same
or better accuracy than true active drivers. This is because true active drivers
often retain some ideal characteristics due to the ideal waveform they are
driven with. For this reason, emulated active drivers are the recommended
driver model whenever characterizing for ECSM or CCS models.
The emulated active driver waveform is generated as the average of a ramp
and an exponential which intersects the ramp at the slew threshold points. The
waveform is sampled at even time intervals of 1/10 of the ramp rail-to-rail
voltage swing. The final point is where the waveform voltage would pass the
rail. This is pulled back to the rail without changing the time—that is, it is not
interpolated.
Emulated driver parameters:
■
emulated_driver_ratio — when the driver_mode is emulated, this
parameter is used to construct a voltage waveform that is a weighted sum
of a linear voltage curve and an exponential voltage ramp.
■
enable_clamped_predriver — when the driver_mode is ccs-
predriver, this parameter is used to construct a voltage waveform that is
a weighted sum of a clamped linear voltage curve and an exponential
voltage ramp.
To select emulated drivers, set the pin type parameter driver_mode to
emulated:
Example 137
set driver_mode emulated
Note: Your simulation can fail with assertion when using the emulated
(non-linear) driver model when the propagation delay threshold
(prop_delay_level) is less than the lower slew threshold
(logic_low_threshold) or greater than the upper slew
threshold (logic_high_threshold). This is a valid error as
these are requirements of the emulated driver model. If your
simulation fails for these reasons, SiliconSmart reports an error
message.
Custom Driver
Delays can depend significantly on the shapes of input waveforms, so some
mechanism is needed to set the shapes of the input wave form. You can control
the shape of the waveforms by setting the driver_mode parameter to
custom. The input waveform should be in normalized form (that is, the values
should be within the range of 0 to 1). To set a custom driver, set the
driver_mode parameter to custom.
The same waveform shape will be used for all slews. If you intend to use a
different waveform shape for each slew, use Custom Pew-Slew Drivers.
Following is an example for one slew. You can add as many such list items for
as many slews as you have.
set driver_pwls_rise {
{0.001e-12}
{ 0 0
0.0542e-12 0.0200
0.1258e-12 0.0800
0.1356e-12 0.1000
0.1869e-12 0.2000
0.2440e-12 0.3000
0.3090e-12 0.4000
0.3832e-12 0.5000
0.4688e-12 0.6000
0.5711e-12 0.7000
0.6899e-12 0.8000
0.8316e-12 0.9000
0.9649e-12 0.9800
1.0000e-12 1.0000
}
}
set driver_pwls_fall {
{0.001e-12}
{ 0 1.0000
0.0542e-12 0.9800
0.1356e-12 0.9000
0.1869e-12 0.8000
0.2440e-12 0.7000
0.3090e-12 0.6000
0.3832e-12 0.5000
0.4688e-12 0.4000
0.5711e-12 0.3000
0.6899e-12 0.2000
0.8316e-12 0.1000
0.8615e-12 0.0800
0.9649e-12 0.0200
1.0000e-12 0
}
}
Active Drivers
The development of accurate models depends on using active drivers during
cell characterization. Especially for high-drive cells, the shape and slew of the
driving waveform significantly affects intrinsic delay and effective input pin
capacitance.
The VCVS removes the effect of the active driver presence from the analysis.
Further, the use of the VCVS, an infinite source of current, nullifies the effect of
the CUT input capacitance, CIN, when acquiring the CUT intrinsic delay.
Removing the effect of CIN from the acquisition of intrinsic delay improves
synthesis accuracy.
additional driver cell transistors being simulated for every measurement (almost
a 2x performance hit in some cases).
SiliconSmart uses a method called active waveform, which eliminates this
performance problem while still maintaining accuracy. The active waveform
methodology recreates the driver waveform and applies it as a multi-point
piecewise linear waveform (PWL) which is derived by curve fitting the actual
driver cell waveform, and thus achieving significant performance improvements
will little or no accuracy penalty.
The flow for using the active-waveform is very similar to the active driver flow.
The driver cell still must be characterized before actual characterization starts.
This provides waveforms for different required input slews. During actual
characterization, depending on the input slews required, PWL waveforms are
generated and applied to the input; the actual driver cell is no longer
instantiated.
The parameter driver_mode accepts a value of active-waveform. Setting
driver_mode to active-waveform and the driver parameter to a valid
driver cell name causes SiliconSmart to use a waveform-based active driver.
See Also
■
Parameter: driver_waveform_min_dt
■
Parameter: driver_waveform_points
Active-Direct Drivers
SiliconSmart supports active-direct drivers. To enable this feature, set the pin
type parameter driver_mode to active-direct. Usually an active driver is
not connected directly to an input pin. A voltage controlled voltage source is
used. But in active-direct mode, the active driver output is directly connected to
the input pin of the cell to be characterized.
Note: Be warned that connecting the driver directly to the input pin will
affect the slew seen at the pin. Measured slew will be used during
modeling. Use this feature only under very specific
circumstances.
For example, the following command imports the cell BUF20 with pins A and Z
for use as a driver:
Example 140
import_driver BUF20 -netlist BUF20.sp -input_pin A -output_pin Z
The pattern argument allows the display to be restricted to only those drivers
matching a wildcard expression. The -verbose switch turns on additional
information about the conditions under which the cell has been characterized
as shown in the following example:
Example 145
siliconsmart> report_drivers BUF* -verbose
*
* Report: driver cells as of Tue Nov 12 15:52:16 CST 2002
*
In this example, only the drivers matching the pattern BUF* are displayed. Cell
BUF20 has been characterized using the operating condition WORST at 125
degrees, with supply voltages of 3.13V and 2.97V.
You can remove driver cells using the remove_driver command as follows:
Example 146
remove_driver name
The specified driver is removed and must be reimported before it can be used
again.
Once characterized, the driver data will be stored in the charpt/config/driver.db
file. If a driver is characterized in one charpt, the driver.db can now be copied
and used in another charpt for active-waveform mode. This will work even if the
op_cond and pintype info do not match. The netlist should not be copied
since that will cause SiliconSmart to attempt to characterize it.
Example 147
set_config_opt insert_liberty_default_ndw 1
Both the original named NDW and the new unnamed NDW will be in the output
Liberty file.If multiple NDWs are listed with "default" in the name, the last NDW
will be taken. If an unnamed NDW is imported from a Liberty file, this feature
will not add an additional default (unnamed) NDW.
Once cells have been configured, the tool flow continues with bundling jobs,
submitting for simulations, collecting results, and modeling.
The following sections describe characterization in the SiliconSmart tool:
■ Precharacterization
■
Characterization
■
Recharacterization
■ Generating Models
• Model Preprocessing
• Modeling Multi-Bit Cells
■ The Distributed Processing Engine
Precharacterization
SiliconSmart provides a precharacterization command that can be used to
reduce overall characterization time. The precharacterization step does this by
binning or grouping states with similar delay, constraint or energy
characteristics, and by multi-corner load ranging. The precharacterization step
is optional, and must be used before running the configure command.
Before Precharacterization
Before running precharacterization, you can decide how the
precharacterization should proceed by controlling the parameters and settings
described in the below sections. These settings affect the way simulations are
performed during precharacterization and control how the different states
should be binned.
The following sections describe these settings:
■
Simulation-Related Settings for Precharacterization
■ Binning
■
Using model_expanded_states
Binning
Binning is particularly useful for cells with state-dependent arcs. State
dependent arcs are those with multiple possible secondary pin states (when
conditions). Precharacterization is not required for arcs with just a single state.
For a given arc, grouping states with similar characteristics effectively reduces
the number of arcs that reduces full detailed simulation.
■
Tolerance and max_bins
■
Precharacterization Binning Modes
■
Delay Binning
■
Constraint Binning
■
Energy Binning
worst-case load is then selected. This enables all .lib files to be generated with
the same load points, a requirement for voltage scaling in some analysis tools.
Delay Binning
Precharacterization for delay arcs is controlled by the
prechar_binning_timing parameter. This parameter can be set to one of
the seven binning modes. While analyzing simulation results, the binning
algorithm accounts for the values of both output delay and output slew.
Constraint Binning
For sequential cells, SiliconSmart supports constraint binning for setup, hold,
recovery, removal, asynchronous recovery/removal and mpw arcs. This is
controlled by the prechar_binning_constraints parameter that can be
set one of the seven binning modes.
Energy Binning
Precharacterization for energy arcs is controlled by the
prechar_binning_power parameter. This parameter can be set to one of
the seven binning modes. Precharacterization for hidden energy arcs is
controlled by the boolean flag called prechar_binning_hidden_power.
Additionally, SiliconSmart provides an option to analyze delay and the
corresponding switching energy in unison or independently. This option is
controlled by the prechar_binning_method parameter. When set to all-
by-timing, only the binning delay arc is simulated and its binning results are
adopted directly for the corresponding switching energy arc. When set to
independent, the binning delay and switching energy arcs are analyzed
separately.
The default value for prechar_binning_abs_tol is specified as 3e-12
which corresponds to 3pJ, a value that is typically very large compared to the
simulation values for energy. It is therefore necessary to reset it to a smaller,
more meaningful value for energy. For instance:
Example 148
set_config_opt –type binning_energy prechar_binning_abs_tol 5e-
15.
Using model_expanded_states
While precharacterization reduces the number of states required for simulation,
it is possible to still produce a Liberty model that contains all the states for each
arc. This process is controlled by the model_expanded_states parameter
which copies the simulation results of the simulated state to all other states in
its bin.
For instance, suppose an arc with eight states is grouped into three different
bins. Setting this parameter to true will produce a Liberty model with eight
states instead of three. The trade-off is between running eight full-scale
simulations compared to running eight low-resolution simulations plus three
full-scale simulations.
See Also
■
Command: precharacterize
Family-Based Precharacterization
When a library contains various families of cells, it is frequently seen that the
arc characteristics of the different cells within a family are identical. Within a
certain family, it is likely that there are strong similarities in the groupings of
states for a given arc irrespective of the size of a cell. SiliconSmart leverages
this characteristic by providing an option to perform family-based
precharacterization.
This process is controlled by the –by_family and the cell_families
parameter, which accepts a list of lists of cell names where each list
corresponds to a separate family. This classification of the library into families
can be done by hand or by using the convenience function called
cell_families_by_name.
For instance, suppose we have set cell_families to { {invx1 invx2
invx4} {andx2 andx1} }. The first element in each family is taken as the
representative for that family. Precharacterization will then perform simulations
for only invx1 and andx2 instead of the full list of cells. However, the prechar
files will be produced for all five cells since the representative cell’s binning
results will be copied over to the other elements in the family.
To use this option, all cells must be assigned to some family. Moreover, it is not
possible to precharacterize a member cell of some family when the
representative cell is also not being precharacterized.
Event-Based Precharacterization
In certain complex cells, some arcs can correspond to a single state but arise
from separate different events due to the presence of switching inputs. For
instance, consider an AOI cell with inputs A,B,C and output Y = ( (A&B) |
(B&C) | (C&A) ). In this cell, arc A (01) -> Y (01) requires the side
Characterization
Once characterization plans have been generated, the cells can be
characterized. The characterization process takes the characterization plan for
each cell and generates the file necessary to describe each measurement to
be performed. Each simulation is checked against the fault tolerant cache and
each missing simulation is performed.
The following sections describe characterization options:
■
Before Characterizing
■
Using the characterize Command
Before Characterizing
Before characterizing, you should have prepared for the characterization with
the following Requirements for Characterization:
■
Creating the Characterization Point
■
Editing the configure.tcl File
■
Importing Cells
■
Editing Instance Files
■
Precharacterizing (Optional)
■
Configuring Cells
It reports the process as the jobs complete and returns when all jobs have
completed.
Example 151
characterize –match {setup__*|hold__*} cells
See Also
■
Command: characterize
Recharacterization
Recharacterization is a characterization flow that requires an existing Liberty
model. It is designed to replace existing values in the model or add new
constructs to the model. Some of the benefits include:
■
Preserving the original Liberty model while just replacing values or adding
new constructs.
■
Providing the ability to easily compare the previous and newly
recharacterized model.
■
Providing an easy path to add some of the advanced characterization
constructs to an existing model you’ve already validated.
The recharacterization mode takes a Liberty model that was imported via the
import command and preserves as much of the structure and formatting of
the library as possible while replacing the data tables with the newly
characterized data.
Like all characterizations, recharacterization options are set during the
configure and import steps of a characterization.
Note: This mode is the default if a Liberty model has been imported for
a given cell.
The SiliconSmart tool immediately sources the configure.tcl after import so that
all these settings imported from the Liberty can take effect in the flow.
The SiliconSmart tool will also create the corresponding cell instance files with
correct pintypes which correspond to the ones created in the configure.tcl.
Since the automatically generated configure.tcl can only have the information
extracted from the Liberty, the user is free to set any custom settings related to
farm, or simulator version/options, new operating conditions, etc., before or
after the import step. These custom settings will also be applied, in addition to
the default settings from the newly created configure.tcl.
The rest of the flow steps of configure and can then be performed as usual.
See Also
■
Pure Recharacterization Flow
■
Functional Recognition Flow
■
Incremental Characterization Flow
Generating Models
This section describes how to generate models from the characterization data
produced by SiliconSmart and add user-defined attributes. It also details the
supported Liberty constructs and how to trace back to the origin of a given
construct.
The following sections describe generating models in SiliconSmart:
■
Using the model Command
■
Model Preprocessing
■
Liberty Models
■
Slew Derating
■
Modeling Multi-Bit Cells
■
Adding Attributes to Models
■
HDL Model Generation
■
Generating a test_cell
Example 152
model -options cells
where cells is a Tcl list of one or more cells for which characterization has
already been performed with the current characterization directory structure.
If no Liberty model has been imported or the –create_new_model switch is
used, a new model is created. In this mode, SiliconSmart starts with an empty
library and adds the parameters specified in the liberty_model parameter
block of the configure.tcl file. The resulting model is formatted such that the
order of the cells, pin, arcs, and when conditions remains consistent across
product releases.
If an existing Liberty model has been imported, the recharacterization mode is
used. See the Recharacterization section for more information on
recharacterization.
Note: Both -ecsm* and -ccs* can be modeled at the same time in
the same Liberty with one use of the model command, allowing
all views (NLDM, NLPM, CCST, CCSN, CCSP, ECSMT, ECSMP)
to be modeled at once in one Liberty.
Distributed Modeling
The model command uses the distributed processing engine (see the
Generating Models section) to dramatically reduce the time required to model a
library. When the model command is invoked, it starts a set of characterization
engines and dynamically distributes the modeling tasks to all of the available
engines. The results are combined back into a single .lib file and published as
part of the final results.
Two exceptions exist to this rule. First, the IBIS formats are not distributed.
When modeling this format, all of the cells will be run on the local machine.
Second, you can force SiliconSmart to run the modeling jobs locally by setting
the job_scheduler to standalone and run_list_maxsize to 1. In this
case, the modeling jobs are run in the current process. This can be faster when
modeling a small number of cells. The settings can be changed by executing
the following commands:
Example 153
set_parameter default job_scheduler standalone
set_parameter default run_list_maxsize 1
Generated Files
Model generation results in the creation of the following files:
■
Liberty models — Liberty model files reside in the char_dir/models/liberty
directory and have .lib file extensions. There is one model file for each
unique operating condition. Each file contains one or more cells. The file
name format of a model file is liberty_op_pt.lib, (liberty _typ_pvt.lib, for
example).
■
Verilog models — Verilog models are written to the char_dir/models/verilog
directory and have the .v file extension. A single model file is written out with
the default name verilog.v.
■
IBIS models — IBIS models are written to the char_dir/models/ibis directory
and have the .ibs file extension. A single model file is written out with the
default name ibis.ibs.
The base name of the files can be changed with the -output switch to the
model command.
For example, the following commands generate two libraries, one best-case
and one worst-case:
model –operating_condition fast_3.3v –library_type best
MY_IO_CELL
model –operating_condition slow_3.0v –library_type worst
MY_IO_CELL
Model Preprocessing
Model preprocessing (MPP) consumes the process model file and produces
per-cell model/netlist files with all of the resolved device parameters and
equations. Using model preprocessing greatly reduces the I/O of parsing
process files for each simulation during the distributed characterization,
improving performance without losing accuracy.
MPP can be run on a charpoint and you can come back and continue (or rerun)
the flow at a later point. It reruns each time with the first step (either import or
configure), even if there is no change in the original netlists and process
files.
Model preprocessing supports the following:
■
Precharacterization based flows
■
HSPICE, FineSim, FSE based characterizations
■
EM & LVF characterizations
■
Different driver modes
The following sections describe model preprocessing:
■
Suggested Usage
■ Enabling MPP
■
Using Non-HSPICE Simulators
■ Running MPP
■
Netlist Locations
■
Failures
■
Example Netlists
Suggested Usage
The following steps are recommended:
1. For every node and new extraction, pick 1 cell per family.
2. Run the characterization with and without MPP.
3. Compare the data (delay/slew/constraints/etc.)
4. If the comparison shows very close data (which is expected), then enable
MPP for the entire library.
Enabling MPP
Enable MPP by setting the parameter advanced_node to 1 in either in the
default params block of the configure file or with set_config_opt in the
run.tcl file. The default of advanced_node is 0, which disables MPP.
If you set advanced_node in the run.tcl file, you must set it before the first
command of the SiliconSmart flow begins (which will be either import or
configure).
For example:
set_config_opt advanced_node 1
Running MPP
MPP is automatically invoked before the first step of your SiliconSmart flow
(either import or configure), no separate command is required to invoke it.
Netlist Locations
The original netlist is preserved in the charpoint, saved as: <cell>.<extn>.orig
The new netlists are located as soft links in the netlists directory. The actual
post-MPP netlists are located in: <charpt>/runtime/<pvt>/PP/NewNetlists
Failures
If MPP fails (due to tool version/process files incompatibility or other license
issues), it will not stop the flow. The SiliconSmart tool will give a warning and
will unset the advanced_node parameter and continue the flow as usual as if
it were run without MPP, falling back on the normal netlists.
Example Netlists
Using MPP will not change the original netlist. A new copy of the netlist will be
prepared and saved in the charpoint. The original netlist will be soft-linked in
the charpoint.
For example, below is the original netlist:
*Example Netlist
*Buffer 2
*Pins: VDD VSS A Y
M1 N1 A VSS VSS NCH W=0.4U L=0.25U
M2 VDD A N1 VDD PCH W=0.8U L=0.25U
M3 Y N1 VSS VSS NCH W=0.8U L=0.25U
M4 VDD N1 Y VDD PCH W=0.16U L=0.25U
Liberty Models
A Liberty model consists primarily of two types of data: timing characteristics
and power characteristics. Timing characteristics represent intrinsic pin-to-pin
delays, output slews, setup/hold times, and recovery/removal measurements. It
Styling Options
SiliconSmart provides several options for controlling stylistic aspects of the
published Liberty model. The stylistic control allows you to adjust the units and
precision of the data in the published library, filter out nonmonotonic data, and
bind constraints to nonnegative values. Each of the options is controlled via the
following parameters in the default parameter block:
■ liberty_cap_unit — specifies the units to use for capacitance values.
■
liberty_time_unit — specifies the units to use for time values.
■
liberty_increasing_delay_with_load — specifies the minimum
delta between delay values in a table as load increases.
■
liberty_increasing_delay_with_slew — specifies the minimum
delta between delay values in a table as slew increases.
■
model_negative_constraints — when set to false, negative
constraint values are forced to 0.
■
model_negative_delays — when set to false, forces negative delay
values to 0. Otherwise, negative delay values are generated in the model.
■
model_negative_energy — when set to false, negative energy values
are forced to 0. Otherwise, the exact values are modeled.
■
model_negative_leakage — when set to false, negative leakage
values are forced to 0. Otherwise, the exact values are modeled.
■
model_significant_digits — specifies the number of significant
digits to use for the data in the model.
■
liberty_max_capacitance — controls the generation of the Liberty
max_capacitance attribute. See the following section for details.
■
liberty_max_transition, calculate_max_transition,
liberty_tmax_input, liberty_tmax_output — controls the
generation and value of the Liberty max_transition attribute. See the
following section for details.
■
model_mpw_attribute — when true, minimum pulse width data is
modeled as Liberty attributes. When false, MPW data is modeled as a
table.
not guarantee accuracy for extrapolated values. The min/max attributes will
inform you about these potential extrapolation problems.
These attributes define the valid input slew and output load ranges, which are
then used by the STA tool to inform the designer if a port/net is experiencing a
transition or load beyond this valid range. These attributes are also known as
DRC (Design Rule Constraint) attributes.
You can use the SiliconSmart tool to control the following Liberty pin attributes
in a new or existing Liberty model:
■
Writing min_capacitance and min_transition
■
Writing max_capacitance
■
Writing max_transition for New Liberty Models
■
Writing max_transition for Recharacterized Models
Writing max_capacitance
By default, the max_capacitance attribute is set for all output pins as the
upper limit of capacitance load for output and inout pins; it selects the minimum
of the maximum among all capacitive load indices for all timing arcs that
terminate at that pin (output/inout).
You can instead have the max_capacitance value determined by the output
capacitance, where the output transition = max_tout. If max_tout is larger
than the largest tout in the rise/fall_transition tables, it will instead be
determined by the maximum capacitance index. Set the parameter
liberty_max_capacitance_mode to 2 to enable this behavior.
By default, the max_capacitance attribute will be generated for a new model
and updated when recharacterizing an existing Liberty model. For
recharacterization, the max_capacitance attribute will be generated if it does
not already exist in the Liberty.
To disable the generation of the max_capacitance attribute for new models,
or to disable modifying this attribute when recharacterizing an existing model,
set the parameter liberty_max_capacitance to 0.
You can also use the set_liberty_attribute command to set a hard-
coded max_capacitance value to pins, ignoring the value determined by
liberty_max_capacitance_mode, as shown below:
set_liberty_attribute –cell cell_name –pin Y max_capacitance 0.06
Slew Derating
The Liberty format supports a concept known as slew derating in which slew
rates are derated (scaled) to a different set of slew thresholds. This allows the
slew rates to be measured at one set of slew thresholds and then scaled to a
different set, perhaps to match existing intellectual property. SiliconSmart
supports this capability in both the recharacterized model flow and the new
model flow.
For the recharacterization flow, the input Liberty model should have the Liberty
attribute slew_derate_from_library set to a value less than 1.0.
SiliconSmart reads the slew derating factor from the input Liberty model and
scales the slew values accordingly for characterization. You must verify that the
characterization trip points are correct in the configure.tcl file through the
logic_low_threshold and logic_high_threshold parameters. When
the output Liberty model is generated, SiliconSmart scales the slew values
back to match the input Liberty model, again using the
slew_derate_from_library attribute from the input Liberty model to
determine the scaling.
For example, if the original .lib file has slew thresholds of 10% and 90% and
slew_derate_from_library is set to 0.5, then a slew rate of 1.2ns in the
.lib file will be scaled to 0.6ns (1.2ns * 0.5) and written into the instance file
(.inst) for the cell. Additionally, the logic_high_name and logic_low_name
parameters should be set to 0.7 and 0.3, respectively. (The slew rate is the ratio
of the parameters: 0.5 = (0.7 - 0.3) / (0.90 - 0.10)).
For the characterization flow, two parameters,
slew_derate_upper_threshold and
slew_derate_lower_threshold, can be set in the default parameter block
in the configure.tcl file. These parameters are used to calculate the Liberty
slew_derate_from_library attribute based on the characterization
thresholds as specified by the logic_high_threshold and
logic_low_threshold parameters of the default pin type block.
All slew values in the output Liberty model will be scaled based on the settings
of these parameters. For example, consider the case where characterization
was performed with logic_high_threshold set to 0.7 and
logic_low_threshold set to 0.3. If slew_derate_upper_threshold is
set to 0.9 and slew_derate_lower_theshold is set to 0.1, the Liberty
attribute slew_derate_from_library will be computed as (0.7 - 0.3) /
(0.9 - 0.1) = 0.5. A slew rate measured as 0.6ns measured from 30% to 70%
will be scaled as 0.6 / slew_derate_from_library = 0.6 / 0.5 = 1.2ns. This
is the value that will appear in the generated .lib file.
Refer to the Library Compiler User Guide for detailed examples of Liberty
format for different multi-bit flip-flop structures.
Note: The SiliconSmart tool does not support bus syntax for multi-bit
cells.
For multi-bit cells with scan, the test_cell group must be defined in the
Liberty model. Follow the same rules given for test_cell modeling as
detailed in Generating a test_cell.
under the cell scope. These parameters specify these attributes intended for
the final library of the dedicated cell:
■ single_bit_degenerate — this parameter defines a corresponding
layout-related attribute in Liberty syntax. It defines a name of a single-bit
library cell for use on multi-bit bundle cells that are black boxes. This allows
synthesis and implementation tools to perform mapping from the single-bit
cell to the multi-bit cell.
■
scan_start_pin — this parameter defines a corresponding attribute in
Liberty syntax. It specifies the scan output pin of a sequential element of the
multi-bit scan cell, where the internal scan chain begins. It is defined in the
bus or bundle group.
Attributes for the various units must be set so the library model results are
properly scaled (as required by the applications that use the models). For
example, the voltage unit must equal the current unit multiplied by the pulling
resistance unit. SiliconSmart allows you to set the time, capacitance, and
resistance units and derives the other units as appropriate.
The default values for each of the unit attributes are as follows:
Example 156
time_unit 1ns
voltage_unit 1V
current_unit 1mA
leakage_power_unit 1uW
capacitive_load_unit 1pf
pulling_resistance_unit 1ohm
Most of these unit attributes can be set in the default block of configure.tcl
with the corresponding SiliconSmart parameters, as shown below. The values
for these parameters are case-sensitive.
set liberty_time_unit 1ps|10ps|100ps|1ns
set liberty_cap_unit 1ff|10ff|100ff|1pf|10pf|100pf
set liberty_resistance_unit 1ohm|1kohm|1mohm
Only those attributes that are supported by the Liberty format actually appears
in the model. Others are ignored.
Example 159
model –verilog –output tag cells
This will produce the tag.v, tag_udp.v and tag_test.v files in the models/verilog/
directory. Note that internally, SiliconSmart also constructs a simple timing-only
Liberty model prior to generating the Verilog files. The timing constructs in the
specify block of the Verilog file are then directly derived from this timing model.
As a result, the preceding model command will also produce a tag_pvt.lib
Liberty model in the models/liberty/ directory.
Unit Delay
A Boolean parameter verilog_unit_delay controls if the unit delay model
is produced. This unit delay model is particularly useful in a back annotation
flow. The parameters verilog_default_combinational_delay,
verilog_default_sequential_delay and
verilog_default_constraint_delay determine the default delay to be
used for combinational, sequential and constraint arcs when the unit delay
model is used.
Constraint Constructs
The Boolean parameters verilog_use_setuphold and
verilog_use_recrem determine if setup/hold and recovery/removal
constructs are modeled as a single construct. The Boolean parameter
Notifier
When the Boolean parameter verilog_model_notifier is set to true, a
notifier column is added to the UDP tables generated for a generic flop or a
latch. The name of the notifier column can be specified using the
verilog_notifier_name parameter.
Generating a test_cell
Typically, the scan version of a flop/latch is identified by linking it appropriately
with its corresponding non-scan version. The Liberty model for scan cells will
contain an additional test_cell group. The Verilog model for scan cells will
The test_cell group will contain all pins of the parent cell, with the scan pins
containing an additional signal_type attribute. The next_state attribute in
the ff group of the test_cell group is evaluated by disabling the
scan_enable pin in the next_state attribute in the ff group of the parent
cell.
To produce the test_scan_out_inverted attribute in test_cell groups
for scan flops/latches, specify the scan_output_inverted parameter.
Note: If the non-scan cell does not exist in the given library, then the
user needs to provide a non-empty string as a placeholder for the
non_scan_model parameter.
The following example shows how to generate a test_cell when the non-
scan cell does not exist in the given library:
Example 161 Generating test_cell when non-scan model does not exist
add_pin CK clockpin -clock
add_pin R default -input
add_pin SE default -input
add_pin SI default -input
add_pin Q0 default -output
add_pin Q1 default -output
add_pin D0 default -input
add_pin D1 default -input
##
## Cell function definition.
##
add_flop IQ0 IQN0 CK {(!SE&D0)|(SE&SI)} -clear R
Methodology
When a distributed process step starts, SiliconSmart starts up a set of
characterization engines via your chosen load sharing system - Sun GRID,
RTDA's NetworkComputer (NC), or LSF. The number of characterization
engines to be started is controlled via the run_list_maxsize parameter,
which specifies the maximum number of CPUs to use for a given task.
SiliconSmart submits each of these as a separate job to LSF, NC, or Grid, or, if
run in standalone mode, starts it as a separate process.
Each characterization engine process connects back to the original
SiliconSmart process via a socket to request tasks to run. As a characterization
engine completes a task, the results are posted back to the client and
additional work is requested. This system allows SiliconSmart to dynamically
balance the load across as many CPUs as are available and across CPUs of
different processing speeds.
As the distributed processing engine runs, it reports the percentage of tasks
that have completed. SiliconSmart schedules the largest cells and the slowest
measurements first (for example, setup measurements before simple delay
measurements) to help keep the load balanced until the very end of the run to
maximize throughput. This means that the first 50% of the characterization run
requires more time than the last 50% because the hardest jobs are done first.
The characterization engines run for the complete duration of the given
command until there are no more tasks to run. When working with a shared
compute farm, it can be desirable to have the characterization engine
processes stop and restart in order to allow other uses access to the same
CPU slot. This feature is supported via the cdpl_worker_timeout
parameter, which specifies a maximum runtime in minutes for each
characterization engine.
The parameter scheduler_poll_time controls the SiliconSmart status
update mechanism. It is the number of seconds SiliconSmart waits between
polling the load sharing system for job status. The time difference between two
status updates for SiliconSmart during characterization is at least the value of
scheduler_poll_time and the percentage difference should be at least 2
percent.
As the processing continues, SiliconSmart updates the percentage complete in
increments of 2%. The 2% increments keep the logs from filling up with status
messages, but it does mean that the time between messages can be 15
minutes or more for long characterization runs, especially at the start of a run.
One way to verify whether everything is running correctly is to use the LSF
bjobs or GRID qstat commands to verify whether the characterization
engines have been submitted correctly and whether they have started running.
Memory Characterization
Supported Simulators
Only the FineSim and FineSim Embedded simulators are supported for
SiliconSmart memory characterization.
Note: See the Template File Examples section for more detailed
information on what is contained in a template file.
The below figure shows the SiliconSmart memory characterization data flow:
■
Generating Single CCBs
■
Example Run Script for CCS-Noise Add-On Flow
Required Inputs
This flow requires the following inputs:
■
SPICE netlist and corresponding process models
■
Reference Liberty model (to which CCS noise data is to be added)
Required Settings
The following can be set in either configure.tcl or in the flow file run.tcl:
■
Specify device model names — while configuring for CCSN, the
SiliconSmart tool partitions the cell netlist to generate CCBs, which requires
N-type and P-type transistor model names used in the cell spice netlist to be
specified using the nmos_model_names and pmos_model_names.
Additionally, the following parameters support resistor, capacitor and diode
SPICE sub-circuit wrappers (X-instance calls) in the SPICE netlist:
res_model_names, cap_model_names, dio_model_names.
Please see Example Run Script for CCS-Noise Add-On Flow for example
definitions of the above.
■
Specify simulator and simulator options — define the simulator-related
parameter settings (simulator, simulator_options,
simulator_cmd). Note that only FineSim or FineSim-Embedded are
supported for memory instances.
Note: The MACMOD=1 option for simulator options is needed if the
SPICE process models have sub-circuit definitions for the
NMOS or PMOS transistor models.
At bus-level:
memory_read() {
…
}
memory_write() {
…
}
If the imported .lib does not have any of the above statements, you should set
the parameter sis_cell_type_memory to 1 before the import command in
the run script to identify the cell as a memory.
#Add any custom settings for this run. These can be directly added
#to the configure.tcl as well.
#In case the Imported Lib does not have any memory based constructs,
#identify that it is in-fact importing a memory cell.
set_parameter sis_cell_type_memory 1
Importing
Use the import command to import the template file, netlist directory,
extension of the netlist, and (optionally) a Liberty file. The state table will always
be generated automatically during the import step.
The following figure shows the files necessary for the import step and the files
that will be created as a result.
where:
■
template_file — the template file to be imported.
■
netlist_dir — the netlist directory which contains the netlist to be
imported.
■
extension — the netlist file extension.
■
liberty_file — the liberty file to be imported.
■
[-overwrite] — is an optional switch that, when specified, will overwrite
the existing instance file during the import step.
See Also
■
Creating the Template File
■
configure.tcl File Methodology
■
Instance File Methodology
The above template file will automatically generate the following state table
during the import step:
R L L L L/H : - - - : L/H n -
R L L H L/H : - - - : n L/H -
R L H L - : L/H - - : n n L/H
R L H H - : - L/H - : n n L/H
R H - - - : - - - : n n n
- - - - - : - - - : n n n
The above template file will automatically generate the following state table
during the import step:
CLK CE A CLK CE DB AB : me me iq : me me iq
A NA A B NB m m2 m m2
- - - r L L/H L : - - - : L/H n -
- - - r L L/H H : - - - : n L/H -
R L L - - - - : L/H - - : n n L/H
R L H - - - - : - L/H - : n n L/H
- - - r H - - : - - - : n n n
R H - - - - - : - - - : n n n
- - - - - - - : - - - : n n n
Example Template for Single Port Ram with Test, Pipeline, Write Through,
and Extra Margin Adjustment
This is an example of a single port ram with independent read write operation.
This memory also supports pipeline mode operation, write through mode
operation, test mode operation and extra margin adjustment mode.
To make all the above mentioned modes operational, the
set_pipeline_mode, set_writethrough_mode, set_bist_mode, and
set_extramargin_adjustment_mode commands have been used.
This memory is capable of operating in both functional mode and test mode.
Functional Mode Signals
The following signals are associated with the port while it operates in functional
mode:
■
CLK is the clock associated with the port.
■
ADR is the address bus and D is the data bus.
■
WE has been used as both read enable and write enable signal.
When the value of WE is L, read operation takes place on the port. When the
value of WE is H, write operation takes place on the port. ME is the memory
enable signal associated with the port. Any read or write operation can take
place through the port only when the value of ME is H.
The value of BISTE decides whether the memory will operate in functional
mode or in test mode. When the value of BISTE is H, the memory will operate
in test mode. When the value of BISTE is L, the memory will operate in
functional mode. When the value of PIPEME is H the memory operates in
pipeline mode during read operation.
RME is the extra margin adjustment enable pin and RM is the extra margin
adjustment bus. RME and RM do not take part in state table but they are present
in when conditions.
WEM is the maskable write enable associated with the port. When it is in active
high state, part of memory word is written into depending on which bit of WEM
has H value. TCLKE is the test clock enable signal which when high selects the
test mode clock and which when low selects the functional mode clock.
Q is the data output and QP is the pipeline output associated with the port.
Test Mode Signals
The following signals are associated with the port while it operates in test
mode:
■
TCLK is the clock associated with the port.
■
TADR is the address bus and TD is the data bus.
■
TWE has been used as both read enable and write enable signal.
When the value of TWE is L read operation takes place on the port. When the
value of TWE is H write operation takes place on the port. TME is the memory
enable signal associated with the port. Any read or write operation can take
place through the port only when the value of TME is H. When the value of
TPIPEME is H, the memory operates in pipeline mode during write operation.
TWEM is the maskable write enable associated with the port. When it is in active
high state, part of memory word is written into depending on which bit of TWEM
has H value.
Some input pins have also been added through the add_input_pin
command and few of these input pins have been tied to low through the
set_input_pins_tiedto_low command.
These input pins do not affect the function of the memory either in the
functional mode or the test mode but they need to be defined to generate a
complete instance file.
Configuring
The following sections describe the configure.tcl file used for memories:
■
configure.tcl Checklist
■
configure.tcl File Methodology
configure.tcl Checklist
You should use the following checklist as a guide to finalize the configure.tcl file:
■
Check that all NMOS and PMOS model names are defined correctly.
■
Check that the SPICE module file path and PVT are defined correctly.
■
Check that all simulator options are defined as required.
■
Check that all supply and ground nodes are defined correctly.
■
Check that all parameter settings in configure.tcl are correct.
In this example, CLK and CEN are standard single pin input signals and are
therefore defined using the default pin type. Conversely, D, Q, A, and WEN are
The above is the result of the import command taking the template.tcl file as
an input and defining all bus-specific pintype to the configure.tcl file
automatically.
The SiliconSmart tool supports three bus-specific pin type parameters:
■
bus_width — This required attribute specifies the number of bits in the
bus. The default value is 1 for pins and must be greater than 1 for busses.
■
target_bits — This optional attribute specifies a subset of the pins to be
used in delay/power measurements. This attribute recognizes the fact that
for a wide bus of say 64 bits, it is not necessary to probe for measurements
on all the bits; it is sufficient to examine only a select few of those 64 bits to
obtain accurate results. Each target_bit is specified such that it is a non-
negative integer between 0 and (bus_width - 1). If target_bits is not
explicitly specified then, by default, all the bits in the range [0,
(bus_width - 1)] will be considered for characterization. This parameter
is used in conjunction with the bus_width parameter.
■
default_bus_value_i — This optional attribute specifies the set of
default values that should be used for the busses. Here i is a non-negative
integer. The default_bus_value_0 defines the state of each bit in the bus
when the bus is in low (L) state. Therefore the value of
default_bus_value_0 as 0b00000011 means that a value of 0 or L on
the 8-bit bus actually means that the first 6 bits are at 0 and the last 2 bits
are at 1. Similarly, the default_bus_value_1 defines the state of each
bit in the bus when the bus is in high (H) state. Therefore the value of
default_bus_value_1 as 0b11111111 means that a value of 1 or H on
the 8-bit bus actually means that all the 8 bits of the 8-bit bus are at a logical
value 1. By default, the default_bus_value_0 sets all the bits to 0 and
default_bus_value_1 sets all the bits of the bus to 1.
This parameter can be used with the target_bits parameter to perform
specific measurements on a single bit. This parameter is used in conjunction
with the bus_width parameter.
These bus definitions are usually defined in the configure.tcl file. For instance,
the following pin type bus definitions must be defined for the previous example
SRAM in configure.tcl:
Example 171
pintype bus_10->default {
set bus_width 8
set target_bits { 0 7 }
set default_bus_value_0 0b00000011
set default_bus_value_1 0b11111111
}
pintype bus_16->default {
set bus_width 16
set target_bits { 0 }
}
pintype bus_2->default {
set bus_width 2
}
As the names indicate, bus_8 refers to 8-bit bus and bus_16 refers to 16-bit
bus. As target_bits is a pin type parameter, it also can be set on a per-arc
basis by using the set_config_opt command.
For example, the following command added to the memory’s instance file sets
the target_bits pin type parameter specifically for the output bus Q, as
follows:
Example 172
set_config_opt –from CLK -to Q –pin Q target_bits {1}
The set_config_opt here defines that for all arcs from CLK to Q, the
measurements will be done on only the target bit 1 of the 16-bit Q bus.
The remaining configuration setup is similar to the standard cell configuration
setup (Refer to Configuring Cells).
The below interface description applies for the above SRAM (this is the same
SRAM mentioned in Figure 27 and Figure 28):
Example 173
set_cell_type memory
#pin descriptions
add_pin D bus_16 –input
add_pin Q bus_16 -output
add_pin A bus_10 –input
add_pin CEN default –input
add_pin WEN bus_2 –input
add_pin CLK default input
In the previous example, CLK and CEN are standard single pin input signals and
are therefore defined using the default pin type. Conversely, D, Q, A and WEN
are memory-specific bus signals and therefore they must be defined with
appropriate bus specific pintypes defined in configure.tcl.
The functional description has to be specified in the form of a state table (using
add_table command) and using the add_function command. The state
table essentially contains information of the states of the pins that enable the
memory read, write and disable operations. This is similar to the truth tables to
describe logical function of cells. This is constructed from the functionality
information contained in the memory user guide or the data sheet.
The state-table format is:
Example 174
add_table {
list of input_pins: output_pin (present state) : output_pins
(next state)
input pin values: output pin values (present) : output pin values
(next)
}
The following table describes the single port SRAM with address (A), data (D),
chip enable (CEN) and write enable (WEN) with write through feature enabled.
Example 175
add table (
#write operation
#read operation
R H L L - : L/H - - : N N L/H
R H L H - : - L/H - : N N L/H
#no-operation
R - H - - : - - - : N N N
~r - L - - : - - - : N N N
}
add_function Q iq
add_pin mem_int default –internal –spice_node
{dummy_internal_node}
add_function mem_int mem
The first two rows of the state-table describe the write operation. The first row
states that when CLK is rising, CEN (chip enable) is low, WEN (write enable) is
low, the data present at address L is written into a memory register mem.
Similarly, the second row states that the data present at address H is written
into a memory register mem2. The two registers mem and mem2 are logical
names given to the memory word locations specified by addresses L (all
address bits are 0) and H (all address bits are ones) respectively.
The next two rows describe the read operation. The third row states that when
CLK is rising, CEN is low, WEN is high, address (A) is L, the contents of the
register mem appear at the output register iq. Similarly, the fourth row states
that when the address A is H, the contents of the register mem2 appear at the
output register iq.
The last two rows describe the no-operation or the disabled state of the
memory. The fifth row suggests that when CEN is high, no change takes place
in the memory or at the output. The previous state of the memory is retained.
Similarly, the last two states that if the clock is not rising, no change in the state
of the memory occurs.
The memory register mem is a name given to the memory word when the
address is L (that is, when all address bits are 0). The bit cell of this word
mem_int is associated with an internal SPICE node using the add_pin and
add_function command as follows:
Example 176
add_pin mem_int default –internal –spice_node
{dummy_internal_spice_node} add_function mem_int mem
As Figure 33, shows, the pin mem_int is a logical name given to the bit-cell of
the word mem. This bit-cell of the word mem is actually associated with an
internal SPICE node in the netlist.
This internal SPICE node is the storage node of the bit cell that stores the data
written into it.
SiliconSmart performs the constraints measurement either on the internal node
mem_int or at the outputs for different control pins. You must find this internal
SPICE node and then substitute this dummy SPICE node name in the instance
file with the actual SPICE node in the following command:
Example 177
add_pin mem_int default –internal –spice_node
{dummy_internal_spice_node}
SiliconSmart can find the internal SPICE node automatically. The method of
finding the internal SPICE node is described in the Finding Internal Nodes for
Constraints section.
The state table can also be generated using template-based flow. For more
information, please refer to the Basic Memory Characterization Flow section.
Pin definitions:
add_pin CENA default –input
add_pin CENB default -input
add_pin AA bus7 -input
add_pin AB bus7 -input
add_pin DB bus2 -input
add_pin CLKA default -input
add_pin CLKB default -input
add_pin QA bus2 -output
set_subckt_ports { QA_1 QA_0 CLKA CENA AA_6 AA_5 AA_4 AA_3 AA_2
AA_1 AA_0 CLKB CENB AB_6 AB_5 AB_4 AB_3 AB_2 AB_1 AB_0 DB_1 DB_0
VDD VSS }
CLK CE AA CLK CE DB AB : me me iq : me me iq
A NA B NB m m2 m m2
- - - r L L/H L : - - - : L/H N -
- - - r L L/H H : - - - : n L/H -
R L L - - - - : L/H - - : n N L/H
R L H - - - - : - L/H - : n N L/H
- - - r H - - : - - - : n N n
R H - - - - - : - - - : n N n
- - - - - - - : - - - : n N n
}
add_function QA iq
add_pin mem_int default -internal -spice_node
{xi0_0.xi0_0.xi3_1.xi0_0.nt}
add_function mem_int mem
Pin definitions:
add_pin CA default -input
add_pin WA default -input
add_pin CB default -input
add_pin WB default -input
add_pin AA bus7 -input
add_pin AB bus7 -input
add_pin DA bus2 -input
add_pin DB bus2 -input
add_pin CKA default -input
add_pin CKB default -input
add_pin QA bus2 -output
add_pin QB bus2 -output
# write on port A
L L L L/ r - - - - - : - - - - : L/H N N N
H
L L H L/ r - - - - - : - - - - : L/H N N N
H
#read on port A
L H L - r - - - - - : L/H - - - : N N L/ N
H
L H H - r - - - - - : - L/H - - : N N L/ N
H
# write on port B
- - - - - L L L L/ r : - - - - : L/H N N N
H
- - - - - L L H L/ r : - - - - : N L/H N N
H
#read on port B
- - - - - L H L - r : L/H - - - : N N N L/
H
- - - - - L H H - r : - L/H - - : N N N L/
H
# no-operation
H - - - r - - - - - : - - - - : N N N N
- - - - - H - - - r : - - - - : N N N N
Synchronous ROM
ROM access is synchronous and is triggered by the rising edge of the clock,
CLK. The address input and chip enable are latched by the rising edge of the
clock, respecting individual setup and hold times. The value of chip enable
must be low (CEN=0) (for a ROM with active low enable signal) for a read
operation to occur. During a read cycle, data on the data output bus Q[n-1:0]
is read from the memory location specified on the address bus A[m-1:0].
The following is the interface and functional description of this cell:
Example 180
set_netlist_file [get_location]/netlists/ROM128x2x8.cdl
set_cell_type memory
Pin definitions:
add_pin CEN default -input
add_pin A bus7 -input
add_pin CLK default -clock
add_pin Q bus2 -output
set_subckt_ports { Q_1 Q_0 CLK CEN A_6 A_5 A_4 A_3 A_2 A_1 A_0
VDD VSS }
CLK CEN A : iq : iq
R L L : - : L
R L H : - : H
- H - : - : n
- L - : - : n
add_function Q iq
The internal node mem_int should be defined in the instance file as follows:
add_pin mem_int default –internal –spice_node dummy
3. Ensure that all delay arc characterizations are passing with the existing
instance file. If the delay arcs are characterized successfully, then the
functional description in the instance file is correct.
If any of the delay arcs failed, then re-check the functionality of the memory
described in the instance file.
4. When the functionality of the memory described in the instance file passes,
the internal node mem_int should be defined in the instance file as:
add_pin mem_int default –internal –spice_node
{actual_internal_spice_node}
Use the optional -match expression switch while finding the internal
node to reduce the overhead of running for all constraints. For example,
-match setup & hold uses the same nodes. See
find_internal_nodes_for_constraint for more information.
There is another flow where you can first find out the potential candidates for
the internal node and then select a few nodes among them and then test each
of these nodes to find out the correct internal node. This flow is useful if you
either already have some knowledge on the potential candidates for the internal
node or if there are too many internal nodes to test.
See Also
■
Command: find_potential_internal_nodes
■
Command: test_internal_nodes_for_constraint
extent. Please note that these optimizations can only be used with FineSim Pro
or Embedded FineSim Pro and require special ACE memory licenses. The
following are the available memory characterization optimizations that is
supported by SiliconSmart.
The following topics are described in this section:
■
Active Node Based Netlist Pruning
■
Initialization
■
Using Constraint Seeds
■
FineSim Pro Options
■
Memory Characterization through Back-Annotation
■
Limitations with Optimization
When pruning is enabled, SiliconSmart first performs a very fast SPICE run for
each arc to find out the inactive nodes and then based on the switching activity
of the nodes, prunes the original SPICE netlist for that arc. The actual
simulation and the measurements are then performed on the pruned netlist.
The active node based pruning flow can be made to work with either a flat RC
extracted netlist or a hierarchical prelayout netlist that is to be back annotated
with RC parasitics contained in a DSPF file.
This active node based pruning flow will give best results for a memory
characterization flow that uses the schematic level pre-layout netlist to be back-
annotated with the extracted interconnect RC parasitics contained in a DPF/
DSPF file. The flow uses the schematic level netlist (without RC) for pruning
and then uses the pruned netlist to be back-annotated with the extracted
interconnect RC parasitics contained in a DSPF/SPF file for the actual
simulation for runtime improvement. A runtime improvement of more than 5x
can be obtained with the pruning flow over running the full-flat DSPF netlist.
See Also
■
Command: report_pruning
■
Parameter: internal_power_supply_spice_nets
■
Parameter: internal_ground_supply_spice_nets
■ Parameter: detect_internal_power_nodes_for_pruning
■
Parameter: sis_pruning_with_flat_netlist
■
Parameter: node_activity_tolerance
■
Parameter: node_stability_pruning_threshold
Initialization
For sequential memory cells, it is essential to initialize memory into a known
state before the actual measurements can be taken. SiliconSmart runs
initialization stimuli in separate simulations from the actual transitions under
test. This is implemented using either the .IC SPICE directives to save and
restore the post-stimulus values of circuit nodes, and it is aimed at reducing the
overhead involved in acquiring multiple measurements with the same
initialization stimulus. By sharing the stimulus, these measurements are now
much shorter, and the initialization stimulus is only simulated once, with the
resulting savings in simulation time for the actual measurement done for
several slew/load points. The separate initialization mode is controlled using
the parameters separate_cell_initialization. The parameter
separate_cell_initialization can have values of off, on, and ic (the
default value). A value of off disables separate initialization, and ic enables it
using the selected directive.
those values for more accuracy, you can import the Liberty file with the switch
-use_constraint_seeds. For more details, please refer to the explanation
of the import command.
SiliconSmart can use the imported setup and hold tables as seeds to the setup
and hold measurements for faster characterization and more accurate data.
The constraint_seed_values specifies the default values used for
independent setup and hold constraint acquisitions. The defaults help reduce
the amount of simulation time by providing a good initial guess. This parameter
can be set to a scalar value based on the input transition times of the data and
clock pins. For more details, please see the Constraints section.
When an input .lib is not available, or if the constraint values in the input .lib
cannot be used as seed values (because they are at a different PVT condition),
then constraint_simulated_seed can be used. This parameter uses a
2x2 constraint simulation to determine the initial search range for the full
constraint.
Note: This feature must be used only if you are certain that the
constraint values that are used as seeds are fairly close to the
actual constraint values. This can be useful for cases where a
memory has been characterized for one corner. In such a
scenario, the constraint values for this corner can be used as
seeds for characterizing the constraint arcs for another corner.
This option can used by itself or with a combination of other options of the
import command.
Usage 1
import -template template_file –dspf_netlist_for_backannotation
DSPF_netlist_path
In the above case, SiliconSmart will automatically remove the RCs from the
DSPF file and generate a new DPF file.
■ This new DPF file will be used for pruning and finding internal nodes.
■
For actual characterization, the original DSPF file will be back-annotated to
the generated DPF file.
■
If there is a hierarchical netlist, it will be flattened automatically.
■
The FineSim options will be set automatically for the back-annotation flow
for characterization. If the user specifies some specific FineSim options to
use, they will be retained.
Usage 2
import -template template_file –netlist_dir netlist_dir
-extension ext –dspf_netlist_for_backannotation
DSPF_netlist_path
This command can be used if the user has a hierarchical CDL netlist and an
extracted DSPF netlist that can be back-annotated.
■
The CDL netlist will be specified using the options -netlist_dir and
-extension, similar to any other netlist file.
■
The hierarchical netlist will be flattened automatically.
■
The FineSim options will be set automatically for the back-annotation flow
for characterization. If the user specifies some specific FineSim options to
use, they will be retained.
The SiliconSmart tool will automatically add "*|DIVIDER ^" in the RC-
extracted netlist netlist_name_edited.
Liberty Output
In contrast to standard cells that have independent output ports, memories
consist of buses containing multiple output bits with simulation results that must
be compressed into a single value or a single table. Regardless of the width of
the busses in the memory, the final results in the Liberty model contain only a
single value or look-up table. Thus, there is a need to convert multiple result
values into a single consolidated result.
This consolidation step for each type of measurement is described below:
■
Delay
■
Power
■
Input Capacitance
■
Setup/Hold
■
CCS Timing
■
Individual Bit Modeling Support
■
Extra-Margin Adjustment Pins in Memories
Delay
Delay measurements are controlled by the library_type switch to the model
command, which is specified as maximum, minimum, or average. For each
PVT/load/slew combination, the multiple look-up tables associated with
target_bit is considered and compressed using a MAX, MIN or AVG
operation. In other words, the appropriate delay value across all the bits is
extracted and stored in a single lookup table.
Power
Power measurements consist of the following two components:
■
CapEnergy — corresponds to the energy expended in charging up the
output capacitances.
■
Energy— corresponds to the energy expended due to the current flowing in
the Vdd supply.
The energy component is identical across all output bits because the Vdd
network is common to all the transistors. Thus it is sufficient to extract Energy
for any one of the target_bits. On the other hand, the CapEnergy
component can be different across output bits because the outputs can be
connected to different output loads. In this case, SiliconSmart performs a SUM
operation and extracts the aggregate CapEnergy across the bits. The
TotalEnergy is then given by the difference of Energy_single_bit -
(SUM) CapEnergy.
Note: It is more accurate to take the SUM across all output bits instead
of just the target_bits because all outputs contribute to
CapEnergy. However, SiliconSmart currently does not consider
the effect and models only the target_bits.
Input Capacitance
Input capacitance Cin is controlled by the model_pin_cap_calc parameter,
which is specified as max, min, or ave. Correspondingly, SiliconSmart performs
a max, min or ave operation to extract the appropriate Cin value across the
target_bits.
Setup/Hold
For setup/hold, SiliconSmart performs a MAX operation to extract the maximal,
worst-case value across the target_bits.
CCS Timing
SiliconSmart first produces CCS waveform information for all the
target_bits. The worst-case CCS waveform is the one that corresponds to
the output bit with the worst-case delay value for all the target_bits and
then selects the CCS waveform corresponding to the output bit with the worst-
case delay value. Also, be aware of the following underlying assumptions:
■
All drivers of the output bits have the same drive strength.
■
The differences between the parasitics influencing the bits are negligible.
■ There is no single outlier output bit with a delay that is substantially different
from the other bits.
bus_type : Q_bus_16_to_0 ;
max_capacitance : 1;
pin(Q[0]) {
timing() {
…
…
}
}
pin(Q[1]} {
timing() {
…
…
}
}
…
…
pin(Q[15]) {
direction: output;
timing() {
…
…
}
}
}
bus(A) {
bus_type : bus_4_to_0;
direction: input ;
timing() {
related_pin : “CLK” ;
when : “!CEB”
timing_type: setup_rising ;
rise_constraint(constraint_template) {
values(“….”);
}
fall_constraint(constraint_template) {
values(“ ….”);
}
}
}
The previous example shows a Liberty file having bus descriptions of bus Q and
bus A. The bus Q is a 16-bit bus and bus A is a 5-bit bus.
Bus Q has timing information for each bit in a separate pin block. The bus A
however has no pin blocks. In this case, the same timing and power information
applies to the whole bus (that is, to each of the bits of the bus). That means
that the data characterized for the bits of a bus can be modeled at a bus level or
for single/multiple bits in each pin block.
SiliconSmart supports the creation and modeling of characterized data at
individual bit level within the bus group depending on the value of the
liberty_bus_as_pins parameter.
The parameter liberty_bus_as_pins is used by modeler for the creation of
pin groups within the bus groups as specified in the value of this parameter.
The parameter is used as follows:
set_config_opt -pin bus liberty_bus_as_pins
{list_of_bit_or_range}
Example 186
set_config_opt –pin D liberty_bus_as_pins {0:7 8 9 10 11:15}
This means that individual pin groups within the bus group D will be created as
specified (that is, the following pin groups D[0:7], D[8], D[9], D[10],
D[11:15]) will be created within the bus group and data will be modeled
within each of these groups. If characterization is available for pins in the
specified range, the models for the pin range will be generated for the pin-
specific characterization.
The import command automatically creates these set_config_opt
commands for individual bit modeling for buses if the reference Liberty file has
such model format.
Please note that the parameter liberty_bus_as_pins is different from the
existing pin type parameter target_bits. The parameter
liberty_bus_as_pins is intended to be for Liberty modeling only and the
parameter target_bits is meant to be for characterization only. The concept
is that the model produced does not have to strongly depend on what is
characterized. For instance, a delay may be computed (characterized) for all
bits of a bus, but a model may have only a single number for the bus or for a
couple of sub-busses of the bus (0:7 8:15) for instance.
Example 187
set_config_opt –pin Q target_bits {}
set_config_opt –pin Q liberty_bus_as_pins {0:7 8:15}
Currently, SiliconSmart cannot characterize delay arcs from clock to output for
these individual states of the RWMA bus directly due to the limitation of
SiliconSmart being not able to expand the buses into individual bits for different
states during configuration. In order to characterize such arcs, you need to do
some manual intervention after the instance file is created from the import
command.
You need to expand such buses to individual pins using the add_pin
commands in the instance file after the import command. Since the bus in
expanded to individual pin-level in the instance file, it is important to know that
from a SiliconSmart perspective, the original bus is no longer visible.
SiliconSmart now only understands these pins which are essentially the parts
of the same bus. Any references to the original bus in the instance file in
set_config_opt command needs to be replaced with any of these expanded
pin name in the instance file.
Considering the previous example of the 3-bit RWMA bus, the following manual
intervention needs to be done in the instance file.
Replace the following line in the instance file add_pin RWMA bus_3 –input
with the following add_pin commands, as follows:
Example 189
add_pin RWMA_0 default -input
add_pin RWMA_1 default -input
add_pin RWMA_2 default –input
This essentially expands the bus RWMA into individual pins RWMA[0], RWMA[1]
and RWMA[2]. Since the original bus is no longer visible, any references to the
original bus in the instance file in any set_config_opt command where
explicit slews and loads are defined for that pin needs to be replaced with any
of these expanded pin name in the instance file.
For example, the following command:
Example 190
set_config_opt –from RWMA –ref CLK state_partitions one
Because the bus is expanded explicitly to individual pins in the instance file, the
measurements are also done on these pins separately (like setup and hold
The command set_pins_to_bus_map is used to tell the modeler that all the
individual pins specified by the -pins switch are the part of the same bus
specified by the -bus switch. For example, in the previous command, it means
that the individual pins RWMA_0 , RWMA_1, and RWMA_2 are all part of the same
bus RWMA and any measurement done with respect to these pins should be
modeled at bus-level RWMA.
User-Defined Node
Path-based constraints are the measurements of path based setup/hold
constraints for memories. The nodes to be used for path delay measurement
will be provided by the user. There will be one data node and one clock node
specified for setup measurement. Similarly, one data node and one clock node
will be specified for hold measurement. The functionality of these nodes in
terms of input nodes will be specified by the user.
Example 193
add_pin FB_SETUP default –internal –spice_node N_1 –no_model
add_function FB_SETUP D
set_config_opt-type setup path_constraint_feedback FB_SETUP
high slew threshold. The selection is done such that the constraint value is
maximum (pessimistic). Consider the following figure:
Note that bclk is measured at high slew threshold and P1 is measured at low
slew threshold such that Thold is maximum.
The new pin type can be used instead of default for these pins.
Since data input in memory will be a bus, it’ll be assumed that the internal
nodes specified correspond to the least significant bit of the bus.
It’ll be possible to specify different feedback/enable nodes for different
constraint measurements. For example, to specify a different pin for a
constraint between address pin (A) and clock (CLK):
Example 195
set_config_opt -type { setup } -from A -reference CLK \
-- path_constraint_feedback FB_A_SETUP
Auto-Generated Node
The parameter delay_based_constraint_mode must be set to on during
the import step in the template-based flow. If this parameter is set to on,
SiliconSmart will perform a structural analysis on the memory netlist to
determine the signal and clock nodes of data, address, and other signal pins.
In the above case, SiliconSmart will determine the clock and data nodes
corresponding to the 0th, 4th, 7th and 15th bits of the data bus and then
calculate the worst of the all the setup and hold values for each of these bits.
Example 197
set_path_based_constraint –bus A –target_bits {0 1 2 3 4 5 6 7}
In the above case, if the bus A is of 8 bits, SiliconSmart will determine the clock
and signal node for all the bits of the address bus.
The user can use this command to instruct SiliconSmart to determine the
internal nodes for any bus or pin. For a pin, the user needs to specify the
following command:
Example 198
set_path_based_constraint –pin CEN
Once the import step is complete, SiliconSmart will generate the instance file
that will contain clock and the data node information for each of the bits
specified in the template file. For example:
Example 199
set_config_opt -type {setup hold} -from D -reference CLK {\
delay_based_constraint_mode on
path_based_signal_nodes { {0 dw xi1_0/xi0_0/xi0_1/xi0_0/di
xi1_0/xi0_0/xi0_1/xi0_0/dnn dw_}\
{1 stubdw_1 xi7_0/xi0_0/xi0_1/xi0_0/di xi7_0/xi0_0/
xi0_1/xi0_0/dnn stubdw__1} }
path_based_clock_nodes \
{ {0 xi1_0/xi0_0/xi0_3/xi0_0/xi0_0/
cs0 xi1_0/xi0_0/xi0_1/xi0_0/gtpnd gtp_2 xi1_0/xi0_0/xi0_3/xi0_0/
xi0_0/cs0 xi1_0/xi0_0/xi0_3/xi0_0/xi0_0/cs1 xi1_0/xi0_0/xi0_3/
xi1_0/xi0_0/xi0_0/cs0 xi1_0/xi0_0/xi0_3/xi1_0/xi0_0/xi0_0/cs1
xi1_0/xi0_0/xi0_3/xi2_0/xi0_0/xi0_0/cs0 xi1_0/xi0_0/xi0_3/
xi2_0/xi0_0/xi0_0/cs1 xi1_0/xi0_0/xi0_3/xi3_0/xi0_0/xi0_0/cs0
xi1_0/xi0_0/xi0_3/xi3_0/xi0_0/xi0_0/cs1}\
{1 gtp_2 xi7_0/xi0_0/xi0_1/xi0_0/gtpnd xi7_0/xi0_0/xi0_3/xi0_0/
xi0_0/xi0_0/cs0 xi7_0/xi0_0/xi0_3/xi0_0/xi0_0/xi0_0/cs1 xi7_0/
xi0_0/xi0_3/xi1_0/xi0_0/xi0_0/cs0 xi7_0/xi0_0/xi0_3/xi1_0/
xi0_0/xi0_0/cs1 xi7_0/xi0_0/xi0_3/xi2_0/xi0_0/xi0_0/cs0 xi7_0/
xi0_0/xi0_3/xi2_0/xi0_0/xi0_0/cs1 xi7_0/xi0_0/xi0_3/xi3_0/
xi0_0/cs0 xi7_0/xi0_0/xi0_3/xi3_0/xi0_0/cs1}\
}
}
The SiliconSmart tool can characterize the variation of delay, transition, and
constraint with respect to process model variations.
Multiple formats are supported for modeling the impact of process variation.
The following sections describe statistical characterization in SiliconSmart:
■
Statistical Format Generation Flow
■
Statistical Hold Support
■ AOCV/POCV Characterization
■
LVF Characterization
■
AOCV/POCV (Side File Format) Model Generation from LVF Data
Configuring Cells
When using the sensitivity-based approach, the configuration of a cell for intra-
cell parameters requires the SiliconSmart tool to change the intra-cell
parameter value on a per transistor basis as this variation varies for each
transistor in a cell.
To do this, the cell netlist must first be prepared for intra-cell variations, with the
following steps:
1. Define the intra-cell parameters in configure.tcl with the
add_opc_statistical_parameter command.
2. Use analyze_netlists -statistical to wrap each transistor as a
subcircuit, creating a subcircuit instance for each transistor and, within that
subcircuit instance, a unique transistor model instance.
3. The above steps will modify the netlist so that each transistor instance has
unique random variables associated with it for each of the parameters
specified by the add_opc_statistical_parameter command.
The analyzed netlists are stored in: char_point/netlists/op_cond/cell,
extension
The following provides a detailed explanation of the above process.
Before using analyze_netlists, you must define the intra-cell parameters
in the configure.tcl file with the add_opc_statistical_parameter
command, as shown in the following example:
Example 200
add_opc_statistical_parameter op_cond –intracell –model xnch vthn
add_opc_statistical_parameter op_cond –intracell –model xpch vthp
So, there is one random variable associated with XMN, vthn_XMN, and one
random variable associated with XMP, vthp_XMP.
The following example shows how this is achieved, by wrapping a transistor
model inside a SPICE subcircuit (.subckt card) and then replacing transistor
instances inside a cell netlist with instances of these subcircuits.
Example 202
Original cell netlist:
.subckt INVD0 A Y
MN Y A VSS VSS nch L=0.06u W=0.39u
MP Y A VDD VDD pch L=0.06u W=0.52u
.ends INVD0
Original process technology SPICE model:
.model nch NMOS (
+ VTH0 = 0.28 + ‘vthn’
…
+)
.model pch PMOS (
+ VTH0 = -0.33 + ‘vthp’
…
+)
The original SPICE model (.model card) is wrapped inside a subcircuit and the
transistor model is instantiated within the subcircuit.
The following additional example shows how the transistor name nch is
wrapped in a subcircuit named xnch. It also shows how the parameter vthn is
defined as one of the arguments to this xnch subcircuit.
Example 203
.subckt xnch D G S B W=0 L=0 vthn=0
* vthn is an argument for this subckt
MN D G S B nch W=’W’ L=’L’
* this is the actual transistor instance which
* was previously defined in the cell netlist
.model nch NMOS
* this is the original transistor model
* fully enclosed within this subckt.
+ VTH0 = 0.28 + ‘vthn’
…
+)
.ends xnch
* end of the subcircuit
.subckt xpch D G S B W=0 L=0 vthp=0
MP D G S B pch W=’W’ L=’L’
.model pch PMOS (
+ VTH0 = 0.28 + ‘vthp’
…
+)
.ends xpch
Each cell netlist must be modified as well:
.subckt INVD0 A Y
XMN Y A VSS VSS xnch L=0.06u W=0.39u
XMP Y A VDD VDD xpch L=0.06u W=0.52u
.ends INVD0
Notice that the transistors are no longer instances within the cell netlist. Now
the cell netlist has a subcircuit instance for each transistor. Within each
subcircuit instance, there is a unique transistor model instance. Now that each
transistor is uniquely defined, the parameter(s) of each transistor instance can
be modified individually. (As shown in the previous example, you can specify a
unique value for the threshold voltage (vthn or vthp) for each transistor
instance for the cell.)
See Also
■
Command: add_opc_statistical_parameter
■
Command: analyze_netlists
Netlist Pruning
The SiliconSmart tool has a netlist pruning feature to make statistical
characterization faster. Netlist pruning can help in the following ways:
■
It reduces the netlist size so that simulations run faster.
■
It provides enough information about a cell netlist so you can avoid
sweeping parameters that correspond to transistors which don’t affect delay
or slew variation.
Pruning is timing arc specific. For every timing arc, a pruned netlist is created
for the cell. By default, pruning is disabled. You can enable netlist pruning with
the enable_netlist_pruning parameter. By default, nominal slew/delay
tables are still characterized using the original netlist.
Specify the N and P MOS names by using the nmos_model_names and
pmos_model_names parameters. These are required to be set when using
netlist pruning with statistical characterization.
You can use pruned netlists for nominal characterization by enabling the
statistical_use_pruned_netlist_for_nominal parameter.
See Also
■
Parameter: enable_netlist_pruning
■
Parameter: statistical_use_pruned_netlist_for_nominal
Screening
To improve performance, SiliconSmart applies a screening process to reduce
the total number of simulations without significantly compromising accuracy.
The idea behind screening is that for a given slew-load point, not all sensitivities
are significant enough to be considered for modeling. The set of significant
sensitivities varies from one slew-load point to another. To find out which
sensitivities are to be modeled, SiliconSmart selects a few slew/load points as
screening points. SiliconSmart finds all sensitivities at these screening points
and filters out the non-significant ones. For the remaining slew-load points, not
all sensitivities are characterized. For any slew-load point, the closest
screening point is discovered. Sensitivities that are significant at that screening
point are assumed to be significant for that slew-load point. This reduces the
number of simulations needed.
Characterization
For intra-cell characterization, the defined intra-cell parameters vary locally.
During characterization for each timing arc, two, three, or four acquisitions
(simulations) are run based on parameter settings. These are the acquisitions:
■
Netlist pruning simulation (if enabled using enable_netlist_pruning)
■
Nominal delay simulation (if netlist pruning is enabled and
use_pruned_netlist_for_nominal is disabled)
■
Screening simulation
(if statistical_avoid_screening_acquisition is 0)
■
Main statistical simulation
The netlist pruning acquisition name starts with find_inactive_nodes. The
nominal delay acquisition name starts with delay. The screening acquisition
name starts with simple_param_screening and the main acquisition starts
with statistical_delay.
For example, if there is a timing arc from A rising to Y falling, the corresponding
acquisition names would be as follows:
Example 204
find_inactive_nodes_simple_param_screening__statistical_delay__
A__lh_Y__hl__ACQ_1
delay__A__lh__Y__hl__ACQ_1
simple_param_screening__statistical_delay__A__lh__Y__hl__ACQ_1
statistical_delay__A__lh__Y__hl__ACQ_1
Assuming that the distribution of delay D is Gaussian, the SiliconSmart tool will
find the standard deviation of D with the following equation:
2 2 2 2 2 2
= s1 1 + s2 2 + + s10 10
where:
■
1 , 2 , ..., are the standard deviations of np1 , np2 , ...
This is how the SiliconSmart tool calculates sensitivity and sigma values for
statistical process parameters.
AOCV/POCV Characterization
The SiliconSmart tool supports AOCV (path depth-based only) and POCV
table generation. All AOCV/POCV characterization is performed natively in the
SiliconSmart tool, inheriting all runtime environmental features from regular
characterization (LSF support, cache mechanism, etc.).
The following sections describe AOCV/POCV characterization methodology
and support in the SiliconSmart tool:
■
AOCV Characterization
■
POCV Characterization
AOCV Characterization
The SiliconSmart tool uses AOCV characterization to find the accurate derate
factor, which depends on the depth of the delay path. The SiliconSmart tool will
simulate two arcs for each cell: one for output rising and one for output falling.
The following sections describe using AOCV characterization in SiliconSmart:
■
Running AOCV Characterization
■
Monte Carlo Simulation-Based Methodology
■ Sensitivity-Based Methodology
■
AOCV Parameters
Characterization Guidelines
Follow these guidelines when preparing for AOCV characterization with this
methodology:
■
Monte Carlo iterations — use sufficient points so that you will get a good
sampling when near the extremes. This will help populate the delay
distribution near the minimum and maximum and will improve the sigma
calculation.
Sensitivity-Based Methodology
For a complete library with thousands of cells, the Monte Carlo simulation
approach can become prohibitive. In the sensitivity-based approach, the
SiliconSmart tool finds the sensitivity of delay to each process parameter
variation by sweeping the process parameters during simulation. The derate
values are then analytically derived from the sensitivity values.
When using sensitivity based approach, local variation parameters need to be
defined using the add_opc_statistical_parameter and
set_opc_parameter_distribution commands in configure.tcl.
Characterization Guidelines
Follow these guidelines when preparing for AOCV characterization with this
methodology:
■
Specify the simulator to be used. Standalone FineSim, embedded FineSim,
and HSPICE simulators are supported for this methodology.
■
Prepare the netlist for intra-cell variations by adding the following command
before the configure command, as shown below.
Example 209
analyze_netlists -statistical
configure
This will modify the netlist so that transistor specific parameters can be swept
during characterization.
AOCV Parameters
The following parameters control AOCV settings:
■
aocv_num_stages — specifies how many stages need to be
characterized.
■
aocv_input_slew — defines slew value between thresholds.
■
aocv_num_fanouts — specifies how many cells should be connected at
the output of each stage as load. Default value is 0. It can be a single integer
or a list of integers. If it is a single integer, it specifies same number of cells
to be connected at the output of each stage. If a list of integers, the size of
list should be equal to aocv_num_stages. The entries in the list will specify
fanout at each stage.
■
aocv_fanout_cells — cells to be used as load. It can be a single cell or
a list of cells.
■ aocv_passive_load — the value of the load to be connected to the
output of the load cell.
■ aocv_interconnect_model — in addition to using cells at each stage, a
pi/lumped load can also be used at the output of each stage as load. The
value of this parameter can be pi/lumped/none.
■
aocv_fanout_load — a list which has either one value (lumped - C) or 3
values (pi- C1,R,C2).
■
aocv_sample_size — sample size for MC simulation-based
methodology. Default value is 200.
■
aocv_input_pin — specifies which input will be used for the AOCV
simulation. If not specified, SiliconSmart will select one at random.
■ aocv_output_pin — specifies which output pin will be used for AOCV
simulation. For multi-output cells, if this is not specified, SiliconSmart will
select one at random.
POCV Characterization
The SiliconSmart tool supports single slew/load-based native POCV
characterization. The POCV coefficient is the cell delay variation at 1 sigma of
the delay distribution normalized by the nominal delay. For example, if the
POCV coefficient is 0.04, then the standard deviation of delay for that arc is 4%.
delayvariation
POCV Coefficient: ------------------------------------------------
nominaldelay
The SiliconSmart tool will find the for only one slew-load combination,
simulating one arc for output rise and one arc for output fall.
■ The input and output pin of the arcs can be configured with the
aocv_input_pin and aocv_output_pin parameters.
■
Input slew and output load can be controlled with the pocv_input_slew
and default_load parameters.
■
You can control the Monte Carlo sampling count using
aocv_sample_size.
There are two methodologies available for POCV characterization: Monte Carlo
simulation-based, and sensitivity-based. The parameter
pocv_sensitivity_based is used to switch between these two
methodologies. By default, the parameter is set to 0, which selects the Monte
Carlo simulation approach. Setting it to 1 will select the sensitivity-based
methodology.
Separate Early/Late POCV coefficients modeling is supported for both Monte
Carlo Based approach and Sensitivity based approach.
The following sections describe these methodologies:
■ Monte Carlo Simulation-Based Methodology
■
Sensitivity-Based Methodology
Sensitivity-Based Methodology
For this methodology, local variation parameters need to be defined using the
add_opc_statistical_parameter and
set_opc_parameter_distribution commands in configure.tcl. This is
similar to usage for other SiliconSmart supported SSTA methodologies.
ocvm_type : pocvm
object_type: lib_cell
delay_type : cell
derate_type: early
rf_type : rise
object_spec: ff_0p88_0c/INVcoefficient: 0.0427
coefficient: 0.0427
ocvm_type : pocvm
object_type: lib_cell
delay_type : cell
derate_type: late
rf_type : rise
object_spec: ff_0p88_0c/INVcoefficient: 0.0427
coefficient: 0.0427
ocvm_type : pocvm
object_type: lib_cell
delay_type : cell
derate_type: early
rf_type : fall
object_spec: ff_0p88_0c/INVcoefficient: 0.0577
coefficient: 0.0577
ocvm_type : pocvm
object_type: lib_cell
delay_type : cell
derate_type: late
rf_type : fall
object_spec: ff_0p88_0c/INV
coefficient: 0.0577
LVF Characterization
POCV cell variation information can be represented by either a single cell-
based variation coefficient (side file) or the Liberty Variation Format (LVF). The
LVF models slew-load dependent delay and transition variation and slew-slew
dependent constraint variation for each timing arc. It improves the accuracy of
POCV analysis by taking into consideration multiple slew/load points for each
cell. LVF is recommended to be used for the advanced nodes 16nm and below
for better accuracy.
The following sections describe LVF support:
■
POCV Characterization Concepts
■
Supported Characterization Methods
■
Process Model Requirements and Simulator Support
■
Setup
■
Sensitivity-Based LVF Characterization:
■
Monte Carlo-Based LVF Characterization
■
Separate Early/Late Support
■
LVF Add-On Flow
■
LVF Table Checks
LVF = delayvariation
pin (<name>) {
direction : input;
timing(){
rise_constraint(<const_lu_templ_name>) {
index_1(0,1,2);
index_2(0,1,2);
values(0,1,2,3,4,5,6,7,8);
}
ocv_sigma_rise_constraint(<const_lu_templ_name>) {
index_1(0,1,2);
index_2(0,1,2);
values(0,1,2,3,4,5,6,7,8);
}
fall_constraint(<const_lu_templ_name>) {
index_1(0,1,2);
index_2(0,1,2);
values(0,1,2,3,4,5,6,7,8);
}
ocv_sigma_fall_constraint(<const_lu_templ_name>) {
index_1(0,1,2);
index_2(0,1,2);
values(0,1,2,3,4,5,6,7,8);
}
} /* end of timing */
} /* end of pin */
...
pin (<name>) {
direction : output;
...
timing() {
cell_rise(tmg_tin_oload_3_3) {
index_1(0,1,2);
index_2(0,1,2);
values(0,1,2,3,4,5,6,7,8);
}
cell_fall(tmg_tin_oload_3_3) {
index_1(0,1,2);
index_2(0,1,2);
values(0,1,2,3,4,5,6,7,8);
}
...
...
ocv_sigma_cell_fall(tmg_tin_oload_3_3) {
sigma_type : "early" ;
index_1(0,1,2);
index_2(0,1,2);
values(0,1,2,3,4,5,6,7,8);
}
ocv_sigma_cell_fall(tmg_tin_oload_3_3) {
sigma_type : "late" ;
index_1(0,1,2);
index_2(0,1,2);
values(0,1,2,3,4,5,6,7,8);
}
ocv_sigma_cell_rise(tmg_tin_oload_3_3) {
sigma_type : "early" ;
index_1(0,1,2);
index_2(0,1,2);
values(0,1,2,3,4,5,6,7,8);
}
ocv_sigma_cell_rise(tmg_tin_oload_3_3) {
sigma_type : "late" ;
index_1(0,1,2);
index_2(0,1,2);
values(0,1,2,3,4,5,6,7,8);
}
} /* end of timing */
} /* end of pin */
} /* end of cell */
Setup
The inputs for LVF characterization are:
■
Statistical SPICE model
■
Extracted netlists
■
Input seed library/cell instance file
configure.tcl Settings
The user must specify the following in configure.tcl:
1. Statistical SPICE model:
set_opc_process FF {
{.lib 'stat_model_path' SSTA}
}
2. MOSFET names:
add_opc_statistical_parameter
Syntax
add_opc_statistical_parameter opc_name (-intracell) param1 \
[param2] (-model) transistor
where:
■
opc_name — name of the operating condition as created with the
set_operating_condition command.
■
-intracell — should always be -intracell for LVF characterization.
Local variation parameters names comes from the Statistical SPICE model.
■ -model — specifies the transistor model name (e.g., nch_mac, pch_mac).
■
param1, param2 — names of one or more process parameters to add.
Example 217
add_opc_statistical_parameter FF -intracell par1 -model { nch_mac
pch_mac }
set_opc_parameter_distribution
Syntax
set_opc_parameter_distribution <active_pvt> -points \
{point_for_sensitivity} -nominal_value XX \
-variation_range {-1.0 1.0}
-distribution_type gaussian -sigma XX parameter
where:
■
If local variation parameters are Gaussian (Normal) distributions with mean
0 and variance 1, that defines -nominal_value, -distribution_type
and -sigma.
■
The -points option enables you to configure at which point the tool should
perform sensitivity based analysis.
■
The -variation_range option is not used for intracell statistical
characterization but the SiliconSmart tool issues a warning if not defined.
The following example will configure sensitivity based analysis at 3-sigma
point:
If par1=AGAUSS(0,1,1):
nominal_val = 0
abs_variation = 1
std deviation = 1
■
netlist_max_sweeps
■
enable_parallel_sweeps
statistical_reduction_factor
This parameter can be used to further optimize performance by characterizing
reduced slew/load points in the table and interpolating data for rest of the table.
For example, if this parameter is set to 0.5, only 50% of the sensitivity values
are found out by simulation and rest 50% is interpolated and put in the model.
Default value is 1.0
statistical_simulation_points
This parameter specifies slew-load points (indices) to be used for LVF
characterization. The LVF table will be interpolated based on these points. If
not specified, SiliconSmart selects points based on
statistical_reduction_factor.
For example, with the below settings, the SiliconSmart tool will characterize 4
corner slew/load points of a 3x3 table (with grid points numbered as below) and
will interpolate data for rest of the table:
0 1 2
3 4 5
6 7 8
Example 219
set_config_opt statistical_simulation_points {0 2 6 8}
netlist_max_sweeps
This parameter controls the maximum number of sweeps allowed in a single
deck (default 8000). You can specify this parameter on a per-cell basis with the
set_config_opt command.
enable_parallel_sweeps
This parameter enables parallel jobs submission of split decks. With this setting
enabled, jobs are distributed in parallel for one acquisition. Otherwise, the split
netlists will be simulated on one worker sequentially. You can specify this
parameter on a per-cell basis with the set_config_opt command.
configure.tcl Settings
The user must specify the following in configure.tcl:
set statistical_model_sigma_montecarlo 1
set statistical_montecarlo_sample_size value
To compile the library with LVF into the Synopsys .db format, use Library
Compiler version I-2013.12 or later.
Below is the flow for LVF model generation using the Monte Carlo approach for
all delay/slew and constraint variation characterization:
set_config_opt statistical_enable_constraint_sensitivity 1
set_config_opt simulator_bisection 1
set_config_opt statistical_model_sigma_montecarlo 1
set_config_opt statistical_montecarlo_sample_size value
set_config_opt lvf_model_slew 1
configure –lvf
characterize
model –lvf
If a single value is specified with the -points option, both early and late table
values are same:
set_opc_parameter_distribution FF -points {3} -nominal_value 0.0
-variation_range {-1.0 1.0} -distribution_type gaussian -sigma 1
par1
Note: When using the sensitivity-based approach for LVF add-on flow,
use analyze_netlists -statistical before the
configure command.
The LVF add-on flow also supports the reuse of sensitization vectors from input
library. It enables usage of the same stimulus for statistical delay
characterization as used in timing characterization. This feature is enabled by
adding the -sensitization switch to the import command, as shown
below:
import -sensitization -liberty ./ref.lib -netlist_dir ./netlists
-ext .sp $cells
configure -fast -lvf
characterize
model -fast -lvf -output out_lvfaddon
The following table describes the list of checks performed by the tool:
Check ID Description
002 OCV table has different dimension than the nominal table
004 Sigma > 25% of nominal (only applies to LVF delay/slew tables)
006 Ratio of sigma values between early and late is greater than certain
percentage (only applies to LVF delay/slew tables)
011 Sigma outlier (both absolute and relative tolerance are not met) (only
applies to LVF delay/slew tables)
By default, check IDs 000, 001, 002, 003, 005, 009, 010 are reported as
LVF_ERROR. Other checks are reported as LVF_WARNING. You can direct the
tool to classify a list of LVF checks as errors by specifying the parameter
lvf_check_errors.
■
LVF_ERROR 002 — this error is issued when the sigma table size is
different than the NLDM table in the same timing arc.
■ LVF_ERROR 003 — this error is issued when there is a mismatch in tables
indices between NLDM table and sigma tables in the same timing arc.
■
LVF_WARNING 004 — this check will compare the sigma value with
corresponding nominal value. This warning is reported if the ratio of sigma
to nominal values is more than the specified tolerance (default 25%).
The parameter lvf_tol_sigma_to_nom can be used to control tolerance
of sigma value/nominal value ratio. Since ratio of sigma to nominal can vary
with slew/load, you can specify slew/load dependent ratios rather than using
fixed number for all slew/load points in a timing table.
The parameter lvf_check_sigma_pct can be specified to direct LVF
sanity check to use the specified table to check sigma/nominal ratio instead
of a fixed number. For example, if the delay table size is (3x3), set
lvf_check_sigma_pct as below to set slew/load dependent ratios:
Set lvf_check_sigma_pct {0.05 0.05 0.10 0.10 0.25 0.25 0.25
0.3 0.3}
The above warning means that, for matching grid points, the SiliconSmart
tool will use user-defined sigma/nominal ratios, whereas fixed ratio (as
specified by parameter lvf_tol_sigma_to_nom) is used for the rest of
the points.
■
LVF_ERROR 005 — this errors is issued when table sizes for early and late
sigma tables in the same timing arc are different.
■
LVF_WARNING 006 — the SiliconSmart tool will compare and report
warnings if ratio of early sigma to late sigma (or vice versa) is greater than
the specified tolerance (default 3).
The tolerance of sigma ratio between early table and late table can be
controlled with the parameter lvf_tol_early_to_late.
■ LVF_WARNING 007 — this warning is reported if non-monotonic values are
found in sigma tables.
■
LVF_WARNING 008 — this check compares the sigma value with minimum
sigma and maximum sigma values range specified. The parameters
lvf_sigma_min and lvf_sigma_max specify the lower and upper
bounds of sigma values for table checking, respectively.
■
LVF_ERROR 009 — this error will be issued if duplicate sigma tables are
found for a NLDM table in the same timing arc.
■
LVF_ERROR 010 — this error will be issued if any of the value in a sigma
table is negative.
■
LVF_WARNING 011 — this warning will be reported if both absolute
(LVF_WARNING 008) and relative tolerances (LVF_WARNING 006) are not
met for values in sigma tables.
The above commands will generate both AOCV and POCV side files. The
POCV files will be merged as in existing POCV flow. To generate only POCV
side files, set only the -pocv switch in the model command. Similarly, to
generate only AOCV derate tables, set only the -aocv switch in the model
command.
Location of generated models:
■
<charpt>/models/aocv
■
<charpt>/models/pocv
The following example will have OCV values computed as minimum of LVF
data at 3rd slew and 3rd load grid point among A->X timing arcs.
Example 222
set lvf_lib ./lvf.lib
set_config_opt -cell $cell lvf_to_ocv_input_pins {A}
set_config_opt -cell $cell lvf_to_ocv_output_pins {X}
set_config_opt -cell $cell lvf_to_ocv_method min
set_config_opt -cell $cell lvf_to_ocv_slew_indices {2}
set_config_opt -cell $cell lvf_to_ocv_load_indices {2}
print_ocv_side_files -input_lib $lvf_lib -output_path ./models
-aocv -pocv
IBIS Characterization
Introduction to IBIS
The following sections describe IBIS support and methodology:
■
IBIS Characterization Methodology
■
On-Die Termination (ODT) Support
■
Programmable Driver Strength Support
■
Example of ODT and Programmable Driver Cell Setup
The resistive load ( R fixture in the circuit setup for generating VT curves) is set
with the pin type parameter ibis_default_r_fixture and has a default
value of 50 ohms. The curves are captured for both rising and falling waveforms
with the voltage source ( V fixture in the circuit setup for generating VT curves). If
left empty, it defaults to the rail voltages as specified by pintype parameters
logic_high_name and logic_low_name. The V fixture can be specified by
the user and it differs for non-differential and differential cells.
Example 224
# non-differential cells (i.e., single ended cells)
set ibis_vt_v_fixture_rising_non_differential_output {DVSS}
set ibis_vt_v_fixture_falling_non_differential_output {DVDD}
The reason why we have only one parameter for differential instead of two as in
the case of non-differential (single ended) output can be inferred by inspecting
the circuit setup for generating VT curves for a differential cell. Note that both
the inverting (PADN) and non-inverting (PADP) pins are connected to same
V fixture . Hence if input is falling (rising) then PADN is rising (falling) and PADP is
falling (rising). Thus for any given transition one of the outputs is falling and the
other is rising. Hence there is no way to distinguish the transitions and thus we
have only one parameter for differential output.
IV Curve Measurement
The IV curve measurement also places a voltage source on the output pin,
shown in the following circuit setup for a single-ended (non-differential) cell, but
holds the input at a steady-state high or low voltage. Instead, the voltage at the
output PAD is swept over a voltage range and the current through the output pin
is recorded.
Clamping Measurement
The IBIS power clamp and ground clamp curves measure the current through
an input pin when held at a range of voltages while the cell is disabled. A
voltage source is attached to the input pin as shown in the circuit setup below
and is swept over the same voltage range as the IV curves.
Figure 41 Circuit setup for generating Clamping curves for a single-ended (non-
differential) cell
Figure 42 Circuit setup for generating Clamping curves for a differential cell
At each voltage value the current through the input pin is recorded. In case of
differential cells, there is a slight modification to the methodology. If the voltage
is swept at PADN then the voltage at PADP is set to the same value using a
VCVS. This is done to prevent the current flow between PADN and PADP, a
situation which occurs in LVDS.
There is a special parameter ibis_input_pin_open which is useful in the
context of LVDS. During the LVDS characterization, input pin VREF needs to be
open only during the clamping characterization. This can be achieved in by
using the following statement in the control/*.inst file. Note that this is used in
the control/*.inst file not in the config/*.tcl file:
Example 226
set_config_opt -pin {VREF} -type ibis_clamping
ibis_input_pin_open one
Capacitance Measurement
In IBIS, the parameter C_comp is used to represent the input or output die
capacitance. It is an all inclusive capacitance seen through the pad such as
transistor's parasitic capacitance. It does not include the package capacitance
which is accounted explicitly using the keyword C_pkg in the IBIS file.
t
C = I avg -------
V
Characterization
The following setup illustrates the SiliconSmart ODT characterization
procedure using a simple circuit. In this circuit, the ODT is modeled as a simple
linear resistor from ‘pad’ to ground. This is referred to as ‘pulldown’ ODT.
■
Find clamping currents I on with ODT switched on. Applying KCL at node x
p
in the circuit setup shown above:
I on = I x + I R (2)
p
■
Subtract the currents from I on by I off to get the ODT currents ( I R ):
p p
IR = I on –I off (3)
p p
Post-Processing
■ Either Pullup or Pulldown — When you have either pulldown or pullup ODT
as in PGPIO cells, the post processing is straightforward. The ODT currents
(IR) go under either the [GND Clamp] (for pulldown ODT) or [POWER
Clamp] (for pullup ODT). Note that these [GND Clamp] and [POWER
Clamp] go under the [Submodel] keyword.
■
Both Pullup and Pulldown — Consider the following IBIS model with both
pullup and pulldown ODT.
Figure 44 Abstract IBIS model with both pullup and pulldown ODT
Note that y (the sum of currents through pullup and pulldown resistors) is
obtained over various sweeps of the voltage at ‘pad’ V PAD . Mathematically,
there are two unknowns but many equations. To obtain the best fit, the method
generally used is the linear regression. The result obtained will be exact if the
ODTs are linear. The method is limited by the severity of the non-linearity.
Regression Method
First one must find the current through ODT using simple circuit analysis in the
circuit setup for characterization with both pulldown and pullup ODT:
V PAD V PAD – V DD
IR PD + IR PU = ------------- + -----------------------------------
R PD R PU
– V DD
R PU = --------------
0
Similarly, consider the following equation:
1 = ---------- + ----------
1 1
R PU R PD
By applying Ohm’s law one can find out the currents through the resistor R PD .
Note that linearity is assumed here. The current through R PU can be obtained
by subtracting the current through R PD from the total current measured at
PAD y . The current through R PU goes under [POWER Clamp] and current
through R PD goes under [GND Clamp] under the [Submodel] construct.
Now that the SiliconSmart implementation has been shown, consider the
parameters that are used. The following code example goes into the control/
files that use these parameters:
Example 227
# Control file
set_config_opt -type ibis -to {PAD} state_partitions one
set_config_opt -type ibis -from {PAD} state_partitions one
# odt mode
set_config_opt -from PAD ibis_odt_mode {
TERM0&!TERM1 "150 ohm equivalent termination"
!TERM0&TERM1 "75 ohm equivalent termination"
TERM0&TERM1 "50 ohm equivalent termination"
!TERM0&!TERM1 "ODT disabled"
}
■
The signal combinations that make the ODT work only in the receiving mode
is specified using ibis_odt_receiver_only.
■ The signal combinations that make the ODT work only in the driving mode
is specified using ibis_odt_driver_only.
• If the signal combination is not specified in either
ibis_odt_driver_only or ibis_odt_receiver_only,
SiliconSmart defaults to ODT being on for both driving and receiving
modes.
■
In the case of ODT that has both pullup and pulldown modes (as in the
previous example with the when conditions TERM0&!TERM1,
!TERM0&TERM1, TERM0&TERM1), there are two more parameters to control
the post-processing of data. Because the post-processing involves linear
regression for the case of having both pullup and pulldown modes,
SiliconSmart provides the following parameters so you can specify the
range over which the regression should be done.
• ibis_odt_linear_regression_min_scale (default = 0.0)
• ibis_odt_linear_regression_max_scale (default = 1.0)
The previous parameters scale the pullup reference and provide the range for
linear regression. Suppose the pullup reference is V DD ; the default data range
for linear regression would be as follows:
[0.0 × V DD , 1.0 × V DD = [0, V DD ]
Design of Experiments
Consider for example, a cell having p ODTs and q programmable driver
strengths; then SiliconSmart ends up doing p + q static (clamping and IV)
curve simulations. This is due to the fact that ODT simulations are not affected
by the active part of the circuitry and the programmable driver simulations are
done by using a single ODT setting (the setting which switches off the ODT, i.e.
no ODT condition). Hence if each simulation costs f time (where f is a
polynomial) then the time complexity is p + q f .
Thus by careful planning of experiments, SiliconSmart avoids the more costly
pq number of simulations and thus a more expensive p + q f runtime.
The usage of these parameters is illustrated using the following example (which
must be entered in the control/*.inst file):
Example 228
#----------------------------------------------------------
# Control file
#----------------------------------------------------------...
set_config_opt -type ibis -to {PAD} state_partitions one
set_config_opt -type ibis -from {PAD} state_partitions one
#----------------------------------------------------------
# programmable driver strengths
# syntax: when_condition comment
#--------------------------------------------------------------
---------
set_config_opt -type ibis -to PAD ibis_prog_driver_mode {
!DRIVE2&!DRIVE1&DRIVE0 "14.9mA driver"
!DRIVE2&DRIVE1&!DRIVE0 "14.6mA driver"
!DRIVE2&DRIVE1&DRIVE0 "14.4mA driver"
DRIVE2&!DRIVE1&DRIVE0 "9.8mA driver"
DRIVE2&DRIVE1&!DRIVE0 "9.3mA driver"
(!(!DRIVE2+!DRIVE1+!DRIVE0)) "6.9mA driver"
# NOTE:
# You would write the Boolean
# (!(!DRIVE2+!DRIVE1+!DRIVE0)) as
# DRIVE2&DRIVE1&!DRIVE0
# But it was done that way to show the robustness of
# Siliconsmart when recognizing the Boolean expressions
}
#----------------------------------------------------------
# The name for driver strength to appear in the models.
# syntax: when_condition name
#----------------------------------------------------------
set_config_opt ibis_prog_driver_mode_name {
!DRIVE2&!DRIVE1&DRIVE0 "14_9"
!DRIVE2&DRIVE1&!DRIVE0 "14_6"
!DRIVE2&DRIVE1&DRIVE0 "14_4"
DRIVE2&!DRIVE1&DRIVE0 "9_8"
DRIVE2&DRIVE1&!DRIVE0 "9_3"
DRIVE2&DRIVE1&DRIVE0 "6_9"
}
#----------------------------------------------------------
Please note that when there are multiple clamping conditions (when
ibis_odt_mode has more than two when conditions) and IV acquisitions
(when ibis_prog_driver_mode has more than two when conditions), we
need a deterministic ordering of these acquisitions.
set_config_opt ibis_odt_mode_name {
TERM "50"
!TERM "ut"
}
C_comp Measurement
This section describes generating IBIS files which automatically characterize
the input capacitance at the PAD using SiliconSmart. This input capacitance is
Example 233
# Pin definitions
add_pin A default -input
add_pin PWRDN default -input
add_pin OE default -input
add_pin PADP pad -output
add_pin PADN pad -output
add_pin VREF default -input
# truth table
add_table {
A OE : PADP PADN
0/1 1 : 0/1 1/0
1/0 1 : 1/0 0/1
- 0 : Z Z
}
The PADP/PADN has to appear on the input side of the truth table for the
C_comp characterization to occur. We need to rewrite the control/*.inst file
as follows:
Example 234
add_table {
A OE PADP PADN : PADP PADN
0/1 1 Z Z : 0/1 1/0
1/0 1 Z Z : 1/0 0/1
- 0 1/0/Z - : 1/0/Z -
- 0 - 1/0/Z : - 1/0/Z
}
■
PAD is an inout.
This is similar to the "PAD is an output'' case. Also pay attention to the pins
that are declared as output. For example, consider the following snippet in
the control/*.inst file:
Example 235
add_pin PAD pad -inout
add_pin Y default -output
add_pin PO default -output
It is important that Y and PO are defined. For example, they can be set to 0:
Example 236
add_function Y 0
add_function PO 0
Cells Supported
SiliconSmart IBIS supports the following I/O cells:
■ Single ended I/O cells
■
Differential I/O cells
• Validate IBIS models of differential I/O cells by generating eye diagrams.
■
I/O cells with On-Die Termination (ODT)
■
I/O cells with programmable drivers
■
I/O cells with both ODT and programmable drivers
■
I/O cells with open-sink and open-source configurations
To turn on DC sweep for characterizing IV and clamping curves you need to set
the following in the config/configure.tcl:
Example 237
set ibis_clamping_iv_analysis_mode_dc true
Next, we list a complete control/*.inst files for different I/O cell architectures
supported by SiliconSmart. This will serve as a template for setting up cells for
IBIS characterization.
Cell Examples
The following cell examples are described below:
■
Open-Sink and Open-Source Cell
■
Differential Cell
■
Cell with Both ODT and Programmable Driver
Example 238
# file: charpt/control/OPEN_SRC_SINK.inst
Differential Cell
Example 239
# file: /control/DIFF.inst
set_netlist_file [get_location]/netlists/DIFF.cir
# Pin definitions
add_pin A default -input
add_pin PWRDN default -input
add_pin OE default -input
add_pin PADP pad -output
add_pin PADN pad -output
add_table {
A OE PADP PADN : PADP PADN
0/1 1 Z Z : 0/1 1/0
1/0 1 Z Z : 1/0 0/1
- 0 1/0/Z - : 1/0/Z -
- 0 - 1/0/Z : - 1/0/Z
}
instance file for a cell with ODT only remove the parts which reference
programmable driver in the following instance file.
Example 240
# file: /control/ODT_PD.inst
set_netlist_file [get_location]/netlists/ODT_PD.net
add_table {
A READ TERM DRIVE PAD : PAD
0/1 0 - - Z : 0/1
- 1 - - 0/1/Z : 0/1/Z
}
# ODT parameters
set_config_opt -type ibis -from PAD ibis_odt_mode {
!TERM1&TERM0 "150 ohm equivalent termination"
TERM1&!TERM0 "75 ohm equivalent termination"
TERM1&TERM0 "50 ohm equivalent termination"
!TERM1&!TERM0 "ODT disabled"
}
set_config_opt ibis_odt_pulldown_modes {
TERM1&TERM0
}
where:
■
ibis_version — this parameter controls the IBIS version number written
to the IBIS files. The default version is 4.1.
■
ibis_isso — this boolean parameter controls the [ISSO_PU] and
[ISSO_PD] section in IBIS models. Note [ISSO_PU/PD] is supported in
IBIS from version 5.0 and above. The default setting is 0.
■
ibis_composite_current — this boolean parameter controls the
[Composite Current] section in IBIS models. Note that [Composite
Current] is supported in IBIS from version 5.0 and above. The default
setting is 0.
IBIS Appendix
The following sections describe additional IBIS options and information:
■
Model Name Syntax
■
IBIS Parameter Summary
■
IBIS Merging Utility
■
IBIS-AMI Model Support
■
Checking the Generated IBIS File
■
Frequently Asked Questions
set_config_opt ibis_odt_mode_name {
TERM "50"
!TERM "ut"
}
There are two driving strengths and two ODTs, thus leading 2 x 2 = 4 IBIS
models for each of the two pins. The names are as follows:
Example 244
M0_PADP_hi_ut_XYZ
M1_PADP_lo_ut_XYZ
M2_PADP_hi_50_XYZ
M3_PADP_lo_50_XYZ
M0_PADN_hi_ut_XYZ
M1_PADN_lo_ut_XYZ
M2_PADN_hi_50_XYZ
M3_PADN_lo_50_XYZ
Pin Alias
The parameter ibis_pin_alias can be used to model the alias name of a
given pin. For example in the control/*.inst file to rename PADP as PADQ and
PADN as PADQC we need the following statements:
Example 245
set_config_opt -pin PADP ibis_pin_alias PADQ
set_config_opt -pin PADN ibis_pin_alias PADQC
command. The default values are the appropriate supply rails as specified by
the pin type parameters logic_high_name and logic_low_name.
Table 7 IBIS Pin Type Parameters
Parameter Description
(default value)
(50 Ohms)
(0)
Parameter Description
(default value)
(values of logic_high_name
and logic_low_name)
(values of logic_high_name
and logic_low_name)
(values of logic_high_name
and logic_low_name)
characterization. They are only passed through to the model. The IBIS format
allows each of these values to be specified on a per-model basis (again, a
model is associated with a pin in IBIS), so these parameters must be defined in
the parameter block ibis_model nested within a pin type.
Table 8 IBIS Pin-Level Parameters
(unset)
(unset)
(0.8, 2.0)
cells are modeled to a single IBIS file, SiliconSmart uses the R/L/C values for
the last cell for which they are defined.
Table 9 IBIS Cell-Level Parameters
(unset)
(unset)
(unset)
Parameter Usage
For example, a typical pin type for an I/O pad to be used with IBIS would look
like this:
Example 247
pintype PAD->default {
set logic_high_name VDD3
The cell-level parameters are set in a parameter block with the same name as
the cell. For example:
Example 248
define_parameters MYIOPAD {
set ibis_package_r 20
set ibis_package_l 1e-4
set ibis_package_c 1e-14
}
The nested parameter values can be read using a scoping operator, similar to
Tcl namespaces, with the pin type name followed by the parameter block name.
For example:
Example 249
get_parameter PAD::ibis_model ibis_vdiff
Using ibis_merge
Step by step instructions are given below.
SiliconSmart needs the following new parameters for ibis_merge in the
config/configure.tcl file:
■
Block parameter:
ibis_plan_for_corner_merge — Set to true or false. This switch
indicates whether the generated data will be merged with other corners into
one IBIS model. When set to true, SiliconSmart uses a unified voltage range
for all three corners.
■ Pin parameters:
• ibis_typ_pullup_ref
• ibis_min_pullup_ref
• ibis_max_pullup_ref
• ibis_typ_pulldown_ref
• ibis_min_pulldown_ref
• ibis_max_pulldown_ref
• ibis_typ_power_clamp_ref
• ibis_min_power_clamp_ref
• ibis_max_power_clamp_ref
• ibis_typ_gnd_clamp_ref
• ibis_min_gnd_clamp_ref
• ibis_max_gnd_clamp_ref
Consider the following rationale in regard to these pin parameters. Suppose
you are characterizing for a typ corner and you need information about min/
max corners so that you have a unified voltage range across all the corners.
The previously listed pin parameters help in capturing this information.
■
Normally, only the parameters ibis_typ_pullup_ref,
ibis_min_pullup_ref, and ibis_max_pullup_ref need to be
specified.
■
The parameters ibis_*_pulldown_ref, ibis_*_gnd_clamp_ref
default to gnd (0.0).
■
The parameter ibis_*_power_clamp_ref defaults to
ibis_*_pullup_ref.
■
With ibis_merge –typ typ_char_pt -min min_char_pt -
max max_char_pt cell_name:
• typ — identifies the typ corner.
• *char_pt — characterization point of the typ/min/max corner.
• cell_name — cell names that will be merged and appear in the final
IBIS model. SiliconSmart discards any cell that is not present in all three
corners with a warning or error.
# … deleted …
define_parameters default {
# … deleted …
set active_pvts {TT}
set ibis_plan_for_corner_merge true
# … deleted …
# … deleted …
create_operating_condition TT
set_opc_process TT [subst {
{.lib '[get_location]/process_models/xyz’ TT}
}]
add_opc_supplies TT VSS 0.0 VDD 1.00 DVSS 0.0 DVDD 1.80 VREF 1.2
vdiff_high 1.38 vdiff_low 1.04 VDD_REF 1.00 VSS_REF 0 DVDD_REF
1.80 DVSS_REF 0 BIAS 0.99 VSUM 2.4
set_opc_temperature TT 25
# … deleted …
[pvt] % ls
max merge min typ
Now, you must edit the config/configure.tcl file. The edited file should appear as
follows:
Example 253
[pvt] % cat merge/config/configure.tcl
# Only the interesting parts are listed here.
# Rest are removed
# … deleted …
define_parameters default {
# … deleted …
set active_pvts {TT SS FF}
set ibis_plan_for_corner_merge false
# … deleted …
# … deleted …
create_operating_condition TT
set_opc_process TT [subst {
{.lib '[get_location]/process_models/xyz’ TT}
}]
add_opc_supplies TT VSS 0.0 VDD 1.00 DVSS 0.0 DVDD 1.80 VREF 1.2
vdiff_high 1.38 vdiff_low 1.04 VDD_REF 1.00 VSS_REF 0 DVDD_REF
1.80 DVSS_REF 0 BIAS 0.99 VSUM 2.4
set_opc_temperature TT 25
create_operating_condition SS
set_opc_process SS [subst {
{.lib '[get_location]/process_models/xyz’ SS}
}]
add_opc_supplies SS VSS 0.0 VDD 0.9 DVSS 0.0 DVDD 1.7 VREF 1.18
vdiff_high 1.38 vdiff_low 1.04 VDD_REF 0.9 VSS_REF 0 DVDD_REF 1.7
DVSS_REF 0 BIAS 0.92 VSUM 2.36
set_opc_temperature SS 125
create_operating_condition FF
set_opc_process FF [subst {
{.lib '[get_location]/process_models/xyz’ FF}
}]
add_opc_supplies FF VSS 0.0 VDD 1.1 DVSS 0.0 DVDD 1.9 VREF 1.21
vdiff_high 1.38 vdiff_low 1.04 VDD_REF 1.1 VSS_REF 0 DVDD_REF 1.9
DVSS_REF 0 BIAS 1.08 VSUM 2.42
set_opc_temperature FF -40
# … deleted …
You are nearly ready to produce the merged IBIS file. All you must do now is
run the ibis_merge command and then issue the modeling command, as
follows:
Example 255
[pvt] % ls
max merge min typ
[pvt] % cd merge/
[merge] % ls
config control driver.tcl etc models netlists process_models
reports runtime siliconsmart.log
You have completed the steps necessary and can now call SiliconSmart:
Example 257
[merge] % siliconsmart driver.tcl
If you completed all the steps successfully, you will find driver.ibs in the models/
ibis/ directory.
The above mentioned IBIS-AMI related parameters are supported only at cell-
level. You can not use the set_config_opt command to specify the
parameters at pin and pin-type level.
The below parameters and settings should be set carefully to reflect Rx/Tx
behavior:
■
nsamples — This parameter will affect impulse response accuracy. It is
recommended to set it to a value of power of 2, such as 128 or 256.
■
smallest_slew/default_slew/largest_slew/
explicit_points_slew — It is recommended to set the value to a
number smaller than actual signal rise time. A typical value would be
bit_time/5.
■
initial_delay — This parameter should be set to a reasonable value,
such as 10e-12.
■
trailing_delay — Since the LTI system impulse response has a long
settling time, set this to a value larger enough to allow the system to settle
down. Note that trailing_delay - initial_delay/
ibis_ami_sample_interval should equal nsamples. If not, an
extension of sampling points will be conducted.
■
stable_time — Together with trailing_delay, this allows the
SiliconSmart tool to gather enough data points for system transition. A
typical value is bit_time*10.
For example:
set_config_opt ibischk_cmd /u/username/bin/ibischk5
The above example could be used in the sis_cci>> prompt and run.tcl file.
The above will generate only falling (ZL) waveforms. To generate the rising
waveform for characterization, use add_user_stimulus as shown below.
Example 263
add_table {
DO OE : PAD
0 1 : 0
- 0 : Z
}
# ibis_clamping
set_config_opt -type { ibis } -from PAD state_partitions one
# iv/vt table – filter using to_direction
set_config_opt -type { ibis } -to PAD -to_direction {ZH ZL L}
state_partitions one
Note: All data sheets are generated from the acquired characterization
data only. You cannot generate data sheets from existing Liberty
models.
Most of the above switches can be used for further customization. In its
simplest form, the general usage of generate_datasheet is:
set_location charpoint
generate_datasheet
Each data sheet is written to a file with the name cell_opc.html, where cell is
the name of the cell and opc is the name of the operating point (for example,
TBUFIX20_worst.html). A warning message is issued if any operating condition
(OPC) does not contain a specified cell.
One data sheet will be generated for every OPC of every cell. For example, for
two OPCs with three cells each, six data sheets will be generated. A master
index HTML will be generated per OPC, indexDataSheet_$OPCNAME.html,
which will link the individual data sheets of the cells from within.
See Also
■
Command: generate_datasheet
Usage Examples
To restrict or select cells for data sheet generation, specify the cells individually:
Example 265
generate_datasheet SDFFSXL TBUFIX20
The above generates a data sheet for all cells for operating conditions typ and
worst.
Example 267
generate_datasheet -operating_condition {typ worst} SDFFSXL
TBUFIX20
The above generates a data sheet for the cells SDFFSXL and TBUFIX20 for
operating conditions typ and worst.
Example 268
generate_datasheet -output my_dir/ds_gen -operating_condition
{typ worst}
The above generates a data sheet for all cells for operating conditions typ and
worst. Using the -output option directs the output to my_dir/ds_gen instead
of the default location (this location is created, if necessary).
Example 269
generate_datasheet -output my_dir/ds_gen -parameter_blocks
{userparms *} TBUFIX20
The above generates a data sheet for the TBUFIX20 cell for all available
operating conditions. Output is stored in the my_dir/ds_gen subdirectory, which
is created if necessary. Parameters are obtained from the userparms block
and the default (ioreport) parameter block (default implied with *). If
parameters by the same name exist in both blocks, those in the userparms
block will override those in the ioreport block.
Cell Schematics
Cell schematics are generated in the data sheet when the following command
is included in your configure.tcl file:
Example 270
set graphviz_location [get_install_path]/etc/graphviz-2.26.3
Banner
The banner is the topmost block of the data sheet containing the main data
sheet title, subtitle, and graphics.
Function
A function description (such as Z = A&B) will be shown for cell outputs that
have such information present. Others can have a truth table shown.
Attributes
The attributes table shows the area attribute for the cell. Sequential cells will
also have a Flop Group table containing information from the ff() group.
Constraint Results
This table is available only for sequential cells. The constraints table may
indicate any or all of the following: setup time, hold time, recovery time, removal
time, and minimum pulse width.
Dynamic Energy
This table shows the energy dissipated (or absorbed) by the device due to a
given signal event. The event reference can be an input pin or output pin.
Energy will be positive for absorbed power and negative for dissipated power.
Both cases are summarized in the table.
Input pin events shown in the table cause no change in any cell output (input
transition which does not cause an output transition), resulting in a change of
internal power only. These cases can be recognized by a missing cell output
pin and load in the table. Output events represent those events that cause a
change in a given target output. The result for this type of event represents
switching energy and can be recognized by the presence of an explicit output
pin (the event reference) and associated load. Other outputs might change, but
are not the designated target, but can be shown in another row. Again, you can
select the transition time and load conditions. An additional load can also be
shown on a related output.
Leakage Power
This summarizes the static power used by the cell with no signal activity for all
conditions. It will be reported for multiple when conditions when such are
available in the characterization data and Liberty model.
Customization Options
You have the following customization options:
■
Selection of input transition time(s) and output load(s) — if you do not
choose the input transition and output load values explicitly for reporting in
the data sheet, the SiliconSmart tool picks the values corresponding to the
default indices.
The default is the middle index for both. For example, if capacitance indices
are {0.0pf, 0.1pf, 0.2pf, 0.3pf, 0.4pf}, 0.2pf will be selected.
■
Units — you can select the desired units for time, capacitance, resistance,
power, energy, voltage, and current for the data sheet. These can be
different than the ones used for the Liberty model.
■
Titles and headings — you can change banner titles, cell description,
company name, and table captions.
■
Formatting — you can change the font face, font size, and any other text
attributes for any item in the data sheet.
■
Annotation — additional annotation can be added anywhere within the
report.
■
Table format — table borders, text attributes, base cell attributes, and
internal dividers can be customized.
The following sections detail how to customize the above options.
can be set through the flow file (run.tcl) or through the global configuration
settings file (configure.tcl).
Example 271
set_parameter gends_config_file current_directory/
gends_config.tcl
If you want to add or modify some parameters, the -append option can be
used to avoid clearing the ioreport block each time new parameters are
changed or added. Parameters in the ioreport define_parameters block
can also be grouped to affect different aspects of the data sheet.
Example 273
#Customization 1
define_parameters -append ioreport {
set oload_typ 0.04219
set tin_typ 0.51
}
#Customization 2
define_parameters -append ioreport {
set oload_typ 0.2
}
a point that is nearest to the index point specified by the parameters described
in the existing table.
There are additional parameters available (mentioned in Table 11) to control
the input transition time for related and constrained pins for constraints.
The value to be specified for these parameters should be in Library units.
For example:
Example 274
index_1 = {1ps 10ps 17ps 22ps 28ps}
index_2 = {1fF 3fF 9fF 14fF 16fF}
In the above example, if tin_typ = 20ps and oload_typ = 10fF, then the
SiliconSmart tool selects 22ps from index_1 and 9fF from index_2.
Table 11 Parameter Type Descriptions
For example:
define_parameters -append ioreport {
set oload_typ_delay {0.00079 0.002054 0.00474}
set tin_typ_delay {0.014 0.022 0.038}
}
As previously mentioned, if the exact slew value/load value is not found, the
SiliconSmart tool will try to find the closest slew/load value from the existing
indices.
banner_title Specify the text for the report banner title, subtitle and
banner_sub_title company name as displayed in the report banner. By
company_name default, this is generic text (no HTML formatting). You
can decorate each with HTML tags such as font or
color overrides. Alternatively, the decoration can also
be done to the banner parameter.These parameters
are embedded directly into the definition of the
banner parameter.
epilog This HTML string defines the closing HTML tags for
the data sheet. It should end with the appropriate
tags for ending the HTML body, but you can embed
additional footer text and parameters.
Table Settings
There are parameters which determine some default format characteristics of
all tables generated by the software. Some of these are overall settings for
tables while others affect various types of cells or various types of tables.
Unless otherwise specified, each parameter specifies a valid HTML string
which can have one or more embedded parameters. The following table
describes the parameters that set overall defaults for all tables.
Table 13 Overall Table Parameters
row_gridline Specifies the default format for the internal grid lines
col_gridline between rows and columns, respectively. These are
overridden for cells around the table perimeter and for
cells adjacent to a row or column separator.
table_borders This is a Tcl list that sets the format for all four table
borders. The order of the border elements is {top-
border, bottom-border, left-border, right-border}.
Specifying * for any border element causes that
element to retain its current setting. Specifying none
causes no border to display.
table_font Determines the default setting for the font face and
table_font_size type for all tables.
Each table in the data sheet has a caption. You can set the content of these
captions with the parameters described in the following table.
Table 14 Specific Table Captions
You can set most of the column headers for each table. There are different
column headers for each type of table. These are shown in the following table.
Normally, the headers are formatted with the col_header_fmt parameter.
Table 15 Table Column Headers
You can specify the format for cells within a table with cell prolog and cell
prototype HTML strings. The cell prolog is the HTML string that is written for a
cell as part of the HTML <td> tag opening sequence. This tag identifies the
start of a new cell in a HTML table. The cell prototype is the HTML string which
is populated with the actual table data. The prototype serves the purpose of
both formatting the data and determining how the field value(s) in the cell are
ordered and organized. There are different cell prototypes and prologs for each
different type of cell. These are described in the following table.
Table 16 Cell Prolog and Prototype Parameters
The prolog and prototype are grouped as a single parameter. The prolog is first
in the list followed by the prototype. The prolog is generally used to identify the
overall style of the cell (such as alignment, background, and so on). It can have
embedded parameters. For data values to be properly populated, the prototype
must contain one or more embedded field names. The software will search for
data in the table matching the field names. You should not modify the existing
field names in any way, but you can move them around or redecorate around
them. Field names have the form @@field@@.
The above example will produce a truth table for a typical latch.
Variable Substitution
The stock data sheet makes ample use of variable substitution. Variable
substitution is primarily used to populate the data sheet with text or values that
is intrinsically variable (table values, timestamp, name of each cell, and so on).
You will see embedded variables in almost every data sheet HTML parameter.
Variable substitution occurs at three basic levels.
The following topics are described in this section:
■
Tcl-Level Substitution
■ Substitution by define_parameters Command
■
Late Substitution
Tcl-Level Substitution
The first level occurs directly from the substitution of variables by Tcl; in other
words, the use of $ variables in Tcl code. This method of substitution is not
commonly used within the data sheet configuration file.
This assigns 2.0 to ctin_typ, 1.0 to tin_typ (in ioreport) and 1.0 to
rtin_typ. This works across definitions of the same block (when using –
append). This type of substitution does not apply to the set_parameter
statement because standard Tcl substitution rules will prevail.
Late Substitution
The last type of variable substitution is referred to as late substitution or late
evaluation. A variable that is evaluated late can be referred to as a late variable.
A variable can be tagged for late evaluation by placing the variable name
between two pairs of @@. For example, variable @@foo@@ will be evaluated late
during data sheet generation. Late evaluation is only useful when creating
custom data sheets.
Introduction
For successful IC design, it is necessary to check the libraries generated by the
characterization tool for consistency, accuracy, and completeness. The
Setup
Since the qualify_library feature is built on top of the features in Library
Compiler, it is necessary to specify the location of this executable. If it is
present in the your executable path (as indicated by a valid return value for the
which lc_shell command), it will be automatically picked up by the
SiliconSmart tool.
Alternately, you can explicitly specify the executable using the SiliconSmart
configuration parameter qualification_lc_shell, as shown in the
example below:
set_config_opt qualification_lc_shell /global/apps/lc_2014.09-
SP5/bin/lc_shell
Using qualify_library
The qualify_library check can be invoked on an existing SiliconSmart
characterization database by simply setting the location and invoking the
command in the tool shell.
The simplest invocation of the command is to invoke qualify_library with
a pointer to the library to be qualified, as shown below:
qualify_library test.lib
The full set of options supported by the command can be displayed using the
-help switch, as shown below:
qualify_library -help
Results
The results of the qualification run are written out in HTML form, in a directory
titled qualification/html, in the characterization database, and can be viewed
using a browser to navigate to the index.html file. This will display a top-level
summary of results, and is designed to allow navigation to cell-level results
entirely within the browser.
See Viewing Results for more information on qualify_library results.
Validation
The qualify_library feature validates the library for the following aspects:
■
Library Compilation
■
Consistency Between CCST and NLDM Timing Models
■
Consistency Between CCSN and NLDM Timing Models
■
Voltage Range Check
In addition, the following optional checks are also provided:
■
Cell Sensitivity Check
■
Minimum Load Index
■
Data Ranges
These checks are invoked using the command-line switch below:
-check list_of_strings
Library Compilation
To ensure that the library is syntactically and structurally correct,
qualify_library compiles the library using Library Compiler, and reports
warning and errors.
The SiliconSmart tool allows users to suppress known compiler warnings using
the configuration option qualification_lc_suppress, which takes as
argument, a list of valid Library Compiler warning ids, as shown in the example
below:
set_config_opt qualification_lc_suppress { warning_id_list }
shown below. If the difference between these two exceeds the threshold
specified by the user, an error is recorded.
Data Ranges
This feature performs a sanity check on the values in the library, ensuring that
they lie between specified minimum and maximum values. This check is
designed to detect any gross outliers or faulty values resulting from simulation
runaway conditions that may not be detected during characterization.
Tolerance Adjustment
The validation checks in qualify_library use relative and absolute
tolerances which can be specified using the SiliconSmart configuration
parameter qualification_tol, as shown below:
set_config_opt qualification_tol {type rel_tol abs_tol}
■
voltage — controls the tolerance of input waveform to reach certain
threshold of the supply voltage. By default, the tolerance is set as 0.05 (5%
of vdd).
■
delay_interpolation
■
slew_interpolation
For example, to specify a tolerance value of 1% and an absolute tolerance of
0.02 library units for delay and a 3% relative tolerance and 0.04 library units for
slew, the specification would be:
set_config_opt qualification_tol {delay 0.01 0.02 slew 0.03 0.04}
If tolerance values are not specified for a type, the default values are used.
These default values are set in compliance with PrimeTime and the Library
Quality Assurance System, and can be obtained with the
report_check_library_options command in Library Compiler:
Relative tolerance for delay : 0.02
Absolute tolerance for delay : 0.005ns
Relative tolerance for slew : 0.03
Absolute tolerance for slew : 0.0075ns
Relative tolerance for ccsn delay : 0.03
Absolute tolerance for ccsn delay : 0.003ns
Relative tolerance for ccsn slew : 0.05
Absolute tolerance for ccsn slew : 0.005ns
Relative tolerance for sensitivity delay : 0.1
Absolute tolerance for sensitivity delay : 0.01ns
Relative tolerance for sensitivity slew : 0.15
Absolute tolerance for sensitivity slew : 0.015ns
Addressing Failures
The following list discusses possible cell failures and potential causes for them:
■
Consistency failure — This type of failure points to a need to examine
relevant characterization options, and possibly re-characterize the library
with new settings.
■
Voltage range failure — This type of failure also points to issues in the cell
circuit design and/or layout, and could be caused by internal leakage or
capacitive effects.
■
Sensitivity failure — This type of failure points to issues in the cell circuit
design and/or layout, and should be addressed there.
■
Data range failure — This type of failure may require an investigation into
the characterization flow to determine if the runaway value was caused by a
simulator failure or a modeling error.
■
Load index failure — This type of failure requires that the library be
recharacterized with a smaller minimum load index for the timing tables.
qualify_library Options
The simplest invocation of the command is to invoke qualify_library with
a pointer to the library to be qualified, as shown below:
qualify_library test.lib [-aggressor string]
[-sim_options string] [-cells list_of_strings]
[-check list_of_strings] [-slews list_of_strings]
[-loads list_of_strings] [-power_rails list_of_strings]
[-report_only] [-finesim] [-no_zip] [-first_load] string
[-finesim]
Use FineSim (default is HSPICE).
[-no_zip]
Do not gzip cell libraries.
[-first_load]
Include first load (not included by default).
string
Input library name.
Viewing Results
In addition to the standard SiliconSmart directory structure, there is a new
directory called qualification being created in the char_point. This contains
all the qualification related data and also html files:
The html report gives an overall picture of the tool version that is being used,
with an overall summary telling the number of failures, passes, and a brief
description on the per cell summary.
The user can click errors to debug more on which cell, which arc and which
slew load point has the failure occurred. Furthermore, it gives a broad
perspective for the user to analyze the data on the basis of histogram, which
tells how many points have correlated and how many points are out of
tolerance as specified by the user.
■
Output Files
■
Graphical User Interface
Using compare_library
The following sections describe using compare_library:
■
Basic Library Comparison
■
Numerical Comparison
■
Selective Comparison
■
Adding User-Defined Attributes for Comparison
where the two Liberty files to be compared are specified with -reference and
-test.
This basic comparison checks for missing groups and attributes and considers
logical attribute values when matching groups, whens, etc. Non-numerical
attribute differences are also reported (group names, etc.).
This basic comparison does not check numerical value differences.
Numerical Comparison
To perform a numerical comparison of attributes and group values, you must
specify the -value switch, as shown below:
compare_library -reference ref.lib -test test.lib -value
The tolerances used in this comparison can be viewed with the -tolerances
switch. You can set these tolerances with set_config_opt. See Comparison
Tolerances for more information on tolerances in compare_library.
In addition, this comparison will compare 2-D tables whose x and y-variables
are swapped and perform value interpolation for 1-D and 2-D tables whose
index values differ.
Points compared are all printed in the appropriate .csv files and organized by
value type. See Numerical Data Files (*.csv) for more information.
Selective Comparison
By default, all cells in the libraries are compared. You can use the following
options with compare_library to select cells to compare and skip, or groups
to ignore during the comparison:
■
To compare only select cells:
compare_library -cells { cell1 cell2 ... }
■
To skip select cells:
compare_library -skip { cell1 cell2 ... }
■
To ignore select groups:
compare_library -ignore { group1 group2 ... }
Comparison Tolerances
The following sections describe tolerances used for compare_library:
■
Viewing Tolerances
■
Specifying Tolerances
■
Tolerance Settings
Viewing Tolerances
Use the -tolerance switch with compare_library to view current
tolerance settings, as shown below:
compare_library -tolerances
Specifying Tolerances
Tolerances can be specified for each type in library units, as shown below:
set_config_opt value_type_absolute_tolerance tolerance_value
set_config_opt value_type_relative_tolerance tolerance_value
For example:
set_config_opt delay_absolute_tolerance 0.0001
set_config_opt delay_relative_tolerance 0.002
A failure is flagged when a test value differs from the reference value by the
absolute and relative tolerances.
Tolerance Settings
Please note that some values share tolerance settings.
For example:
■
max_capacitance, receiver_capacitance, miller_capacitance
settings all come from capacitance.
■
cell_leakage settings come from leakage.
■
max_transition settings come from slew.
Additionally, a maximum relative difference (-max_rel_diff) option is
provided to capture gross outliers. These outliers are not included in the
statistics, and will be reported in the file outliers.csv.
compare_library Options
The compare_library command has the following syntax and options:
compare_library -reference ref.lib -test test.lib
[-output_dir dir] [-tolerances] [-value] [-user_defined]
[-verbose] [-gui] [-all_points] [-compare_ccst_voltage]
[-sigma_error_1] [-max_rel_diff double] [-cells cells]
[-skip_cells cells] [-ignore_groups liberty_groups]
[-compare_values liberty_groups]
[-reference ref.lib]
Reference library path.
[-test test.lib]
Test library path.
[-output_dir dir]
Specifies the output directory location.
[-tolerances]
Prints current tolerance settings and exit.
[-value]
Compare numerical data values.
[-verbose]
Specifies verbose mode.
[-gui]
Displays a GUI to examine results after the comparison.
[-all_points]
Writes all points to .csv file. Expect a runtime increase.
[-compare_ccst_voltage]
Compare CCS-timing voltage from CCS output_current models.
[-sigma_error_1]
Use normalized 3-sigma difference formula to compute relative error of
sigma values.
[-max_rel_diff double]
Maximum absolute relative difference that is not an outlier (-1 to deactivate).
[-cells cells]
List of cells to compare.
[-skip_cells cells]
List of cells to skip.
[-ignore_groups groups]
List of Liberty groups to ignore. The special keywords
ccs|ccst|ccsn|ccsp|lvf are supported.
[-compare_values groups]
List of Liberty groups whose values are compared. The special keywords
ccs|ccst|ccsn|ccsp|lvf are supported.)
[-user_defined]
Includes user-defined attributes from the libraries in the comparison.
Output Files
By default, results are written to a /compare_library directory located within
your current working directory. This location can be overridden by specifying a
different location with the -output_dir switch.
The following sections describe the files located in this directory:
■
Summary File (summary.log)
■
Difference Files (*.diff)
■
Numerical Data Files (*.csv)
Summary:
--------
0 library mismatches
1 cell mismatch
Note: The SiliconSmart tool’s HDL validation utility uses multiple tools.
You must have access to and a license for all required tools
(VCS, PrimeTime) before running this utility.
SDF Generation
The SDF file is generated from the Liberty model using an STA tool. Typically,
the Liberty model corresponds to the one generated by SiliconSmart ACE in
conjunction with the Verilog files during the modeling phase. However, for some
recharacterization flows, if an SDF (corresponding to the reference library) file
already exists, it is possible to bypass this step.
The SDF file is generated using two parameters:
■
sdf_source_tool_cmd — should point to the executable of the STA tool.
■
generate_sdf_cmd_file — should point to the file containing the
appropriate file tags (to substitute the locations of the Liberty/Verilog
models) and list of commands to the STA tool.
SiliconSmart uses pt_shell for the default value for
sdf_source_tool_cmd and also provides a generate_sdf.tcl in the
Clearly, the contents of this file must match the commands and switches
supported by the source STA tool. Furthermore, the options must be specified
to match the format produced during Verilog modeling. For instance, using
verilog_removal_as_hold=false during Verilog modeling combined with
–version 2.1 in the SDF generation command may produce errors because
SDF version 2.1 does not support removal constructs and must instead
interpret them as hold constructs.
HDL Simulation
HDL Simulation is used for timing and function verification of the Verilog
models. The simulators supported by SiliconSmart are Modelsim, NC, and
verilogXL. The parameters hdl_target_simulator and
hdl_target_simulator_path must be specified appropriately (see also
hdl_target_simulator_options).
This phase is comprised of the following checks:
1. Verilog compilation — Compiles the individual modules in the three HDL
model files. SiliconSmart creates modules for functional definitions, test
vector interfaces and UDP tables for flops/latches.
2. Verilog simulation — Runs a simulation of the test vectors provided in the
test bench against the functional definition in the UDP file. The test bench
file contains a simple error checking mechanism to compare the Boolean
simulator output with the values expected from the behavioral model. The
simulator also writes a Value Change Dump (VCD) file as it executes the test
bench vectors.
set_location char_dir
Reports
The VCD-SDF mapping compares the delay numbers from the VCD file
(generated from the HDL netlists and located in Modelsim/vcd_dir/cell.vcd) to
the delay numbers from the SDF file (generated from the Liberty and located in
sdf/cell_sdf_files/cell.sdf). Each cell’s detailed report is located in the
Modelsim/reports/cell.vcd_sdf_report file. An example of such a report is
shown below:
Example 279
timestamp A B Y Arc r/f VCD VCD SDF SDF
SDF Result
---------------------------------------------------------------
---------
20000 1* 1* 0*
20000 1 1 1 A->Y r (posedge A,A&&B) 0
0,0 Cond/Edge PASS
40000 1 0* 1
40000 0* 0 1
60000 1* 0 1
60000 1 0 0* A->Y f (posedge A,A&&!B) 0 0,0
Cond/Edge PASS
Where:
■
Timestamp — the time instant in the VCD file.
■
Ports — input and output port states. A * specifies that the pin changed state
from the previous timestamp.
■
Arc — the current transition in the VCD file that is considered for delay
annotation.
■
r/f — the rise/fall transition that occurs on the output pin.
■
VCD edge/cond — the current input pin state for the given transition.
■
VCD delay — the input to output delay in the VCD file at the given instant of
time.
■
SDF edge/cond — for the current edge/condition, the equivalent edge/
condition found in the SDF file, whose delays are suitable to consider in
matching the delay-annotation.
■
SDF delay — the delay chosen from the SDF that should be mapped to the
delay in the VCD file at the same state.
■
Result — the result of VCD and SDF delay correlation. N1 and N2 are delay
numbers found in SDF.
In addition, the verilog/reports/verilog_*_summary.report file contains an overall
summary across all of the cells in the Liberty model. An example of this file is
shown below:
Example 280
---------------------------------------------------------------
Cell Status
---------------------------------------------------------------
MUX4X1 Pass
NAND2X1 Fail
OR2X1 Incomplete -- Unmapped arcs to SDF
DFFX1 Pass
Timing Models
Timing Measurements
Timing characterization involves measuring the propagation delay through a
cell, as well as transition times, tri-state enable and disable times, and timing
constraints between two input signals.
The following sections describe these timing measurements:
■ Propagation Delays and Transition Time
■
Current Source Models
■
CCS Receiver Models
■ Maximum Capacitance Measurement for TIEH/TIEL Cells
■
Output-to-Output Timing Arc Support
Differential Pins
Differential pins are a pair of pins that encode a logic value not by the absolute
voltage on either pin but instead the relative voltage between them. Because of
this, propagation delay can not be measured to an absolute voltage, but must
instead be measured by looking at both signals.
To measure the delay from an input pin to a differential driver, SiliconSmart
samples both output pins and uses the crossover point as the delay threshold.
This makes the measurement insensitive to the absolute voltages being driven
by the output pins. When measuring delays from a differential receiver,
SiliconSmart uses the 50% point of the input transition. This is guaranteed to
be the same as the crossover point because the input transition times are
matched.
CCS also records a two-part receiver model for each arc that records the input
pin capacitance as seen by the driver, which is split into two parts:
■ CCS Timing Waveform Reduction
In these cells because you have timing from A/CK, a receiver model can be
modeled inside the timing() group under the output pin Z/Q. There will be two
indices for receiver models, similar to the timing LUT table. The load index will
be the same as the timing LUT table’s load index but the slew index will be
measured or calculated as slew at input A/CK inside the deck for the timing arc.
The slew calculation is as per the SNPS specification, that is, the measuring
slew for a C1/C2 interval and then convert them into 100% and then convert
them into Liberty slew thresholds (as in 10-90%).
You can find different measurements into the deck.cir such as ccs_cin1,
ccs_cin2 as related to C1/C2 receiver cap value, ccs_tin1/2 related to
slew index value.
Pin-level receiver models are modeled inside a pin() group and typically
modeled for all those input pins from where no direct timing arc originates.
Consider the following example:
Example 282
D, SI, SE pins in scan-flop.
Because there is no timing arc for these pins, a separate Cin_ arc is generated
by SiliconSmart for measuring pin capacitance. In this case, because there is
output like delay arcs, the receiver model is measured only for different input
slew indices by keeping the default load at the output pin. That’s why there is
only one index (slew) in receiver model at pin level.
Input slew index is an actual measured value, so there is a possibility that slew
index range may not be the same as slew index range in timing LUT tables.
(This is not the case for pwl driver but may happen with other drivers). If you
want to cover a whole slew range as in delay LUT tables in receiver models,
you can set the slew_matching_cin parameter.
where:
■
-pin specifies the output pin that is being pulled logic high or logic low, and
■
-state specifies the logic state of the cell, that is H for logic high and L for
logic low.
This measurement is invoked when the configure command includes the
-timing switch. When this is enabled, it generates a new measurement
named maxcap during characterization.
the SO pin will have a loading effect on Q. So you would model Q->SO timing
arcs. This can be achieved as follows:
■ Through the set-config_opt command:
Example 284
set_config_opt usual_flags -pin SO
configure_delay_from_outputs {Q}
■
From the pin type block in configure.tcl:
Example 285
set_pintype_parameter configure_delay_from_outputs {Q}
Slew index values for such an arc will be slew measured at pin Q and load
indices will be load applied at SO pin while input slew at clock pin (in sequential
cell) will be controlled by default_slew pin type parameter. Because you are
modeling Q->SO arc, CK->SO arc will not be modeled.
SiliconSmart supports output to output arcs for NLDM and CCS Timing formats
only.
requires. Most model formats require propagation delay and output slew
information for this event and ignore the possibility that the state might not
have changed.
■
The three-state disable event never causes a new state to appear on the
bus. This is because the act of releasing control means the driver has no
influence over what state appears on the bus. Because no new state is
propagated, most model formats either do not require or do not model timing
information for the disabling event.
■
When an output pin is disabled, its pin capacitance must be reported to
accurately estimate the total load capacitance. Pin capacitance is measured
for three-state pins as it is for input pins. However, most model formats do
not deal with this capacitance completely and require adjustments to other
measurements. This will be described later in this document.
■
Contention occurs when one driver releases control of a bus at the same
time another driver is taking control of the bus. Functionally, this can result
in an ambiguous voltage on the bus that can cause signal integrity violations
elsewhere in the design. It is desirable to know how soon after a disable
event an enabling cell can take control of the bus. This is the primary
purpose of the three-state disable measurement: to avoid signal contention.
■
If contention is unavoidable, it is necessary to model its effect on dissipated
power.
Contention represents a brief low-resistance short circuit. The current flow
through this short circuit is considerably higher than that seen through CMOS
switching, which is a moderate-resistance short circuit of very brief duration.
However, most model formats do not support contention power modeling. For
this reason, SiliconSmart does not automatically measure contention currents.
The following sections describe the characterization methodologies applied to
three-state drivers.
■ Timing Measurements
■
Pin Capacitance
Timing Measurements
This section describes the timing measurements that are unique to three-state
devices:
■
Three-State Enable
■
Three-State Disable
Three-State Enable
A cell captures control of a bus when it transitions from the high-impedance (Z)
state to either the low (L) or high (H) state. The load for the cell-under-test
(CUT) is configured as shown in Figure 53, and Figure 54.
Three-State Disable
A cell releases control of a bus when it transitions from either the L or H state to
the Z state. SiliconSmart ACE implements the three-state disable
measurement using output current rather than output voltage. This is done
because the act of releasing control does not generate an output transition that
is controlled by the CUT. The use of current therefore provides measurements
that are characteristic of the CUT and provides accurate timing to avoid
contention.
The load for the CUT is configured as shown in Figure 55and Figure 56.
Example 286
Vtri = (logic_high - logic_low) / 2
This equation differs from that used to calculate the target voltage because
I(min) is always assumed to be zero.
Figure 57, shows typical voltage and current waveforms for the HZ
measurement. The maximum current flow is measured while the CUT is active.
As the active high three-state control pin, en, is switched high to bring the
device into high impedance, the CUT stops sourcing current and current flow
begins to drop.
When the current reaches the specified current threshold point, the three-state
intrinsic delay measurement is performed from the propagation delay threshold
of the en pin to this current threshold point.
Pin Capacitance
Pin capacitance is acquired for all output-type three-state pins. It is identical to
the automatic acquisition of input pin capacitance.
However, most analysis engines add pin capacitance to the total net load when
it is explicitly defined, as it must be for three-state pins. This means the pin
capacitance is counted twice when information other than three-state delay
information is used.
To compensate for this behavior, SiliconSmart adjusts the load-index for tables
other than three-state delay tables by adding the pin capacitance to every point
in the index. The result is a proper representation of delay and output transition
time under all conditions.
Occasionally I/O cell pad pins will exhibit significant leakage currents even
when disabled. In this case, the tri-state disable measurements can fail
because the output current never drops below the necessary threshold.
SiliconSmart can compensate for this by subtracting the steady-state leakage
current before finding the disabling threshold. To use this feature, set the pin
type parameter subtract_leakage to 1. This feature is not enabled by
default as it extends the simulation time to find the steady-state current and is
not frequently necessary.
For example, the imported Liberty has the following load/slope information for a
timing/power table.
pin(Y) {
direction : output;
capacitance : 0.003473;
function : "A";
three_state : "!OE";
internal_power() {
related_pin : "A";
rise_power(energy_template_7x7) {
index_1 ("0.028, 0.044, 0.076, 0.138, 0.264, 0.516,
1.02");
index_2 ("0.0050534, 0.0075814, 0.0129534,
0.0236974, 0.0451854, 0.0878454, 0.174113");
values (" ....." );
}
....
}
After importing this Liberty, the load information in the instance file is:
set_config_opt -type { timing noise } -- explicit_points_load\
{ 1.5804e-15 4.1084e-15 9.4804e-15 2.0224e-14 4.1712e-14
8.4372e-14 1.7064e-13 }
Notice that each load point from the imported liberty has the pin capacitance on
pin Y subtracted from it. This adjusted load set is used for characterization.
While writing the model back out again, the SiliconSmart tool will offset the
loadset appropriately with the capacitance value on pin Y.
Constraints
Timing constraints examine the relative timing between two input transitions.
The transitions may occur on two different pins, such as in setup and hold
measurements, or on a single input as in minimum pulse width measurements.
In all cases the measurement seeks to find the minimum spacing that can
occur between the two edges before the cell fails to operate as expected.
The following sections describe timing constraints:
■
Setup/Hold Measurements
■ Path-Based Constraint Analysis
■
Methodology
■
Constraint Modes
Setup/Hold Measurements
SiliconSmart supports four methods of acquiring constraints: independent,
dependent, dependent-setup, and dependent-hold. Independent acquires the
constraint by running separate simulations for each constraint. In the case of a
setup measurement, the signal is held stable after the setup edge, equating to
an infinite hold value. Similarly, when acquiring the hold value, the setup time is
effectively infinite. This is the default for setup and hold measurements and
always used for recovery and removal measurements.
The three dependent modes capture the setup and hold constraints as two
measurements on a single pulse on the data pin in one simulation. These
modes exclude the possibility of a negative meta-stable region.
The measurement method for each of these modes is described in the
following sections.
■
Enabling the Measurement
■
Dependent Measurement Operation
First Optimization
First, a pulse width optimization is set up centered on the reference pin’s
prop_delay_level transition threshold. The optimization begins at a tiny
width (fixed at 1e-14) and expands until the output pin transitions correctly or
until the input pin's dependent_max_width is reached. See A of Figure 58.
Next, using the pulse found in the previous step, the setup edge is moved in
until the cell fails. See B of Figure 58. Finally, using the last non-failing setup
edge position, the hold edge is brought in until the cell fails again.
Optimizing the setup and hold edge after the initial pulse is important because
it allows the algorithm to account for cells in which the center of the pulse is
significantly offset from the clock edge. For example, this occurs in scan flops in
which the logic on the front the flop causes the minimum input pulse to occur
significantly before the clock edge. See C of Figure 58.
The results of the measurement are setup and hold tables indexed by the
transition time on the input pin and reference pin (clock). The transition times
used in the tables are the actual measured transition times, which may be
slightly different than the specified values when using active drivers.
The dependent-setup and dependent-hold modes work the same way as
dependent mode. The difference is in the initial conditions of the search. In
dependent-setup mode, the initial pulse is ahead of the clock edge. This
ensures that the valid pulse found in A of Figure 58, will be one with the hold
minimized. Phase B then finds the minimum setup given the hold value found in
phase A. In dependent-hold mode, the initial pulse is behind the clock edge.
This ensures that the valid pulse found in phase A will be one with the setup
minimized. Phase B does nothing, and phase C finds the minimum hold given
the setup value found in phase A.
Note: This will result in a minor .sif change which may cause a cache
miss for constraints or max cap load search.
In Figure 59, node N1 is the positive feedback node. Notice that it is an un-
inverted function of the data input, D. This node should also not be gated by
pass-gates.
The positive and negative clock nodes are typically measured at the inputs to
the pass gates controlling the feedback loop. In this example, the nodes are
labeled EN and !EN.
The setup and hold times for this circuit can be calculated by measuring the
delay from D to N1 and the clock input to EN and !EN.
This command creates internal node FB and specifies that the name of the
node in the SPICE netlist is N18:7. The -no_model switch is used to indicate
that this node should not appear in any of the resulting models. The pin type
default is used for this node. The positive and negative clock nodes must be
added similarly.
The function of each of the nodes must also be defined. Typically this is done
via the add_function command, for example:
Example 289
add_function FB D
In most cells, there is only a single latch structure (not counting any slave
latches in flip-flops) and the command looks something like this:
Example 290
set_config_opt path_constraint_feedback FB
Once the nodes have been defined, path-based constraint analysis must be
enabled via the global parameter path_constraint_mode. This parameter
is set in the default parameter block of the configure.tcl file. Setting this
parameter to the word polish tells SiliconSmart to use the path-based setup or
hold value as a seed to the standard search algorithm which polishes the
result, increasing or decreasing the value until the failure point is found. This
mode results in setup and hold values that are the same as not using path-
based constraints within one constraint tolerance (see the
constraint_resolution pin type parameter).
path_constraint_mode can also be set to verify. In this mode, SiliconSmart
uses the path-based setup or hold value and verifies that the cell functions at
this setting. If it does, no further refinement is performed-the value is not
decreased. If the cell fails the value is increased until the cell functions as
expected. This mode requires fewer iterations and is faster but produces more
conservative results.
The default value for path_constraint_mode is off, disabling path-based
constraint analysis and resulting in the use of the standard methods. See the
Measuring Path-Based Setup and Hold section for details on the methodology
used.
That is, the scan enable pin, SE, controls whether the data comes from the
standard data input D or the scan data input SD.
To set this cell up, the feedback node and the positive and negative enable
nodes must be identified and specified to SiliconSmart. In this case, N1:6 is
the positive feedback node because it is the feedback node of the master latch.
CK:14 and CK:7 are potential positive enable nodes. Either can be selected as
they are part of the same wire. Similarly, CKB:4 or CKB:6 can be selected for
the negative enable node.
The below example shows the Tcl code that creates the three internal nodes,
defines their function, and specifies the nodes to use via set_config_opt.
This code was automatically generated by the analyze_netlists
command. In most cases this description will be automatically generated, but it
may be necessary to create it manually for some cells.
Example 292
add_pin SISMART_FB default -internal -spice_node N1:6 -no_model
add_function SISMART_FB {D&SE | SD&!SE}
set_config_opt path_constraint_feedback SISMART_FB
the enable_positive node must fall to its lower slew threshold before the
feedback node reaches its switching threshold.
Comparing the setup and hold measurements, the assumption is that for a
given data transition, if the feedback node reaches the switching threshold
before the enable node connecting the initial feedback value reaches its
beginning slew threshold, then the final value will be latched; if the feedback
node reaches the switching threshold after the enable node reaches its ending
slew threshold then the value will not be latched, and if it arrives between the
two thresholds, the result is indeterminate (neither setup or hold are satisfied).
It is possible to adjust the thresholds to achieve more optimistic or pessimistic
values from the path constraint measurements. The most convenient way to do
this is to define an alternate pin type block for use with path constraint nodes.
The thresholds associated with that pin type can be adjusted and will only
affect the path constraint measurements. The threshold parameters used are
the standard slew and switching threshold parameters. Threshold adjustment is
not generally necessary but might be desirable if the standard thresholds are
being adjusted in a way which would make the path constraints less accurate. If
a custom path constraint pin type is used, the parameter
path_constraint_pintype should be set to the pin type name before
running analyze_netlists.
Experiments have determined slew thresholds of 0.3 and 0.7 work well for
producing accurate path constraint measurements. This will vary with process
and library design. Notice that the exact threshold values used are not critical;
they will have some effect on performance, and for
path_constraint_mode=verify can produce more conservative results.
The final constraint step will guarantee that invalid setup and hold values are
never produced, and for path_constraint_mode=polish will guarantee
values as accurate as those produced without using path constraints.
For example, define the following in the configure.tcl file if the thresholds for
your default pintypes are other than 30% and 70%.
Example 293
pintype pintype_3070 -> default {
set logic_high_threshold 0.7
set logic_low_threshold 0.3
set prop_delay_level 0.5
}
define_parameters default {
set path_constraint_pintype pintype_3070
.
.
.
}
Methodology
This section describes the SiliconSmart constraint measurement
methodologies. The current trend with ASIC designs is to exploit the existing
technologies by reducing design margins and using innovative techniques.
Given this trend, characterization methodologies have increasingly gained
importance. SiliconSmart offers a wide variety of methodologies to measure
constraint values that can be selected depending on the specific design
requirements or flow. This section addresses all the major modes, styles, and
options that constitute or tune a constraint measurement methodology.
SiliconSmart includes four constraint modes that you can enable using the
constraint_mode parameter. These modes are as follows:
■ Independent Mode
■
Dependent Mode
■
Dependent-Setup Mode
■
Dependent-Hold Mode
SiliconSmart includes constraint styles that you can enable using the
smc_constraint_style parameter. These styles are as follows:
■ Pass-Fail
■
Relative-Degradation
■
Slew-Degradation
■
Delay-Reduction
SiliconSmart includes the following important parameters you can use
specifically for controlling constraint measurements:
■
smc_degrade (default is 0.1)
■
smc_degrade_absolute (10ps for relative-degradation and 0ps for slew-
degradation)
■
constraint_glitch_check (1, i.e., on.)
■
constraint_resolution (10ps)
■
set_config_opt -type constraint state_partitions (all/one)
■
path_constraint_mode (off)
■
constraint_dependent_margin (equal to constraint resolution)
■
model_neg_constraint_sum (1, i.e., on)
The previous parameters are specific to constraint measurements.
SiliconSmart also includes some additional more general parameters that can
be helpful. While the following parameters are useful for all kinds of
measurements, they can be particularly important for constraint
measurements:
■
default_load — capacitive load used for all constraint measurements.
■ largest_slew — largest input transition applied (impacts measurement
windows).
■ max_tout — largest output transition expected (impacts measurement
windows).
■
driver (default is pwl)
■
separate_cell_initialization (on)
■
glitch_high_threshold (default equal to logic_high_threshold)
■
glitch_low_threshold (default equal to logic_low_threshold.)
Constraint Modes
Constraint modes define the methodology used for the measurement of
constraint values. There are various methods to define and measure the
constraints between data and clock transitions.
The following sections describe constraint modes:
■
Independent Mode
■
Dependent Mode
■
Dependent-Setup Mode
■
Dependent-Hold Mode
■
Debugging Dependent Modes
■
Correction for Dependent-Setup & Dependent-Hold Constraint Modes
Independent Mode
SiliconSmart performs separate simulations for setup and hold measurements.
For setup measurement, the data is kept stable before the active edge of the
clock. For hold measurements, the data is kept stable after the active edge of
the clock.
Transition-based measurements are made for both setup and hold as far as
possible. That is, the output is initialized to an opposite state and a constraint is
considered to be met when the output makes a successful transition.
Setup and hold when conditions are kept the same if possible to ensure the
following formula holds true:
Example 294
setup+hold > 0
Flow
Iterations begin with a zero constraint (setup/hold) value. SiliconSmart
compensates for data and clock slew values so that the initial (zero) constraint
is the same for all data-clock slew combinations measured between the
prop_delay_level of the signals.
When the initial simulation is successful, the constraint value is decreased in
successive iterations by exponentially larger values until a failure is detected.
Output (Q) makes a transition when the constraint is met for setup, hold, and
recovery measurements while it remains stable for removal measurements (for
edge-sensitive cells).
Failure Detection
Simulation is judged as pass or fail based on criteria controlled by the
smc_constraint_style parameter. For more details, see the Constraint
Styles section.
Debugging
For debugging purposes, SiliconSmart creates a
setup__D__lh__CK__lh__ACQ_1.tar.gz file in the standard location inside the
runtime/spice directory. This is a setup simulation for a D pin moving from low-
to-high, a CK pin moving from low-to-high, and acquisition number 1. Multiple
acquisitions are present for multiple when conditions. It is a tar gzip database
that includes the following files and directories:
■
setup__D__lh__CK__lh__ACQ_1.sof.gz — simulation Output File (sof),
readable by SiliconSmart. It can be converted to a user-readable format with
the report_sim_results command.
■
setup__D__lh__CK__lh__ACQ_1.sif_number/ — a simulation directory for
iteration number; This directory contains SPICE decks and simulator output
files. deck.tr0 contains waveforms for important signals. A single SPICE
deck file deck.cir is created for all data-clock slew combinations. Iterations
begin from *.sif_0 and continue until a result is obtained for all the data-clock
slew combinations.
Dependent Mode
In dependent mode, a combined setup and hold measurement is made at the
same time. Because both constraints are applied at the same time, the
measured values are different and more pessimistic as compared to
independent mode, in which one constraint is kept at an almost infinite value.
When an active driver is used with dependent mode, rise and fall slew indices
are recalculated and the final slew index values can differ from specifications.
This is because the rise and fall data transitions occur within the same
simulation for dependent mode and it is not possible to achieve both exact rise
and exact fall slews from driver output. For more details, see the Setup/Hold
Measurements section.
Flow
The iterations begin with a very narrow pulse (approximately equal to a
triangular wave with small margin) centered around prop_delay_level of
reference pin, as shown in Figure 66 for Dependent Mode.
Figure 66 First Iteration with Approximately Zero Pulse Width for Dependent Mode
Data pulse is slowly reduced (binary search) from both edges until a solution
within constraint_resolution is reached.
Once a valid data pulse is obtained, a second optimization is performed. Pulse
is reduced by moving the setup edge while keeping the hold edge constant at
the valid pulse value.
Setup and hold numbers are calculated from the resulting data pulse. For
example, the resulting pulse is shown in Figure 70.
Recovery, removal and minimum pulse width measurements are done in the
same manner as for independent mode.
Figure 71
Failure Detection
Simulation judgment for failure/success is done based on constraint style. For
more details, see the Constraint Styles section.
Glitch threshold values for dependent mode are fixed at the logic_low/
high_threshold values. (The glitch_low_threshold and
glitch_high_threshold parameters are not used for glitch detection when
specified) .
Dependent-Setup Mode
Dependent-setup mode is similar to dependent mode except that the initial data
pulse is placed ahead of reference pin transition, i.e., the trailing data pulse
edge is aligned with reference pin edge. This method ensures that minimum
hold values are obtained.
Flow
It begins with a very narrow pulse ahead of the related pin transition as shown
in Figure 72. This initial negative hold value is governed by largest_slew
parameter.
When the initial iteration is successful, no further iterations are done because
data pulse is almost a triangular wave shape and it is not possible to reduce it
further.
If first simulation is un-successful, a very large pulse width governed by
dependent_max_width is applied (ahead of reference pin edge) as shown in
Figure 73.
Similar to dependent mode, pulse is slowly reduced from both edges until a
valid pulse is obtained within constraint-resolution.
A second optimization is performed by moving-in the setup edge while keeping
the hold edge constant.
Recovery, removal and minimum pulse width measurements are done in the
same manner as for independent mode.
Below is a graphical representation of dependent-setup mode:
Figure 76
Failure Detection
Failure detection is common to all dependent modes. Simulation judgment for
failure or success is determined based on constraint style. For more details,
see the Constraint Styles section.
Glitch threshold values for dependent mode are fixed at the logic_low/
high_threshold values. (The glitch_low_threshold and
glitch_high_threshold parameters are not used for glitch detection when
specified).
Dependent-Hold Mode
Dependent-hold mode is also similar to dependent mode except that the initial
data pulse is placed after the reference pin transition i.e., leading edge of data
pulse is aligned with reference pin edge. This method ensures that minimum
setup values are obtained.
Flow
The flow begins with a very narrow pulse after the related pin transition, as
shown in Figure 77. This initial negative setup value is governed by
largest_slew parameter.
If the initial iteration is successful, no further iterations are done because data
pulse is almost a triangular wave shape and it is not possible to reduce it
further.
Recovery, removal and minimum pulse width measurements are done in the
same manner as for independent mode.
Below is a graphical representation of dependent-hold mode:
Figure 81
Failure Detection
This methodology is common for all dependent modes. Simulation judgment for
failure/success is done based on constraint style. For more details, see the
Constraint Styles section.
Glitch threshold values for dependent mode are fixed at the logic_low/
high_threshold values. (The glitch_low_threshold and
glitch_high_threshold parameters are not used for glitch detection when
specified.)
Once the margin is added to the hold edge, the setup edge optimization is
performed. The hold margin allows the setup edge to move closer to the clock
edge.
Constraint Styles
Constraint Styles define criteria for the judgment of simulations, performed for
each iteration during constraint measurement. SiliconSmart decides regarding
the next iteration on the basis of whether previous iteration was a success/
failure. Final constraint results vary significantly with the choice of constraint
style.
The following sections describe constraint styles:
■
Simulator Bisection Support
■
Monitoring Internal Nodes for Constraints
■
Pass-Fail
■
Relative-Degradation
■
Slew-Degradation
■
Delay-Reduction
■
Relative-Slew-Degradation
■
Pushout-Degradation
■
Advanced Parameters for Constraint Measurements
■
Negative Setup + Hold
■
Path-Based Constraints
■
Summary of Various Constraint Modes and Styles
With simulator bisection switched on, you’ll notice that the SiliconSmart tool
now produces a single spice deck for every constraint arc (as opposed one per
iteration, in default method).
These spice decks are formatted to use simulator bisection and you can easily
recognize some of the typical directives within it:
■
Specifying model optimization in HSPICE:
.model optmod opt METHOD = PASSFAIL
■
Optimization instruction for parameter setup:
.param setup = opt1('init_hbm','min_setup','max_setup')
■
Measurement for CK->Q delay degradation 5%:
The following table shows the acquisition modes supported for this method:
Transitioning Check
This check is considered a fail if any of the transitioning output nodes fail to
make an expected transition from logic_low_threshold to
logic_high_threshold, or vice versa.
Fallback Check
Fallback is detected on transitioning node if a node makes a transition in the
opposite direction at logic_low_thresholds or
logic_high_thresholds. You can also provide a list of thresholds using the
parameter fallback_threshold_pcts. If values are specified, the fallback
check is done only at thresholds specified through the parameter:
set_config_opt -type setup fallback_threshold_pcts {0.2 0.25 0.75
0.8}
The above example performs has the fallback check executed only at these
points, not at logic_low_threshold and logic_high_threshold. This
is shown below:
Figure 84
Glitch Check
Glitch is detected on non-transitioning output nodes or internal node (if defined)
if a node crosses glitch_low_threshold or glitch_high_threshold.
Relative Check
Relative check is detected if delay increases beyond the nominal delay
measured in the first iteration by more than the relative tolerance (specified by
smc_degrade) and absolute tolerance (specified by
smc_degrade_absolute):
delay.sweepValue() <= nominal_delay + max(smc_degrade_absolute,
smc_degrade*nominal_delay)
For example:
Nominal delay= 100ps
Smc_degrade= 10% of nominal slew
Smc_degrade_absolute= 5ps
Then
Slew.sweerValue()<=100ps + max( 5ps, 10% * 100)
<= 100ps + max(1ps, 10ps)
<= 100ps + 10ps
<= 110ps
Slew Check
Slew check is detected if node slew increases beyond the nominal slew
measured in the first iteration by more than the relative tolerance (specified by
smc_degrade) and absolute tolerance (specified by
smc_degrade_absolute):
slew.sweepValue() <= nominal_slew + max(smc_degrade_absolute,
smc_degrade*nominal_slew)
For example:
Nominal slew= 100ps
Smc_degrade= 10% of nominal slew
Smc_degrade_absolute= 15ps
Then
Slew.sweerValue()<=100ps + max( 15ps, 10% * 100)
<= 100ps + max(15ps, 10ps)
<= 100ps + 15ps
<= 115ps
See Also
■
Parameter: constraint_glitch_check
■ Parameter: fallback_threshold_pcts
■ Parameter: glitch_high_threshold
■
Parameter: glitch_low_threshold
■ Parameter: logic_high_threshold
■
Parameter: logic_low_threshold
■ Parameter: simulator_bisection
■ Parameter: smc_constraint_style
■
Parameter: smc_degrade
■
Parameter: smc_degrade_absolute
■
Parameter: smc_slew_degrade
■
Parameter: smc_slew_degrade_absolute
Limitations
Simulator bisection has the following limitations currently:
■
Supported only for independent smc_constraint_mode.
■
Supported only for the following constraint styles:
• Pass-fail
• Relative-degradation
• Slew-degradation
• Relative-slew-degradation
■
Supported for precharacterization only when driver_mode is pwl.
■
Not supported for constraint_monotonic_check 1.
■
Supported only for HSPICE and FineSim simulators:
• HSPICE: After version hspice_2013.03
• FineSim: Starting with version 2014.09
■
separate_cell_initialization=0 is not supported.
■
Supported only for the following driver_mode:
• pwl
• emulated (ccs-predriver)
• active
• active-waveform
• custom
■
min_period acquisition is not supported.
The command optionally accepts a pintype designation, which is used for the
constraint criteria description: in cases where you have to monitor for multiple
nodes and they do not share the same criteria, parameters can be defined in
pintype and later associated to internal nodes via the
monitor_internal_nodes instruction.
For the example above, you can redefine constraint criteria for the internal node
by doing the following:
1. Create an empty pintype block in configure.tcl to define the internal node.
2. Redefine the constraint criteria in driver.tcl
For example, in configure.tcl:
Example 298
pintype int_1->default {
}
And in driver.tcl:
Example 299
set_config_opt -pintype int_1 { smc_constraint_style relative-
degradation }
set_config_opt -pintype int_1 { smc_degrade 0.2 }
set_config_opt -pintype int_1 { glitch_high_threshold 0.90 }
set_config_opt -pintype int_1 { glitch_low_threshold 0.10 }
The above is also true when handling primary outputs and internal nodes
altogether with diverse constraint style or different parameters.
You can define multiple internal nodes in the same way by defining all internal
nodes in configure.tcl and driver.tcl.
For example, in configure.tcl:
pintype int_1->default {
}
pintype int_2->default {
}
And in driver.tcl:
#int_1 definition
set_config_opt -pintype int_1 {glitch_high_threshold 0.8 }
set_config_opt -pintype int_1 {glitch_low_threshold 0.2 }
set_config_opt -pintype int_1 {smc_constraint_style relative-
slew-degradation }
set_config_opt -pintype int_1 {smc_degrade 0.05 }
set_config_opt -pintype int_1 {smc_slew_degrade .5 }
set_config_opt -pintype int_1 {smc_degrade_absolute 15e-12 }
set_config_opt -pintype int_1 {fallback_threshold_pcts {0.2 0.4
0.5 0.6 0.7 0.8}}
set_config_opt -pintype int_1 {smc_degrade_check negative-side }
#int_2 definition
set_config_opt -pintype int_2 {glitch_high_threshold 0.9 }
set_config_opt -pintype int_2 {glitch_low_threshold 0.1 }
set_config_opt -pintype int_2 {smc_constraint_style slew-
degradation }
set_config_opt -pintype int_2 {smc_degrade 0.025 }
set_config_opt -pintype int_2 {smc_degrade_absolute 1.5e-12 }
set_config_opt -pintype int_2 {fallback_threshold_pcts {0.25 0.55
0.75}}
set_config_opt -pintype int_2 {smc_degrade_check positive-side }
Generally, the event which actuates the internal node changes in a constraint
arc is the clock edge, so the clock signal is assumed as the triggering event for
the internal nodes by default.
For those cases which might require precise trigger identification, users can
use the parameter constraint_trigger_node {<int_node>
<trigger_node>} to assign which pin triggers the internal node change. the
parameter:
Example 300
set_config_opt -type {setup} -from D -reference CP
constraint_trigger_node {m15:src CP }
See Also
■
Parameter: monitor_internal_nodes
■
Parameter: constraint_trigger_node
■
Parameter: fallback_threshold_pcts
■
Parameter: skip_constraint_outputs
Pass-Fail
When smc_constraint_style is set to pass-fail, the simulation is
considered a pass if all of the following checks pass:
■
Transitioning Check
■
Fallback Check
■
Glitch Check
Relative-Degradation
When smc_constraint_style is set to relative-degradation, the first
iteration (*.sif_0) is a reference delay measurement done at a relaxed
constraint value. This constraint value is common for all data-clock slew
combinations and is internally calculated as follows:
1.2* (largest_slew)/(logic_high_threshold-logic_low_threshold)
The simulation is considered a pass if all of the following checks pass:
■
Transitioning Check
■
Fallback Check
■
Glitch Check
■
Relative-Degradation
Slew-Degradation
When smc_constraint_style is set to slew-degradation, the process
is similar to relative-degradation, except that the degradation is observed for
output slew instead of for output delay. The simulation is considered a pass if all
of the following checks pass:
■
Transitioning Check
■
Fallback Check
■
Glitch Check
■
Relative-Degradation
Delay-Reduction
Delay-reduction works similarly to delay-degradation, except that the relative
checks equation is:
delay.sweepValue() >= nominal_delay - max(smc_degrade_absolute,
smc_degrade*nominal_delay)
Relative-Slew-Degradation
When smc_constraint_style is set to relative-slew-degradation,
both relative-degradation and slew-degradation will be checked. This
smc_constraint_style is only supported when the
simulator_bisection parameter is set to 1.
Pushout-Degradation
For standard sequential cells, it is observed that clock-to-output delay
increases as the constraint (setup/hold) value shrinks. Hence the curve for
function (constraint + delay) follows a U-shape. Pushout-degradation style
detects the constraint value for which the (constraint + delay) curve displays
minimum value (as depicted by TS2 point in Figure 88.
The criteria for simulation failure is the same as for pass-fail style. Additionally,
it applies another algorithm to detect the TS2 point.
For example, for independent mode, flip-flops can use slew or delay
degradation only for setup, hold, and recovery but only use pass-fail (along with
glitch detection) for removal. Latches can use degradation only with setup and
recovery and can only use pass-fail (along with glitch detection) for hold and
removal.
The parameters listed in Table 18 can be modified to match the size of the
search window, However it is recommended that you use the
total_slew_multiplier parameter instead of modifying these parameters
directly. The total_slew_multiplier parameter stretches the window
consistently for all the constraint measurements.
■
Internal parameter max_constraint_multiplier is fixed at 1.2.
■
Internal parameter total_slew is calculated as:
Example 301
(largest_slew / (logic_high_threshold -logic_low_threshold)) *
total_slew_multiplier
Table 19, lists additional parameters that control different options related to
constraint measurements, such as path-based measurements and
precharacterization method. For more details about path-based
measurements, see the Path-Based Constraints section.
Table 19 Additional Advanced Parameters
model_negative_constraints default 1
model_neg_constraint_sum default 1
statistical_enable_constraint_sensit default 0
ivity
smc_degrade_maximum default 0
+ hold, each having a different meaning and each being individually handled by
SiliconSmart:
■ Same Data Edge
■
Opposite Data Edge (Data Pulse Width)
■
Negative Constraint Sum Modeling
In Figure 89, the event on data pin D depicted by a dotted line corresponds to a
hold constraint value and would produce a stable low output Q, while the data
event on D depicted by a solid line corresponds to setup constraint value and
would produce a rising output. Hence any data event occurring in between
these two transitions would meet both setup and hold requirements and
produce opposite values at output Q at the same time.
It is not acceptable to STA and Back-annotation tools. One of the major reasons
for negative setup+hold is the use of different when conditions for setup and
hold measurements. when conditions correspond to other pin conditions e.g.,
for a scan flip-flop, scan-enable to clock constraint measurement can have two
when conditions: scan-input=1, data=0 and scan-input=0, data=1.
Because typically the circuit design is different for scan-input and data, different
when conditions produce significantly different results.
SiliconSmart makes sure that same other pin conditions (when condition) are
used for both setup and hold measurements in order to avoid negative
summation values for this reason.
If negative, it implies that data fall transition can occur before rise transition,
while still producing output corresponding to rise edge, which is physically
impossible.
See Also
■
Parameter: model_neg_constraint_chk_opposite_edge
■
Parameter: model_neg_constraint_sum
■
Parameter: model_neg_constraint_sum_margin
■
Parameter: model_neg_constraint_sum_threshold
Path-Based Constraints
The basis of path-based constraint methodology is to speed up the constraint
measurements. All the preceding measurement methodologies measure the
timing constraints by performing an iterative search algorithm i.e., different
constraint values are applied on the circuit, starting from an initial guess, until a
result is found within constraint resolution. For reasonable resolutions (1-10ps)
this will typically take 8-12 simulations. That number can be considerably
reduced with a very good initial guess. Path-based constraints provide that
good guess for setup + hold by measuring the delay from the data and clock
inputs to a critical internal node and then using the difference as the initial
guess.
In the sample latch circuit shown in Figure 91, delay measurements are made
from Data (D) to Feedback node (N1) because this node decides whether the
data event will be latched. Other important measurements are from Enable pin
(EN) to negative enable (!EN) and positive enable (shown as EN itself, while it
can be a buffered EN in some cases).
Flow
Use the following command to define appropriate internal nodes in the cell
instance file:
Example 304
analyze_netlists -constraint_nodes cells
It will automatically update the control/cell.inst file to include a path file created
in control/path/cell.path which contains something similar to following:
Example 305
add_pin SISMART_FB default -internal -spice_node m__160 -no_model
add_function SISMART_FB !(!IQ6)
set_config_opt path_constraint_feedback SISMART_FB
add_pin SISMART_ENN default -internal -spice_node BCLK__F32 -
no_model
add_function SISMART_ENN CK
set_config_opt path_constraint_enable_negative SISMART_ENN
add_pin SISMART_ENP default -internal -spice_node NCLK__200 -
no_model
add_function SISMART_ENP !CK
set_config_opt path_constraint_enable_positive SISMART_ENP
The previous lines define three nodes: feedback node, negative enable node,
and positive enable node; associate them with the corresponding SPICE node
and declare their functionality.
The meaning of the various nodes are as follows:
■
feedback — This node should be the output of master latch. Typically, it is
an uninverted function of data.
■
enable_positive — This node should be 1 when the latch is enabled/
transparent and 0 when the latch is disabled/latched.
■
enable_negative — This node should be 0 when the latch is enabled/
transparent and 1 when the latch is disabled/latched.
This command must be used with caution. You must verify the node names
produced by the command.
You can enable a path-based methodology using the following parameter:
Example 306
set path_constraint_mode verify/polish
■
verify — when path_constraint_mode is set to verify, constraint
values are calculated based on path delays and then simulations are made
to verify that output are not failing for these constraints. In case any failure
is detected, constraint value is increased until simulation is successful.
■
polish — when path_constraint_mode is set to polish, constraint
values are calculated based on path delays. These values are used as initial
seed to begin normal constraint simulations. The advantage of seed value
lies in significantly reducing the number of simulations to achieve the result
which is as accurate as normal constraint simulation.
Note: verify is the fastest method but it produces conservative
results while polish is as accurate as the normal constraint
measurement.
Debugging
The following files are generated inside the runtime/spice/cell directory:
■
path_setup0__setup__D__hl__CK__lh__ACQ_1.tar.gz — This file contains
the decks for measurement of path delays related to D (data) falling from
high to low and CK (clock) rising from low to high. Delay measurements are
made for all requested data-clock slew combinations. Examples of delays
which are measured: data-to-feedback-node, clock-to-enable-negative,
clock-to-enable-positive etc. This is the first step of measurement.
Measurement delays are used for both setup + hold.
■
Setup/hold__D__hl__CK__lh__ACQ_1.tar.gz — This file contains the
verification / polishing decks. It contains the deck for setup measurement/
verification for D (data) falling from high to low and CK (clock) rising from low
to high. All data-clock slew combinations are simulated in the single deck.
The constraint value for the first iteration is calculated from delays calculated
in the first step.
Successive iteration are present in corresponding *_sif_number directory,
where number stands for iteration number.
Dependent 2 2
Relative-degradation 2
Slew-degradation 2
Pushout-degradation 2
Pass-fail 1 2 8 1
Relative-deg 1 2 8 1
10%
Relative-deg 2 3 7** 2
1%
Slew-deg 1% 1 2 8 1
Pushout-deg 3 - - -
Pass-fail 1 3 1 8
Relative-deg 1 3 1 7**
10%
Relative-deg 2 3 2 9
1%
Slew-deg 1% 1 3 1 8
Pushout-deg 2 - - -
This chapter describes the methods used to characterize the power and
electromigration behavior of a cell.
In the Liberty format, power is described as internal power and leakage power.
Internal power is the energy consumed by a cell when an input pin switches,
whether the output switches or not (referred to in this document as switching
and hidden power). Leakage power is the steady-state power consumed by a
cell.
The following sections describe power methodology in SiliconSmart:
■ Internal Power
■
Hidden vs. Switching Internal Power
■
Multi-Output Pin Cells Power Methodology
■ Negative Energy Values in internal_power Groups
■
Leakage Power
■ Multi-Rail Power Methodology
■ CCS Power
■
Troubleshooting SiliconSmart Power Models
■
Electromigration (EM) Characterization
Internal Power
Internal power in the Liberty (.lib) format refers to the amount of energy
consumed by a cell during a switching event, minus any energy (C*V*V) used
to charge the output load of the cell. This is the basic equation or calculation for
internal power. In general, the equation is as follows:
Internal Power for switching event =
(Total energy consumed by cell during switching event)
– (Energy used to charge the load on output pin(s) of cell)
– (Leakage energy component)
– (Energy consumed by input pin for non-switching event at
same ‘when’ condition as condition for switching event)
– (Energy component used to charge secondary output pin(s)
at default load)
* (n-1)/n
In the previous equation, n equals the number of output pins switching during a
switching event.
To measure the internal power in a cell, first the current through each supply
rail is measured as a transition is applied to one or more of the input pins. The
energy consumed through each of the supply rails over the simulation period is
the total energy.
The total energy value also includes any leakage current measured during the
measurement period. For standard cells starting at the 90nm process rules and
many I/O cells before that, the leakage currents can be large enough to
constitute a significant percentage of the total energy. To account for this,
SiliconSmart subtracts the average leakage current from the total energy.
Consider the following illustration:
Figure 92 Switching Power Events for a Single Output Cell with a Single Supply
Total charge is measured as the integral of the supply current during the
power_period, as shown in the following equation:
t end
Q total = I VDD dt
t start
To find the leakage energy component, the steady-state current during the last
5% of the measurement period is measured and multiplied by Vdd to calculate
the leakage power component:
t end
Now if you calculate internal power for the case illustrated in Figure 92, internal
power will be the total energy minus the leakage energy component. If the
switching event is a rising event at an output pin, the energy used to charge the
load on output is also subtracted, as follows:
Erise = Qtotal Vdd – Pmedianleakage powerperiod – CL Vf Vf
Efall = Qtotal Vdd – Pmedianleakage powerperiod
Notice that SiliconSmart uses CL Vf Vf and not CL Vdd Vdd for
computing the energy required to charge the output load capacitance.
The SiliconSmart methodology handles long output transitions without
requiring that the output is completed, as long as the internal transistor states
have settled. SiliconSmart uses CL Vf Vf (assuming Vstart = 0 ), where
Vf is a measured voltage. For large output loads with long transitions, it is
possible that the power_period selected might not be long enough for the
output to completely reach the rail voltage. In such a case, subtracting
CL Vdd Vdd would remove more energy than was actually contributed at
the supply over the period of measurement. Using CL Vf Vf makes it less
critical that power_period be extended, thus reducing simulation time and,
more importantly, reducing the introduction of errors.
the tools will count both the internal energy on an input pin as well as the
internal energy on an output pin if both match the current state of the cell.
Because of this, SiliconSmart automatically generates when conditions for
internal_power groups that are mutually exclusive across the set of hidden
and switching events.
However, this does not work for clock pins on sequential cells. The problem is
when conditions can not contain state registers for the cell and thus the hidden
and switching cases can not be made mutually exclusive. To illustrate this,
consider a standard D-flop as shown in Figure 93 (A) and Figure 93 (B).
ck ck
A B
Figure 93 Example D-flop
In Figure 93 (A), a rising transition on the clock pin causes the output pin to
switch, resulting in an internal_power group on the output pin with a when
clause of D. In Figure 93 (B), the same rising transition on the clock does not
cause the output to switch, so an internal_power group is placed on the
clock pin, also with a when condition of D. Because static power analysis tools
work off an activity file, they will add in the contribution of all internal power
groups on all switching pins matching the current condition. Because both
power groups have the same when condition, both the hidden and switching
power will be counted, overestimating the power consumption of the cell.
The solution to this problem is to subtract the contribution of the hidden power
from the switching power table at the same when conditions. This resolves
the case in which both the input and output pins switch because the sum will
equal the original switching power value. It also correctly handles the hidden
power cases because the power analysis tool only has a switch event for the
input pin.
Only the output switching energy from output X and Z are subtracted from the
total energy.
Example 307
Tx = base energy table for pin X
Ty = base energy table for pin Y
Tz = base energy table for pinZ
2. These n tables will intersect at the case where all outputs have
default_load for that output pin.
Interpolate the energy at default load:
Example 308
Td-x = energy at default load for X
Td-y = energy at default load for Y
Td-z = energy at default load for Z
Table 25 Measured Internal Energy when the load across pin Y is swept and pin X
and pin Z are kept at default_load (Data measured by SPICE)
Table 26 Measured Internal Energy when the load across pin Z is swept and pin X
and pin Y are kept at default_load (Data measured by SPICE)
Table 26 Measured Internal Energy when the load across pin Z is swept and pin X
and pin Y are kept at default_load (Data measured by SPICE)
Thus, we have three base energy tables as shown above. However, these three
energy tables intersect at the case when all the three output pins have
default_load. Therefore, in order to avoid counting the energy at
default_load 3 times, we find the energy for every input slew at
default_load and subtract 2/3 of the energy at default_load from each
of the above energy tables.
The following is the energy table for each input slew at default_load got by
interpolation from Table 24.
Table 27 Energy values at default_load with X as primary output (values obtained by
interpolation)
Subtracting 2/3 of the above energy values for each input slew at
default_load from Table 24, the following table gets modeled in the Liberty
file across pins X.
Table 28 Final Modeled Energy Values Across Pin X
The following is the energy table for each input slew at default_load got by
interpolation from Table 25.
Table 29 Energy values at default_load with Y as primary output (values obtained by
interpolation)
Subtracting 2/3 of the previous energy values for each input slew at
default_load from Table 24, the following table gets modeled in the Liberty
file across pins Y.
Table 30 Final modeled energy values across pin Y
Finally, the following is the energy table for each input slew at default_load
got by interpolation from Table 26
Table 31 Energy values at default_load with Z as primary output (values obtained by
interpolation)
Subtracting 2/3 of the above energy values for each input slew at
default_load from Table 24, the following table gets modeled in the Liberty
file across pins Z.
Table 32 Final modeled energy values across pin Z
Pin Capacitance
The Liberty pin_capacitance attribute reflects the effective capacitive load
of a given input pin as seen by a driver. Because the Liberty format only
support a single capacitance value and the effective value varies by input
transition time and the specifics of the driver model used by each third-party
tool, SiliconSmart provides two methods of acquiring the pin capacitance value.
Electrically, the pin capacitance would typically be measured by integrating the
current into the input pin over the complete transition. In practice this breaks
down due to leakage currents through the input pins and because the drive
models of the third-party tools are primarily concerned with the transition times
between the slew thresholds.
For these reasons, SiliconSmart integrates the input current between two
measurement thresholds controlled by the pin type parameters
cin_low_threshold and cin_high_threshold. By default, these
parameters are set to 0.05 and 0.95, reflecting 5% and 95% of the signal’s
voltage swing. This clips off any ringing in the single and long tails caused by
leakage currents through the input pin.
Some I/O cells exhibit a significant amount of leakage current through input
pins, particularly on I/O pads, causing a significant overestimation of the input
pin capacitance. SiliconSmart can measure the steady-state current through
the input pin and subtract this from the current integration period. To enable this
feature, set the pin type parameter subtract_leakage to 1. When
subtract_leakage is set to 1, this essentially results in the parameters
cin_high_threshold and cin_low_threshold being ignored. Because
this feature is typically not needed and leads to longer run times because of the
need to simulate the cell for a longer time period, this feature is disabled by
default.
SiliconSmart supports a second method of measuring pin capacitance, which
has been shown to yield better correlation results with some timing analysis
tools, such as Cadence SignalStorm. This method estimates the effective pin
capacitance by attaching an active driver cell to each input pin of the cell under
test and applying a transition to the input pin. The active driver
precharacterization data contains a table of capacitance values and the
resulting output transition time. Using this table, the transition time into the input
pin can be matched to an equivalent capacitance value.
To avoid inaccuracies in some simulators at very low capacitive loads, a small
bias capacitor is added to the output of the active driver when performing the
slew matching input capacitance measurement. Once the equivalent
capacitance value is found, the bias capacitance is subtracted out again. The
value is controlled by the pin type parameter cin_bias_capacitance, and
should be set to a small capacitance value. The default is 10ff.
The slew matching Cin measurement is enabled by setting the global
parameter slew_matching_cin to true. The default is false.
SiliconSmart supports another method of measuring pin capacitance: delay
matching. This is similar to the slew matching method. Instead of slew, delay is
used. Also SiliconSmart does not use the driver as it is. Two instances of the
driver are connected in a series to make the driver used for CIN
characterization. Delay across the second instance is measured. The delay
matching CIN measurement is enabled by setting the global parameter
delay_matching_cin to true.
If you want to use separate drivers for active driver and delay matching driver,
that is possible. You can use the delay_matching_cin_driver parameter.
The driver should be imported using the import_driver command. This
parameter defaults to driver.
■
cin_high_threshold_rise
■
cin_low_threshold_rise
For example:
set_config_opt -cell * -pin * cin_low_threshold_rise 0.005
set_config_opt -cell * -pin * cin_high_threshold_rise 0.8
set_config_opt -cell * -pin * cin_high_threshold_fall 0.995
set_config_opt -cell * -pin * cin_low_threshold_fall 0.2
Note that this phenomenon should only result in very small negative values and
can typically be ignored since other power events will over-shadow the effects
of these small power values.
Leakage Power
Leakage power is the power consumed by a cell when it is in a steady-state
condition. SiliconSmart measures the leakage current by running a transient
simulation with the inputs held stable. For combinational cells this is simply a
matter of setting the inputs to the desired state and running the simulation for
the necessary time period. To improve the accuracy of the results, SiliconSmart
averages the current through each of the supplies over a period of time. This
period starts after an initial delay (controlled by the parameter
initial_delay) to ensure the simulation stabilized first. The period is
controlled by the parameter power_period.
Sequential cells often require one or more inputs transition to get the cell into
the appropriate internal state. In this case, SiliconSmart simulates the
appropriate transitions and then waits for a period of time (again controlled by
the parameter initial_delay) after the last transition, before it averages the
current.
You can specify simulator options specifically for leakage power measurements
directly via the simulator_options parameter in configure.tcl or
set_parameter calls. Leakage specific options can be specified as shown in
the following example:
Example 310
//Example for hspice simulator
set simulator_options {"leakage,hspice: method=gear"}
model the cell. This will measure the gate leakage current between
(50*power_period) and ((50*power_period)+power_period) (if it is set
to 50.0).
If the gate leakage current for some when conditions is still unexpected and/or
of reverse polarity, it means that the time scaling factor 50.0 is not sufficient.
The parameter needs to be set to a larger value may be 75.0 or 100.0 or 150.
You must reconfigure and recharacterize the cell every time (after deleting the
cache) this parameter is set to a new value.
In addition, if you want to measure the leakage power after 100ns, the
parameter initial_delay should be set to 100ns. Increasing the parameter
gate_leakage_time_scaling_factor will have no effect on the
simulation time and the measurement time.
input_voltage(pad) {
vil : 0.0 ;
vih : 3.0 ;
vimin : 0.0 ;
vimax : 3.0 ;
}
power_supply() {
default_power_rail : VDD ;
power_rail(VDD, 0.9);
power_rail(VDDPST, 3.0); }
operating_conditions(worst) {
process : 1.0 ;
temperature : 125 ;
voltage : 3.0 ;
power_rail(VDD, 0.9);
power_rail(VDDPST, 3.0); }
Cell Model
cell(PADNMINLVDS_1) {
cell_leakage_power : 1122. ;
rail_connection(con_VDD, VDD);
rail_connection(con_VDDPST, VDDPST);
pin(dout) {
direction : output ;
output_signal_level : VDD ;
output_voltage : core ;
internal_power() {
power_level : "VDD" ;
related_pin : "inn" ;
when : "!test" ;
fall_power(pwr_tin_oload_5x5) { }
rise_power(pwr_tin_oload_5x5) { }
internal_power() {
power_level : "VDDPST" ;
related_pin : "inn" ;
when : "!test" ;
fall_power(pwr_tin_oload_5x5) { }
rise_power(pwr_tin_oload_5x5) { }
}
}
To support this feature, you must use the most recent Liberty multi-rail power
as described in the application note CCS Power Liberty Syntax, version 2.0.
library(tt_0p8v_1p2v_25c) {
delay_model : table_lookup ;
time_unit : 1ns ;
voltage_unit : 1V ;
current_unit : 1mA ;
capacitive_load_unit(1, pf);
pulling_resistance_unit : 1kohm ;
leakage_power_unit : 1uW ;
voltage_map(vdd, 1.200);
voltage_map(vddi, 0.800);
voltage_map(vddg, 1.200);
voltage_map(vssg, 0.000);
operating_conditions(tt_0p8v_1p2v_25c) {
process : 1.000 ;
temperature : 25 ;
voltage : 0.8000 ;
}
input_voltage(default) {
vil : 0.000 ;
vih : 1.200 ;
vimin : 0.000 ;
vimax : 1.200 ;
}
input_voltage(footer) {
vil : 0.000 ;
vih : 1.200 ;
vimin : 0.000 ;
vimax : 1.200 ;
}
input_voltage(header) {
vil : 0.000 ;
vih : 1.200 ;
vimin : 0.000 ;
vimax : 1.200 ;
}
input_voltage(lowvoltage) {
vil : 0.000 ;
vih : 0.8000 ;
vimin : 0.000 ;
vimax : 0.8000 ;
}
output_voltage(default) {
vol : 0.000 ;
voh : 1.200 ;
vomin : 0.000 ;
vomax : 1.200 ;
}
output_voltage(footer) {
vol : 0.000 ;
voh : 1.200 ;
vomin : 0.000 ;
vomax : 1.200 ;
}
output_voltage(header) {
vol : 0.000 ;
voh : 1.200 ;
vomin : 0.000 ;
vomax : 1.200 ;
}
output_voltage(lowvoltage) {
vol : 0.000 ;
voh : 0.8000 ;
vomin : 0.000 ;
vomax : 0.8000 ;
}
cell(foot_8x) {
leakage_power() {
related_pg_pin : "vdd" ;
when : "!sleepn" ;
value : "0.000" ;
}
leakage_power() {
related_pg_pin : "vddg" ;
when : "!sleepn" ;
value : "-0.000" ;
}
leakage_power() {
related_pg_pin : "vddi" ;
when : "!sleepn" ;
value : "-0.000" ;
}
pin(sleepn) {
capacitance : 0.009456 ;
direction : input ;
input_voltage : footer ;
internal_power() {
related_pg_pin : "vdd" ;
fall_power(pwr_tin_2) {
index_1("0.02840, 0.5506");
}
rise_power(pwr_tin_2) {
}
}
internal_power() {
related_pg_pin : "vddg" ;
fall_power(pwr_tin_2) {
}
rise_power(pwr_tin_2) {
}
}
internal_power() {
related_pg_pin : "vddi" ;
fall_power(pwr_tin_2) {
}
rise_power(pwr_tin_2) {
}
}
related_power_pin : vdd ;
related_ground_pin : vssg ;
}
pg_pin(vddg) {
voltage_name : vddg ;
pg_type : primary_power ;
}
pg_pin(vddi) {
voltage_name : vddi ;
pg_type : primary_power ;
}
pg_pin(vdd) {
voltage_name : vdd ;
pg_type : primary_power ;
}
pg_pin(vss) {
voltage_name : vss ;
pg_type : primary_ground ;
}
}
}
Here, current/power for pin VNW will be combined along with that of VDD.
Similarly, current/power for pin VPW will be combined along with that of VSS.
Suppose you have the following definition in the configure.tcl file:
set power_meas_supplies {VDD1 VDD2}
set power_meas_map {VNW1 VDD1 }
Here, no mapping has been defined for VDD2, just for VDD1. That means the
current/power number modeled in Liberty related to VDD2 will be current/power
measured for VDD2 only.
CCS Power
To use the CCS-power feature of SiliconSmart, use the following sequence of
commands:
Example 315
set_location charpt
configure –timing –ccs_power cell_list
characterize
model –create_new_model –timing –ccs_power –liberty cell_list
If there are multiple outputs switching for a particular when condition, there will
be different dynamic_current groups—one for each switching output. This is
done to ensure that each dynamic_curent group for an event corresponds to
an internal_power group in which the event comprises of a triplet of
related_input, related_output and a when condition. This modeling
format of dynamic_current will enable to have one-to-one correspondence
between NLDM power tables and CCS-power waveforms.
The below topics are described in the following sections:
■
Optimizing the CCS-Power Waveform
■
CCS Decoupling Capacitance
■
MT-CMOS Switch Cells Support
■ CCS-Power Model Warnings from Synopsys Library Compiler
I0
---------------------------
V 0 cos
where:
is the sinusoidal waveform frequency.
V 0 is the magnitude of the perturbation voltage waveform.
Every virtual output pin is associated with a regular power/ground supply pin.
You must also add the following command in the instance file of the MT-CMOS
cell:
Example 317
set_cell_type mtcmos –type coarse_grain|fine_grain \
virtual_supply_name_map {virtual_output_pin pg_pin […] }
Note: The –type option is required for specifying the type of the
switch. The value can be either coarse_grain or
fine_grain. The default is coarse_grain.
You must specify this association of the virtual output pin with the primary
power/ground supply pin using the option -virtual_supply_name_map.
The value of this option should be a list containing virtual output pin name
followed by its associated primary power/ground supply pin name.
Example 318
set_cell_type mtcmos -type coarse_grain –virtual_supply_name_map
{VVDD VDD }
In the above example, VVDD is a virtual output pin and it is associated with
primary power supply VDD (header cell). Similarly, virtual output pin VVSS is
associated with primary ground supply pin VSS (Footer cell) in the below
example.
Example 319
set_cell_type mtcmos -type coarse_grain –virtual_supply_name_map
{VVSS VSS }
Once this is done, you can run SiliconSmart and characterize the cell using the
following sequence of commands:
Example 320
set_location charpt
configure –timing –ccs_power switch_cell_name
characterize
model –create_new_model –timing –ccs_power –liberty
switch_cell_name
This warning is issued from the Synopsys Library Compiler as two identical
adjacent values in dynamic_current vectors. This can be worked around by
increasing the significant digits for modeling.
Warning: Line 5194739, The 'value' attribute value is less than
the minimum allowed (0.0). Using 0.0 instead. (LBDB-163)
This warning is issued because the resistance value is negative. This occurs for
those intrinsic_resistance groups for three-state when conditions.
SiliconSmart Parameters
Check the following parameters in your configure.tcl file.
■
power_meas_supplies — Be sure to include all your positive power
supplies with this parameter in the form of a Tcl list, for example: “set
power_meas_supplies {VDD VCC VDDIO}”. If any of the supplies are
missing from this list, the current through those supplies will not be
measured and will not be taken into account for the power modeling.
■
largest_slew and max_tout — Although these parameters do not
directly effect power measurements, it is import to note that these
parameters control the size of power measurement windows. Be sure to set
largest_slew to the largest input transition you expect to use during the
characterization of this library. Set max_tout to the largest output slew you
expect to see at the output of any cell in your library given the
largest_slew as an input.
■
power_period—This parameter sets length of the measurement window
for power. SiliconSmart automatically sets the value of this parameter such
that it allows sufficient time to the output voltages to settle. However, in rare
cases where a cell’s output takes unusually long to setting, you may need to
manually override the value of this parameter for a specific cell or set of
cells. If power values look much smaller than expected, try increasing the
value of this parameter. You can query the current value of this parameter
by using the get_parameter command.
If VDD and VSS are not included above, and VDD and VSS are being used by the
cell netlist as well, it will result in the power being dissipated by the active driver
being incorrectly reported as part of the power of the cell being characterized.
SiliconSmart produces a warning message when this occurs for all standard
Berkeley SPICE format netlists.
Electromigration Flow
The figure below represents the EM characterization solution flow chart in the
SiliconSmart tool:
EM Threshold Calculation
An essential input to the first step, the current threshold calculations is the RA
Tcl file. The RA Tcl file defines the EM rules in Tcl format suitable for
CustomSim Reliability Analysis (RA).
Average, RMS and peak currents are measured on each resistor in the cell
netlist, for each slew/load index pair specified by the user. The same methods
available for slew/load index selection for timing measurements are applicable
to EM current measurements.
For example, if the user desires to use the same explicit slew/load indices for
timing and EM tables, it can be done with the following commands:
set_config_opt –type {timing em_current} explicit_points_slew
{slew1 slew2…}
set_config_opt –type {timing em_current} explicit_points_load
{load1 load2…}
The EM tables are modeled in the liberty file at the pin level (for output pins).
Electromigration is represented by the pin-level electromigration group
containing the em_max_toggle_rate group. The tables represent the
maximum toggle rate for each output pin. The related_pin attribute
identifies the input pin associated with the electromigration group.
By default, SiliconSmart models a single EM table in the library for each arc.
This table is created with the maximum toggle rate among the different current
types. By enabling the parameter em_table_with_current_types, a
separate EM table is modeled for each current type: average, rms, and peak.
A library model with EM tables for each current type can give better accuracy
with downstream EM analysis tools.
Using EM in SiliconSmart
As specified in the previous section, the first step that involves calculations of
current thresholds requires an RA Tcl file and a pre-layout netlist. This is in
addition to the extracted netlist that is also used for the main characterization
(timing, EM, others).
The pre-layout netlist for each cell, should reside in a sub-directory named
ideal, under the directory specified by the -netlist_dir option of the
import command.
The netlist extension for the pre-layout netlists should be specified using the
parameter ideal_netlist_ext.
The switch -em to the configure command enables EM analysis. It enables
both the current threshold calculations as well as the EM characterization step.
If pre-calculated current thresholds are already available and specified in the
<char_dir>/control/emx/cell.emx files, the SiliconSmart tool can detect the
existence of these files and skip the current threshold calculations.
The -emx switch to the configure command can be used to run pre-
processing alone, and generate the cell.emx files.
The switch -em to the model command enables modeling of electromigration
tables in the Liberty file.
An example run.tcl script is shown below:
set_location char_dir
import -liberty seed.lib –netlist_dir netlists –ext .spx $cells
configure –timing –em $cells
characterize $cells
model –timing –em $cells
Incremental EM Characterization
The SiliconSmart tool supports incremental characterization of EM models.
This allows a user to add EM models to an existing Liberty model. An example
for Incremental EM characterization is given below. This will copy non-EM data
from the input Liberty and model EM data from the characterized results.
The EM related parameters have to be specified in the configure.tcl:
import -liberty seed.lib –netlist_dir netlists –ext .spx $cells
configure –em $cells
characterize $cells
model –em $cells
■
simulator_options — This is an existing parameter that has been enhanced
with a new tag xa to specify options for reliability analysis with XA including
the RA Tcl file. For example:
set simulator_options {
tran,xa: xa_cmd="set_ra_option -ratcl <RA.tcl file>"
}
■
em_table_with_current_types — This parameter, when enabled, generates
separate EM toggle rate tables in the liberty model for each current type
(average, RMS, peak). The default value is 0, which generates a single
em_max_toggle_rate table for each electromigration table per timing arc.
■
ideal_netlist_ext — This parameter specifies the filename extension
(including the ‘.’) for the pre-layout cell netlists for EM current threshold
calculations (EM pre-process step).
EM Characterization Directory
The figure below illustrates the location of the EM characterization related files
in the SiliconSmart characterization directory:
CCS-Noise Characterization
PrimeTime SI and other tools use these models to accurately predict the
response of the cell to noise.
CCS-noise characterization requires the cells to be split up into channel
connected blocks (CCBs), then characterizes and models the individual CCBs.
Each CCB has a potential conducting path through transistor sources and
drains. The SiliconSmart tool includes the netlist analysis capabilities to extract
the CCBs and then perform the necessary characterization and modeling
steps.
A simple cell, such as an inverter, has only a single stage from input to output.
A cell such as an AND gate has two stages. A more complex cell, such as a D
flip-flop, has more than two stages. This is shown below.
Enabling CCS-Noise
You can enable the CCS-Noise feature by specifying the –ccs_noise switch
to various commands available in SiliconSmart. The commands that require the
–ccs_noise option for generating CCS-noise models are as follows:
■
configure (CCS-Noise)
■
characterize (CCS-Noise)
■
model (CCS-Noise)
■
Selectively Choosing Pin-Based Noise Models
■
Generating Single CCBs for Input and Output Pins
configure (CCS-Noise)
A cell is configured for CCS-noise by specifying the –ccs_noise option with
the configure command. CCS-noise is configured along with timing, which
means you must also specify the -timing switch:
configure -timing –ccs_noise cell_list
Example 322
define_parameters default {
…
set nmos_model_names {list of N-type transistor models}
set pmos_model_names {list of P-type transistor models}
characterize (CCS-Noise)
No additional switches are required for the characterize command to
characterize CCS-noise. All cells/CCBs that have been configured during the
configuration step are characterized.
model (CCS-Noise)
Similar to the configuration step, modeling for CCS-noise is performed along
with timing, which means the -timing switch must be specified along with the
-ccs_noise switch for the model command:
model -timing -ccs_noise cell_list
where -cell is the cell and pin1 pin2 ... are the pins which will not have
CCSN models created.
The usage of this parameter is similar to any other parameter used with the
set_config_opt command. The parameter can be set at the cell-level and
can be specified with one or more pin names in the form of a list.
A check will be done to see if the pin names specified in the parameter value
are legal pin names which belong to the cell. If not, a warning will be generated.
See Also
■
Command: set_config_opt
■
Parameter: ccsn_exclude_pin
CCS-Noise Methodology
CCS-noise characterization requires four measurements to be performed for
each CCB. These are described in the following sections:
■
CCS-Noise IV
■
CCS-Noise Waveform
■
CCS-Noise Propagation
■ CCS-Noise Miller Capacitance
CCS-Noise IV
This measurement collects the DC current at the output node of a CCB by
sweeping the input and output voltages. The input and output voltages are
swept in the voltage range from -VDD to 2*VDD. The maximum number of input
and output voltage values are clustered in the range from 0 - VDD.
The number of voltage points required is controlled by the pin type parameter
ccsn_numsteps_voltage. The lower limit of this parameter is 6 and the
Example 324
pintype default {
…
set ccsn_numsteps_voltage 17
}
CCS-Noise Waveform
This measurement is similar to delay measurement, except that five values on
the output voltage waveform are captured at 10%, 30%, 50%, 70%, and 90% of
VDD. The test setup for this measurement requires applying a linear voltage
ramp at the input and recording the corresponding output voltage.
The pin type parameter ccsn_default_load controls the load placed on
internal nodes in the netlist that become outputs once the CCB is partitioned
into a separate netlist. For example, if the first inverter in a buffer is partitioned
out separately, the output can have a small load applied to it to simulate the
second stage inverter it normally drives. As long as this load is smaller than the
original load, the results will be accurate (smaller loads are slightly more
pessimistic than a larger original load.)
This parameter is defined in the configure.tcl file, as in the following example:
Example 325
pintype default {
…
set ccsn_default_load 1e-15
}
CCS-Noise Propagation
This measurement has two dependencies, namely CCS-Noise IV, and CCS-
Noise Waveform. Input triangular waveform heights and widths for this
measurement are obtained by processing the CCS-Noise IV and CCS-Noise
Waveform measurement data. The measurement applies triangular input
pulses of the calculated widths and heights to the input pin of the CCB. The
output waveform is captured at five specific points: 50% of peak, 80% of peak,
peak, 80% of peak, and 50% of peak.
For internal nodes that become outputs once the CCB is partitioned,
ccsn_default_load can be used, as described previously.
See Also
■
Parameter: ccsn_default_load
A voltage source applied at the output of the CCB is swept by Vout and the
voltage change at the input Vin is measured. The measurements are done for
Cin1 – Cin2
Cm = ---------------------------------------
Vout
---------------- – Vout
----------------
Vin1 Vin2
The parameter ccsn_use_enhanced_miller_cap can be used for better
receiver modeling. It can take a value of 0, 1, or 2.
■
When set to 0 — the method described above is used.
■ When set to 1 — the method described above is used, but all resistances in
the CCB output will be shorted to take care of the shielding effect in order to
capture the miller cap effectively.
■
When set to 2 — use this only for advanced nodes. It functions as when
ccsn_use_enhanced_miller_cap is set to 1.
See Also
■
Parameter: ccsn_use_enhanced_miller_cap
■
Parameter: miller_capacitance_check_tolerance_pct
■
Parameter: miller_capacitance_edge_ratio
Example Flow
Consider a two stage 2-input AND gate. The first stage is a 2-input NAND gate
and the second stage is an inverter. The input node name of the inverter is
Refer to Example 15 on page 57 for an example flow for the incremental add-
on of CCS-CCS-noisenoise models to an existing timing library for standard
cells.
User-Defined CCBs
You can use the define_cell_ccb command in the instance file of a cell to
define the CCBs manually for CCS-noise analysis. This is useful for cases
where the SiliconSmart tool cannot partition the cell correctly into CCBs
automatically due to the complex structure of the cell netlist.
Example 327 define_cell_ccb Syntax
define_cell_ccb –relevant_pin cell_pin
[-inputs ccb_input_pin_names] -output ccb_output_pin
[-transistors list_of_transistor_names_in_the_ccb]
[-switching_set list_of_net_names]
[-input_vectors list_of_input_vectors]
where:
■
-relevant_pin — this option is required. It defines the cell input or output
pin for which the CCB has to be manually generated for CCS-noise
measurements.
■
-output — this option is required. It specifies the output of the CCB. The
output of the CCB can be a primary output or an internal pin.
■
-inputs — this optional argument defines the inputs for the CCB. If this
option is not specified, then all the primary input pins of the cell are
considered as inputs to the CCB.
■
-transistors — this optional argument can be used to specify the list of
transistors in CCB. If this argument is not specified, the SiliconSmart tool will
probe the output of the CCB using the whole netlist to make CCS-noise
measurements.
■
-switching_set — this optional argument specifies the pin/net names
that must switch together for the noise propagation to switch from input to
output of the CCB. This option must be used along with the -inputs option.
This option will mostly be useful in case of three-state buffer cells where the
two inputs to the last inverter at the output stage must switch together for
creating a CCS-noise measurement. The pin/net names that can be
specified in the switching_set must be a subset of the pin/net names
specified in the -inputs switch. Any pin that is not specified in the
-inputs switch cannot be used in the -switching_set option.
■
-input_vectors — this optional argument can be used to specify list of
user-defined vectors for the CCB to find out the function of the CCB. If this
option is specified, only these vectors will be used in the instance file to get
the functionality of the CCB. Each vector length should be the same as the
number of inputs specified in the -inputs switch. This option cannot be
specified if -inputs switch has not been specified.
Example 328
define_cell_ccb –relevant_pin { B} –inputs {A B CI} –output {net72}
–input_vectors { {0 0 0 } {0 1 0} }
The above example indicates that the CCB from B to net72 will use only these
user-defined vectors for creating CCS-noise tests. The other possible 6 vectors
will not be considered. It is user’s responsibility to give appropriate vectors in
such cases such that there is a transition at the CCB input which gives an
inverted transition at the CCB output with other inputs not switching. In the
above example, this simply indicates that while B is switching from 0->1, the
output must switch from 1->0 (this will be found by SiliconSmart using this
combination of input vectors) with A and CI held constant at 0. If the output
does not switch from 1->0 using these two vectors, no CCS-noise tests will be
generated. The user will have to give new vectors in such a case.
Example 329
A B CI : net72
0 0 0 : <will be found by doing crude simulation>
0 1 0 : <will be found by doing crude simulation>
Example 331 Example of an instance file containing manual CCB definitions for a
tristate buffer:
define_cell_ccb –relevant_pin {A} –output {NMIN}
define_cell_ccb –relevant_pin {A} –inputs {OE A} –output {NET38}
–input_vectors { {1 1} { 1 0}}
define_cell_ccb –relevant_pin {OE} –output {NMEN}
define_cell_ccb –relevant_pin {Y} –inputs {NET38 NMIN} –output
{Y} –switching_set {NET38 NMIN}
Command Reference
Setup Commands
Setup commands initialize SiliconSmart and/or the corresponding files and
directories. These commands are used before a cell is characterized. The
following setup commands are available:
■ add_back_bias_supplies
■
add_channel_length_variation
■
add_channel_width_variation
■
add_fixed_value
■ add_flop
■
add_forbidden_state
■
add_function
■ add_harness_elements
■
add_latch
■
add_liberty_group
■
add_one_hot
■
add_opc_grounds
■
add_opc_statistical_parameter
■
add_opc_supplies
■
add_pin
■
add_process_parameter_variation
■
add_switch_tuple
■
add_switching_set
■
add_table
■
add_transistor
■
add_user_stimulus
■
analyze_netlists
■
cell_families_by_name
■
change_parameter
■
clear_config_opts
■
clear_liberty_attribute
■
clear_liberty_group
■
configure
■
create
■
create_harness
■ create_operating_condition
■
define_cell_ccb
■
define_differential_receiver
■
define_parameters
■
enable_api
■
expand_side_inputs
■
find_internal_nodes_for_constraint
■
find_potential_internal_nodes
■
get_word_line_node
■
man
■
merge
■
pintype
■
remove_driver
■
remove_parameter_block
■
remove_pintype
■
report_arcs
■
set_boundary_distance
■
set_bus_value
■
set_cell_type
■
set_config_opt
■
set_harness_parent
■
set_length_unit
■
set_liberty_attribute
■
set_location
■
set_log_file
■
set_log_level
■
set_log_stdout_level
■
set_maskable_enable_control_output
■
set_measurement_node
■ set_netlist_file
■
set_opc_parameter
■
set_opc_parameter_distribution
■
set_opc_process
■
set_opc_temperature
■
set_opc_default_voltage
■
set_output_differential
■
set_parameter
■
set_pins_to_bundle_map
■
set_pintype_parameter
■
set_points_boundary_distance
■
set_stimulus_node
■
set_subckt_ports
■
set_sweep_parameter
■
status
■
test_internal_nodes_for_constraint
■
validate_hdl
add_back_bias_supplies
Adds back bias support by specifying nwell/pwell/deepnwell/deeppwell
supplies.
Syntax
add_back_bias_supplies {
bias_pin pg_type related_supply_pin
…
…
}
Arguments
bias_pin
Back bias supply defined by the command add_opc_supplies.
pg_type
Type for the back bias (nwell/pwell/deepnwell/deeppwell).
related_supply_pin
Associated pg_pin to bias supply.
Description
The following parameters must be set as such to use back bias support:
■ liberty_flavor = 2008.09
■
model_back_bias = 1
The output library will have the following attributes associated with pg_pin VNW
and VPW:
Example 333
...
voltage_map(VNW, 0.8); /* bias power */
voltage_map(VPW, 0.0); /* bias ground */
. . .
cell(std_cell) {
cell_footprint : std_cell;
area : 1.0;
pg_pin(VDD) {
voltage_name : VDD;
pg_type : primary_power;
related_bias_pin : "VNW";
}
pg_pin(VSS) {
voltage_name : VSS;
pg_type : primary_ground;
related_bias_pin : "VPW";
}
pg_pin(VNW) {
voltage_name : VNW;
pg_type : nwell;
physical_connection : device_layer;
}
pg_pin(VPW) {
voltage_name : VPW;
pg_type : pwell;
physical_connection : device_layer;
}
...
See Also
add_opc_statistical_parameter
add_channel_length_variation
This command specifies channel length variation for a transistor as distance
from neighboring cells is varied.
Syntax
add_channel_length_variation transistor_name
-dependent_parameters dependent_parameter_list
-values value_list
Arguments
transistor_name
The name of the transistor as in the netlist.
-dependent_parameters
The boundary distances on which the channel length is dependent.
-values
The list of channel length values.
See Also
add_channel_width_variation
add_opc_statistical_parameter
add_process_parameter_variation
add_transistor
set_length_unit
set_opc_parameter_distribution
set_points_boundary_distance
add_channel_width_variation
This command specifies channel width variation for a transistor as distance
from neighboring cells is varied.
Syntax
add_channel_width_variation transistor_name
-dependent_parameters dependent_parameter_list -values
value_list
Arguments
transistor_name
The name of the transistor as in the netlist.
-dependent_parameters
The boundary distances on which the channel length is dependent.
-values
The list of channel width values.
Examples
Example 334
add_channel_width_variation M1 dependent_parameters {lower_left}
-values {200 200 200 200 200 200 200 200 200 200 200 200 200 200
200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200
200 200 200 200 200 200 200 200 200}
In this example, the channel width for transistor M1 depends on distance from
lower left transistor of the cell to neighboring cell. Values in the list specify how
the channel width varies as the distance to neighboring cell is varied.
See Also
add_channel_length_variation
add_opc_statistical_parameter
add_process_parameter_variation
add_transistor
set_length_unit
set_opc_parameter_distribution
set_points_boundary_distance
add_fixed_value
This command sets a constant input value for input or bi-directional pins.
Syntax
add_fixed_value pin value
Arguments
pin
Name of an input or bi-directional pin.
value
Constant value of the pin, 0 or 1.
Description
The add_fixed_value command allows an input or bi-directional pin to be
set to a constant state (0 or 1). You can use this for pins that do not affect the
logical function of a circuit, and are not expected to transition in an
implementation. When this function is used, SiliconSmart will not measure the
input pin capacitance or any hidden (non-switching) energy for this pin. The
alternative method is to treat the pin as a don't care pin as described in the
Disabling Measurements section.
Examples
The following command specifies that the voltage reference pin VREF is to be
tied high:
Example 335
add_fixed_value VREF 1
See Also
set_config_opt
add_flop
This command adds an edge-triggered sequential element to the cell.
Syntax
add_flop -clear expression -preset expression
-preset_clear \ values {register inv_register clock_expr
data_expr}
Arguments
-clear expression
A Boolean expression describing the asynchronous clear state.
-preset expression
A Boolean expression describing the asynchronous preset state.
-preset_clear values
Specifies the value of the register and inverted register if both the –preset
and –clear conditions are true. values is a Tcl list of two Boolean values
(0, 1) specifying the value of register and inv_register, respectively.
register
The name of the non-inverted register.
inv_register
The name of the inverted register.
clock_expr
A Boolean expression for the flop clock function.
data_expr
A Boolean expression for the data input function.
Description
The add_flop command adds an edge-triggered sequential element to the
description of the cell. The flop expressions can be a combination of input (and
bi-directional) pins, internal pins, and registers from other sequential elements.
If the flop supports it, asynchronous preset and/or clear expressions can be
defined as well. If both are specified, then the switch -preset_clear can be
used to specify the value of the two registers when both expressions are true.
This switch is optional when both –preset and –clear are specified and
illegal otherwise. The value is a Tcl list of two Boolean values (0, 1) reflecting
the value of the register and inverted register, respectively. See the Examples.
Examples
The following describes a simple D-flop:
Example 336
add_flop IQ IQN CK D
The register IQ simply gets the value D when CK rises and IQN gets the
inverted value of D. For a more complex example, consider this command:
Example 337
add_flop IQ IQN !CK {D&SEL | IQN&!SEL} –clear !RB –preset S \
–preset_clear { 1 0 }
This command does several things. First, the flop is triggered off a falling edge
on CK, indicated by the function !CK. Further, the data expression is a simple
function of D when SEL is true. When SEL is false the flop becomes a toggle
flop where the output toggles each time it is clocked.
An active low clear pin (RB) and active high preset pin (S) are both preset. If
both are asserted at the same time, the –preset_clear switch specifies that
the preset dominates and thus register IQ gets the value 1 and the inverting
register IQN gets the value 0.
See Also
add_function
add_latch
add_table
add_forbidden_state
This command defines a global illegal state for the cell as a Boolean
expression.
Syntax
add_forbidden_state expression
Arguments
expression
Boolean expression specifying the illegal state(s) for this cell.
Description
The add_forbidden_state command is used to restrict the possible legal
states for a cell. This is useful when dealing with multiple switching inputs
where some combinations are illegal, such as when the inputs are
complementary.
One example use of this command is to define the behavior of a flop with
complementary inputs. The description of the cell looks like the following:
Example 338
add_flop IQ IQN {CK&!CKB} D
add_switching_set { CK CKB }
add_forbidden_state { !(CK^CKB)}
These commands first define the clocking event of the flop as the case where
CK rises and CKB falls. The add_switch_tuple is necessary to specify that
CK and CKB can switch as a set. The add_forbidden_state command is
necessary to specify that CK and CKB must always be complementary to each
other–the case of CK&CKB is not legal.
See Also
add_one_hot
add_switching_set
add_switch_tuple
add_function
This command defines the logical function of a pin.
Syntax
add_function [-hi_z expression] [-illegal expression] pin
expression
Arguments
-hi_z
A Boolean expression defining when the pin is in a high-impedance state.
-illegal
A Boolean expression definition when the pin is in an illegal or unknown
state.
pin
Name of a pin defined with add_pin.
expression
A Boolean expression defining the output value of the pin for all conditions
not covered by the high impedance or illegal conditions.
Description
The add_function command is used to define the combinational function of
a pin in terms of other input (or bi-directional) pins, internal pins, and registers.
In the simplest form, the command takes a single Boolean expression that
defines the output value. Two other optional expressions can be provided to
define when the output is in a high-impedance (undriven) state or in an illegal/
undefined state.
The add_function command can be used to define the function of internal
pins. This can be used to define the function of a cell structurally instead of
attempting to capture the complete description in a single function or table.
Examples
The following example describes a bi-directional, differential I/O pad. When the
EN pin is true, the PAD pins are driven; when false they are inputs and control
the Z pin. The following commands define the behavior of the cell:
Example 339
add_function PADP A –hi_z !EN
add_function PADN !A –hi_z !EN
add_function Z {PADP&!PADN} –illegal {PADP&PADN | !PADP&!PADN}
The first two lines describe the function of the differential outputs. Notice that
the –hi_z switch is used to indicate that the pad pins are not driven when EN is
low. The third line describes Z as a function of the differential pins. The
expression following the –illegal switch indicates that it is illegal for PADP
and PADN to be in the same state, which would result in an undefined value for
Z.
See Also
add_pin
add_switching_set
add_table
define_differential_receiver
set_output_differential
add_harness_elements
This command adds one or more circuit elements to a harness.
Syntax
add_harness_elements name element_list
Arguments
name
Name of a harness created with the create_harness command.
element_list
A list of one or more circuit elements as described below.
Description
This command adds a set of circuit elements to a harness using a format
similar to SPICE. The elements can be connected to pins on the cell, supplies
defined in the operating conditions, or nodes in the harness. Nodes are created
in the harness when referenced.
The element_list parameter is a Tcl list of elements, where each element is a
line of the following format:
Example 340
type name node1 [node2 ... nodeN] parameter1
where type is one of the types defined in the following table. Each type of circuit
element requires one or more nodes to connect to and a parameter value. The
meaning of the parameter depends on the element and is described in the table
as well.
C Capacitor 2 Capacitance
(Farads)
L Inductor 2 Inductance
(Henrys)
The first two nodes are the controlled nodes; the second pair are the reference
nodes.
Legal node names include the name of any pin on the cell and any supply
defined in the operating condition. Additionally, the first time an unknown node
name is referenced, the node is created. Similar to some SPICE simulators, a
warning is generated for any nodes with only a single connection. Node names
must begin with a letter and can consist of letters, numbers, and underscores.
If the parameter value for any of the circuit elements is anything other than a
floating-point value, the value is assumed to be the name of a parameter. The
parameter name is looked up in the current operating condition (see
set_opc_parameter) and then in the current parameter block (default, or
another block set through the parameters option to set_config_opt). The
value of that parameter is then used as the value of the circuit element.
Arbitrary, user-defined subcircuits can be included. In this case, the number
and meaning of the nodes are dependent on the subcircuit definition.To use the
subcircuits, a file with the subcircuit definition must be included in the
simulation. You can do this by including the appropriate line in the process
section of the operating condition definition. (See set_opc_process) This
mechanism allows the subcircuit definitions to change based on operating
condition.
Care should be exercised when connecting elements to the supplies used by
the cell itself since any current consumed by the harness will be included in the
power calculations for the cell. The preferred method is to create separate
supply definitions in the operating condition that are used only for the harness.
See Simulation Harnesses.
Examples
The following commands create a JEDEC class 1 resistor termination harness
and apply it to the PAD pin of a cell. The harness consists of a voltage divider
tied between the PAD pin and supply VTT. Node node1 is created between the
resistors and used as the measurement point. The resistance of resistor RT is
rt_resistance, meaning that the parameter rt_resistance must be set
in the parameter block default or in the operating conditions. In this case, the
parameter has been made operating condition-specific, and is 35 ohms in the
worst-case condition and 20 ohms in the best case.
See Also
create_harness
set_measurement_node
set_opc_parameter_distribution
set_stimulus_node
set_sweep_parameter
add_latch
This command adds a level-sensitive sequential element to the behavioral
description.
Syntax
add_latch [-clear expression] [-preset expression]
[-preset_clear values {register inv_register enable_expr
data_expr}]
Arguments
-clear expression
A Boolean expression describing the asynchronous clear state.
-preset expression
A Boolean expression describing the asynchronous preset state.
-preset_clear values
Specifies the value of the register and inverted register if both the –preset
and –clear expressions are true. values is a Tcl list of two Boolean
values (0, 1) specifying the value of register and inv_register,
respectively.
register
The name of the non-inverted register.
inv_register
The name of the inverted register.
enable_expr
A Boolean expression for the latch enable function.
data_expr
A Boolean expression for the data input function.
Description
The add_latch command adds a level-sensitive sequential element to the
description of the cell. The latch expressions can be a combination of input
(and bi-directional) pins, internal pins, and registers from other sequential
elements.
If the latch supports it, asynchronous preset and/or clear expressions can be
defined as well. If both are specified, then the switch –preset_clear can be
used to specify the value of the two registers when both expressions are true.
This switch is optional when both –preset and –clear are specified and
illegal otherwise. The value is a Tcl list of two Boolean values (0, 1).
Examples
The following describes a simple D-latch:
Example 342
add_latch IQ IQN G D
The register IQ simply gets the value D when G is true and IQN gets the
inverted value of D. For a more complex example, consider this command:
Example 343
add_latch IQ IQN G&EN D –clear !RB –preset S –preset_clear { 1 0 }
This command does several things. First, the data expression is a simple
function of D, but the enable function is a function of both G and EN. Both must
be true to enable the latch. An active low clear pin (RB) and active high preset
pin (S) are both present. If both are asserted at the same time, the
–preset_clear switch specifies that the preset dominates and thus register gets
the value 1’and the inverting register gets a 0.
See Also
add_flop
add_function
add_table
add_liberty_group
This command can be used to add any group to Liberty file. Use this command
before modeling to add a group at library-level, cell-level, or at pin-level.
Syntax
add_liberty_group [-library] [-cell cell_name] [-pin
pin_name] group_type group_name
tcl_key_value_pairs_of_attributes [-explicit]
Arguments
-library
Specifies the group to be added at library-level.
-cell
Specifies the cell to apply the command to.
-pin
Specifies the pin name to apply the command to.
group type
Group type.
group name
Group name.
tcl_key_value_pairs_of_attributes
List of attribute name value pairs in the group.
-explicit
Add any type of complex group. Can also can be used to generate a
test_cell (see the Generating a test_cell section for more information).
add_one_hot
The add_one_hot command is a convenience function for defining the
behavior of one-hot multiplexers. One-hot multiplexers are cells in which one
and only one select line is active (hot) at any time.
Defining the behavior requires a function definition that defines the output in
terms of the select and data lines, and also specifies as illegal any state in
which zero or two or more select lines are active at once. All illegal states are
tagged as forbidden states. This command internally calls the add_function,
add_switch_tuple and add_forbidden_state commands to describe
this behavior.
In the simplest form, this command takes the name of an output pin and two
lists, one of select expressions and one of data expressions. These lists are
paired one-to-one where each select expression enables the corresponding
data expression.
Syntax
add_one_hot [-hi_z expression] [-tuple_addition_type type]
output_pin select_exprs data_exprs
Arguments
-hi_z expression
A boolean expression that specifies when the output pin is in a high-
impedence (undriven) state.
-tuple_addition_type
A string to indicate how many pairs of selects will be added. Choices are:
all_pairs, minimal_pairs, or no_pairs.
output_pin
The name of the output pin.
select_exprs
A Tcl list of input or bi-directional pins, each of which enables a data
expression in the corresponding position in the data_exprs list.
data_exprs
A Tcl list of boolean expressions, each of which is enabled by a select pin in
the corresponding position in the select_exprs list.
Description
The format of each select pin is of the {Si 0/1}. Here Si indicates the port
name while 0/1 indicates the polarity. A polarity value of 0 (1) identifies the
select as active low (high).
If the polarity is left unspecified, it is assumed to be 1. As a result, a shorthand
way to specify {Si 1} is by simply writing Si.
The select port can also be specified as a complementary input pin pair of the
form {Si Sibar}. Such a setting indicates the select enabled case as
Si&!Sibar. In this case the polarity is required to be specified as a 1.
Adding the -hi_z switch specifies a Boolean function that controls when the
output pin is in high-impedance mode.
The -tuple_addition_type switch indicates how many pairs of selects will
be identified as switch tuple.
■
Among n selects, a switch value of all_pairs indicates that all (n choose
2)=n*(n-1)/2 pairs will be considered as switch tuples.
■
A value of minimial_pairs will generate a total of n switch tuples by
considering only the adjacent pairs of selects as switch tuples. Additionally,
the last select will be paired up with the first select value for the sake of
symmetry.
■
A value of no_pairs will add no tuples. Instead the user is expected to
identify switch tuples separately.
This command internally calls set_config_opt to exclude arcs from select
pin from containing all other select pins in their state coverage.
This command also calls set_config_opt to set the preference order for the
secondary switching inputs. The priority order is identical to the list of select
pins.
Examples
The following command creates a simple, three-input, one-hot multiplexer with
select lines S0, S1, and S2 and data lines D0, D1, and D2 and output pin Y:
Example 344
add_one_hot Y { {S0 1} {S1 1} {S2 1} } { D0 D1 D2 }
is equivalent to:
Example 345
add_one_hot { S0 S1 S2 } { D0 D1 D2 }
add_one_hot Y { S0 S1 } { D0 1 }
can be used when one of the data ports is tied to a fixed value.
Example 347
add_one_hot Y { {{S0 S0N} 1} {{S1 S1N} 1} {S3 0} } {D0 D1 D3}
indicates a one_hot mux with two pairs of complementary select pins and one
active low select.
See Also
add_function
add_forbidden_state
add_switch_tuple
add_opc_grounds
You can use the add_opc_grounds command to specify the list of ground
supplies and its voltage values for an operating condition.
Syntax
add_opc_grounds operating_condition
{list_of_ground_supply_names_with_their_voltage_values}
Description
The usage of this command is similar to add_opc_supplies command. You
should specify all the power supplies and their voltage values through the
add_opc_supplies command. Similarly, all the ground supplies should be
specified using the add_opc_grounds command.
Examples
Example 348
add_opc_grounds NCCOM VSS 0 VPW 0
SiliconSmart FR will use the list of power supplies and ground supplies as
mentioned through the add_opc_supplies and add_opc_grounds
commands for an operating condition. SiliconSmart functional recognition
process is okay with cells that do not actually use all the specified power and
ground pins.
add_opc_statistical_parameter
This command adds a statistical process parameter to an operating condition.
Syntax
add_opc_statistical_parameter opc_name (-intercell|
-intracell) \
param1 [param2] (-model) transistor ...
Arguments
opc_name
Name of the operating condition as created with the
set_operating_condition command.
-model
Specifies the transistor name that the specified parameter applies to for
intra-cell parameters.
-intercell | -intracell
Flag to indicate type of variation.
param1, param2, …
Names of one or more process parameters to add.
Description
Statistical characterization attempts to capture the effect of process variations
on the behavior of a cell. The process variations are described by specific
parameters in the SPICE process model. SiliconSmart varies each of the
parameters independently and captures the effect they have on the delay
through a cell.
The add_opc_statistical_parameter command is used to specify the
name of the parameters to be varied per operating condition. Each parameter
name must match the name of a statistical parameter in the SPICE process
model.
The switches –intercell and –intracell indicate whether the parameter
is varied consistently across each device in the cell or whether each device
varies independently, respectively.
Examples
The following command creates an operating condition and adds two
parameters, PARAM1 and PARAM2 to the operating condition:
Example 349
create_operating_condition nom_pvt
…
add_opc_statistical_parameter nom_pvt –intercell PARAM1 PARAM2
set_opc_parameter_distribution nom_pvt –points {-1.0 -0.33 0.33
1.0 }\
-nominal_value 0.0 –variation_range { -1.0 1.0 } –
distribution_type \
gaussian –sigma 0.33 PARAM1
set_opc_parameter_distribution nom_pvt –points { 0.25 0.27 } \
-nominal_value 0.26 –variation_range { 0.23 0.30 } \
–distribution_type linear –sigma 0.01 PARAM2
…
add_opc_statistical_parameter pvt_fast -intracell VTH_NMOS -model
N_HVT
add_opc_supplies
This command adds one or more power supply rail definitions to the specified
operating condition.
Syntax
add_opc_supplies opc_cond supply voltage [supply voltage]
Arguments
op_cond
The name of an existing operating condition created with the command
create_operating_condition.
supply
The name of a supply rail used by SPICE netlists of the cell.
voltage
The voltage of the above supply.
Description
This command is used to specify the power supply rails required by the SPICE
netlists of the cells to be characterized. At least one supply and one ground
need to be defined for each operating condition; additional supplies can be
defined as needed.
Examples
The following example creates the operating condition worst and creates a
ground rail, and two supply rails, VDD and VDD3:
Example 350
create_operating_condition worst
add_opc_supplies worst VSS 0.0 VDD 1.08 VDD3 3.1
See Also
create_operating_condition
set_opc_parameter_distribution
set_opc_temperature
add_pin
This command adds a pin to the structural description of the cell.
Syntax
add_pin pin_name pin_type (-async | -input | -inputZ |
-output | -inout | -clock | -internal | -retention |
-supply) [-spice_node node] [-no_model]
Arguments
-alias
Provides a short-hand way of specifying the pin_name_alias parameter.
-async
Specifies asynchronous pins in a cell. For example:
add_pin P default -async
is equivalent to:
add_pin P default -input set_config_opt -pin P pin_category
async_control
-clock
Specifies that the pin is an input pin that is used as a clocking signal.
-inout
Specifies that the pin is a bi-directional pin.
-input
Specifies that the pin is an input pin.
-inputZ
Specifies to leave an input pin floating during all acquisitions.
-internal
Specifies that the pin is an internal node in the circuit.
-no_model
Specified only for internal nodes and indicates that the internal node should
not be added to the resulting model.
-output
Specifies that the pin is an output pin.
-retention
Specifies that the pin is an input pin and is used as a retaining signal. See
Defining a Retention Cell for more information.
-spice_node
For internal nodes only, this specifies the simulator-specific name of the
node.
-supply
Specifies that the pin is a supply pin to the cell.
pin_name
Name of the pin.
pin_type
Name of the pin type of the pin. The name must be one of the pin types
defined by the pintype command.
Description
This command defines a pin, its direction, and electrical attributes and adds it
to the structural description of the cell. The pin’s direction is specified through
is equivalent to:
Example 353
add_pin A_0 default -input
set_config_opt -pin A_0 pin_name_alias A<0>
SiliconSmart does not support the use of [] or <> in pin names such as A[0]
A[1]. In order to characterize cells with those types of names, the pin names
must be changed in the netlist and the instance file and aliased in the add_pin
section of the instance file. The alias will cause the Liberty model to be written
with the correct pin names.
See Also
pintype
set_subckt_ports
add_process_parameter_variation
This command is used to specify parameters to be varied for a transistor for an
operating condition.
Syntax
add_process_parameter_variation opc_name transistor_name
parameter_name
Arguments
opc_name
The name of the operating condition as created with the
set_operating_condition command.
transistor_name
The name of the transistor for which the process parameter must be varied.
parameter_name
The name of the process parameter that is varied.
Examples
Example 354
add_process_parameter_variation slow_pvt XM1 NVTH0
add_process_parameter_variation slow_pvt XM2 PVTH0
The previous commands specify that NVTH0 is varied for the transistor XM1 and
PVTH0 is varied for XM2. This is used in intra-cell characterization where you
must vary process parameters on a per-transistor basis.
See Also
add_channel_width_variation
add_opc_statistical_parameter
add_process_parameter_variation
add_transistor
set_length_unit
set_opc_parameter_distribution
set_points_boundary_distance
add_switch_tuple
This command specifies a set of pins that can all switch simultaneously.
Syntax
add_switch_tuple list_of_pins
Arguments
list_of_pins
A list of two or more pin names
Description
The add_switch_tuple command is used to define a set of pins in which
can all switch simultaneously. This differs from the add_switching_set
command, which defines a set in which any two pins can switch together.
add_switch_tuple is a low-level command in which each set of switch
combinations must be specified.
For example, consider a one-hot mux with complementary select lines
consisting of S0 and S0B, S1 and S1B, and S2 and S2B. Because each pair will
switch together and at the same time as a second pair is switching, there are
three possible groups:
Example 355
add_switch_tuple { S0 S0B S1 S1B }
add_switch_tuple { S0 S0B S2 S2B }
add_switch_tuple { S1 S1B S2 S2B }
In this case, three different groups of four pins will be considered. When using
this command it is important to define the function of the cell such that the
illegal conditions are explicit made illegal. For example, in this case the
add_function or add_table commands would need to make the case of
!(S0^S0B) (^ is the exclusive-OR operator) illegal and repeat that for each
complementary pair.
See Also
add_forbidden_state
add_one_hot
add_switching_set
add_switching_set
This command specifies a set of input pins that can transition in pairs.
Syntax
add_switching_set list_of_pins
Arguments
list_of_pins
A list of input (or bi-directional) pin names
Description
The add_switching_set command is used to create a set of pins that can
transition individually or in pairs. This case can occur in cells with differential
pins, complementary clocks, or in one-hot multiplexers. The single argument to
this command is a Tcl list of input (or bi-directional) pin names.
This command differs from the define_differential_receiver
command in that the pins are allowed to switch individually or in pairs as
allowed by the function of the cell and delays are measured as for standard
delay measurements. (define_differential_receiver causes
measurements to be made from the crossover point.)
Examples
The following commands create a definition for a flop with complementary
inputs:
Example 356
add_table {
CK CKN D : IQ IQN : IQ IQN
R F 0/1 : - - : 0/1 1/0
~R ~F - : - - : N N
}
add_switching_set { CK CKN }
See Also
add_one_hot
add_table
define_differential_receiver
set_output_differential
add_table
This commands adds a truth-table or state-table description to the cell.
Syntax
A truth table is defined with the following syntax:
add_table {
input_pins : output_pins
input_pin_settings : output_pin_results ...
}
A state table is defined with the following syntax:
add_table {
input_pins : current_state_regs : next_state_regs
input_pin_settings : current_state_settings :
next_state_settings ...}
Arguments
input_pins
A sequence of independent input (or bi-directional or internal) pin names.
output_pins
A sequence of dependent output (or bi-directional) pin names.
input_pin_settings
A sequence of input pin values; one for each pin in input_pins.
output_pin_results
A sequence of output pin values; one for each pin in output_pins.
current_state_regs
A sequence of register names used to define the current state.
next_state_regs
A sequence of register names used to defined the next state. This argument
should be the same as current_state_regs.
current_state_settings
A sequence of values for each current-state register.
next_state_settings
A sequence of values for each next-state register.
Description
SiliconSmart supports truth table and state table descriptions of cell behavior.
The tabular form can be convenient for describing complex behavior,
particularly state behavior. The inputs to a table are a combination of standard
input and bi-directional pins, internal nodes, or registers. Truth tables map
combinations of the inputs to output pin values. State tables also combine the
current state of any registers and map new values to the register set. The
registers can then be used to drive output pins.
Each table definition is a multi-line description. Each line specifies the values of
each of the inputs and the resulting output values. Blank lines are ignored and
comment lines are illegal.
Table 33 add_table Input/Output Pin Value Descriptors
r, R rising input
f, F falling input
Each column must contain a value in the form of one of the defined tokens. The
legal tokens are show in Table 33. Multiple values for a pin can be listed in a
single column, separated by slashes. If more than one column in a row has
multiple values then each must have the same number of values. This is
equivalent to a separate row for each value with single value columns repeated.
For example, the following two specifications for Y are equivalent:
Example 357
A B : Y
0 1 : 1
1 0 : 0
A B : Y
0/1 1/0 : 1/0
Examples
A flip-flop table could be defined as follows, using the add_table command:
Example 358
add_table {
C D : IQ IQN : IQ IQN
R 0/1 : - - : 0/1 1/0
~R - : - - : N N
}
add_table {
IQ IQN : Q QB
0/1 1/0 : 0/1 1/0
}
The first add_table command defines the sequential behavior where the
state changes on a rising edge on pin C. The second table defines the value of
the output pins Q and QB in terms of the state registers defined in the first table.
These definitions are equivalent to the following commands:
Example 359
add_flop IQ IQN C D
add_function Q IQ
add_function QB IQN
See Also
add_flop
add_function
add_latch
add_transistor
This command is used to specify a transistor’s nominal channel length and
nominal channel width.
Syntax
add_transistor transistor_name channel_length channel_width
Arguments
transistor name
The name of the transistor as in the netlist.
channel length
The nominal channel length of the transistor.
channel widh
The nominal channel width of the transistor.
Examples
Example 360
add_transistor M5 59.44 200
In this example, 59.44 is the nominal channel length and 200 is the nominal
channel width. Units of channel length/width can be specified using the
set_length_unit command. This is used in the context of si-shapes
characterization.
See Also
add_channel_length_variation
add_channel_width_variation
set_length_unit
add_user_stimulus
This command is used to add a user-defined input stimulus and measurements
for cases which are not handled by the automated methods. See the Adding a
User-Defined Stimulus section for more details and examples of this command.
Syntax
add_user_stimulus [-cell] [-substitute]
[-explicit_permutation|
-all_permutations] [-rise_fall] sequence
sequence ::= { row * }
row ::= { (in pin_values|out pin_values|not pin_values|meas
meas_spec)* }
pin_values ::= { (pin 0|1|Z|X)* }
meas_spec ::= { (type meas_type|from pin|ref pin|to
pin|states logic)* }
meas_type ::= delay|energy|constraint|mpw|leakage
Arguments
cell
List of cell names.
substitute
A key-value pair list of pin pattern followed by corresponding pin names,
which can be used to alias actual pin names with appropriate identifiers.
explicit_permutation
List of pin names followed by a list of pin settings.
all_permutations
Requires only a list of pin names, and is equivalent to specifying -
explicit_permutations for N pins in combination with pow(2,N) pin
settings.
rise_fall
List of transitioning pins for which both polarities will be considered while the
arcs are generated from the stimulus.
Description
Each row specifies the driven inputs (in), the observed outputs (out) or the
outputs not expected (not), and measurements which can be taken at that
point in the stimulus (meas).
The measurement specification is similar to that for set_config_opt. The
type is a subset of the -type from set_config_opt. The states field is a
logic expression describing all states to which the measurement applies (as
well as the one actually measured).
If the -cell option is specified as a list, and the cell instance is not part of this
list, then all measurements specified by this stimulus are skipped.
The -substitute option can be used to alias actual pin names with
appropriate identifiers. This option is specified as a key-value pair list of pin
pattern followed by corresponding pin names. If multiple substitutions are
specified, then the cross-product across all substitutions is considered.
The -explicit_permutation option can be used to specify fixed settings
for a certain collection of pins. This option accepts a list of pin names followed
by a list of pin settings. The -all_permutations option only requires a list of
pin names. This option is equivalent to specifying
-explicit_permutations for N pins in combination with pow(2,N) pin
settings. Both permutation options cannot be specified at the same time.
The -rise_fall option accepts a list of pins for which both polarities will be
considered while the arcs are generated from the stimulus. Each pin in this list
must be a transitioning pin.
Examples
Example 361
add_user_stimulus {
{ in { A 1 CLK 1} out { Q 1} }
{ in { A 0 } out { Q 0 }
meas { type delay from A to Q}
meas { type energy to Q} }
{ in { CLK 0 }
meas { type energy from CLK states CLK }
meas { type constraint from A ref CLK } }
{ in { A 1 } not { Q 1 }
meas { type delay from A to Q}
meas { type energy to Q}
meas { type constraint from A ref CLK } }
}
add_user_stimulus {
{ in { A 1 CLK 1} out { Q 1} }
{ in { CLK 0} }
meas { type energy from CLK states !CLK }
{ in { A 0 } }
{ in { CLK 1} out { Q 0} }
{ in { CLK 0 }
meas { type mpw from CLK } }
}
See Also
set_config_opt
analyze_netlists
This command analyzes the transistor netlists of a set of cells and prepares
them for path-based constraint analysis and statistical characterization.
Syntax
analyze_netlists [-constraint_nodes] [-statistical]
[-litho_table file] [cells]
Arguments
-constraint_nodes
Recognizes the nodes in the feedback loop of the latch or flop structures for
use with path-based constraints.
-litho_table
Specifies an input file of change length variations from the lithographic
simulator.
-statistical
Prepares netlists and cell instance files for statistical characterization.
Description
The analyze_netlists command reads the netlist for each cell to
determine the structure of the circuit. This information is used both to setup the
cell for path-based constraint analysis and statistical characterization.
Path-based constraint analysis requires the identification of the feedback nodes
in the latch structure(s) of the cell and the ends of the enable/clock signals. The
result is a set of Tcl commands written to the file
charpt/control/path/cell.path. This command can recognize common latch and
flop topologies. More complex cells may need to be set up manually. See
Analyzing the Netlist (Optional).
The -statistical switch is part of the SiliconSmart DFM product and is
required for intra-cell (random variation) or SI-shapes characterization. This
switch causes every cell netlist to be parameterized and written to the directory
charpt/netlists/op_cond. SPICE simulators do not support adding arbitrary
parameters as instance parameters for MOS models, so SiliconSmart requires
the models to be in subcircuit form in the model file. For example, if a netlist has
an instance of xnch in the netlist similar to the following:
Example 362
XM1 A B C D E xnch L=0.06u W=0.39u
Example 363
XM1 A B C D E xnch L=0.06u W=0.39u param1=XM1_param1
See Also
configure
characterize
cell_families_by_name
This command accepts a list of cell names and categorizes them according to
the pattern specified by the -pattern option.
Syntax
cell_families_by_name -pattern cells
Arguments
cells
List of cell names to be categorized.
-pattern
The pattern by which cell family names are identified
Description
If -pattern is left unspecified, then it is taken as xX\[0-9\]\$ which
identifies all cells with the pattern xX<num> at the end of the cell name. The
categorized cells are returned as a list of list of (dictionary) sorted cell names.
Examples
Example 364
cell_families_by_name {ANDX1 INVX3 ANDX2 ORX4 ORX1}
returns:
{ {ANDX1 ANDX2} INVX3 {ORX1 ORX4} }
Example 365
cell_families_by_name -pattern _D\[0-9\]\*_ { AND2_D10_TR
AND2_D2_TR AND2_D1_TR AND3_D1_TR }
returns:
{ {AND2_D1_TR AND2_D2_TR AND2_D10_TR} AND3_D1_TR }
change_parameter
This command changes the value of other parameters. Currently it can change
only the run_list_maxsize parameter.
change_parameter [parameter_block] <parameter_name>
<desired_value>
See Also
run_list_maxsize
clear_config_opts
This command clears all of the configuration options set at the global level
(outside of a cell’s instance file).
Syntax
clear_config_opts
Description
The clear_config_opts command flushes any configuration options set by
calling set_config_opt outside of a cell’s instance file. This command does
not affect any settings made from within an instance file.
See Also
set_config_opt
set_parameter
set_pintype_parameter
write_config_opts
clear_liberty_attribute
This command clears specified attributes being written to the Liberty file.
Syntax
clear_liberty_attribute [-library] [-cell cell] [-pin pin]
{attribute1 attribute2 ...}
Arguments
library
Specifies to clear the specified library level attributes.
cell
Specifies the name of the cell clear the attributes from.
pin
Specifies the name of the pin to clear the attributes from.
Description
This command can be used to clear specified attributes being written to the
Liberty file. The attributes are classified as library, cell, and pin-level attributes.
If you do not want an attribute to be written to the Liberty file, use this command
before the model command. If no argument is specified, all attributes are
cleared. If the command is used only with the -library option, only the
library-level attributes are cleared. If only the -cell cell argument is
provided, all the cell attributes are cleared. If the -pin pin attribute is
mentioned with the -cell attribute, all the pin attributes are cleared. You can
selectively clear attributes by mentioning specific attribute(s) as a list.
This command works only for a single specified cell. To clear attributes for a list
of cells, you must specify a foreach loop as shown in Example 367.
Examples
Example 366
clear_liberty_attribute -cell LAGCEP is_level_shifter
level_shifter_type
Example 367
foreach cell_item $cells_list {
clear_liberty_attribute -cell $cell_item user_function_class
clear_liberty_attribute -cell $cell_item cell_footprint
}
Example 368
clear_liberty_attribute -cell LAGCEP -pin A
Clears all the attributes of pin A belong to cell LAGCEP that are set by the user.
Example 369
clear_liberty_attribute -cell LAGCEP -pin VDD retention_pin
Example 370
clear_liberty_attribute -library
Clears all the library-level attributes that are set by the user.
Example 371
clear_liberty_attribute
clear_liberty_group
Deletes library, cell, or pin group information from Liberty.
Syntax
clear_liberty_group [-cell cell_name] [-pin pin_name]
group_object_type group_object_key
group_object_type (group_object_key) {
contents_of_block
}
Description
Writing group_object_type and group_object_key are mandatory. You
can use the glob-type wild card for cell, pin and group_object_key
values. If you have no values for group_object_key, you can specify a null
string as "".
If you do not specify -cell cell | -cell cell -pin pin, by default
SiliconSmart operates at the library level group. Also, you cannot specify -pin
pin without -cell cell.
Examples
SiliconSmart deletes all those groups in which it matches. Otherwise, the
command is ignored.
Example 372
clear_liberty_group operating_conditions fast
The above removes operating_conditions groups that have the key fast
at the library level.
Example 373
clear_liberty_group -cell A2DFFQNX0P5MA10TR leakage_power ""
Example 374
clear_liberty_group -cell A2DFFQNX0P5MA10TR pin B
configure
This command generates a characterization plan for each cell and prepares it
for characterization.
Syntax
configure [-timing] [-ecsm] [-em] [-emx] [-ccs] [-ccs_noise]
[-power] [-ccs_power] [-fast] [-si] [-lvf] [-aocv]
[-pocv][-ibis] [cells]
Arguments
aocv
Enables AOCV characterization.
ccs
Enables CCS current waveform capture and CCS capacitance
measurements during delay measurements. This switch implies -timing
is set as well.
ccs_noise
Enables CCS-noise measurements. This option causes the cell netlists to
be partitioned into sub-cells representing the channel-connected block(s)
for the cell, which are characterized as needed.
ccs_power
Enables CCS power characterization.
ccs_va
Enables CCS-VA characterization.
ecsm
Enables ECSM waveform capture and ECSM capacitance measurements
during delay measurements. This switch implies -timing is set as well.
em
Enables measurement for electromigration (EM) characterization.
emx
Enables current threshold measurement for electromigration (EM) analysis.
This will generate EMX files under the [get_location]/control/emx directory
only without performing circuit simulations that measure the actual currents
through resistive wires.
fast
Configures in parallel, via LSF, NC, or SunGrid job schedulers. This option
is enabled by default and does not need to be specified. The SiliconSmart
tool will start non-fast configuration only when the following settings are
matched:
• job_scheduler=standalone
• run_list_maxsize=1
• no -fast specified for configure
ibis
Enables measurements for the IBIS format, including VT curves, IV curves,
and differential launch delays as appropriate.
lvf
Enables LVF characterization.
pocv
Enables POCV characterization.
power
Enables power measurements, including switching energy, hidden energy,
and leakage power.
si
Enables Liberty noise measurements, including steady-state IV curves,
noise immunity, and noise propagation.
timing
Enables timing measurements, including delays, Z-enable, Z-disable, and
constraint measurements.
Description
This command configures a set of cells for characterization and generates the
characterization plan. The default action generates tests for standard timing
and power models. If any of the switches are specified, then none are on by
default. This means that the command:
Example 375
configure –si
See Also
characterize
model
create
This command creates a characterization directory structure for the current
cell.
Syntax
create char_dir [-clean]
Arguments
char_dir
Root directory for the characterization directory structure. This can be
specified as an absolute or relative path.
clean
Clears the characterization directory location before creating it (if it already
exists).
Description
This command creates the characterization directory structure with the
specified root. This directory is created if nonexistent. It contains all of the data
used for characterization and specification compliance testing. The command
set_location must be used to establish this characterization directory as
the current working directory.
Errors
An error message is displayed if the directory is invalid or already populated.
See Also
set_location
create_harness
This command creates an electrical harness to be applied during
characterization.
Syntax
create_harness name
Arguments
name
Name of the harness.
Description
This command creates a new harness with the given name. Electrical elements
can be added to build a circuit to be applied to a cell during characterization.
The harness can be used to apply additional circuit elements to one or more of
the pins on the cell. For example, some cells require resistor termination on
one or more output pins. A harness allows the termination network to be added
to the characterization simulations. Circuit elements are added using the
command add_harness_elements. Once the harness is created, it can be
applied to a measurements using the harness option to the
set_config_opt command.
Examples
The following commands create a JEDEC class 1 resistor termination harness
and apply it to the PAD pin of a cell. The harness is applied to all delay
measurements and the node used for measurements is moved to a node in
voltage divider.
Example 377
create_harness jedec_class1
add_harness_elements jedec_class1 {
R RS PAD node1 25
R RT node1 VTT 25
}
set_measurement_node jedec_class1 node1
set_config_opt –type delay –to PAD harness jedec_class1
See Also
add_harness_elements
set_config_opt
set_measurement_node
set_stimulus_node
set_sweep_parameter
create_operating_condition
This command creates an operating condition that specifies the process,
voltage, and temperature settings for the simulation.
Syntax
create_operating_condition op_cond_name
Arguments
op_cond_name
The name of the operating condition to be created.
Description
This command creates a new operating condition specification. Each operating
condition specifies the process, voltage, and temperature settings to be used
when characterizing the cells.
Examples
The following example creates an operating condition named worst and sets
the power and ground supply rails:
Example 378
create_operating_condition worst
add_opc_supplies worst VSS 0.0 VDD 1.08
See Also
add_latch
set_opc_parameter_distribution
set_opc_temperature
define_cell_ccb
Use this command in the instance file of a cell to define the CCBs manually for
CCS-noise analysis. Refer to User-Defined CCBs for more information on using
this command.
Syntax
define_cell_ccb –relevant_pin cell_pin
[-inputs ccb_input_pin_names] -output ccb_output_pin
[-transistors list_of_transistor_names_in_the_ccb]
[-switching_set list_of_net_names]
[-input_vectors list_of_input_vectors]
Arguments
-relevant_pin
This option is required. It defines the cell input or output pin for which the
CCB has to be manually generated for CCS-noise measurements.
-inputs
This optional argument defines the inputs for the CCB. If this option is not
specified, then all the primary input pins of the cell are considered as inputs
to the CCB.
-output
This option is required. It specifies the output of the CCB. The output of the
CCB can be a primary output or an internal pin.
-transistors
This optional argument can be used to specify the list of transistors in CCB.
If this argument is not specified, SiliconSmart will probe the output of the
CCB using the whole netlist to make CCS-noise measurements.
-switching_set
This optional argument specifies the pin/net names that must switch
together for the noise propagation to switch from input to output of the CCB.
This option must be used along with the -inputs option.
-input_vectors
This optional argument can be used to specify list of user-defined vectors
for the CCB to find out the function of the CCB. If this option is specified, only
these vectors will be used in the instance file to get the functionality of the
CCB. Each vector length should be the same as the number of inputs
specified in the -inputs switch. This option cannot be specified if -inputs
switch has not been specified.
Examples
Example 379
define_cell_ccb –relevant_pin { B} –inputs {A B CI} –output {net72}
–input_vectors { {0 0 0 } {0 1 0} }
This example indicates that the CCB from B to net72 will use only these user-
defined vectors for creating CCS-noise tests. The other possible 6 vectors will
not be considered.
See Also
User-Defined CCBs
define_differential_receiver
This command specifies that a pair of inputs behave differentially with respect
to a given output pin.
Syntax
define_differential_receiver output_pin pos_input neg_input
Arguments
output_pin
Name of the output pin
pos_input
Name of the positive input pin
neg_input
Name of the negative input pin
Description
The define_differential_receiver command specifies that a pair of
input pins behave differentially when controlling the named output pin. This has
two implications. First, delay measurements are made relative to the crossover
point of the two inputs as opposed to from the standard delay threshold.
Second, it means that only arcs in which both pins transition at the same time
are considered. This differs from the add_switching_set command, which
indicates that a set of input pins can transition in pairs, but can also switch
individually.
The output pin is specified to distinguish it from outputs that may be a function
of only one of the input pins. See the Complementary Inputs and Differential
Pins section for more details.
Examples
The following commands define the behavior of a cell with a differential input
pair and three outputs, one each reflecting the state of one of the inputs and
one that is a function of the differential comparator:
Example 380
add_function Z PADP&!PADN –illegal {PADP&PADN | !PADP&!PADN}
add_function ZP PADP
add_function ZN PADN
define_differential_receiver Z PADP PADN
In this example, ZP and ZN follow the individual inputs and switch in response
to only a single input. Pin Z however requires that both inputs switch
simultaneously.
See Also
add_function
add_switching_set
add_table
set_output_differential
define_parameters
This command defines a block of configuration parameters that control various
functions of SiliconSmart.
Syntax
define_parameters [-append] [name] [ -> parent ] settings
Arguments
-append
Appends the settings to an existing parameter block. By default, if the
parameter block already exists, the existing parameters are cleared.
name
Optional argument gives the name of the parameter block. The default name
is default, which is used for global parameters only.
-> parent
The name of an optional existing parameter block whose contents will be
automatically copied and then extended as the new parameter block.
settings
One or more set (parameter) commands.
Description
This command defines a block of configuration parameters. Each block controls
a specific aspect of the operation of SiliconSmart such as third-party tool
integration or modeling. The last argument to this command is a list of set
statements that define the parameters in the parameter block. The -> operator
allows an existing parameter block to be copied and extended under a new
name.
Errors
Error messages are displayed if the parent parameter block is invalid or
undefined, or any of the Tcl set commands are invalid.
Examples
Example 381
# Create a default parameter block
# All parameters are the same as default, except for
trailing_delay,
# which is changed to 1e-6.
define_parameters {
set job_scheduler standalone
.
.
.
}
# Create a block for weak states that inherits from default
define_parameters weak -> default {
set trailing_delay 1e-6
}
See Also
get_parameter
list_parameter_blocks
list_parameters
set_parameter
enable_api
This command loads an optional package of commands and makes them
available in the io_shell Tcl interpreter.
Syntax
enable_api api_name
Arguments
api_name
The name of an optional API package.
Description
SiliconSmart includes a set of Application Programming Interface packages
that can be optionally enabled. These commands provide additional
functionality for added control or breadth of functionality. These packages are
described in the appendixes of this manual.
Examples
The following command enables the model publishing API (described in
Appendix C, Model Publishing API):
Example 382
enable_api pub
expand_side_inputs
This command provides an expansion of the provided side inputs according to
expansion_type using whens as the pivots.
Syntax
expand_side_inputs [-whens whens] [-side_inputs sinps]
[-expansion_type (ones_count|complete_binary|one_hot)]
Arguments
-whens
List of when conditions that will be used as pivots.
-side_inputs
List of side inputs across which the expansion is performed.
-expansion_type
Type of expansion to be performed:
• ones_count — default expansion type. When used, the maximum
number of when expressions returned is (num_whens*
(1+num_side_inputs)).
• complete_binary — when used, the maximum number of when
expressions returned is (num_whens*pow(2,num_side_inputs)).
• one_hot — when used, the maximum number of when expressions
returned is (num_whens*num_side_inputs).
find_internal_nodes_for_constraint
This push-button command first finds out potential candidates for the internal
nodes and then runs constraint tests on each of these nodes and outputs the
final actual internal node that can be used for the actual characterization for
measuring constraints
Syntax
find_internal_nodes_for_constraint -match expression
-mem_int_node dummy_node [-get_word_line_node]
Arguments
-match
Specifies a Tcl regular expression to run only those variant of constraint arcs
that match the regular expression. This can be used when you want to run
a small set of constraint arcs to find out the potential internal nodes.
-mem_int_node
Specifies the dummy node that is used in the instance file to assign the
actual SPICE node name to the internal node or register. The default value
of this argument is mem_int_node.
-get_word_line_node
Gets the word line used while generating the pruned netlist of the energy
arcs.
Examples
If the dummy node name in the instance file is specified as follows:
Example 383
add_pin mem_int default -internal -spice_node [get_config_opt
dummy_node]
If you want to run only setup arcs to find out the internal nodes, the command
can be used as follows:
Example 384
find_internal_nodes_for_constraint -match setup__* -mem_int_node
dummy_node
If you want to run only setup and hold arcs to find out the internal node
corresponding to 'mem_int', this command can be used as follows:
Example 386
find_internal_nodes_for_constraint -match (setup__*|hold__*)
See Also
find_potential_internal_nodes
get_word_line_node
find_potential_internal_nodes
This command runs very fast SPICE simulations on some variant of constraint
arcs that measure constraint at the internal node to find out the potential
candidates.
Syntax
find_potential_internal_nodes [-match expression]
[-mem_int_node dummy_node]
Arguments
-match
Specifies a Tcl regular expression to run only those variant of constraint arcs
that match the regular expression. This can be used when you want to run
a small set of constraint arcs to find out the potential internal nodes.
-mem_int_node
Specifies the dummy node that is used in the instance file to assign the
actual SPICE node name to the internal node or register. The default value
of this argument is mem_int_node.
Examples
If the dummy node name in the instance file is specified as follows:
Example 387
add_pin mem_int default -internal -spice_node [get_config_opt
dummy_node]
If you want to run only setup arcs to find out the potential internal nodes, this
command can be used as follows:
Example 388
find_potential_internal_nodes -match setup__* -mem_int_node
dummy_node
If you want to run only setup and hold arcs to find out the potential internal node
corresponding to 'mem_int', this command can be used as follows:
Example 390
find_potential_internal_nodes -match (setup__*|hold__*)
Example 391
find_potential_internal_nodes
This command if used as such will run all the variants of constraint arcs to find
out the potential internal nodes corresponding to the dummy node
mem_int_node.
See Also
find_internal_nodes_for_constraint
get_word_line_node
The word line is used while generating the pruned netlist of the energy arcs.
The energy numbers from pruning are in the same range as energy numbers
obtained without pruning.
Syntax
get_word_line_node internal_node
Arguments
internal_node
The internal node (found with the
find_internal_nodes_for_constraint command).
See Also
find_internal_nodes_for_constraint
find_potential_internal_nodes
man
Returns parameter documentation.
Syntax
man [-internal] param_name_or_glob
Description
For example, if you are looking for information about threshold, you can issue
the command man *thresh*, and SiliconSmart returns the following
information:
Example 392
logic_high_threshold pintype 0.8
logic_low_threshold pintype 0.2
logic_low_threshold_rise pintype logic_low_threshold
logic_low_threshold pintype logic_high_threshold
power_stabilization_threshold Default 0.05
merge
Generates a merged library from the cell-level library.
Syntax
merge [-directory dir_name] [-output filename] [-compact]
[-extension ext_name] [-header filename] [cell_list]
Arguments
-directory
Specifies which directory the cell level .libs reside. If not provided, the
models will be picked up from the default location where models are written
by model command, i.e., the charpt/models/liberty directory.
-compact
Compacts the model if CCS timing, power, noise, or CCS-VA data is
available in the model. If the cell models contain CCS-VA data, they will
always be compacted since that is required by the CCS-VA format.
-extension
Creates different libraries for the same cell. For example, for a MUX you can
create ECSM, CCS, and NLDM libraries. So you would differentiate
between them by putting different extensions, such as ecsm.lib or ccs.lib.
For merging, you need to know which are the cells under the same criteria.
-output
Path to the merged .lib file. If only a file name is specified, it goes to the
current working directory.
-header
Header file which is concatenated to the header section of the merged .lib
file. This is a flat file containing attributes and groups. There should not be
a library level container group. Consider the following example:
Example 394
my_new_lib_attr : 3432;
define(foo, bar);
wire_load(model1) {
length : 3;
hello : 2;
}
new_lib_attr : “hello world”;
cell_list
List of cells. If no list is provided, it merges all files with a .lib extension found
in the source directory.
Description
Use this command to generate a complete multi-cell library from for a set of
single cell level libraries. Single cell level library means that a .lib is created only
for a single cell using the SiliconSmart model command.
When merging many cells with lots of measurements, especially when CCS-
noise and/or CCS-VA are enabled, the model command may not be able to
handle the memory capacity to create a full library. For this scenario, you can
generate cell level .lib files, and then use the merge command to merge the
cells.
Another scenario in which the merge command is useful, is if you are using a
cell level flow where SiliconSmart may be invoked once per cell to go through
the whole characterization flow. In this case, the result would be multiple .lib
files per cell, and they can then be merged using the merge command.
All the cell level .lib files are to be placed in the dir_name directory. The files in
this directory MUST have a .lib extension, otherwise they will be ignored.
The header for all the cell level model files must be consistent. There should
not be any conflicts on attribute names and values. For example, the units and
de-rating factors, etc., must match for all the cell level .lib files. The look-up
table templates are an exception, and will be handled correctly by the merge
command.
Examples
Example 396
merge –directory my_models –output merged.lib cells
merge –directory my_models –compact –output merged_compact.lib
cells
pintype
This command defines a new pin type in the configuration.
Syntax
pintype name [-> parent] settings
Arguments
name
The name of the new pin type to be defined.
-> parent
The name of an optional existing pin type, whose contents will be
automatically copied and then extended as the new pin type.
settings
One or more set (parameter) commands.
Description
This command specifies a new pin type that is used for cell characterization
and modeling, usually used in the configure.tcl file. A pin type defines a data
structure for named pin attributes, such as logic_high_name and
logic_low_name, that are specific to one particular type of pin. The ->
operator allows an existing pin type to be copied and extended under the new
name specified. New attributes can then be added to the copy or existing ones
redefined.
Errors
If the named pin type already exists, the existing parameters are cleared before
the new parameters are set. Error messages are displayed if the parent is
invalid or undefined, or any of the Tcl set commands is invalid.
Examples
Example 397
# Defines a new pin type based on a previous defined type named
'default'.
pintype pad -> default {
set logic_high_name VDD_HI
}
See Also
get_pintype_parameter
list_pintype_parameters
list_pintypes
set_pintype_parameter
remove_pintype
remove_driver
This command removes an imported driver cell and all related characterization
data.
Syntax
remove_driver cell
Arguments
cell
The name of a driver cell.
Description
This command deletes a driver cell imported with the command
import_driver. When the driver cell is removed, any characterization data is
associated with it is also deleted.
Errors
An error is returned if the driver cell does not exist.
See Also
import_driver
report_drivers
remove_parameter_block
Deletes a parameter block and all associated parameters.
Syntax
remove_parameter_block block
remove_pintype
This command deletes a defined pin type.
Syntax
remove_pintype pintype
Arguments
pintype
The name of a defined pin type to be deleted.
Description
This command deletes a defined pin type and all parameters defined for it. Pin
types that used it as a parent (see the pintype command) are unaffected.
Errors
An error is returned if the pin type does not exist.
See Also
pintype
list_pintype_parameters
list_pintypes
report_arcs
Lists to std_out all the arcs generated by the configure command.
set_boundary_distance
This command is used to specify distance from boundary transistors to cell
boundary.
Syntax
set_boundary_distance {lower_left_distance
upper_left_distance lower_right_distance
upper_right_distance}
Arguments
lower_left_distance
The distance of the lower left transistor from the cell boundary.
upper_left_distance
The distance of the upper left transistor from the cell boundary.
lower_right_distance
The distance of the lower right transistor from the cell boundary.
upper_right_distance
The distance of the upper right transistor from the cell boundary.
Examples
Example 398
set_boundary_distance { 290 290 270 270}
See Also
set_points_boundary_distance
set_bus_value
Ties a fixed value to a bus with a bus name and binary string. This command is
only supported for extra-margin adjustment buses.
Syntax
set_bus_value name value
Arguments
name
Name of the bus to be tied.
value
Value of the binary string, where:
• The binary string is of the form 0bAn-1…A0 where each of Ai is either
0 or 1.
• The width of the bus is equal to n. The bus is split into n individual bits,
i.e., An-1 to A0
• An-1 to A0 are assigned starting from MSB to LSB of the bus,
respectively.
set_cell_type
This command can be invoked from the .inst file only. It gives flexibility to define
the cell-type of a cell and SiliconSmart automatically takes care of many
secondary steps internally during characterization and/or modeling. This high
level command calls many user-level commands internally while modeling. One
of the user-level commands called by set_cell_type command is
set_liberty_attribute.
Syntax
set_cell_type type_name
[-virtual_supply_name_map name_map] \
[-type switch_type switch_direction] \
[-enable_pin enable_pin_list] \
[-data_pin data_pin_list] \
[-input_voltage_range inp_range] \
[-output_voltage_range out_range]
-no_state_table
Arguments
data_pin_list
Tcl list of data pins.
enable_pin_list
The enable pin or list of pins for the switch cell. This is a Tcl list of values like
{EN S_EN}
inp_range
Input voltage range. This is a Tcl list of low and high voltage limits. For
example, {0.0 1.1}
out_range
Output voltage range. This is a Tcl list of low and high voltage limits. For
example, {0.0 1.5}
-data_pin
Used to specify the data pin of the cell like a level shifter.
-enable_pin
Used to specify the switch cell’s enabling pin.
-input_voltage_range
Used to specify the input voltage range for level shifters.
-output_voltage_range
Used to specify the output voltage range for level shifters.
-switch_direction
Specifies the switch enabling direction. Valid values are HL_LH, HL, LH.
-type
Supported types are coarse_grain and fine_grain.
type_name
The cell type: valid values are mtcmos, level_shifter,
isolation_cell, memory.
-virtual_supply_name_map
List of pairs of virtual supply name and actual supply name. For example,
{vvdd vdd .. ..}
Description
This command gives flexibility to define the cell-type of a cell and SiliconSmart
automatically takes care of many secondary steps internally during
characterization and/or modeling. This high level command calls many user-
level commands internally while modeling.
One of the user level commands called by set_cell_type command is
set_liberty_attribute.
For MT-CMOS switch cells, you must define:
Example 399
set_cell_type mtcmos -type coarse_grain|fine_grain
–virtual_supply_name_map {virtual_PG_pin PG_pin}
The –type option is required for specifying the type of the switch. The value
can be either coarse_grain or fine_grain. The default is coarse_grain.
For level shifter cells, you must define:
Example 400
set_cell_type level_shifter –type HL_LH|LH|HL -enable_pin {pin} \
-data_pin {pin} \
-input_voltage_range {Llimit Hlimit} \
-output_voltage_range {Llimit Hlimit} \
The default value of -type switch for level shifter is HL_LH. All other switches
are optional and give the flexibility to user to set cell-level attribute:
level_shifter_type and pin-level attributes:
level_shifter_enable_pin, level_shifter_data_pin,
input_voltage_range and output_voltage_range, respectively in the
generated Liberty file.
set_config_opt
This command sets the characterization and modeling configuration option for
a cell, measurement type, or specific measurement.
Syntax
set_config_opt
-cell cell -ccb ccb -opcond opcond
[-type (decap | decap_ccs | delay | cin_css | zen | zdis |
energy | tout | timing | setup | hold | recovery |
asynch_recover | removal | asynch_removal | leakage_power
| constraint | cmpw | ncmpw | mpw | input_capacitance |
nochange | nochange_hold | nochange_setup | noise |
reference
Matches the reference pin for constraint acquisitions. The value can be the
name of a pin or a Tcl list of pin names.
to
Matches all measurements ending with the pin or pins specified in the value.
The value can be the name of a pin or a Tcl list of pin names. If the value is
the keyword none, only measurements involving only an input pin are
matched.
type
Specifies the measurement type to which the option applies. If no type is
specified, the option applies to all types. Can be a single type or a
type_list.
The timing type applies to delay, zenable, and zdisable. The
constraint type applies to setup, hold, recovery, and removal. The
mpw type applies to cmpw and ncmpw.
The nldm_noise value covers all noise measurements not covered by
ccs_noise. Precharacterization and import have modified to use the
nldm_noise tag instead of noise for setting state-related parameters.
Existing .inst and .prechar files will not be affected.
The nochange type is the master type for nochange_hold and
nochange_setup.
Refer to Specifying set_config_opt -type for more information and hierarchy
diagrams of these types.
value
Specifies the value of the option being set.
when
Specifies a boolean condition of states on the cell’s input pins. This allows
options to be set based on the state of pins which control the electrical
behavior of a cell, such as drive strength control.
Description
Legal direction values include LH, HL, LZ, HZ, ZL, or ZH. The
set_config_opt command supports global style wildcards for cell names,
pin names and transitions. For example, -pin * will mean all the pins.
When SiliconSmart generates the measurements for each cell, it consults the
set of options specified with the set_config_opt command. Any option
settings that match the type, from pin, and/or to pin of a given measurement are
applied to that measurement. The following table describes the available
options.
See the Using the set_config_opt Command section for more details on using
this command.
See Also
get_config_opt
set_parameter
set_pintype_parameter
set_harness_parent
This command pick ups the harness elements for any pin not included in a
particular harness.
Syntax
set_harness_parent new_harness default
set_length_unit
This command specifies the unit in which the transistor lengths are specified.
Syntax
set_length_unit lenth_unit
Arguments
length_unit
The channel length/channel width unit for si-shapes characterization.
Possible values are nm and um.
Description
This command is used with add_transistor and related commands to
specify the units in which the transistor channel lengths are specified. Legal
values are nm (nanometers) and um (micrometers).
See Also
add_transistor
add_channel_length_variation
add_channel_width_variation
set_liberty_attribute
This command sets a Liberty attribute.
Syntax
set_liberty_attribute [-library] [-cell cell] [-pin pin]
[-complex] attribute1 va1ue1 {attribute2 va1ue2 ...}
Arguments
-library
Specifies the attribute being is to be set as library attribute. The –cell and
–pin arguments cannot be specified with this argument.
-cell
Specifies the name of the cell to apply the liberty attributes to.
-pin
Specifies the name of the pin to apply the liberty attributes to.
-complex
Specifies whether to set a complex attribute.
attributes
Attributes specified as a paired list of attribute and value.
Description
The attributes are to be mentioned as a paired list of attribute and value. The
Liberty attributes are classified as library, cell and pin attributes. The following
table enlists the list of cell/pin attributes that are standard Liberty attributes. You
can add and set any attribute in the Liberty file. SiliconSmart only reports a
warning for the non-standard attributes being set. All user-defined attributes will
be the final attributes found before the first group.
If you want to set any cell/pin attribute, this command can also be invoked from
the instance file of cell. But you should omit –cell cell option if used from
instance file.
The -library options cannot be used together with –cell or –pin options.
All non-standard attributes will be set as a simple attribute in the Liberty file.
Check the clear_liberty_attribute command to know how to unset an
attribute defined by set_liberty_attributes.
There are two ways in SiliconSmart to set an attribute for a Liberty model:
■
Using specific parameters in the configure.tcl file, as with
liberty_max|min_capacitance|transition which enables the
SiliconSmart modeler to write an attribute accordingly into the output Liberty
file.
■
Using the set_liberty_attribute command in the run script or the cell
instance file, which sets/overrides any existing known or user-defined
attributes in the output model from the model command.
The priorities for the set_liberty_attribute command are as follows from
lowest to highest priority:
1. configure.tcl parameters or set_parameter calls.
2. set_liberty_attribute in run script or command-line calls.
3. set_liberty_attribute calls in cell instance (.inst) file.
A set_liberty_attribute call in the run script or in the cell .inst file will
override attribute values by using the
liberty_max|min_capacitance|transition parameters:
■
Set the following parameter in the configure.tcl which sets
max_transition 3.0e-9 (3ns) set liberty_max_transition 1
■
Call the set_liberty_attribute command in the run script, as follows:
Example 402
set_liberty_attribute cell CELL1 pin PIN1 max_transition
2.0e-9
In this case, the final value of max_transiiton for pin PIN1 under cell
CELL1 will be 2.0e-09 (2ns) as set_liberty_attribute has a higher
priority than that set by the parameter settings specified in the configure.tcl
file.
The set_liberty_attribute command can be called from the run
script and/or the .inst file. When you set a cell/pin level attribute in the run
script and also set/override the same using the set_liberty_attribute
command in the cell .inst file, SiliconSmart uses the
set_liberty_attribute call in the .inst file and ignores the
set_liberty_attribute in the run script as the .inst file takes
precedence.
Example 403
set_liberty_attribute -cell CELL1 -pin PIN1 max_transtion
2.0e-9
■
set_liberty_attribute call in cell .inst file (CELL1.inst):
Example 404
set_liberty_attribute -pin PIN1 max_transition 1.0e-09
For the previous case, SiliconSmart will write max_transition 1.0e-09 (1ns)
into the Liberty model written by the model command for pin PIN1 under cell
CELL1 as set_liberty_attribute in the .inst file takes priority over the
set_liberty_attribute call in the run script.
The following standard cell attributes are currently supported for cell type
level_shifter:
Table 34
Cell Attributes
Pin Attributes
The following standard attributes are supported for cell type isolation cell:
Cell Attributes
Pin Attributes
The following standard attributes are supported for cell type switch:
Cell Attributes
Examples
Example 405
set_liberty_attribute –cell LAGCEP is_level_shifter true
level_shifter_type HL
Sets the cell type of cell LAGCEP as level shifter with level shifter type identified
as HL:
Example 406
set_liberty_attribute –cell LAGCEP is_level_shifter true
level_shifter_type HL input_voltage_range {0.0 02}
output_voltage_range {0.1 1.5}
Sets the cell type of cell LAGCEP as level shifter with the following attributes
being set:
Example 407
level_shifter_type : HL
input_voltage_range (0.0 02)
output_voltage_range (0.1 1.5)
set_liberty_attributes –cell LAGCEP –pin VDD pg_type backup_power
Sets the pg_type of the supply pin VDD of cell LAGCEP as backup_power.
Example 408
set_liberty_attribute –library default_cell_leakage_power 1.1
The above will produce a single complex attribute named voltage_map in the
Liberty model.
This will generate a 3 voltage_map attributes in the Liberty model. Note that
set_liberty_attribute will not write duplicates of the both the name and
value of the attribute are duplicates; that is, the values must be unique for the
duplicate attributes to appear in the model. So the output model will have:
See Also
clear_liberty_attribute
set_location
This command selects the characterization directory to be used and reads the
configuration.
Syntax
set_location char_dir
Arguments
char_dir
The absolute or relative path to a valid characterization directory.
Description
This command specifies the target characterization directory for all
characterization-related data files. The path specified can be absolute or
relative and must refer to a valid SiliconSmart directory structure generated by
the create command.
Errors
Missing file or bad path messages can result from other commands if an invalid
directory (one not created by the create command) to set_location.
See Also
create
get_location
set_log_file
This command sets the destination for the logging messages.
Syntax
set_log_file filename
Arguments
filename
The name of a file to write logging messages to.
Description
This command sets the file that all logging messages will be written to. If the file
already exists, you must have permission to write to it and new messages are
appended to the file.
Errors
An error is returned if the file is not writable.
See Also
set_log_level
set_log_stdout_level
set_log_level
This command sets the minimum severity level of messages written to the log
file.
Syntax
set_log_level level
Arguments
level
One of ERROR, WARNING, INFO, or VERBOSE.
Description
Sets the minimum severity level of messages written to the log file. The lowest
severity is INFO. If VERBOSE is specified, additional debugging messages are
generated.
Errors
Level must be one of the specified levels.
See Also
set_log_file
set_log_stdout_level
set_log_stdout_level
This command sets the minimum severity level of messages written to the
terminal.
Syntax
set_log_stdout_level level
Arguments
level
One of ERROR, WARNING, INFO, or VERBOSE.
Description
This command sets the minimum severity level of messages written to the
terminal. The lowest severity is INFO. If VERBOSE is specified, additional
debugging messages are generated.
Errors
Level must be one of the specified levels.
See Also
set_log_file
set_log_level
set_maskable_enable_control_output
It accepts an ON or OFF value. This command is only necessary when the
maskable write enable signal is present and write through mode is ON.When
write through mode is ON and the maskable write enable signal is present, the
memory may behave in one of two different ways.
1. When write through mode is ON and maskable write enable signal is active,
then during the write operation the data will be written to both memory and
output.
2. When write through mode is ON and maskable write enable signal is not
active then during the write operation data will not be written into memory
but it will be written to output.
As shown above, when write through mode is ON, the output is not dependent
on the maskable write enable signal state.
When an OFF value is given to set_maskablewrite_enable_output, the
behavior of memory is as described above.
When write through mode is ON and the maskable write enable signal is active,
then during write operation the data will be written to both memory and output,
which is the same behavior as before. However, when write through mode is ON
and the maskable write enable signal is not active, then during write operation
data will not be written into memory or output.
With this new command, when write through mode is ON, the output is
dependent on the maskable write enable signal state.
set_measurement_node
This command specifies the node in a harness network that measurements are
placed on instead of measuring an output pin directly.
Syntax
set_measurement_node harness_name pin_name node_name
Arguments
harness_name
Name of a harness created with the command create_harness.
pin_name
Name of an output or bidirectional pin on the CUT to which the harness is
connected.
node_name
The name of a node in the harness network. See the
add_harness_elements command.
Description
When a harness is applied to the output pin of a cell, it is sometimes necessary
to change the location where measurements are taken. For example, if a
terminating resistor network is used, sometimes the delay measurements must
be taken at a node inside the harness network instead of at the output pin itself.
This command allows the measurement point for one or more output pins to be
specified.
The specified node name must be a node implicitly created in the network (i.e.,
not another pin on the cell or a voltage supply). Two pins should not have the
same measurement node.
Examples
The following commands create a JEDEC class 1 resistor termination harness
and apply it to the PAD pin of a cell. The harness is applied to all delay
measurements and the node used for measurements is moved to the node
node1 in the voltage divider.
Example 412
create_harness jedec_class1
add_harness_elements jedec_class1 {
R RS PAD node1 25
R RT node1 VTT 25
C Cload PAD VSS load_PAD
}
set_measurement_node jedec_class1 PAD node1
set_sweep_parameter jedec_class1 -load PAD load_PAD
set_config_opt -type delay -to PAD harness jedec_class1
See Also
add_harness_elements
create_harness
set_config_opt
set_measurement_node
set_stimulus_node
set_sweep_parameter
set_netlist_file
This command specifies the path to the simulator netlist for the cell.
Syntax
set_netlist_file file [tag [file_tag] ...]
Arguments
file
Path to the simulator netlist file for this cell.
tag
Name of an operating condition for which this netlist should be used.
Description
The set_netlist_file command is used to specify the path to the
simulator netlist for the cell. In most cases a single netlist is valid for all
operating conditions in which case only a single argument is needed.
SiliconSmart supports operating condition-specific netlists. In this case, the
command accepts one or more pairs of arguments consisting of a path name
and the name of an operating condition. The operating condition must be
defined with the create_operating_condition command.
A special tag name of __default__ is reserved for indicating the default
netlist. If no netlist is specified for a given operating condition then this netlist is
used.
Examples
The following command specifies the path to the netlist in the current
characterization directory for a cell named INV1:
Example 413
set_netlist_file [get_location]/netlists/INV1.cir
The following command performs the same operation, but specifies two
different netlist files for the operating conditions worst_pvt and best_pvt:
Example 414
set_netlist_file [get_location]/netlists/INV1_ss.cir worst_pvt \
[get_location]/netlists/INV1_ff.cir best_pvt
See Also
create_operating_condition
get_location
set_opc_parameter
This command sets an operating condition specific parameter.
Syntax
set_opc_parameter op_cond_name parameter_name value
Arguments
op_cond_name
The name of an operating condition created with the command
create_operating_condition.
parameter_name
Name of the parameter to be set.
value
Value of the parameter.
Description
This command sets the value of a parameter on an operating condition.
Operating condition parameters can be used in simulation harnesses to adjust
the harness for the process/voltage/temperature of the simulation. See
add_harness_elements for information on how to use parameters with
circuit elements in a harness.
Examples
The following commands create a JEDEC class 1 resistor termination harness
and apply it to the PAD pin of a cell. The harness consists of a voltage divider
tied between the PAD pin and supply VTT. Node node1 is created between the
resistors and used as the measurement point. The resistance of resistor RT is
rt_resistance, meaning that the parameter rt_resistance must be set in the
parameter block default or in the operating conditions. In this case, the
parameter has been made operating condition-specific, and is 35 ohms in the
worst-case condition and 20 ohms in the best case. The value of this parameter
is used as the value of the resistor.
Example 415
set_opc_parameter worst_pvt rt_resistance 35
set_opc_parameter best_pvt rt_resistance 20
…
create_harness jedec_class1
add_harness_elements jedec_class1 {
R RS PAD node1 25
R RT node1 VTT rt_resistance
}
set_measurement_node jedec_class1 node1
…
set_config_opt –type delay –to PAD harness jedec_class1
set_opc_parameter_distribution
Specifies the type of distribution to be applied to a statistical process
parameter.
Syntax
set_opc_parameter_distribution opc_name -points
{list_of_points} \
–nominal_value value -variation_range {begin end} \
-distribution_type distribution -sigma value param1
param2 ...
Arguments
opc_name
Name of the operating condition as created with the
set_operating_condition command.
-points
Specifies an explicit list of one or more parameter values to be used during
characterization.
-nominal_value
Specifies the nominal value of the parameter. This value will be added to the
set of points specified with –points.
-distribution_type
This value is not used by characterization, but is passed through to the
generated Liberty file and is consumed by the statistical timer.
-sigma
This value is not used by characterization, but is passed through to the
generated Liberty file and is consumed by the statistical timer.
-variation_range
Range of parameter value within which the sensitivity is valid. This is used
when computing the sensitivity coefficients.
Param1
Name of one or more parameters to apply the distributions to.
Description
The set_opc_parameter_distribution command specifies the range of
values to be used for each process parameter. SiliconSmart will independently
vary each statistical process parameter over the range of points specified while
holding the other parameters at the nominal value. A set of one or more values
must be specified for each parameter via the –points switch.
The nominal value for each parameter is specified with –nominal. This value
is added to the set of points over which each parameter is varied.
The variation range (-variation_range) specifies the maximum range over
which a given parameter can vary. For example, a parameter may vary between
-1.0 and 1.0 corresponding to an expected range over three standard
deviations but the characterization may only be performed at points within one
standard deviation of the nominal. The variation range is used during modeling
to compute the sensitivity of the parameter over the entire variation range.
The switches –distribution_type and –sigma are not used in
characterization, and are only passed through to the modeling step. These are
set in the Liberty model statistical extensions and consumed by the statistical
timing analysis tool.
Examples
The following example creates the operating condition nom_pvt and adds two
parameters, PARAM1 and PARAM2 to it.
Example 416
create_operating_condition nom_pvt
…
add_opc_statistical_parameter nom_pvt –intercell PARAM1 PARAM2
set_opc_parameter_distribution nom_pvt –points { -0.33 0.33 }\
-nominal_value 0.0 –variation_range { -1.0 1.0 } –
distribution_type \ gaussian –sigma 0.33 PARAM1
set_opc_parameter_distribution nom_pvt –points { 0.25 0.27 } \
-nominal_value 0.26 –variation_range { 0.23 0.30 }
–distribution_type linear –signal 0.01 PARAM2
See Also
add_opc_statistical_parameter
configure
create_operating_condition
model
set_opc_process
Sets the SPICE process model information for an operating condition.
Syntax
set_opc_process op_cond_name process_list
Arguments
op_cond_name
Name of an operating condition created by
create_operating_condition.
process_list
Tcl list of lines added to the SPICE deck that loads the appropriate models.
Description
This command adds a list of lines to an operating condition that will be added to
the generated SPICE deck(s). The lines must be legal for the SPICE simulator
being used, load the necessary process models, and be provided as a Tcl list.
Examples
The following commands create the operating condition worst and add the lines
needed to load the specified process models.
Example 417
//Case 1 (SPICE-Compatible Syntax)
create_operating_condition worst
set_opc_process worst {
{.inc "/projects/spice_models/13nm_process.params"}
{.lib "/projects/spice_models/13nm_process.lib" SS}
{.lib "/projects/spice_models/13nm_process.lib" SS_33}
}
//Case 2 (Spectre-Compatible Syntax)
create_operating_condition worst
set_opc_process worst {
{include "/projects/spice_models/13nm_process.params"}
{include "/projects/spice_models/13nm_process.lib" section=SS}
{include "/projects/spice_models/13nm_process.lib" SS_33}
}
See Also
add_latch
create_operating_condition
set_opc_temperature
set_opc_temperature
This command sets the junction temperature setting for an operating condition.
Syntax
set_opc_temperature op_cond_name temperature
Arguments
op_cond_name
The name of an operating condition created with the command
create_operating_condition.
temperature
The junction temperature setting for the operating condition in degrees C.
Description
This command sets the temperature setting for an operating condition. This
temperature will be used in any simulations of cells at this operating condition.
Examples
The following commands create an operating condition named worst and set
the temperature to 125 degrees Celsius:
Example 418
create_operating_condition worst
set_opc_temperature worst 125
See Also
add_latch
create_operating_condition
set_opc_parameter_distribution
set_opc_default_voltage
This command sets the default voltage for any operating condition in cases
when there are multi-voltage rails used in the library.
Syntax
set_opc_default_voltage opc_name voltage
Arguments
opc_name
The name of an operating condition defined by
create_operating_condition.
voltage
The default voltage (in Volts) for the library.
Description
This command is used when multi-voltage Liberty models are being generated
to specify the default library voltage. The voltage specified should be the same
value as one of the supplies defined for the operating condition (set
add_opc_supplies). This is modeled as the library voltage. The default
setting is to select the smallest positive supply defined for the library.
For example, if supplies VDD, VDDPAD, and VSS are defined as 1.1V, 3.3V, and
0V, respectively, the default library voltage is 1.1V.
See Also
add_opc_supplies
create_operating_condition
set_output_differential
This command defines a pair of differential output pins.
Syntax
set_output_differential pos_output neg_output
[-absolute_separation value]
[-relative_separation value]
Arguments
[-absolute_separation]
Specifies the voltage difference between the differential pair. Defaults is 0.
[-relative_separation]
Specifies the relative difference between the differential pair in terms of the
percentage of the final voltage separation between the differential pins.
Defaults is 0.
pos_output
Name of the positive output pin.
neg_output
Name of the negative output pin.
Description
The set_output_differential command causes SiliconSmart to treat the pair of
output pins as differential pins. This means that they are expected to transition
as a pair and delays are measured to the crossover point of the signals instead
of to the standard delay threshold. This means that differential pairs with a
voltage swing smaller than the typical rail voltages are handled correctly.
Examples
The following commands define a simple differential output buffer:
Example 419
add_function PADP A
add_function PADN !A
set_output_differential PADP PADN
See Also
add_function
define_differential_receiver
set_parameter
This command sets the value of a configuration parameter.
Syntax
set_parameter [block] name value
Arguments
block
The optional name of a parameter block. Defaults to default.
name
The name of the parameter.
Description
This command sets the value of a configuration parameter in the specified
parameter block. If the parameter has already been set, it is overwritten.
See Also
get_parameter
list_parameter_blocks
list_parameters
set_pins_to_bundle_map
This command, when used from the instance file, specifies the mapping from
the bundle name to the corresponding set of pin names (individual bits).
Syntax
set_pins_to_bundle_map -bundle bundle_name -pins pin_list
[-unsplit]
Arguments
bundle
Name of the bundle.
pins
List of pin names corresponding to the bundle.
unsplit
Unsplit individual bits/pin names.
Description
This command has the following behavior:
■
The -unsplit option must be used when the when conditions contain
references to the individual bits but the final model is constructed using only
at the bundle level.
■
If specified along with this command, the liberty_bundle_as_pins
takes precedence. The bits will be split out and the -unsplit option will be
ignored.
■
If the bits are specified individually in the instance file (for example:
add_pin D1, D2, D3 ...) then the bits are always split out in the Liberty
model even if the -unsplit option was specified.
Examples
Example 420
set_pins_to_bundle_map -bundle Q -pins { Q0 Q1 }
set_pins_to_bundle_map -bundle D -pins { D0 D1 } -unsplit
See Also
liberty_bundle_as_pins
set_pintype_parameter
This command sets a parameter in a defined pin type.
Syntax
set_pintype_parameter pintype name value
Arguments
pintype
The name of a pin type.
name
The name of the parameter to be set.
value
The value of the parameter being set.
Description
This command sets the value of a parameter in a pin type. If the pin type does
not exist, it is created. If the parameter already exists it is overwritten.
See Also
get_pintype_parameter
list_pintype_parameters
set_parameter
set_points_boundary_distance
This command specify how neighboring cell distances are varied to
characterize channel length variation (using litho simulation)
Syntax
set_points_boundary_distance boundary values
Arguments
boundary
This can be one of lower_left, upper_left, lower_right and
upper_right.
values
The list of boundary distances used for litho characterization.
Examples
Example 421
set_points_boundary_distance lower_left {450 460 470 480 490 500
510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660
670 680 690 700 710 720 730 740 750 760 770 780 790}
set_points_boundary_distance upper_left {450 460 470 480 490 500
510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660
670 680 690 700 710 720 730 740 750 760 770 780 790}
set_points_boundary_distance lower_right {450 460 470 480 490 500
510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660
670 680 690 700 710 720 730 740 750 760 770 780 790}
set_points_boundary_distance upper_right {450 460 470 480 490 500
510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660
670 680 690 700 710 720 730 740 750 760 770 780 790}
The previous example says that the four boundary distances are varied from
450nm to 790nm in steps of 10nm to do litho characterization.
See Also
set_boundary_distance
set_stimulus_node
This command specifies a node in a harness network that stimulus is applied to
instead of driving an input pin directly.
Syntax
set_stimulus_node harness_name pin_name node_name
Arguments
harness_name
Name of a harness created with the command create_harness.
pin_name
Name of an input or bidirectional pin on the CUT to which the harness is
connected.
node_name
The name of a node in the harness network.
Description
When a harness is applied to the input pin of a cell, it is sometimes necessary
to change the location where the stimulus is injected. For example, if a
terminating resistor network is used, the driver for the input pin needs to drive a
node in the network instead of the input pin directly. This command specifies an
alternate node for the stimulus for an input pin. The specified node name must
be a node implicitly created in the network (that is, not another pin on the cell or
a voltage supply). Two pins should not have the same stimulus node.
Examples
The following commands create a JEDEC class 1 resistor termination harness
and apply it to the PAD pin (input) of a cell. The harness is applied to all delay
measurements and the stimulus is applied to the node node1 in the harness.
Example 422
create_harness jedec_class1
add_harness_elements jedec_class1 {
R RS PAD node1 25
R RT node1 VTT 25
C Cload PAD VSS cap_load
}
set_stimulus_node jedec_class1 PAD node1
set_sweep_parameter jadec_class1 -load PAD cap_load
set_config_opt -type delay -from PAD harness jedec_class1
See Also
add_harness_elements
create_harness
set_measurement_node
set_sweep_parameter
set_subckt_ports
This command specifies the order of the pins in the cell’s subcircuit in the netlist
file.
Syntax
set_subckt_ports pin_list
Arguments
pin_list
A list of pins and supply voltages in the order in which they appear in the
subcircuit definition.
Description
To generate the simulations to characterize a cell, SiliconSmart must know the
order of the pins that appear in the subcircuit definition of the cell in the
simulator netlist. (The file specified by the set_netlist_file command.) In
most cases SiliconSmart is able to parse this file and automatically determine
the ordering of the pins. The set_subckt_ports command is provided as a
fallback for cases where it is unable to do so.
The single argument to this command is a list of pins and supply voltages in the
order that they appear in the netlist file. The pins must have been created by
the add_pin command and supplies defined with add_opc_supplies.
Examples
If SiliconSmart were unable to parse a SPICE netlist file containing the
following subcircuit definition:
Example 423
.subckt Z A VSS VDD
See Also
add_opc_statistical_parameter
add_pin
set_sweep_parameter
This command specifies a parameter of a circuit element which is to be swept
over a range of values during characterization.
Syntax
set_sweep_parameter [-load pin] harness_name parameter
Arguments
harness_name
Name created with the command create_harness.
-load
Specifies that the parameter reflects the capacitive load of the pin. The pin
must be an output or bidirectional pin.
parameter
Name used as the value for a circuit element in the harness.
Description
This command specifies a parameter of a circuit element to be swept over a
range of values. Currently, you use this command to select a capacitor (by way
of specifying its parameter) to represent the capacitive load on the cell during
characterization. The option -load indicates that the parameter is to be swept
over the load range for the cell. See the parameters smallest_load and
largest_load for more information.
Examples
The following commands create a JEDEC class 1 resistor termination harness
and apply it to the pins DP and DM. The two capacitors, Cload_dp and
Cload_dm, will be swept over the load ranges for their respective pins.
Example 425
create_harness diff_harness
add_harness_elements diff_harness {
R DP_RS DP node1 25
R DP_RT node1 VTT 25
R DM_RS DM node2 25
R DM_RT node2 VTT 25
C Cload_dp DP VSS cap_load_dp
C Cload_dm DM VSS cap_load_dm
}
set_sweep_parameter jadec_class1 -load DP cap_load_dp
set_sweep_parameter jadec_class1 -load DM cap_load_dm
set_config_opt -type delay -from {DP DM} harness jedec_class1
See Also
add_harness_elements
create_harness
set_config_opt
set_measurement_node
set_sweep_parameter
status
This command returns the status (done/failed) of each cell in the
characterization database.
Syntax
status [-verbose] [-fail_only]
Returns
This command returns the following:
■
done – means that corresponding step was complete and clean for that cell.
■
failed – means that corresponding step for that cell has errors. More
information on the error can be found in the siliconsmart.log
■
An “*” following the status of a step name e.g., “model done*”, means that
this step was run multiple times and status is reported for the latest run.
Arguments
-verbose
Prints the status to the log file, with the last stage run being marked by an
asterisk.
-fail_only
Prints only cells with failing stages.
Description
The result of this command is returned as a tcl list of cells, with each major
stage of the characterization flow run, and the completion status. This can be
redirected in the shell to a file or variable for further processing.
Examples
Basic run:
status
Info: DFFX1 {import done configure done characterize done model
done*} INVX1 {characterize done*} OR2X1 {import done configure
done characterize done model done*} TLATNCAX3 {import done
configure done characterize failed model failed*}
Verbose run:
status -verbose
Info: Cell Status:
Info: DFFX1: import (done) configure (done) characterize
(done) model (done*)
Info: INVX1: characterize (done*)
Info: OR2X1: import (done) configure (done) characterize
(done) model (done*)
Info: TLATNCAX3: import (done) configure (done) characterize
(failed) model (failed*)
Info: DFFX1 {import done configure done characterize done model
done*} INVX1 {characterize done*} OR2X1 {import done configure
done characterize done model done*} TLATNCAX3 {import done
configure done characterize failed model failed*}
test_internal_nodes_for_constraint
If you already have some knowledge on the potential candidates for selected
nodes (Refer to the find_potential_internal_nodes command) that
can be classified as the actual internal bit cell of the memory where the data is
stored, This command can be used to run constraint tests on each of these
nodes to find out the actual internal node among the lot.
Syntax
test_internal_nodes_for_constraint -node_list
list_of_nodes [-match expression]
[-mem_int_node dummy_name]
Arguments
-node_list
Specifies the list of potential candidates for the internal node.
-match
Specifies a Tcl regular expression to run only those variant of constraint arcs
that match the regular expression. This can be used when you want to run
a small set of constraint arcs to find out the potential internal nodes.
-mem_int_node
Specifies the dummy node that is used in the instance file to assign the
actual SPICE node name to the internal node or register. The default value
of this argument is mem_int_node.
Examples
If you want to run all the constraint tests to select the actual internal node from
a subset of nodes returned by the command
find_potential_internal_nodes, this command should be used as
follows:
Example 426
test_internal_nodes_for_constraint -node_list {n1 n2 n3 }
You want to test nodes a and b and wants to run only setup arcs to select the
internal nodes, this command can be used as follows:
Example 428
test_internal_nodes_for_constraint -node_list {a b} -match
setup__* -mem_int_node dummy_node
See Also
find_internal_nodes_for_constraint
validate_hdl
HDL validation intends to cross-verify the correctness of the HDL models to the
Liberty timing model. This in turn cross checks SiliconSmart and the STA tool
for consistency in the timing model.
Syntax
validate_hdl [-verilog | -vhdl] -lib_file liberty_file
-hdl_file hdl_file [-skip_sdf] [-skip_hdl_sim] [-no_map]
Arguments
-fast
Distributes the Verilog simulation and the VCD and SDF mapping process
across the LSF/machine, based on the user’s job scheduler settings.
-hdl_file
Path to hdl file (verilog).
-lib_file
Path to .lib file.
-no_map
This switch is optional and instructs the validation tool to not run the VCD
and SDF timing verification correlation flow to verify back-annotation.
-skip_hdl_sim
This switch is optional and is specified when you want to skip SDF back-
annotation.
-skip_sdf
This switch is optional and is specified only when you want to skip SDF
generation, perhaps because of an already existing or generated SDF file.
-verilog | -vhdl
HDL netlist types that are to be validated.
Description
HDL validation is comprised of the following phases:
■
SDF generation
■
HDL simulation
■
functional verification
■
Timing verification
See the Running HDL Validation section for more information on these
validation phases.
Parameters
Define the following parameters in either the validation block in configure.tcl or
interactive:
generate_sdf_cmd_file [get_install_path]/etc/validation/validate_hdl/
generate_sdf.tcl. Here, get_install_path is a
command that returns install path for SiliconSmart.
hdl_target_simulator Verilog.
Example 429
validate_hdl -verilog -lib_file liberty_fast.lib -hdl_file
verilog.v
The Verilog reports and log files are stored in the following directory structure:
charpt/validation/validate_hdl/verilog
Query Commands
Query commands are used to find useful data from the tool. This data can be
used as information echoed to the user or within the Tcl environment for
automated processing. The following query commands are available:
■
get_cells
■
get_config_opt
■
get_location
■
get_parameter
■
get_pintype_parameter
■
get_version_info
■
help
■
list_parameter_blocks
■
list_parameters
■
list_pintype_parameters
■
list_pintypes
■
print_options
■
report_drivers
■
report_pruning
■
report_sim_results
■
report_sim_stats
■
write_config_opts
get_cells
This command returns a list of the names of all imported cells.
Syntax
get_cells [cells]
Arguments
cells
One or more cell names or wildcard expressions specifying the cells to be
characterized. If the keyword all is specified, all cells are characterized.
The default is all.
Description
This command returns a list of cells that have been imported in the current
characterization directory. The default is to return all cells. A subset of cells can
be selected by specifying cell names or wildcard expressions (Tcl 'glob'
expressions) selecting one or more cells.
For example, the following command returns a list of cells containing the cell
USB1_1 and all cells starting with LVDS:
Example 430
io_shell> get_cells USB1_1 LVDS*
Errors
An error message is displayed if set_location has not been executed prior
to invoking get_cells.
See Also
set_location
import
get_config_opt
This command returns the value of the specified parameter in the context
described by the flags.
Syntax
get_config_opt
-cell cell
[-type (decap | decap_ccs | delay | zen | zdis | energy |
timing | setup | hold | recovery | asynch_recover | removal
| asynch_removal | leakage_power | constraint | cmpw |
ncmpw | mpw | input_capacitance | nochange | nochange_hold
| nochange_setup | noise | noise_iv | noise_immunity |
noise_prop | ccs_noise | ibis_iv | ibis_vt |
statistical_delay| stat_leakage_power | statistical_hold
| statistical_setup)]
get_location
This command returns the current characterization directory location.
Syntax
get_location
Description
This command returns the current characterization directory. If set_location
has not been called, get_location returns nothing.
See Also
set_location
get_parameter
This command returns the value of a configuration parameter.
Syntax
get_parameter [-quiet] [-default value] [block] name
Arguments
-quiet
Suppresses the error reported if the parameter does not exist.
-default
If parameter name does not exist, value is returned.
block
The optional name of a parameter block. This defaults to default.
name
The name of the parameter.
Description
This command returns the value of parameter name in parameter block block. If
the parameter has not been set, an error is returned unless -quiet or
-default has been specified.
If -quiet is selected and the parameter has not been set, an empty string is
returned. If -default is specified and the parameter has not been set, value
is returned.
Errors
An error message is displayed if the parameter does not exist.
See Also
get_pintype_parameter
list_parameter_blocks
list_parameters
set_parameter
get_pintype_parameter
This command returns the value of a parameter for a pin type definition.
Syntax
get_pintype_parameter [-quiet] pintype name
Arguments
-quiet
Suppresses the error normally generated if the parameter does not exist.
pintype
The name of a pin type defined with the pintype command.
name
The name of a parameter defined in specified pin type.
Description
This command returns the value of a parameter defined in a pin type. If the
parameter has not been set, an error is required unless –quiet is specified. If
the parameter does not exist and –quiet is given the return value is an empty
string.
Errors
An error message is displayed if the parameter does not exist, unless
suppressed with –quiet.
See Also
get_parameter
list_parameter_blocks
list_parameters
list_pintype_parameters
list_pintypes
get_version_info
This command returns information about the current version of SiliconSmart.
Syntax
get_version_info
Description
This command returns a Tcl list with information about the current executable.
The list elements are: executable name, release number, build number, and
build date as shown in the following example:
Example 431
siliconsmart 2005.07 717 "Tue Jun 21 01:27:20 CDT 2005"
help
This command displays help text.
Syntax
help [command]
Arguments
command
A SiliconSmart command name or wildcard pattern.
Description
This command displays help text for the specified command. The command
name can be a wildcard pattern, such as get_*, in which case help is
displayed for all matching commands. The default is to display help for all
commands. If no command is supplied, then a list of all available commands is
listed along with the usage.
list_parameter_blocks
This command returns a list of the defined parameter blocks.
Syntax
list_parameter_blocks [pattern]
Arguments
pattern
A wildcard against which each parameter block name is matched. The
default is to match all names (*).
Description
This command returns a list of the names of all defined parameter blocks. If
pattern is specified, only the parameter block names matching it are returned.
See Also
get_parameter
list_parameters
list_pintype_parameters
list_pintypes
list_parameters
This command lists the configuration parameters in the given block.
Syntax
list_parameters block pattern
list_parameters pattern
list_parameters
Arguments
block
The optional name of a parameter block. This defaults to default.
pattern
A wildcard pattern used to match the parameter names. The default is to
match all parameter names (*).
Description
This command returns a list of the parameters defined in a parameter block. If
the pattern is specified, only those parameter names matching the pattern are
returned. If only a single argument is given, the argument is assumed to be a
pattern and the block name defaults to default.
Errors
An error message is displayed if the parameter block does not exist.
See Also
get_parameter
list_parameter_blocks
list_pintype_parameters
list_pintypes
list_pintype_parameters
This command returns a list of the names of all parameters defined for a pin
type.
Syntax
list_pintype_parameters pintype [pattern]
Arguments
pintype
The name of a defined pin type.
pattern
An optional pattern against which each parameter name is compared.
Defaults to matching all names (*).
Description
Returns a list of the names of all parameters defined in a pin type. If pattern is
specified, only the parameter names matching the pattern are returned. The
pattern argument is a wildcard expression and defaults to matching everything
(*).
See Also
get_parameter
list_parameter_blocks
list_parameters
list_pintypes
list_pintypes
This command returns a list of the names of the defined pin types.
Syntax
list_pintypes [pattern]
Arguments
pattern
A wildcard against which each pin type name is matched. The default is to
match all names (*).
Description
This command returns a list of the names of all defined pin types. If pattern is
specified, only those names matching the pattern are returned.
See Also
get_parameter
list_parameter_blocks
list_parameters
list_pintype_parameters
print_options
This command requires that the characterization directory be specified using
set_location. All active settings specified using set_config_opt are
listed, in the context that they are set. The output of the command are printed to
the tcl shell output, and can be redirected to a file or variable using the CCI
redirect command.
This command takes no arguments.
Syntax
print_options
report_drivers
This command generates a textual report describing the driver cells that have
been imported.
Syntax
report_drivers [-verbose] [pattern]
Arguments
-verbose
Generates a more detailed description of each driver cell.
pattern
An optional wildcard pattern against which each driver cell name is
matched. Only matching names are reported.
Description
The report_drivers command generates a textual description of the driver
cells that have been imported. The basic report displays the cell, the selected
arc, and the SPICE netlist file. If –verbose is specified, the report also
displays the conditions under which each cell has been characterized. The
conditions reflect the process, voltage, and temperature variations in the
simulations where the driver has been used.
See Also
import_driver
remove_driver
report_pruning
Reports the percentage of devices pruned for each arc for memory
characterization.
Syntax
report_pruning [-output file_name]
Arguments
-output
Specifies the output filename. If not specified, the report will be written on
the standard output.
report_sim_results
This command presents the SOF file in a readable format. The SOF file format
has fast read/write capabilities and a small file size. Because the .sof file is not
human readable, this command gets an ASCII table format report of the results.
Syntax
report_sim_results -cell cell_pattern|all [-sof
sof_pattern] [-tcl]|[-outputDir directory]
Arguments
cell
Text pattern of the cells to be processed
sof
Text pattern of the SOFs to be processed
outputDir
Redirects dump file to the specified output directory
tcl
Returns a Tcl list as the result
Description
The mandatory -cell option is used to specify the cells to be processed. The
-sof pattern filters the list of SOFs to be dumped. If this is not specified, all
SOF files are processed. For each name.sof file a corresponding
name.sof_dump is created. The default output directory is the same as the
location of the SOF files. This can be overridden by specifying the
-outputDir option. The -tcl option is provided if you want to capture the
results in a Tcl list and process it later. The options -tcl and -outputDir are
mutually exclusive.
Example 432
report_sim_results -cell BUF
report_sim_results -cell AND2 -sof delay__A1__hl__Z__hl__ACQ_1
report_sim_results -cell DFF* -sof energy* -outputDir
[get_location]/reports
array set myArr [report_sim_results -cell DFFX1 -sof
delay__D__lh__Q__lh__ACQ_1 -tcl]
report_sim_stats
This command runs a report for specified cells and precharacterization
simulation. If nothing is specified, it runs the report for all cells. The output goes
to the screen unless you specify -output and direct it to a file.
Syntax
Usage: report_sim_stats [-characterize] [-precharacterize]
[-import] [-configure] [-model] [-preconfigure]
[-verbose] [-output filename] [cells...]
Arguments
verbose
Generates a report on a per-simulation basis. The default is per-cell.
output filename
Redirects output to a file instead of the screen.
cells
The list of cells to report on.
import
Reports runtime for import.
configure
Reports runtime for configure.
model
Reports runtime for model.
preconfigure
Reports runtime for configure done during precharacterization.
precharacterize
Reports runtime statistics for precharacterization.
characterize
Reports runtime for characterization.
Description
If no cells are specified, it runs the report for all cells. The output goes to the
screen unless you specify –output and direct it to a file. The standard output
looks like this:
Example 433
Measurement SiS Time Child Time Wall Time # Sims
--------------------------------- --------- ---------- -------
-- ---
Total for cell MY_IO_PAD 174.30 9257.68 9608.03 223
--------------------------------- --------- ---------- -------
-- ---
Total 174.30 9257.68 9608.03 223
In the first table, the column SiS Time shows the number of CPU seconds
consumed by SiliconSmart to generate the simulation(s) and process the
results. The column Child Time shows the number of CPU seconds consumed
by all child processes. Primarily, this is the simulator, but also includes the
processes necessary to compress and archive the results if archiving is
enabled. Notice that both of these columns are in CPU seconds, which exclude
I/O wait time or time consumed by other processes running on the same CPU.
These times correspond to the numerical values returned by the times() system
call from sys/times.h, where Child Time is the sum of all child processes’
system and user times, and SiS Time is the sum of the SiliconSmart system
and user times.
The column Wall Time shows the total elapsed time from the start of the
acquisition to the end. This is the sum of the SiS Time and Child Time columns
plus any time in which CPU cycles were not consumed, such as when waiting
for I/O or when other processes were consuming the CPU.
The column # Sims shows the number of simulations performed. This is the
number of times the simulator was invoked. For most acquisitions there will be
one simulation. However, for constraints or when multiple operating conditions
are being captured together, there will be multiple simulations per acquisition.
In the summary by host (second) table, the Wall Time and # Sims mean the
same as in the main table, but are summarized by host. Because SiliconSmart
utilizes the underlying functionality of the simulator to ascertain the execution
hosts, this feature will only work with certain simulators, notably HSPICE. No
table will be presented if the functionality is not available. The # Acqs is the
number of acquisitions performed. A single acquisition may correspond to
multiple simulations, as is the case with optimizations like setup and hold.
The third table contains the same columns as the main table, but summarized
by the type of measurement performed.
The -verbose switch includes the data in the main table displayed for each
arc as well as a total for each cell, including begin and end times for each arc's
execution.
Example 434
Characterization time report:
Measurement SiS Time Child Time Wall Time # Sims Start Time End Time
----------- ------- ---------- -------- ------ ------------
-------
delay__A__hl__IO__hl__ACQ_1
0.72 63.44 65.16 1 09/18/06 10:52:34
09/18/06 10:53:39
delay__A__hl__JTAGAZ__hl__ACQ_1
0.89 28.65 30.37 1 09/18/06 10:52:44
09/18/06 10:53:14
delay__A__hl__JTAGZI__hl__ACQ_1
0.95 61.89 63.48 1 09/18/06 10:52:45
09/18/06 10:53:48
delay__A__hl__PO__lh__ACQ_1
0.75 62.80 64.15 1 09/18/06 10:52:56
09/18/06 10:54:00
.
.
.
Example 435
zen__TN__lh__IO__lzh__ACQ_1
2.54 63.10 66.50 1 09/18/06 10:50:49
09/18/06 10:51:55
Total for cell MY_IO_PAD
174.30 9257.68 9608.03 223
------- ------ ------- -------- ------
Total 174.30 9257.68 9608.03 223
Example 436
Summary by measurement type:
Measurement SiS Time Child Time Wall Time # Sims # Acqs
------------------------ --------- ---------- --------- ----
-- ---
delay 53.03 3035.90 3144.78 68 68
energy 75.36 5024.97 5192.76 122 122
leakage_power 0.14 7.39 8.09 1 1
zdis 3.27 251.21 264.48 16 16
zen 42.50 938.21 997.92 16 16
The report is formatted so that you can write it to a file and import it into a
standard spreadsheet or other analysis tool. For example, to import it into
Microsoft Excel, go to Data>Import External Data>Import Data. It will
recognize it as a fixed-width file and figure out the columns correctly. You can
then use the spreadsheet to compute percentages, averages, min/max, or
integrals.
The report_sim_stats command is provided to help diagnose cases where
SiliconSmart may not be performing as efficiently as possible.
The most common situation is a network issue that causes the total elapsed
time for a simulation to be much longer than the number of CPU seconds
indicate. This can be a result of slow access to disk storage, slow response
from SiliconSmart or the simulator's license server, or other processes sharing
the CPU. This case can be identified by comparing the sum of the SiS Time
and CPU Times to the Wall time for a given acquisition or cell. If the Wall Time
exceeds the sum of the CPU times by more than 10-20%, there is probably an
issue affecting the individual jobs.
One example of this occurs when the parameter simulation_tmpdir is set to a
network-mounted disk instead of a local disk (such as /tmp). This parameter
specifies the location used for all temporary files and the increased latency in
accessing network storage can reduce performance.
A second check to make is to compare the total wall time for an entire
characterization run against the elapsed time of the characterize command
itself. The sum of the wall times of the acquisitions measures the total time that
SiliconSmart was actively running the characterization tasks. If this total when
divided by the number of CPUs used (run_list_maxsize parameter) is more
than 10-15% less than the elapsed time for the characterize command, the
system is not running efficiently. This is usually due to not getting the total
number of CPUs desired, either because other users are competing for the
write_config_opts
This command writes all of the configuration options set at the global level to
the screen or a file.
Syntax
write_config_opts [-output file]
Arguments
-output
Specifies the name of a file to write the output to.
Description
The write_config_opts command is used to write out all of the
configuration options that have been set via the set_config_opt command
at the global level (outside a cell’s instance file). The display is in the form of
set_config_opt commands that can be reloaded by using the Tcl source
command. The commands are sorted by the option being set, though the order
of the individual settings is preserved. This command does not write out any
settings made by commands in a cell’s instance file.
The –output switch can be used to direct the output to a file. For example:
Example 437
write_config_opts –output configs_opts.tcl
See Also
clear_config_opts
set_config_opt
set_parameter
set_pintype_parameter
Processing Commands
The processing commands perform characterization and generate models or
reports. The following processing commands are available:
■
characterize
■
compare_library
■
delete_model
■
generate_datasheet
■
import
■
import_driver
■
model
■
precharacterize
■
qualify_library
characterize
This command performs the simulations needed to characterize timing, power,
and/or specification-specific electrical behaviors.
Syntax
characterize [-fast] [-match expression] cells
Arguments
-fast
Characterizes in parallel, via LSF, NC, or SunGrid job schedulers. This
option is enabled by default and does not need to be specified.
-match
This switch specifies to run selective simulations. It accepts wildcards in the
Tcl regexp format. For example:
Example 438
characterize –match {setup__*|hold__*} cells
cells
Cells to characterize.
Description
This command performs the simulations needed to characterize timing, and
power for a set of cells. The simulations associated with characterization can
be distributed over various machines on a network with load sharing software.
Distributed simulations can be controlled with the appropriate parameters in the
configure.tcl file.
Errors
An error message is displayed if set_location is not executed prior to
invoking the characterize command. An error message is also displayed if
the configure command has not been run. A warning message is displayed if
the cell control file has been modified more recently than the templates.
See Also
configure
generate_datasheet
model
report_drivers
set_location
compare_library
Performs structural comparison of two Liberty files. See Comparing Liberty
Files with compare_library for more information.
Syntax
compare_library -reference ref.lib -test test.lib
[-output_dir dir] [-tolerances] [-value] [-user_defined]
[-verbose] [-gui] [-all_points] [-compare_ccst_voltage]
[-sigma_error_1] [-max_rel_diff double] [-cells cells]
[-skip_cells cells] [-ignore_groups liberty_groups]
[-compare_values liberty_groups]
Arguments
[-reference ref.lib]
Reference library path.
[-test test.lib]
Test library path.
[-output_dir location]
Specifies the output directory location.
[-tolerances]
Prints current tolerance settings and exit.
[-value]
Compare numerical data values.
[-verbose]
Specifies verbose mode.
[-gui]
Displays a GUI to examine results after the comparison.
[-all_points]
Writes all points to .csv file. Expect a runtime increase.
[-compare_ccst_voltage]
Compare CCS-timing voltage from CCS output_current models.
[-sigma_error_1]
Use normalized 3-sigma difference formula to compute relative error of
sigma values.
[-max_rel_diff double]
Maximum absolute relative difference that is not an outlier (-1 to deactivate).
[-cells cells]
List of cells to compare.
[-skip_cells cells]
List of cells to skip.
[-ignore_groups groups]
List of Liberty groups to ignore. The special keywords
ccs|ccst|ccsn|ccsp|lvf are supported.
[-compare_values groups]
List of Liberty groups whose values are compared. The special keywords
ccs|ccst|ccsn|ccsp|lvf are supported.)
[-user_defined]
Includes user-defined attributes from the libraries in the comparison.
delete_model
Deletes specified Liberty models.
Syntax
delete_model -input_lib_path -output_lib_path [-nldm]
[-nlpm] [-ccs_timing] [-ccs_power] [-css_noise]
[-ecsm_timing] [-em] [-lvf]
Arguments
-input_lib_path
Input library path to .lib or .lib.gz.
-output_lib_path
Output library path.
-nldm
Delete nldm model.
-nlpm
Delete nlpm model.
-ccs_timing
Delete ccs_timing model.
-ccs_power
Delete ccs_power model.
-ccs_noise
Delete ccs_noise model.
-ecsm_timing
Delete ecsm_timing model.
-em
Delete electromigration model.
-lvf
Delete LVF data from Liberty models.
generate_datasheet
Generates an HTML data sheet describing a cells digital timing behavior.
Syntax
generate_datasheet [-output outdir] [-fast]
[-parameter_blocks param_block_list]
[-operating_condition opc_list]
[-merge] [-file filename] [cells]
Arguments
cells
One or more cell names or wildcard expressions selecting the cells to be
generated. The keyword all can be used to select all cells. The default is
all.
fast
Allows jobs to run in parallel using the LSF/Grid queue.
merge
Use this to merge all of the generated data sheets.
operating_condition
Specifies a list of operating conditions from which cells will be selected
(such as best and worst). Each operating condition corresponds to one
PVT in the characterization. If omitted, all available operating conditions are
used.
output
Specifies the target directory for all data sheet files. Defaults to the char_dir/
reports/datasheets directory.
parameter_blocks
Specifies one or more parameter blocks from which all report parameters
will be obtained. It defaults to ioreport.
file
Writes the generated html datasheet as filename. Use this only with the
-merge option.
Description
This command can succeed only if a valid characterization directory location is
active, otherwise an error will be returned. You can start using an established
characterization location by using the set_location command.
For multi-corner characterization points, the command will generate the content
for all the pvts in a file named multCorner.html. The data corresponding to each
pvt is written under the pvt heading.
Examples
Example 439
generate_datasheet -output teralib/ds –operating_condition typ
See Also
add_pin
model
report_drivers
import
This command imports a set of cells from a SiliconSmart characterization
directory or Liberty model into the current characterization directory.
Syntax
import [-liberty liberty_file]
[-netlist netlist_file] [-recognize] [-overwrite]
[-configure] [-fast] [-flatten] [-inouts inouts]
[-inputs inputs] [-outputs outputs] [-powers powers]
[-netlist_dir dir] [-no_copy 0|1] [-sensitization]
[-extension netlist_ext]
[-ideal_netlist_ext netlist_ext][-rechar]
[-state_independent] [-use_default_slews]
[-use_default_loads] [-use_constraint_seeds]
[-use_default_whens] [-compress_flops]
[-write_internal_nodes] [-noheader] [-skeleton]
[-nocellmodel] [cells]
Arguments
cells
One or more cell names or wildcard patterns that specify the cell or cells to
be characterized. If all is specified, all cells are characterized. The default
is all.
char_point
Specifies the path to a SiliconSmart characterization directory from which
the cell(s) will be imported.
clocks
When -recognized is used and -liberty is not used, you must set the
clock pin for the sequential cells with this option.
compress_flops
Identifies a flop with two latches. The default is to report two latches. This is
only used with -recognize.
configure
This option causes the configure.tcl to be overwritten with one containing
the default values from the SiliconSmart characterization directory. Any
changes to the existing configure.tcl will be lost.
extension
Specifies the file name extension for the file netlist. This is used when
generating the cell instance files when importing from a Liberty file. If used
with the -netlist_dir switch it also specifies the extension of the files to
be copied.
flatten
When -recognize is used and the SPICE netlist is hierarchical,
SiliconSmart needs this option to detect the correct port’s direction.
fast
Distributes the import process across the LSF/machine, based on the user’s
job scheduler settings.
grounds
When -recognize is used, SiliconSmart will use the ground names in the
configure.tcl file by default. You can define the ground names using this
option and this will override the ground names in configure.tcl for function
recognition.
hierarchical
Used only for back-annotation for memories. Specifies that the CDL netlist
is hierarchical; it will be flattened internally and then used for pruning and
finding the internal node.
ideal_netlist_ext
Specifies the file name extension for the ideal netlists. This is used for
electromigration (EM) characterization when performing CustomSim
Reliability Analysis (XA RA) to get current threshold information on resistive
wires. It is used with the -netlist_dir switch to specify the location
where the ideal netlist files can be found.
inouts
When -recognize is used, SiliconSmart will detect the inout ports. You
can define the inout ports using this option manually.
inputs
When -recognize is used, SiliconSmart will detect the input ports. You
can define the input ports using this option manually.
liberty
Specifies the path to a Liberty (.lib) file from which the cell(s) will be
imported.
model_file
When -recognize is used, SiliconSmart will read the process model files
defined in the configure.tcl file, compact it and generate a process model file
for function recognition automatically. You can set the process model file
manually for function recognition with this option.
netlist
Specifies the path to a SPICE netlist file to import a cell from.
netlist_dir
When used with the -liberty switch this option causes SiliconSmart to
copy a netlist file from the given directory for each cell to be imported. The
netlist file extension will be automatically determined unless specified with
the -extension switch.
no_buffer
When -recognize is used, SiliconSmart must modify some parts of the
netlist to detect the correct function using buffer insertion. The buffer will not
be inserted if this option is used.
-no_copy
By default, the SiliconSmart tool will create symbolic links to all of the
specified netlist files instead of copying the netlist files from the source to the
netlist’s directory. If you want to copy the cell netlist files over, specify
-no_copy 0 after the import -netlist_dir command.
nocellmodel
Indicates not to generate cell.lib(s) in charpt/models/liberty/cellmodels.
noheader
Indicates not to generate header.lib in charpt/models/liberty/cellmodels.
outputs
When -recognize is used, SiliconSmart will detect the output ports. You
can define the output ports using this option manually.
overwrite
Forces SiliconSmart to overwrite existing cell instance files. The default is to
update only the timing model data.
powers
When -recognize is used, SiliconSmart will use the power names in the
configure.tcl file. You can define the power names using this option and this
will override the power names in configure.tcl for the function recognition.
rechar
Specifies to automatically import the operating conditions, automatically
create pintypes, and create a skeleton rechar.tcl into the char_point/config
directory.
recognize
Reads the SPICE netlist(s) and detects the function(s) automatically.
sensitization
Specifies to read sensitization vector information from the reference Liberty
and automatically generate instance files with an add_user_stimulus
based on the sensitization vector information.
shared_loop_latches
There are some special kinds of sequential cells in which two latches share
a state loop. In this case, SiliconSmart generates the state tables using this
option. Used with -recognize.
skeleton
For use with recharacterization, discards all timing, constraint,
internal_power, and CCS timing/power/noise tables from the reference
Liberty.
state_independent
Configures only a single state for the arc. By default, the import command
configures the instance files for imported cells to characterize all of the arc
states (when conditions) found in the imported timing models.
use_constraint_seeds
Enables the SiliconSmart tool to use constraint data in an imported library
as seeds.
use_default_loads
Configures the instance files for imported cells to use the default slew
ranges from the pin type for each pin. By default the exact slew points from
the transition tables for the timing models are preserved.
use_default_slews
Configures the instance files for imported cells to use the default slew
ranges from the pin type for each pin. By default the exact slew points from
the transition tables for the timing models are preserved.
use_default_whens
Suppresses the generation of set_config_opt commands setting
state_partitions settings. This differs from -state_independent, which
sets state_partions to 1 for all arcs in the original .lib file.
write_internal_nodes
Write corresponding SPICE nodes for the internal and output nodes. Use
together with -recognize.
Description
This command imports one or more cells from a SiliconSmart characterization
directory, Liberty file, or SPICE netlist. In order for a cell to be used with
SiliconSmart it must have an instance file which describes its behavior, a timing
model in Liberty format, and a SPICE netlist. These files can be imported from
a variety of sources.
The -configure switch can be used with to generate a configure.tcl file
containing the configuration information from SiliconSmart. This is a convenient
way to import settings such as which simulator to use and how to setup the
load sharing system.
The -liberty switch causes SiliconSmart to load the library and import cells
from it. The library provides enough information to generate the cell's instance
file and the timing models. The instance file is only created if one does not
already exists. The timing model is always overwritten. The SPICE netlist must
be copied in use the -netlist_dir switch or by manually copying the files to
the char_dir/netlists directory. SiliconSmart will attempt to automatically
determine the extension of the cell netlists in the directory provided. You can
specify an extension with the -extension switch.
The -netlist switch imports a single SPICE netlist and copies it into the
char_dir/netlists directory. A template of an instance file is created with the pins
from the netlist. You must fill in the behavioral information and import a timing
model for the cell using the -liberty switch.
By default SiliconSmart will not overwrite a cell's instance file when importing a
cell because these files often contain user customizations. The -overwrite
switch overrides this behavior and causes the file to be overwritten.
The remaining options, -state_independent, -use_default_slews,
-use_default_loads, and -use_constraint_seeds control how each
cell's instance file is generated when importing from SiliconSmart or a Liberty
file. The -state_independent option ignores imported arc states (when
conditions) and characterizes the arc according to only one state. This requires
less characterization time but is less accurate. The default is state dependent
and preserves each of the arc states (when conditions) in the instance file.
When the cell is characterized, each arc will be characterized at each of these
states.
SiliconSmart also defaults to preserving the slew and load indexes found in the
transition tables (rise_transition, fall_transition, etc.) of the timing
data. This ensures that the I/O data is characterized at the same points. If you
do not wish to preserve this data and instead use the ranges specified by the
pin type of each pin, use the switches -use_default_slews and/or
-use_default_loads.
The SiliconSmart tool will use the imported setup and hold tables as seeds to
the setup and hold measurements for faster characterization and more
accurate data.
Examples
This command can be used to reimport the timing models from the
characterization directory without touching the rest of the setup. This is useful
when the cells have been recharacterized for a different process model or at a
different voltage or temperature. The -configure command would usually be
omitted to avoid overwriting the configure.tcl file.
Cells can also be imported from a Liberty file. This command imports all of the
cells from a Liberty model and copies the netlists with the extension .cir out of
an existing directory:
Example 440
import -liberty lib90nm -netlist_dir lib90nm_netlists -extension
.cir
See Also
create
set_location
import_driver
This command imports a cell for use as an active driver.
Syntax
import_driver cell –netlist netlist -input_pin pin
-output_pin pin [-inverting] [-ground_pin] [-supply_pin]
[-characterize]
Arguments
cell
Name of the cell to be imported.
-input_pin
Specifies the name of the input pin on the driver cell. The name must match
a pin in the SPICE netlist.
-inverting
Specifies that an inverter is being used as the driver.
-netlist
Specifies the path to the cell netlist file.
-output_pin
Specifies the name of the output pin on the driver cell. The name must
match a pin in the SPICE netlist.
-characterize
Reloads and immediately characterizes the driver for all pin types that
reference the driver and for the active_pvts. That driver will not be
subsequently auto-characterized; it will only be characterized by a
subsequent import_driver command. If a driver is required for a pin
type/pvt combination which has not been characterized, the table from
another existing pin type/pvt combination will be used.
-ground_pin
Specifies a ground pin.
-supply_pin
Specifies a supply pin.
Description
The import_driver command imports a cell to be used as an active driver
model. Active driver cells are used to apply realistic waveforms to the inputs of
a cell-under-test. The –netlist option specifies the SPICE netlist file of the
driver cell. The –input_pin and –output_pin options specify the input and
output pins, respectively. When the cell is used as a driver, stimulus is applied
to the input pin and the output pin is connected to the input of the CUT.
To use a cell as an active driver, set the pin type parameter driver to the
name of the imported cell. When characterizing a CUT, SiliconSmart uses an
instance of the driver cell to generate the input waveforms. SiliconSmart
precharacterizes the driver cells to determine the necessary capacitive loading
to generate the necessary output slew rate at each require PVT combination.
The parameter driver_load_steps controls the resolution of this
precharacterization step.
See Also
add_pin
import
model
This command publishes the characterized data in the selected format.
Distributed simulations can be controlled with the appropriate parameters in the
configure.tcl file.
Syntax
model [-timing] [-ecsm] [-ccs] [-ccs_noise]
[-em] [-power] [-si] [aocv] [pocv] [lvf]
[-create_new_model] [-liberty | -verilog | -ibis]
[-lib_name lib_name] [-operating_condition pvt_name]
[-split] [-library_type (best | typ | worst)]
[-leakage_power_calc calc] [-skeleton]
[-output filename | -filename_path]
[-nocompact] [-no_state_table] [-no_backslash][cells]
Arguments
aocv
Enables AOCV model generation.
ccs
Includes CCS current waveform data in the generated model. (Applies to the
Liberty format only and implies -timing.)
ccs_noise
Includes CCS-noise models in the resulting .lib model. The model command
must either have the -timing switch as well or have an existing, imported
.lib with the appropriate time arcs.
ccs_power
Enables CCS power modeling.
ccs_va
Writes out the Synopsys CCS-VA model.
compact_ccs
Enables CCS compact model generation.
create_new_model
Creates a new model without any existing timing or power data or attributes.
The default is to use the imported Liberty file as a starting point for modeling.
If no Liberty file has been imported, a new model is created automatically.
ecsm
Includes ECSM voltage waveform data in the generated model. (Applies to
the Liberty format only and implies -timing.)
em
Includes electromigration (EM) data in the generated model.
ibis
Specifies the generation of IBIS I/O electrical models.
leakage_power_calc
Selects the method of determining the default cell leakage power value. The
value calc can be best, typ, or worst. The default is to use the type
specified by -library_type.
lib_name
Specifies a user-specified library name as a prefix to the pvt name to
construct a full library name. The library name will be lib_name_pvt_name,
and you will find the Liberty header as library(lib_name_pvt_name).
liberty
Specifies the Liberty modeling format (default).
library_type
Specifies the type of library to be generated. Enables SiliconSmart to select
the appropriate default arc. Possible values are best, typ, and worst.This
switch controls the how the default arcs are selected and how the cell
leakage power is computed. See Default Arc Modeling for more information
on using this switch.
lvf
Enables LVF model generation.
no_state_table
Removes the state table explicitly from .lib for any cell.
no_backslash
Specifies not to break a line mid-line with a backslash.
nocompact
Use this option if you want to merge multiple Liberty files later using the
merge command and get a compact CCS model or CCS-VA model. Use this
option only with CCS, CCS-VA or CCS power. For more details, see the
merge command.
nomerge
Specifies not to merge the final cell .libs into a single, final .lib file (the
default). If both -nomerge and -output switches are used, the -output
switch will be ignored.
operating_condition
Specifies one or more operating conditions for which models are to be
generated. If multiple operating condition names are specified, they must be
in a Tcl list.
output
Specifies a prefix for the model output file, the file extension and, for the
Liberty format, the operating condition name.
pocv
Enables POCV model generation.
power
Includes power data in the generated model (default).
recharacterize
Default mode; writes out the model based on user-provided Liberty model.
si
Includes the Liberty noise constructs in the generated model.
skeleton
For use with recharacterization, discards all timing, constraint,
internal_power, and CCS timing/power/noise tables from the reference
Liberty.
split
Splits the Verilog model files into separate files for each cell in a library. This
will create new directories to contain the cell HDL model files, for example:
<charpt>/models/verilog/cells
The original Verilog file that contains the entire set of library HDL models still
remains as before.
timing
includes timing data in the generated model (default).
verilog
Specifies the generation of Verilog timing models, which include the
interface of the cell and the specify blocks containing the timing arcs.
Description
SiliconSmart is capable of characterizing many aspects of a cell’s behavior,
including timing, power, and signal integrity. Not all of the data is appropriate for
all formats and all tool flows. Select the data you want to characterize with the
configure command. The model command reads this data once
characterization is complete and publishes it in the selected format.
You can select a subset of characterized data to publish with the switches
–timing, -ecsm, -ccs, -power, and –si. These switches can be used in
any combination to turn on the specified type of data. If you have not configured
the cell for a particular type of data or the data does not apply to a particular
cell, the switch will be ignored. The switches –ecsm and –ccs enable voltage
or current waveforms that are extension to the standard timing models.
Enabling either of these switches implicitly enables –timing as well.
Both -ecsm* and -ccs* can be modeled at the same time in the same
Liberty with one command, allowing all views (NLDM, NLPM, CCST, CCSN,
CCSP, ECSMT, ECSMP) to be modeled at once in one Liberty.
If none of the characterization data switches (-timing, -power, and so on)
are specified, then –timing and –power are enabled by default. If any of the
switches are specified, then none are on by default. This means that if you want
timing, power, and SI constructs all three switches must be specified.
By default, SiliconSmart checks for an imported Liberty model for each cell
and, if present, uses it as a starting point. This method of operation is referred
to as recharacterization because any data characterized by SiliconSmart will
replace the data in the original Liberty model, but the rest of the contents of the
model remain untouched. Thus you can model one type of data without
affecting the other parts of the model.
IBIS models can contain either one or three operating conditions. When three
operating conditions are to be modeled, they must be specified with the
–operating_condition switch as a Tcl list. The order is best, typical, worst.
For example:
Example 444
model –ibis –operating_condition {typ_pvt best_pvt worst_pvt } \
–output iopads IOPAD*
precharacterize
This command reduces characterization time by binning or grouping states with
similar timing or power characteristics, and by multi-corner load ranging.
Syntax
precharacterize [-reanalyze] [-fast][-report report_file]
cells
Arguments
-fast
The analysis step in precharacterization will be parallelized using the job
scheduler specified by the user (LSF/GRID/NC).
-reanalyze
Precharacterizes without executing the simulations. Intended for cases
where precharacterization parameters are changed to obtain, for example,
different binning arrangements from the same data. An error is returned if
simulation results are not present when the command is invoked.
-report
Creates a report in the specified file when precharacterization is completed.
The report contains binning information for each arc in an easy-to-read
format.
Description
This command should be run before the configure command. It produces data
that the configure command will use to generate the characterization tests.
Three parameters, prechar_binning_timing,
prechar_binning_power, and prechar_binning_constraints
configure precharacterization for timing, power and constraints respectively.
Possible values for each are all, the default, for generating all bins; best, for
generating only the best case; worst, for selecting only the worst case; and
none, to turn off binning for that measurement type. The all option is disabled
for constraint binning. best and worst are provided for those who would like
to use the best and worst cases for each arc in their analysis. The default value
for constraints is none.
Example 445
set_parameter prechar_binning_timing {none | all}
set_parameter prechar_binning_power {none | all}
set_parameter prechar_binning_constraints {none | worst | best}
qualify_library
The qualify_library feature enables validation of libraries generated by
the SiliconSmart tool to ensure their correctness when consumed by
downstream tools.
The qualify_library feature is built on top of the capabilities in the Library
Compiler tool from Synopsys. It supports validation of library files and provides
the following key features:
■
Faster cell-level distributed processing, allowing jobs to be run on compute
farms.
■
A comprehensive HTML-based interface for presenting and analyzing
results, including graphs and histograms.
See Qualifying the Liberty File with qualify_library for more information on
using this feature.
Syntax
qualify_library test.lib [-aggressor string]
[-sim_options string] [-cells list_of_strings]
[-check list_of_strings] [-slews list_of_strings]
[-loads list_of_strings] [-power_rails list_of_strings]
[-report_only] [-finesim] [-no_zip] [-first_load] string
Arguments
[-aggressor string]
Aggressor cell name for glitch analysis.
[-sim_options string]
User-specified simulator options line.
[-cells list_of_strings]
List of cells to qualify.
[-check list_of_strings]
List of additional checks to run (index).
[-slews list_of_strings]
Slew points to use for correlation (mid, max, all, <fractions>).
[-loads list_of_strings]
Load points to use for correlation (mid, max, all, <fractions>).
[-power_rails list_of_strings]
Voltage supply names and pairs for non-pg libraries.
[-report_only]
Only compile results from existing data.
[-finesim]
Use FineSim (default is HSPICE).
[-no_zip]
Do not gzip cell libraries.
[-first_load]
Include first load (not included by default).
string
Input library name.
Memory Commands
The following sections describe memory commands:
■
Tcl Memory Commands
■
Functional Mode Commands
■
Test Mode Commands
■
General Memory Commands
■
Scan Chain Commands
set_memory_type
Sets the memory type.
Syntax
set_memory_type memory_type
Arguments
memory_type
Memory type, which can be one of single_port_ram,
multi_port_ram, or single_port_rom.
set_memory_name
Sets the memory name. This command is required when import -template
is used without a Liberty file.
Syntax
set_memory_name memory_name
set_mem_internal_node
Defines mem_internal node, which is used during constraint measurement.
This command is also used to define a dummy node if constraint measurement
is not required.
set_maximum_addressable_word
The maximum possible memory address is determined by the width of the
address bus of the memory. However, when the memory size is less than the
maximum possible address, the user has to manually set the
default_bus_value_1 parameter in the configure.tcl file for the concerned
pin to the size of memory. This command will perform this automatically.
Syntax
set_maximum_addressable_value value
Arguments
value
Any integer between 0 to pow (2,width of address bus) -1.
Description
This command is useful for single_port_ram, multi_port_ram and for
single_port_rom when the rom code file is not present.
For single_port_rom, when the rom code file is present, it automatically
sets the default_bus_value_0 and default_bus_value_1 parameters
in configure.tcl for the concerned pin type.
The value can be any integer between 0 to pow (2,width of address bus) -1. If
the value given to the command is 0 or equal to the maximum possible
address, the following warning message is generated and the program
continues:
"The maximum addressable word for this memory is assumed to be
<address value>. If a different value is to be used please change
in configure.tcl"
If the value given to the command is greater than the maximum possible
address, the program exits with the following error message:
"Maximum addressable word <add value> can not be greater than
maximum possible word <add Val> ".
set_rom_code_file
This command sets the rom code file.
Syntax
set_rom_code_file file_name
Description
single_port_rom is supported through template flow. When the memory
type is single_port_rom, the rcf file associated with the ROM will be parsed
to find out the proper target bits, default lower address values, and default
higher address values. These values are being set correctly in the configure
file.
When the rcf is not specified, the user has to modify the configure file to set the
target bits, default higher address values, and default lower address values
appropriately.
For ROM, if the rcf file is specified and the Liberty file is given as input to the
import step, then for every pin type present in the Liberty file, a new pin type is
created in the configure.tcl file.
For RAMs and even for ROMs with no rcf file, a new pin type is created in
configure.tcl only if configure.tcl did not contain a pin type definition of the same
name as found in the Liberty file.
set_separate_statetable_mode
This command decides whether separate state tables will be generated for
individual ports present in a multi-port memory or not.
Syntax
set_separate_statetable_mode on|off
Description
For single port memory this command does not have any significance.
For multi-port memory, when separate state table mode is on, for each
individual port a separate state table is created.
■
A single state table for each individual port is created when the ports do not
support pipe line mode.
■
If the port under consideration supports pipeline mode and supports write
operation, then three separate tables (one for write, one for normal read and
one for pipeline read) are created for the port.
■
If the port supports pipeline mode but only the read operation, then only two
tables (one for normal read and another for pipeline read) are created for the
port.
set_bypass_mode
This command sets the bypass mode. When the bypass mode is ON, during
write operation the data is directly written into output without being written into
memory.
Syntax
set_bypass_mode on|off
set_pipeline_mode
This command sets the pipeline mode. When the pipeline mode is ON, the
output from memory will go to output and the last content of output will go to
pipeline output.
Syntax
set_pipeline_mode on|off
set_writethrough_mode
This command sets the write-though mode. When the write though mode is ON
data is written to both memory and output.
Syntax
set_writethrough_mode on|off
set_bist_mode
This command sets the BIST mode. When the bist mode is ON, memory can
operate in either test mode or functional mode depending on bist enable signal
value. When the bist mode is OFF, the memory operates in functional mode.
Syntax
set_bist_mode on|off
set_extramargin_adjustment_mode
This command sets the extra margin adjustment mode. If the extra margin
adjustment mode is ON, the extra margin adjustment bus is replaced by pins
corresponding to every bit of the extra margin adjustment bus in the generated
instance file.
Syntax
set_extramargin_adjustment_mode on|off
set_maskablewrite_enable_control_output
This command can be used only for a memory with both maskable write-enable
and write-through modes.
Syntax
set_maskablewrite_enable_control_output on|off
Description
With write through mode ON and a maskable write enable signal present, a
memory may behave in one of two different ways:
■
First case — the memory output changes (write-through) only when data is
written into the memory cells. The output is unchanged when data bits are
masked. For this memory the value of the
set_maskablewrite_enable_control_output parameter is set to
ON.
■
Second case — can occur in certain memories where the output changes
(write-through is always enabled) whether maskable write-enable is active
or not. The output will change even when data bits are masked during
writing. In this case the value of the parameter
set_maskablewrite_enable_control_output parameter is set to
OFF.
set_light_sleep_enable
This command sets the light slip enable signal associated with the memory.
When light sleep enable signal is in active state, the memory goes to light sleep
mode. During normal operation of the memory the light sleep enable signal
should be in inactive state.
Syntax
set_light_sleep_enable name [–width width] –active L|H
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Active value of the signal. Can be L or H.
set_deep_sleep_enable
This command sets the deep slip enable signal associated with the memory.
When deep sleep enable signal is in active state and shut down enable signal
is in inactive state, the memory goes to deep sleep mode (no change in
memory cells and output goes to ‘0’ state). During normal operation of the
memory the deep sleep enable signal should be in inactive state.
Syntax
set_deep_sleep_enable name [–width width] –active L/H
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Active value of the signal. Can be L or H.
set_shut_down_enable
This command sets the shut down enable signal associated with the memory.
Syntax
set_shut_down_enable name [–width width] –active L/H
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Active value of the signal. Can be L or H.
Description
When shut down enable signal is in active state the memory goes to shut down
mode (data content of memory cells is unknown and output goes to ‘0’ state).
During normal operation of the memory the shut down enable signal should be
in inactive state.
For a memory, when light sleep enable, deep sleep enable, and shut down
enable signals are present, a separate state table of the following form is
created to indicate the behavior of memory when each of these signals is in
active state. As mentioned earlier, for normal function of the memory, each of
these signals should be present in inactive state.
Examples
For the below example, for each of these signals, H is the active state logic
value:
Example 447
add_table {
LS DS SD ME : mem mem_2 iqa : mem mem_2 iqa
- - H H : - - - : x x0
- H L H : - - - : n n 0
}
set_asynchronous_reset
This command sets the asynchronous reset signal associated with the
memory. When asynchronous reset signal is in active state the memory resets
(no change takes place in the data content of memory cells is unknown but
set_register_scan_reset
This command sets the register scan reset pin.
Syntax
set_register_scan_reset name –active r/f
Arguments
name
Name of the register scan reset pin.
-active
Indicates whether the pin is active at the rising (r) or falling (f) edge.
Examples
When this pin is present, one additional state table is created in the instance
file which looks like:
Example 448
add_table {
RSCRST : int_rscrst : int_rscrst
f : - : H
- : - : n
}
In the above table, RSCRST is the pin which will be specified using the
set_register_scan_reset command. int_rscrst is an internal pin
which will be present in all the state table entries which correspond to write
operation. That means the write operation will be performed only when the
value associated with int_rscrst is H.
create_readwrite_port
This is a mandatory command in the template. A memory can have either a
single port or multiple ports to access data. Each of these ports can have their
very own address/data or other enable signals. This command is needed to
bring together all of the signals which are associated with a particular port. This
allows the template generator to recognize how the pins/buses are related to
each other. In case of memories with multiple ports, more than one
readwrite_port can be present in the memory template.
Syntax
create_readwrite_port port_name
Arguments
port_name
A string.
■
set_bist_enable
■
set_pipelinemode_enable
■
set_extramargin_adjustment_enable
■
set_extramargin_adjustment
■
set_testclk_enable name
■
set_maskable_enable_control_output
■
set_maskablewrite_enable
■
set_data_output
■
set_pipeline_output
set_clock
This command sets the clock associated with a port.
Syntax
set_clock pin_name -port port -active r/f
Arguments
pin_name
Name of the clock.
-port
Port name of the clock.
-active
Indicates whether the clock is active at the rising (r) or falling (f) edge.
set_address_bus
This command sets the address bus associated with the port. More than one
address bus can be associated with a single port. Each address bus should be
specified with a separate set_address_bus command.
Syntax
set_address_bus name [-width width] -port port
Arguments
name
Name of the address bus.
[-width]
Optional argument with default value 1. Width of the address bus.
-port
Port name of the address bus.
set_data_bus
This command sets the data bus associated with the port. More than one data
bus can be associated with a single port. Each data bus should be specified
with a separate set_data_bus command.
Syntax
set_data_bus name [-width width] -port port
Arguments
name
Name of the data bus.
[-width]
Optional argument with default value 1. Width of the data bus.
-port
Port name of the data bus.
set_asynchronous_write_through
This command sets the asynchronous write through signal associated with the
port. More than one asynchronous write through signal can be associated with
a single port. Each asynchronous write through signal should be specified with
a separate set_asynchronous_write_through command.
Syntax
set_asynchronous_write_through name [-width width] -active
L/H -port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
Examples
When a asynchronous write through signal goes to the active state, the output
either assumes the data bus value or maskable write enable value.
This functionality is represented with the help of the following two tables:
The following table depicts that when AWT is high, the data (D) goes to the
output register iqa asynchronously:
Example 449
add_table {
int_rscrstBISTMODEBISTECLKTCLKTDD AWT : iqa: iqa
H L L - - - H/L H : - : H/L
H L H - - H/L - H : - : H/L
- - - - - - - L : - : n
}
The following table depicts that when AWT is high, the write-enable (WEM) and
test write enable (TWEM) goes to the output register iqwem asynchronously.
Example 450
add_table {
int_rscrstBISTMODEBISTECLKTCLKWEMTWEMAWT: iqwem : iqwem
H L L - - H/L - H : - : H/L
H L H - - - H/L H : - : H/L
- - - - - - - L : - : n
set_asynchronous_write_through_logic
This command specifies the logic to be used while calculating the
asynchronous write through function.
Syntax
set_asynchronous_write_through_logic logic_operation
Arguments
logic_operation
Name of the logic operation, which can be one of OR, AND, XOR, NOR, NAND
or XNOR. If no set_asynchronous_write_through_logic command
is present in a template file, then OR will be used as the logic operation.
Description
As specified in the set_asynchronous_write_through command, when
asynchronous write through signal goes to active state, the output either
assumes the data bus value or maskable write enable value. Using the same
notation as used for the set_asynchronous_write_through command,
the add_function command takes the following form:
Example 452
add_function Q { ((iqa<asynchronous write through logic> iqwem)&
AWT)) | iq) }
set_output_enable
This command sets the output enable signal associated with the port. More
than one output enable signal can be associated with a single port. Each output
enable signal should be specified with a separate set_output_enable
command.
Syntax
set_output_enable name [–width width] –active L/H –port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
Examples
For synchronous memory (for which CLK is present), when the signal is in
active state, the normal read and write operation takes place on the port. When
the signal is in inactive state the output goes to hiZ state. The state table will
not contain a row corresponding to inactive value of output enable signal rather
a add_function construct will be added to the instance file to reflect the
correct behavior. If Q is the primary output and OEN is the output enable signal
(with active value of L) the following line will be added to the instance file:
Example 453
add_function Q iqa -hi_z OEN
For asynchronous memory (for which CLK is not present) output enable signal
comes into picture only during read operation. When the output enable signal is
in active state, the normal read operation takes place. When the output enable
signal is in inactive state the output goes to hiZ state. This functionality where
output goes to hiZ state, is depicted through state table.
set_read_enable
This command sets the read enable signal associated with the port.
When the signal is active the read operation takes place on the port. More than
one read enable signal can be associated with a single port. Each read enable
signal should be specified with a separate set_read_enable command.
Syntax
set_read_enable name [-width width] –active L/H -port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_write_enable
This command sets the write enable signal associated with the port.
When the signal is active the write operation takes place on the port. More than
one write enable signal can be associated with a single port. Each write enable
signal should be specified with a separate set_write_enable command.
Syntax
set_write_enable name [-width width] –active L/H -port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_chip_enable
This command sets the chip enable signal associated with the port.
When the signal is active the memory remains active and read and write
operations can take place on the port in functional mode. More than one chip
enable signal can be associated with a single port. Each chip enable signal
should be specified with a separate set_chip_enable command.
Syntax
set_chip_enable name [-width width] –active L/H -port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_memory_enable
This command sets the memory enable signal associated with the port.
When the signal is active the memory remains active and read and write
operations can takes place on the port in functional mode. More than one
memory enable signal can be associated with a single port. Each memory
enable signal should be specified with a separate set_memory_enable
command.
Syntax
set_memory_enable name [-width width] –active L/H -port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_bypass_enable
This command sets the memory enable signal associated with the port.
When the signal is active the memory operates in bypass mode while operating
in functional mode. More than one bypass enable signal can be associated with
a single port. Each bypass enable signal should be specified with a separate
set_bypass_enable command.
Syntax
set_bypass_enable name [-width width] –active L/H -port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_writethrough_enable
This command sets the write through enable signal associated with the port.
When the signal is active the memory operates in write through mode while
operating in functional mode. More than one write through enable signal can be
associated with a single port. Each write through enable signal should be
specified with a separate set_writethrough_enable command.
Syntax
set_writethrough_enable name [-width width] -active L/H
-port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_bist_enable
This command sets the memory enable signal associated with the port.
When the signal is active the memory operates in test mode. When the
memory operates in functional mode this signal remains inactive. More than
one bist enable signal can be associated with a single port. Each bist enable
signal should be specified with a separate set_bist_enable command.
Syntax
set_bist_enable name [-width width] –active L/H -port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_pipelinemode_enable
This command sets the memory enable signal associated with the port.
When the signal is active the memory operates in pipeline mode while
operating in functional mode. More than one pipeline mode enable signal can
be associated with a single port. Each pipeline mode enable signal should be
specified with a separate set_pipelinemode_enable command.
Syntax
set_pipelinemode_enable name [-width width] –active L/H
-port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_extramargin_adjustment_enable
This command sets the memory enable signal associated with the port. This
signal does not have any significance as far as state table is concerned but
comes into picture in when conditions.
Syntax
set_extramargin_adjustment_enable name [-width width]
-active L/H -port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_extramargin_adjustment
This command sets the extra-margin adjustment bus associated with the port.
More than one extra margin adjustment signal can be associated with a single
port.
Each extra margin adjustment signal should be specified with a separate
set_extramargin_adjustement command. The extra margin adjustment
pin does not take part in state table. When extra margin adjustment mode is ON
(set_extramargin_adjustment_mode ON), in the generated instance file
the extra-margin adjustment bus is replaced by pins corresponding to every bit
of the extra-margin adjustment bus.
Syntax
set_extramargin_adjustment name [–width width] -port port
Arguments
name
Name of the bus.
[-width]
Optional argument with default value 1. Width of the bus.
-port
Port name of the bus.
set_testclk_enable name
This command sets the test CLK enable pin. When test clock enable signal is
active, testmode clock is selected (basically used when memory operates in
test mode).
When test clock enable signal is not active then CLK is selected (basically used
when memory operates in functional mode).
Syntax
set_testclk_enable name –active L/H -port port
Arguments
name
Name of the clock.
[-width]
Optional argument with default value 1. Width of the clock.
-port
Port name of the clock.
set_maskable_enable_control_output
This command is only necessary when the maskable write enable signal is
present and write through mode is ON. When write through mode is ON and the
maskable write enable signal is present, the memory may behave in one of two
different ways.
1. When write through mode is ON and maskable write enable signal is active,
then during the write operation the data will be written to both memory and
output.
2. When write through mode is ON and maskable write enable signal is not
active then during the write operation data will not be written into memory
but it will be written to output.
As shown above, when write through mode is ON, the output is not dependent
on the maskable write enable signal state.
When an OFF value is given to set_maskablewrite_enable_output, the
behavior of memory is as described above. When an ON value is given, the
memory behaves in the following way:
When write through mode is ON and the maskable write enable signal is active,
then during write operation the data will be written to both memory and output,
which is the same behavior as before. However, when write through mode is ON
and the maskable write enable signal is not active, then during write operation
data will not be written into memory or output.
With this command, when write through mode is ON, the output is dependent on
the maskable write enable signal state.
Syntax
set_maskable_enable_control_output on|off
set_maskablewrite_enable
This command sets the maskable write enable signal associated with the port.
Write enable signal controls whether the write operation is possible for all the
bits present in the word or not. Maskable write enable, on the other hand,
controls the write operation to some of the bits of the word. If the word width is
32 bits and maskable write enable is of width 4, then every bit of maskable
write enable controls 8 different bits of word. So by setting or unsetting the bits
of maskable write enable signal, we can control which bits of the word is to be
written to.
Syntax
set_maskablewrite_enable name –width width -port port
-active L/H
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_data_output
This command sets the data output associated with the port. Data is written
into data output during read operation on memory.
Syntax
set_data_output name -port port
Arguments
name
Name of the data output.
port
Associated port name.
set_pipeline_output
This command sets the pipeline output associated with the port. Data present
in data output is written into pipeline output during pipeline read operation on
memory.
Syntax
set_pipeline_output name -port port
Arguments
name
Name of the pipeline output.
port
Associated port name.
set_testmode_clock
This command sets the clock associated with a port.
Syntax
set_testmode_clock pin_name -port port -active r/f
Arguments
pin_name
Name of the clock.
-port
Port name of the clock.
-active
Indicates whether the clock is active at the rising (r) or falling (f) edge.
set_testmode_address_bus
This command sets the address bus associated with the port. More than one
address bus can be associated with a single port. Each address bus should be
specified with a separate set_testmode_address_bus command.
Syntax
set_testmode_address_bus name [-width width] -port port
Arguments
name
Name of the address bus.
[-width]
Optional argument with default value 1. Width of the address bus.
-port
Port name of the address bus.
set_testmode_data_bus
This command sets the data bus associated with the port. More than one data
bus can be associated with a single port. Each data bus should be specified
with a separate set_testmode_data_bus command.
Syntax
set_testmode_data_bus name [-width width] -port port
Arguments
name
Name of the data bus.
[-width]
Optional argument with default value 1. Width of the data bus.
-port
Port name of the data bus.
set_testmode_read_enable
This command sets the read enable signal associated with the port.
When the signal is active the read operation takes place on the port. More than
one read enable signal can be associated with a single port. Each read enable
signal should be specified with a separate set_testmode_read_enable
command.
Syntax
set_testmode_read_enable name [-width width] –active L/H
-port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_testmode_write_enable
This command sets the write enable signal associated with the port.
When the signal is active the write operation takes place on the port. More than
one write enable signal can be associated with a single port. Each write enable
signal should be specified with a separate set_wtestmode_rite_enable
command.
Syntax
set_testmode_write_enable name [-width width] –active L/H
-port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_testmode_chip_enable
This command sets the chip enable signal associated with the port.
When the signal is active the memory remains active and read and write
operations can take place on the port in functional mode. More than one chip
enable signal can be associated with a single port. Each chip enable signal
should be specified with a separate set_testmode_chip_enable
command.
Syntax
set_testmode_chip_enable name [-width width] –active L/H
-port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_testmode_memory_enable
This command sets the memory enable signal associated with the port.
When the signal is active the memory remains active and read and write
operations can takes place on the port in functional mode. More than one
memory enable signal can be associated with a single port. Each memory
enable signal should be specified with a separate
set_testmode_memory_enable command.
Syntax
set_testmode_memory_enable name [-width width] –active L/H
-port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_testmode_bypass_enable
This command sets the memory enable signal associated with the port.
When the signal is active the memory operates in bypass mode while operating
in functional mode. More than one bypass enable signal can be associated with
a single port. Each bypass enable signal should be specified with a separate
set_testmode_bypass_enable command.
Syntax
set_testmode_bypass_enable name [-width width] –active L/H
-port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_testmode_writethrough_enable
This command sets the write through enable signal associated with the port.
When the signal is active the memory operates in write through mode while
operating in functional mode. More than one write through enable signal can be
associated with a single port. Each write through enable signal should be
specified with a separate set_testmode_writethrough_enable
command.
Syntax
set_testmode_writethrough_enable name [-width width]
-active L/H -port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_testmode_bist_enable
This command sets the memory enable signal associated with the port.
When the signal is active the memory operates in test mode. When the
memory operates in functional mode this signal remains inactive. More than
one bist enable signal can be associated with a single port. Each bist enable
signal should be specified with a separate set_testmode_bist_enable
command.
Syntax
set_testmode_bist_enable name [-width width] –active L/H
-port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_testmode_pipelinemode_enable
This command sets the memory enable signal associated with the port.
When the signal is active the memory operates in pipeline mode while
operating in functional mode. More than one pipeline mode enable signal can
be associated with a single port. Each pipeline mode enable signal should be
specified with a separate set_testmode_pipelinemode_enable
command.
Syntax
set_testmode_pipelinemode_enable name [-width width]
–active L/H -port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_testmode_extramargin_adjustment_enable
This command sets the memory enable signal associated with the port. This
signal does not have any significance as far as state table is concerned but
comes into picture in when conditions.
Syntax
set_testmode_extramargin_adjustment_enable name
[-width width] -active L/H -port port
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_testmode_extramargin_adjustment
This command sets the extra-margin adjustment bus associated with the port.
More than one extra margin adjustment signal can be associated with a single
port.
Each extra margin adjustment signal should be specified with a separate
set_testmode_extramargin_adjustment command. The extra margin
adjustment pin does not take part in state table. When extra margin adjustment
mode is ON (set_testmode_extramargin_adjustment_mode ON), in the
set_testmode_maskablewrite_enable
This command sets the maskable write enable signal associated with the port.
Write enable signal controls whether the write operation is possible for all the
bits present in the word or not. Maskable write enable, on the other hand,
controls the write operation to some of the bits of the word. If the word width is
32 bits and maskable write enable is of width 4, then every bit of maskable
write enable controls 8 different bits of word. So by setting or unsetting the bits
of maskable write enable signal, we can control which bits of the word is to be
written to.
Syntax
set_testmode_maskablewrite_enable name –width width
-port port -active L/H
Arguments
name
Name of the signal.
[-width]
Optional argument with default value 1. Width of the signal.
-active
Indicates active value of the signal. Can be L or H.
-port
Port name of the signal.
set_testmode_data_output
This command sets the data output associated with the port. Data is written
into data output during read operation on memory.
Syntax
set_testmode_data_output name -port port
Arguments
name
Name of the data output.
port
Associated port name.
set_testmode_pipeline_output
This command sets the pipeline output associated with the port. Data present
in data output is written into pipeline output during pipeline read operation on
memory.
Syntax
set_testmode_pipeline_output name -port port
Arguments
name
Name of the pipeline output.
port
Associated port name.
■
set_input_pins_tiedto_low
■
set_input_pins_tiedto_high
■
set_internal_supply
■
set_output_state_on_shutdown
■
set_shutdown_type
add_input_pin
This command adds an input pin. More than one pin can be added as input pin
and each such is to be added through a separate add_input_pin command.
Syntax
add_input_pin name [-width width]
Arguments
name
Name of the pin.
[-width]
Optional argument with default value of 1. Width of the pin.
add_output_pin
This command adds an output pin. More than one pin can be added as output
pin and each such is to be added through a separate add_output_pin
command.
Syntax
add_output_pin name [-width width] -function function
-hiZ_function hiZ_function
Arguments
name
Name of the pin.
[-width]
Optional argument with default value of 1. Width of the pin.
-function
Function associated with the pin.
-hiZ_function
hiZ function associated with the pin.
set_input_pins_tiedto_low
This command sets the input pins which are tied to low.
Syntax
set_input_pins_tiedto_low {pinName1 pinName2 pinName3 ...}
Arguments
{pinName1, pinName2, pinName3, ...}
List of pin names.
set_input_pins_tiedto_high
This command sets the input pins which are tied to high.
Syntax
set_input_pins_tiedto_high {pinName1 pinName2 pinName3 ...}
Arguments
{pinName1, pinName2, pinName3, ...}
List of pin names.
set_internal_supply
This command automatically adds the internal supply name to the subcircuit
port list of the netlist file. The internal supply name will appear in the subcircuit
port list in the instance file and will also be defined as an in-out pin in the
instance file.
Syntax
set_internal_supply name_of_internal_supply
Examples
This internal supply is used for the PowerDown function. In the template.tcl file:
Example 454
set_internal_supply VDDHD
set_shut_down_enable PD -active H
The above example adds the following two constructs to the instance file:
Example 455
inst file add this function “add_function VDDHD 1 -hi_z PD” and
find timing delay b/w PD to VDDHD
set_output_state_on_shutdown
This command determines the output pin value during shutdown mode.
Syntax
set_output_state_on_shutdown 0|1
set_shutdown_type
This command can take type1, type2, and type3 as an argument, although
only type2 can be used currently. When this command is used, internal supply
specific functionality and scan chain specific functionality will be enabled.
Syntax
set_shutdown_type type1|type2|type3
set_scan_chain
This command sets the scan chain length. The number of cycles is equal to
the number of scan flops in this chain.
Syntax
set_scan_chain -cycles integer -port port
Arguments
-cycles
The number of scan flops in the chain.
-port
Name of the readwrite port.
Examples
Example 456
set_scan_chain –cycles 18 –port A
set_scan_chain_def
This command specifies how the flip-flops present in the scan chain will be
described.
Syntax
set_scan_chain_def value integer -port port
Arguments
value
Either AUS or FF. If scan chain is present in a memory, the default is
represented through AUS. This is case insensitive.
When FF is specified, then for every flip-flop present in the scan chain,
add_flop commands of following form are added to the instance file.
-port
Name of the readwrite port.
set_scan_input
This command specifies the scan input pin.
Syntax
set_scan_input pin -port port
Arguments
pin
Name of the input pin.
-port
Name of the readwrite port.
Examples
Example 457
set_scan_input SDIN –port A
set_scan_clock
This command specifies the clock pin of the scan chain.
Syntax
set_scan_clock pin -port port
Arguments
pin
Name of the clock pin.
-port
Name of the readwrite port.
Examples
Example 458
set_scan_clock SCLK –port A
set_scan_reset
This command specifies the reset pin of the scan chain. It is assumed that a
single reset pin is used across the entire scan chain.
Syntax
set_scan_reset pin -port port
Arguments
pin
Name of the reset pin.
-port
Name of the readwrite port.
Examples
Example 459
set_scan_reset RSTB –port A
set_scan_preset
This command specifies the preset pin of the scan chain. It is assumed that a
single preset pin is used across the entire scan chain.
Syntax
set_scan_preset pin -port port
Arguments
pin
Name of the preset pin.
-port
Name of the readwrite port.
Examples
Example 460
set_scan_preset SETB –port A
set_scan_output
This command specifies the output pin of the scan chain. The delay is
measured at this pin after the number of clock cycles specified in the -cycles
parameter of the set_scan_chain parameter above.
Syntax
set_scan_output pin -port port
Arguments
pin
Name of the output pin.
-port
Name of the readwrite port.
Examples
Example 461
set_scan_output SDOUT –port A
set_scan_internal_node
This command specifies the scan internal node. This is the output of the first
scan flop. This node is necessary to measure the constraint arcs between the
scan input pin and the scan clock.
Syntax
set_scan_output node_name -port port
Arguments
node_name
Name of the internal SPICE node.
-port
Name of the readwrite port.
Examples
Example 462
set_scan_internal_node {XI0/XRED_CTRL/XI12/WLB_AD[8]} –port A
This chapter provides the list of parameter blocks and parameters available in
the SiliconSmart tool.
ibis Parameters
The following parameter are available in ibis block:
■ ibis_package_c
■
ibis_package_c_max
■
ibis_package_c_min
■
ibis_package_c_typ
■
ibis_package_l
■
ibis_package_l_max
■ ibis_package_l_min
■
ibis_package_l_typ
■
ibis_package_r
■
ibis_package_r_max
■
ibis_package_r_min
■
ibis_package_r_typ
■
ibis_pulldown_supply
■
ibis_pullup_supply
■
ibis_c_comp_max
■
ibis_c_comp_min
■
ibis_c_comp_typ
■
ibis_c_series_max
■
ibis_c_series_min
■
ibis_c_series_typ
■
ibis_clamping_iv_points
■
ibis_enable
■
ibis_l_series_max
■
ibis_l_series_min
■
ibis_l_series_typ
■
ibis_model_type
■
ibis_polarity
■
ibis_r_series_max
■
ibis_r_series_min
■
ibis_r_series_typ
■
ibis_vdiff
ibis_package_c
Specifies the capacitance of the package.
ibis_package_c_max
Specifies the capacitance of the package in max corner.
ibis_package_c_min
Specifies the capacitance of the package in min corner.
ibis_package_c_typ
Specifies the capacitance of the package in typ corner.
ibis_package_l
Specifies the inductance of the package.
ibis_package_l_max
Specifies the inductance of the package in max corner.
ibis_package_l_min
Specifies the inductance of the package in min corner.
ibis_package_l_typ
Specifies the inductance of the package in typ corner.
ibis_package_r
Specifies the resistance of package.
ibis_package_r_max
Specifies the resistance of package in max corner.
ibis_package_r_min
Specifies the resistance of package in min corner.
ibis_package_r_typ
Specifies the resistance of package in typ corner.
ibis_pulldown_supply
Specifies an alternate supply name to be used as the reference voltage during
pulldown measurements.
ibis_pullup_supply
Specifies an alternate supply name to be used as the reference voltage during
pullup measurements.
ibis_c_comp_max
The die capacitance of the pin not including package capacitances. These
parameters default to the value of the pintype parameter ibis_c_comp. They
can be overridden here.
ibis_c_comp_min
The die capacitance of the pin not including package capacitances. These
parameters default to the value of the pintype parameter ibis_c_comp. They
can be overridden here.
ibis_c_comp_typ
The die capacitance of the pin not including package capacitances. These
parameters default to the value of the pintype parameter ibis_c_comp. They
can be overridden here.
ibis_c_series_max
Specifies [C series] value for max corner.
ibis_c_series_min
Specifies [C series] value for min corner.
ibis_c_series_typ
Specifies [C series] value for typ corner.
ibis_clamping_iv_points
Specifies the number of sample points to be used in Douglas-Peucker
interpolation for IV and clamping curves for different voltage range.
For example, if you specify this parameter to be {20 30 40} and the IV/clamping
swing is from -1.8V to 3.6V, 20 points would be generated between (-1.8V, 0),
30 points for (0, 1.8V) and 40 points for (1.8V, 3.6V). Only 3 values are allowed
for 3 ranges. This parameter doesn't affect what the exact DC sweep voltage
values are selected or finally printed.
ibis_enable
Set to Active-High or Active-Low to specify whether an output pin is active-high
or active-low .
ibis_l_series_max
Specifies [L series] value for max corner.
ibis_l_series_min
Specifies [L series] value for min corner.
ibis_l_series_typ
Specifies [L series] value for typ corner.
ibis_model_type
Specifies one of the defined IBIS model types to be written to the model. This
parameter is set by the tool automatically based on the pin direction, but may
be overridden.
ibis_polarity
Set to Non-inverting or Inverting to specify whether a pin is an inverting or non-
inverting output.
ibis_r_series_max
Specifies [R series] value for max corner.
ibis_r_series_min
Specifies [R series] value for min corner.
ibis_r_series_typ
Specifies [R series] value for typ corner.
ibis_vdiff
Specifies the capacitance, resistance, and voltage used in the test loads.
liberty_model Parameters
The following parameters are available in liberty_model block:
■
delay_model
delay_model
This is the liberty header attribute used when modeling with the
-create_new_model switch
param Parameters
The following parameter are available in param block:
■ absolute_leakage_threshold_value
■
active_pvts
■
add_constraint_margin
■ add_lvf_constraint_margin
■
add_lvf_delay_margin
■ add_lvf_slew_margin
■ add_stat_constraint_margin
■
advanced_dp
■
advanced_node
■ advanced_sof
■
aocv_correlation_coeff_between_stages
■ aocv_early_sigma
■
aocv_fanout_cells
■
aocv_fanout_load
■
aocv_fast_char
■
aocv_input_pin
■
aocv_interconnect_model
■
aocv_late_sigma
■
aocv_mc_mode
■
aocv_num_fanouts
■
aocv_num_stages
■
aocv_output_pin
■
aocv_passive_load
■
aocv_sample_size
■
aocv_sensitivity_based
■
archive_condition_for_pruning
■
archive_condition_on_failure
■
archive_condition_on_success
■
archive_level
■
auto_fix
■
back_bias_connection
■
backup_simulation_tmpdir
■
bjt_model_names
■
bundle_bit_independent_descriptor
■
bundle_bit_independent_descriptor_mode
■
cap_model_names
■ ccb_separator
■
ccb_single_fanout
■
ccb_single_fanout_bit
■
ccbs_for_input_driving_passgate
■
ccs_delay_abs_tolerance
■
ccs_delay_tolerance
■
ccs_noise_iv_dc_analysis_mode
■
ccs_noise_miller_resistance
■
ccs_power_modeling_load_indices
■
ccs_power_modeling_slew_indices
■
ccs_power_optimize_waveform
■
ccs_receiver1_check_ratio
■
ccs_receiver2_check_ratio
■
ccs_segment_tolerance
■
ccsn_add_second_level_ccb_load
■
ccsn_cmiller_check_mode
■
ccsn_cmiller_default_value
■
ccsn_exclude_pin
■
ccsn_ignore_char_failures_during_modeling
■
ccsn_initial_delay
■
ccsn_model_default_pin_based_models
■
ccsn_truncate_long_ccb_name
■
ccsn_model_passgate_ccb
■
ccsn_use_enhanced_hw_method
■
ccsn_use_enhanced_miller_cap
■
ccsn_use_optimal_node_selection_method
■
ccsn_use_partial_netlist
■
ccsp_cross_point_selection
■
cdpl_alt_submission
■ cdpl_host_file
■
cdpl_long_task_alert
■
cdpl_submission_cmd
■
cdpl_submission_timeout
■
cdpl_task_max_lifespan
■
cdpl_worker_max_tasks
■
cdpl_worker_timeout
■
cell_families
■
cell_type
■
char_engine_max_lifespan
■
check_pins_in_netlist
■
check_sof
■
check_templates
■
combine_delay_and_cin
■
combine_energy_and_cin
■
combine_lvf_cin
■
combine_timing_and_power
■
compact_ccs_tolerance
■
configure_all_states_for_ccb
■
configure_constraint_delay
■
configure_internal_node_arcs
■
configure_from_function
■
configure_from_structure
■
configure_preferred_secondary_input
■
configure_write_fugues
■
configure_zdisable_pull
■
constraint_exclude_outputs
■
constraint_glitch_time_delta
■
constraint_matched_internal_state
■ constraint_mode
■
constraint_monotonicity_tolerance_pct
■
constraint_outputs
■
constraint_pulse_cratering
■
constraint_seed_by_slew
■
constraint_seed_step
■
constraint_seed_values
■
constraint_simulated_seed
■
constraint_simulated_seed_acq_based
■
constraint_simulated_seed_finesim_mode
■
constraint_simulated_seed_simulator
■
constraint_simulation_mode
■
constraint_trigger_node
■
construct_ncx_templates
■
current_absolute_tolerance
■
current_relative_tolerance
■
cut_netlist
■
cut_stat_netlist
■
datasheet_truth_table
■
dc_current_absolute_tolerance
■
dc_current_product_tolerance
■
dc_current_relative_tolerance
■
dc_current_threshold
■
default_load_position
■
default_netlist_size
■
default_position_selection
■
default_slew_position
■
delay_based_constraint_mode
■
delay_matching_cin
■ detect_internal_power_nodes
■
detect_internal_power_nodes_for_pruning
■
differential_delay_mode
■
differential_delay_probe_style
■
differential_pair_timing_duplication
■
dio_model_names
■
disable_negative_power_adjustments
■
disable_sim_stats
■
do_zero_modeling
■
dontcare_bias_on_output
■
dontcare_values
■
driver_load_steps
■
ecsm_power_modeling_load_indices
■
ecsm_power_modeling_slew_indices
■
ecsm_threshold_pcts_fall
■
ecsm_threshold_pcts_rise
■
em_analyze_power_nets
■
em_table_with_current_types
■
em_threshold_simulator
■
em_threshold_simulator_cmd
■
em_threshold_tolerance
■
em_use_xba
■
enable_ac_decap
■
enable_ac_decap_merge
■
enable_cache
■
enable_cell_leakage_power_modeling
■
enable_dc_leakage
■
enable_exhaustive_modeling_of_ccbs
■
enable_external_simulator_pruning
■ enable_fast_sweep
■
enable_fse_log
■
enable_gated_hold_constraint
■
enable_macro_pruning
■
enable_memory_pruning
■
enable_netlist_pruning
■
enable_parallel_sweeps
■
enable_parasitic_sweep
■
enable_rechar_reporting
■
enable_status
■
energy_fast_mode_leakage
■
energy_fast_mode_leakage_interval
■
ensure_constraint_monotonicity
■
event_rank
■
excluded_acquisitions
■
extrapolate_ccs_cin_slew
■
finesim_so_path
■
force_removal_recovery_modeling
■
fr_archive_condition_on_failure
■
fr_archive_condition_on_success
■
fse_preprocess_cmd
■
fse_user_cmd
■
gate_leakage_time_scaling_factor
■
generate_all_ccbs_after_passgate
■
graphviz_location
■
gzip_cellmodel_libs
■
harness
■
HDL_cell_postprocess
■
hdl_vector_time_step
■ hierarchy_separator
■
hsp_keep_model
■
hspice_client
■
ibis_add_submodel
■
ibis_ami
■
ibis_ami_bit_time
■
ibis_ami_sample_interval
■
ibis_ami_taps
■
ibis_ami_weights
■
ibis_c_comp_user_only
■
ibis_clamping_curve_make_monotonic
■
ibis_clamping_iv_analysis_mode_dc
■
ibis_clamping_iv_num_points
■
ibis_cref
■
ibis_diff_pin_single_model
■
ibis_odt_driver_only
■
ibis_odt_linear_regression_max_scale
■
ibis_odt_linear_regression_min_scale
■
ibis_odt_mode
■
ibis_odt_mode_name
■
ibis_odt_pulldown_modes
■
ibis_odt_pullup_modes
■
ibis_odt_receiver_only
■
ibis_pin_alias
■
ibis_pin_mapping
■
ibis_plan_for_corner_merge
■
ibis_prog_driver_mode
■
ibis_prog_driver_mode_name
■
ibis_rref
■ ibis_single_pvt_corner_name
■
ibis_source
■
ibis_typ_pvt
■
ibis_use_exact_mode_name
■
ibis_validate_bit_slew
■
ibis_validate_bit_time
■
ibis_validate_input_pin_name
■
ibis_validate_prbs_size
■
ibis_validate_terminating_resistor
■
ibis_vcross_high
■
ibis_vcross_low
■
ibis_vdiff_ac
■
ibis_vdiff_dc
■
ibis_version
■
ibis_vinh
■
ibis_vinh_max
■
ibis_vinh_min
■
ibis_vinh_typ
■
ibis_vinl
■
ibis_vinl_max
■
ibis_vinl_min
■
ibis_vinl_typ
■
ibis_vmeas
■
ibis_vmeas_max
■
ibis_vmeas_min
■
ibis_vmeas_typ
■
ibis_vref
■
ibis_vt_curve_make_monotonic
■
ibischk_cmd
■ ideal_netlist_ext
■
import_explicit_points_per_arc
■
import_liberty_ndw
■
initial_delay_multiplier
■
insert_liberty_default_ndw
■
init_internal_pins
■
initialization_cycles
■
internal_ground_nets
■
internal_ground_supply_spice_nets
■
internal_nodes_transition_data
■
internal_power_nets
■
internal_power_supply_spice_nets
■
intrinsic_cap_with_phase_diff
■
io_retry
■
job_scheduler
■
keep_loading_effect_with_pruning
■
leakage_current_substitution_value
■
leakage_sum_threshold
■
left_bus_identifier
■
liberty_attributes_at_bundle
■
liberty_blackbox_model
■
liberty_cap_unit
■
liberty_cell_postprocess
■
liberty_combine_complementary_models
■
liberty_constraint_type
■
liberty_current_unit
■
liberty_data_reduce
■
liberty_fast_option
■
liberty_fill_out_power_with
■ liberty_flavor
■
liberty_increasing_delay_with_ecsm
■
liberty_increasing_delay_with_ccs
■
liberty_increasing_delay_with_load
■
liberty_increasing_delay_with_slew
■
liberty_increasing_time_points
■
liberty_increasing_transition_with_load
■
liberty_leakage_power_unit
■
liberty_max_capacitance
■
liberty_max_capacitance_mode
■
liberty_max_transition
■
liberty_min_capacitance
■
liberty_min_transition
■
liberty_minimize_constraint_when
■
liberty_minimize_groups
■
liberty_minimize_timing_when
■
liberty_multi_rail_format
■
liberty_power_down_function
■
liberty_power_down_function_pins
■
liberty_resistance_unit
■
liberty_select_min_period
■
liberty_select_min_pulse_width
■
liberty_state_independent
■
liberty_statetable_for_gcl
■
liberty_time_unit
■
liberty_timing_type
■
liberty_whens
■
lvf_check_errors
■
lvf_check_sigma_pct
■ lvf_check_slew_sigma_pct
■
lvf_check_suppress
■
lvf_constraint_models
■
lvf_constraint_seed_step
■
lvf_enable_sanity_check
■
lvf_model_slew
■
lvf_param_abs_threshold
■
lvf_param_rel_threshold
■
lvf_sigma_max
■
lvf_sigma_min
■
lvf_sigma_scaling
■
lvf_to_ocv_input_pins
■
lvf_to_ocv_load_indices
■
lvf_to_ocv_method
■
lvf_to_ocv_slew_indices
■
lvf_to_ocv_output_pins
■
lvf_tol_early_to_late
■
lvf_tol_sigma_to_nom
■
make_cdb_path
■
make_small_dc_current_values_as_zero
■
max_constraint_iterations
■
maximum_stack_depth
■
measure_side_input_power
■
memory_ccsn_partial_netlist
■
miller_capacitance_check_tolerance_pct
■
miller_capacitance_edge_ratio
■
miller_output_slew
■
min_disk_space
■
min_period_precharge_threshold_factor
■ min_period_with_precharge_delay
■
minimum_constraint_sum_margin
■
model_arc_and_pin_cap
■
model_as_non_unate
■
model_back_bias
■
model_bundle_bit_level
■
model_bus_timing
■
model_default_arcs
■
model_default_constraints
■
model_default_power_arc
■
model_ecsm_threshold_pct
■
model_equalize_cap_averaging
■
model_exclude_supplies
■
model_expanded_states
■
model_failed_cells_in_lib
■
model_input_leakage_current
■
model_leakage_current_file
■
model_mpw_attribute
■
model_neg_constraint_chk_opposite_edge
■
model_neg_constraint_sum
■
model_neg_constraint_sum_margin
■
model_neg_constraint_sum_threshold
■
model_negative_constraints
■
model_negative_delays
■
model_negative_energy
■
model_negative_leakage
■
model_normalized_constraint_driver_waveform
■
model_normalized_driver_waveform
■
model_pg_pin_groups
■ model_pin_cap_calc
■
model_power_on_output
■
model_power_per_supply
■
model_reverse_polarity_current
■
model_rise_fall_capacitance
■
model_rise_fall_capacitance_range
■
model_sensitization_vector
■
model_significant_digits
■
model_significant_digits_area
■
model_uncharacterized_tables
■
mpw_rail_to_rail
■
monitor_internal_nodes
■
mpp_simulator
■
mpw_table_dimensions
■
mpw_v2_transition_inputs
■
netlist_max_sweeps
■
new_operating_condition
■
nmos_drn_gate_shorted_model_names
■
nmos_drn_src_shorted_model_names
■
nmos_gate_src_shorted_model_names
■
nmos_model_names
■
nochange_threshold
■
nochange_variance
■
non_scan_model
■
normal_queue
■
normalized_driver_significant_digits
■
nsamples
■
opc_grounds
■
opc_process
■ opc_supplies
■
opc_temperature
■
opc_voltage
■
output_sweep_order
■
param_change_period
■
parameters
■
partition_by_output_transitions
■
path_based_clock_nodes
■
path_based_signal_nodes
■
path_constraint_enable
■
path_constraint_enable_negative
■
path_constraint_enable_positive
■
path_constraint_feedback
■
path_constraint_mode
■
path_constraint_pintype
■
periodic_clock_stimulus
■
pin_name_alias
■
pmos_drn_gate_shorted_model_names
■
pmos_drn_src_shorted_model_names
■
pmos_gate_src_shorted_model_names
■
pmos_model_names
■
point_to_point_default_selection
■
potential_internal_node_list
■
power_dynamic_end_threshold
■
power_load_energy_on_rise
■
power_meas_grounds
■
power_meas_map
■
power_meas_supplies
■
power_stabilization_threshold
■ power_stabilization_threshold_absolute
■
prechar_autorange_load
■
prechar_binning_abs_tol
■
prechar_binning_constraints
■
prechar_binning_hidden_power
■
prechar_binning_max_bins
■
prechar_binning_method
■
prechar_binning_mode
■
prechar_binning_power
■
prechar_binning_rel_tol
■
prechar_binning_timing
■
prechar_enable_fast_analysis
■
prechar_keep_intermediate_files
■
prechar_numsteps
■
prechar_sampling_size
■
prechar_simulator
■
prechar_state_partitions
■
preferred_switching_input
■
reduce_ccs_power_table
■
primary_index
■
propagate_warnings
■
publish_internal_pin_states
■
receiver_cap_for_zdisable
■
receiver_trip_threshold_pct_fall
■
receiver_trip_threshold_pct_rise
■
rechar_add_attributes
■
rechar_update_attributes
■
reduce_ecsm_power_table
■
replace_negative_leakage_with
■ report_constraint_iterations
■
res_model_names
■
right_bus_identifier
■
run_list_maxsize
■
running_prechar
■
save_farm_logs
■
scan_enable
■
scan_input
■
scan_enable_inverted
■
scan_output
■
scan_output_inverted
■
scan_start_pin
■
scan_type
■
scd_debug_subtract_power_tables
■
scheduler_poll_time
■
sdf_cond_equality_operator
■
secondary_run_list_maxsize
■
separate_cell_initialization
■
separate_cell_initialization_levels
■
signal_capture_pct
■
simcomp_version
■
simulator_case_sensitive
■
simulation_max_inactive_time
■
simulation_max_runtime
■
simulation_node_initialization_file
■
simulation_tmpdir
■
simulator
■
simulator_bisection
■
simulator_cmd
■ simulator_default_options
■
simulator_options
■
simulator_warning_limit
■
single_bit_degenerate
■
single_cell_mode
■
sis_cell_type_memory
■
sis_exclude_internal_power_nets
■
sis_gzip_enable
■
sis_gzip_enable_for_lib
■
sis_pruning_with_flat_netlist
■
sishapes_channel_length_offset
■
sishapes_minimum_feature_length
■
slew_derate_lower_threshold
■
slew_derate_upper_threshold
■
slew_matching_cin
■
spectre_ccb
■
spectre_fake_model
■
spectre_macmod
■
srf_multiplier
■
stat_hold_sensitivity_ratios
■
state_coverage_exclude_pins
■
state_partitions
■
state_rank
■
state_selection
■
statistical_avoid_screening_acquisition
■
statistical_constraint_screening_points
■
statistical_constraint_screening_tolerance
■
statistical_enable_constraint_sensitivity
■
statistical_model_sigma_montecarlo
■ statistical_montecarlo_sample_size
■
statistical_reduction_factor
■
statistical_screening_points
■
statistical_screening_tolerance
■
statistical_significant_transistors
■
statistical_simulation_points
■
statistical_simulator_bisection
■
statistical_timing_abs_tolerance
■
statistical_timing_rel_tolerance
■
statistical_two_sided_screening
■
statistical_use_pruned_netlist_for_nominal
■
submit_list_maxsize
■
subtract_pin_capacitance
■
sweep_states
■
table_dimension_for_internal_node
■
table_dimensions
■
time_res_high
■
time_res_low
■
update_cache_last
■
use_ccs_init_delay
■
use_ccs_native_current
■
use_ccsn_initial_delay
■
use_exact_when
■
use_gates
■
use_measured_slew_for_combined_setuphold
■
use_save_for_initialization
■
use_simulator_licenses
■
verilog_atpg_syntax
■
verilog_combine_function_timing_blocks
■ verilog_default_combinational_delay
■
verilog_default_constraint_delay
■
verilog_default_sequential_delay
■
verilog_delay_path_polarity
■
verilog_flavor
■
verilog_function
■
verilog_functional_file
■
verilog_hierarchy_separator
■
verilog_model_notifier
■
verilog_model_power_as_inout
■
verilog_model_power_as_output
■
verilog_model_power_supplies
■
verilog_model_removal_as_hold
■
verilog_model_use_recrem
■
verilog_model_use_setuphold
■
verilog_notifier_name
■
verilog_table_indices
■
verilog_udp_file
■
verilog_unit_delay
■
verilog_unused_pins_format
■
vg_allow_floating_nets
■
vg_enable_constraint_measurements
■
vg_enable_hidden_measurements
■
vg_enable_pulse_measurements
■
vg_enable_steady_measurements
■
vg_enable_switching_measurements
■
vg_explicit_leakage_states
■
vg_log_level
■
vg_max_arcs_per_input_transition
■ vg_max_leakage_states
■
vg_partial_circuit_collapse
■
vg_restricted_inputs
■
vg_restricted_states
■
vg_state_selection
■
voltage_name_map
■
weak
■
whens
■
workers_as_daemons
absolute_leakage_threshold_value
This parameter takes effect when the parameter
'model_reverse_polarity_current' is set to 0 and the measured gate leakage
current or pg current is of reverse polarity.
In this case, if the absolute value of the leakage current is below this threshold
value, we will make it small positive number that is controlled by the parameter
'leakage_current_substitution_value'.
active_pvts
Specifies the names of the operating condition across which all measurements
are performed. A Liberty model is written out for the operating condition
specified with this parameter. Only one PVT should be specified with
active_pvts. If a multi-PVT characterization is desired, it is recommended to
run characterization for each PVT separately in its own respective charpoint.
When generating IBIS models, this parameter can take multiple operating
conditions and is order-dependent. The order of the process voltage
temperature points must be set active_pvts {typ min max}. If you do not
adhere to this order, the resulting IBIS models will be incorrect. For more
details, see the IBIS Model Format Support section of Chapter 14, IBIS.
add_constraint_margin
Add the specifies margin value to the constraint tables. The margin value can
apply to setup, hold, recovery, removal, mpw, nochange, etc. Using
add_lvf_constraint_margin
Adds a percentage margin to LVF constraint sigma.
param 0 Float()
add_lvf_delay_margin
Adds a percentage margin to LVF delay sigma.
param 0 Float()
add_lvf_slew_margin
Adds a percentage margin to LVF slew sigma.
param 0 Float()
add_stat_constraint_margin
The margin value to be added to statistical constraint tables. The table can be
lvf_constraint, stat_hold, etc.
advanced_dp
Uses the new CDPL based distributed computing core.
param 1 Flag()
advanced_node
Enables model preprocessing. See Model Preprocessing for more information.
param 0 0, 1
advanced_sof
New SOF file format with improved performance.
param 1 Flag()
aocv_correlation_coeff_between_stages
Specifies the correlation coefficient between the current stage and next 2
stages. The first value is the coefficient between the stage and the next stage.
The last value is the coefficient between the stage and the next stage.
aocv_early_sigma
Number of sigma's to be used for aocv early table
param -3 Integer(-6,-1)
aocv_fanout_cells
List of cells to be used as load at each stage for aocv characterization.
aocv_fanout_load
For lumped interconnect model, the lumped capacitor is a value in Farads, for
example 0.02e-12. For pi interconnect model, the PI model is specified as a Tcl
list of {C1 R C2} in Farads, Ohms, and Farads, respectively. For example,
{0.01e-12 100 0.03e-12}.
aocv_fast_char
Enable this parameter to speed up AOCV char. This simulates a reduced
number of stages and comes up with the derate factor analytically for all
stages.
param 1 Flag()
aocv_input_pin
Load to be connected at the output of active load.
aocv_interconnect_model
Specifies the interconnect loading structure to be placed at the end of each
stage. Lumped load (lumped) and PI model (pi) are supported.Default is ot to
put any load.
aocv_late_sigma
Number of sigma's to be used for aocv late table.
param 3 Integer(1,6)
aocv_mc_mode
Monte Carlo mode to be used by finesim for aocv characterization.
aocv_num_fanouts
Number of cells to be connected at the output of each stage for aocv
characterization.It can either be a single integer in which case the same
number of cells will be connected at the output of each stage or a list of
integers in which case the entries in the list will specify the number of outputs
are each stage
aocv_num_stages
Number of cells to be connected in series for AOCV characterization.
param 10 Integer(2,1000)
aocv_output_pin
Load to be connected at the output of active load.
aocv_passive_load
Load to be connected at the output of active load.
aocv_sample_size
Number of samples to be used for MonteCarlo simulations for AOCV
aocv_sensitivity_based
If enabled, do sensitivity based AOCV char instead of MonteCarlo simulation
based
param 0 Flag()
archive_condition_for_pruning
Determines whether the pruning results are archived as a compressed tar file
(compress, no).
archive_condition_on_failure
Determines whether the SPICE simulation results are archived (yes), archived
as a compressed tar file (compress), or only sof.log will be saved (no) when a
simulation fails.
archive_condition_on_success
Determines whether the compressed SPICE simulation results are archived as
a compressed tar file (yes, compress), or only sof.log will be saved (no) when a
simulation succeeds.
archive_level
Determines how much SPICE result is saved. If it is 0, no sof.log will be saved.
param 0 Integer(0,1)
auto_fix
The limit of autofix retries for failed tasks
param 1 0 - 10
back_bias_connection
Controls the generation of the simple attribute physical_connection under
pg_pin group for cell-level attribute within a Liberty model. The
physical_connection attribute can have the following values: device_layer and
routing_pin.
■
The device_layer value specifies that the bias connection is physically
external to the cell. In this case, the library provides biasing tap cells that
connect through the device layers.
■
The routing_pin value specifies that the bias connection is inside a cell and
is exported as a physical geometry and a routing pin. For more details
please refer to Library Compiler User Guide.
backup_simulation_tmpdir
Specifies the backup directory in which the temporary files for a simulation are
to be written. Siliconsmart will honor simulation_tmpdir first. If the simulation
failed due to disk issue, it will try backup_simulation_tmpdir if it's not empty.
bjt_model_names
Names of diode models used by netlist pruning.
bundle_bit_independent_descriptor
When this parameter is enabled, the SiliconSmart tool treats each 1-bit entity of
the multi-bit cell independently. This parameter should be specified before the
configure command.
For example, for a 2-bit DFF with the following description (in the instance file),
the constraint arc between D0 and CK can be characterized for two states of
D1 (D1 =0 and D1=1). When bundle_bit_independent_descriptor is
set to 1, this constraint arc will be characterized only for D1=0.
add_pin CK default -input
add_pin D0 default -input
add_pin D1 default -input
add_pin Q0 default -output
add_pin Q1 default -output
param 0 Flag()
bundle_bit_independent_descriptor_mode
Specifies modes of state selection when
bundle_bit_independent_descriptor is turned on. The value 1
indicates independent treatment of bits, and value 2 indicates an enhancement
from value 1 with additional states representing average values. You should
specify this flag before configure..
param 1 0, 1, 2
cap_model_names
Names of capacitor models used by netlist pruning.
ccb_separator
The string parameter used as the separator when creating the CCB names for
CCS-Noise characterization.
ccb_single_fanout
Generates a single CCB for each input and output pin as below:
■
0 — generate all CCBs for all the bits of the bus (default)
■
1 — generate only one CCB for the input and output pins. If the input/output
pin is a bus, a single CCB will be generated for each bit of the bus.
■
2 — generate a single CCB for the whole bus. The bit used to create the
CCB is based on the value of the parameter ccb_single_fanout_bit.
■ 3 — If the input pin is a bus, all possible CCBs will be generated for the bit
specified by the parameter ccb_single_fanout_bit. For a normal input
pin which is not a bus, setting this parameter to 3 functions as if set to 0.
param 0 0, 1, 2, 3
ccb_single_fanout_bit
Specifies the bit which should be used to create the CCB for a bus. By default,
the 0th bit will be used. This parameter works only for CCSN flow for memories.
This parameter will take effect when the parameter ccb_single_fanout is
set to 2.
ccbs_for_input_driving_passgate
When set to 1 for a cell, the SiliconSmart tool internally sets the following
parameters automatically as below:
set_config_opt –cell {cell} liberty_minimize_timing_whens 0
set_config_opt –cell {cell} ccsn_model_default_pin_based_models 1
param 0 0, 1, 2
ccs_delay_abs_tolerance
Controls absolute delay difference between CCS and NLDM delay
ccs_delay_tolerance
Specifies the acceptable difference between measured delay from simulation
and delay obtained from the CCS waveform, expressed as a fraction of the
measured delay from simulation
ccs_noise_iv_dc_analysis_mode
This is a Boolean parameter which applies to ccs-noise iv generation. If set to
true, dc analysis is used in generating iv curves. If set to false, it uses transient
analysis to generate iv curves.
param 1 Flag()
ccs_noise_miller_resistance
This defines a high resistance value that is put between the input node and
ground for measuring Miller capacitance.
ccs_power_modeling_load_indices
This parameter specifies the load indices to be used for ccs power modeling.
By default all the characterized load indices are modeled. But this parameter
can be used to model a subset of the load indices.
ccs_power_modeling_slew_indices
This parameter specifies the slew indices to be used for ccs power modeling.
By default all the characterized slew indices are modeled. But this parameter
can be used to model a subset of the slew indices.
ccs_power_optimize_waveform
Determines whether to apply optimized segmentation to reduce the current
waveforms in CCS power models.
param 1 0, 1
ccs_receiver1_check_ratio
Will raise warning if the ratio between recv_cap1 and nldm cap is more than
ccs_receiver1_check_ratio.
param 2 Integer(1,None)
ccs_receiver2_check_ratio
Will raise warning if the ratio between recv_cap2 and nldm cap is more than
ccs_receiver2_check_ratio.
param 5 Integer(1,None)
ccs_segment_tolerance
Specifies maximum allowedvoltagedifference between the simulation waveform
and the CCS waveform, used for selecting the CCS model
ccsn_add_second_level_ccb_load
Direct SiliconSmart to add load at second level CCB output.
param 1 Flag()
ccsn_cmiller_check_mode
This parameter defines the various modes of handling negative miller
capacitance values. If the value of this parameter is set to 1, the negative miller
cap values are replaced by the parameter value 'ccsn_cmiller_default_value'
during modeling. If the value of the parameter is set to 2 and if one of the rise/
fall miller cap is negative, then Siliconsmart copies the value from the opposite
side measure onto the negative side. If both the rise and fall miller cap values
are negative, then Siliconsmart will error out. If the value of this parameter is 3,
then Siliconsmart will error out if any of the rise/fall miller cap values are
negative.
param 2 Integer(1,3)
ccsn_cmiller_default_value
Specifies the default value for replacing negative miller capacitance values
during encountered during modeling.
ccsn_exclude_pin
This parameter can be used to specify list of pins for which CCB creation needs
to be suppressed.
This parameter can also be applied to bits of a bus while characterizing CCSN
for memories or cells with bussed pins. It is possible to use regular expressions
to specify the pins instead of having to specify all the pins of the bus as a list.
For example, if you want to configure//model CCS-noise only for bit A[0] of bus
A, which is 7-bit wide (A[0-6]), you can set the following:
set_config_opt ccsn_exclude_pin {A\[[1-6]+]}
ccsn_ignore_char_failures_during_modeling
When set to 1, the SiliconSmart tool will ignore any characterization failures
during CCSN characterization and will continue modeling the CCB data as if
nothing happened. The final CCSN model will be checked if all of the timing
arcs are covered by valid minimal CCB data or if all of the pins have minimal
pin-based data. The SiliconSmart tool will only fail the cell if that condition is not
met.
param 0 Flag()
ccsn_initial_delay
Initial delay used for noise waveform and noise propagation. The value
specified by this parameter is applied only if use_ccsn_initial_delay is
set to 1.
ccsn_model_default_pin_based_models
Direct SiliconSmart to model default pin-based ccsn models at input pin and
output pin. If set to 0, the SiliconSmart tool will disable default pin-based
models.
param 1 Flag()
ccsn_truncate_long_ccb_name
This parameter when enabled truncates CCB names if the length of CCB name
exceeds 100 characters.
param 0 Flag()
ccsn_model_passgate_ccb
This parameter when set to 'pin' models CCBs with pass-gates as pin-based
models. If set to 'arc', it models the CCbs with pass-gates as arc-based models
if the path from input to output is a 1 or 2 stage path.
ccsn_use_enhanced_hw_method
Direct SiliconSmart to use enhanced algorithm to calculate height and width for
ccsn characterization .
param 1 Flag()
ccsn_use_enhanced_miller_cap
This parameter when enabled uses an enhanced method to determine miller
cap for CCSN characterization. This should result in better reciever modeling.
param 1 Integer(0,2)
ccsn_use_optimal_node_selection_method
This parameter causes SiliconSmart to use different internal node selection
algorithm for CCB outputs. If the value is 0, then the source/drain node of a
MOSFET is selected. If the value is 2, the node with least average resistance to
all source and sinks is used. If the value is 3, the node name with shortest
param 1 Integer(0,3)
ccsn_use_partial_netlist
Enables a CCSN partial CCB cut for user-specified cells. This parameter is
specified at the cell-level with the set_config_opt command.
param 0 Flag()
To apply the partial netlist flow to a particular set of cells (where cells
contains the set of cells where the partial CCB cut flow will be used):
set_config_opt -cell cells ccsn_use_partial netlist 1
ccsp_cross_point_selection
For multi-output cells, the cross-type CCSP tables contain duplicated cross-
points with slightly different data, which will cause LBDB-860 errors when
compiled by LC. To ensure data consistency, data in one of the duplicated
points is selected to replace the data in the other cross-points.
If this parameter is set to alphabetical, the cross-point is selected
alphabetically using the name of the output pin associated with the data point.
Otherwise, the selection is determined by the processing order of the
pg_current vectors, which sometimes leads to arbitrary changes of the
cdpl_alt_submission
By default, CDPL submits workers through interactive interface of qsub or bsub.
This option will let CDPL submit workers in non-interative mode to prevent it
from violating some special farm policy in customer sites.
param 0 Flag()
cdpl_host_file
Specifies the CDPL host file to enable customized configuration of farms.
Please refer to the CDPL guide for the hosts.cfg file format.
cdpl_long_task_alert
This option lets CDPL issue a warning if it takes exceptionally long time for
some tasks to finish.
cdpl_submission_cmd
Specifies customized submission command instead of the usual farm
commands supported by CDPL. This option only comes into effect when
cdpl_alt_submission is set to 1.
cdpl_submission_timeout
This option controls the timeout tolerance of which CDPL waits for the farm to
obtain a submitted worker. Default value is 0, meaning that CDPL will wait
forever.
cdpl_task_max_lifespan
Defines a limit on the maximum execution time of a task (in minutes). Once a
task exceeds the time limit, it will be immediately killed and all simulation
progress will be lost. It is recommended to use this option with auto_fix to
prevent random hanging tasks.
cdpl_worker_max_tasks
Limit of maximum number of tasks that an FSE worker can execute. Warning:
setting a small number for this option will impact performance.
param -1 Integer(-1,500000)
cdpl_worker_timeout
Idle timeout threshold in seconds for CDPL workers.
cell_families
This parameter is used to categorize cells into separate subsets of families. It is
specified as a list of list of cell names.
cell_type
One of stdCell, ioCell, or memory. The SiliconSmart uses some heuristics to
detect the cell type and uses this for the license checking.
char_engine_max_lifespan
This parameter defines a lifespan (in minutes) for characterization engines and
workers. Any characterization engine or worker that exceeds this limit will
terminate itself when its current job is completed.
check_pins_in_netlist
Checks the netlist for pins and SPICE nodes. When set to 1, the parameter
checks:
1. Consistency of pin names between the instance file and netlist.
2. Whether internal nodes in add_pin statements are present in the netlist.
For example:
add_pin name -spice_node int_node
param 0 0, 1
check_sof
Check SOF files after characterization tasks are done.
param 0 Flag()
check_templates
Check template files (.t) after configure tasks are done.
param 0 Flag()
combine_delay_and_cin
Direct SiliconSmart to do timing and pin capacitance measurements for each
arc and pin respectively from delay deck.
param 1 Flag()
combine_energy_and_cin
Direct the SiliconSmart tool to do energy and pin capacitance measurements in
the same deck for non-propagating states.
param 1 Flag()
combine_lvf_cin
Directs the SiliconSmart tool to perform statistical timing and pin capacitance
measurements for each arc and pin, respectively, from statistical delay deck.
param 0 0, 1
combine_timing_and_power
Directs SiliconSmart to perform timing and energy measurements for each arc
from the delay deck.
param 1 Flag()
compact_ccs_tolerance
tolerance for ccs waveform compression to generate compact ccs model
configure_all_states_for_ccb
Direct SiliconSmart to configure and characterize all the possible states for a
ccb.
param 0 Flag()
configure_constraint_delay
If a setup or recovery constraint exists for an input pin, SiliconSmart measures
delay with the constraining pin at minimum setup. This is best used when
constraint_style is set to pushout-degradation, which ensures that the setup/
hold time is not so aggressive that it would be unstable.
param 0 Flag()
configure_internal_node_arcs
When set to 1, then appropriate timing arcs from and to internal node are
created during the configure step using the functional description of the cell.
param 0 0, 1
configure_from_function
Use the function-based analysis method.
param 1 Flag()
configure_from_structure
Use the FR structural description for configuration, if available. This parameter
is used to enable the vector generator module.
param 0 Flag()
configure_preferred_secondary_input
This parameters accepts a list of pin names that will be used as a priority list.
Suppose for a given state, an arc can be constructed with multiple switching
inputs. If there are multiple possibilities for the secondary switching pin, those
set of pins will be considered in the order of priority given by this parameter.
configure_write_fugues
Write a fugue description file after configuration.
param 0 Flag()
configure_zdisable_pull
If a three-state output has a pull up/down/middle resistor built in, then it is
possible to measure some disable arcs as a delay to an output transition rather
than the standard current-based methodology. If that is desired then this
variable should be set to the name of the supply to which the pull resistor is
attached.
constraint_exclude_outputs
List of output pins to be excluded from the stimulus while performing a
constraint measurement. This is relevant in the context of reducing the
observable nodes for constraints when multiple choices are available for a
given arc.
constraint_glitch_time_delta
Interval between an expected edge and an opposite edge indicating a failed
transition.
constraint_matched_internal_state
Normally a constraint measurement is designed so that an output is
transitioning when the constraint passes. In many cases (flops) this will mean
that the setup and hold (or recovery and removal) for the same transitions will
be measured for different internal states.
This parameter reverses the preference for hold and removal so that the same
internal state will be used for hold as for setup and for removal as for recovery.
param 0 Flag()
constraint_mode
Controls the method used to acquire setup and hold constraints. The methods
are described in See the Methodology in Chapter 11, Timing Measurements.
constraint_monotonicity_tolerance_pct
It is the tolerance value by which the value will be adjusted if a non-
monotonicity is detected.
param 1 Integer(1,None)
constraint_outputs
List of output pins to be considered in evaluating constraints.
constraint_pulse_cratering
Allow the input pulse for mpw and combined setup and hold to reduce to less
than a full rail transition. This does not apply to if driver_mode is active.
param 0 Flag()
constraint_seed_by_slew
Specifies the step size used while expanding the constraint window during
constraint measurement. This value is multiplied by each average input slew to
determine the uncertainty of the initial constraint seed. Set this to 0 to disable.
constraint_seed_step
Specifies the step size used while expanding the constraint window during
constraint measurement.
constraint_seed_values
Specifies the default values used for independent setup and hold constraint
acquisitions. The defaults help reduce the amount of simulation time by
providing a good initial guess.
This parameter can be set to a scalar value based on the input transition times
of the data and clock pins. See Constraints in Measurement and Modeling
Methodology.
constraint_simulated_seed
If there are no seed values provided by the user to find constraint values within
the constraint resolution, the SiliconSmart tool will need to simulate a number
of times. This parameter can artificially generate these seed values by creating
a 2x2 table to estimate the values for the entire table and use those values as
the seed.
The default value is 2, which means this method is applied for cell type memory
but not for standard cells. When set to 1, this method is applied irrespective of
cell type. When set to 0, this method is not used.
param 2 0, 1, 2
constraint_simulated_seed_acq_based
ACE feature. To create simluated seed for each when condition.
param 0 Flag()
constraint_simulated_seed_finesim_mode
Simulator option to be used for constraint seed simulations.
constraint_simulated_seed_simulator
Simulator to be used for constraint_simulated_seed related simulations.
constraint_simulation_mode
Can be set to full (original simulator), fse (FSE + sign off (original simulator)), or
hybrid (FSE + original simulator).
constraint_trigger_node
Specifies either data pin or clock pin as the trigger pin. Trigger pin is the pin
from which delay will be measured up to the internal node which is being
monitored.
construct_ncx_templates
Enables the construction of NCX templates.
param 0 Flag()
current_absolute_tolerance
Absolute tolerance for comparing current values in output_current vectors.
current_relative_tolerance
Relative tolerance for comparing current values in output_current vectors.
cut_netlist
Specifies the netlist to use for the circuit under test. This can be overridden for
different measurements and operating conditions. If a relative path is used, the
root directory is the netlists directory. When unspecified, uses the cell name
and netlist_extension.
cut_stat_netlist
Specifies the parameterized netlist which is generated by the
analyze_netlists -statistical command for the statistical
characterization.
datasheet_truth_table
This parameter accepts a list of lists of strings for the user supplied truth table
in the datasheet.
dc_current_absolute_tolerance
Absolute tolerance for dc_current table comparison. Used by the
compare_library command. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
dc_current_product_tolerance
Product tolerance for dc_current table comparison. Here product is the
relative_tolerance multiplied by the absolute_tolerance. Used by the
compare_library command. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
dc_current_relative_tolerance
Relative tolerance for dc_current table comparison. Valid value range is
between 0 and 1. Used by the compare_library command. Reports failures in
the report if error is larger than the specified tolerance. Note that all specified
tolerances have to be exceeded for an error to be reported. A value of zero
disables the check for this tolerance.
dc_current_threshold
If the parameter make_small_dc_current_value_as_zero is on and if the
absolute value of dc_current is less than or equal to dc_current_threshold
value then the dc_current value is made as zero.
default_load_position
Specifies position of load in load table.The value of load corresponding to this
position and the value of slew (see default_slew_position) will be used in
selecting default arc. This selection is controlled by the
default_position_selection parameter.
default_netlist_size
This parameter is used to skip the evaluation of the .inst file when calculating
job weight. When set to non-zero, SiliconSmart uses it as the netlist file size; or
SiliconSmart will evaluate the .inst file to get the real file name and size.
default_position_selection
Ensures default arc selection based on slew and load value. You can give
position of slew and load (see default_load_position and
default_slew_position) along with this parameter.
param 0 0, 1
default_slew_position
Specifies position of slew in slew table. The value of slew corresponding to this
position and the value of load (see default_load_position) will be used in
selecting the default arc. This selection is controlled by the
default_position_selection parameter.
delay_based_constraint_mode
Enables path-based constraint analysis to reduce characterization time of
setup and hold constraints for memories. A value of off disables path-based
constraint analysis.
delay_matching_cin
Enable the delay matching methodology for pin capacitance measurement.
Matching of delay is done against a driver precharacterization data which
contains a table of capacitance values and the resulting delay.
param 0 Flag()
detect_internal_power_nodes
flag to detect internal power nets.
param 1 Flag()
detect_internal_power_nodes_for_pruning
flag to detect internal power and supply nets for pruning.
param 1 Flag()
differential_delay_mode
Controls the method for measuring delay to/from a differential pin pair:
■ If zdiff, applies to differential mode for zenable measurement; voltage for
z-state is set to middle of the power rails for both pin and its complementary
pin.
■ If crossover, measure at the crossover point.
■
If single, treat the pin as a normal single-ended pin.
■
if legacy, use the original method, measured relative to the partial swing
rails.
differential_delay_probe_style
Influences the measurement style used to probe differential output crossovers
when differential_delay_mode is crossover. If cross_first, the first cross of the
differential output pair, after the related input(s) toggle(s) is considered as the
crossover point. When cross_last, the last cross between the differential output
pair, after the related input(s) toggle(s) is considered as the crossover point.
rise_fall infers the crossover point as the time, after the related input(s)
toggle(s), when the differential output pair toggles in the desired direction and
equal in voltage.
differential_pair_timing_duplication
This parameter restricts SiliconSmart from automatically copying timing table
for differential output pair. By default, for a differential output pair, the data is
usually copied from one pin to the other if any of the output pin function is
undefined. Setting differential_pair_timing_duplication to 1 will
disable the copying. The default is 0.
param 1 0, 1
dio_model_names
Names of diode models used by netlist pruning.
disable_negative_power_adjustments
param 0 Flag()
disable_sim_stats
param 0 Flag()
do_zero_modeling
Used along with enable_rechar_reporting param to follow zero modeling for
rechar reporting
param 0 Flag()
dontcare_bias_on_output
If true (default), dontcare_bias is used to force output and internal pin state. If
false, then not.
param 1 Flag()
dontcare_values
Specifies a list of values which apply to the pins specified with dontcare_pins.
The values can 0 or 1 and must match one-for-one with the pin list.
driver_load_steps
Specifies the number steps the output capacitance is stepped through when
characterizing a cell to be used as an active driver. A greater number of steps
improves the predictability of the input slew rate to the CUT, at the expense of
run time.
ecsm_power_modeling_load_indices
This parameter specifies the load indices to be used for ecsm power modeling.
By default all the characterized load indices are modeled. But this parameter
can be used to model a subset of the load indices.
ecsm_power_modeling_slew_indices
This parameter specifies the slew indices to be used for ecsm power modeling.
By default all the characterized slew indices are modeled. But this parameter
can be used to model a subset of the slew indices.
ecsm_threshold_pcts_fall
List of threshold percentages for measuring ecsm capacitance fall
ecsm_threshold_pcts_rise
List of threshold percentages for measuring ecsm capacitance rise
em_analyze_power_nets
When set to 0, power nets will not be included in EM analysis. The default is 1.
param 1 0, 1
em_table_with_current_types
Generate separate EM toggle rate tables for different current types (average,
RMS, peak) . The default is 0.
param 0 Flag()
em_threshold_simulator
Specifies the type of simulator used for EM current threshold calculation. The
only supported simulation is CustomSim (xa).
em_threshold_simulator_cmd
Sets the command used by SiliconSmart to invoke the simulator for EM current
threshold calculations. The format of the command should be similar to an
actual command-line execution of the simulator, with the string [input_deck]
used in place of the input file, and [listing_file] for the output file. [input_deck]
and [listing_file] are automatically replaced with the file names generated by
em_threshold_tolerance
Specify a value in Amperes for EM current thresholds below which the
threshold is treated as zero and is ignored.
em_use_xba
Enables the extended back-annotation (XBA) flow for EM current threshould
calculation by CustomSim (xa). The default is 1.
param 1 Flag()
enable_ac_decap
This is a boolean parameter which is applied to intrinsic capacitance
characterization in CCS. If set to true, ac analysis is used in characterizing
intrinsic capacitance. The default is 0.
Note: For FineSim, only version 2015.06 and later supports this
parameter.
param 0 0, 1
enable_ac_decap_merge
This is a boolean parameter which is applied to intrinsic capacitance
characterization in CCS using AC analysis. If set to true, Siliconsmart tries to
merge netlists to improve performance. The default is 0. Note that if
enable_ac_decap_merge is set to true then enable_ac_decap is automatically
set to true.
Note: For FineSim, only version 2015.06 and later supports this
parameter.
param 0 0, 1
enable_cache
Use this parameter to enable or disable the caching mechanism for
evaluations. When enabled, the simulation results will be cached for the first
time and then for other simulations, the cache is checked first. Simulation is
avoided if there are cache hits. Cache checking is disabled by default.
param 0 0, 1
enable_cell_leakage_power_modeling
When true, the 'cell_leakage_power' attribute will be modeled for the cell even if
the value of the parameter 'liberty_multi_rail_format' is v1 or v2.
param 0 Flag()
enable_dc_leakage
This is a Boolean parameter which applies to leakage current. If set to true, dc
analysis is used in measuring leakage currents. If set to false, it uses transient
analysis in measuring leakage currents.
param 0 Flag()
enable_exhaustive_modeling_of_ccbs
Direct SiliconSmart to model all the possible ccbs as ccsn_first_stage or
ccsn_last_stage when multiple ccbs are available.
param 1 Flag()
enable_external_simulator_pruning
Enables netlist pruning algorithms to employ standalone, external simulators.
Currently, only FineSim is supported. When this option is disabled, the
embedded FineSim engine is used regardless of the simulator type, and will
require the availability of the requisite license features.
param 0 0, 1
enable_fast_sweep
Enables FSE fast sweep.
param 0 Flag()
enable_fse_log
Enables FSE log file.
param 0 Flag()
enable_gated_hold_constraint
When enabled, the SiliconSmart tool uses gated measurements for hold
constraint. This means that hold constraint will use glitch measurements on the
output to find out the hold value under all circumstances as much as possible.
param 0 0, 1
enable_macro_pruning
Enables the same netlist pruning algorithm as memory to run for before
simulation.
param 0 Flag()
enable_memory_pruning
Enables the netlist pruning algorithm to run for memory before simulation.
param 0 Flag()
enable_netlist_pruning
Enables netlist pruning for noise propagation measurements. See the Netlist
Pruning section in the Characterization and Modeling chapter for more
information.
param 0 Flag()
enable_parallel_sweeps
Simulates sweeps across multiple decks in parallel.
param 0 0, 1
enable_parasitic_sweep
A parameter which is applied to intrinsic parasitic characterization in CCS. This
enables voltage sweep of intrinsic capacitance and resistance. Use
numsteps_voltage to set the number of steps in the voltage sweep. The default
is 0.
param 0 0, 1
enable_rechar_reporting
Enables rechar reporting mechanism.
param 0 Flag()
enable_status
Enables support of status command.
param 1 Flag()
energy_fast_mode_leakage
Conducts leakage measurement after energy measurement, when
energy_fast_mode is set to 1.
param 0 0, 1
energy_fast_mode_leakage_interval
Sets interval of conducted leakage measurement after energy measurement,
when energy_fast_mode is set to 1.
ensure_constraint_monotonicity
Any non-monotonicity detected in the characterization flow will be flagged by a
warning.
param 0 Flag()
event_rank
This parameter specifies a list of possible events for an arc in order from best to
worst. It takes a list of pairs consisting of a Boolean expression representing
states and a string representing the event identifier. Event ids are typically used
in cases where the same state can be represented by multiple events eg.,
cases involving multiple switching inputs. Only one of event_rank or state_rank
needs to be specified. If both parameters are specified, then event_rank is
used and state_rank is ignored.
excluded_acquisitions
Acquisitions will be matched against this list and excluded if they match any
one of the elements.
extrapolate_ccs_cin_slew
Controls whether to extend the slew range of ccs cin tables to cover the normal
slew range.
param 0 0, 1
finesim_so_path
If available, use {finesim_so_path}/{platform}/lib/libfinesim.so for
finesim_embedded.
force_removal_recovery_modeling
Used with removal and recovery arcs. When set to 0, the SiliconSmart tool will
skip modeling removal_rising when both rising and falling constraints are
characterized. When set to 1, the tool will write out only rising constraints for
removal_rising. Similar logic applies to removal_falling,
recovery_rising, and recovery_falling arcs.
param 0 0, 1
fr_archive_condition_on_failure
Determines whether the FR results are archived as a compressed tar file
(compress, no).
fr_archive_condition_on_success
Determines whether the FR results are archived as a compressed tar file
(compress, no).
fse_preprocess_cmd
Sets the command used by SiliconSmart to preprocess for simulation when fse
is used. It is used with fse_user_cmd.
fse_user_cmd
run user command before simulation.
param 0 Flag()
gate_leakage_time_scaling_factor
SiliconSmart uses a predefined simulation time to calculate the leakage current
through various supplies and also the gate leakage current through the inputs.
This simulation time used by SiliconSmart is sufficient to capture the correct
polarity of leakage currents most of the time. However, for some cells, this
simulation time may not be sufficient enough to capture the correct polarity of
gate leakage especially if it changes very slowly over time. (This could be
verified by looking at the nature of the current waveform using FineWave).
In that case, the user may be given a warning during modeling that the gate
leakage current for a particular input pin for some when condition (say 'W') is
less than the value which is possible for that state. In such cases, the
parameter 'gate_leakage_time_scaling_factor' should be used to increase the
total simulation time. The default value of this parameter is 1.0 which means
the gate leakage will be measured between (1*pp) and ((1*pp)+pp) under
default conditions where pp equals 1.32e-8s.
The user can set the parameter 'gate_leakage_time_scaling_factor' to an
appropriate value such as 50.0 for example and then reconfigure,
recharacterize (after deleting the cache) and model the cell. This will measure
the gate leakage current between (50*pp) and ((50*pp)+pp) [if it is set to 50.0].
If the gate leakage current for some when conditions is still unexpected and/or
of reverse polarity, it means that the time scaling factor 50.0 is not sufficient.
The parameter needs to be set to a larger value may be 75.0 or 100.0 or 150.
The user will need to reconfigure, recharacterize the cell every time (after
deleting the cache), this parameter is set to a new value.
generate_all_ccbs_after_passgate
Direct SiliconSmart to create all the ccbs after the pass-gate.
param 1 Flag()
graphviz_location
This parameter specifies the path to the location of the Graphviz directory.
gzip_cellmodel_libs
Provides control over gzipping of intermediate library files under models/liberty/
cellmodels..
param 0 0, 1
harness
This parameter is usually used with 'set_config_opt' command to specify the
name of a harness created with the 'create_harness' command to be applied to
the cell.
HDL_cell_postprocess
Runs a script after HDL modeling is complete. The script name supplied by this
parameter is passed to the SiliconSmart tool and is executed after the HDL
modeling is complete. The file name passed as the first argument to that script
is the main model file: char_point/models/{verilog|vital}
For example:
# set HDL_cell_postprocess parameter with script name:
set_config_opt HDL_cell_postprocess myScript.tcl
hdl_vector_time_step
This specifies the delay between test vectors in a Verilog test bench.
param 20 Integer(1,None)
hierarchy_separator
This is used to specify the hierarchy separator in the memory netlist to
Siliconsmart when it is used to created a pruned flat netlist. By default, the
value of the separator is ‘/’. However, in some cases, the hierarchy separator in
the netlist is determined with other characters like ‘|’. In such cases, this
param / String()
hsp_keep_model
Enable -share to keep the models across the tasks in one job in hspice client
server mode
param 1 Flag()
hspice_client
Use HSPICE client binary for performance.
param 1 Flag()
ibis_add_submodel
This is a Boolean parameter which applies to clamp generation in IBIS. The
default is true, generating [Add Submodel] when odt clamps are present in the
cell. If set to false, [Add Submodel] keyword is not generated and the currents
are accomodated in the clamping tables.
param 1 Flag()
ibis_ami
This parameter will enable AMI modeling for cells
param 0 Flag()
ibis_ami_bit_time
This parameter is to determine input bit series width
ibis_ami_sample_interval
This parameter determines the internal sampling interval for AMI model
extraction.
ibis_ami_taps
This parameter is to specify taps for a typical FIR filter. Example: set
ibis_ami_taps {-1, 0, 1, 2, 3}, which will specify a 5 taps filter
ibis_ami_weights
This parameter is to determine tap weights, must have same length as
ibis_ami_taps
ibis_c_comp_user_only
This is a Boolean parameter which decides on what value to use in C_comp. If
true, the user supplied values (ibis_c_comp_typ, ibis_c_comp_min,
ibis_c_comp_max) overrides the C_comp values characterized by
Siliconsmart. If false, the preference is given to the values generated by
Siliconsmart. The default value is false.
param 0 Flag()
ibis_clamping_curve_make_monotonic
This is a Boolean parameter which applies to all the pins in the cell. If true the
clamping curves of the IBIS model are forced to be monotonic. The default
value is true. This is because IBIS complains if there are non-monotonic curves
in the generated IBIS model.
param 1 Flag()
ibis_clamping_iv_analysis_mode_dc
This is a Boolean parameter which applies to both clamping and iv generation
in IBIS. If set to true, dc analysis is used in generating clamping and iv curves.
The default is false which uses transient analysis to generate clamping and iv
curves.
param 0 Flag()
ibis_clamping_iv_num_points
Specifies the number of points to be sampled while characterizing a cell for IV
and clamping curves. For example, if you specify this parameter to be 200 and
the IV/clamping swing is from -1.8V to 3.6V, 200 points would be generated
between -1.8V and 3.6V. Then these 200 points would be reduced to 100
points that best describe the curve.
The IBIS specification limits the number of points in the IV/clamping curves to
100. The default number of steps generated is 90. Not that for this parameter to
work, you must set ibis_clamping_iv_analysis_mode_dc to true. SiliconSmart
supports a user-specified number of points only when the IV/Clamping
characterization is done using DC analysis.
param 90 Integer()
ibis_cref
Specifies the capacitance, resistance, and voltage used in the test loads.
ibis_diff_pin_single_model
This is a Boolean parameter to control how many models to generate for a
differential pin pair. If set to true only one model is generated for a pair.
Otherwise models are generated for both pins and this is the default setting.
param 0 Flag()
ibis_odt_driver_only
For IBIS clamping, specifies whether a particular mode is only for drivers.
ibis_odt_linear_regression_max_scale
This parameter can be set to a floating point value between (-1.0,2.0]. For
example, if it is set to 0.5, the regression uses data till 0.5*logic_high_name.
The start point of the data range is determined using
ibis_odt_linear_regression_min_scale.
ibis_odt_linear_regression_min_scale
This parameter can be set to a floating point value between [-1.0,2.0). For
example, if it is set to -0.5, the regression uses data from -
ibis_odt_mode
Specifies a comment for each ODT mode. All ODT modes must be defined
here. Use this parameter in configuration to determine state partitioning.
ibis_odt_mode_name
Specifies a name for each ODT mode keyed by condition. This parameter is
optional when specifying ODT modes and provides the flexibility to specify a
model name.
ibis_odt_pulldown_modes
Specifies whether a particular mode (keyed by condition) has a pull-down
resistor.
ibis_odt_pullup_modes
Specifies whether a particular mode (keyed by condition) has a pull-up resistor.
ibis_odt_receiver_only
For IBIS clamping, specifies whether a particular mode is only for receivers.
ibis_pin_alias
This parameter is used with 'set_config_opt' command. This is useful for
renaming pin names in the IBIS model file. Example usage: set_config_opt -pin
PAD ibis_pin_alias PADQV The IBIS model file will contain model with name
starting with MPADQV instead of usual MPAD.
ibis_pin_mapping
This boolean parameter controls the appearance of the [Pin Mapping] section
in IBIS model. This section is recommended by IBIS standards not required.
param 0 Flag()
ibis_plan_for_corner_merge
If you are generating typ, min, max corner data using separate characterization
points and you want to merge the data into a single IBIS file, you must set this
Boolean parameter to true in each one of the characterization points (typ, min,
max). When set to true, the simulation ranges in each corner are manipulated
so that the interpolation and extrapolation errors are minimized while merging.
param 0 Flag()
ibis_prog_driver_mode
Specifies a comment for each programmable driver mode. All programmable
driver modes must be defined here. Use this parameter in configuration to
determine state partitioning.
ibis_prog_driver_mode_name
Specifies a name for each programmable driver mode keyed by condition. This
parameter is optional when specifying programmable driver modes and
provides the flexibility to specify a model name.
ibis_rref
Specifies the capacitance, resistance, and voltage used in the test loads.
ibis_single_pvt_corner_name
Suppose you have all the three corners (typ/min/max) specified and you want
to generate a single corner file with `min' values. This keyword must be set to
`min'. This keyword is ignored if you are generating IBIS data for all the three
corners in a single file.
ibis_source
This parameter controls ibis source section which would be written to the ibis
files
ibis_typ_pvt
The first operating condition in active_pvts will be set as the typical PVT.
ibis_use_exact_mode_name
This is a boolean parameter which decides whether
ibis_prog_driver_mode_name and/or ibis_odt_mode_name is used
directly to construct model names. If not set, a mixture of cell and pin
information is used to construct model names. The default value is false.
param 0 Flag()
The above will generate an IBIS model with the following name convention:
[Model Selector]
| Model Description
|
TX1
TX2
TX3
|
[Model] TX1
[Model] TX2
[Model] TX3
The above will generate an IBIS model with the following name convention:
[Model Selector]
| Model Description
|
TX1_No_ODT
TX2_No_ODT
TX3_No_ODT
TX1_PD_ODT
TX2_PD_ODT
TX3_PD_ODT
TX1_PU_ODT
TX2_PU_ODT
TX3_PU_ODT
|
[Model] TX1_No_ODT
[Model] TX2_No_ODT
[Model] TX3_No_ODT
[Model] TX1_PD_ODT
[Model] TX2_PD_ODT
[Model] TX3_PD_ODT
[Model] TX1_PU_ODT
[Model] TX2_PU_ODT
[Model] TX3_PU_ODT
ibis_validate_bit_slew
This parameter is used to set the slew of input PRBS vector in the validation
deck. NOTE: Siliconsmart generates validation decks for LVDS like differential
buffers. The quality of the IBIS file is measured using eye diagram. The eye
diagram generation requires a random stream of bits.
ibis_validate_bit_time
This parameter is used to set the bit time of input PRBS vector in the validation
deck. NOTE: Siliconsmart generates validation decks for LVDS like differential
buffers. The quality of the IBIS file is measured using eye diagram. The eye
diagram generation requires a random stream of bits.
ibis_validate_input_pin_name
This parameter is used to set the input pin name in the IBIS Validation deck.
NOTE: Siliconsmart generates validation decks for LVDS like differential
buffers. The quality of the IBIS file is measured using eye diagram. The eye
diagram generation requires a random stream of bits.
ibis_validate_prbs_size
This parameter is used to set the size of input PRBS vector in the validation
deck. NOTE: Siliconsmart generates validation decks for LVDS like differential
buffers. The quality of the IBIS file is measured using eye diagram. The eye
diagram generation requires a random stream of bits.
param 50 Integer()
ibis_validate_terminating_resistor
This parameter is used to set the value of terminating resistor between
differential pins in the IBIS Validation deck. NOTE: Siliconsmart generates
validation decks for LVDS like differential buffers. The quality of the IBIS file is
measured using eye diagram. The eye diagram generation requires a random
stream of bits.
param 0 Float()
ibis_vcross_high
Used in [Receiver Threshold].
ibis_vcross_low
Used in [Receiver Threshold].
ibis_vdiff_ac
Used in [Receiver Threshold].
ibis_vdiff_dc
Used in [Receiver Threshold].
ibis_version
This parameter controls the ibis version number written to the ibis files (default:
4.1).
ibis_vinh
The minimum voltage for a high signal and the maximum voltage for a low
signal.
ibis_vinh_max
The minimum voltage for a high signal and the maximum voltage for a low
signal.
ibis_vinh_min
The minimum voltage for a high signal and the maximum voltage for a low
signal.
ibis_vinh_typ
The minimum voltage for a high signal and the maximum voltage for a low
signal.
ibis_vinl
The minimum voltage for a high signal and the maximum voltage for a low
signal.
ibis_vinl_max
The minimum voltage for a high signal and the maximum voltage for a low
signal.
ibis_vinl_min
The minimum voltage for a high signal and the maximum voltage for a low
signal.
ibis_vinl_typ
The minimum voltage for a high signal and the maximum voltage for a low
signal.
ibis_vmeas
Voltage measurement reference used for propagation delay measurements.
ibis_vmeas_max
Voltage measurement reference used for propagation delay measurements.
ibis_vmeas_min
Voltage measurement reference used for propagation delay measurements.
ibis_vmeas_typ
Voltage measurement reference used for propagation delay measurements.
ibis_vref
Specifies the capacitance, resistance, and voltage used in the test loads.
ibis_vt_curve_make_monotonic
This is a Boolean parameter which applies to all the pins in the cell. If true the
VT curves of the IBIS model are forced to be monotonic. The default value is
true. This is because IBIS complains if there are non-monotonic curves in the
generated IBIS model.
param 0 Flag()
ibischk_cmd
Sets the command used by SiliconSmart to run the IBIS golden parser on the
generated ibis file
ideal_netlist_ext
Specifies the filename extension (including the '.') for pre-layout cell netlists
used for EM current threshold simulation by CustomSim. Defaults to an empty
string.
import_explicit_points_per_arc
On import, the same explicit_points for different arcs may be combined into a
single parameter setting in the instance file. If this parameter is enabled, then
the parameter setting for each arc is kept separate.
param 0 Flag()
import_liberty_ndw
By default, this parameter is set to 0, which means the tool will use the driver
defined in the driver_mode parameter in configure.tcl. Set to 1 to
recharacterize the library using the driver waveform from the reference library.
This must be set before the import step.
param 0 0, 1
initial_delay_multiplier
This Option comes into picture when \"energy_fast_mode\" parameter is set to
1. This specifies which multiplying factor is to be multiplied with intial delay to
calculate duration of simulation time.
insert_liberty_default_ndw
Uses normalized driver waveforms in the imported liberty file to define the
driver for recharacterization
param 0 Flag()
init_internal_pins
When set to 1, the simulation netlist will contain initial node voltages for all
internal nodes based on the sensitization of the input pins for the particular
acquisition.
Internal pins are specified with the add_pin command and the related function
is specified with the add_function command. The framework setup is:
Example 463 Framework setup
add_pin in1 default -input
add_pin int1 default -internal -spice_node sp_node1
add_function intl {in1}
param 0 0, 1
initialization_cycles
Specifies the number of times to cycle the inputs to the cell before taking the
measurements. The default value is 0.
param 0 Integer(0,None)
internal_ground_nets
This parameter specifies the list of nets in the spice netlist that can be treated
as ground nets for memories.
internal_ground_supply_spice_nets
This parameter specifies the list of nets in the spice netlist that can be treated
as ground nets in addition to the nets specified in the operating condition. This
could be the interface nets or some internal nets that the pruner cannot detect
in some cases. This can help to greatly improve the pruning for memories.
internal_nodes_transition_data
List of internal nodes to be monitored without the function description. The list
comprises triplets of node_name, pintype and the expected no. of transitions to
look for on that node during the constraint measurement. Any number of such
triplets can be specified in the list.
internal_power_nets
This parameter specifies the list of nets in the spice netlist that can be treated
as power nets for memories.
internal_power_supply_spice_nets
This parameter specifies the list of nets in the spice netlist that can be treated
as power nets in addition to the nets specified in the operating condition. This
could be the interface nets or some internal nets that the pruner cannot detect
in some cases. This can help to greatly improve the pruning for memories.
intrinsic_cap_with_phase_diff
Internal flag to calculate intrinsic_cap where phase difference also taken into
account.
param 0 Flag()
io_retry
Number of retries of file I/O to tolerate network latency
job_scheduler
Specifies the job scheduler for SiliconSmart. You can set it to standalone, LSF,
or grid. Stand-alone mode allows multiple simulations to be performed in
parallel on the machine on which SiliconSmart is invoked. LSF mode uses
Platform LSF to distribute jobs to a network of resources. Grid mode uses Sun
Microsystem's Grid Engine load sharing software. The LSF and Grid Engine
software must be installed separately on the network for SiliconSmart to work.
keep_loading_effect_with_pruning
Specifies if the loading effect should be preserved with pruning. The default
behaviour is to preserve the loading effect which involves propagation of
switching activity in the netlist. If set to 0, the switching activity propagation will
not take place. This might give a very good pruning but inaccurate results.
Please be careful to use set this parameter to 0.
param 1 Flag()
leakage_current_substitution_value
This parameter takes effect when the parameter
'model_reverse_polarity_current' is set to 0 and the measured gate leakage
current or pg current is of reverse polarity. In this case, if the absolute value of
the leakage current is below this threshold value, we will make it small positive
number that is controlled by the value of this parameter.
leakage_sum_threshold
Threshold for factor obtained from positive Current and negative. Depending on
this value the current adjustment will be done so that the sum of positive and
negative currents is 0.
left_bus_identifier
String that separates a bus name from its bit number when naming each bit
separately. This parameter identifies the left separator.
liberty_attributes_at_bundle
When set to 0, the SiliconSmart tool will place the following attributes at pin-
level instead of at bundle-level:
■
capacitance
■
direction
■
fall_capacitance
■
input_voltage
■
max_transition
■
rise_capacitance
■
related_bias_pin
■
related_power_pin
■
related_ground_pin
■
and etc.
Attributes such as members, nextstate_type, etc., will remain at bundle-
level.
param 0 0, 1
liberty_blackbox_model
Do not generate function information in the liberty model.
param 0 Flag()
liberty_cap_unit
Specifies the units to use for capacitance values. Belongs in the default
parameter block. The values for this parameter are case-sensitive.
Example 465
set liberty_cap_unit 1ff|10ff|100ff|1pf|10pf|100pf
liberty_cell_postprocess
Use this parameter to specify a Tcl script to post-process a Liberty model on a
per-cell level in a distributed mode along with modeling.
When the model command runs and a liberty_cell_postprocess script
exists, the SiliconSmart tool will run modeling and post-processing in parallel
for each cell specified in the script.
Set the parameter as below:
set_config_opt liberty_cell_postprocess /home/cell_post.tcl
liberty_combine_complementary_models
Combine complementary (rise/fall) models so that, for instance, a flop will have
a single timing group from clock, instead of two, one for D and one for !D.
param 1 Flag()
liberty_constraint_type
Used to override the usual constraint type when generating a Liberty model.
This is used if the constraint type derived by Siliconsmart from the pin types is
not what is wanted in the Liberty.
liberty_current_unit
Specifies the unit for current (current_unit).
liberty_data_reduce
This parameter controls the type of operation performed on the data collected
for each when conditions listed for liberty_whens for energy, leakage, and
constraint arcs (constraint arcs include setup, hold, recovery, removal, mpw,
nochange). This parameter can be set to mean, max, min, or sum.
liberty_fast_option
ACE feature. For debugging purpose if some one need to run old tcl function
mergeByWhen then (s)he should disable this flag .
param 1 Integer(0,1)
liberty_fill_out_power_with
Specifies what to put for power tables that do not really occur, whether to fill it
with zeroes or copy values from the opposite power edge.
In some cells/circuits with different functionality, it may happen that for a certain
arc, input/output can only transition in one direction and not both. So we may
be able to only measure/report rise_power or fall_power, but not both.
However, for Liberty format/syntax consistency, we still have to report both, so
the options for a power table that can actually not be measured for the circuit
are either to fill it with zeroes or copy values from the opposite power table.
liberty_flavor
Controls the generation of the input_voltage and output_voltage
groups in generated Liberty models. The below details its usage:
■
If set to 2007.03 or above, the SiliconSmart output library will allow CCS
power, CCS VA, and compact CCS formats and support switch cell specific
acquisitions (dc_current).
■
If set to 2008.09 or above, the SiliconSmart output library will contain the
back bias model if the modeling parameter model_back_bias is enabled.
■
If set to 2010.03, retention attributes, which are set through the
set_liberty_attributes and add_liberty_group commands in
the instance file, will be generated in the output Liberty file.
■
If set to 2006.06, the above mentioned Liberty constructs will not be
supported.
liberty_increasing_delay_with_ecsm
True value makes slew values monotonic in ECSM transition table data.
param 0 Flag()
liberty_increasing_delay_with_ccs
If true, liberty_increasing_delay_with_slew/load will NOT be
disabled by the presence of CCS or ECSM data.
param 0 Flag()
liberty_increasing_delay_with_load
Specifies the minimum delta between delay values in a table as load increases.
Belongs in the default parameter block.
liberty_increasing_delay_with_slew
Specifies the minimum delta between delay values in a table as slew increases.
Belongs in the default parameter block.
liberty_increasing_time_points
When set to 1, the SiliconSmart tool will shift large CCS reference time and
waveform time indexes properly to avoid accuracy degradation due to finite
precision.
param 1 0, 1
liberty_increasing_transition_with_load
This parameter fixes slew monotonicity in both directions (increasing input slew
and increasing output load). When set to 1, the minimum delay that is used will
be based on liberty_increasing_delay_with_slew/load.
param 0 0, 1
liberty_leakage_power_unit
Specifies the unit for power values (leakage_power_unit).
liberty_max_capacitance
Controls the generation of the Liberty max_capacitance attribute. When set to
1 the attribute max_capacitance is set as upper limit of capacitive load for
output and inout pins. For output/inout pins, selects the minimum of the
maximum among all capacitive load indices for all timing arcs that terminate at
that pin(output/inout). The default value of this parameter is 1.
param 1 0, 1
liberty_max_capacitance_mode
Controls the generation of the Liberty max_capacitance attribute. When set to
0, the max_capacitance attribute is not modified. When set to 1 the attribute
max_capacitance is set as upper limit of capacitive load for output and inout
pins. For output/inout pins, selects the minimum of the maximum among all
capacitive load indices for all timing arcs that terminate at that pin(output/inout).
param 1 0, 1, 2
liberty_max_transition
Controls the generation of the Liberty max_transition attribute. When set to 1
the attribute is generated in the published Liberty models. When the
-recharacterize switch is specified to the model command, SiliconSmart will
modify the max_transition attribute if liberty_max_transition is set to 1. The
default value is 0, in which case the attribute is not added or modified.
param 0 Flag()
liberty_min_capacitance
Controls the generation of the liberty min_capacitance attribute to all output
pins. When set to 1, the attribute is set to all output pins with the max of
minimum load index for each pin.
param 1 Flag()
liberty_min_transition
Controls the generation of the liberty min_transition attribute to all inout pins.
When set to 1, the attribute is set to all inout pins with the max of minimum slew
index for each pin.
param 1 Flag()
liberty_minimize_constraint_when
When true (the default), the when attribute on a constraint group will be
reduced to the minimum needed to distinguish different cases of the same arc.
When false, the when attribute may include the enabling condition for that arc
as well.
param 1 Flag()
liberty_minimize_groups
Places fall and rise under the same timing/power table. Set this parameter to 0
to disable this behavior.
param 1 0, 1
liberty_minimize_timing_when
When set to 1 (default), the when attribute on a timing group will be reduced to
the minimum needed to distinguish different cases of the same arc.
When set to 0, pins will not be dropped from the when condition at any cost,
even for non-essential pins with a state that is implicit to the actual state.
For example, say that a timing group has only one pin in the when condition
such that cell_rise is possible for when = “d” and cell_fall is possible for
when = “!d”. If liberty_minimize_timing_when = 0, the SiliconSmart
tool will model these separately, each with its own when conditions. However, if
the user has specified model_default_timing_arcs as always, then in
addition to these two timing arcs, one default arc will be created which contains
cell_rise and cell_fall as before.
The result is shown below:
timing() {
when: ‘d’
cell_rise()
}
timing() {
when: ‘!d’
cell_fall()
}
param 1 0, 1
liberty_multi_rail_format
SiliconSmart supports both multi-rail leakage modeling and liberty pg_pin
syntax. You can use the liberty_multi_rail_format parameter to enable this
functionality. Possible values for this parameters are none, v1 and v2. The
default value is none. The value v1 enables a older multi-rail power syntax. The
value v2 causes SiliconSmart to generate newer multi-rail format.
liberty_power_down_function
When true, the 'power_down_function' attribute will be modeled for the output
pins if the value of the parameter 'liberty_multi_rail_format' is v2.
param 0 Flag()
liberty_power_down_function_pins
Which pins to consider when determined the supplies/grounds to include in the
power down function.
liberty_resistance_unit
Specifies the unit for pulling resistance (pulling_resistance_unit). The
values for this parameter are case-sensitive.
Example 466
set liberty_resistance_unit 1ohm|1kohm|1mohm
liberty_select_min_period
By selecting one of the attribute best, worst or typ we can select the
corresponding best, worst or typ for min_period.By default it is worst.
liberty_select_min_pulse_width
By selecting one of the attribute best, worst or typ we can select the
corresponding best, worst or typ for min_pulse_width.By default it is worst.
liberty_state_independent
By selecting one of the attribute best, worst or best_and_worst we can select
the corresponding best, worst or best_and_worst arcs.By default it is off as a
result sis user will get default arc with other expected arcs. For best sis will add
min_delay_flag to true and for worst it will set false.
liberty_statetable_for_gcl
When true, always convert cell function block to state tables for GCL-like
functions, i.e. those which would normally require a state_function on the
output.
param 1 Flag()
liberty_time_unit
Specifies the units to use for time values. The values for this parameter are
case-sensitive.
Example 467
set liberty_time_unit 1ps|10ps|100ps|1ns
liberty_timing_type
Used to override the usual timing type when generating a Liberty model. It is
targeted at the case in which a clock pin must produce a combinational arc but
SiliconSmart does not recognize the cell as a clock gating cell and produces a
rising/falling_edge instead. This parameter should be set with set_config_opt
for particular arcs, that is set_config_opt -from clock liberty_timing_type comb.
It can also be used to force the use of rising/falling_edge or clear or preset for
timing_type, if that is required.
liberty_whens
This parameter is used specify the when conditions to use in the Liberty model
separate from the whens used from characterization. The state coverage of
each acquisition is compared to the liberty_whens for that acquisition, and
a model is added for each liberty_whens for which there is overlap. This
results in three cases: one model for each acquisition but with the when
condition modified; multiple models for each acquisition, which allows reduced
numbers of characterizations while maintaining a desired Liberty structure with
more models; and many acquisitions combined into a single model, which
allows a reduced size model with better accuracy than if just a single
acquisition was done.
For the many-to-one case, the model is created using
liberty_data_reduce for energy, leakage, and constraint arcs. Constraint
arcs include setup, hold, recovery, removal, mpw, and nochange. Other types
of models select an arbitrary instance for the many-to-one mode, so this mode
is not recommended.
lvf_check_errors
Specifies a list of LVF checks to be classified as errors (default: checks 0, 1, 2,
3, 5, 9, 10 reported as LVF_ERROR).
lvf_check_sigma_pct
If specified, LVF sanity checks will use the table to check sigma/nominal ratio
instead of a fixed number.
lvf_check_slew_sigma_pct
If specified, LVF sanity checks will use the table to check slew sigma/nominal
ratio, otherwise it will fall back to using lvf_check_sigma_pct.
lvf_check_suppress
Specifies a list of LVF checks to be suppressed during checking.
lvf_constraint_models
Specifies LVF constraint types to model. Supports: setup, hold, recovery,
removal, asynch_recovery, asynch_removal.
lvf_constraint_seed_step
Specifies the step size used while expanding the LVF constraint window during
constraint measurement.
lvf_enable_sanity_check
When set to 1, enables LVF table sanity check in modeling.
param 1 0, 1
lvf_model_slew
Model LVF slew sigmas when turned on.
param 0 Flag()
lvf_param_abs_threshold
Specifies the absolute threshold of parameter sensitivity to be considered in
LVF screening.
lvf_param_rel_threshold
Specifies the relative threshold, against nominal data, of parameter sensitivity
to be considered in LVF screening.
lvf_sigma_max
Upper bound of LVF sigma values for table checking.
lvf_sigma_min
Lower bound of LVF sigma values for table checking.
lvf_sigma_scaling
Scales LVF sigma by the ratio of measured delay and input delay.
param 1 0, 1
lvf_to_ocv_input_pins
Specifies a list of input pins with which the OCV values are computed from LVF
table when generating OCV side tables.
param 1 0, 1
lvf_to_ocv_load_indices
Specifies the list of load indices (starting with 0) with which the OCV values are
computed from LVF table when generating OCV side tables
lvf_to_ocv_method
Specifies the method to select the value from LVF table for AOCV/POCV
computation (default is max).
lvf_to_ocv_slew_indices
Specifies the list of slew indices (starting with 0) with which the OCV values are
computed from LVF table when generating OCV side tables.
lvf_to_ocv_output_pins
Specifies a list of output pins with which the OCV values are computed from
LVF table when generating OCV side tables.
lvf_tol_early_to_late
Tolerance of LVF sigma ratio between early table and late table.
lvf_tol_sigma_to_nom
Tolerance of LVF sigma value to its nominal value (>1.0).
make_cdb_path
make_small_dc_current_values_as_zero
If this parameter is on, if the absolute value of dc_current is less than or equal
to dc_current_threshold value then the dc_current value is made as zero.
param 0 Flag()
max_constraint_iterations
Sets the maximum iteration limit for constraint measurements. This parameter
can be used for both the SiliconSmart native bisection method and the
simulator bisection method.
Example:
set_config_opt max_constraint_iterations 40
maximum_stack_depth
Specifies the depth of nmos/pmos stack in a cell design, that may degrade
signal quality.
measure_side_input_power
Measures the power of side-input pins. The default is 0, which means the
SiliconSmart tool will only measure the energy consumed by a cell through the
power supplies. When this parameter is set to 1, then during NLPM power
measurements, the SiliconSmart tool will also include the energy going in and
out of a cell through side-input pins.
If the parameter model_power_per_supply is also enabled, then the energy
measured on a side-input is added to the internal power table of the same
power supply that is driving the side-input.
If the power on a side-input comes from a voltage domain not found in the
receiving cell, the energy on the side-input will be split up so that each
measured power supply gets an equal share.
param 0 0, 1
memory_ccsn_partial_netlist
To use the pruned netlist like a donut type for memory ccsn.
param 0 Flag()
miller_capacitance_check_tolerance_pct
Will raise warning if the ratio between miller capacitance and nldm capacitance
is more than miller_capacitance_check_tolerance_pct.
param 10 Integer(1,None)
miller_capacitance_edge_ratio
Will raise warning if the ratio between miller capacitance rise and miller
capacitance fall is more than miller_capacitance_edge_ratio.
param 5 Integer(1,None)
miller_output_slew
Slew to use to generate glitches for the Miller capacitance measurement.
min_disk_space
Specifies minimum disk space required to finish the characterization
successfully. A negative number will skip the check.
min_period_precharge_threshold_factor
This parameter sets the threshold for calculating the precharge delay of the bit-
lines from the last transition of the clock.
min_period_with_precharge_delay
This parameter if set to 1 calculates the minimum period taking into account of
the precharge effects of the bitlines. In the default case, the minimum period is
calculated using the max of CLK->Q delay or the min_period.
When measuring the min_period of the clock pin, taking into account the
precharge delay of the bit line, you must call the following command explicitly
after running find_internal_nodes_for_constraint to get the bit line
node:
get_bit_line_node {<bit cell node name>}
For example, if the internal bit cell node is xi1/xi1/xi1/xi1_1/cored_, you must
use the following command: needs to call the following command:
get_bit_line_node {xi1/xi1/xi1/xi1_1/cored_}
This commands finds the bit line node and updates the instance file with the bit
line node name.Then, run the configure, characterize, and model
commands as a regular flow.
param 0 0, 1
minimum_constraint_sum_margin
Specifies the minimum constraint sum. The default is 0. If the setup+hold is
less than minimum_constraint_sum_margin (mcsm), the value is set to
mcsm. If mcsm is 0, the value is not adjusted and the flow is left untouched as
before. In this case, the rules which apply to model_neg_constraint_sum
will be used.
Additionally, the constraint sum will only be checked on the same edge (i.e.,
setup_rising+hold_rising, not setup_rising+hold_falling), though the opposite
edge is checked by default for the negative constraint sum.
param 0 0, 1
model_arc_and_pin_cap
Model both arc based and pin based receiver cap/ecsm cap
param 0 Flag()
model_as_non_unate
Determines when non_unate arcs should get created in the output library for
create_new flow.
param 0 Flag()
model_back_bias
Control the back bias support in Sis. To use this parameter user should specify
\'liberty_flavor\' as \'2008.09\'.
param 1 Flag()
model_bundle_bit_level
Bundle pins for a multi-bit cell can be represented in the Liberty model at either
the bundle level or the individual pin/member level. The SiliconSmart tool
supports either the bundle format or the individual pin/member format, but not
both together.
Setting the parameter model_bundle_bit_level allows the user to model
the bundles of the multi-bit cell at the individual pin/member level. In this case,
each pin/member of the bus has to be defined in the instance file.
For example:
//defining individual pins
add_pin D1 default –input
add_pin D2 default –input
add_pin CK default –clock
add_pin Q1 default –output
add_pin Q2 default –output
If the parameter is disabled (default), the instance file has to be defined at the
bundle level:
//defining bundle in instance file
add_pin D bundle_2 –input
add_pin CK default –clock
add_pin Q bundle_2 –output
add_pin QB bundle_2 –output
When a multi-bit cell is being imported from a reference liberty that is modeled
at the individual pin/member level, the parameter should be enabled before the
import command. The SiliconSmart tool will automatically create the instance
file at the pin/member level.
Note: The SiliconSmart tool does not support bundle cells which have
a series of flops/latches.
param 0 0, 1
model_bus_timing
This parameter models unconditional timing groups at the bus level, by
specified point-wise selection from among unconditional and conditional timing
arcs characterized at the level of the pins in the bus. The timing groups at the
pin level are then deleted. If any timing groups are detected at the bus level
prior to this operation, they are deleted prior to this operation. This is primarily
expected to be used in macro cell characterization.
model_default_arcs
Setting the appropriate value to the parameter model_default_arcs will
trigger the generation of default tables for timing groups (cell_rise,
cell_fall, rise_transition, fall_transition, retaining_rise,
and retaining_fall).
Please not that enabling model_default_arcs will not generate default
tables for constraint/power/leakage arcs.
The model_default_arcs parameter has the following behavior:
■
Set to 0, off, no, never, false — No default arcs will be modeled.
However, if an arc can be characterized at one and only one when condition,
the SiliconSmart tool will omit this when condition. Such a table may appear
to be a default table (as it will not have a when condition).
■ Set to 1, on, yes, always, true — Default tables will be modeled.
■
Set to 2, cond, conditional — Default tables will be modeled if and only
if all possible when conditions are already not covered.
See Default Arc Modeling for more information on generating default arcs.
2, cond, conditional
model_default_constraints
Default arcs for constraints will be added to library if this parameter is specified
as true. By default it is off. See Default Arc Modeling for more information.
model_default_power_arc
Specifies if the default power arc will be written in the generated liberty file. See
Default Arc Modeling for more information.
model_ecsm_threshold_pct
Determines whether ecsm_capacitance is measured/modeled at multiple
thresholds. While disabled, ecsm_capacitance will be modeled at one point
param 1 Flag()
model_equalize_cap_averaging
Assigns equal weightage to propagating and non-propagating capacitance
values during the calculation of average NLDM pin capacitances. When set to
1, propagating and non-propagating arcs will have the same weightage. The
default is 0. This parameter works with model_pin_cap_calc "ave/mean".
param 0 0, 1
model_exclude_supplies
The supplies specified by this are forcibly prevented from appearing in models.
model_expanded_states
Produces fine-grained, fully expanded when conditions in the Liberty model. A
single simulation potentially can be mapped to multiple Liberty entries using
this parameter.
param 0 Flag()
model_failed_cells_in_lib
Omits failed cells during the modeling step. If set to 1, any cells where
characterization data was corrupt or not present will be omitted from the
modeled library.
param 1 0, 1
model_input_leakage_current
Add gate contributions to leakage measurements
param 0 Flag()
model_leakage_current_file
Add gate contributions to leakage measurements.
model_mpw_attribute
For mpw, use the min_pulse_width attribute instead of a timing group.
param 1 Flag()
model_neg_constraint_chk_opposite_edge
If set to 1, then setup (recovery) + hold (removal) is checked for negative value
on opposite edge also. For example: setup_rising + hold_falling. If set to 0, only
the same edge is checked like setup_falling + hold falling. Has no effect unless
model_neg_constraint_sum is set to false.
param 1 0, 1
model_neg_constraint_sum
If false, then adjust hold and removal values such that hold >= -setup and
removal >= -recovery for each pair of constrained transitions.
model_neg_constraint_sum_margin
If model_neg_constraint_sum is 0 and constraint sum is >
model_neg_constraint_sum_threshold; Tool corrects the constraint numbers to
make the sum marginally positive. This parameter is to configure this 'marginal
positive number'.
model_neg_constraint_sum_threshold
The value of this parameter is used to compare the constraint sum against to
determine whether to give a warning or error. If the sum is negative but within
the limit set with model_neg_constraint_sum_threshold, a warning will
be generated. If it is outside of this limit, an error will be generated.
This parameter does not have a default value. The user must choose and set a
value for this threshold. If model_neg_constraint_sum is set to 0 and no
value is set for model_neg_constraint_sum_threshold, the SiliconSmart
tool will generate an error to set an appropriate value for the threshold.
See Negative Constraint Sum Modeling for more information on using this
parameter.
model_negative_constraints
When set to false, negative constraint values are forced to 0. Otherwise the
exact values are modeled. The default values of this parameter is true
param 1 Flag()
model_negative_delays
When set to false, forces negative delay values to 0. Otherwise, negative delay
values are generated in the model. Belongs in the default parameter block.
param 1 Flag()
model_negative_energy
when set to false, negative energy values are forced to 0. Otherwise, the exact
values are modeled. The default value of this parameter is true.
param 1 Flag()
model_negative_leakage
when set to false, negative leakage values are forced to 0. Otherwise, the exact
values are modeled. The default value of this parameter is false.
param 0 Flag()
model_normalized_constraint_driver_waveform
Models the normalized_driver_waveform information related to constraint
acquistions in the Liberty model.
pintype 0 Flag()
model_normalized_driver_waveform
Models the normalized_driver_waveform information in the Liberty
model.
default 1 Flag()
model_pg_pin_groups
When enabled, the SiliconSmart tool will model relevant pg_pin groups when
modeling NLPM even if the liberty_multi_rail_format is set to none.
param 0 0, 1
model_pin_cap_calc
Controls the calculation of the Liberty attributes capacitance,
rise_capacitance, and fall_capacitance. SiliconSmart measures the
input capacitance for all timing arcs, which means it captures state-dependent
input capacitance. Additionally, it captures input capacitance at each slew/load
combination for which delay/slew is measured.
Because the NLDM Liberty model supports only a single value for input
capacitance, SiliconSmart uses either the minimum, maximum, mean, or
average value of all the measured input capacitances and considers it the
capacitance attribute. For the rise_capacitance and fall_capacitance
attributes, the computation is only done for the rise or fall measurements for the
rise and fall capacitance attributes respectively. Valid values for this parameter
are min, max, mean, or ave. The default value is max.
model_power_on_output
When set to 1 for an arc, the internal_power is modeled at output pin level.
param 0 Flag()
model_power_per_supply
When set to 1, multi-rail power constructs will be written in the liberty model.
param 0 Flag()
model_reverse_polarity_current
This parameter if set to 'true', will model the exact measured value from the
leakage simulation for both pg current and gate leakage current in CCS power
modeling even though the current polarity may be reversed. If the user wants to
zero out such reverse polarity currents in the liberty file, this parameter should
be set to 'false'. The default value of this parameter is 'true'.
param 1 Flag()
model_rise_fall_capacitance
When true, use rise/fall_capacitance liberty attributes. Otherwise use
capacitance attribute.
param 0 Flag()
model_rise_fall_capacitance_range
If true and model_rise_fall_capacitance is also true, add rise/
fall_capacitance_range attributes.
param 1 Flag()
model_sensitization_vector
Determines whether to write sensitization vectors (wave_rise, wave_fall
attributes).
param 0 Flag()
model_significant_digits
Specifies the number of significant digits to use for the data in the model.
Belongs in the default parameter block.
param 4 Integer(1,12)
model_significant_digits_area
Specifies the number of significant digits to use for the area attribute in the
library. A value of 0 deactivates this control, and the area is printed as
specified.
model_uncharacterized_tables
When true, a \"zero\" table will be substituted when no sof data is found. When
false, the table is not modeled.
param 1 Flag()
mpw_rail_to_rail
To match NCX value, when constraint_pulse_cratering is 0 or 1, and when
MPW values come from non-full swing input pulse (or input signal does not
swing from rail to rail), SiS uses the NCX equation for MPW. NCX equation for
MPW = input_slew / [(logic_high_threshold-logic_low_threshold)/ (100 *
slew_derating_factor)].
param 0 Flag()
monitor_internal_nodes
Maps internal node names, to monitor for constraints, to attributes: { node1 {
pintype io edges 0 } node2 {} node3 { output Q } }
Default attributes are { pintype default edges 1 }. Keywords are used for
extensibility. Key 'pintype' (default 'default') is the pintype to describe the node.
Key 'edges' (default 1) is the number of expected transitions. Key 'output'
(default '') is a pin which must transition if this node is to be used. Replaces
transition_nodes, steady_state_nodes, internal_nodes_transition_data.
mpp_simulator
Simulator to be used for model preprocessing.
mpw_table_dimensions
Specifies a method to model mpw tables as a scalar value, a 1-dimensional
table, or a 2-dimensional table.
By default, this parameter is set to 0, which means that the mpw value will be
modeled as a scalar attribute.
Setting the parameter to 1 will measure the mpw value by varying the input
slew of the clock pin and model it as a 1-dimensional table.
Setting the parameter to 2 will measure the mpw value by varying both the
input slew and the load at the output pin and model it as a 2-dimensional table.
For example:
set_config_opt mpw_table_dimensions 2
param 0 0, 1, 2
mpw_v2_transition_inputs
This parameter is only relevant when using the mpw-v2 methodology for
minimum pulse width measurements. For each input listed here, SiliconSmart
will only consider those mpw arcs where the input is not fixed to 0/1 but instead
undergoes more than one transition.
netlist_max_sweeps
Specifies the maximum number of sweeps allowed in a single simulation deck.
new_operating_condition
Specifies the name of the operating conditions to be used in output liberty. The
default value is empty, which means it will use active_pvt name in create new
model and will use op_cond name from seed.lib in rechar flow.
nmos_drn_gate_shorted_model_names
Names of 3-terminal NMOS models with drain and gate shorted used by netlist
pruning.
nmos_drn_src_shorted_model_names
Names of 3-terminal NMOS models with drain and source shorted used by
netlist pruning.
nmos_gate_src_shorted_model_names
Names of 3-terminal NMOS models with gate and source shorted used by
netlist pruning.
nmos_model_names
Names of NMOS models used by netlist pruning.
nochange_threshold
Glitch threshold allowed for a passing nochange constraint.
nochange_variance
Maximum output edge jitter allowed for a passing nochange constraint.
non_scan_model
Non-scan model name of a cell.
normal_queue
Specifies the LSF or Grid Engine queue name to which jobs are submitted.
This parameter is used only if job_scheduler is set to lsf or grid. Please refer to
the LSF or Grid Engine documentation for information on setting up queues.
normalized_driver_significant_digits
Specifies the number of significant digits to be printed for
normalized_driver_waveform. Setting the parameter to a value greater
than 1 will specify to print out that number of significant digits.
param 1 Integer
nsamples
Number of samples for waveform capture.
param 10 Integer(2,None)
opc_grounds
Private parameter list of supplies set by add_opc_grounds command.
opc_process
Specifies the process line to use for a given operating condition and simulation.
opc_supplies
Private parameter list of supplies set by add_opc_supplies command.
opc_temperature
Specifies the temperature to use for a given operating condition and simulation.
opc_voltage
Specifies the supply/ground voltage to use for a given operating condition and
simulation. Usually specified per-pin where the pin is the supply/ground name.
output_sweep_order
This determines the order in which pins are swept when multiple outputs are
switching for a given input transition. This also determines to which pin 3-D
timing and power tables are added.
param_change_period
Time in minutes. This determines the frequency at config/change.tcl is sourced.
param 30 Integer(10,1000000)
parameters
Specifies an alternate parameter block to be used for characterization and
simulator options.
partition_by_output_transitions
This is an additional level of partitioning the state set. If not 0, then each
combination of output transitions results in a separate measurement. When set
to 2, separate states with different output pin states are merged to leave the
final liberty file with states free from output pins.
param 0 0, 1, 2
path_based_clock_nodes
This list represents the list of internal spice nodes corresponding to the clock
path. This parameter is used only in memory characterization flow.
path_based_signal_nodes
This list represents the list of internal spice nodes corresponding to a bit of the
signal bus. The list comprises of the bit number and its corresponding list of
internal spice nodes for that bit. This parameter is used only in memory
characterization flow.
path_constraint_enable
Clock node used for path-based constraints.
path_constraint_enable_negative
Negative clock node used for path-based constraints.
path_constraint_enable_positive
Positive clock node used for path-based constraints.
path_constraint_feedback
Specifies the name of an internal node in the feedback loop of a latch. This is
used as a part of the path-based constraint analysis described in
Characterization and Modeling.
path_constraint_mode
Enables path-based constraint analysis to reduce characterization time of
setup and hold constraints. When set to polish, path-based analysis is used to
provide a seed to the standard search algorithm. When set to verify, the search
algorithm only increases the given constraint if necessary, instead of fully
optimizing it. When set to unchecked, the path-based values are used
unchanged. A value of off disables path-based constraint analysis.
path_constraint_pintype
Specifies the name of the pintype block to use when creating internal pins for
path-based constraint analysis. This is used by the analyze_netlist command.
See Netlist Analysis in Characterization and Modeling for details.
periodic_clock_stimulus
Indicates whether the time between edges are separated by a fixed interval.
When false, all edges are separated by a fixed interval. When true, clock edges
are separated by a fixed interval and all other edges are fit within that interval.
The default value is false.
param 0 Flag()
pin_name_alias
This parameter is used with 'set_config_opt' command. This is used to rename
pins which have characters not allowed by Siliconsmart.
pmos_drn_gate_shorted_model_names
Names of 3-terminal PMOS models with drain and gate shorted used by netlist
pruning.
pmos_drn_src_shorted_model_names
Names of 3-terminal PMOS models with drain and source shorted used by
netlist pruning.
pmos_gate_src_shorted_model_names
Names of 3-terminal PMOS models with gate and source shorted used by
netlist pruning.
pmos_model_names
Names of PMOS models used by netlist pruning.
point_to_point_default_selection
When point_to_point_default_selection is set to 1, each and every
value of the conditional tables are compared and the true max or worst is
picked for the default table. The default table will be generated piece by piece; it
may or may not be a copy of any one of the tables. The table that contains the
maximum value, among all conditional tables, would be used as the default
table. SiliconSmart would use the entire table, and would not compare every
single value of every table for the true maximum or worst value.
For 2-dimensional LUTs:
■
X = (X1, X2, ..., Xk) — index_1 (e.g., input slew) with k elements
■ Y = (Y1, Y2, ..., Yl) — index_2 (e.g., output load) with l elements
■
T(i) = (T1(i), T2(i), ..., Tk*l(i)) — table values (e.g., delay)
with k*l elements, where i is an index to the arc and ranges from 1 to n (n
is the number of arcs)
param 0 0, 1
potential_internal_node_list
This represents the list of potential candidates for internal spice nodes to be
used for memory characterization. These nodes will undergo tests to determine
the correct node that can be used for determining constrants. This parameter is
used only in memory characterization flow.
power_dynamic_end_threshold
Specifies the fraction of the total voltage transition which must complete in
order to terminate the supply current integration. A value of zero means there is
no dynamic integration termination.
If you set this, the integration will stop at the specific fraction of the total
transition, and the total will compensate for any remaining transition with the
assumption that the remaining power is only for completing the charge of the
output cap. Differential outputs should behave the same as for any other
multiple switching output cell. However the power_period still has to be long
enough to cover the complete transition time.
power_load_energy_on_rise
Subtract output load energy from total energy for rising outputs only. The
alternative, which is not recommended, is to subtract half the output energy for
all outputs. This is provided for backward compatibility only.
param 1 Flag()
power_meas_grounds
This parameter specifies the list of primary ground and negative supply names
that should be used for the entire library of cells. The user must specify the
appropriate value of this parameter especially when doing power and CCS
power related measurements
power_meas_map
This parameter is helpful in clubbing power values for different power pins
together. For examples if two power supplies are specified with
power_meas_supplies, but you want to model the power for both the supplies
together, you can use this parameter to map them.
power_meas_supplies
This parameter specifies the list of positive primary power supply names that
should be used for the entire library of cells. It is important to specify the value
of this parameter especially when doing power related measurements. If any of
the supplies are missing from this list, the current through those supplies will
not be measured and will not be taken into account for power modeling.
power_stabilization_threshold
Specifies a relative tolerance to be used when computing the leakage current
during power. This value is a maximum difference between two samples of the
average current during the tail of the simulation. the default value of the 0.05
corresponds to a difference or no more than 5%.
power_stabilization_threshold_absolute
Specifies an absolute tolerance to be used when computing the leakage
current during power. This value is a maximum difference between two
samples of the average current during the tail of the simulation. the default
value of the 1e-18 corresponds to a difference or no more than 1pW.
prechar_autorange_load
Enables the precharacterization of maximum load autoranging. Use this
parameter to autorange load across all of the operating conditions and then
choose the lowest value and use it for all operating conditions. This ensures
consist load ranges across multiple .lib files which is a CCS requirement for
voltage scaling.
param 1 Flag()
prechar_binning_abs_tol
The maximum minimum-to-maximum range in a single bin. The larger of
prechar_binning_abs_tol or prechar_binning_rel_tol will take effect. A negative
value is generally used to force each state to have its own bin.
prechar_binning_constraints
Binning mode specific to constraints. For 'all', a partition is created for each bin
and each bin covers all states in that bin. The state selection for 'all' is specified
as best_median_worst.
The modes 'all_best' and 'all_worst' are identical to the mode 'all except that the
selection is specified as 'best' and 'worst' respectively. For 'best' and 'worst', a
single bin is created which covers only the overall best or worst state. For
prechar_binning_hidden_power
Flag to indicate if precharacterization must be performed for hidden power.
param 0 Flag()
prechar_binning_max_bins
Maximum number of bins requested.
prechar_binning_method
Measurements to use for binning states during precharacterization.
prechar_binning_mode
Specifies how precharacterization will create binned states for partitioning. For
'all', a partition is created for each bin and each bin covers all states in that bin.
For 'best' and 'worst', a single bin is created which covers only the best or worst
state. For 'explicit', no partition is created; the user-specified partitioning
scheme is used and precharacterization only generates the state ranking for a
selection within a bin.
prechar_binning_power
Binning mode specific to power. For 'all', a partition is created for each bin and
each bin covers all states in that bin. The state selection for 'all' is specified as
best_median_worst. The modes 'all_best' and 'all_worst' are identical to the
mode 'all except that the selection is specified as 'best' and 'worst' respectively.
For 'best' and 'worst', a single bin is created which covers only the overall best
or worst state. For 'explicit', no partition is created; the user-specified
partitioning scheme is used and precharacterization only generates the state
ranking for a selection within a bin.
prechar_binning_rel_tol
The maximum minimum-to-maximum bin range as a fraction of the maximum
absolute measurement value. The larger of prechar_binning_abs_tol and
prechar_binning_rel_tol will take effect.
prechar_binning_timing
Binning mode specific to timing. For 'all', a partition is created for each bin and
each bin covers all states in that bin. The state selection for 'all' is specified as
best_median_worst. The modes 'all_best' and 'all_worst' are identical to the
mode 'all except that the selection is specified as 'best' and 'worst' respectively.
For 'best' and 'worst', a single bin is created which covers only the overall best
or worst state. For 'explicit', no partition is created; the user-specified
partitioning scheme is used and precharacterization only generates the state
ranking for a selection within a bin. If set to none, the SiliconSmart tool will
disable binning of conditional timing arcs and enable compatibility with
configure_all_states_for_ccb.
prechar_enable_fast_analysis
If the number of states for an arc is greater than this parameter, then prechar
results analysis will use a faster algorithm.
param 16 Integer(1,None)
prechar_keep_intermediate_files
Directs SiliconSmart to avoid deleting intermediate files in the runtime directory
after simulations are run.
param 0 Flag()
prechar_numsteps
Number of load/slew samples to be used for prechar simulations.
prechar_sampling_size
Sampling size for load/slew for precharacterization simulations. When this
parameter is set to 1x1, SiliconSmart chooses one output load and one input
slew point which is either the average of all values in explicit points load/slew if
they are specified or the average of largest/smallest load/slew values. When
set to 2x2, SiliconSmart chooses the two largest/smallest load/slew points. If
prechar_autorange_load is enabled, this parameter must be set to 2x2.
prechar_simulator
Simulator to be used for precharacterization related (binning) simulations.
prechar_state_partitions
State partitions used during precharacterization for the non-VG flow.
preferred_switching_input
List of zero or more pins, in order, to use as switching input if available.
reduce_ccs_power_table
Flag to indicate if ccs power tables need to be reduced. By default the size of
the reduced tables will be 3X3.The parameters
param 0 Flag()
primary_index
Use this parameter to change the order of index (slew/load) in library lookup
templates and tables. It works only for create_new_model modeling flow.
propagate_warnings
This parameter can be set to 1. It means all the warning message in cdpl log
will be populated into the SiliconSmart log.
param 0 Integer(0,1)
publish_internal_pin_states
When set to 1, the states of internal pins will be included in the when
expressions.
param 0 0, 1
receiver_cap_for_zdisable
Set this parameter to 1 to characterize receiver_capacitance for z-disable
arcs.
param 0 Integer(0,2)
receiver_trip_threshold_pct_fall
List of threshold percentages for measuring receiver capacitance fall
receiver_trip_threshold_pct_rise
List of threshold percentages for measuring receiver capacitance rise
rechar_add_attributes
Defines attributes to be added in the generated library. Current supported
attributes are min_capacitance and max_capacitance. You can set the
parameter to all to include all supported attributes.
rechar_update_attributes
Defines attributes to be modified from the seed the library during
recharacterization flow. By default, this list is empty so that the generated
liberty matches with the seed library. The currently supported list of attributes
for this parameter are: pg_pin, input_voltage, output_voltage, ff,
ff_bank, latch, latch_bank, max_transition.
The parameter can be set to all to update all the supported attributes. Please
note that as more attributes can be supported in future, the all option will
update more attributes in future.
reduce_ecsm_power_table
Flag to indicate if ecsm power tables need to be reduced. By default the size of
the reduced tables will be 3X3.The parameters
ecsm_power_modeling_slew_indices and
ecsm_power_modeling_load_indices can be used to specify a different table
size.
param 0 Flag()
replace_negative_leakage_with
If the parameter model_negative_leakage is false, the value given with this
parameter is used for replacing negative leakage values. The default is 0.
param 0 Float()
report_constraint_iterations
Writes detailed data for constraint acquisition search iterations. This is useful
for viewing details on exactly how the search engine converged on a result for
setup/hold/recovery/removal/mpw/no_change measurements. The result is
placed in a CSV file located in the char_point/reports/constraints directory
which can be imported as a spreadsheet for further analysis.
param 0 Flag()
res_model_names
Names of resistor models used by netlist pruning.
right_bus_identifier
String that separates a bus name from its bit number when naming each bit
separately. This parameter identifies the right separator.
run_list_maxsize
Specifies the number of jobs that can be running in the job queue at one time.
In standalone mode, this parameter controls the number of jobs that can run
simultaneously on the local machine.
running_prechar
Non-public parameter that indicates when precharacterize is being used
instead of configure/characterize.
param 0 Flag()
save_farm_logs
Save stdout and stderr of the workers on farm
param 0 Flag()
scan_enable
List of scan enable pin(s) belonging to a cell.
scan_input
List of scan input pin(s) belonging to a cell.
scan_enable_inverted
List of inverted scan enable pin(s) belonging to a cell.
scan_output
List of scan output(s) belonging to a cell.
scan_output_inverted
List of inverted scan output(s) belonging to a cell.
scan_start_pin
Defines a corresponding attribute in Liberty syntax. It specifies the scan output
pin of a sequential element of the multi-bit scan cell, where the internal scan
chain begins. It is defined in the bus or bundle group.
scan_type
Type of scan functionality.
scd_debug_subtract_power_tables
This parameter specifies that the hidden energy on an input pin is subtracted
from the switching energy at the output pin during the modeling step if both
these events and their when conditions match or overlap (i.e. the events are not
mutually exclusive). This is done in order to avoid overestimating the power
consumption of the cell. The default value of this parameter is 1.0.
param 1 Flag()
scheduler_poll_time
The number of seconds SiliconSmart waits between polling the load sharing
system for job status.
sdf_cond_equality_operator
Operator to use for equality in sdf_cond attributes.
secondary_run_list_maxsize
Specifies the number of jobs that can be running in the secondary job queue at
one time.
separate_cell_initialization
If ic or nodeset, the simulation to set the cell to a known state is done
separately and used as the initial condition for constraint measurements.
separate_cell_initialization_levels
This parameter may be set to 'all'(default value) or 'top-internal-only'. Setting it
to 'all' causes all nodes in the cell to be initialized by ic or nodeset.
Occasionally, it may be desirable to have only the internal nodes from the top-
level circuitry in the netlist have their voltages initialized by nodeset or ic. In this
case, this parameter should be set to 'top-internal-only'.
signal_capture_pct
Specifies string of node percentage pair indicate the signa capture node and
pct.
simcomp_version
Use Python (1) or C++ (2) version of sim compiler with Spectre.
param 1 Integer(1,2)
simulator_case_sensitive
When set to 0, processes a case-insensitive manner. Applies only to Mica
simulator at present.
param 1 0, 1
simulation_max_inactive_time
Time in minutes. If a task takes more than this time, a warning is issued.
simulation_max_runtime
Time in minutes. If a task takes more than this time, a warning is issued.
simulation_node_initialization_file
Specifies the full path to the node initialization file that can be used during
simulations for any type of measurement. This file contains .ic/.nodeset
statements in a format that is recognizable by the simulator. Typically, this
parameter is used in the full-AUS flow when the user is providing all arcs
manually to the tool.
If this parameter is used in a non-AUS flow where all the measurements,
including the initialization measurements, are derived from functions provided
by the user in cell instance files, the user specified initialization files set with the
simulation_node_initialization_file parameter will not be used.
simulation_tmpdir
Specifies the directory in which the temporary files for a simulation are to be
written. The directory must exist and be writable on each machine that a
simulation is to be executed, and have enough free space to hold the complete
results of the simulations (10Mbytes at least.) On some systems, setting this
value to /tmp can improve performance because /tmp is implemented using the
virtual memory system.
simulator
Specifies the type of simulator used for all circuit simulations. Valid simulators
are listed below.
simulator_bisection
If set, does the constraint measurement using simulator native bisection
method. It uses the bisection method internally supported by hspice/finesim
instead of bisection method supported by SiliconSmart.
param 0 Flag()
simulator_cmd
Sets the command used by the SiliconSmart tool to invoke the circuit simulator.
The format of the command should be similar to an actual command-line
execution of the simulator, with the string [input_deck] used in place of the input
file, and [listing_file] for the output file. [input_deck] and [listing_file] are
automatically replaced with the file names generated by SiliconSmart when the
command defined by simulator_cmd is issued. This parameter is not used
when the simulator parameter is set to finesim_embedded.
simulator_default_options
When set to 1, the SiliconSmart tool adds its own simulator options to the deck.
You can then add your own options as well, which will override these default
options. When set to 0, no simulator options will be added at all, and all
simulator options must be set manually.
param 1 0, 1
simulator_options
Specifies a string indicating valid simulator options. These options are passed
to the simulator while executing simulations. See Setting Simulator Options for
more information.
simulator_warning_limit
Limits the total number of warnings in the siliconsmart.log file.
param 0 0-10000
single_bit_degenerate
Defines a corresponding layout-related attribute in Liberty syntax. It defines a
name of a single-bit library cell for use on multi-bit bundle cells that are black
single_cell_mode
Normally, global scope parameters cannot be set in the .inst file because all
parameters set in the .inst are considered to be cell-specific. However, if this
parameter is set to true, then global parameters are permitted for one cell at a
time. Set_location must be called before operations on a different cell can be
done.
param 0 Flag()
sis_cell_type_memory
The primary idea is to flatten a memory cell by default during import. Some
times memory cell needs to be imported without using template flow. When
import is done without using template flow, we try to find the cell type from the
liberty file. If the cell type can not be found out as memory from liberty file when
import is done without using template flow, this parameter must be set to 1 to
indicate that the cell under consideration is memory.
param 0 Flag()
sis_exclude_internal_power_nets
String that specifies the internal power and ground nets which are to be
excluded.
sis_gzip_enable
Determines whether SiliconSmart should use gzip or not. The gzip operation is
relevant to simulation related files such as SIF files, Spice decks and SOF files.
param 1 Flag()
sis_gzip_enable_for_lib
Determines whether SiliconSmart should use gzip or not. The gzip operation is
relevant to modeling related files such as lib files.
param 1 Flag()
sis_pruning_with_flat_netlist
Specifies if a completely flat netlist will be used for memory pruning
param 0 Flag()
sishapes_channel_length_offset
sishapes_minimum_feature_length
slew_derate_lower_threshold
Lower threshold for slew derating.
slew_derate_upper_threshold
Upper threshold for slew derating.
slew_matching_cin
Enable the slew matching methodology for pin capacitance measurement.
Matching of slew is done against active driver precharacterization data which
contains a table of capacitance values and the resulting output transition time.
param 0 Flag()
spectre_ccb
This tells if the spectre netlist is used for ccs_noise.
param 0 Flag()
spectre_fake_model
If the spectre_macmod is set to 1, this should be set to fake model for spectre.
spectre_macmod
This is set to 1 when device models are defined in subckt(macro model).
param 0 Flag()
srf_multiplier
Used for the reduction factor to generate the sweeper indices for which only
nominal values of process parameters are simulated.
stat_hold_sensitivity_ratios
Specifies the ratio in which -3sigma and +3sigma values are added to get
stat_hold sensitivity. The equation can be expressed as:
optimistic_side_ratio*(nominal_value - optimistic_value) +
pessimistic_side_ratio*(pessimistic_value - nominal_value).
The parameter value is a list of 4 floating point numbers.The 4 values
correspond to optimistic_side_ratio_case1,
pessimistic_side_ratio_case1,optimistic_side_ratio_case2,
pessimistic_side_ratio_case2. case1 corresponds to "pessimistic side greater
than optimistic side" and case2 corresponds to "pessimistic side less than
optimistic side." See Chapter 7, Statistical Characterization for more
information.
state_coverage_exclude_pins
This parameters accepts a list of pin names that will be removed from the state
coverage for a particular arc.
state_partitions
This parameter is used with 'set_config_opt' command to select which possible
states of an event will be grouped together to be represented by a single
measurement. 'one' does a single measurement. 'all' gives each state its own
measurement. 'ones_count' groups all states with the same number of active
input pins into a single measurement. 'no_dontcares' groups all states of those
input pins which are not in support of the events enabling condition. 'none'
disables all measurements.
The remaining modes are only used with white-box cell analysis.
'one_per_path' groups all states which enable the same internal propagation
path. 'all_per_path' groups all states which enable the same path with the same
internal state controlling that path. 'one_per_block_set' groups all states which
propagate a transition through the same set of channel-connected blocks.
'all_per_block_set' groups all states which propagate a transition through the
same set of blocks with the state internal state on those blocks. 'as_given' will
use the supplied state as it is specified.
See State Dependent Measurements (State Partitioning) for more information
on using state_partitions.
state_rank
This parameter specifies a list of possible states for an arc in order from best to
worst. It takes a list of Boolean expression representing states.
state_selection
When multiple states are available in a particular bin, the actual state
characterized can be controlled with the 'state_rank' and 'state_selection'
parameter. This parameter specifies whether to choose the best, the median or
the worst case as specified by the 'state_rank' list. A state_selection of arbitrary
selects a state in a deterministic but arbitrary manner (it is equivalent to the
selection of the best case). A state_selection of best_median_worst selects the
best ranked state if available and the worst is not also available, the worst if
available and the best is not also available, and the median otherwise.
statistical_avoid_screening_acquisition
If set to 1, screening will be bypassed. But this will increase runtime.
param 0 Flag()
statistical_constraint_screening_points
Specifies slew-slew points to be used for statistical constraint screening. If not
specified, SiliconSmart selects the middle slew-slew point as default.
statistical_constraint_screening_tolerance
This specifies the tolerance used to consider/ignore a particular coefficient in
statistical constraint screening characterization. Unit is absolute.Default is 0 in
which case constraint_resolution will be taken as the value.
param 0 Float(0.0,1e-9)
statistical_enable_constraint_sensitivity
If true, do setup/hold sensitivity characterization.
param 0 Flag()
statistical_model_sigma_montecarlo
If set to 1, SiliconSmart will use Monte-Carlo simulation to find out sigma
(standard deviation) for delay/slew. This should be used only for debugging
because the runtime will be very high.
param 0 Flag()
statistical_montecarlo_sample_size
This specifies the sample size in case statistical_model_sigma_montecarlo is
1.
statistical_reduction_factor
Since SSTA characterization is very expensive in terms of runtime, we give the
option to characterize a sparse table and interpolate data for rest of the table.
This parameter defines how parse the table should be. For example, if this
parameter is set to 0.5, only 50% of the sensitivity values are found out by
simulation and rest 50% is interpolated and put in the model.
statistical_screening_points
Specifies slew-load points to be used for screening. If not specified,
SiliconSmart selects default screening points. For an MxN slew-load table,
default screening points are [N/2, N-1,(M/2)*N,(M*N)/2,(M-1)*N,M*N-1].
statistical_screening_tolerance
Specifies the tolerance in percentage used to screen sweeping parameters for
LVF characterization.
statistical_significant_transistors
This is used in random/mismatch characterization. This gives the ability to
specify significant transistors on a per arc basis using set_config_opt
statistical_simulation_points
Specifies slew-load points (indices) to be used for LVF characterization. The
LVF table will be interpolated based on these points. If not specified,
SiliconSmart selects points based on statistical_reduction_factor.
statistical_simulator_bisection
If set to 0 and the parameter simulator_bisection is set to 1, stat_hold
characterization will use internal bisection while nominal hold characterization
will use simulator bisection.
param 1 0, 1
statistical_timing_abs_tolerance
Specifies the absolute value tolerance in nanoseconds for the statistically
measured delay. A warning is issued if the measured delay deviates the
imported delay by more than the tolerance.
statistical_timing_rel_tolerance
Specifies the relative value tolerance for the statistically measured delay. A
warning is issued if the measured delay deviates the imported delay by more
than the tolerance.
statistical_two_sided_screening
When turned on, LVF screening will use two-sided variation to decide
significance of parameters.
param 0 0, 1
statistical_use_pruned_netlist_for_nominal
If netlist pruning is enabled, this parameter gives an option to use pruned netlist
for nominal simulation. By default nominal delay/slew numbers are obtained by
simulating the original netlist. The logic behind this is that the user wants the
nominal delay/slew values to be as accurate as possible and does not want to
use pruned netlist for nominal delay/slew simulation.
param 0 Flag()
submit_list_maxsize
Specifies the maximum number of jobs that you can submit to the queue at any
time. This must be a positive integer value or the keyword unlimited. Stand-
alone job scheduling mode ignores this parameter.
subtract_pin_capacitance
Subtract pin capacitance from load indices.
param 1 Flag()
sweep_states
Directs SiliconSmart to characterize all states for a particular arc in the same
acquisition, in so far as possible. This will only apply to arcs which the modeler
can handle when combined.
param 1 Flag()
table_dimension_for_internal_node
Selects between 1-D and 2-D for timing tables for arcs with internal node as
outputs.
param 1 1, 2
table_dimensions
Selects between 2-D and 3-D for power and delay tables for arcs with multiple
switching outputs.
param -1 Integer(-1,None)
time_res_high
Sets the minimum simulation time-step during the critical analysis period. This
is the smallest unit of simulation time representing the finest timing resolution
for transient measurements.
time_res_low
Sets the maximum simulation time-step for the simulation. This represents the
coarsest timing resolution for transient measurements.
update_cache_last
This parameter controls when to update the cache if enable_cache is set to 1
(default is 0). If set to yes, the SiliconSmart tool will update the cache after all
the characterization job finish; if to no, it will update the cache after each job
finishes.
param 0 Flag()
use_ccs_init_delay
If set to 1, the SiliconSmart tool uses 10ps initial delay for CCST waveforms for
both timing and power, when CCS segmentation is used. If set to 0, the original
delay is preserved.
param 0 0, 1
use_ccs_native_current
If set to true value, it uses native current waveform from simulator while deriving
CCS driver current waveforms.
param 1 0, 1
use_ccsn_initial_delay
This parameter when set uses a fixed initial delay specified by
ccsn_initial_delay value for measuring the noise waveform and noise
propagation.
param 1 0, 1
use_exact_when
This parameter restricts SiliconSmart from automatically generating when
conditions. For a cell, if an arc has only one possible when condition and the
parameter use_exact_when is not set to 1 for that arc, then the timing group
corresponding to this arc/when condition will automatically become the default
group and no conditional groups will be modeled.
If the parameter use_exact_when is set to 1 for an arc, then the SiliconSmart
tool will model the timing group for this arc with the when condition (the only
one possible) in addition to the default timing group. In this case, the default
group will be a copy of the conditional group, since only one when condition is
possible.
param 0 Flag()
use_gates
Include gate contributions in a supply measurement.
param 1 Flag()
use_measured_slew_for_combined_setuphold
When setup and hold measurements are done through a single measurement
slew is measured again. If this parameter is set to 1, measured slew is used
during modeling. If this parameter is set to 0, origina slew value specified in
instance file is used during modeling.
param 1 Flag()
use_save_for_initialization
This option specified that the '.save' statement will be used for initialization
purposes rather than using the tr0 file for processing waveforms.
param 1 Flag()
use_simulator_licenses
Enables the opportunistic use of standalone simulator licenses for embedded
simulator use when core licenses are all taken. This is only applicable to the
new product packaging introduced in the 2015.06 release.
param 0 Flag()
verilog_atpg_syntax
Flag to indicate if the UDP definitions must be in ATPG syntax. This parameter
must be enabled to produce models containing scan pins.
param 0 Flag()
verilog_combine_function_timing_blocks
When set to true, the function block (udp) and timing block (specify statements)
appear in one single file.
param 0 Flag()
verilog_default_combinational_delay
Specifies the default delay to be used for combinational arcs when
verilog_unit_delay is enabled.
verilog_default_constraint_delay
Specifies the default delay to be used for constraint arcs when
verilog_unit_delay is enabled.
verilog_default_sequential_delay
Specifies the default delay to be used for sequential arcs when
verilog_unit_delay is enabled.
verilog_delay_path_polarity
Enables the addition of polarity indicators (A +=> B or A -=> B) to combinatorial
delay path statements.
param 0 0, 1
verilog_flavor
This parameter sets the simulator to be used. verilog-xl is the default value.
verilog_function
This parameter specifies the cell functionality during Verilog modeling.
verilog_functional_file
Specifies the name of the user-supplied Verilog specify block file. SiliconSmart
will parse the file for the 'specify' tag and insert the gates and specify
statements at that location.
verilog_hierarchy_separator
The string parameter used as the hierarchy separator when creating a pruned
flat netlist. The default value for memory pruning is '.'
verilog_model_notifier
When set to true, a notifier row is added to the generated UDPs.
param 0 Flag()
verilog_model_power_as_inout
Specifies a list of vdd/gnd power supplies that will be treated as inout ports in
the Verilog model.
verilog_model_power_as_output
Specifies a list of vdd/gnd power supplies that will be treated as output ports in
the Verilog model.
verilog_model_power_supplies
This parameter can be used to specify a list of vdd/gnd power supplies that will
be treated as input ports in the Verilog model. This parameter accepts a list of
VDD/GND pin names that will be modeled as input ports for Verilog models.
For example, a typical use case would be specifying
verilog_model_removal_as_hold
This parameter provides the option of modeling removal constraints in the
Verilog model as hold (instead of removal) timing checks. Removal timing
checks were introduced in SDF v3.0 and were not available prior to that
version. Therefore, this parameter must be enabled based on the SDF version
that will be used during back annotation.
param 0 Flag()
verilog_model_use_recrem
If this parameter is set to true, the recover task and removal task present in the
Verilog model will be combined into one task recrem.
param 0 0, 1
verilog_model_use_setuphold
If this parameter is set to true, the setup task and hold task present in the
Verilog model will be combined into one task setuphold.
param 0 Flag()
verilog_notifier_name
Specifies the string to be used as the name of the notifier.
verilog_table_indices
This parameter is relevant when verilog_unit_delay is disabled. It consists of a
list of six integers to indicate three pairs of pin1/pin2 (eg: slew/load) indices to
be used of min/typ/max entries in the Verilog model. For one-dimensional
tables such as those used for mpw, every second index must be 0. If
verilog_udp_file
Specifies the name of the user-supplied Verilog udp file. SiliconSmart will
directly use the specified file instead of generating one that matches the
functional description in the instance file.
verilog_unit_delay
When true, all timing delays are modeled as unit delays. This is recommended
when using a back annotation flow. When false, the average delay values from
the .lib are added to the Verilog mode.
param 1 Flag()
verilog_unused_pins_format
Specifies the format to be used for unused pins (for instance, non-existent
preset/clear inputs) in a cell. Can be the simple string 0/1 or 1'b0/1'b1 or one of
supply0/supply1 to tie low/high the unused pins.
vg_allow_floating_nets
This parameter directs VG to allow floating nets in the circuit graph. VG initially
performs circuit connectivity checks on the circuit graph supplied by FR. This
Boolean parameter indicates if VG should allow for dangling nets in the graph.
In general, there are two types of floating nets: (a) An output net from a block
that has no input nets and (b) An intermediate net from a block that does have
valid inputs but is disconnected from the rest of the circuit. Case (a) will always
result in a fatal error in the form of a failed connectivity check. Case (b) is
sometimes possible if the intermediate net does not influence the logical
functionality of the circuit (for instance, a drive strength pin). By default, VG will
flag both such cases as fatal errors and fail the circuit connectivity test. If this
parameter is set to true, VG will allow for instances of case (b) to pass.
param 1 Flag()
vg_enable_constraint_measurements
This parameter directs VG to perform constraint measurements.
param 1 Flag()
vg_enable_hidden_measurements
This parameter directs VG to perform hidden measurements.
param 1 Flag()
vg_enable_pulse_measurements
This parameter directs VG to perform pulse width measurements.
param 1 Flag()
vg_enable_steady_measurements
This parameter directs VG to perform steady state (leakage) measurements.
param 1 Flag()
vg_enable_switching_measurements
This parameter directs VG to perform switching measurements.
param 1 Flag()
vg_explicit_leakage_states
List of states to be used to be used to compute leakage fugues in VG. This
parameter is used to supply a list of strings that signify leakage states explicitly.
If this list is provided, the value of state partitions is ignored and only this list of
states is used to produce steady (leakage) fugues. Each supplied string is
converted to a BDD expression if it is in the appropriate format. Nets that are
not part of the circuit but are included in the BDD are filtered. If any one of the
interface ports (primary inputs, clocks, inouts) is left unassigned, they are set to
0.
vg_log_level
This parameter sets the severity level for the messages appearing in the
VectorGenerator log file.
vg_max_arcs_per_input_transition
Indicates the maximum number of arcs allowed per input transition for a given
cell. If the actual number of arcs exceeds this number, VG will downgrade the
state_partitions value and proceed with the analysis. Note that no downgrade is
possible if state_partitions is one or one_per_path.
vg_max_leakage_states
Indicates the maximum number of leakage states allowed per cell.
vg_partial_circuit_collapse
This parameter directs VG to partially collapse the circuit graph. This is
primarily useful for large cells to condense the circuit without changing the
functionality.
param 0 Flag()
vg_restricted_inputs
List of inputs to be used in restricted fashion. This should be accompanied by
the parameter vg_restricted_states. See the description for
vg_restricted_states for more information.
vg_restricted_states
List of states to be used to restrict some inputs during VG analysis. This should
accompany the parameter vg_restricted_inputs. Restricted states refers to a
particular input setting applied to the circuit (for instance, drive strength signals
fixed to a specific value). Restricted inputs refers to the list of inputs on which
these states are to be enforced.
You should not have the same input net be part of the restricted inputs as well
as restricted states. These parameters accept a list of strings as their
arguments. They must be specified together if they are to be considered during
VG analysis (either both are empty or both are non-empty). If there are multiple
restricted states specified, for the second and all subsequent states, only the
inputs listed in vg_restricted_inputs list are analyzed. If a primary input is listed
in vg_restricted_inputs and it is also part of one of the vg_restricted_states, the
input is abstracted out of the restricted state when arcs originating from it are
analyzed. For instance, if a is a restricted input and a restricted state is
specified a.!b.!c then the restricted state corresponding to arc analysis from a
will be taken as just !b.!c.
vg_state_selection
Specific state selection in the VG flow. For a given input pin, among all arcs,
fugues will be generated for only those arcs whose when conditions match the
supplied selected state value.
voltage_name_map
This parameter is helpful in specifying voltage name where volatge name is not
same as pg_pin group name.
weak
Defines the characterization settings for characterizing pins with weakly driven
transitions.
whens
This parameter specifies the explicit secondary pin states for an arc when
'state_partitions' is set to 'explicit'.
workers_as_daemons
Starts characterization workers as daemons, so they are out of job
management control.
pintype Parameters
The following parameter are available in pintype block:
■
acquire_ccs_timing
■
acquire_retaining_arcs
■ aocv_input_slew
■
autorange_height
■
autorange_load
■ autorange_load_minmax_ratio
■ autorange_load_source
■
autorange_timeshift
■
bundle_from
■
bundle_to
■
bundle_width
■
bus_from
■
bus_to
■
bus_width
■
ccs_max_voltage_error
■
ccs_power_max_current_error
■
ccsn_dc_normalize_voltage
■
ccsn_default_load
■
ccsn_iv_voltage
■
ccsn_numsteps_voltage
■
cin_bias_capacitance
■
cin_high_threshold
■
cin_high_threshold_fall
■
cin_high_threshold_rise
■
cin_low_threshold
■
cin_low_threshold_fall
■
cin_low_threshold_rise
■
clock_active_period
■
clock_inactive_period
■ common_differential_cin_input
■
configure_delay_from_outputs
■
constraint_alternate_input
■
constraint_autorange_load
■
constraint_default_load
■
constraint_default_slew
■
constraint_dependent_margin
■
constraint_explicit_points_load
■
constraint_explicit_points_slew
■
constraint_glitch_check
■
constraint_largest_load
■
constraint_largest_slew
■
constraint_monotonic_check
■
constraint_numsteps_load
■
constraint_numsteps_slew
■
constraint_resolution
■
constraint_scaled_points_load
■
constraint_scaled_points_slew
■
constraint_smallest_load
■
constraint_smallest_slew
■
current_resolution
■
cycle_time
■
decap_fall_time
■
default_bus_value_0
■
default_bus_value_1
■
default_height
■
default_load
■
default_load_index_position
■
default_load_index_position_mode
■ default_load_mode
■
default_load_pct
■
default_load_scale
■
default_pintype
■
default_slew
■
default_total_slew
■
default_total_slew_multiplier
■
default_voltage
■
default_width
■
delay_matching_cin_driver
■
delay_matching_cin_max
■
dependent_max_width
■
differential_pair_timing_duplication
■
differential_slew_mode
■
dontcare_bias
■
dontcare_value
■
downto
■
driver
■
driver_fall_time
■
driver_initial_delay
■
driver_mode
■
driver_pwl_fall
■
driver_pwl_rise
■
driver_pwls_fall
■
driver_pwls_rise
■
driver_rise_time
■
driver_waveform_limit
■
driver_waveform_min_dt
■
driver_waveform_points
■ ecsm_fixed_levels
■
ecsm_higher_threshold
■
ecsm_lower_threshold
■
ecsm_threshold_tolerance
■
ecsm_use_fixed_levels
■
ecsm_waveform_set
■
em_table_with_current_types
■
emulated_driver_ratio
■
enable_clamped_predriver
■
enable_common_mode_voltage
■
enable_multi_threshold_receiver_cap
■
exclude_ecsm_start_end_points
■
explicit_points_frequency
■
explicit_points_height
■
explicit_points_load
■
explicit_points_rload
■
explicit_points_slew
■
explicit_points_timeshift
■
explicit_points_voltage
■
explicit_points_width
■
failure_threshold
■
failure_threshold_fall
■
failure_threshold_rise
■
fallback_threshold_pcts
■
force_driver_char_reuse
■
full_transition_mode
■
full_transition_fall_threshold
■
full_transition_rise_threshold
■
glitch_high_threshold
■ glitch_low_threshold
■
hyper_coeffs_three_point_method
■
ibis_above_rail_multiplier
■
ibis_acq_to_model
■
ibis_acq_to_model2
■
ibis_below_rail_multiplier
■
ibis_c_comp
■
ibis_composite_current
■
ibis_copyright
■
ibis_default_r_fixture
■
ibis_disclaimer
■
ibis_ground_clamp_supply
■
ibis_input_differential_nodes
■
ibis_input_node
■
ibis_input_pin_open
■
ibis_isso
■
ibis_iv_diff_pin_v_sum
■
ibis_manufacturer
■
ibis_max_gnd_clamp_ref
■
ibis_max_power_clamp_ref
■
ibis_max_pulldown_ref
■
ibis_max_pullup_ref
■
ibis_min_gnd_clamp_ref
■
ibis_min_power_clamp_ref
■
ibis_min_pulldown_ref
■
ibis_min_pullup_ref
■
ibis_model_to_acq
■
ibis_notes
■
ibis_numsteps_voltage
■ ibis_output_differential_nodes
■
ibis_output_node
■
ibis_power_clamp_supply
■
ibis_rail_extrapolate_linear
■
ibis_typ_gnd_clamp_ref
■
ibis_typ_power_clamp_ref
■
ibis_typ_pulldown_ref
■
ibis_typ_pullup_ref
■
ibis_vt_v_fixture_differential_output
■
ibis_vt_v_fixture_falling_non_differential_output
■
ibis_vt_v_fixture_rising_non_differential_output
■
initial_common_mode_voltage
■
initial_delay
■
largest_frequency
■
input_fall_threshold
■
input_rise_threshold
■
largest_height
■
largest_load
■
largest_rload
■
largest_slew
■
largest_timeshift
■
largest_voltage
■
largest_width
■
liberty_bundle_as_pins
■
liberty_bus_as_pins
■
liberty_internal_pin
■
liberty_pin_groups
■
liberty_tmax_input
■
liberty_tmax_output
■ limit_noise_pulse_range
■
logic_high_level
■
logic_high_name
■
logic_high_param_name
■
logic_high_threshold
■
logic_high_threshold_fall
■
logic_high_threshold_rise
■
logic_low_level
■
logic_low_name
■
logic_low_param_name
■
logic_low_threshold
■
logic_low_threshold_fall
■
logic_low_threshold_rise
■
max_asynch_recovery
■
max_asynch_removal
■
max_cmpw
■
max_constraint
■
max_constraint_multiplier
■
max_hold
■
max_hold_hbm
■
max_min_period
■
max_ncmpw
■
max_recover_hbm
■
max_recovery
■
max_removal
■
max_removal_hbm
■
max_setup
■
max_setup_hbm
■
max_tout
■ max_width_factor
■
maxload_tout_resolution
■
members
■
min_adjust
■
min_asynch_recovery
■
min_asynch_removal
■
min_cmpw
■
min_constraint
■
min_constraint_multiplier
■
min_hold
■
min_hold_hbm
■
min_min_period
■
min_ncmpw
■
min_recover_hbm
■
min_recovery
■
min_removal
■
min_removal_hbm
■
min_setup
■
min_setup_hbm
■
mpw_min_adjust
■
nochange_clock
■
node_activity_tolerance
■
node_stability_pruning_threshold
■
noise_immunity_current
■
noise_immunity_from_prop
■
noise_immunity_tolerance
■
num_ccs_samples
■
numsteps_frequency
■
numsteps_height
■ numsteps_load
■
numsteps_rload
■
numsteps_slew
■
numsteps_timeshift
■
numsteps_voltage
■
numsteps_width
■
opt_load_high
■
opt_load_low
■
partial_swing
■
output_fall_threshold
■
output_rise_threshold
■
partial_swing_minimum
■
passive_glitch_check
■
peak_ratio
■
phased_inputs
■
pin_category
■
pintype
■
pocv_input_slew
■
port
■
power_period
■
prop_delay_current
■
prop_delay_inp_level
■
prop_delay_inp_level_fall
■
prop_delay_inp_level_rise
■
prop_delay_level
■
prop_delay_out_level
■
prop_delay_out_level_fall
■
prop_delay_out_level_rise
■
rc_filter_capacitor
■ rc_filter_resistor
■
scaled_points_frequency
■
scaled_points_height
■
scaled_points_load
■
scaled_points_rload
■
scaled_points_slew
■
scaled_points_timeshift
■
scaled_points_voltage
■
scaled_points_width
■
si_driver
■
side_pin_driver
■
skip_constraint_outputs
■
slew_based_margin
■
smallest_frequency
■
smallest_height
■
smallest_load
■
smallest_rload
■
smallest_slew
■
smallest_timeshift
■
smallest_voltage
■
smallest_width
■
smc_constraint_style
■
smc_degrade
■
smc_degrade_absolute
■
smc_degrade_check
■
smc_degrade_maximum
■
smc_degrade_pushout
■
smc_max_degrade_absolute
■
smc_slew_degrade
■ smc_slew_degrade_absolute
■
soi_transition_mode
■
stable_time
■
subtract_leakage
■
sweep_method_load
■
sweep_method_slew
■
switchpoint_default_slew
■
target_bits
■
tie_cell_load
■
total_slew_multiplier
■
trailing_delay
■
use_floating_hiz_output
■
verilog_attach_edges
■
voltage_resolution
■
voltage_resolution_threshold
acquire_ccs_timing
Allows the acquisition of CCS timing measurements to be selectively controlled
by pin. This is typically used when CCS measurements must be disabled for a
subset of pins on a cell, such as I/O pads. Setting this value to 0 disables CCS
timing measurements.
pintype 1 Flag()
acquire_retaining_arcs
If enabled for an arc, retain acquisition will be generated for that arc
pintype 0 Flag()
aocv_input_slew
Input slew to be used for AOCV characterization.
autorange_height
Indicates that the minimum input glitch height should be automatically
determined by a process of autoranging. The method finds the switching point
of the cells and determines the range of heights used for noise propagation
measurements. Set this parameter to 1 to enable height autoranging.
Specifying explicit_points_height suppresses autoranging even if
autorange_height is set to 1.
pintype 1 Flag()
autorange_load
Enables output load auto-ranging. Auto-ranging creates simulations named
\"capload\" which perform a modified binary search to determine the output
load necessary to achieve an output slew equal to the value specified by the
max_tout pintype parameter.
Load auto-ranging can be performed for every state (slower), or every pin
(faster). When using \"state\", the output slew tables should have a maximum
output slew value equal to max_tout. When using \"pin\", auto-ranging is only
done for one arbitrary state for each pin, the result of which is then applied to all
arcs ending at that pin. When using pin mode, you can expect to see
differences to maximum output slew as compared to the max_tout value,
especially if there is a lot of delay variance between different states.
Note that when explicit loads are specified via set_config_opt, auto-ranging will
not be used even if enabled. Typically, the import command is run with the
-use_default_loads switch, when auto-ranging is desired. Typically, pin based
autorange_load_minmax_ratio
Define the ratio of largest and smallest load value when largest_load is
calculated using autorange_load option. If the actual ratio is smaller than the
value defined for this parameter, a warning will be issued. This is to avoid too
close spacing of load points.
autorange_load_source
Identifies an arc as a possible source for load auto-ranging measurements. The
default is to consider all types of arcs as candidates. This parameter can be
used to selectively enable only certain types of arcs (for instance, delay arcs)
as a source of load auto-ranging measurements.
pintype 1 Flag()
autorange_timeshift
Indicates that the timeshift value for noise immunity measurements on
synchronous data pins is automatically determined by a process of
autoranging. Set this parameter to 1 to enable timeshift autoranging. Specifying
pintype 1 Flag()
bundle_from
Modeling parameter controlling bundle group attributes. The index of the most
significant bit of a bundle.
pintype 0 Integer()
bundle_to
Modeling parameter controlling bundle group attributes. The index of the least
significant bit of a bundle.
pintype 0 Integer()
bundle_width
Specifies the number of bits in the bundle. The default value is 1 for pins and
must be greater than 1 for bundles.
pintype 1 Integer(1,None)
bus_from
Modeling parameter controlling bus group attributes. The index of the most
significant bit of a bus.
pintype 0 Integer()
bus_to
Modeling parameter controlling bus group attributes. The index of the least
significant bit of a bus.
pintype 0 Integer()
bus_width
Specifies the number of bits in the bus. The default value is 1 for pins and must
be greater than 1 for buses.
pintype 1 Integer(1,None)
ccs_max_voltage_error
Maximum allowed voltage error as a fraction of the total voltage range.
ccs_power_max_current_error
Maximum allowed current error as a fraction of the total current range.
ccsn_dc_normalize_voltage
pintype 10 Integer(1,None)
ccsn_default_load
Defines a load value for output node of CCBs, which are internal nets with
respect to the cell-to-parent cell. This parameter is defined in the configure.tcl
file. The default value is 1e-15 .
ccsn_iv_voltage
Multiplication factor used for multiplying voltage values in CCS-noise I-V curve.
This is typically rail to rail voltage. SiliconSmart automatically calculates this
internally.
ccsn_numsteps_voltage
Specifies the size of CCS-noise I-V table. This parameter also determines the
voltage range:
■
If ccsn_numsteps_voltage >=6 and <=16, the range is from -0.1VDD to
1.1VDD.
■
If ccsn_numsteps_voltage >=17 and <=25, the range is from -0.5VDD
to 1.5VDD.
■
If ccsn_numsteps_voltage >=26, the range is from -VDD to 2VDD.
pintype 29 Integer(6,None)
cin_bias_capacitance
During slew-matching input pin capacitance measurements a small capacitor is
added to the output of the active driver. This is to avoid accuracy issues with my
SPICE simulators when running with 0pf loads. See the Pin Capacitance
section in the Measurement and Modeling Methodology chapter.
cin_high_threshold
Higher voltage threshold for pin capacitance measurement. This clips off any
ringing in the single and long tails caused by leakage currents through the input
pin.
cin_high_threshold_fall
Higher voltage threshold for pin capacitance measurement of the falling
waveform.
cin_high_threshold_rise
Higher voltage threshold for pin capacitance measurement of the rising
waveform.
cin_low_threshold
Lower voltage threshold for pin capacitance measurement. This clips off any
ringing in the single and long tails caused by leakage currents through the input
pin.
cin_low_threshold_fall
Lower voltage threshold for pin capacitance measurement of the falling
waveform.
cin_low_threshold_rise
Lower voltage threshold for pin capacitance measurement of the rising
waveform.
clock_active_period
clock_inactive_period
common_differential_cin_input
When measuring input capacitance on a differential pin, drive each input with
the same stimulus to avoid including cross-coupling resistor currents.
pintype 1 Flag()
configure_delay_from_outputs
Used to specify the relative input pin (which is actually an output pin) for output
to output arc
constraint_alternate_input
The list of internal pins to which to measure a constraint. Usually this is just one
internal node. If empty use pin itself.
constraint_autorange_load
Enables autoranging for constraint load.
constraint_default_load
Unswept load value used for constraints.
constraint_default_slew
Unswept slew value used with constraints.
constraint_dependent_margin
For dependent-setup or dependent-hold, this parameter controls the minimum
time between the selected independent edge and the limiting point. If the actual
margin is too small, the position of the dependent edge becomes unstable.
Typically this will be a multiple of constraint_resolution.
constraint_explicit_points_load
Specific load indices to use for constraints.
constraint_explicit_points_slew
Specific slew indices to use for constraints
constraint_glitch_check
When true, verify that a transition on a constraint test output is not just a glitch.
Default is true.
pintype 1 Flag()
constraint_largest_load
Largest load index used for constraints (if autorange_load = off).
constraint_largest_slew
Largest slew index for constraints.
constraint_monotonic_check
When true, verify that a transition on a constraint test output is monotonic
between the transition thresholds.
pintype 0 Flag()
constraint_numsteps_load
Specifies the number of load points to be used in constraint measurements if
explicit_points_load is not set. This allows constraint tables to be different sizes
than the timing and power tables.
constraint_numsteps_slew
Specifies the number of slew points to be used in constraint measurements if
explicit_points_slew is not set. This allows constraint tables to be different sizes
than the timing and power tables.
constraint_resolution
Defines the timing resolution used to perform constraint timing measurements
such as setup, hold, and MPW are determined. All constraints measurements
are acquired using a search algorithm where constraint_resolution represents
the smallest size of the search window.
constraint_scaled_points_load
Set loads at intervals between smallest_load and largest_load (or autoranged).
constraint_scaled_points_slew
Set slews at intervals between smallest_slew and largest_slew.
constraint_smallest_load
Smallest load index for constraints.
constraint_smallest_slew
Smallest slew index for constraints.
current_resolution
The current that can be taken as a unit to decide on the change of state
cycle_time
Specifies the period for one cycle of a clock waveform used in constraint
measurements.
decap_fall_time
The time by which vdd values come down to its 90% for decapacitance
measurement.
default_bus_value_0
A string of 0's and 1's to use as the input to a bus when it's value is nominally 0,
as in the first state of a rise transition. The length of the string should match the
bus_width parameter.
default_bus_value_1
A string of 0's and 1's to use as the input to a bus when it's value is nominally 1,
as in the second state of a rise transition. The length of the string should match
the bus_width parameter.
default_height
Obsolete
default_load
Specifies the load associated with output and bidirectional pins that are
expected to transition during a simulation, except where the load is not being
swept.
default_load_index_position
Specifies the index position of the load indices.
default_load_index_position_mode
Specifies how to choose a load value, if multiple arcs exist with the same output
pin. This should be used along with the parameter default_load_index_position.
default_load_mode
Controls the loading on secondary outputs. If 'fixed' then the value of
'default_load' is used. If 'scaled' then a fraction of the maximum_load (which
may be autoranged) is used. If 'swept' then a fraction of the swept load is used.
See 'default_load_scale' for the fraction to use.
default_load_pct
Specifies the percentage of maximum output load to be applied on secondary
output pins
default_load_scale
The fraction of autoranged load to use for loading secondary outputs. When
default_load_mode is set to scaled, the load used is the maximum load *
default_pintype
Specifies the name of a pintype to use for supply pins if the pintype has not
been set via the add_pin command. This simplifies the task of defining the
pintypes of the supply pins for an entire library.
default_slew
Specifies the slew associated with pins that are required to transition during the
simulation, but have no specific slew value associated with them.
default_total_slew
An internally computed parameter that approximates the default rail-to-rail
transition time expected in the simulations. It is computed by extrapolating the
default_slew value to a full rail transition. This parameter is used as the basis
for the default value of many pin type parameters.
default_total_slew_multiplier
Default value for total_slew_multiplier, which is specified to expand simulation
time.
default_voltage
Obsolete
default_width
Obsolete
delay_matching_cin_driver
Specifies the cell to be used for delay matching cin. This cell is
precharacterized to generate delay-capacitance table. This table is used during
delay matching cin measurement.
delay_matching_cin_max
Specifies the upper limit for cap while doing delay matching driver
characterization.
dependent_max_width
Maximum data pulse width allowed for dependent setup/hold.
differential_pair_timing_duplication
This parameter restricts SiliconSmart from automatically copying timing table
for differential output pair.
param 1 Flag()
differential_slew_mode
Controls the method for measuring slew to/from a differential pin pair. If
\"single\", treat the pin as a normal single-ended pin; if \"partial\", measure to
the slew thresholds relative to the partial swing rails; if \"crossover\", measure
relative to the crossover point; if \"legacy\", use the original method, similar to
\"partial\" but measured internally.
dontcare_bias
Preferred value to use for this pin if a choice exists. Used for arbitrary selection
among several possible states for a measurement.
dontcare_value
downto
A modeling parameter for controlling bus group attributes. If set to 1, the
number assignment for the bus_from and bus_to parameters will be from
high to low, respectively.
pintype 0 0, 1
driver
Specifies the device (cell) used to generate the input stimulus on pins.
Specifying pwl directs SiliconSmart to use an ideal, linear voltage ramp. To use
an active driver cell, set this parameter to the name of a cell imported with the
import_driver command.
driver_fall_time
Specifies the fall transition time for the input stimulus to an active driver cell.
The time specified for this parameter corresponds to the rail-to-rail time for the
piece-wise-linear waveform applied in Spice.
driver_initial_delay
Initial delay specified for driver.
driver_mode
Type of driver to use for stimulating each pin during characterization:
■
active — uses a driver cell driving a capacitance to produce a realistic input
waveform of the required slew.
■ active-waveform — preferred to active; it captures the active driver
waveforms and uses a pwl input so that the driver does not have to be
simulated more than once
■ active-direct — attaches the driver to the CUT; it does not allow control of
the input slew.
■
pwl — a simple ramp.
■ custom — similar to pwl but with a user supplied shape from the parameters
driver_pwl_rise and driver_pwl_fall.
■
custom-perslew — sets different waveform shapes for each slew with a tcl
list of lists and the parameters driver_pwls_rise and driver_pwls_fall.
■
emulated — the standard CCS timing waveform shape.
■ pin-active-waveform — derives the driver shape by driving each pin with the
driver cell and then using the resulting shape as a custom waveform.
driver_pwl_fall
Used for custom waveform driver. This parameter controls the shape of the fall
PWL pre-driver. You must explicitly set this parameter. It is a list of floating point
values between 0 and 1 (normalized) and the lengths of the list must be
equivalent with the list for the parameter driver_pwl_rise. According to these
two list values, the SiliconSmart tool scales the rise and fall waveforms.
driver_pwl_rise
Used for custom waveform driver. This parameter controls the shape of the rise
PWL pre-driver. You must explicitly set this parameter. It is a list of floating point
values between 0 and 1 (normalized) and the lengths of the list must be
equivalent with the list for the parameter driver_pwl_fall. According to these two
list values, the SiliconSmart tool scales the rise and fall waveforms.
driver_pwls_fall
Used for custom waveform per slew (custom-perslew) driver. The value should
be a tcl list of lists. This represents the set of falling driver waveforms. The
voltage levels used in each waveform should be the same and normalized (and
between 1->0) and the time values should be in units of seconds. The format
should be: {{slew1} {t11 v1 t12 v2 ... t1n vn} ... {slewm} {tm1 v1 tm2 v2 ... tmn
vn}}.
driver_pwls_rise
Used for custom waveform per slew (custom-perslew) driver. The value should
be a tcl list of lists. This represents the set of rising driver waveforms. The
voltage levels used in each waveform should be the same and normalized (and
between 0->1) and the time values should be in units of seconds. The format
should be {{slew1} {t11 v1 t12 v2 ... t1n vn} ... {slewm} {tm1 v1 tm2 v2 ... tmn
vn}}.
driver_rise_time
Specifies the rise transition time for the input stimulus to an active driver cell.
The time specified for this parameter corresponds to the rail-to-rail time for the
piece-wise-linear waveform applied in Spice.
driver_waveform_limit
The maximum ratio between the actual rail-to-rail time and the linear rail-to-rail
time. Enforced only for pin-active-waveform at present.
driver_waveform_min_dt
When you provide your driver_waveform_points to be too close (many points in
the range 0-100%), then the driver_waveform_min_dt will activate. The
SiliconSmart tool will determine that two voltage points should be at least
driver_waveform_points
Normalized voltage values used for waveform based active driver. Must match
driver characterization. This parameter contains a list of floating point numbers
between 0 and 1.0 in ascending order. Specifying more points will cause the
waveform to be more similar to the actual driver waveform. In general, the
defaults for this parameter shows good correlation when compared to active
driver mode.
ecsm_fixed_levels
If ecsm_use_fixed_levels=1, use these fixed sampling thresholds for ecsm
voltage waveforms.
ecsm_higher_threshold
Higher threshold for ecsm waveform. If the voltage waveform does not cross
this threshold, ecsm measurement will fail
ecsm_lower_threshold
Lower threshold for ecsm waveform. If the voltage waveform does not cross this
threshold, ecsm measurement will fail
ecsm_threshold_tolerance
ECSM waveforms must have points near the upper and lower slew threshold
and near the delay threshold. How near is configurable here, and in lc_shell.
Too near runs the risk of simultaneous times due to round-off error so 0.001 is
about the smallest reasonable value. This parameter is now expressed as a
fraction of the threshold value rather than as an absolute difference.
ecsm_use_fixed_levels
If true, use fixed sampling thresholds for ECSM waveforms.
pintype 0 Flag()
ecsm_waveform_set
If true, use ECSM_waveform_set syntax.
pintype 0 Flag()
em_table_with_current_types
Generate separate EM toggle rate tables for different current types (average,
RMS, peak) . The default is 0.
param 0 Flag()
emulated_driver_ratio
When the driver_mode is emulated, this parameter is used to construct a
voltage waveform that is a weighted sum of a linear voltage curve and an
exponential voltage ramp.
enable_clamped_predriver
When the driver_mode is ccs-predriver (emulated), this parameter is
used to construct a voltage waveform that is a weighted sum of a clamped
linear voltage curve and an exponential voltage ramp.
pintype 0 Flag()
enable_common_mode_voltage
Start simulation with pin at initial_common_mode_voltage before
transitioning to the initial state for the measurement. This is currently ignored
for non-differential pins.
pintype 0 Flag()
enable_multi_threshold_receiver_cap
Determines whether receiver capacitance is measured/modeled at multiple
thresholds.
param 0 Flag()
exclude_ecsm_start_end_points
The rail times for ecsm are fictional and are only included since ECSM once
required them. Set this to false to eliminate them.
pintype 0 Flag()
explicit_points_frequency
This parameter can be used to specify the explicit frequency values that should
be used to find out the intrinsic capacitance value for the cell for CCS power
measurements.
explicit_points_height
Specifies a list of input glitch heights (in volts) to be swept when acquiring noise
measurements. When specified, SiliconSmart does not automatically generate
a range of heights and the numsteps_height, smallest_height, and
largest_height parameters are ignored.
explicit_points_load
Specifies a list of loads to be swept when acquiring measurements. When
specified, SiliconSmart does not automatically generate a range of loads, and
the numsteps_load, smallest_load, and largest_load settings are ignored.
explicit_points_rload
Specifies a list of loads for the second output pin to be swept when acquiring
measurements. When specified, SiliconSmart does not automatically generate
a range of loads, and the numsteps_rload, smallest_rload, and largest_rload
settings are ignored.
explicit_points_slew
Specifies a list of slews to be swept when acquiring measurements. When
specified, SiliconSmart does not automatically generate a range of slews and
numsteps_slew, smallest_slew, and largest_slew settings are ignored.
explicit_points_timeshift
Specifies a list of times (in seconds) to be swept when acquiring time shift
acquisitions on a sequential input relative to an edge-triggered clock pin. See
Characterization and Modeling.
explicit_points_voltage
If voltage must be swept at a pin for any measurement, this parameter can be
used to specify the values explicitly.
explicit_points_width
Specifies a list of input glitch widths (in volts) to be swept when acquiring noise
measurements. When specified, SiliconSmart does not automatically generate
failure_threshold
The maximum safe voltage change allowed on an output in response to an
input glitch. Responses greater than this value are considered a failure. If
unset, a slope matching algorithm is used as described in Characterization and
Modeling.
failure_threshold_fall
Same as failure_threshold, but only applies to falling output values. The value
must be positive as it is an absolute threshold.
failure_threshold_rise
Same as failure_threshold, but only applies to rising output values.
fallback_threshold_pcts
Specifies a list of desired multiple percentage threshold levels that are used to
detect failures caused by fallbacks. When this parameter is set, fallback checks
using logic_low_threshold and logic_high_threshold are not
performed.
If nothing is specified, fallback check is done at logic_low_threshold and
logic_high_threshold. If some values are specified, fallback check is
done only at thresholds specified through this parameter.
force_driver_char_reuse
Enforce reuse of driver db and bypassing driver char job. Note that it will reuse
driver db blindly. Use with caution.
param 0 Flag()
full_transition_mode
Determines whether the cell makes a full transition or not in the delay/slew
characterization. When enabled, it conducts timeAtVoltage measurement after
delay/slew/propagating_power characterization.
pintype 0 0, 1
full_transition_fall_threshold
When the full_transition_mode parameter is set to 1, this parameter
defines the thresholds of full transition voltage for output pin (in rising arc and
falling arc, respectively). They are collectively used for checking whether the
cell can reach the fraction of the supply voltage and full transition during the
delay/slew/propagating_power characterization. Each value must be between 0
and 1.0.
full_transition_rise_threshold
When the full_transition_mode parameter is set to 1, this parameter
defines the thresholds of full transition voltage for output pin (in rising arc and
falling arc, respectively). They are collectively used for checking whether the
cell can reach the fraction of the supply voltage and full transition during the
delay/slew/propagating_power characterization. Each value must be between 0
and 1.0.
glitch_high_threshold
The fraction of a complete transition from the high rail to the low rail which
constitutes a glitch.
glitch_low_threshold
The fraction of a complete transition from the low rail to the high rail which
constitutes a glitch.
hyper_coeffs_three_point_method
If true, use the three point error estimatation method to determine hyperbolic
noise coefficients. Otherwise use the default curve fitting method.
pintype 0 Flag()
ibis_above_rail_multiplier
A multiplier used to determine the top of the power clamp and IV curve voltage
range in the equation, ibis_above_rail_multiplier * (VDD-VSS) + VSS. The
default of 1.0 corresponds to a voltage of 2*VDD (assuming VSS is ground).
ibis_acq_to_model
internal usage, map acq to model
ibis_acq_to_model2
internal usage, map acq to model
ibis_below_rail_multiplier
A multiplier used to determine the bottom of the ground clamp voltage range in
the equation, VSS - ibis_below_rail_multiplier * (VDD-VSS). The default of 1.0
corresponds to a voltage of -VDD (assuming VSS is ground).
ibis_c_comp
The size of the capacitive load to use in VT-curve measurements. The value
can also be the name of an operating condition parameter defined with the
command set_opc_parameter. This allows the capacitance value to vary
across operating conditions.
ibis_composite_current
This boolean parameter controls the [Composite Current] section in IBIS
models. Note [Composite Current] is supported in IBIS from version 5.0 and
above.
pintype 0 Flag()
ibis_copyright
This parameter controls ibis copyright section which would be written to the ibis
files.
ibis_default_r_fixture
The resistance used to characterize the transient data (V-T). For high speed
designs this usually equals the characteristic impedance of a transmission line
(Z0 = 50 Ohms). An exception to this rule is the USB1.1 (low speed) cell which
needs to characterized at 15K Ohms for the upstream port load version. It
becomes more complicated for the downstream port load where only one of the
pads gets connected to 1.5K and the other one is left floating.
ibis_disclaimer
This parameter controls ibis disclaimer section which would be written to the
ibis files
ibis_ground_clamp_supply
Specifies an alternate supply name to be used as the reference voltage during
ground clamp measurements.
ibis_input_differential_nodes
Specify differential input nodes.
ibis_input_node
Specify input node for IO buffer.
ibis_input_pin_open
In the case LVDS, during clamping current characterization VREF pin must be
floating or attached to a small capacitance. The possible values are none and
one. When set to one, a small capacitance will be connected to VREF. Default
value is none which means connection of source/device at VREF will be
controlled by normal behavior.
ibis_isso
This boolean parameter controls the [ISSO_PU] and [ISSO_PD] section in IBIS
models. Note [ISSO_P?] is supported in IBIS from version 5.0 and above.
pintype 0 Flag()
ibis_iv_diff_pin_v_sum
The sum of the voltages at differential pins during I-V characterization. In case
of LVDS (one of them anyway) it turns out to be 2*VREF For USB1.1 (low
speed) the sum turns to be equal to DVDD.
ibis_manufacturer
This parameter controls ibis manufacturer section which would be written to the
ibis files
ibis_max_gnd_clamp_ref
Specifies max corner's ground clamp voltage. This is used only when the three
corners of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_max_power_clamp_ref
Specifies max corner's power clamp voltage. This is used only when the three
corners of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_max_pulldown_ref
Specifies max corner's pull-down voltage. This is used only when the three
corners of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_max_pullup_ref
Specifies max corner's pull-up voltage. This is used only when the three
corners of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_min_gnd_clamp_ref
Specifies min corner's ground clamp voltage. This is used only when the three
corners of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_min_power_clamp_ref
Specifies min corner's power clamp voltage. This is used only when the three
corners of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_min_pulldown_ref
Specifies min corner's pull-down voltage. This is used only when the three
corners of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_min_pullup_ref
Specifies min corner's pull-up voltage. This is used only when the three corners
of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_model_to_acq
internal usage, map model to acq
ibis_notes
This parameter controls ibis notes section which would be written to the ibis
files
ibis_numsteps_voltage
The number of voltage steps to use when capturing the IBIS IV curve data.
ibis_output_differential_nodes
Specify differential output nodes.
ibis_output_node
Specify output node for IO buffer.
ibis_power_clamp_supply
Specifies an alternate supply name to be used as the reference voltage during
power clamp measurements.
ibis_rail_extrapolate_linear
This parameter is used when the parameters ibis_below_rail_multiplier and
ibis_above_rail_multiplier take on values other than 1. Since IBIS needs data in
the entire range of [-VDD, 2VDD], this parameter gives the option of
extrapolating linearly (set this parameter to 1) or repeating the last point which
is the default option.
pintype 0 Flag()
ibis_typ_gnd_clamp_ref
Specifies typ corner's ground clamp voltage. This is used only when the three
corners of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_typ_power_clamp_ref
Specifies typ corner's power clamp voltage. This is used only when the three
corners of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_typ_pulldown_ref
Specifies typ corner's pull-down voltage. This is used only when the three
corners of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_typ_pullup_ref
Specifies typ corner's pull-up voltage. This is used only when the three corners
of IBIS are characterized separately and needs to be merged. See also
ibis_plan_for_corner_merge.
ibis_vt_v_fixture_differential_output
V_fixture for differential ended cells used in characterizing V-T curves for IBIS
models. The default implemented in the SiliconSmart code is both VDD and
VSS. An important exception to this rule is LVDS (one of them anyway), where
only VREF is used.
ibis_vt_v_fixture_falling_non_differential_output
The voltages used to characterize falling V-T curves for IBIS models. If left
empty, then the values are set to logic_high_name (for example DVDD) and
logic_low_name (for example DVSS).
ibis_vt_v_fixture_rising_non_differential_output
The voltages used to characterize rising V-T curves for IBIS models. If left
empty, then the values are set to logic_high_name (for example DVDD) and
logic_low_name (for example DVSS).
initial_common_mode_voltage
'Common-mode' voltage for a differential pin.
initial_delay
Specifies an initial period at the beginning of each simulation during which
there is no activity for the driving stimulus.
largest_frequency
This parameter specifies the value of the largest frequency that will be used to
find out the intrinsic capacitance for the cell for CCS power measurements. The
default value of this parameter is 1GHz.
input_fall_threshold
Defines an absolute threshold value for the delay measurement trip point (Vth),
used for intrinsic delay and constraint acquisition, as an input signal fall
transition voltage swing.
pintype 0 Float()
input_rise_threshold
Defines an absolute threshold value for the delay measurement trip point (Vth),
used for intrinsic delay and constraint acquisition, as an input signal rise
transition voltage swing.
pintype 0 Float()
largest_height
Controls the upper bound on the glitch heights over which noise immunity and
noise propagation characterization is performed. The value of this parameter
needs to be larger that the switching threshold of the cell.
largest_load
Specifies the largest load in a range of values generated by SiliconSmart when
explicit_points_load is not specified or is an empty list. See also
numsteps_load and smallest_load.
largest_rload
Specifies the largest load for the second output in a range of values generated
by SiliconSmart when explicit_points_rload is not specified or is an empty list.
See also numsteps_rload and smallest_rload.
largest_slew
Specifies the largest slew in a range of values generated by SiliconSmart when
explicit_points_slew is not specified or is an empty list. See also
numsteps_slew and smallest_slew.
largest_timeshift
Specifies the latest data glitch arrival time before (or after for negative) the
clock edge. The smaller the value the later the glitch.
largest_voltage
Specifies the maximum voltage used when characterizing the steady state IV
curves for a cell. This value must be above the largest supply rail in order to
properly characterize the IV curves.
largest_width
Specifies the maximum width of the injected glitches used for characterizing
noise immunity and noise propagation behavior.
liberty_bundle_as_pins
Specifies a subset or range of pins for use with Liberty modeling only. The
model produced need not depend on what is characterized. For instance, an
arc delay may be computed for all bits of a bundle, but the model may only have
a single number for the bundle or for a couple of sub-bundles of the bundle (0:7
8:15).
Consider the following example:
set_config_opt -pin D liberty_bundle_as_pins { 0 1 2 3}
Here, the measurement for the 4-bit bundle D must be modeled at pin-level for
each of its bits 0, 1, 2, and 3. If unspecified, the measurements are modeled
only at bundle level D.
See Also
■
set_pins_to_bundle_map
liberty_bus_as_pins
This pintype parameter specifies a subset or range of pins intended to be used
for liberty modeling only. The concept is that the model produced does not have
to strongly depend on what is characterized.
For instance, a delay for an arc may be computed for all the bits of a bus, but
the model may only have a single number for the bus or for a couple of sub-
buses of the bus(0:7 8:15) for instance.
liberty_internal_pin
Internal pins are not normally included in the Liberty model. Set this true for
pins which should be.
pintype 0 Flag()
liberty_pin_groups
This pintype parameter specifies the list of bits that will be used for creating pin-
groups within the bus-group for liberty modeling in create_new_model flow.
liberty_tmax_input
This parameter can be set to a floating point value and specifies a value for the
max_transition attribute on input pins. If unset, the value of the pin type
parameter largest_slew is used.
liberty_tmax_output
This parameter can be set to a floating point value and it specifies a value for
the max_transition attribute on output pins. If unset, the value of the pin type
parameter max_tout is used.
limit_noise_pulse_range
Indicates if the noise pulses should be limited to rail-to-rail values or if
undershoots/overshoots should be considered.
pintype 0 Flag()
logic_high_level
Rail level for pwl.
logic_high_name
Specifies a symbolic supply name that indicates the ceiling or floor of the
voltage swing on pins that are associated with this pin type. Differential output
pins that have partial swings must have a valid supply name for this parameter
(valid implies that the supply is defined inside an operating condition block).
SiliconSmart dynamically determines the actual value of the high voltage swing
on differential output ports, but it still requires the parameter to be specified.
logic_high_param_name
Alias of logic_high_name
logic_high_threshold
Defines the thresholds for a logic-low and logic-high voltage, respectively, for
pins associated with this pin type. These are collectively used for output
transition time determination if the pin is an output and for determining the
transition times of the driving signal if the pin is an input.
Each value must be between 0 and 1.0, indicating a fraction of the full signal
swing. These values are a fraction of rail-to-rail voltage for digital pins. For
differential output ports, the values represent a fraction of the total swing
between the steady state values of a low and high where the swing is
automatically determined.
logic_high_threshold_fall
This parameter specifies the threshold for logic-high voltage for the falling
waveform.
logic_high_threshold_rise
This parameter specifies the threshold for logic-high voltage for the rising
waveform.
logic_low_level
Rail level for pwl.
logic_low_name
Specifies a symbolic supply name that indicates the ceiling or floor of the
voltage swing on pins that are associated with this pin type. Differential output
pins that have partial swings must have a valid supply name for this parameter
(valid implies that the supply is defined inside an operating condition block).
SiliconSmart dynamically determines the actual value of the high voltage swing
on differential output ports, but it still requires the parameter to be specified.
logic_low_param_name
Alias of logic_low_name
logic_low_threshold
Defines the thresholds for a logic-low and logic-high voltage, respectively, for
pins associated with this pin type. These are collectively used for output
transition time determination if the pin is an output and for determining the
transition times of the driving signal if the pin is an input.
Each value must be between 0 and 1.0, indicating a fraction of the full signal
swing. These values are a fraction of rail-to-rail voltage for digital pins. For
differential output ports, the values represent a fraction of the total swing
between the steady state values of a low and high where the swing is
automatically determined.
logic_low_threshold_fall
This parameter specifies the threshold for logic-low voltage for the falling
waveform.
logic_low_threshold_rise
This parameter specifies the threshold for logic-low voltage for the rising
waveform.
max_asynch_recovery
max_constraint for asynchronous recovery.
max_asynch_removal
max_constraint for asynchronous removal.
max_cmpw
Maximum pulse width to test for active MPW search.
max_constraint
The smallest (most optimistic) constraint value.
pintype - Float()
max_constraint_multiplier*tot
al_slew
max_constraint_multiplier
The smallest (most optimistic) constraint value.
max_hold
max_constraint for hold
max_hold_hbm
max_constraint for hold hbm
max_min_period
Maximum period to test for min period search.
max_ncmpw
Maximum pulse width to test for inactive MPW search.
max_recover_hbm
max_constraint for recovery hbm.
max_recovery
max_constraint for recovery.
max_removal
max_constraint for removal.
max_removal_hbm
max_constraint for removal.
max_setup
max_constraint for setup.
max_setup_hbm
max_constraint for setup hbm.
max_tout
The maximum output transition time that is expected on the output pin.
max_width_factor
Specifies the factor to calculate the default value for largest_width (equals
max_width_factor*total_slew)
maxload_tout_resolution
Specifies the maximum difference between the desired output transition time
(max_tout) and the actual output transition time found by max load autorange
simulations. The value is in seconds.
members
Modeling parameter controlling bundle group attributes.
min_adjust
min_asynch_recovery
min_constraint for asynchronous recovery.
min_asynch_removal
min_constraint for asynchronous removal
min_cmpw
Minimum pulse width to test for active MPW search.
min_constraint
The largest (most pessimistic) constraint value.
min_constraint_multiplier
Default min_constraint = min_constraint_multiplier*total_slew
min_hold
min_constraint for hold.
min_hold_hbm
min_constraint for hold hbm.
min_min_period
Minimum period to test for min period search.
min_ncmpw
Minimum pulse width to test for inactive MPW search.
min_recover_hbm
min_constraint for recovery hbm.
min_recovery
min_constraint for recovery.
min_removal
min_constraint for removal
min_removal_hbm
min_constraint for removal hbm
min_setup
min_constraint for setup
min_setup_hbm
min_constraint for setup hbm
mpw_min_adjust
nochange_clock
identifies a pin as a clock for the purpose of no-change measurements.
pintype 0 Flag()
node_activity_tolerance
Maximum voltage swing which can still be counted as an inactive node. Used in
active/inactive node detection.
node_stability_pruning_threshold
This threshold margin expressed as a percentage of supply is the voltage
range within which the nodes will be considered as an inactive node. Any node
whose final voltage value if does not fall within this voltage range will be
marged as switching even if the node had been stable (inactive) throughout the
period of the simulation. This is required to make sure that we do not prune
analog nodes.
noise_immunity_current
Current threshold to use when measuring noise immunity on three-state enable
or disable arcs. Expressed as a fraction of the min/max current.
noise_immunity_from_prop
If true, use noise propagation to determinine immunity for sequential data
inputs. Otherwise use search.
pintype 0 Flag()
noise_immunity_tolerance
Specifies the tolerance to which noise immunity measurements are optimized.
This is the maximum voltage difference between the largest safe input glitch
height and the actual largest safe input glitch height.
num_ccs_samples
Specifies the number of points generated in the CCS timing current vectors.
Decreasing the number of points reduces the size of the resulting model but at
the expense of a possible loss in accuracy.
pintype 12 Integer(8,50)
numsteps_frequency
This parameter specifies the number of frequency values to use between the
smallest frequency and largest frequency to calculate the intrinsic capacitance
value for the cell for CCS power measurements. The default value of this
parameter is 5 which means that 5 frequency values will be swept between the
smallest frequency and largest frequency to find out the intrinsic capacitance.
numsteps_height
Specifies the number of height points to use when characterizing the noise
propagation data for an input pin.
pintype 8 Integer(1,50)
numsteps_load
Specifies the number of load points for a pin at which measurements will be
acquired if explicit_points_load is not specified or is an empty list.
numsteps_load, smallest_load and largest_load are used to create a list of
loads for pins of this type.
numsteps_rload
Specifies the number of load points for a second output pin at which
measurements will be acquired if explicit_points_rload is not specified or is an
pintype 5 Integer(1,50)
numsteps_slew
Specifies the number of slew points for a pin at which measurements will be
acquired if explicit_points_slew is not specified or is an empty list.
numsteps_slew, smallest_slew and largest_slew are used to create a list of
slew values for pins of this type.
numsteps_timeshift
Specifies the number of timeshift points to use between smallest_timeshift and
largest_timeshift when characterizing noise immunity on sequential data pins.
The default for this parameter is 1 because it is typically autoranged.
pintype 1 Integer(1,None)
numsteps_voltage
Specifies the number of steps simulated between smallest_voltage and
largest_voltage.
pintype 25 Integer(1,None)
numsteps_width
Specifies the number of steps taken between smallest_width and largest_width
.
pintype 5 Integer()
opt_load_high
Used for optimization to find out upper range(maximum capacitance) for active
driver characterization. The maximum capacitance used for active driver
characterization is the capacitance value which produces \"largest_slew\".
Value of this parameter should produce a slew greater than \"largest_slew\".
opt_load_low
Used for active driver characterization. Lower range of the table when active
driver is characterized. This value should be low enough to produce the fastest
slew required during characterization.
partial_swing
If set for a pin, thresholds will be with respect to the actual voltage swing
measured on the pin. This is used for pins where the voltage does not swing
from rail to rail.
pintype 0 Flag()
output_fall_threshold
Defines an absolute threshold value for the delay measurement trip point (Vth),
used for intrinsic delay and constraint acquisition, as an output signal fall
transition voltage swing.
pintype 0 Float()
output_rise_threshold
Defines an absolute threshold value for the delay measurement trip point (Vth),
used for intrinsic delay and constraint acquisition, as an output signal rise
transition voltage swing.
pintype 0 Float()
partial_swing_minimum
The minimum partial swing which will be accepted as a transition for this pin.
passive_glitch_check
If true, add checks for unexpected transitions on non-switching outputs of
energy measurements.
pintype 0 Flag()
peak_ratio
Specifies the peak_ratio for noise immunity measurements.
phased_inputs
Provides time shifting for a list of inputs expressed as a percentage of the clock
cycle time. This is typically used to support multi-phase clocking, but will phase
shift the waveform for any input.
The below example will define a four-phase clock with each clock signal offset
by 1/4 cycle:
set phased_inputs { clk0 0 clk1 0.25 clk2 0.5 clk3 0.75 }
pin_category
Force a pin to be considered as a clock, a data, a sync control. Used when not
enough information is available for this to be inferred from pin behavior.
pintype
The name of the pintype associated with this pin.
pocv_input_slew
Input slew to be used for POCV characterization.
port
Port name associated with a pin. Redundant. Is it used?
power_period
Specifies the period for which the current is tracked on each supply specified in
the power_meas_supplies parameter. The specified time duration must be at
least twice the largest transition time on any CUT pin. This parameter defaults
to 4.4 times the largest value of the total_slew parameter in all defined pintype
blocks.
prop_delay_current
Defines the threshold (between 0 and 1.0) that is used for three-state disable
measurements. Specifically, it indicates the fraction of the maximum current
(during the output transition) at which a three-state disable is recognized.
prop_delay_inp_level
See prop_delay_level parameter description.
prop_delay_inp_level_fall
Defines the threshold (between 0 and 1.0) that is used for three-state disable
measurements. Specifically, it indicates the fraction of the maximum current
(during the output transition) at which a three-state disable is recognized.
prop_delay_inp_level_rise
See prop_delay_level parameter description.
prop_delay_level
Defines a global value for the delay measurement trip point (Vth), used for
intrinsic delay and constraint acquisition, as a fraction of signal transition
voltage swing. For example, the default value of 0.5 indicates 50% of the
transition. This parameter is used in a pintype command.
The value of this parameter and those of its more specific override parameters
represents a fraction and must be in the range of logic_low_threshold to
logic_high_threshold. This value is used in the following general equation to
determine trigger and target values for circuit simulator measurement
statements: voltage = (logic_high_name - logic_low_name) * prop_delay_level
+ logic_low_name
The value of this parameter is assigned for all four trip conditions (input/output,
rise/fall) unless overridden using one or more of the prop_delay_*_level_*
parameters.
SiliconSmart requires some combination of the prop_delay_*_level_*
parameters that defines all four trip conditions. More specific
prop_delay_out_level
See prop_delay_level parameter description.
prop_delay_out_level_fall
See prop_delay_level parameter description.
prop_delay_out_level_rise
See prop_delay_level parameter description.
rc_filter_capacitor
This parameter specifies the size of the capacitor used to filter injected glitches.
In conjunction with rc_filter_resistor, it forms a low-pass RC filter through which
injected glitches are passed.
rc_filter_resistor
This parameter specifies the size of the resistor used to filter injected glitches.
In conjunction with rc_filter_capacitor, it forms a low-pass RC filter through
which injected glitches are passed.
scaled_points_frequency
Set frequencys at intervals between smallest_frequency and
largest_frequency.
scaled_points_height
Set heights at intervals between smallest_height and largest_height.
scaled_points_load
Set loads at intervals between smallest_load and largest_load (or autoranged).
scaled_points_rload
Set rloads at intervals between smallest_rload and largest_rload.
scaled_points_slew
Set slews at intervals between smallest_slew and largest_slew.
scaled_points_timeshift
Set timeshifts at intervals between smallest_timeshift and largest_timeshift.
scaled_points_voltage
Set voltages at intervals between smallest_voltage and largest_voltage.
scaled_points_width
Set widths at intervals between smallest_width and largest_width.
si_driver
side_pin_driver
When driver_mode is set to active-direct for the transitioning pins, the
side_pin_driver parameter can be used to specify the driver that should be
used for the side pins, as shown in the example below. The default value of this
parameter is "", which means no driver is connected to side pins and the side
pins are connected directly to ideal voltage sources.
Side pin drivers for different arcs can be defined as below:
Example 468
set_config_opt -cell NAND2_X1A_A9TR50 -type delay side_pin_driver
BUF_1
set_config_opt -cell NAND2_X1A_A9TR50 -type energy
side_pin_driver BUF_1
In the above example, the side pin driver BUF_2 is used for delay acquisitions
and the side pin driver BUF_1 is used for energy arcs.
To use this feature, it is important to import all drivers that are to be used for
transitioning, as well as side pins:
import_driver -netlist [pwd]/netlists/BUF_1.cir
-input_pin A -output_pin Y BUF_1
import_driver -netlist [pwd]/netlists/BUF_2.cir
-input_pin A -output_pin Y BUF_2
skip_constraint_outputs
If this parameter is set, for simulator bisection method, constraint checks will be
skipped for primary outputs and it will be performed only for internal nodes
specified through the monitor_internal_nodes parameter
param 0 0, 1
slew_based_margin
Defines the the value to be added and subtracted from the parameter
'prop_delay_level' to determine the trip points for delay measurement in case of
path based constraint.
smallest_frequency
This parameter specifies the value of the smallest frequency that will be used to
find out the intrinsic capacitance for the cell for CCS power measurements. The
default value of this parameter is 100MHz.
smallest_height
Controls the lower bound on the glitch heights over which noise immunity and
noise propagation characterization is performed. This value should be smaller
than the switching threshold of the cell.
smallest_load
Specifies the smallest load in a range of values generated by SiliconSmart
when explicit_points_load is not specified or is an empty list. See also
numsteps_load and largest_load.
smallest_rload
Specifies the smallest load for the second output in a range of values
generated by SiliconSmart when explicit_points_rload is not specified or is an
empty list. See also numsteps_rload and largest_rload.
smallest_slew
Specifies the smallest slew in a range of values generated by SiliconSmart
when explicit_points_slew is not specified or is an empty list. See also
numsteps_slew and largest_slew.
smallest_timeshift
Specifies the earliest data glitch arrival time before before the clock edge. The
larger the value the earlier the glitch.
smallest_voltage
Specifies the minimum voltage used when characterizing the steady state IV
curves for a cell. This value must be below the lowest supply rail (typically
ground) to properly characterizez the IV curves.
smallest_width
Specifies the width of the narrowest injected glitch used for characterizing
noise immunity and noise propagation behavior. This value must be greater
than 0.
smc_constraint_style
Constraint CK-Q degradation mode for a specific Q.
smc_degrade
If smc_constraint_style is relative-degradation, slew-degradation, or relative-
slew-degradation, this parameter gives the relative increase in propagation
delay that indicates a constraint failure.
smc_degrade_absolute
If smc_constraint_style is relative-degradation, slew-degradation, or relative-
slew-degradation, this parameter gives the absolute increase (in seconds) in
propagation delay that indicates a constraint failure.
smc_degrade_check
If smc_constraint_style is relative-degradation, slew-degradation, pushout-
degradation, or relative-slew-degradation, this parameter specifies in which
direction the constraint failure check will be done.
smc_degrade_maximum
Maximum increase (in seconds) of the clock-to-output delay before declaring
failure for constraint. Used for relative-degradation. Ignored unless non-zero.
Not public yet.
smc_degrade_pushout
if smc_constraint_style='pushout-degradation' and smc_degrade_pushout>0
then the constraint will be reduced past the minimum until the
constraint+output_delay increases/decreases by the specified amount (as
defined by smc_degrade_check.
smc_max_degrade_absolute
If smc_constraint_style is relative-degradation or relative-slew-
degradation, this parameter gives the maximum absolute increase (in seconds)
in propagation delay that indicates a constraint failure. This parameter is
supported only for simulator bisection method.
smc_slew_degrade
If smc_constraint_style is relative-slew-degradation or slew-degradation,
this parameter gives the relative increase in slew that indicates a constraint
failure.
smc_slew_degrade_absolute
If smc_constraint_style is relative-slew-degradation, slew-degradation, or
relative-slew-degradation, this parameter gives the absolute increase (in
seconds) in slew that indicates a constraint failure.
soi_transition_mode
Indicates whether this is an SOI measurement and if so whether it is first switch
or second switch.
stable_time
Controls the waveform sampling period after the last input transition for
measurements that require sampled output waveforms. This includes
differential pins, outputs with partial_swing enabled, and ECSM
measurements. The default value is 5.0 times the largest value of total_slew
in each of the defined pin types.
subtract_leakage
Controls whether leakage current though a pin is accounted for in pin
capacitance and Z-disable measurements. When set to 0, leakage current is
assumed to be negligible. When set to 1, any steady-state leakage current is
subtracted from the measurements.
pintype 0 Flag()
sweep_method_load
Specifies the sweep method for auto load indexing.
sweep_method_slew
Specifies the sweep method for auto slew indexing.
switchpoint_default_slew
Defines the duration of the voltage ramp used in switchpoint simulations.
target_bits
This optional attribute specifies a subset of the pins to be used in delay/power
measurements. This attribute recognizes the fact that for a wide bus of say 64
bits, it is not necessary to probe for measurements on all the bits; it is sufficient
to examine only a select few of those 64 bits to obtain accurate results.
Each target_bit is specified such that it is a non-negative integer between 0 and
(bus_width - 1). If target_bits is not explicitly specified, by default, all the bits will
in the range [ 0, (bus_width - 1) ] will be considered for characterization. This
parameter is used in conjunction with the bus_width parameter and therefore
tie_cell_load
Enable the max_capacitance determination through maximum load
autoranging. Use this parameter to calculate maximum capacitance across all
of the operating conditions and then choose the lowest value and use it for all
operating conditions.
total_slew_multiplier
Provides a scaling factor for the total_slew parameter. The default of 1.0
assumes reasonably linear transitions rail to rail. For cells that demonstrate
highly nonlinear tails on the transitions, this parameter can be increased to
compensate.
trailing_delay
Specifies an additional period after the last driving transition. This should be set
to a value long enough to ensure that the last output transition successfully
completes after the driving transition. The default value is 8.8 times the largest
value of total_slew in each of the defined pin types.
use_floating_hiz_output
If pin is an output in hi-Z state, let it float instead of assigning dontcare_bias.
pintype 0 Flag()
verilog_attach_edges
Used to specify if the Verilog model should attach posedge/negedge to arcs
originating from a pin. The addition of edges is relevant mainly for sequential
delay arcs from preset/clear pins.
pintype 0 Flag()
voltage_resolution
Minimum voltage tolerance over a analog voltage range.
voltage_resolution_threshold
Minimum voltage tolerance over a analog voltage range.
validation Parameters
The following parameter are available in validation block:
■ absolute_tolerance
■
capacitance_absolute_tolerance
■
capacitance_product_tolerance
■ capacitance_relative_tolerance
■
ccs_absolute_tolerance
■
ccs_noise_absolute_tolerance
■ ccs_noise_product_tolerance
■
ccs_noise_relative_tolerance
■
ccs_product_tolerance
■ ccs_relative_tolerance
■
ccsn_current_absolute_tolerance
■
ccsn_current_product_tolerance
■ ccsn_current_relative_tolerance
■
ccsn_height_absolute_tolerance
■
ccsn_height_product_tolerance
■ ccsn_height_relative_tolerance
■
ccsn_output_voltage_absolute_tolerance
■ ccsn_output_voltage_product_tolerance
■
ccsn_output_voltage_relative_tolerance
■
ccsn_width_absolute_tolerance
■
ccsn_width_product_tolerance
■
ccsn_width_relative_tolerance
■
compare_library_interpolation
■
compare_library_top_failures
■
data_range_max
■
data_range_min
■
delay_absolute_tolerance
■
delay_product_tolerance
■
delay_relative_tolerance
■
delay_sensitivity_absolute_tolerance
■
delay_sensitivity_product_tolerance
■
delay_sensitivity_relative_tolerance
■
delay_variance_absolute_tolerance
■
delay_variance_product_tolerance
■
delay_variance_relative_tolerance
■
ecsm_absolute_tolerance
■
ecsm_product_tolerance
■
ecsm_relative_tolerance
■
enable_total_power_comparison
■
energy_absolute_tolerance
■
energy_product_tolerance
■ energy_relative_tolerance
■
gends_config_file
■
generate_sdf_cmd_file
■
hdl_target_simulator
■
hdl_target_simulator_path
■
hold_absolute_tolerance
■
hold_product_tolerance
■
hold_relative_tolerance
■
hyperbolic_noise_absolute_tolerance
■
hyperbolic_noise_product_tolerance
■
hyperbolic_noise_relative_tolerance
■
index_relative_tolerance
■
input_capacitance_absolute_tolerance
■
input_capacitance_product_tolerance
■
input_capacitance_relative_tolerance
■
leakage_absolute_tolerance
■
leakage_product_tolerance
■
leakage_relative_tolerance
■
mpw_absolute_tolerance
■
mpw_product_tolerance
■
mpw_relative_tolerance
■
nochange_absolute_tolerance
■
nochange_product_tolerance
■
nochange_relative_tolerance
■
noise_immunity_absolute_tolerance
■
noise_immunity_product_tolerance
■
noise_immunity_relative_tolerance
■
noise_iv_absolute_tolerance
■
noise_iv_product_tolerance
■ noise_iv_relative_tolerance
■
noise_prop_absolute_tolerance
■
noise_prop_product_tolerance
■
noise_prop_relative_tolerance
■
product_tolerance
■
qualification_10nm_mode
■
qualification_data_range
■
qualification_correlation_lc_shell
■
qualification_lc_compensation
■
qualification_lc_shell
■
qualification_lc_suppress
■
recovery_absolute_tolerance
■
recovery_product_tolerance
■
recovery_relative_tolerance
■
relative_tolerance
■
removal_absolute_tolerance
■
removal_product_tolerance
■
removal_relative_tolerance
■
retain_slew_absolute_tolerance
■
retain_slew_product_tolerance
■
retain_slew_relative_tolerance
■
retaining_absolute_tolerance
■
retaining_product_tolerance
■
retaining_relative_tolerance
■
sdf_source_tool
■
sdf_source_tool_cmd
■
setup_absolute_tolerance
■
setup_product_tolerance
■
setup_relative_tolerance
■ slew_absolute_tolerance
■
slew_product_tolerance
■
slew_relative_tolerance
■
slew_sensitivity_absolute_tolerance
■
slew_sensitivity_product_tolerance
■
slew_sensitivity_relative_tolerance
■
slew_variance_absolute_tolerance
■
slew_variance_product_tolerance
■
slew_variance_relative_tolerance
■
zdis_absolute_tolerance
■
zdis_product_tolerance
■
zdis_relative_tolerance
■
zen_absolute_tolerance
■
zen_product_tolerance
■
zen_relative_tolerance
absolute_tolerance
Disabled by default, tolerances are set per data type. See default validation
parameter block in configure.tcl file for type-specific defaults.
capacitance_absolute_tolerance
Absolute tolerance for capacitance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
capacitance_product_tolerance
Product tolerance for capacitance, where product is the relative_tolerance
multiplied by the absolute_tolerance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
capacitance_relative_tolerance
Relative tolerance for capacitance. Valid value range is between 0 and 1.
Reports failures in the report if error is larger than the specified tolerance. Note
that all specified tolerances have to be exceeded for an error to be reported. A
value of zero disables the check for this tolerance.
ccs_absolute_tolerance
Absolute tolerance for ccs. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
ccs_noise_absolute_tolerance
Absolute tolerance for ccs_noise. Reports failures in the report if error is larger
than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
ccs_noise_product_tolerance
Product tolerance for delay, where product is the relative_tolerance multiplied
by the absolute_tolerance. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
ccs_noise_relative_tolerance
Relative tolerance for ccs_noise. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
ccs_product_tolerance
Product tolerance for ccs, where product is the relative_tolerance multiplied by
the absolute_tolerance. Reports failures in the report if error is larger than the
specified tolerance. Note that all specified tolerances have to be exceeded for
an error to be reported. A value of zero disables the check for this tolerance.
ccs_relative_tolerance
Relative tolerance for ccs. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
ccsn_current_absolute_tolerance
Absolute tolerance for dc_current table comparison. Reports failures in the
report if error is larger than the specified tolerance. Note that all specified
tolerances have to be exceeded for an error to be reported. A value of zero
disables the check for this tolerance.
ccsn_current_product_tolerance
Product tolerance for dc_current table comparison. Here product is the
relative_tolerance multiplied by the absolute_tolerance. Reports failures in the
report if error is larger than the specified tolerance. Note that all specified
ccsn_current_relative_tolerance
Relative tolerance for dc_current table comparison. Valid value range is
between 0 and 1. Reports failures in the report if error is larger than the
specified tolerance. Note that all specified tolerances have to be exceeded for
an error to be reported. A value of zero disables the check for this tolerance.
ccsn_height_absolute_tolerance
Absolute tolerance for ccs noise hieght comparison in propogated_noise_high/
low groups. Reports failures in the report if error is larger than the specified
tolerance. Note that all specified tolerances have to be exceeded for an error to
be reported. A value of zero disables the check for this tolerance.
ccsn_height_product_tolerance
Product tolerance for ccs noise hieght comparison in propogated_noise_high/
low groups. Here product is the relative_tolerance multiplied by the
absolute_tolerance. Reports failures in the report if error is larger than the
specified tolerance. Note that all specified tolerances have to be exceeded for
an error to be reported. A value of zero disables the check for this tolerance.
ccsn_height_relative_tolerance
Relative tolerance for ccs noise hieght comparison in propogated_noise_high/
low groups. Valid value range is between 0 and 1. Reports failures in the report
if error is larger than the specified tolerance. Note that all specified tolerances
have to be exceeded for an error to be reported. A value of zero disables the
check for this tolerance.
ccsn_output_voltage_absolute_tolerance
Absolute tolerance for comparing time values in output_voltage vectors.
Reports failures in the report if error is larger than the specified tolerance. Note
that all specified tolerances have to be exceeded for an error to be reported. A
value of zero disables the check for this tolerance.
ccsn_output_voltage_product_tolerance
Product tolerance for comparing time values in output_voltage vectors. Here
product is the relative_tolerance multiplied by the absolute_tolerance. Reports
failures in the report if error is larger than the specified tolerance. Note that all
ccsn_output_voltage_relative_tolerance
Relative tolerance for comparing time values in output_voltage vectors. Valid
value range is between 0 and 1. Reports failures in the report if error is larger
than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
ccsn_width_absolute_tolerance
Absolute tolerance for ccs noise width comparison in propogated_noise_high/
low groups for ccs_noise. Reports failures in the report if error is larger than the
specified tolerance. Note that all specified tolerances have to be exceeded for
an error to be reported. A value of zero disables the check for this tolerance.
ccsn_width_product_tolerance
Product tolerance for ccs noise width comparison in propogated_noise_high/
low groups. Here product is the relative_tolerance multiplied by the
absolute_tolerance. Reports failures in the report if error is larger than the
specified tolerance. Note that all specified tolerances have to be exceeded for
an error to be reported. A value of zero disables the check for this tolerance.
ccsn_width_relative_tolerance
Relative tolerance for ccs noise width comparison in propogated_noise_high/
low groups. Valid value range is between 0 and 1. Reports failures in the report
if error is larger than the specified tolerance. Note that all specified tolerances
have to be exceeded for an error to be reported. A value of zero disables the
check for this tolerance.
compare_library_interpolation
Specifies the interpolation mode to be used when comparing 1-D and 2-D table
values between 2 libraries. The different modes are:
■
0: No interpolation. Table indices must be absolutely matched within
numerical precision for values to be compared.
■
1: Linear interpolation for tables with like dimensions and same number of
indices per dimension.
■ 2: Linear interpolation for tables where possible. Tables must be of like
dimensions, but may have different number of indices per dimension.
■
3: Same as 2, but no extrapolation is performed. If the test library index value
lies outside the range of the reference value, it is skipped.
For 3-D tables, the index values must match for comparison of the table values.
validation 2 0, 1, 2, 3
compare_library_top_failures
Specifies the top number of failures to summarize in the top_failures.log output
from compare_library.
validation 0 Integer
data_range_max
data_range_max.
validation 0 Float()
data_range_min
data_range_min.
validation 0 Float()
delay_absolute_tolerance
Absolute tolerance for delay. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
delay_product_tolerance
Product tolerance for delay, where product is the relative_tolerance multiplied
by the absolute_tolerance. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
delay_relative_tolerance
Relative tolerance for delay. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
delay_sensitivity_absolute_tolerance
Absolute tolerance for delay sensitivity. A value of zero disables the check for
this tolerance.
delay_sensitivity_product_tolerance
Product tolerance for delay sensitivity. A value of zero disables the check for
this tolerance.
delay_sensitivity_relative_tolerance
Relative tolerance for delay sensitivity. Valid value range is between 0 and 1. A
value of zero disables the check for this tolerance.
delay_variance_absolute_tolerance
Absolute tolerance for delay variance. A value of zero disables the check for
this tolerance.
delay_variance_product_tolerance
Product tolerance for delay variance. A value of zero disables the check for this
tolerance.
delay_variance_relative_tolerance
Relative tolerance for delay variance. Valid value range is between 0 and 1. A
value of zero disables the check for this tolerance.
ecsm_absolute_tolerance
Absolute tolerance for ecsm. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
ecsm_product_tolerance
Product tolerance for ecsm, where product is the relative_tolerance multiplied
by the absolute_tolerance. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
ecsm_relative_tolerance
Relative tolerance for ecsm. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
enable_total_power_comparison
To enable total power checks while performing comparison between a pair of
internal_power groups. When this parameter is set to true, the CV*2 term will
be added to each entry in the internal_power tables.
validation 0 Flag()
energy_absolute_tolerance
Absolute tolerance for energy. Reports failures in the report if error is larger
than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
validation 5 Float()
energy_product_tolerance
Product tolerance for energy, where product is the relative_tolerance multiplied
by the absolute_tolerance. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
energy_relative_tolerance
Relative tolerance for energy. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
gends_config_file
This specifies the path to the gends_config_file file. It defaults to charpt/reports/
gends_config.tcl.
generate_sdf_cmd_file
This specifies the path to the file which generates the SDF. It contains the file
tags for substitution. It defaults to [get_install_path]/etc/validation/validate_hdl/
hdl_target_simulator
Specifies the target simulator for HDL simulation when performing back-
annotation. Supported simulators include verilog-XL, NC-Verilog, VCS, and
Modelsim. Defaults to 'verilogXL'.
hdl_target_simulator_path
Path to the Verilog simulator executable. Defaults to 'vcs' to match VCS' default
for hdl_target_simulator.
hold_absolute_tolerance
Absolute tolerance for hold. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
hold_product_tolerance
Product tolerance for hold, where product is the relative_tolerance multiplied by
the absolute_tolerance. Reports failures in the report if error is larger than the
specified tolerance. Note that all specified tolerances have to be exceeded for
an error to be reported. A value of zero disables the check for this tolerance.
hold_relative_tolerance
Relative tolerance for hold. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
hyperbolic_noise_absolute_tolerance
Absolute tolerance for hyperbolic_noise attributes(area_coeffcient,
height_coefficient, width_coefficient). Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
hyperbolic_noise_product_tolerance
Product tolerance for hyperbolic_noise attributes(area_coeffcient,
height_coefficient, width_coefficient) , where product is the relative_tolerance
multiplied by the absolute_tolerance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
hyperbolic_noise_relative_tolerance
Relative tolerance for hyperbolic_noise attributes(area_coeffcient,
height_coefficient, width_coefficient). Valid value range is between 0 and 1.
Reports failures in the report if error is larger than the specified tolerance. Note
that all specified tolerances have to be exceeded for an error to be reported. A
value of zero disables the check for this tolerance.
index_relative_tolerance
Tolerance used in comparing index values with compare_library. This is to
avoid very close indices being compared and included in the report. Valid value
range is between 0 and 1. Default is 1%.
input_capacitance_absolute_tolerance
Alias of capacitance_absolute_tolerance.
input_capacitance_product_tolerance
Alias of capacitance_product_tolerance.
input_capacitance_relative_tolerance
Alias of capacitance_relative_tolerance.
leakage_absolute_tolerance
Absolute tolerance for leakage. Reports failures in the report if error is larger
than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
validation 5 Float()
leakage_product_tolerance
Product tolerance for leakage, where product is the relative_tolerance
multiplied by the absolute_tolerance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
leakage_relative_tolerance
Relative tolerance for leakage. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
mpw_absolute_tolerance
Absolute tolerance for mpw. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
mpw_product_tolerance
Product tolerance for mpw, where product is the relative_tolerance multiplied by
the absolute_tolerance. Reports failures in the report if error is larger than the
specified tolerance. Note that all specified tolerances have to be exceeded for
an error to be reported. A value of zero disables the check for this tolerance.
mpw_relative_tolerance
Relative tolerance for mpw. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
nochange_absolute_tolerance
Absolute tolerance for nochange. Reports failures in the report if error is larger
than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
nochange_product_tolerance
Product tolerance for nochange, where product is the relative_tolerance
multiplied by the absolute_tolerance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
nochange_relative_tolerance
Relative tolerance for nochange. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
noise_immunity_absolute_tolerance
Absolute tolerance for noise_immunity. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
noise_immunity_product_tolerance
Product tolerance for noise_immunity, where product is the relative_tolerance
multiplied by the absolute_tolerance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
noise_immunity_relative_tolerance
Relative tolerance for noise_immunity. Valid value range is between 0 and 1.
Reports failures in the report if error is larger than the specified tolerance. Note
that all specified tolerances have to be exceeded for an error to be reported. A
value of zero disables the check for this tolerance.
noise_iv_absolute_tolerance
Absolute tolerance for noise_iv. Reports failures in the report if error is larger
than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
noise_iv_product_tolerance
Product tolerance for noise_iv, where product is the relative_tolerance
multiplied by the absolute_tolerance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
noise_iv_relative_tolerance
Relative tolerance for noise_iv. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
noise_prop_absolute_tolerance
Absolute tolerance for noise_prop. Reports failures in the report if error is larger
than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
noise_prop_product_tolerance
Product tolerance for noise_prop, where product is the relative_tolerance
multiplied by the absolute_tolerance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
noise_prop_relative_tolerance
Relative tolerance for noise_prop. Valid value range is between 0 and 1.
Reports failures in the report if error is larger than the specified tolerance. Note
that all specified tolerances have to be exceeded for an error to be reported. A
value of zero disables the check for this tolerance.
product_tolerance
Disabled by default, tolerances are set per data type. See default validation
parameter block in configure.tcl file for type-specific defaults.
validation 0 Float()
qualification_10nm_mode
Enables advanced node (10nm) checks in Library Compiler. This turns on
advanced screening checks when compiling the library. Please check version
compatibility before turning on this feature.
validation 0 1
qualification_data_range
Specifies ranges for the data range checks of delay. The value is a simple list of
each data table type name and minimum and maximum values. Table types
supported are delay, transition, constraint, energy, current, capacitance,
dc_current, ccsn, and pg_current.
qualification_correlation_lc_shell
Specifies full path of Library Compiler executable for correlation tasks only.
Applies only to 2014.09 or earlier releases of the common shell.
qualification_lc_compensation
Turns on compensation in LC shell when performing consistency checks.
Please refer to LC documentation for more information on the compensation
feature.
validation 1 0, 1
qualification_lc_shell
Specify full path of Library Compiler exectuable for qualification tasks.
qualification_lc_suppress
Specifies a list of valid Library Compiler warnings to be suppressed during
compilation.
recovery_absolute_tolerance
Absolute tolerance for recovery. Reports failures in the report if error is larger
than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
recovery_product_tolerance
Product tolerance for recovery, where product is the relative_tolerance
multiplied by the absolute_tolerance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
recovery_relative_tolerance
Relative tolerance for recovery. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
relative_tolerance
Disabled by default, tolerances are set per data type. See default validation
parameter block in configure.tcl file for type-specific defaults.
removal_absolute_tolerance
Absolute tolerance for removal. Reports failures in the report if error is larger
than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
removal_product_tolerance
Product tolerance for removal, where product is the relative_tolerance
multiplied by the absolute_tolerance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
removal_relative_tolerance
Relative tolerance for removal. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
retain_slew_absolute_tolerance
Absolute tolerance for retain slew arcs. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
retain_slew_product_tolerance
Product tolerance for retain slew, where product is the relative_tolerance
multiplied by the absolute_tolerance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
retain_slew_relative_tolerance
Relative tolerance for retain slew arcs. Valid value range is between 0 and 1.
Reports failures in the report if error is larger than the specified tolerance. Note
that all specified tolerances have to be exceeded for an error to be reported. A
value of zero disables the check for this tolerance.
retaining_absolute_tolerance
Absolute tolerance for rtaining arcs. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
retaining_product_tolerance
Product tolerance for retaining arcs, where product is the relative_tolerance
multiplied by the absolute_tolerance. Reports failures in the report if error is
larger than the specified tolerance. Note that all specified tolerances have to be
exceeded for an error to be reported. A value of zero disables the check for this
tolerance.
retaining_relative_tolerance
Relative tolerance for retaining arcs. Valid value range is between 0 and 1.
Reports failures in the report if error is larger than the specified tolerance. Note
that all specified tolerances have to be exceeded for an error to be reported. A
value of zero disables the check for this tolerance.
sdf_source_tool
Path to the STA tool executable.
sdf_source_tool_cmd
This parameter specifies the command that is executed to generate an SDF file
from a source STA tool.
setup_absolute_tolerance
Absolute tolerance for setup. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
setup_product_tolerance
Product tolerance for setup, where product is the relative_tolerance multiplied
by the absolute_tolerance. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
setup_relative_tolerance
Relative tolerance for setup. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
slew_absolute_tolerance
Absolute tolerance for slew. Reports failures in the report if error is larger than
the specified tolerance. Note that all specified tolerances have to be exceeded
for an error to be reported. A value of zero disables the check for this tolerance.
slew_product_tolerance
Product tolerance for slew, where product is the relative_tolerance multiplied by
the absolute_tolerance. Reports failures in the report if error is larger than the
specified tolerance. Note that all specified tolerances have to be exceeded for
an error to be reported. A value of zero disables the check for this tolerance.
slew_relative_tolerance
Relative tolerance for slew. Valid value range is between 0 and 1. Reports
failures in the report if error is larger than the specified tolerance. Note that all
specified tolerances have to be exceeded for an error to be reported. A value of
zero disables the check for this tolerance.
slew_sensitivity_absolute_tolerance
Absolute tolerance for slew sensitivity. A value of zero disables the check for
this tolerance.
slew_sensitivity_product_tolerance
Product tolerance for slew sensitivity. A value of zero disables the check for this
tolerance.
slew_sensitivity_relative_tolerance
Relative tolerance for slew sensitivity. Valid value range is between 0 and 1. A
value of zero disables the check for this tolerance.
slew_variance_absolute_tolerance
Absolute tolerance for slew variance. A value of zero disables the check for this
tolerance.
slew_variance_product_tolerance
Product tolerance for slew variance. A value of zero disables the check for this
tolerance.
slew_variance_relative_tolerance
Relative tolerance for slew variance. Valid value range is between 0 and 1. A
value of zero disables the check for this tolerance.
zdis_absolute_tolerance
Absolute tolerance for three-state disable. Reports failures in the report if error
is larger than the specified tolerance. Note that all specified tolerances have to
be exceeded for an error to be reported. A value of zero disables the check for
this tolerance.
zdis_product_tolerance
Product tolerance for three-state disable, where product is the
relative_tolerance multiplied by the absolute_tolerance. Reports failures in the
report if error is larger than the specified tolerance. Note that all specified
zdis_relative_tolerance
Relative tolerance for three-state disable. Valid value range is between 0 and 1.
Reports failures in the report if error is larger than the specified tolerance. Note
that all specified tolerances have to be exceeded for an error to be reported. A
value of zero disables the check for this tolerance.
zen_absolute_tolerance
Absolute tolerance for three-state enable. Reports failures in the report if error
is larger than the specified tolerance. Note that all specified tolerances have to
be exceeded for an error to be reported. A value of zero disables the check for
this tolerance.
zen_product_tolerance
Product tolerance for three-state enable, where product is the
relative_tolerance multiplied by the absolute_tolerance. Reports failures in the
report if error is larger than the specified tolerance. Note that all specified
zen_relative_tolerance
Relative tolerance for three-state enable. Valid value range is between 0 and 1.
Reports failures in the report if error is larger than the specified tolerance. Note
that all specified tolerances have to be exceeded for an error to be reported. A
value of zero disables the check for this tolerance.
transitions before the test are kept to the selected number, regardless of any
necessary state initialization stimulus. An error will be output if separate
initialization is disabled and SOI is selected for any input in a measurement.
Example 469
set_config_opt -pin * soi_transition_mode second
set_config_opt -pin {CK EN} soi_transition_mode first
The merge script examines the contents of each output model and merges
the values into a final model based on the user function requested (usually
a Min or Max function). An example might be:
Example 470
mergeLibraries cells output_model list first_charpt/first.lib
second_charpt/second.lib Max
where:
• cells — the list of cells.
• output_model — name of the output model. It will have the merging
function added to the output name. In the above example, the merging
function is Max. The name of the merged model would then be:
output_model_Max.lib
• list — list of paths to libraries to merge (i.e., first, second, third switch
libraries).
This appendix describes basic Tcl usage to help in understanding the examples
presented throughout this document.
SiliconSmart is driven using commands that are available through Tcl. Tcl
provides a common set of control flow and data handling mechanisms that you
can extend on an application-specific basis to provide a common look and feel
across a wide variety of domains.
For a more detailed description of Tcl and Tk Toolkit, refer to the book "Practical
Programming in Tcl and Tk" by Brent Welch.
The following sections describe Tcl usage:
■
Introduction
■
Using Variables
■ Looping and Conditional Execution
■
Tcl Scripts
Introduction
Variables in Tcl are prefixed by the $ character. Variables can have
subcommands associated with them. A variable can be thought of as a
programmatic object while each associated subcommand can be considered a
method of the object. The terms "object" and "variable" are used
interchangeably in this chapter; likewise for the terms subcommand and
method.
Using Variables
All variables are defined/assigned using the set command, which requires the
name of the variable followed by the variable’s new value. Invoking the set
command without a value returns the current setting of the variable. The #
character on a line by itself precedes a comment while the characters ;# are
used for a comment on the same line with a statement.
The following statements illustrate the use of set:
Example 471
set x 23 ; # set the variable x to 23
set y $x ; # set the variable y to the current value of x
set y; # return the current value of y
Lists in Tcl are delimited by curly braces { and }. The curly braces also
suppress evaluations. Individual elements in a list can be accessed using the
lindex command. Examples of creating and manipulating lists follow:
Example 472
set mylist {1 2 3 4}; #set mylist to a sequence of numbers
set elt1 [ lindex $mylist 0]; #set elt1 to 0-th element of mylist = 1
set another_list {$elt1 3}; #suppresses evaluation of elt1
set correct_list [list $elt1 3]; #‘list’ creates the desired list
{1 3}
Evaluations in Tcl are forced using the square braces [ and ]. Several examples
of evaluations were shown in the previous examples.
Tcl Scripts
SiliconSmart can be invoked in batch mode by providing the name of a Tcl
script as the an argument on the command-line. When done, SiliconSmart will
read the Tcl file and execute each of the commands. This can be used to
automate the process of configuring, characterizing, and modeling a whole
library of cells or a subset thereof. The script at the end of this section is an
example of how to automate this process.
This example makes several assumptions. First, a characterization directory
named smcdata has been created under the current directory and it has been
setup for your cell library. Additionally, one or more cells have been imported
into this characterization directory and the instance control file for each cell has
been configured.
The set of cells to be processed is stored in the variable cell_list. This example
uses the get_cells command to get all available cells, though a subset of
cells could also be specified. This example configures all of the cells and then
characterizes them. Because all of the cells are provided to a single call to the
characterize command they will be processed in parallel.
Once the characterization has completed successfully, each cell is modeled as
a separate Liberty model, one file per operating condition per cell. If all of the
cells model correctly then a full Liberty model containing all of the cells is
generated.
set_location ./smcdata
if { [catch {
configure $cell_list
characterize $cell_list
} err] } {
error "Configuration and characterization failed: $err"
}
# Now run modeling and generate a separate .lib file for each cell at
# each operating condition. This code assumes we have the following
# operating conditions: SLOW_125 and FAST_0 corresponding to the
#worst-case and best-case conditions.
#
# The Liberty file names will be <cell>_<op cond>.lib
set cell_failed 0
if { !$cell_failed } {
model -out full -liberty -operating_condition SLOW_125 \
-library_type worst $cell_list
model -liberty -operating_condition FAST_0 -library_type best \
-out full
}
This appendix describes the SiliconSmart Model Publishing API and provides a
reference for commands and data format.
This API is an optional package that provides additional commands for reading
and modifying Synopsys Liberty libraries. The commands provide complete,
programmatic access to all of the data in the library and an ability to add to or
modify the data before writing out a new Liberty model.
You must have the appropriate license token to use the Model Publishing API.
Contact Synopsys support for more information.
The SiliconSmart Model Publishing API includes a low-level modeling module
that uses advanced data structures designed for today’s larger models that
include current source waveforms, transient current waveforms, and CCS-noise
information.
This command loads all of the publishing commands in the Tcl pub::
namespace. As a shortcut, You can import the commands into the default
namespace with the namespace import command as shown in the following
example:
Example 476
namespace import pub::*
Then, you can access the commands without the pub:: prefix.
You can read in a Liberty model using the pub::read_model command as
follows:
Example 477
pub::read_model -liberty filename
This command loads the Liberty file into an internal database that the
publishing command can access and returns a handle to the root of the library.
A Liberty model is represented as a tree of objects, with the root of the tree
being the library object. Each object has a name, a type, an optional set of
attributes in the form of key-value pairs, and zero or more child objects. For
example, the root of the tree is an object with the same name as the library, a
type of library, and possibly some attributes. The library object also has child
objects that represent each cell in the library, any table templates, and other
data.
To begin with, the following Tcl procedure can be use to recursively display the
contents of any node in a model:
proc dump_model { handle { indent "" } } {
puts "$indent Object [pub::get_obj_name $handle]: \
type=[pub::get_obj_type $handle]"
foreach child [pub::get_obj_list $handle] {
dump_model $child " $indent"
}
}
To use this procedure, enter the following commands, which read in a simple
library and display its contents:
Example 478
set handle [pub::read_model -liberty my_library.lib]
dump_model $handle
Running these commands on a simple, one-cell library yields output that looks
similar to the following:
Example 479
Object TEST: type=library
Object TEST: type=operating_conditions
Object default: type=input_voltage
Object default: type=output_voltage
Object tmg_ntin_oload_5x5: type=lu_table_template
Object pwr_tin_oload_5x5: type=power_lut_template
Object BUFX20: type=cell
Object A: type=pin
Object Y: type=pin
Object internal_power0: type=internal_power
Object pwr_tin_oload_5x5: type=fall_power
Object pwr_tin_oload_5x5: type=rise_power
Object timing0: type=timing
Object tmg_ntin_oload_5x5: type=cell_fall
Object tmg_ntin_oload_5x5: type=cell_rise
Object tmg_ntin_oload_5x5: type=fall_transition
Object tmg_ntin_oload_5x5: type=rise_transition
The hierarchy exactly follows the hierarchy in a Liberty file. Notice that the node
types are the same as the elements names in a Liberty model.
■
get_obj_attr
■
get_obj_level
■
get_obj_list
■
get_obj_match
■
get_obj_name
■
get_obj_owner
■
get_obj_type
■
get_order
■
get_style
■
get_style_by_id
■
read_model
■
remove_model
■
set_obj_attr
■
set_obj_multi_attr
■
set_obj_name
■
set_order
■
set_order_by_id
■
set_style
■
set_style_by_id
■
unset_obj_attr
■
write_model
add_obj
This command adds an object to a model as a child of the specified object.
Each object has a type, a name, and an optional list of attributes. The hierarchy
of objects, the object types, and the legal attributes follow the Liberty
specification. This interface does not attempt to check the validity of the data
and allows user-defined and potentially invalid structures to be created.
Syntax
pub::add_obj objectHandle type name [attr_list]
Returns
This command returns a handle to the new object. This handle can be used
with any of the publishing commands such as pub::get_object_name.
Arguments
attr_list
Tcl list of key-value pairs specifying the name and value of each attribute to
be added to the new object.
name
Name of the object to be created.
objectHandle
Object handle tag that specifies an object in the model. This object will be
the parent of the newly created object.
type
Type of the object to be created.
Examples
The following example adds a cell named INVX1 with pins A and Z to the library
referenced by lib_id:
Example 480
set cell_id [pub::add_obj lib_id cell INVX1]
pub::add_obj $cell_id pin A { direction input }
pub::add_obj $cell_id pin Z { direction output }
copy_obj
This command recursively copies an object to a new location in the model
hierarchy. The object will be added as a child of the target_obj.
Syntax
pub::copy_obj src_obj target_obj [attr_list]
Arguments
attr_list
Tcl list of key-value pairs specifying the name and value of each attribute to
be added to the new object.
src_object
Handle for an object to be copied.
target_obj
Handle of the parent to the newly copied object.
del_obj
This command deletes the specified object from the model hierarchy. The
object is deleted from the model hierarchy. All child objects are deleted as well.
Syntax
pub::del_obj id
Arguments
id
Handle of an object in the model.
get_models
This command returns a list of ids for all the model loaded in memory using the
pub::read_model command.
Syntax
pub::get_models
Returns
A Tcl list of all model ids.
get_obj
This command returns a handle to an object of the given type and name.
Syntax
pub::get_obj parent_id type name
Arguments
name
Name of the requested object.
parent_id
Handle to an object in the model.
type
Type of the requested object.
Examples
The following example finds the cell BUFX1 in the library pointed to by lib_id:
Example 481
pub::get_obj lib_id cell BUFX1
get_obj_attr
This command retrieves the attributes from the specified object. Each object
type allows specific attributes to be associated with it.
Syntax
pub::get_obj_attr objectHandle [[key] [default_value]]
Returns
This command returns a string list of key-value pairs. If key is specified, only
the value for that data field is returned, which can be zero length. If the default
value is specified with key, this value is returned if the object does not contain
the attribute key.
Arguments
default_value
Optional argument that specifies the default return value if the specified
attribute key is not present in the object. This option must be used with the
key option.
key
Optional argument that specifies the handle of the exact attribute key from
which to retrieve the data value.
objectHandle
Object handle tag that specifies the object from which to retrieve the
attributes.
Examples
The following Tcl example retrieves the attributes from the specified cell and
converts the list into an array:
Example 482
array set cellAtt [ pub::get_obj_attr cellId ]
The following Tcl example retrieves a single attribute value from the specified
cell.
Example 483
set cellAtt [ pub::get_obj_attr cellId "area"]
get_obj_level
This command retrieves the level of the specified object from the database
object hierarchy. The root object returns a value of 0.
Syntax
pub::get_obj_level objectHandle
Returns
This command returns the object’s level.
Arguments
objectHandle
Object handle tag that specifies the object from which to retrieve the
attributes.
Examples
The following Tcl example retrieves the level of the object:
Example 484
puts "level : [pub::get_obj_level objId]"
See Also
get_obj_type
get_obj_list
This command retrieves the object handles from the specified object ownership
list. Only the next level of object hierarchy is searched and listed. If the
objectType argument is specified, the list of objectHandles will contain
only that type. If filter arguments keyType and name are present, only the
object ID tags of the type or name or those that have the specified key are
returned. When the value argument is specified with keyType set to key, the
value of the key specified by the name argument is matched.
Syntax
pub::get_obj_list objectHandle keyType name [value
[objectType]]
Returns
This command returns a string list of objectHandles. A zero length list is
returned if the specified object is a leaf object.
Arguments
keyType
Optional key type argument to filter the list returned to contain only objects
of a specific type (name | type | key).
name
Name of the specified key.
objectHandle
Object handle tag which specifies the object to retrieve the list of owned
objects from.
objectType
Name of the Liberty construct to retrieve.
value
Optional value for key type key.
Examples
The following Tcl example retrieves the list of object handles from the specified
cell, loops through the list, and prints the name and type of object.
Example 485
Foreach cellObj [ pub::get_obj_lst cellId ] { puts
"[pub::get_obj_name cellObj] : [pub::get_obj_type cellObj ] }
The following Tcl example retrieves the list of object handles of type pin from a
cell object:
Example 486
set pinObjLst [ pub::get_obj_list cellId type pin]
The following Tcl example retrieves the object handles with name scan_in
from a cell object:
Example 487
set pinObjLst [ pub::get_obj_list cellId name "scan_in"]
See Also
get_obj_attr
get_obj_name
get_obj_type
get_obj_match
Similar to the get_obj_list command, except this command filters by
matching specified type, name, or key-value attribute pairs as the criteria for
matching an object. All of the specified criteria must hold true for the item to
match and be returned by this command.
Syntax
pub::get_obj_match id desc_list
Arguments
type
Specifies the type of the object to match. Note that wild cards are not
allowed for the type.
name
Specifies the name or list of names of the object to match. Any nam in the
list has to match to be selected for the return list.
keyValList
Specifies the object’s attribute key-value pairs that must match. All key
values must match for the object to be selected for the return list.
keyNotList
Specifies a list of attribute names that must not be set on the object. All
specified keys must not be set on the object if it is to be selected for the
return value.
valCmpFunc
This specifies the comparison function that is used to match the name and
values in the keyValList. Valid cmp_functions are glob, regexp, and
equal (default). glob and regexp offer regular expression and wildcard-
based matching. glob is based on the TCL string match command and
regexp uses the Tcl regexp command.
Examples
Example 488
# Match by type and name using glob pattern matching for the name.
# Below matches objects of type cell with the names *BUF*
set res [get_obj_match $lib {type cell valCmpFunc glob name *BUF*}]
# Match by type and using multiple glob patterns
# Below matches objects of type cell with names that match the 3
specified patterns
set res [get_obj_match $lib {type cell valCmpFunc glob name {*BUF*
*LAT* CMPR42X2}}]
# Match by type and various key-value attributes
# Below matches cells with both dont_touch and dont_use attributes
with values true
set res [get_obj_match $lib {type cell keyValList {dont_touch
true dont_use true}}]
# Match by type and various key-value attributes using glob patters
for the attr values
# Below matches cells with both dont_touch and dont_use attributes
with any value.
set res [get_obj_match $lib {type cell valCmpFunc glob keyValList
{dont_touch * dont_use *}}]
# Similar to above call, except more readable.
array set desc {
type cell
valCmpFunc glob
keyValList {
dont_touch *
dont_use true
}
}
set res [get_obj_match lib [array get desc]]
See Also
get_obj
get_obj_list
get_obj_name
This command retrieves the name of the specified object from the database.
Syntax
pub::get_obj_name objectHandle
Returns
This command returns the object’s name.
Arguments
objectHandle
Object handle tag that specifies the object with the name to retrieve.
Examples
The following Tcl example retrieves the name of the object:
Example 489
if { [pub::get_obj_name objId ] == "AND2" } { #loop through pins
foreach pinObj [pub::get_obj_list objId "pin" ] { puts "Pin:
pinObj...
See Also
get_obj_list
get_obj_type
get_obj_owner
This command retrieves the object handle of the owner (parent) of the specified
object from the database.
Syntax
pub::get_obj_owner objectHandle
Returns
This command returns the object’s owner’s objectHandle.
Arguments
objectHandle
Object handle tag that specifies the object with the name to retrieve.
Examples
The following Tcl example retrieves the object handle of the owner of a pin
object:
Example 490
set ownerId [pub::get_obj_owner pinId ]
See Also
get_obj_name
get_obj_list
get_obj_type
This command retrieves the type of the specified object from the database.
Syntax
pub::get_obj_type objectHandle
Returns
This command returns the object’s type.
Arguments
objectHandle
Object handle tag that specifies the object with the name to retrieve.
Examples
The following Tcl example retrieves the type of the object:
Example 491
if { [pub::get_obj_type objId ] == "cell" } { puts "object is a
cell }
See Also
get_obj_name
get_order
This is an auxiliary command that is built on top of the get_style command.
Syntax
pub::get_order id type
Description
This command returns the current order of objects. This may return an empty
list even if there are child objects present. This could happen when there is no
explicit order specified. When no styling is present, the model is written
according to the Liberty modeling style specification.
get_style
This command returns the style information for a given object.
Syntax
pub::get_style objectHandle
Returns
This command returns a list-of-lists.
Arguments
objectHandle
Object handle tag that specifies the object with the name to retrieve.
Description
Each sublist is of the following format:
Example 492
{ class type name format }
where class is one of two strings, obj or attr referring to a child object or
attribute respectively. The type field refers to the type of the attribute or object.
For attributes, type can be one of simple or complex referring to the format
options in the Liberty format.
A simple attribute in Liberty looks like this:
Example 493
pin_capacitance : 0.0246 ;
Example 495
double, int, boolean, simple, complex, string, name, name_list,
comment
Example 496
string, name, name_list
Example 497
{obj latch {IQ IQN} name} -> latch(IQ IQN) { … }
{obj latch {IQ IQN} name_list} -> latch(IQ, IQN) { … }
{obj latch {IQ IQN} string} -> latch(“IQ IQN”) { … }
Examples
Consider the following example of a Liberty cell definition:
Example 498
cell(BUFD1) {
area : 9.87 ;
cell_leakage_power : 3.1415 ;
pin(A) {
direction : input ;
pin_capacitance : 0.0246;
}
pin(Z) {
direction : output ;
…
}
}
Calling the pub::get_style command on the object handle for this cell
would yield the following return value:
Example 499
pub::get_style $cellId
{{attr simple area double}
{attr simple cell_leakage_power double}
{obj pin A name}
{obj pin Z name}}
get_style_by_id
This command is the same as the get_style command, except that an object
handle id is returned instead of a name in the style_list return value.
Syntax
pub::get_style_by_id objectHandle
Returns
This command returns a list-of-lists in the format: { class type
objectHandle format }
Arguments
objectHandle
Object handle tag of the parent object.
See Also
get_style
read_model
This command reads a Liberty model into the internal database and returns a
handle to the root of the data model. It parses the specified Liberty file and
reads it into the internal database. This database represents the contents of the
model as a hierarchical collection of data objects that can be accessed via the
Model Publishing API. The return value of this command is the handle of the
root object, which is the library node.
Syntax
pub::read_model -liberty filename
Arguments
-liberty
Selects the Synopsys Liberty modeling format.
filename
Name of the Liberty model to be read.
Examples
The following commands read in a Liberty model and write it back out to
another file:
Example 500
set lib_id [pub::read_model -liberty my_library.lib]
pub::write_model lib_id new_library.lib
remove_model
This command removes a model from memory. An ID that was returned by the
pub::read_model command must be supplied as an argument. If you do not
have the ID to the model, you can use the pub::get_models command to get
a list of all model IDs currently loaded.
Syntax
pub::remove_model id
Arguments
id
ID to a library object returned by the read_model command.
Examples
The following example reads in a Liberty model and then removes it:
Example 501
set lib_id [pub::read_model -library my_library.lib]
pub::remove_model lib
See Also
get_models
set_obj_attr
This command sets an attribute on an object. This command does not require
commas between the numbers when setting these value attributes.
Syntax
pub::set_obj_attr id attr_list
Arguments
attr_list
Tcl list of key-value pairs specifying one or more attributes to be set on the
object.
id
Handle to an object in the model.
Examples
For example, to scale the max_transition attribute value on each input pin
of each cell:
enable_api pub
set lib [pub::read_model -liberty $filename]
foreach cell [pub::get_obj_list $lib type cell] {
foreach pin [get_obj_list $cell key direction input] {
set oldmaxtran [get_obj_attr $pin max_transition NOMAXTRAN]
if {![string match NOMAXTRAN $oldmaxtran]} {
set newmaxtran [expr $oldmaxtran * 1.2]
unset_obj_attr $pin max_transition
set_obj_attr $pin [list max_transition $newmaxtran]
}
}
}
set_obj_multi_attr
This command sets an attribute on an object which can have multiple entries in
the Liberty library structure. The syntax does not require commas between the
numbers when setting the value attributes.
Syntax
pub::set_obj_multi_attr id name attribute_list
Arguments
id_name
Construct name.
attribute_list
A single liberty attribute which may have multiple definitions in the liberty file,
such as the voltage_map attribute.
Examples
If the original library has the voltage_map definitions as:
Example 502
voltage_map(vdd33, 2.85);
voltage_map(vss33, 0);
voltage_map(vdd, 1.08);
voltage_map(vss, 0);
and the user wants to change the supply name vdd to vddin and vss to
vssin, then set_obj_multi_attr can be used as below:
Example 503
set lib_id [pub::read_model -liberty my.lib]
#rename_supply lib_id
set vm [pub::get_obj_attr lib_id voltage_map]
pub::unset_obj_attr lib_id voltage_map
#replace_attribute lib_id voltage_map $vm
foreach v $vm {
set vname [lindex $v 0]
set val [lindex $v 1]
if { $vname == "vdd" || $vname == "vss" } {
log_info "modifying voltage map : $v"
append vname "in"
}
set v "$vname $val"
pub::set_obj_multi_attr lib_id voltage_map [list $v]
}
set_obj_name
This command changes an object's name.
Syntax
pub::set_obj_name id name
Arguments
id
Handle to an object in the model.
name
New name of the object.
set_order
This command provides a high-level interface for specifying the order of child
objects, such as pins under a cell.
Syntax
set_order objHandle type nameList [format]
Arguments
objectHandle
Handle of the parent object.
type
Type of the objects to be ordered, such as pin or cell.
nameList
List of the names of the objects to be ordered. The order of the list is the
order in which the objects will appear in the published Liberty mode.
Description
This is an auxiliary command that is built on top of the pub::set_style
command. It provides a higher-level interface for common ordering tasks, such
as orders the pins under a cell. This command accepts the object handle of the
container object (a library contains cells, a cell contains pins) and the type of
the objects to be ordered. The nameList argument then specifies the order of
all of the objects of that type by name. If a complete list of objects is not
specified, then the omitted objects will appear last and in an arbitrary order.
Examples
To order the cells in a library, the following command would be used:
Example 504
set_order libId cell {DFFX1 BUFX1 XOR1}
Similarly, the pins in cell DFFX1 and the timing arcs under pin Q could be
ordered using the following commands:
Example 505
set_order cellId pin {QN Q D CK}
set_order pinId timing {timing3 timing1 timing2 timing0}
set_order_by_id
Same as the set_order command except that instead of a list of names, this
command expects a list of object handles (IDs). This command must be used
when ordering groups that either have duplicate names, or no names at all (as
is the case of timing groups).
Syntax
pub::set_order_by_id objectHandle type objectHandleList
[format]
Arguments
objectHandle
Handle of the parent object.
type
Type of the objects to be ordered, such as pin or cell.
objectHandleList
List of the object handles to be ordered. The order of the list is the order in
which the objects will appear in the published Liberty model.
Description
This is an auxiliary command that is built on top of the set_style_by_id
command. It provides a higher-level interface for common ordering tasks, such
as orders the pins under a cell. This command accepts the object handle of the
container object (a library contains cells, a cell contains pins) and the type of
the objects to be ordered. The objectHandleList argument then specifies
the order of all of the objects of that type by object handle. If a complete list of
object handles is not specified, then the omitted objects will appear last and in
an arbitrary order.
Examples
To order the cells in a library, use the following command:
Example 506
set_order libId cell {cellObj1 cellObj2 cellObj3}
Similarly, you can order the pins in cell DFFX1 and the timing arcs under pin Q
using the following commands:
Example 507
set_order cellId pin {pinObj1 pinObj2 pinObj3}
set_order pinId timing {timingObj1 timingObj2 timingObj3}
See Also
set_order
set_style
This command sets the style of its attributes and child objects.
Syntax
pub::set_style objectHandle styleList
Arguments
objectHandle
Name of the object to have the style set.
styleList
Tcl list specifying the style ordering of objects and attributes.
Description
The styleList argument specifies the formatting of the attributes of an object
and the order of the attributes and child objects. For instance, it could be used
to specify the order of the attributes and pins of a cell.
styleList is formatted as a list of lists, where each sublist is of the following
format:
Example 508
{class type name format}
where class is one of two strings, obj or attr referring to a child object or
attribute respectively. The type field refers to the type of the attribute or object.
For attributes, type can be one of ‘simple’ or ‘complex’ referring to the format
options in the Liberty format. A simple attribute in Liberty looks like this:
Example 509
pin_capacitance : 0.0246 ;
where:
■
string is a quoted string, e.g., (“MY BUF”).
■
name is an unquoted string, e.g., (MY BUF).
■
name_list is an unquoted string with words separated by commas, e.g.,
(MY, BUF).
For example, for a latch group, a name, name_list and string format
would produce:
Example 511
{obj latch {IQ IQN} name} -> latch(IQ IQN) { … }
{obj latch {IQ IQN} name_list -> latch(IQ, IQN) { … }
{obj latch {IQ IQN} string} -> latch(“IQ IQN”) { … }
The order in which the objects and attributes are specified determines the order
in which they appear in the generated Liberty model. Any objects or attributes
not specified are added to the end of the group in an arbitrary order.
Examples
Consider the following example of a Liberty cell definition:
Example 512
cell(BUFD1) {
area : 9.87 ;
cell_leakage_power : 3.1415 ;
pin(A) {
direction : input ;
pin_capacitance : 0.0246;
}
pin(Z) {
direction : output ;
...
}
}
To ensure the ordering and style of the data appears as shown above the style
command would be called like this:
Example 513
pub::set_style cellId {
{attr simple area double}
{attr simple cell_leakage_power double}
{obj pin A name}
{obj pin Z name}
}
set_style_by_id
Same as the set_style command except that an object handle (id) is
specified instead of the object name within the style_list argument.
Syntax
pub::set_style_by_id objectHandle styleList
Arguments
objectHandle
Name of the object to have the style set.
styleList
Tcl list specifying the style ordering of objects and attributes.
Description
The styleList argument specifies the formatting of the attributes of an object
and the order of the attributes and child objects. For instance, it could be used
to specify the order of the attributes and pins of a cell.
styleList is formatted as a list of lists, where each sublist is of the following
format:
{ class type objectHandle format }
See Also
set_style
unset_obj_attr
This command unsets one or more attributes on an object. Use this command
carefully.
Syntax
pub::unset_obj_attr id attr_list
Arguments
attr_list
Tcl list of attribute names to be unset.
id
Handle of an object in the model.
write_model
This command writes out the internal modeling database to a Liberty model.
The database is populated via the read_model command.
Syntax
pub::write_model handle filename
Arguments
handle
Handle of a library object returned by the read_model command.
filename
Name of the file to be written.
Examples
The following example reads in a Liberty model and writes it back out to a
second file:
Example 514
set lib_id [pub::read_model -liberty my_library.lib]
pub::write_model $lib_id new_library.lib
See Also
read_model
remove_model
get_models
This information has been included in this file as requested by the applicable
third party software licensor.
Questions or comments regarding the information printed here should be
directed to the third party licensor in accordance with the contact information
included with the applicable license.
The following third-party products are described in this chapter:
■ Signal Extensions for Tcl/Tk
■
Python 2.2.1
■
libjpeg
■ Tcl/Tk
■
TclPro
■
CUDD
■
elmer
■
zlib
■
itcl
■ BLT
■
SWIG
■
Berkeley DB
■ libedit
■
Graphviz
■
Gnuplot
■
GNU Lesser General Public License v2.1
Python 2.2.1
Copyright (c) 2001, 2002 Python Software Foundation; All
Rights Reserved
libjpeg
"this software is based in part on the work of the Independent
JPEG Group"
Tcl/Tk
This software is copyrighted by the Regents of the University
of California, Sun Microsystems, Inc., Scriptics
Corporation, ActiveState This software is copyrighted by
the Regents of the University of California, Sun
Microsystems, Inc., Scriptics Corporation, ActiveState
Corporation and other parties. The following terms apply
to all files associated with the software unless
explicitly disclaimed in individual files.
TclPro
Copyright (c) 1998-2000 Ajuba Solutions
All rights reserved.
CUDD
Copyright [Copyright (c) 1994-1996 The Univ. of Colorado.
All rights reserved.
elmer
Copyright (c) 2001-2003 Richard L. Ratzel
zlib
(C) 1995-1996 Jean-loup Gailly and Mark Adler
itcl
AUTHOR: Michael J. McLennan
Bell Labs Innovations for Lucent Technologies
mmclennan@lucent.com
http://www.tcltk.com/itcl
=======================================================
=================
Copyright (c) 1993-1996 Lucent Technologies
=======================================================
=================
Permission to use, copy, modify, and distribute this software
and its documentation for any purpose and without fee is
hereby granted, provided that the above copyright notice
appear in all copies and that both that the copyright
notice and warranty disclaimer appear in supporting
documentation, and that the names of Lucent Technologies
any of their entities not be used in advertising or
publicity pertaining to distribution of the software
without specific, written prior permission.
BLT
Copyright 1991-1998 by Bell Labs Innovations for Lucent
Technologies.
SWIG
I.
II.
Copyright (c) 1995-1998
The University of Utah and the Regents of the University of
California All Rights Reserved
Berkeley DB
Copyright (c) 1990, 1993, 1994
The Regents of the University of California. All rights
reserved.
libedit
Copyright (c) 1992, 1993
The Regents of the University of California. All
rights reserved.
Graphviz
Gnuplot
Copyright 1986 - 1993, 1998, 2004 Thomas Williams, Colin
Kelley
Permission to use, copy, and distribute this software and
its documentation for any purpose with or without fee is
hereby granted, provided that the above copyright notice
A command groups
processing commands 669
add model attributes 223
query commands 652
add_channel_length_variation 561
setup commands 555
add_channel_width_variation 561 commands
add_harness_elements command 567 add_harness_element 567
add_process_parameter_variation 582 characterize 38, 669
add_transistor 588 clear_liberty_attribute 593
add_user_stimulus 588 configure 596
API commands create 42, 599
pub::add_obj 1088 create_harness 599
pub::get_obj 1090 define_parameters 604
pub::get_obj_attr 1091 enable_api 605, 1086
pub::get_obj_level 1092 generate_datasheet 382, 673
pub::get_obj_list 1093 get_cells 652
pub::get_obj_name 1096 get_location 655
pub::get_obj_owner 1096 get_parameter 656
pub::get_obj_type 1097 get_version_info 657
pub::read_model 1101 help 658
pub::set_obj_name 1104 import 5, 76, 674
pub::unset_obj_attr 1109 import_driver 680
pub::write_model 1101, 1110 list_parameters 659
arc selection 211 model 682
architecture 2 pintype 613
report_sim_results 662
set_cell_type 617
B set_liberty_attribute 623
backwards-compatibility 1085 set_location 45, 628
Boolean operations 110 set_log_file 6, 629
set_log_level 7, 629
C set_log_stdout_level 7, 630
set_measurement_node 631
cell_families_by_name 592 set_opc_default_voltage 638
cell-level model attributes 224 set_opc_parameter 633
characterization set_opc_process 636
electromigration 535 set_opc_temperature 637
EM 535 set_parameter 640
characterization directory structure 43 set_pintype_parameter 642
characterization engine 2 set_stimulus_node 643
characterize command 38, 669 set_sweep_parameter 645
clear_liberty_attribute command 593 complementary inputs 94
clear_liberty_group 595 configure command 596
1127
Index
D
configure.tcl 70 EM 535
create command 42, 599 EM characterization 535
create_harness command 599 enable_api command 605, 1086
ctin parameter type 397 entering commands 4
Current Source Models 435 explicit_points_load 73
custom scripts 7 explicit_points_slew 72
customize
data sheet content 399
data sheet format 399
F
data sheets 393 foreach Tcl command 1081
D G
data sheet content generate_datasheet command 382, 673
banner 388 get_cells command 652
dynamic energy 391 get_config_opt 653
function 389 get_location command 655
headers 388 get_parameter command 656
input pin capacitance 390 get_version_info command 657
leakage power 392
Grid Engine 2
setup and conditions 393
binaries 12
transition time 390
wrapper scripts 12
data sheets
add parameters 395
column headers 403 H
customize 393 help 5
customize content 399 help command 658
customize format 399 hosts
load pin parameters 396 IDs and names 25
modify parameters 395
prolog parameters 403
prototype parameters 403 I
report parameters 399 import command 5, 76, 674
report settings 399 import_driver command 680
set transition time 396 introduction 1
table captions 402 io_shell 2
table parameters 402 io_shell command options 4
variable substitution 404 io_shell syntax 4
default arc selection 211 io_shell.log 6
define_cell_ccb 601
define_parameters command 604
J
JMS 2
E job
ECSM 2 definition 10
editing job management system (JMS) 2
configure.tcl 70 Job Scheduler
Electromigration 535 RTDA NC 12
job scheduler
1128
Index
L
1129
Index
R
1130
Index
U
1131
Index
W
1132