Tempus User Guide
Tempus User Guide
November 2020
© 2011-2020 Cadence Design Systems, Inc. All rights reserved.
Printed in the United States of America.
Cadence Design Systems, Inc. (Cadence), 2655 Seely Ave., San Jose, CA 95134, USA.
Trademarks: Trademarks and service marks of Cadence Design Systems, Inc. (Cadence) contained in this
document are attributed to Cadence with the appropriate symbol. For queries regarding Cadence's
trademarks, contact the corporate legal department at the address shown above or call 1-800-862-4522.
All other trademarks are the property of their respective holders.
Restricted Print Permission: This publication is protected by copyright and any unauthorized use of this
publication may violate copyright, trademark, and other laws. Except as specified in this permission
statement, this publication may not be copied, reproduced, modified, published, uploaded, posted,
transmitted, or distributed in any way, without prior written permission from Cadence. This statement grants
you permission to print one (1) hard copy of this publication subject to the following conditions:
The publication may be used solely for personal, informational, and noncommercial purposes;
The publication may not be modified in any way;
Any copy of the publication or portion thereof must include all original copyright, trademark, and other
proprietary notices and this permission statement; and
Cadence reserves the right to revoke this authorization at any time, and any such use shall be discontinued
immediately upon written notice from Cadence.
Disclaimer: Information in this publication is subject to change without notice and does not represent a
commitment on the part of Cadence. The information contained herein is the proprietary and confidential
information of Cadence or its licensors, and is supplied subject to, and may be used only by Cadence's
customer in accordance with, a written agreement between Cadence and its customer. Except as may be
explicitly set forth in such agreement, Cadence does not make, and expressly disclaims, any
representations or warranties as to the completeness, accuracy or usefulness of the information contained
in this document. Cadence does not warrant that use of such information will not infringe any third party
rights, nor does Cadence assume any liability for damages or costs of any kind that may result from use of
such information.
Restricted Rights: Use, duplication, or disclosure by the Government is subject to restrictions as set forth
in FAR52.227-14 and DFAR252.227-7013 et seq. or its successor.
Tempus User Guide
Contents
1
Product and Licensing Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2 Tempus Timing Signoff Solution Products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3 Tempus Timing Signoff Solution Product Options . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4 License Options for Single View Distributed STA (DSTA) . . . . . . . . . . . . . . . . . . . . 17
1.5 License Options for Distributed MMMC (DMMMC) . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.6 License Options for Concurrent MMMC (CMMMC) . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.7 License Options for CMMMC in DSTA Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.8 Tempus Paradime Flow Licensing for Interactive ECOs in CMMMC Mode . . . . . . . 21
1.9 About Tempus Timing Signoff Solution Licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.10 Licensing Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.11 Checking Out Licenses for Product Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2
Design Import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2 Input Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3 Design Import Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.4 Performing Sanity Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.5 File Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3
Installation and Startup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.1 Product and Installation Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2 Setting Up the Run Time Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.1 Temporary File Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3 Launching the Tempus Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.1 Completing Command Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3.2 Command-Line Editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3.3 Setting Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4 Starting the Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4.1 Using the Log File Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.5 Accessing Documentation and Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.6 Accessing Documentation and Help from Tempus GUI . . . . . . . . . . . . . . . . . . . . . . 39
3.7 Using the Tempus man and help Commands on the Command Line . . . . . . . . . . . 41
3.8 Other Sources of Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4
Analysis and Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.1 Base Delay Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.2 Base Delay Analysis Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.3 Limitations of Traditional Delay Calculators . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.1.4 Performing Base Delay Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.1.5 Base Delay Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.1.6 Cycle-to-Cycle Jitter using Native Delay Calculation . . . . . . . . . . . . . . . . . . . . 56
4.2 Signal Integrity Delay and Glitch Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.2 Understanding Attacker and Victim Nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.3 SI Delay Analysis - An Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.4 SignaI Integrity Delay Analysis Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.2.5 Performing Signal Integrity Delay Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.2.6 SI Delay Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.2.7 SI Glitch Analysis - An Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.2.8 SI Glitch Analysis Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5
Concurrent Multi-Mode Multi-Corner Timing Analysis ........ 1
5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
5.2 Multi-Mode Multi-Corner Licensing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
5.3 Configuring Setup for Multi-Mode Multi-Corner Analysis . . . . . . . . . . . . . . . . . . . . . . 2
5.4 Library Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
5.5 Defining Timing Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6
Distributed Multi-Mode Multi-Corner Timing Analysis . . . . . . . . 24
6.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.2 Performing Distributed Multi-Mode Multi-Corner Analysis . . . . . . . . . . . . . . . . . . . . 26
6.2.1 Design Loading and MMMC Configuration Script . . . . . . . . . . . . . . . . . . . . . . 31
6.3 Performing Concurrent MMMMC Analysis in DMMMC Mode . . . . . . . . . . . . . . . . . 37
6.4 Setting Up MSV/CPF-Based Design in DMMMC Mode . . . . . . . . . . . . . . . . . . . . . . 37
6.5 Performing Setup/Hold View Analysis and Reporting . . . . . . . . . . . . . . . . . . . . . . . . 39
6.6 Running Single Interactive User Interface in DMMMC Mode . . . . . . . . . . . . . . . . . . 40
6.7 Running Interactive ECO on Multiple Views in DMMMC Mode . . . . . . . . . . . . . . . . 41
6.8 Important Guidelines and Troubleshooting DMMMC . . . . . . . . . . . . . . . . . . . . . . . . 44
7
Distributed Static Timing Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.2 Static Timing Analysis (STA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.3 Distributed Static Timing Analysis (DSTA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.4 Converting STA to DSTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.5 Hardware Recommendations for DSTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.6 Accessing Specific Machines using LSF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.7 DSTA Log Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.8 DSTA Operational Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
8
Signoff ECO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
8.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
8.2 Key Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
8.3 ECO Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
8.4 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
8.5 Signoff Optimization Use Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.6 Basic Optimization Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
8.7 Fixing SI Glitch, SI Slew, and SI Crosstalk Delta Delay Violations . . . . . . . . . . . . . . 89
8.8 Fixing IR Drop in Tempus ECO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.9 Optimization in Path-Based Analysis (PBA) Mode . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.10 Total Power Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
8.11 Setup Timing Recovery After Large Leakage or Total Power Optimization . . . . . . 94
8.12 Recommendations for Getting Best Total Power Optimization . . . . . . . . . . . . . . . . 94
8.13 Hierarchical ECO Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8.14 Top Down Block ECO Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
8.15 Generating Node Locations in Parasitic Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
8.16 Optimization Along Wire Topologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
8.17 Optimization using Endpoint Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
8.18 Metal ECO Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.19 Handling Large Number of Active Timing Views Using SmartMMMC . . . . . . . . . 107
9
Timing Model Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.1 Extracted Timing Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
9.1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
9.1.2 ETM Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
9.1.3 ETM Generation for MMMC Designs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
9.1.4 Slew Propagation Modes in Model Extraction . . . . . . . . . . . . . . . . . . . . . . . . 114
9.1.5 Basic Elements of Timing Model Extraction . . . . . . . . . . . . . . . . . . . . . . . . . . 115
9.1.6 Secondary Load Dependent Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
10
Tempus Power Integrity Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
10.1 Tempus Power Integrity Analysis Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
10.2 Licensing Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
10.3 Tempus Power Integrity Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
10.4 Performing Tempus PI Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
10.5 Tempus PI Result Analysis and Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
10.6 User-Defined Critical Paths Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
10.7 Enabling Proximity Aggressors in Tempus PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
10.8 Sequential Activity and Simulation Period . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
10.9 Tempus PI Related STA Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
11
Low Power Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
11.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
11.2 Low Power Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
11.3 Importing the Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
11.4 Non-MMMC Flow Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
12
Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Appendix - Base Delay, SI Delay, and SI Glitch Correlation with SPICE . . . . . . . . . . . 265
13
Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
The Tempus Timing Signoff Solution software, also known as Tempus, provides a sign-off
timing and signal integrity solution for a design flow. This manual describes how to install,
configure, and use Tempus to implement digital integrated circuits.
Audience
This manual is written for experienced designers of digital integrated circuits. Such designers
must be familiar with design planning, placement and routing, block implementation, chip
assembly, and design verification. Designers must also have a solid understanding of UNIX
and Tcl/Tk programming.
Each chapter focuses on the concepts and tasks related to the particular design phase or
topic being discussed.
In addition, the following sections provide prerequisite information for using the Tempus
software:
■ "Installation and Startup"
Describes how to install, set up, and run the Tempus software, and use the online Help
system.
■ "Design Import"
Describes how to prepare data for analysis in the Tempus software.Tempus Timing
Signoff Solution
text Indicates text that you must type exactly as shown. For
example:
report_annotated_check -missing_setup
Related Documents
For more information about Tempus, see the following documents. You can access these and
other Cadence documents with the Cadence Help online documentation system.
■ Tempus Known Problems and Solutions
Describes important Cadence Change Requests (CCRs) for Tempus, including solutions
for working around known problems.
■ Tempus Text Command Reference
Describes the Tempus text commands, including syntax and examples.
■ Tempus Menu Reference
Describes Tempus graphical user interface.
1
Product and Licensing Information
1.1 Overview
Each Cadence Tempus Timing Signoff Solution product is sold as part of a product package.
Product packages might also include product options. The options provide advanced features
and capabilities, such as support for enabling distributed client servers and/or accelerating
performance through increased CPU multi-threading.
Each product and product option has a corresponding license. The software uses licenses to
determine the features that are available when the software runs.
tempus
Product
Name Abbreviation Description
Number
Tempus Timing Tempus L TPS100 Tempus L is one of the two base
Signoff Solution L licenses in the Tempus line. Tempus
L provides better timing analysis
performance for both Graph-Based
Analysis (GBA) and Path-Based
Analysis (PBA) versus Tempus XL
and also allows for multi-threaded
PBA, which is unavailable in Tempus.
Tempus L is functionally equivalent to
Tempus XL with the exception of
concurrent MMMC operation.
Concurrent MMMC is available only
in Tempus XL.
Product
Name Abbreviation Description
Number
Tempus L can be paired with Tempus
ECO for Signoff ECO and it can be
paired with Tempus MP to enable
more CPUs for multi-threading.
Tempus L can be used for
acceleration and enables 8 CPUs.
Tempus L can checkout Tempus
ECO, or Voltus L/Voltus XL to load the
concurrent MMMC view definitions by
default. If any of these licenses are
not available, the software will load
the design with a SMSC (single-mode
single-corner) definition.
Tempus Timing Tempus XL TPS200 Tempus XL provides all the
Signoff Solution functionality of Tempus L and
XL includes the primary innovation of
distributed design. Distributed design
leverages massive parallel
computation by leveraging multiple
compute servers to perform static
timing analysis for a single view for
designs up to 100s of millions of
placeable cell instances.
In addition, Tempus XL provides eight
additional CPUs over Tempus L - no
compromise on hierarchical/
incremental analysis, or concurrent
MMMC analysis in a single
session.Tempus XL can be used for
acceleration and enables 16 CPUs.
Product
Name Abbreviation Description
Number
Tempus Timing Tempus ECO TPS300 The Tempus ECO option works with
Signoff Solution either Tempus L or Tempus XL to
ECO enable MMMC signoff ECO
functionality. This enables physically-
aware MMMC timing optimization for
setup/hold and DRV violations. It also
supports leakage power optimization.
Tempus ECO is only an additional
license, which is required to run
physically-aware timing signoff
optimization.Tempus ECO can also
be used to enable concurrent MMMC
operation when used with the base
Tempus L license.
Tempus Tempus MP TPS400 Tempus MP is a dual use accelerator
Massively Parallel for Tempus. In non-distributed
analysis, Tempus MP adds sixteen
CPUs to the base license of either
Tempus L or Tempus XL for
enhanced multi-threaded
performance.
While performing design distribution,
Tempus MP is required for each
distributed process. Distributed
processes can be on separate
hardware clients or can be packed on
a single large compute server. In
either case, it is one Tempus MP per
process and each process enables
up to sixteen CPUs. Tempus MP
licenses can be stacked to provide
more CPUs in blocks of
sixteen.Tempus MP can be used for
acceleration and enables 16 CPUs.
Product
Name Abbreviation Description
Number
Tempus Timing Tempus PI TPS600 The Tempus Power Integrity license
Signoff Solution enables identification of IR-sensitive
Power Integrity critical paths. It is an option to the
baseline licenses, Tempus-XL, or
Voltus-XL.
Note: The default multi-CPU order is Tempus MP, Tempus L, and Tempus XL.
Examples:
❑ CMMMC with 6 views on 12 CPUs = 1 XL
❑ CMMMC with 15 views on 18 CPUs = 2 XL + 1 XL or = 2 XL + 1 MP
❑ CMMMC with 20 views on 32 CPUs = 3 XL + 1 XL or = 3 XL + 1 MP
Note: The CMMMC STA licensing is different from Tempus ECO, which is also multi-mode/
multi-corner.
■ Each client requires a Tempus MP license - and licenses CMMMC just like non-DSTA
jobs:
❑ 1XL (16 CPU) or 1{L+ECO} (8 CPU) for <= 8 views
❑ 2 XL for 9 to 16 views
❑ 3 XL for unlimited views
❑ Add extra CPUs with additional MP licenses
■ The required minimum configuration for this setup is 3 XL + 2 MP.
Examples:
■ Run CMMMC with 6 views across 5 computers = 1XL + 5MP +5 XL = 80 CPUs (5
clients@16)
■ Run CMMMC with 10 views across 3 computers = 1XL + 3MP + 6XL= 48 CPUs (3
clients@16)
You can stack extra Tempus MP, Tempus L, and Tempus XL licenses to enable more CPUs
for each client session. All the licenses are checked out upon start up and are valid throughout
the session.
Table 1-3 Product and product options and corresponding license strings
The version of vendor daemon (cdslmd) and license daemon (lmgrd) should be 11.11.1.1 or
higher. If the daemon versions have not been updated, Tempus may fail to checkout a license:
$ tempus
Checking out Tempus Timing Signoff Solution license ...
Fail to find any Tempus Timing Signoff Solution license...
Check your Tempus Timing Signoff Solution license status.
To fix the above error, restart the license server using the latest cdslmd and lmgrd versions
included in the release tree.
Note: If you do not want any product options to be checked out dynamically, use empty
quotes with the -lic_options parameter, as follows:
tempus -lic_options "lic1 lic2 ..."
The following command can be used to check out product options after you have invoked the
software:
set_license_check -checkout license -optionList "license1 license2 …"
The product option specified with the -checkoutList parameter is checked out
immediately and the product options specified with the -optionList parameter are
checked out dynamically. With the -checkOut parameter, you can specify only one product
option.
Note: If you do not want any product options to be checked out dynamically, use empty
quotes with the -optionList parameter, as follows:
set_license_check -checkout option -optionList " "
Important
You cannot check out a license for a product option if you have not checked out a
base license.
2
Design Import
2.1 Overview
This chapter describes the tasks that you perform to import the data and prepare for analysis
in Tempus. The Tempus software supports both MMMC (multi-mode multi-corner) and non-
MMMC methods of importing design data. However, Tempus database has MMMC
configuration settings by default. Tempus works in logical and physical modes. Physical
information is available in the form of LEF/DEF format, Innovus, or Open Access (OA)
database.
Timing Libraries
Timing library files contain timing information in ASCII format for all standard cells, blocks, and
I/O pad cells. Tempus reads timing library format files (.lib).You can read in the library files
using the read_lib command.
Verilog Netlist
Tempus reads synthesized netlist in Verilog. You can read in the netlist files using the
read_verilog command.
SDC Constraints
■ To ensure that your design meets the timing requirements, you must first specify the
requirements by setting the constraints. You can use the timing constraints to set:
You can read the timing constraints using the read_sdc command.
You can specify the parasitic data for more accurate timing analysis using a SPEF or RCDB
file.
You can use the read_spef command to specify the SPEF file. The read_parasitics
command is used for reading SPEF and RCDB-based RC parasitics information, and already
created RCDBs in Tempus.
An SDF file contains details about the absolute delays for all cells and interconnects,
including IR drop and crosstalk impact. It annotates user-specified delay information from the
SDF file into the timing system. You can use the read_sdf command to supply pre-
calculated delays and timing check values from an external delay calculator, or from a
previous Tempus session.
In Tempus, you can use the read_sdf command to read in a SDF file and then the timing
analysis engine will use the delays annotated from this SDF file.
Physical Data
In Tempus, you can read physical information, such as placement, floorplan, and routing that
you created using LEF and DEF in Innovus.
To load design in the DMMMC mode, refer to the “Distributed Multi-Mode Multi-Corner
Timing Analysis” chapter of the Tempus User Guide.
When the data is imported using non-MMMC commands, Tempus internally stores it in
MMMC configuration as the following MMMC objects:
default_emulate_view
default_emulate_delay_corner
default_emulate_rc_corner
default_emulate_libset_max
default_emulate_libset_min
default_emulate_constraint_mode
You can specify the directory for writing out temporary files during a Tempus session.
The Tempus software creates a unique temporary sub-directory for a session, specified by
setenv TMPDIR <dir-name> at the command prompt, where:
You can control the location and name of auto-generated files in a session. These files are
created by Tempus automatically and are retained after the run completes. This includes
report files, or other output files with default names that are auto-generated in the current run
directory. The software allows you to control the directory that the files should be redirected
to, and also add unique prefixes to file names. You can use the following global variables to
control this behavior:
■ auto_file_dir
Represents the top-level directory to store files/sub-directories that are auto-generated
by the software.
■ auto_file_prefix
Represents the prefix to be applied to all files/sub-directories that are auto-generated by
the software.
3
Installation and Startup
For information about the Tempus licenses, see “Product and Licensing Information”
chapter.
For example, you can add the following to the startup shell script:
set install_dir = /tools/tempus16.2/lnx86
set path = ($install_dir/bin $path)
setenv MANPATH $install_dir/share/tempus/man:$install_dir/share/tcltools/
man:$MANPATH
Note: When Tempus launches, it automatically adds the legacy or the Stylus CUI man pages
(if the -stylus parameter is specified), and the Tcl man pages at the beginning of the current
MANPATH inside Tempus. Therefore, from within Tempus the man command will show both
the sets of man pages before any other man pages.
By default, the tmp_dir is created in the /tmp directory. If the Unix envar TMPDIR is set, then
the tmp_dir is created inside $TMPDIR.
Where _xxxxxx is a string that is added to make the directory unique. For example:
tempus_temp_10233_farm254_bob_nfp9ez
The temporary directory is automatically removed on exit or if the run is terminated with a
catchable signal (for example, SIGSEGV).
The README file lists the supported and compatible platforms for this release.
When you start the Tempus in the GUI environment, the Tempus console is displayed within
the main Tempus window.
If you use this console for other actions, for example, to use the vi editor, the session
suspends until you finish the action.
If you suspend the session by typing Control-z, the tempus> prompt is no longer
displayed. To return to the Tempus session, type fg, which brings the session to the
foreground.
After you type a partial text command name and press the Tab key, the software displays the
exact command name that completes or matches the text you typed (if the string is unique to
one text command) or all the commands that match the text you typed.
For example, if you type the following text and press the Tab key
report_ti
If you type the following text and press the Tab key
report_t
Most editing commands can be given a repeat count, n, where n is a number. To enter a
repeat count, press the Esc key, the number, and then the command to execute. For example,
Esc 4 ^f moves forward four characters. If a command can be given a repeat count, the
text [n] is shown at the end of its description.
You can type an editing command anywhere on the line, not just at the beginning. You can
press Return anywhere on the line, not just at the end.
Note: Editing commands are case sensitive: Esc F is not the same as Esc f.
For information on setting design preferences, see Tools - Preferences in the Tempus
Menu Reference.
Initialization Files
By default, various initialization files are loaded up at startup, if they exist. They can be used
to configure the GUI, load utility Tcl files, or configure Tempus settings.
For a list of the files and the order in which they are loaded, refer to tempus in the Tempus
Text Command Reference.
For information on using this command, see tempus in the Tempus Text Command
Reference.
For an overview of the products and product licensing, see "Product and Licensing
Information".
You can use the integrated log file viewer when the software is running. It has the following
features:
■ Ability to expand and collapse command information.
■ Ability to view multiple log files in separate console windows simultaneously.
■ Color coding of error, warning, and information messages.
■ Access to the documentation in the Tempus Text Command Reference.
When a log file is displayed, click on any of the underlined commands to open an HTML
window that displays the documentation for that command.
The Log File window is displayed. Select the log file to view. The software opens a separate
console window and displays the log file.
For more information, see Tools - Log Viewer in the "Tools Menu" chapter of the Tempus
Menu Reference.
You can use the standalone viewer even if the software is not running. It provides most of the
same functionality as the viewer that is run within the software but does not provide access
to the documentation.
To use the standalone viewer, type the following UNIX/Linux command in the console window:
viewlog [-file logFileName]
The viewer opens the most recently created log file unless you specify a different file with the
-file parameter.
After launching Cadence® Help, press F1 or choose Help - Contents to display the help
page for Cadence Help.
Clicking the Help button opens the entry for the form in the Cadence Help window.
To see the complete set of information for a Tempus command, type the following command
in the software console:
man command_name
For example, to see the complete set of information for the read_lib command, type the
following command:
man read_lib
To see the message summary of a particular message ID, type the following command in the
software console:
help msg_id
For example, to see the message summary for the TECHLIB-1002 message ID, type the
following command:
help TECHLIB-1002
To see the message detail of a particular message ID, type the following command in the
software console:
man msg_id
For example, to see the message summary for the SI-2253 message ID, type the following
command:
man SI-2253
The detailed description is not available for all active message IDs.
4
Analysis and Reporting
4.1.1 Overview
Tempus enables you to perform fast and precise signal integrity-aware delay calculations for
cell-based designs. The software combines signal integrity (SI) analysis with timing analysis
to check for functional failures due to SI glitch and performs accurate timing calculations (that
account for both the SI and IR-drop effects). Tempus utilizes the multi-threaded circuit
simulation methods to deliver accuracy, capacity, and performance needed for nano meter
designs.
read_verilog dma_mac.v
❑ Set the top module name, and check for consistency between the Verilog netlist and
timing libraries:
set_top_module dma_mac
❑ Load the timing constraints:
read_sdc constraints.sdc
❑ Load the cell parasitics:
read_spef cell.spef.gz
3. Generate the timing report:
report_timing
4. Report base delay calculation details for the arcs:
report_delay_calculation –from inst1/A –to inst1/Y
Inputs
■ Timing Library (CCS or ECSM preferred): Contains the timing data.
■ Netlist: Specifies a circuit netlist in Verilog.
■ SPEF: Specifies the RC parasitics information in SPEF format.
■ Command File (Tcl): Contains a series of Tcl commands.
■ Noise Library (CCS-N, ECSM-SI, or cdB) (Optional input): Contains characterized noise
data.
■ Timing Constraints: Specifies the timing constraints, including clock propagation, in a
SDC file.
Outputs
■ Timing Reports: Contains details about the critical paths in the design.
■ Delay Report: Contains details about delay changes - with or without crosstalk.
■ SDF File: Contains the negative and positive delay changes caused by crosstalk. The full
SDF file contains details about the absolute delays for all cells and interconnects,
including crosstalk impact.
■ Noise Abstracts: Specifies an XILM abstract noise model. An XILM model is a detailed
noise abstracts that can be used to perform hierarchical timing and noise analysis. This
model contains cells that belong to block interface logic, and internal cells/nets that are
coupled to the interface logic.
■ Noise Report: Contains details about the glitch noise on nodes.
Figure 4-2 Inputs and Outputs required for Base and SI Analysis
Figure 4-3 Traditional Delay Calculation using Delay as function of slew and load
The advanced technologies (28nm and below) require waveform-based delay calculators to
accurately calculate the delays based on waveforms. The waveform-based delay calculators
use real waveforms as input to analyze a stage, as shown in the figure below.
There are several shortcomings when you use traditional delay calculators. Some of these
are:
■ Traditional delay calculators use single slew to calculate stage delays. This may not
produce accurate results.
■ Different waveforms with the same slew value produce the same delays.
In the above figure, the grey waveforms indicate the input waveforms in an ideal case. The
black lines indicate the linear input slew values and slew waveforms, respectively.
Here, the linear input slew value and the input waveforms use the same slew, however, the
delay numbers are different. The long curve of the input waveform (grey) can produce larger
delays as compared to the one produced with the linear input slew (black). Also, the
measurement point shift can contribute to delay inaccuracy.
To achieve accuracy, the waveform shapes are required to be included during delay
calculations. The equivalent waveform model (EWM) computes equivalent receiver output
based on the input waveform shapes and adjusts the interconnect delay accordingly. The
adjustment in delay compensates for any inaccuracies that delay calculation might cause in
the next stage due to lack of waveform shape information. The EWM approach provides a
technique for producing higher accuracy results when compared to Spice.
When a stage is analyzed during delay calculation, a pre-defined waveform from the library
(based on single input slew value) is used as a stimulus. When the EWM mode is not enabled,
the input slew is measured from the actual waveform computed during the previous stage
analysis. This may have entirely different characteristics compared to the pre-defined
waveform used in the current stage. As a result, the delay impact due to waveform shape
differences may be affected.
When EWM is enabled, the software computes the delay impact of waveform shapes on
receiver cells, and computes the delay impact - thus providing an overall improvement in path
delay accuracy. When EWM is enabled in SI analysis, the software provides delay
adjustments based on the receiver noise response to a noisy transition. This helps to reduce
the SI pessimism that will be reported if the total delay is measured on noisy waveforms at
the receiver input.
Use Model
Waveform Propagation
The waveform shapes have a significant impact on delay calculations. Traditionally, delay
calculation uses a single pre-driver waveform for specific slew value at the cell input to
compute the response on the output of a cell.
Consider two libraries characterized with pre-driver cells, BUFX16 and BUFX2. An accurate
delay on all the instances driven by BUFX16 will be reported, when the library uses BUFX16
as a pre-driver cell. In this case, the instance I4 produces more accurate results as the input
waveform matches with the pre-driver waveform. The accuracy of other cells is impacted due
to a difference in results for the pre-driver cell versus the actual driving cell. To facilitate actual
waveform propagation through a path, the waveform propagation feature stores the actual
waveform instead of a single slew value at the input of each cell.
As shown in the figure below, both the BUFX16 slew (in grey) and BUFX2 slew (in black) have
the same value but their waveform shapes are different. The same slew having different
waveform shapes can produce different delays. The delay accuracy is a function of input
waveform shapes, even if the slew values are same. If the input waveform shape is different
from the input waveform used for cell characterization, the delay accuracy will be significantly
affected.
The waveform propagation feature is supported in both graph- and path-based analysis
modes.
The waveform propagation using ECSM models will be more accurate with additional receiver
pincap points. Cadence recommends at least eight points. The last three points can be the
lower slew threshold, delay measurement point, and upper slew threshold. The rest of the five
points must be selected to represent the tail waveform accurately. It is also recommended to
have actual pre-driver waveform in the ECSM libraries.
Use Model
EWM-Only
■ Real waveform tail impact on the next stage is predicted and added to the current wire
delay.
■ The receiver cell is assumed to be the driver lumped load.
Waveform Propagation
■ Real waveforms are stored and used as input for the next stage. The input waveform tail
impact is used at the appropriate point.
■ Unlike EWM-Only, the waveform propagation computes accurate impact of the tail as it
uses distributed parasitics of wires.
The base delay flow is impacted in the following ways, when you use the equivalent waveform
model or waveform propagation methodology:
■ Enabling equivalent waveform modeling increases runtime by 10% - with no significant
increase in the memory.
■ Enabling waveform propagation increases runtime by 15%. There is an 8% increase in
the memory in graph-based analysis (GBA) mode, and no significant memory changes
take place in the path-based analysis (PBA) mode.
The normalized driver waveform (pre-driver waveform) should be added to a library while
characterizing so that delay can be computed accurately (as there can be different waveforms
with the same slew). There are two types of pre-drivers – active and analytical. Cadence
recommends that you use the active pre-driver. The active pre-driver waveform has a longer
tail than the analytical pre-driver, and thus represents the real design scenario. In the absence
of NDWs (normalized driver waveform) in a library, Tempus auto-generates analytic pre-driver
waveforms.
Timing Library Requirement for Accurate Analysis for 16nm and Below
The ECSM/CCS library characterization for 16nm static timing analysis (STA) signoff meets
the challenges of accurate timing analysis in 20nm. In order to meet accuracy demands for
process nodes 16nm and below, the following are recommended:
■ 8-piece pin capacitances in ECSM timing libraries
■ 2-piece pin capacitance in CCS Timing libraries
■ N -piece pin capacitance in CCS Timing libraries
■ 2% - 98% ECSM waveform range
The 8-piece pin capacitance in the ECSM timing libraries are required to accurately model
back miller current. Traditionally, the receiver pin capacitance in an ECSM library
characterization is measured at the slew thresholds - that may be 30% to 70% of the VDD.
As a result, the use of such thresholds in the ECSM libraries may result in some missing
important data at the tail of the waveform. The 3-piece capacitance tables are extended to 8-
piece tables for 20nm nodes to better capture the waveform distortions due to back miller
current at the waveform tail. The selection of 8-piece pin capacitance is made such that the
required 20nm waveform distortion information can be captured correctly. Since the waveform
distortion happens mostly at the tail of waveforms, the pin-cap thresholds are selected so that
there are more points on the tail.
■ report_delay_calculation
You can use the report_timing command to report the base delays on a timing path. It is
recommended to use the report_timing –net parameter to produce a comprehensive
report.
tempus > set_global report_timing_format {hpin cell slew delay arrival}
tempus > report_timing –net
Path 1: VIOLATED Setup Check with Pin seg3/u9/CK
Endpoint: seg3/u9/D (v) checked with leading edge of 'CLK_W_3'
Beginpoint: seg3/u3/Q (v) triggered by leading edge of 'CLK_W_3'
Path Groups: {CLK_W_3}
Other End Arrival Time 1.104
- Setup 0.152
+ Phase Shift 2.000
- Uncertainty 0.050
= Required Time 2.902
- Arrival Time 3.151
= Slack Time -0.249
Clock Rise Edge 0.000
+ Clock Network Latency (Prop) 1.135
= Beginpoint Arrival Time 1.135
-------------------------------------------------
Pin Cell Slew Delay Arrival
Time
-------------------------------------------------
seg3/u3/CK - 0.091 - 1.135
seg3/u3/Q -> DFF 0.318 0.303 1.438
seg3/u4/A BUF 0.318 0.008 1.446
seg3/u4/Y BUF 0.003 0.158 1.604
seg3/u5/A INV 0.005 0.003 1.607
seg3/u5/Y INV 0.499 0.140 1.748
seg3/u6/A INV 0.549 0.152 1.900
seg3/u6/Y INV 0.793 0.528 2.427
seg3/u7/A BUF 0.794 0.003 2.430
seg3/u7/Y BUF 0.596 0.404 2.835
seg3/u7_a/A BUF 0.596 0.060 2.895
seg3/u7_a/Y BUF 0.003 0.250 3.145
seg3/u8/A BUF 0.003 0.001 3.146
seg3/u8/Y BUF 0.042 -0.023 3.123
seg3/u9/D DFF 0.072 0.029 3.151
------------------------------------------------
Cell : INV
Library : cell_w
Delay type: net
--------------------------------------------------
RC Summary for net seg3/n5
--------------------------------------------------
Number of capacitance : 17
Net capacitance : 0.293534 pF
Total rise capacitance : 0.320849 pF
Total fall capacitance : 0.320780 pF
Number of resistance : 17
Total resistance : 567.671387 Ohm
----------------------------------------------------
Rise Fall
----------------------------------------------------
Net delay : 0.151900 ns 0.119000 ns
From pin transition time : 0.499000 ns 0.211500 ns
To pin transition time : 0.549100 ns 0.248000 ns
----------------------------------------------------
The clock jitter flow provides a capability to calculate the cycle-to-cycle jitter due to the IR
impact on a clock network. The Tempus software runs an optimized static timing analysis
using the (already generated) EIV values (effective instance voltage) for each of the cycles to
compute the clock latencies of all end points corresponding to every cycle. The end point
cycle-to-cycle jitter is calculated using the latencies from all the cycles.
The SPICE validation feature is available that allows validation of Tempus computed jitter
against the SPICE simulated value for a given set of endpoints.
The IR drop induced jitter can be modeled as a component of setup uncertainty or by using
the set_clock_latency -jitter command.
To run clock jitter analysis, you can use the analyze_jitter command.
The following command generates a jitter output report, which reports the clock jitter
summary and details of the end points cycle-to-cycle jitter:
analyze_jitter -eiv_file VDD_VSS.win_avg.rpt -native true
---------------------------------------------------------------------------------
JITTER SUMMARY
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
Clock Name Cycle-To-Cycle Jitter (Type) Total End Points
---------------------------------------------------------------------------------
clk1 -9.99e-11 - 8.89e-11 (R) 2282
clk1 -9.87e-11 - 8.91e-11 (F) 2282
clk2 -9.93e-11 - 1.19e-10 (R) 2076
clk2 -9.39e-11 - 1.23e-10 (F) 2076
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
JITTER PER ENDPOINT
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
Clock End Points Adj Cycles for Max -ve/+ve Cycle-To-Cycle Jitter
Change in Jitter
---------------------------------------------------------------------------------
clk1 FF1/CP (R (2, 3) - (1, 2) -6.91e-11 - 8.89e-11
clk1 FF1/CP (F (1, 2) - (4, 5) -6.87e-11 - 8.88e-11
clk1 FF2/CP (2, 3) - (1, 2) -6.81e-11 - 8.79e-11
clk1 FF2/CP (F (1, 2) - (4, 5) -6.77e-11 - 8.78e-11
...
--------------------------------------------------------------------------------
4.2.1 Overview
Signal Integrity (SI) can impact the delay or introduce a glitch on a given net due to the
switching of nets that may be lying in close proximity. Tempus performs SI analysis by
analyzing the delay and slew changes of each switching signal in the presence of crosstalk
noise. The delay and slew changes, due to crosstalk noise, are then used to determine the
worst-case minimum or worst-case maximum path delays in the design. The software also
checks for functional failures due to crosstalk glitch noise and reports the failing nets.
To perform signal integrity analysis, it is important to understand the role of attackers and
victim nets. These are discussed in the following section.
Consider that attacker A1 switches in the opposite direction to the victim, as shown in the
figure below, then there can be a potential increase in the victim delay. Also, notice the non-
linear waveform shape that is caused by the glitch. This is shown in the figure below.
SI can also decrease the delay and cause hold time failures. If both the attacker and victim
are switching in the same direction, as shown in the figure below, then there is a decrease in
the victim net delay. If this occurs on a critical minimum delay path, it can lead to hold
violations. In other words, if a victim net transitions sooner than it was intended to, then it may
cause hold violations
Tempus calculates the worst-case change in delay value due to cross-coupled attackers and
reports the change in delay in the timing and SI reports.
You can use the following script to calculate base and SI delay:
1. Specify the design size:
set_design_mode –process 28
2. Load the design data. Follow the steps given below:
❑ Load the timing libraries (.lib) and characterized data (.cdB):
read_lib typ.lib -cdb typ.cdB
❑ Schedule reading of a structural, gate-level verilog netlist:
read_verilog dma_mac.v
❑ Set the top module name, and check for consistency between Verilog netlist and
timing libraries:
Tempus can generate or read in the timing window information (using the read_twf
command) to determine which signals can (or cannot) switch simultaneously. The slews are
used to switch attacking signals. Timing windows represent the range of time during which a
net can transition. They are used to decide when it is possible for multiple attackers to
combine.
Attacker timing windows are exhaustively checked for the worst-case allowable combination
for the final combined simulation.
■ The worst case is determined by each attacker's glitch noise contribution.
■ The victim's timing windows are also checked for SI delay analysis.
■ The attacker slew affects the magnitude of the noise peak/incremental delay .
A more accurate slew reduces the noise peak, if the transition time is greater than the default
fast slew.
In the above figure, the ranges represent the TWs for respective nets. For attacker A1, TW
range is 2-3, that is, the time interval in which net A1 can switch. The attackers A1 and A2
can be combined to produce a bigger SI impact since their TWs are overlapping. Similarly,
attackers A3 and A4 can be combined since TWs are overlapping.
Now, depending on which one of the two combinations (A1-A2, or A3-A4) produces worst SI
impact, one of the combinations will be selected by the software for SI analysis.
The SI effect on delay depends on timing windows and slew, whereas the timing window and
slew depends on the SI effect of delay. Therefore, the timing windows impact SI delay and SI
delay impacts timing windows.
Hence, an iterative approach is required to accurately compute the timing windows affected
due to SI so that Tempus can accurately calculate the SI delay and glitch.
There are two primary approaches to timing window iteration. The default approach starts
with an infinite timing window and iterates while shrinking the timing window width. The
second approach starts with a nominal or noiseless timing window and iterates while growing
the timing window width.
The following figure shows the default approach to start with infinite timing windows and
calculates the initial delta delays.
In the second iteration, as shown in figure below, the delta delays are used to calculate new
arrival times, and therefore new timing windows. These new timing windows are used to
calculate new delta delays. The new delta delays are smaller because the timing windows are
more precise (smaller) compared to infinite timing windows.
By default, Tempus performs two iterations. You can change the number of Iterations by using
the following command:
set_si_mode -num_si_iteration Number
All the nets are not reselected for analysis in each timing window iteration. Tempus supports
the following methods of re-selection.
■ Slack based
■ Delta delay based
Also, it is important to understand that reselecting a particular net does not ensure that all
pessimism is removed from SI analysis on that net. For instance, if the timing critical nets are
being reselected, the attackers of the critical victim nets may not necessarily be critical, so
the timing windows on the attackers may be pessimistic.
Timing windows of nets are computed irrespective of their relative positioning. There can be
some pessimism in analysis when the victim/attacker share common clock path.
Attacker attacks a victim with its full strength if it switches at the same time as the victim, and
the impact of the attacker on the victim declines as the distance between switching times
increases. The computation of closest switching time based on these arrival times can be
pessimistic if both attacker and victim share the same clock path.
In the example above, for path from Flop1 to Flop2, Attacker’s TW (4n – 8n) is overlapping
with Victim’s TW (2n – 5n). The clock arrival (at point P1), which is causing victim to reach at
5ns is 3ns. As both victim and attacker are sharing the same launch clock path till P1, they
both will be launched with the same clock arrival time till the point. So corresponding to the
arrival time of 3ns (at P1) the attacker can switch earliest by 6ns (and not 4ns). Therefore, the
actual positioning of the attacker and victim will be, as shown in the figure below. The attacker
can only attack from a shortest distance of 1ns from the victim switching time.
The adjustment in attacker TWs accounts for the difference in min-max delay on the top
common clock path due to the following factors:
Difference in base arrival of the top clock path due to early/late derates.
Min/Max SI impact on common clock path (adjusted only during hold analysis).
Selection of Attackers
After determining the timing windows of attacker/victim nets, Tempus selects the attackers
that produces the worst impact on the victim net. Tempus controls the attacker's selection
based on the following factors:
■ Strength of Attacker on page 68
■ Attacker Selection Based on Alignment on page 70
■ Attacker Selection Based on Logical Correlation on page 80
Strength of Attacker
The strength of an attacker is the amount of glitch it produces at victim’s receiver input and it
depends on the coupling capacitance between attackers and victims. With new processes
(smaller geometries), the ratio of Ccpl/Ctot is increasing. Some victims can have 100s or
1000s of attackers and many of these attackers can be small ones. SI analysis run time is a
strong function of the number of attackers. Higher numbers of attackers can result in high
analysis run time. Tempus provides a better way of handling small attackers by combining
these small attackers together. Tempus models many small attackers on a victim net and
replaces them with an imaginary net, called a virtual attacker.
In the figure above, the small attackers, namely A1, A2, a3, and a4, are combined together
to form a virtual attacker ~net1.
Tempus identifies an attacker as an individual attacker if the glitch contribution from this
attacker is more than the threshold value specified with the set_si_mode -
individual_attacker_threshold value command. If the peak of this glitch on the victim
net exceeds the specified threshold value, then the attacker is significant and is individually
reported in the constituents section of the SI report. You can use the -
individual_attacker_clock_threshold parameter to vary small attacker threshold for
victim nets lying on a clock path.
If the glitch contribution of an attacker is less than the threshold value defined with the -
individual_attacker_threshold of the set_si_modecommand, then this attacker
becomes eligible for the virtual attacker.
The two main characteristics of a virtual attacker are: coupling capacitance and the voltage
source waveform used as a transition on the virtual attacker. You can use the set_si_mode
–accumulated_small_attacker_mode command to create and control the characteristics
of the virtual attacker. Tempus provides the following two methodologies for creating virtual
attackers:
■ Current Matching-Based Methodology
■ Coupling Capacitance Matching-Based Methodology
Note: Both the methodologies account for the low probability of all small attackers switching
at once in order to reduce the pessimism on noise and SI delay analysis.
To create virtual attackers using this methodology, you can set the following command:
set_si_mode –accumulated_small_attacker_mode current
Tempus creates virtual attackers to match both the coupling capacitance and the noise
current. The PWL waveforms are generated in such a way that current induced by the
transition matches the total current induced by all virtual attacker components.
To create virtual attackers using this methodology, you can set the following command:
set_si_mode –accumulated_small_attacker_mode cap
Note: This is the default methodology for all process nodes above 45nm. The 45nm and
below default mode is current.
Tempus creates virtual attackers that model the combined coupling capacitance effects of
small attackers on a victim net. Every victim net can potentially have a virtual attacker.
Tempus assigns a name to each virtual attacker based on the name of the victim net. For
example, if the victim net name is ABC, then the virtual attacker net name will be ~ABC. The
pessimism of using the virtual attacker can be reduced by adjusting the value of the
accumulated_small_attacker_factor between 0 and 1.
set_si_mode accumulated_small_attacker_factor <value >
To recognize those attackers that may have a significant impact on a victim net, Tempus
performs a quick and conservative estimation that takes into account the resistance and
capacitance (RC) characteristics of the attacker and the victim net, as well as the worst-case
drive strength and the load of the victim net. If the estimated coupling capacitance effect from
an attacker is greater than five percent of VDD, the attacker is explicitly reported as an
attacker constituent of that particular victim net. It is typical for a victim net to have as many
as three or four attackers of this type. In general, attackers are usually very small and fall
under this five percent threshold.
You can change the virtual attacker glitch threshold using the set_si_mode –
accumulated_small_attacker_threshold command. The default value of this parameter
is 10.01 percent of VDD. For example, to disable virtual attacker you can use a threshold
value greater than 1 (default), by using the following command:
set_si_mode -accumulated_small_attacker_threshold 1.01
The virtual attacker provides time and memory savings, but sacrifices some accuracy,
reporting detail, and control on slew and timing window information. Because the virtual
attacker is used only for small attackers, these sacrifices should have a minimal impact on
results.
Tempus supports three attacker alignment modes that allow you to select attackers based on
their alignment with victim nets.
■ Path Mode
■ Path Overlap Mode
■ Timing-Aware Edge Mode
The attacker alignment mode can be set by using the following command:
set_si_mode [-attacker_alignment {path | path_overlap | timing_aware_edge}]
The default mode is timing_aware_edge.
Path Mode
■ Tempus uses the victim’s worst arrival edge (as shown in the figure) when determining
which attackers can align with it.
■ SI impact is computed according to the latest/earliest arrival edge of the victim for
maximum/minimum analysis.
■ This mode yields a more realistic analysis.
Path-based alignment annotates each attacker’s impact on victim transition where attacker
timing window edge aligns. The following example shows that in GBA mode Attacker 2 timing
window edge is close to the delay measurement point, thus resulting in maximum impact.
The path-based alignment is more realistic analysis and is less pessimistic than the other two
modes. However, GBA is not guaranteed to bound PBA delays. In this example, the victim
arrival time gets faster (move left) due to retiming of victim timing in PBA. With retimed arrival
time of victim, both the attacker timing window edges now align at the delay measurement
point, thus PBA sees a larger cross-talk impact than GBA.
In the above figure, for paths that are based on the last arrival edge of victim net, only A1 will
be selected for alignment in path mode.
In path overlap mode, Tempus uses the full timing window of the victim (as shown in the
figure), when determining which attackers can align with it.
SI impact is calculated according to the victim edge that is lying anywhere within the timing
window where the maximum impact occurs.
The path overlap mode considers all the attackers which overlap anywhere on victim
transition and annotate their combined impact at delay measurement point in both GBA and
PBA. Due to this methodology, the computed SI impact based on path overlap is pessimistic.
However, GBA is guaranteed to bound PBA analysis. The following example illustrates path
overlap alignment mode:
This mode is more conservative in cross-talk delay computation among the other available
modes.
PBA analysis does not change based on attacker alignment modes, that is, PBA analysis
always annotates individual attacker impact on victim transition where ever attacker timing
windows overlap in all the three modes.
Even if victim timing window changes, the attackers' selection will remain the same. This
mode ensures that GBA bounds PBA delays.
In the figure above, consider a full timing window of a victim net - both attackers A1 and A2
will be considered for alignment with victim and hence both A1 and A2 are selected in the
path overlap mode. This mode is more pessimistic.
In path-based analysis (PBA) mode, Tempus uses the specific edge for the victim that occurs
for a specific path when determining the alignment of the attackers to the victim. It is possible
that the worst SI impact on a net occurs at a victim edge that is not the worst arrival edge for
the victim, thus the PBA victim edge used inside the timing window for the victim can yield a
worst-case SI result for a net. For more information, refer to section on Path-Based Analysis
on page 180.
To ensure that GBA results bound PBA, you should use the path overlap alignment mode.
Timing-aware edge mode performs realistic analysis similar to path-based analysis. Each
attacker’s impact is annotated on victim transition where attacker timing window edge aligns
with the victim. However, to ensure GBA bounds PBA analysis, the timing-aware edge mode
handles some nets based on their timing properties in GBA analysis.
In the following example, if the victim net is a clock, or with exceptions like false paths or MCP,
the attacker timing windows are extended by width of the victim timing window.
If the victim net is not a clock, and has no exceptions like false path or MCP, then all the
attacker timing windows are extended by a critical region of the victim timing window, in
addition to the maximum CPPR, as shown below.
During PBA analysis, the attacker timing windows are extended by the actual CPPR of the
path, and no additional padding is required.
If the victim net is a clock net, and the attacker timing windows are extended by width of the
victim timing window to ensure that an attacker overlaps with the victim arrival time. Any
optimism on a clock net in GBA can result in large TNS optimism (in GBA) as compared to
PBA, because many paths share the same clock path. To eliminate this situation, the clock
nets are handled specially in timing-aware edge mode. The exceptions in certain scenarios
can cause optimism in GBA in path-based alignment mode.
In this example, a path going through A1/B->Y in GBA analysis uses late edge, which
overlaps with attacker 2 only. However in PBA mode, a path going through A1/B->Y overlaps
with attackers 1 and 2 as well, this results in a larger delay than GBA. If the path ending at F3
is a critical path, then the late arrival time used in GBA analysis at A1/Y is not an optimal edge
as it produces optimism in GBA. In fact, late arrival used in GBA is coming from a pin that has
a false path. To overcome this caveat, timing-aware edge mode extends the attacker timing
windows by width of victim timing windows, such that GBA does not report optimistic delay
on critical path.
If the late arriving edge at A1/Y is based on arrival time from A1/A, then the SI delay computed
based on that edge will see only one attacker, thus resulting in a smaller cross-talk delay
compared to the cross-talk delay computed based on the arrival time from A1/B. If a path is
reported from F2 in GBA and PBA, then PBA reports a larger delay at stage A1 due to this
optimism.
Figure 4-28
Figure 4-29 Analysis performed using actual path slew and arrival times of victim
This can be ensured by running GBA-SI in path overlap mode, by using the following
command:
set_si_mode -attacker_alignment path_overlap (default is path)
The selection of attackers also depends upon the relationships between the clocks. Presence
of multiple clock groups - physically exclusive, asynchronous, and synchronous - in the design
will influence attacker selection behavior of Tempus differently. Tempus by default considers
all the clocks as synchronous clocks if no clock group is mentioned. You can change the
behavior by using below command below:
set_si_mode -clocks {asynchronous | synchronous} (default is synchronous)
Synchronous clocks have defined phase relationships amongst each other. Timing windows
are considered while evaluating the attacker/victim relationship.
The default behavior can be overridden by using the following command. This provides an
option to specify the timing relationship between specific clock domains.
set_clock_groups
[-group <clock_list>]
[-name <name_list>]
[-logically_exclusive] | [-physically_exclusive] | [ [-asynchronous]]
The preferred order of clock relationships is physically exclusive (highest) and then
asynchronous.
The table below explains the relationships and impact of different clock grouping on STA and
SI analysis:
Impact on STA or
Relationship Description Impact on SI Analysis
Timing Paths
Logically Specifies that Makes false path between No impact on SI Analysis.
Exclusive there is no logical such clocks. Crosstalk impact will remain
path between the the same.
clocks even
though they exist.
Scenario1: In the following figure, the attacker is receiving timing window (TW) with respect
to the physically exclusive clock.
In this case, the attackers will be dropped even if the timing window overlaps with that of the
victim.
Scenario 2: In the following figure, the attacker has a timing window with respect to
Synchronous as well as Physically Exclusive clocks to the victim.
In this case:
■ Timing windows with respect to physically exclusive clocks to victim will be dropped
(CLK2) and victim-attacker relationship is determined using the attacker timing window
with respect to only synchronous clock (CLK3).
■ Victim timing window (with respect to CLK1) overlapping is checked with attacker timing
window (with respect to CLK3). As they do not overlap, attacker will not impact the victim.
During SI analysis Tempus introduces some pessimism when attackers that cannot logically
attack together are allowed to attack. Tempus by default assumes that all attackers can switch
together in a direction to cause a worst case delay (causing a slowdown) or speed up of
transition on the victim. But in some cases, there could be logical relationship between the
signals, that is, attackers might not actually switch together in the same direction.
Tempus performs logical correlation for inverters and buffers, except complex gates that are
not included in logical correlation.
The following examples show some of the scenarios that logical correlation can handle.
Exclusive sets can be {A1, A3} and {A2, A4}. Here, attackers A1 and A3 will be switching in
one direction, whereas A2 and A4 will switch in the opposite direction, as shown in the figure
below.
In max analysis mode, attackers A1 and A4 can be excluded. Because, these nets cannot
switch in the opposite direction to the victim to increase the delay.
In min analysis mode, attackers A2 and A3 can be excluded. Because, these nets cannot
switch in the same direction as the victim to decrease the delay.
If the number of inverters on each branch does not differ by a multiple of 2, then either A1 or
A2 will be used as an attacker, as shown in the figure below.
Waveform Computation
SI impact on delay (or glitch for glitch analysis) depends primarily on the following factors:
■ Victim Slew
■ Attackers’ Slew
■ Victim coupling cap to ground cap ratio
■ Relative switching direction for victim/attacker
■ Arrival windows of attackers/victim nets
SI impact on delay is performed in four steps. The first three steps will be applicable for SI
Glitch analysis as well.
■ Determine the slew of possible attackers and victim nets in their respective directions.
■ Determine the alignments of overlapping attackers to compute the worst impact.
■ Align all attackers at their respective positions.
■ Compute the stage delay.
Tempus implicitly considers attacker slew degradation by including the attacker's distributed
parasitic network in the simulation.
Tempus determines the fastest and slowest slew possible in each direction (rise/fall) at every
node in the design. For max delay analysis, the slowest slew for victim and the fastest slew
(in opposite direction of victim slew) for attackers will be used, as shown in the figure below.
Figure 4-35 Determine slew for max delay and min delay
For min delay analysis, the fastest slew for victim and the fastest slew (in the same direction
of victim slew) for attackers will be used, as shown in the figure above.
Tempus aligns fully overlapping attacker’s switching time in a way that creates worst impact
of each attacker on the victim receiver at the same time. Tempus computes the time of flight
for each attacker by individually switching each of them. The time of flight is the time between
the attacker switching time at the driver output and the corresponding glitch peak time at the
victim receiver input.
Tempus computes the delay from each attacker to the victim for peak alignment, as illustrated
in the figure below.
To compute time of flight for attacker A1, a voltage source with a slew rate, that is either
calculated internally or annotated from static timing analysis, is applied at attacker A1 driver
output while keeping all other attackers and victims silent.
Tempus calculates the delay from the 50 percent point of the switching attacker A1 at the
driving pin (ta1), to the time the glitch effect on the victim receiver is maximum (tva1). For
attacker A1, the delay is tva1-ta1.
Similarly, Tempus calculates the delay from the 50% point of the switching attacker A2 at the
driving pin (ta2), to the time the glitch effect on the victim is maximum (tva2). For this case,
attacker A1 will be grounded. So, for attacker A2 the delay is tva2-ta2. These two delays can
be different if one attacker is closely coupled to the near end of the victim wire, and the other
attacker is closely coupled to the far end of the victim wire, and the victim wire is long.
Tempus aligns the relative switch times of the fully overlapping attackers according to their
time of flights, such that their individual peak at victim receiver input occurs at the same time.
The attacker relative alignment will be (tva2-ta2) - (tva1-ta1) such that the peak due to attackers
A1 and A2 at the victim receiver input occurs at the same time, as shown in the figure below.
Figure 4-38 Aligning Attackers to Have Worst Impact at Victim at Same Time
As a final step to compute the stage delay with SI, a transition is applied at the victim receiver,
and the attacker’s impact is evaluated across the victim slew to compute the worst-case stage
delay.
In the figure below, the delay at the victim’s receiver output is measured by considering the
attackers across the victim slew. This will result in a change in the delay at the victim receiver’s
input. Tempus computes different delays as tv2a’, tv2b’, tvc2’, and so on for different victim
alignment, with respect to attackers. The one resulting in the worst delay will be considered
for the worst-case stage delay computation as tv2’. Assuming that tv2 is the base delay for this
stage, that is when all the overlapping attackers of this victim are silent. The delta delay will
be (tv2’ - tv2). This difference becomes the SI effect on the delay results (either slow down or
speed up).
If an attacker net is unconstrained, then Tempus does not consider timing windows of such
nets for attacker selection. That means an unconstrained attacker is always selected in SI
analysis, that is, timing window is infinite for these unconstrained nets. This makes SI analysis
more pessimistic, but bounding.
To turn this off and use a constrained timing window, you can set set_si_mode -
unconstrained_net_use_inf_tw to false. The default is true.
Constraining SI Analysis
SI analysis adheres to SDC constraints. However, you can additionally specify constraints on
SI analysis to control whether a net can be an attacker or not. To do this, you can use the
set_quiet_attacker command. For example,
set_quiet_attacker -victim vic -attacker {att1 att2} -transition rise
This software ignores an attacker for certain edges when in reference to the victim.
The SI impact on delay is computed based on the timing arc through which the path is
traversing.
By default, Tempus calculates the delay and SI for each arc. If you choose to view the SI delay
separately, it will show annotated to each arc. This helps in reducing pessimism on paths that
do not come through the worst arc.
The report_timing command, by default, does not separate the delta delay on data (delta
delay is always separated for clock). You can set the incr_delay option of the
report_timing_format global variable to display the delta delays of nets. It is
recommended to use the report_timing –net parameter for generating comprehensive
reports. For example,
tempus > set_global report_timing_format {hpin cell slew incr_delay delay arrival}
tempus > report_timing –net
--------------------------------------------------------------------------------
Path 1: VIOLATED Setup Check with Pin seg3/u9/CK
Endpoint: seg3/u9/D (v) checked with leading edge of 'CLK_W_3'
Beginpoint: seg3/u3/Q (v) triggered by leading edge of 'CLK_W_3'
Path Groups: {CLK_W_3}
Other End Arrival Time 1.029
- Setup 0.153
+ Phase Shift 2.000
- Uncertainty 1000.000
= Required Time -997.124
- Arrival Time 3.839
= Slack Time -1000.963
Clock Rise Edge 0.000
+ Clock Network Latency (Prop) 1.202
= Beginpoint Arrival Time 1.202
----------------------------------------------------------------
Pin Cell Slew Incr Delay Arrival
Delay Time
----------------------------------------------------------------
seg3/u3/CK - 0.094 - - 1.203
seg3/u3/Q DFF 0.340 0.000 0.368 1.571
seg3/u4/A -> BUF 0.341 0.000 0.011 1.581
seg3/u4/Y BUF 0.003 0.000 0.165 1.746
seg3/u5/A INV 0.005 0.000 0.003 1.749
seg3/u5/Y INV 0.516 0.000 0.225 1.975
seg3/u6/A INV 0.627 0.000 0.317 2.292
seg3/u6/Y INV 0.913 0.000 0.634 2.926
seg3/u7/A BUF 0.914 0.000 0.008 2.934
seg3/u7/Y BUF 0.655 0.000 0.492 3.426
seg3/u7_a/A BUF 0.659 0.000 0.121 3.547
seg3/u7_a/Y BUF 0.003 0.000 0.269 3.817
seg3/u8/A BUF 0.003 0.000 0.001 3.818
seg3/u8/Y BUF 0.042 0.000 -0.009 3.809
seg3/u9/D DFF 0.071 0.000 0.031 3.839
-------------------------------------------------------------
You can use the following commands to report delta delay on data separately under the Incr
Delay column in the timing report:
tempus > set_si_mode -separate_delta_delay_on_data true
tempus > report_timing –net
---------------------------------------------------------
Path 1: VIOLATED Setup Check with Pin seg3/u9/CK
Endpoint: seg3/u9/D (v) checked with leading edge of 'CLK_W_3'
Beginpoint: seg3/u3/Q (v) triggered by leading edge of 'CLK_W_3'
Path Groups: {CLK_W_3}
Other End Arrival Time 1.029
- Setup 0.153
+ Phase Shift 2.000
- Uncertainty 1000.000
By default, Tempus calculates the delay, including SI for each arc, and if you choose to view
the SI delay separately, it will show as annotated to each arc. Alternatively, you can choose
to annotate the SI delay solely to the net. You can use the following command to lump the
delta delay all onto the net:
tempus > set_si_mode -delta_delay_annotation_mode lumpedOnNet
tempus > report_timing
-----------------------------------------------------------------------
Path 1: VIOLATED Setup Check with Pin seg3/u9/CK
Endpoint: seg3/u9/D (v) checked with leading edge of 'CLK_W_3'
Beginpoint: seg3/u3/Q (v) triggered by leading edge of 'CLK_W_3'
Path Groups: {CLK_W_3}
Other End Arrival Time 1.029
- Setup 0.153
+ Phase Shift 2.000
- Uncertainty 1000.000
= Required Time -997.124
- Arrival Time 3.839
= Slack Time -1000.963
Clock Rise Edge 0.000
+ Clock Network Latency (Prop) 1.202
= Beginpoint Arrival Time 1.202
---------------------------------------------------------------------
Pin Cell Slew Incr Delay Arrival
Delay Time
---------------------------------------------------------------------
seg3/u3/CK - 0.094 - - 1.202
seg3/u3/Q DFF 0.340 0.000 0.295 1.498
seg3/u4/A -> BUF 0.341 0.075 0.084 1.581
seg3/u4/Y BUF 0.003 0.000 0.165 1.746
seg3/u5/A INV 0.005 0.000 0.003 1.749
seg3/u5/Y INV 0.516 0.000 0.106 1.855
seg3/u6/A INV 0.627 0.279 0.437 2.292
seg3/u6/Y INV 0.913 0.000 0.609 2.901
seg3/u7/A BUF 0.914 0.030 0.033 2.934
seg3/u7/Y BUF 0.655 0.000 0.441 3.375
seg3/u7_a/A BUF 0.659 0.113 0.172 3.547
seg3/u7_a/Y BUF 0.003 0.000 0.269 3.816
seg3/u8/A BUF 0.003 0.000 0.001 3.818
seg3/u8/Y BUF 0.042 0.000 -0.017 3.801
seg3/u9/D DFF 0.071 0.017 0.038 3.839
--------------------------------------------------------------------
You can use the report_delay_calculation command to report the delay calculation
information for a cell or net timing arc. When -si parameter is specified, the software will
report the SI components, including incremental delay. For example,
tempus > report_delay_calculation -from seg3/u5/Y -to seg3/u6/A -si
-------------------------------------------------------------
From pin : seg3/u5/Y
Cell : INV
Library : cell_w
To pin : seg3/u6/A
Cell : INV
Library : cell_w
Base or SI: SI delay
Delay type: net
-----------------------------------------
RC Summary for net seg3/n5
----------------------------------------
Number of capacitance : 17
Net capacitance : 0.293534 pF
Total rise capacitance: 0.320849 pF
Total fall capacitance: 0.320780 pF
Number of resistance : 17
Total resistance : 567.671387 Ohm
-----------------------------------------
SI information for rise
------------------------------------------------------
Victim timing window : 1.3501 ns 2.3798 ns CLK_W_3
---------------------------------------------------------------------------------
Attacker Status Direction Slew Coupling cap Fanout Voltage Bump
Timing window Clock
---------------------------------------------------------------------------------
You can use the report_noise –delay max –nets netName command to report
incremental delay on nets. For example,
tempus > report_noise -delay max -nets seg3/n5
***************************************************************
Noise Delay Report (for view default_emulate_view)
Signal Integrity information can be reported using SI attributes for both graph-based as well
as path-based analysis. These attributes can be queried using the get_property
command.
The use model for using SI attributes for reporting is given below:
The following example shows a query on signal integrity attributes for timing points:
set path [report_timing -through $pin -retime path_slew_propagation -collection ]
set tps [ get_property $path timing_points ]
foreach_in_collection point $tps {
set x [ get_property $point si_object ]
set vic_name [ get_property $x hierarchical_name ]
puts "victim: $vic_name"
set num_agg [ get_property $x num_attackers ]
The above use model is valid for graph-based analysis also. Additionally, for GBA the SI
attributes can be reported on the receiver input pin directly instead of timing points. Each pin
has a property si_victim, which contains the victim SI information. The following example
shows the usage of si_victim, where the number of active attackers are being printed for
both rise and fall transitions in maximum delay analysis:
set vicArray [get_property [get_pins $pin] si_victim –view $view]
foreach_in_collection vic $vicArray {
set view_type [get_property $vic view_type]
set tran [get_property $vic transition]
if {$view_type == "Late"} {
if {$tran == "Rise"} {
set num_att [get_property $vic num_active_attackers]
puts "number of active attackers for rise transition: $num_att"
}
if {$tran == "Fall"} {
set num_att [get_property $vic num_active_attackers]
puts "number of active attackers for fall transition: $num_att"
}
}
}
In this example, coupling from attacker A causes a significant glitch on the reset signal so that
it resets the flip-flop and destroys the stored logic state. This problem does not show up in
logic simulation, formal verification, or timing analysis. Isolating the source of a noise-induced
functional problem can be very time consuming and may take a few months of debugging.
Tempus calculates and reports the glitch induced in the design due to these scenarios.
Tempus performs glitch analysis by analyzing each potential victim net from primary inputs to
primary outputs. The analysis of each net is based on calculating the worst-case glitch
waveforms that can occur at the input pins of each of the victim net's receiving cells. The
receiver output peak of each receiving cell instance is computed by analyzing the propagation
of the glitch waveform from the receiver's input through the first stage in the receiver. Tempus
assumes all worst-case crosstalk scenarios are possible unless timing windows are used.
Tempus checks for glitch receiver peak and propagates the glitch at a single stage and checks
to see if the noise glitch exceeds the failure criteria. This greatly reduces the number of
potential false alarms as it utilizes the inherent glitch filtering properties of CMOS logic.
Glitch Type
There are two types of glitch depending on victim state and attacker switching direction.
Glitch between ground and power rail voltages can cause logic failure, if they exceed logic
thresholds of the technology.
The following sample script shows the steps to perform glitch analysis:
■ Load the timing libraries (.lib) and noise data (cdB, ECSM-Noise, or CCS-Noise):
read_lib typ.lib -cdb typ.cdB
■ Schedule reading of a structural, gate-level verilog netlist:
read_verilog top.v
■ Set the top module name, and check for consistency between Verilog netlist and timing
libraries:
set_top_module dma_mac top
■ Set the proper technology node:
set_design_mode -process 16
■ Load the timing constraints:
read_sdc constraints.sdc
■ Load the cell parasitics:
read_spef top.spef.gz
■ Enable signal integrity (SI) analysis.
set_delay_cal_mode –siAware true
■ Perform glitch analysis and enable the glitch reports to be generated
set_si_mode –enable_glitch_report true
■ Enable glitch propagation:
set_si_mode -enable_glitch_propagation true
■ Perform glitch analysis:
update_glitch
■ Generate SI glitch report:
report_noise-txtfile glitch.txt
whose timing is such that they do not overlap are not combined. A unique worst-case glitch
is calculated for each receiver (fanout) of the victim. Once the worst-case glitch is determined,
Tempus performs a number of additional steps to determine if this glitch is harmful to the
functionality of the design being analyzed.
When worst glitch is computed, Tempus checks if a glitch can result in failure. Tempus uses
two criteria for glitch failure by measuring the glitch at input and output of receiver cell, as
shown in the figure below.
■ Receiver Input Peak (RIP) Check
■ Receiver Output Peak (ROP) Check
If a net has a receiver without noise data, then the receiver input peak (RIP) is compared
against:
set_si_mode -input_glitch_threshold (or -input_glitch_vh_threshold -
input_glitch_vl_threshold) value
or
set_glitch_threshold -failure_point input –threshold_type failure –value
float
In this case, failure can occur if RIP is greater than the tolerance threshold value.
Tempus has the capability to compute glitch impact one step inside the cell, that is, at the
output of the first Channel Connected Component (CCC) in the cell. This is known as ROP
(Receiver Output Peak) analysis. Since CMOS logic acts as a low pass filter, it attenuates the
glitch, so that the glitch checked at the output of the first CCC may be less than the glitch at
the input of the cell. Using the ROP to determine failure may reduce the number of violation
counts.
Note: In some cases, the ROP may be more than the RIP. The ROP can be as high as VDD
in case of a full rail RIP, so any result close to the VDD ROP can be considered reasonable.
If a net has receiver with noise data (cdB or ECSM-Noise or CCS-Noise), then Tempus
propagates the glitch one stage and calculates the Receiver Output Peak (ROP). If the arc is
from input to output of the cell, then failure will occur if ROP is greater than the values
specified using the following command:
set_si_mode -receiver_peak_limit (or -receiver_clk_peak_limit, -
receiver_latch_peak_limit) double
or
set_glitch_threshold –failure_point last –pin_type {clock | data | latch | all}
–threshold_type failure –value float
If the arc is from an input to an internal node of a combinational cell, by default failure will
occur if ROP is greater than 30% of the vdd value or if it is greater values specified using the
following command:
set_glitch_threshold –failure_point input –pin_type {clock | data | latch | all} –
threshold_type failure –value float
If the arc is from an input to an internal node of a sequential cell, then failure will occur if ROP
is greater than the value specified using the following command:
set_si_mode –receiver_latch_peak_limit double
or
set_glitch_threshold –failure_point last –pin_type latch –threshold_type failure
–value float
Figure 4-45 ROP (Receiver Output Peak) for single stage cell
In case of single stage receiver cell, as shown in the figure above for Victim Vic, ROP will be
performed at the output of receiver cell.
While in case of multi-stage cell, as shown in the figure above for Victim V1, ROP will be
performed at the output of the first stage of receiver cell XBUF3.
ROP is computed using the VIVO (Voltage In Voltage Out) current tables from the noise
library (cdB), ECSM-N library, or CCS-N library. VIVO tables are characterized for single
CCC. Tempus uses VIVO information, stored for the corresponding input pins, for ROP
computation.
Glitch Propagation
Driver weakening is needed for single-stage cells, not for multi-stage cells. In single-stage
cells, when ROP is not failing, driver weakening may affect the next stage if the coupling on
the next stage is big enough to be kept. In multi-stage cells, there is no coupling internal to
the cell so glitch propagation does not need to be taken into account. This is because a non-
failing glitch is not likely to propagate to the output of the cell.
If glitch propagation is enabled, Tempus will propagate the glitch through single-stage cells
as long as it is not failing. A glitch is deemed failing when the receiver output peak is greater
than the threshold value specified using the following command:
set_si_mode –receiver_peak_limit (or -receiver_clk_peak_limit
-receiver_latch_peak_limit) double
The failing receiver output peaks are not propagated. Even if the input glitch is not large
enough to propagate to the output of the single-stage cell, it weakens the driver such that
when the output of the cell is attacked, the coupling noise is much larger. Tempus models
driver weakening when glitch propagation is enabled.
Single-stage glitch propagation and driver weakening is enabled automatically when using
the update_glitch command or by specifying the set_si_mode -
enable_glitch_propagation true command before using the report_timing or
update_timing commands.
Glitch impact computation starts with the first net in the path and traced downstream. A stage
is analyzed taking into account the propagated glitch from last stage and the coupling of
current stage. You can compare the total glitch seen at the receiver with the failure threshold.
If the glitch exceeds failure threshold, then failure is flagged at the receiver and glitch impact
from this stage is not propagated further to downstream logic. If the glitch is less than failure
threshold, then the glitch impact at this stage is propagated to downstream logic.
Iteration 0
Iteration 1
■ Identify the attackers which are coupled to the victim net.
■ Analyze each attacker individually for glitch peak on victim.
■ Determine the attackers which can have glitch peak greater than a threshold of victim
voltage.
■ Estimate the combined impact of all such attackers, assuming infinite timing window, on
victim net for glitch.
■ Update the arrival times and compute slew values for all the nets in the design.
Iteration 2:
■ Select the victim nets. A net will be reselected if any of the following criteria is met:
❑ the net is violating
❑ the net has a glitch greater than 30% VDD
❑ the net has a glitch smaller than 30%VDD, but is capable of propagating
downstream.
Only those nets that are non-violating, have a glitch smaller than 30%VDD and are
incapable of propagating, will not be reselected in the 2nd iteration.
■ Analyze each attacker individually for glitch peak using slew/timing windows computed
above. If the set_si_mode -use_infinite_TW true setting has been specified, then
infinite timing windows is used in this iteration also.
■ Determine the attackers which can produce glitch peak greater than the threshold of
victim voltage.
■ Identify the attackers which can produce worst impact on the victim net depending on
timing window overlap, attacker slew, and other constraints.
■ Perform combined simulation with identified attackers and peak aligned to compute the
worst glitch at receiver input of victim net.
The top section Glitch Violations Summary shows a summary of each type of violation count.
■ Peak value 1071.972 mV is the glitch at the receiver input pin (RIP).
■ Level can be VH or VL, which shows the type of glitch at receiver input pin. VH is glitch
under power rail and VL is glitch over ground rail.
■ The pin name xv5/A below VictimNet is the receiver input pin having glitch.
■ Receiver output peak (ROP) value 1226.940 is the glitch at the receiver output and
396.000 is the failure threshold for ROP. NOR4_F4 is the receiver library cell.
■ Constituents provide the details of attackers.
❑ Source column: Reports propagated noise as “Prp”.
❑ Status column: The Status column shows the abbreviated attacker status and
filtered reason, as given below:
SY: Synchronous
INF: Attacker with infinite timing window
PE: Filtered due to physical exclusion
UF: Filtered by user
SB: Filtered due to small bump
TA: Filtered because of timing window does not overlap
LC: Filtered due to logical correlation
ACT: Attacker is Active.
In this report glitch at receiver input pin u9/D is more than the threshold.
■ You can use the report_noise -histogram parameter to print a violation summary
and histogram of RIP/ROP. A detailed glitch report is not printed.
tempus > report_noise -histogram -txtfile rip_rop.hist
--------------------------
Glitch Violations Summary :
--------------------------
Number of DC tolerance violations (VH + VL) = 0
Number of Receiver Output Peak violations (VH + VL) = 5
Number of total problem noise nets = 3
Receiver Input Peak Histogram for View : default_emulate_view
Percentage of Receiver Vdd No. of Receivers
[ 0, 10 ) 0
[ 10, 20 ) 0
[ 20, 30 ) 0
[ 30, 40 ) 0
[ 40, 50 ) 1
[ 50, 60 ) 1
[ 60, 70 ) 2
[ 70, 80 ) 1
[ 80, 90 ) 1
[ 90, 100 ) 0
Receiver Output Peak Histogram for View : default_emulate_view
Percentage of Receiver Vdd No. of Receivers
[ 0, 10 ) 0
[ 10, 20 ) 1
[ 20, 30 ) 0
[ 30, 40 ) 1
[ 40, 50 ) 0
[ 50, 60 ) 0
[ 60, 70 ) 1
[ 70, 80 ) 0
[ 80, 90 ) 0
[ 90, 100 ) 3
------------------------------
Exceptions
The following command helps in specifying certain attackers as quiet for the victim net. This
implies that the net mentioned in this command will not be considered as an attacker for a
particular victim net, or all victim nets.
■ set_quiet_attacker
You can use the following parameter to specify a list of victim/attacker pairs to be made quiet:
set_quiet_attacker -victim string
If the -attacker parameter is not used, then all the attackers are made silent for the specified
victim.
You can use the following parameter to specify the victim/attacker pair to be made quiet:
set_quiet_attacker -attacker string
If the -victim parameter is not used, then the given nets are made silent (as attackers) for
all the victim nets in the design.
tempus > set_quiet_attacker -attacker attc4 -victim vic3
tempus > update_glitch
tempus > report_noise -nets vic3
-------------------------------------------------------------------------
Glitch Violations Summary:
--------------------------
Number of DC tolerance violations (VH + VL) = 0
Number of Receiver Output Peak violations (VH + VL) = 0
Number of total problem noise nets = 0
-------------------------------------------------------------------------
Peak(mV) Level TotalCap(fF) TotalArea Width(ps) Vdd(mV) Library VictimNet
667.128 VH 232.84 81.45 244.167 1320 ecsmt xv5/A {vic3}
Receiver output peak:
In the above noise report, status of attacker attc4 is changed to UF (User Filtered).
■ set_annotated_glitch
❑ The following parameter allows you to specify the port/pin name at which glitch
needs to be annotated:
set_annotated_glitch -port
If a glitch is annotated at the driver output/input port, then it is combined with the
coupling of the stage. If a glitch is annotated at the receiver input, then it overrides
the glitch at receiver input with the annotated glitch.
❑ The following parameters allow you to specify the type of glitch waveform (vl or vh)
to be annotated:
set_annotated_glitch -vl_glitch/-vh_glitch {waveform with time stamp
and voltage value}
The vh_glitch waveform should also be specified starting from “0”. The software
automatically inverts the waveform depending on receiver voltage.
The waveform is specified as PWL with multiple time and voltage points, such as,
{time-1 voltage-1 time-2 voltage-2…..}
For VH, the wave should be defined starting from 0V, the software automatically
inverts it when applying according to the victim voltage.
The software overrides the glitch value showing up at RIP with the annotated glitch, as glitch
is annotated at the receiver input.
set_noise_lib_pin
This command helps in mapping noise properties of a library cell pin to other library cell pins.
The software copies the noise properties of a buffer type cell for a macro cell pin, for which a
noise property has not been defined.
■ set_noise_lib_pin -from <>
For example,
set_noise_lib_pin -from cell_w_1.6.lib/CLKBUF/A -to memory.lib/MEM_256x32/
A
The software will map the noise properties from cdB linked to the specified library, even if
there is a difference in voltage values. You must ensure that the voltage values are similar
while mapping the properties.
The glitch types VL and VH, mentioned in Table 1, can result in functional failures, if the glitch
exceeds the logic threshold.
The glitch types, VLU and VHO, are known as undershoot and overshoot, respectively. While
VLU (undershoot) and VHO (overshoot) do not cause any immediate silicon failure, exposure
to VLU/VHO glitch over a period of time causes degradation of the gate-oxide, which
increases the threshold voltage (Vth), and in turn can cause silicon failure.
Tempus performs overshoot-undershoot glitch analysis by analyzing each potential victim net
in the design. The analysis of each net is based on calculating the worst-case glitch waveform
that can occur at the input pins of each of the victim nets' receivers.
The VLU/VHO type of noise cannot propagate through a transistor, and therefore, Tempus
does not perform the glitch propagation and ROP (Receiver Output Peak) computation in
overshoot-undershoot analysis.
You can also use the update_timing and report_timing commands for overshoot/
undershoot glitch analysis and reporting.
Reporting
read_spef top.spef.gz
■ Enable signal integrity (SI) analysis:
set_delay_cal_mode –siAware true
■ Enable the Overshoot-Undershoot Analysis:
set_si_mode -enable_overshoot_undershoot_glitch true -
enable_glitch_report true
■ Set the failure threshold for the VLU and VHO type glitch:
set_glitch_threshold -glitch_type vlu -value 0.3
set_glitch_threshold -glitch_type vho -value 0.3
Or
■ Set the failure threshold globally for both VLU and VHO by using the following command:
set_si_mode -input_glitch_threshold 0.3
In the above commands, the value specified is the ratio to VDD, that is, failure will occur
if the overshoot/undershoot glitch height is greater than the mentioned threshold value
times VDD. The default value is 0.4.
If both set_glitch_threshold and set_si_mode -input_glitch_threshold
commands have been specified, then the set_glitch_threshold command setting will
take the precedence.
■ Perform overshoot-undershoot glitch analysis:
update_glitch
■ Generate the overshoot/undershoot glitch report:
report_noise -failure -txtfile vlu_vho.rpt –overshoot_undershoot
Here, only the VLU/VHO type of glitches will be printed in the report. For VL/VH type of glitch
numbers, you can re-run the report_noise command without the -overshoot_undershoot
parameter.
4.3.1 Overview
The Tempus software provides different timing analysis modes and accordingly performs
calculations for setup and hold checks for each mode. For a better understanding of these
modes, it is important to understand the impact of early and late paths in a design, as
explained in the following section.
The following figure shows a setup check with late launch clock and early capture clock:
Figure 4-54 Illustration of Setup Check- Setup check with early and late paths
The following figure shows a hold check with early launch clock and late capture clock.
Figure 4-55 Illustration of Hold Check - Hold check with early and late paths
In this mode, the Tempus software uses a single set of delays (using one library group) based
on one set of process, temperature, and voltage conditions.
To set the timing analysis mode as single, you can use the following command:
set_analysis_mode -analysisType single
In single analysis mode, only maximum delay values are used for delay calculation. The -max
options of commands in constraints are used for both minimum and maximum analysis in
single analysis mode. For example, the set_annotated_delay –max 10 command will be
used for both minimum and maximum analysis.
Even with single library group, cell delay can have variation in maximum delay based on
sdf_cond, timing derates, and other inputs. In single analysis mode, early and late path delays
are the minimum and maximum, respectively, of this range of maximum delay.
For setup check, the software checks the late launch clock and late data paths against early
capture clock path.
For zero slack value in a setup check, the following condition should be met:
launch clock late path (tLAUNCH_CLK) + data clock late path (tDATA_DLY) <= capture clock early path
(tCAPTUE_CLK) + clock period - setup
Figure 4-57 on page 120 shows the setup check on a path from FF1 to FF2.
The software uses a library to calculate the maximum delay. For setup check, the software
considers two paths between the two registers, FF1 and FF2 - the late path delay is used to
calculate slack during setup check.
For hold check the software compares the early arriving data against the late arriving clock
at the endpoint.
For zero slack value in a hold check, the following condition should be met:
launch clock early path (tLAUNCH_CLK) + data early path (tDATA_DLY) => capture clock late path
(tCAPTUE_CLK) + hold
The following example shows the hold check on a path from FF1 to FF2.
To perform timing analysis in single analysis mode, you need to perform the following steps:
■ Set the analysis mode to single, setup and propagated clock mode:
set_analysis_mode -analysisType single -checkType setup
■ Generate the timing reports for setup:
report_timing
■ Set the analysis mode to hold:
set_analysis_mode -checkType hold
■ Generate the timing reports for hold analysis:
report_timing
Alternatively, you can use the report_timing –early command with the
set_analysis_mode -checkType setup parameter to report hold paths.
In best-case worst-case (BC-WC) analysis mode, the software uses delays from the
maximum library group for all the paths during setup checks and minimum library group for
all the paths during hold checks. In this mode, the Tempus software considers two operating
conditions and checks both operating conditions in one timing analysis run. To set the timing
analysis mode as BC-WC, you can use the following command:
set_analysis_mode -analysisType bcwc
You can use the set_clock_latency constraint to set the source latency for a clock in both
ideal and propagated mode for setup and hold checks. You can also use this constraint to set
the network latency for an ideal clock. The specified source or network latency affects the
early and late clock paths for both capture and launch clocks for both minimum and
maximum operating conditions.
Note: The software considers the network latency, specified using the set_clock_latency
-max (or -min) command, for ideal clocks only. In propagated mode, actual clock propagated
latency values will be used.
For setup check, the software calculates delay values from the maximum library group for
data arrival time, and network delay of both launch and capture clocks (in propagated mode).
The source latency in both ideal and propagated modes for setup checks is defined in the
constraints used by various clock paths as follows:
The network latency in ideal mode for setup checks is defined in the constraints used by
various clock paths as follows:
The following example shows the setup check on a path from FF1 to FF2.
The software uses the max library to scale all delays at WC conditions. The following values
are assumed in this example:
For hold check, the software uses the delay values from the min library for the data arrival
time, and network delay of both launch and capture clocks (in propagated mode).
The source latency in both ideal and propagated modes for hold checks is defined in the
constraints used by various clock paths as follows:
The network latency in ideal mode for hold checks is defined in the constraints used by
various clock paths as follows:
Note: You can also use one library containing two operating conditions in this mode.
The following example shows the hold check on a path from FF1 to FF2.
The software uses the min library to scale all delays at BC conditions.
To perform timing analysis in BC-WC analysis mode, complete the following steps:
■ Set the analysis mode to BC-WC:
set_analysis_mode -analysisType bcwc -checkType setup
■ Generate the timing reports for setup:
report_timing
■ Set the analysis mode to hold and propagated clock mode:
set_analysis_mode -checkType hold
■ Generate the timing reports for hold:
report_timing
Alternatively, you can use the report_timing –early command with set_analysis_mode
-checkType setup option to report hold paths.
In on-chip variation (OCV) mode, the software calculates clock and data path delays based
on minimum and maximum operating conditions for setup analysis and vice-versa for hold
analysis. These delays are used together in the analysis of each check.
The OCV is the small difference in the operating parameter value across the chip. Each timing
arc in the design can have an early and a late delay to account for the on-chip process,
voltage, and temperature variation.
In OCV mode setup check, the software uses the timing delay values from the late library set
and operating conditions for the data and the launch clock network delay. The software uses
the delay values from the early library set and operating conditions for the capturing clock
network delay assuming that the clocks are set in propagated mode.
Note: You can use one library instead of both maximum and minimum libraries, and apply
timing derates for performing min/max analysis, respectively.
The source latency in both ideal and propagated modes for setup checks is defined in the
constraints used by various clock paths as follows:
The network latency in ideal mode for setup checks is defined in the constraints used by
various clock paths as follows:
The following example shows the setup check on a path from FF1 to FF2.
The software uses the max library for all late path delays and min library for all early path
delays.
For OCV hold check, the software uses the timing delay values from the early library set and
operating conditions for the data arrival time and launch clock network delay. The software
uses delay values from the late library set and operating conditions for the capturing clock
network delay assuming that the clocks are set in propagated mode.
The source latency in both ideal and propagated modes for hold checks is defined in the
constraints used by various clock paths as follows:
The network latency in ideal mode for hold checks is defined in the constraints used by
various clock paths as follows:
The following example shows the hold check on the path from FF1 to FF2.
The software uses the max library to scale all delays at WC conditions and minimum library
to scale all delays at BC conditions.
When the set_timing_derate command is used, the following paths in OCV mode are
affected:
You can introduce early or late delay variations by using the set_analysis_mode -
analysisType onChipVariation command or by using the set_timing_derate
command for early and late clock paths. In CPPR calculations, the difference between late
and early delays (for the common clock segment between launch and capture clock path) is
calculated first and then this number is adjusted in the slack calculations to remove the
pessimism, which existed because of considering common clock path to be both late and
early at the same time. To remove this pessimism in propagated clock mode, you can use the
following command:
set_analysis_mode -cppr true
Consider the following figure for setup check between flops FF1 and FF2.
The setup check equation for the example in the figure above with pessimism (without CPPR)
is as follows:
where tcp is the clock period and tsu is the setup requirement at D pin of flip-flop FF2.
The above setup check equation incorrectly implies that the common clock network, B1, can
simultaneously use maximum delay for the launch clock late path (clock source to FF1/CLK)
and minimum delay for the capture clock early path (clock source to FF2/CLK). Using the
CPPR to remove this pessimism, the setup check equation is as follows:
where tcppr is the difference in the maximum and minimum delay from the clock source to the
branching node.
If a design contains re-convergent logic on the clock path, then the timing analysis software
might assume certain pessimism while calculating slack. The following figure shows a circuit
in which timing analysis is performed in single analysis mode.
In this case, if the set_case_analysis command has not been set at point S of the
multiplexer, the timing analysis software will assume different delay values for early and late
paths. For example, if common early clock path from the clock source to the common clock
point has a delay of 0.5ns, and the same common late clock path has delay of 1ns, then a
pessimism equal to 0.5ns is introduced in the design. The above pessimism is not specific to
single analysis mode only; it also applies to best-case/worst-case and on-chip variation
methodologies. You can use CPPR to remove pessimism introduced due to reconvergence.
The Tempus software uses multiple global variables to control CPPR behavior. These can be
changed based on the user requirements. When these global variables are changed, there
can be changes in common clock path pessimism removal in terms of accuracy, common
point selection, SI behavior, and so on.
Tempus uses a default threshold of 20ps during pessimism removal. This means that 20ps of
uncertainty remains in the analysis. To set the threshold value you can use
the timing_cppr_threshold_ps global variable. When you set this global variable to a
specified value, all the paths may be reported without having pessimism removed by the given
value of the global variable. During SI analysis, the CPPR behavior for setup and hold checks
can be controlled by setting the timing_enable_si_cppr global variable.
When CPPR adjustment is made, the timing slack improvement is seen as pessimism and is
displayed as “CPPR Adjustment” in the timing report.
In the example given below, “c2” is a common clock point after which the clock diverges:
Path 1: MET Setup Check with Pin ff2/CK
Endpoint: ff2/D (v) checked with leading edge of 'clk'
Beginpoint: ff1/Q (v) triggered by leading edge of 'clk'
4.3.3.1 Overview
In on-chip variation (OCV) mode, the software uses the timing delay values from the late or
early library sets and operating conditions for the data, capture, and launch clocks. OCV
analysis uses a single constant derating factor. However, in actual Silicon, there can be lot of
sources of variation For example, variation of transistor length, distance, width, doping
amount, and so on. To model these, advanced on-chip variation (AOCV) analysis can be used
during timing analysis and optimization. AOCV analysis uses variable derating factors that
are based on the distance of the cell and logic depth. Depending on the number of logic levels
and placement locations, different derating factors can be used.
AOCV derating libraries are provided by library vendors, or can be characterized using
Cadence’s tool “Variety”. An AOCV factor is chosen so that when multiplied by the lib nominal
delay value, you get close to the mean ± 3 sigma value for that many stages in the path. As
number of stages in the path increases, the sigma value (the spread) relative to the mean
(nominal value) decreases on the order 1/sqrt(n). Due to which AOCV derate factor required
decreases.
The characterization data within either format is essentially the same - the differences are
mainly syntactic.
The external AOCV format is currently supported by third parties. For example,
For example,
The Cadence specific AOCV derating format is made of several sections allowing you to
customize how each table is applied:
Table Group
The Apply- tag can be used with either a net or cell descriptor to designate the table for use
in derating net delays or cell delays, respectively. If the Apply- tag is not specified, then the
table will be used for both net and cell delay derating. The Apply- tags are described below:
To designate a table for only net-based derating, you should specify:
Apply-Net
If you use the Object ID field to specify unique tables for specified libraries and/or library cells,
you should also specify Apply-Cell for these tables.
Table ID
The Table ID is a tag made up of up to three sub tags, which are used to further indicate to
the derating table to control early versus late, rise versus fall, and clock path versus data path.
{Early | Late}
Each table specifies Early or Late tags. Each object related to AOCV derating has both Early
and Late derating tables. AOCV derating of only early or late paths is not allowed. It is,
however, legal to use derating values of 1.0 for the tables.
By default, an Early or Late derating table is used to supply derating for both rising and falling
delays. If a unique derating for each transition is required, the -Rise or -Fall tag can be added
to the Table ID for more specific results.
{Early-Rise}
To configure a table for only rising delays on early paths, you should use Early-Rise sub tag.
{Late-Fall}
To configure a table for falling delays on late timing paths, you can specify Late-Fall.
[Clock | Data]
Derating tables can also be configured so that they are specific to clock path delays or data
path delays. This can be achieved by adding a final -Clock or -Data tag to the Table ID string.
In the case where there is an overlap in the table specification, the derating table with the
tightest specification is used.
Object ID
You can further control the AOCV derating tables to be applied to specific timing libraries or
library cell groups. The syntax also supports specifying design-level cell instances or nets,
however, these types of design-level references are not currently supported.
Note: The AOCV libraries are configured and stored in the system the same way as Liberty
timing libraries, however, only library or library-cell level derate factors are supported.
In the AOCV flow you can use the Cell Object ID to designate particular derating tables to be
used for specific library-level groups. An object expression using simple wildcard rules can be
used for a variety of selection criteria. For example, the following expression specifies a
derating table to be used for a specific library:
Cell stdcell/*
The following expression specifies a common derate table for a group of cells with similar
drive strength:
Cell stdcell/*1S
Cell stdcell/*4S
The following expression specifies a common derate factor for a group of libraries at the same
corner:
Cell *-P1V15T120/*
Table Voltage
In the future, an optional voltage designation for the table can be specified by adding the
Voltage specifier to the model description. You can specify several tables with different
voltage specifications within the same .aocv library file. When performing derating, the
system uses the table that matches the current operating voltage of the cell. If the operating
voltage of the cell does not exactly match one of the specified voltage points, then the
following are considered:
■ If the operating voltage is between the Voltage points of two derating tables, the system
will use linear interpolation to derive the proper derating factor.
■ If the requested voltage is large than the maximum Voltage table, then that table data will
be used without extrapolation.
■ If the requested voltage is lower than the minimum Voltage table, then the minimum
Voltage data is used without extrapolation.
■ To specify a voltage of 1.5Volts for the derating table, use a specification of:
Voltage 1.5
Derating Table
The AOCV format allows derating table specifications that are either one or two-dimensional
– the possible axes being Distance, the bounding box diagonal of that path, and Stage - the
stage count depth of the path. Although AOCV graph-based analysis supports stage-based
derating only, you may specify either a 1-D stage-based table, or a 2-D Stage x Distance
table.
When using a 2-D table in conjunction with AOCV graph-based stage-based only analysis,
the system will attempt to pick the proper row of the table based on the estimated chip and/
or core dimensions. If the software includes physical information, the chip and core size
The Stage and Distance keywords are added to the model to provide the axis points for the
table. The table rows represent “distance” variance and the columns “stage count”,
irrespective of the order in which stage and distance keywords are specified for the model.
These are explained below:
The following example shows a derating table with 5 Stage indices and 4 Distance indices:
Stage 1 2 3 4 5
Distance 500 1000 1500 2000
1.123 1.090 1.075 1.067 1.062
1.124 1.091 1.076 1.068 1.063
1.125 1.092 1.077 1.070 1.065
1.126 1.094 1.079 1.072 1.067
In case the stage or distance lookup value goes beyond the range of the table - either smaller
or larger, the system will use the last bound entry point. Extrapolation will not be performed
on either end of the axis.
SMSC Environment
In SMSC environment, the AOCV libraries can be read using the command below:
read_lib –aocv "myDerateLib.aocv.lib"
MMMC Environment
For example:
create_library_set –name slow –timing slow.lib –aocv test.aocv.lib
In case, the library set is already created , it can be updated to read the new aocv library or
update the existing library using the update_library_set command.
For example:
update_library_set –name slow –aocv test.aocv.lib
4.3.3.5 Stage Counts and their Properties for Launch and Capture Paths
Most cells in a clock path have both launch stage counts and capture stage counts. This
means a clock buffer exists in a launch path and a capture path simultaneously so the buffer
has its own launch stage count property and capture stage count property. This section
covers a comprehensive explanation for the launch stage count and capture stage count.
The following four timing paths in the figure below explain launch and capture stage counts:
■ The timing path from Input to RS/D (input to reg path)
■ The timing path from RS/CK to RT1/D (reg to reg path)
■ The timing path from RS/CK to RT2/D (reg to reg path)
■ The timing path from RT2/CK to output1 (reg to output path)
Graph-based AOCV analysis does choose a pessimistic situation so each cell has to its own
pessimistic property (only one value, not two or more values like PBA) such as the late launch
stage count for cell, early capture stage count for cell, and so on.
The following figure includes the launch cell and net stage counts:
The stage counts of C1 and C2 for launch paths in the above example are as follows:
The last path is the shortest launch path that includes C1 and C2 and each launch cell stage
count is 4 (C1, C2, C4, and RT2).
In case of the launch path, which includes C3/RS/U1, each stage count of C3/RS/U1 is 4/4/
4 for the end point RT1 and stage count of 6/6/6 for the end point RT2.
Now, the problem of choosing the stage count occurs on C3/RS/U1 because the cells exist in
the same launch path in the case of the two timings paths (RS to RT1 and RS to RT2) and
have different stage count based in path-based AOCV analysis.
Therefore, to maintain pessimism, the smaller stage count 4 is chosen. So, each launch cell
stage count of C3/RS/U1 is 4 in case of graph-based AOCV analysis. U5 has a stage count
of 4 and U2/U3/U4 has a stage count of 6, respectively. Smaller stage count means more
variation, so it is mapped to the worse AOCV derate for late and early.
Note: In GBA, the algorithm requires resetting of stage count at clock branch points- a major
source of pessimism.
In the given figure, another common point occurs at the pin C4/Y. which is connected to RT1/
CK and RT2/CK. So, state count is reset to 0 at the C4/Y pin. The stage count of the path
from the C4/Y through RT1 is longer than that of the path from the C4/Y through RT2 to the
output port. RT2 has stage count of 1 and RT1 has a stage count of a value greater than 1
and C4 has a stage count of 2.
The following table summarizes the graph-based launch cell stage counts of the above
example:
Stage
Segment Members Stage Path
Count
Clock root -> CPPR Common Point (C2/Y) C1-C2 4 C1-C2-C4-RT2
CPPR Common Point (C2/Y) -> C3-RS-U1 4 C3-RS-U1-U5
Launch Clock Branch Point (RS) -> Data
Path Branch
Data Path Branch -> Data Path Endpoint U5 4 C3-RS-U1-U5
Data Path Branch -> Data Path Endpoint U2-U3-U4 6 C3-RS-U1-U2-U3-U4
CRPR Common Point (C2/Y) -> C4 2 C4-RT2
CRPR Common Point (C4/Y)
The method to calculate the stage count under path-based AOCV mode is intuitive.
The following figure includes the launch cell and net stage counts:
Firstly, look for the CPPR common point on the clock launch path and the capture path of a
timing path.
So, the common point (pin) of the above timing path is the C2/Y pin.
So, the common point (pin) of the above timing path is the C2/Y pin.
Now, for calculation purpose, the stage count at C2/Y is reset to 0, as shown in below figure.
Therefore, the launch path from the pin C2/Y to RT1/D has a stage count of 4, that is,
C3(1)->RS(2)->U1(3)->U5(4)->RT1/D
The launch path from the pin RS to RT2/D has a stage count of 6, that is,
C3(1)->RS(2)->U1(3)->U2(4)->U3(5)->U4(6)->RT2/D
Stage
Segment Members Stage Path
Count
Launch Clock Branch Point - C3-RS-U1-U5 4 C3-RS-U1-U5
>
Data Path Endpoint (RS to
RT1)
Launch Clock Branch Point - C3-RS-U1-U2-U3-U4 6 C3-RS-U1-U2-U3-U4
>
Data Path Endpoint (RS to
RT2)
The table above summarizes the stage count of the 2 launch paths in PBA.
Based on above derived stage count, the tool calculates the diagonal distance for the timing
path and then gets the AOCV derate values from the AOCV derating library with the stage
count and the distance.
Note: The report_timing command can be used to report each cell’s AOCV derate and
each net’s AOCV derate.
So, think over which AOCV derates of the cells/nets on the common path are used for the
common parts. In the above example, you have to check the stage counts of the cells C1 and
C2 on the common path and AOCV derates of the cells. The stage count (SC) calculation on
the common path cells is relating to graph-based AOCV analysis.
By default, when AOCV analysis is enabled, any OCV style derating specified with the
set_timing_derate command is multiplied by the calculated AOCV factor to get the final
derating value. You can use the following setting to add or multiply AOCV and OCV factors:
set timing_aocv_derate_mode aocv_multiplicative (default) | aocv_additive
The AOCV and OCV derating factors may be added or multiplied, so it is important to
understand whether each factor is nominal at zero or one. For example, if there is an AOCV
+3% factor modeled as 1.03, and an OCV factor having a plus two percent factor modeled as
1.02, simple multiplication of factors yields a final derate of around 1.051. If the same factors
are added up, a sum of 2.05 is obtained, which is not the expected value. The timing system
can understand that both of these factors are nominally referenced to 1.0, and it can then
automatically adjust the final result. In this case the timer will calculate:
The following global variables can be used to allow the specification of the reference point for
both OCV and AOCV factors:
set_global timing_derate_aocv_reference_point 0 | 1 (default)
set_global timing_derate_ocv_reference_point 0 | 1 (default)
According to current AOCV library definitions, the AOCV reference point is always expected
to be set at 1.0.
The software provides the ability to perform incremental adjustments to the defined timing
derate factors. The software also allows addition and multiplication (using
set_timing_derate -add and –multiply parameters) to function on an instance-specific
basis as well.
When aocv_additive mode is selected, the adjustments are performed as shown in the
table below.
OCV
AOCV AOCV OCV Final Derate
Reference Add or Multiply
Factor Reference Pt Factor Calculation
Pt
X 0/1 Y 0/1 aocv_multiplicative X * Y
X 1.0 Y 1.0 aocv_additive X+Y-1
X 1.0 Y 0.0 aocv_additive X+Y
X 0.0 Y 1.0 aocv_additive X+Y
X 0.0 Y 0.0 aocv_additive X+Y+1
The table shows the hierarchy of derating factors in increasing order of precedence. No
adjustments are performed for aocv_multiplicative mode.
Note: It is expected that AOCV derating libraries will be referenced to 1.0. So the
combinations above are not expected to be actively used.
The following examples show AOCV stage count in GBA and PBA mode:
-----------------------------------------------------------
Delay Arrival Pin Arc Aocv Aocv
Time Derate Stage
Count
-----------------------------------------------------------
- 0.000 clk clk ^ - -
0.000 0.000 C0/A - 1.000 4.000
0.000 0.000 C0/Y A ^ -> Y ^ 1.190 4.000
0.000 0.000 C1/A - 1.000 6.000
0.000 0.000 C1/Y A ^ -> Y ^ 1.186 5.000
0.000 0.000 C2/A - 1.000 6.000
0.000 0.000 C2/Y A ^ -> Y ^ 1.186 5.000
0.000 0.000 C3/A - 1.000 6.000
0.000 0.000 C3/Y A ^ -> Y ^ 1.186 5.000
0.000 0.000 C4/A - 1.000 6.000
0.000 0.000 C4/Y A ^ -> Y ^ 1.186 5.000
0.000 0.000 C44/A - 1.000 6.000
0.000 0.000 C44/Y A ^ -> Y ^ 1.186 5.000
0.000 0.000 FF1/CK -> - 1.000 6.000
0.056 0.056 FF1/Q CK ^ -> Q ^ 1.190 4.000
0.001 0.056 U1/A - 1.000 4.000
0.014 0.070 U1/Y A ^ -> Y ^ 1.190 4.000
0.001 0.072 U2/A - 1.000 4.000
0.010 0.082 U2/Y A ^ -> Y ^ 1.190 4.000
0.001 0.083 U3/A - 1.000 4.000
0.009 0.092 U3/Y A ^ -> Y ^ 1.190 4.000
0.001 0.093 FF2/D -> - 1.000 4.000
-----------------------------------------------------------------
Clock Rise Edge 0.000
= Beginpoint Arrival Time 0.000
Other End Path:
-----------------------------------------------------------
Delay Arrival Pin Arc Aocv Aocv
Time Derate Stage
Count
-----------------------------------------------------------
- 0.000 clk clk ^ - -
0.000 0.000 C0/A - 1.000 4.000
0.000 0.000 C0/Y A ^ -> Y ^ 0.810 4.000
0.000 0.000 C6/A - 1.000 5.000
0.000 0.000 C6/Y A ^ -> Y ^ 0.810 4.000
0.000 0.000 C7/A - 1.000 5.000
0.000 0.000 C7/Y A ^ -> Y ^ 0.810 4.000
0.000 0.000 C8/A - 1.000 5.000
0.000 0.000 C8/Y A ^ -> Y ^ 0.810 4.000
0.000 0.000 C9/A - 1.000 5.000
0.000 0.000 C9/Y A ^ -> Y ^ 0.810 4.000
0.000 0.000 FF2/CK - 1.000 5.000
------------------------------------------------------------------
-----------------------------------------------------------
Delay Arrival Pin Arc Aocv Aocv
Time Derate Stage
Count
-----------------------------------------------------------
- 0.000 clk clk ^ - -
0.000 0.000 C0/A - 1.000 4.000
0.000 0.000 C0/Y A ^ -> Y ^ 0.810 4.000
0.000 0.000 C6/A - 1.000 15.000
0.000 0.000 C6/Y A ^ -> Y ^ 0.827 13.000
0.000 0.000 C7/A - 1.000 15.000
0.000 0.000 C7/Y A ^ -> Y ^ 0.827 13.000
0.000 0.000 C8/A - 1.000 15.000
0.000 0.000 C8/Y A ^ -> Y ^ 0.827 13.000
0.000 0.000 C9/A - 1.000 15.000
0.000 0.000 C9/Y A ^ -> Y ^ 0.827 13.000
0.000 0.000 FF2/CK - 1.000 15.000
---------------------------------------------------------------
If the set_analysis_mode –aocv true is set, the impact of each reporting command is as
follows:
■ report_timing –retime aocv
PBA stage counting will be used for calculating AOCV derate factor for the given path.
GBA slew will be used for slew propagation.
■ report_timing –retime aocv_path_slew_propagation
In this case, PBA stage counting will be used for calculating the AOCV derate factor for
the given path. PBA slew will be used for slew propagation.
■ report_timing
In this case, GBA stage counting will be used for calculating the AOCV derate factor for
the given path. GBA slew will be used for slew propagation.
In the previous example of an additive combination of OCV and AOCV, one of the reference
points was 0 and the other was 1. In such cases, the software does not make any adjustments
to normalize the final derate factor so the timing report columns are quite intuitive.
In the timing run below, the nominal delay for all arcs has been set to 1.0ns so that the value
in the Delay field indicates the total derate factor applied.
set_global report_timing_format {instance cell arc stage_count aocv_derate
user_derate delay arrival}
report_timing -net ...
If the derating factors are changed such that both AOCV and OCV are referenced to 1.0, then
an implicit -1 will be used since the mode is still aocv_additive. In this case, the effect of the
‘-1’ will be seen in the aocv_derate value.
For example, set both the reference points to 0, and modify the AOCV library so that it outputs
a value of 0.030ns.
set_global timing_derate_aocv_reference_point 0
set_global timing_derate_ocv_reference_point 0
set_timing_derate -delay_corner dcMax -late -cell_delay 1.01
set_timing_derate -delay_corner dcMax -late -cell_delay 0.02 -add [get_cells U1]
In this case, the +1.0 adjustment to normalize the final derating factor is again accounted for
in the aocv_derate column.
You can use stage count and AOCV derate properties to report and query on AOCV data. As
an example consider the following path:
report_timing -format {arc hpin aocv_derate stage_count} –path_type full_clock
For example, obtaining the various stage counts corresponding to the above path is shown
below:
get_property [get_arcs –from buf133/A –to buf133/Y] aocv_stage_count_data_late
3.000
get_property [get_arcs –from buf11/A –to buf11/Y]
aocv_stage_count_capture_clock_early
4.3.4.1 Overview
Industrial demand for higher performing digital semiconductor products has highlighted the
clear need to reduce design guard-band without sacrificing time-to-market. Improvements to
on-chip variation modeling are a driving component of the guard band reduction strategy. In
this section we review the current industry approaches to on-chip variation (OCV) modeling
and introduce the Statistical OCV (SOCV) analysis, which utilizes a single statistical
parameter representing sigma variation. The SOCV extends existing single variable statistical
approaches by adding slew and load-dependent sigma per timing arc.
For many years, modeling of the on-chip process variation has been achieved through scaling
of the nominal delays of all instances with a single derating factor. Such a uniform derating,
often referred to as OCV derate, often causes excessive pessimism for some instances while
optimism for others. In order to guarantee conservative analysis, OCV derates were chosen
pessimistically, resulting in over-design and increase of turnaround times for timing closure.
To overcome these setbacks, an advanced OCV (AOCV) approach was introduced. With
AOCV the derating factor is instance specific and depends on the number of logic levels in a
path and/or location of the instance. The AOCV derating factors are pre-characterized for
each cell typically using Monte-Carlo simulation. This methodology reduced pessimism and
optimism of the traditional OCV methodology. However, AOCV presented challenges for
computing of the stage count and distance of the path on a die for a specific path in graph-
based analysis (GBA). In addition, AOCV assumes that the ratio of delay variation to nominal
delay does not depend on the input slew and load.
On the opposite spectrum of the methods modeling variability in STA is statistical static timing
analysis (SSTA). It models delay distributions due to local and global random parameter
variations accurately and is, therefore, much more accurate than other mentioned methods.
However, SSTA is much more expensive in terms of run time and memory, and requires
special timing libraries, which is often too high cost to pay for design houses and foundries.
SOCV computes the impact of local process variations on the delay and slew of each
instance in the design at a given global variation corner. SOCV uses one parameter in SSTA
mode. This single parameter models local cell variations. Similar to SSTA, SOCV propagates
the sigma of arrival and required times through the timing graph, and then computes
statistical characteristics of slack at all timing pins. Modeling on-chip variations in terms of a
single variable is fast, yet it yields better accuracy than modeling the variations as derating
factors.
For accurate SOCV analysis, a special library data is required. It includes arc-level absolute
variations of cell delays, output transitions, and timing checks as functions of input slew and
load. Since SOCV is able to accurately compute the delay and slew variation on each
instance, it solves the two main limitations of simpler methods: (i) cases where delay is close
to zero while delay variation is not, and (ii) impact of input slew variations on delay.
SOCV analysis is currently available in the Cadence Tempus Timing Signoff Solution for sign-
off timing analysis and timing closure.
Tempus provides both a single-corner and MMMC use model, which can accommodate
SOCV or LVF format variation libraries.
In single-corner mode, you can use the following parameter to read Cadence SOCV format
libraries:
read_lib –socv [list libA.socv libB.socv … ]
To read Liberty libraries with integrated LVF data, you should read the library in the same
manner as a non-LVF Liberty timing library.
read_lib [list libA-LVF.lib libB-LVF.lib …]
When working in an MMMC environment, you should specify the variation libraries as part of
the create_library_set command in your MMMC configuration file. To incorporate
Cadence SOCV format libraries:
create_library_set -name libsetMax
-timing [list
${library_path_1}/lib1.lib
${library_path_1}/lib2.lib
]
-socv [list
${socv_lib_path}/lib1.socv
${socv_lib_path}/lib2.socv
]
To use Liberty libraries with merged LVF data, simply load the Liberty libraries with the
create_library_set -timing parameter.
Tempus allows the option of using AOCV libraries to provide variation modeling data for the
SOCV flow. This method can be used for initial experimentation and testing of the SOCV flow,
but lacks the accuracy required for signoff. Using AOCV as a source will provide only variation
on delay; no variation on transition or constraints.
To utilize the AOCV bootstrap method, you must set the timing global variables to control
transformation of AOCV data. These settings must be made before loading any timing library
data.
The AOCV derating libraries are characterized to a particular sigma value - without additional
guidance the transformation process will consider the AOCV library to be at 3-sigma. To
define the characterization sigma of the AOCV libraries, you can make the following setting:
set timing_library_scale_aocv_to_socv_to_n_sigma 4.5
You should specify reading the AOCV libraries in the same way as for normal AOCV analysis.
The SOCV analysis can be enabled using the set_analysis_mode -socv parameter, as
shown below:
set_analysis_mode -socv true -analysisType onChipVariation -cppr both
During arrival and required timing propagation, timing data values are represented
concurrently by statistical mean and sigma values. At the output of multi-input gates, the
statistical arrival times must be merged in a conservative operation. There are several options
for controlling the statistical Max operation.
Selection of the Max operation can be controlled by making the following setting:
set timing_socv_statistical_min_max_mode mean_and_three_sigma_bounded
In this mode, the worst-case calculations of mean value and standard deviation are
performed separately.
All the timing calculations are performed in the statistical domain. For example, adding delays
along a path to determine an arrival time calculation of slack-based on subtraction of arrival
and required times. Discrete representations of these values are computed as mean +
n*sigma – where n is typically 3.0.
The default timing report is configured to report timing quantities as discrete numbers rather
than as statistical quantities. The report_timing fields: slew, delay, and arrival will still report
discrete numeric values.
As a result of calculating arrival times in the statistical realm, adding the current delay to the
previous arrival will generally not add up exactly to the next arrival time in the report:
The statistical mean and sigma representation of timing data is converted to discrete values
by the formula: mean + n-sigma, where n is a user-specifiable value. To control the sigma
multiplier, you can use the set_socv_reporting_nsigma_multiplier command. This
command supports n-sigma specification per view per setup/hold combination.
To apply sigma multiplier to the specified view in setup mode, use the following command:
set_socv_reporting_nsigma_multiplier -setup 2.5 -view std_max_setup
The report_timing command now supports additional statistical report fields when
operating in SOCV mode.
■ The delay_mean and delay_sigma fields provide statistical data for each timing arc
■ The slew_mean and slew_sigma fields provide data for transitions
■ The arrival_mean and arrival_sigma fields provide the statistical information for arrival
timing
The conversion of statistical quantities in the report to discrete values is computed by:
■ New mean is the sum of the means: µ3 = µ1 +µ2
The summary section of the report_timing report is where the final arrival and required
times are calculated, and the path slack is determined. Other quantities such as CPPR,
Uncertainty, and Setup/Hold checks values are also accounted in this section’s calculations.
Like the detailed path report, all calculations are initially performed using statistical arithmetic
of the mean and sigma values. The discrete representations of these values are reported
based on the via mean +n-sigma conversion.
By default, the report_timing command output will display discrete representations of the
data in the summary section of the report.
To enable the display of related statistical representation of data in the summary section, you
can set the following global variable to true:
timing_report_enable_verbose_ssta_mode
With this setting, additional details will be added to the report_timing summary section.
The current “n” value for n-sigma conversion is shown, along with the mean and sigma
components for each data value.
When running in AOCV bootstrap mode, load the AOCV libraries. Before loading any library
information, you must ensure that the required timing library global variables have been set.
set timing_library_infer_socv_from_aocv true
set timing_library_scale_aocv_to_socv_to_n_sigma 3
set timing_socv_statistical_min_max_mode three_sigma_bounded
set_socv_reporting_nsigma_multiplier -setup 2.5
set timing_report_enable_verbose_ssta_mode true
set report_timing_format \
{timing_point edge cell slew load \
delay_mean delay_sigma delay \
arrival_mean arrival_sigma arrival}
read_lib ${LIB_DIR}/standard.lib
read_lib -aocv [list ${LIB_DIR}/aocv/standard.aocv]
read_verilog ./test.v
set_top_module test
read_sdc ./test.sdc
set_analysis_mode -socv true -cppr both
report_timing
In MMMC configurations, library data is provided through a MMMC library set object, using
the create_Iibrary_set command.
In the following examples native SOCV or LVF format library is used to make changes in the
MMMC configuration file.
set timing_socv_statistical_min_max_mode three_sigma_bounded
set_socv_reporting_nsigma_multiplier -setup 2.5
set timing_report_enable_verbose_ssta_mode true
set report_timing_format {timing_point edge cell slew load \
delay_mean delay_sigma delay \
arrival_mean arrival_sigma arrival}
read_view_definition ./viewDef.tcl
read_verilog ./test.v
set_top_module test
set_analysis_mode -socv true -cppr both
report_timing
When running in AOCV bootstrap mode, load the AOCV libraries. You must ensure that the
required timing library global variablesare set before loading any library information.
set timing_library_infer_socv_from_aocv true
set timing_library_scale_aocv_to_socv_to_n_sigma 3
set timing_socv_statistical_min_max_mode three_sigma_bounded
set_socv_reporting_nsigma_multiplier -setup 2.5
set timing_report_enable_verbose_ssta_mode true
set report_timing_format {timing_point edge cell slew load \
delay_mean delay_sigma delay \
arrival_mean arrival_sigma arrival}
read_view_definition ./viewDef.tcl
read_verilog ./test.v
set_top_module test
set_analysis_mode -socv true -cppr both
report_timing
The Cadence SOCV library format and the standardized Liberty Variation Format (LVF)
provide essentially the same information: variation sigma for delay, transition, and constraints
per arc, indexed by load and slew.
The detailed specifications of Liberty LVF for variation on delay and transition are available
from OpenSource Liberty Version 2013.12.
cell (cell_name) {
ocv_derate_distance_group: ocv_derate_group_name;
...
pin | bus | bundle (name) {
direction: input | output;
timing() {
...
ocv_sigma_cell_rise(delay_lu_template_name){
sigma_type: early | late | early_and_late;
index_1 ("float, ..., float");
index_2 ("float, ..., float");
values ( "float, ..., float", \
..., \
"float, ..., float");
}
ocv_sigma_cell_fall(delay_lu_template_name){
sigma_type: early | late | early_and_late;
index_1 ("float, ..., float");
index_2 ("float, ..., float");
values ( "float, ..., float", \
..., \
"float, ..., float");
}
...
} /* end of timing */
...
} /* end of pin */
...
SOCV Library
Attribute Type Description
Attribute
object_type library | design Use library to indicate that the SOCV data is
with respect to library cells. Use design, for
design-specific data such as spatial derate
multipliers.
object_spec libName/ Specifies the internal library name and library
libCellName cell name that is consistent with a Liberty
timing library that has been loaded in the
session.
■ delay_sigma_max_rise
■ delay_sigma_min_fall
■ delay_sigma_min_rise
The following properties are added to the pin object and can be queried using the
get_property command:
■ arrival_mean_max_fall
■ arrival_mean_max_rise
■ arrival_mean_min_fall
■ arrival_mean_min_rise
■ arrival_sigma_max_fall
■ arrival_sigma_max_rise
■ arrival_sigma_min_fall
■ arrival_sigma_min_rise
■ slack_mean_max
■ slack_mean_max_fall
■ slack_mean_max_rise
■ slack_mean_min
■ slack_mean_min_fall
■ slack_mean_min_rise
■ slack_sigma_max
■ slack_sigma_max_fall
■ slack_sigma_max_rise
■ slack_sigma_min
■ slack_sigma_min_fall
■ slack_sigma_min_rise
■ slew_mean_max_fall
■ slew_mean_max_rise
■ slew_mean_min_fall
■ slew_mean_min_rise
■ slew_sigma_max_fall
■ slew_sigma_max_rise
■ slew_sigma_min_fall
■ slew_sigma_min_rise
4.4.1 Overview
Static Timing Analysis (STA) software by default uses a pessimistic algorithm for timing, which
is based on the worst slew propagation (slew merging), referred to as graph-based analysis
(GBA). In GBA mode, the software considers both the worst arrival and the worst slew in a
path during timing analysis, even if the worst slew is corresponding to a input pin
different than the relevant pin for the current path. This gives a pessimistic result.
Path-Based Analysis (PBA) involves re-timing the components of a timing path based on the
actual slew that is propagated in this path. This technique primarily aims to remove the
pessimism that is introduced due to slew merging at various nodes in the design when graph-
based analysis is run (represented in timing graph as nodes).
Here, it is assumed that for any input slew, the output slew is 25% more than the input slew.
So for a slew of 100ps at input A, corresponding output slew at Z is 125ps. Similarly, if slew
at B is 500ps, then slew at Z is 625ps. In GBA for calculating delay and slew propagation
through this AND gate, the worse input slew (through B) is always considered, irrespective of
the fact that the path is through pin A or B. But in PBA, the actual slew through the concerned
pin is accounted for in delay calculation and slew propagation.
You can use the following commands to report violations in PBA mode:
report_constraint –retime <option>
report_timing –retime <option>
Note: To generate the analysis summary file, you can use the following options with the
report_timing command - to give high value of nworst and max_path to get good
coverage. The report summary will be stored in the pba.summ file.
report_timing -retime path_slew_propagation -max_paths <> -nworst <> -path_type
summary_slack_only -<late/early> -analysis_summary_file pba.summ
The following example demonstrates GBA vs PBA timing results. Given below is the GBA
report through “A” pin of a AND gate “ua1”:
Path 1: VIOLATED Setup Check with Pin u5/CK
Endpoint: u5/D (^) checked with leading edge of 'CLK_W_4'
Beginpoint: u2/Q (^) triggered by leading edge of 'CLK_W_4'
Other End Arrival Time 0.453
- Setup 0.210
+ Phase Shift 10.000
+ CPPR Adjustment 0.000
- Uncertainty 10.000
= Required Time 0.243
- Arrival Time 1.587
= Slack Time -1.344
Clock Rise Edge 0.000
+ Clock Network Latency (Prop) 0.455
= Beginpoint Arrival Time 0.455
-------------------------------------------------------------------------
Load Slew Delay Arrival Cell Arc Pin Required
Time Time
-------------------------------------------------------------------------
0.205 0.178 - 0.455 - CK ^ u2/CK -0.889
0.020 0.107 0.268 0.723 DFF CK ^ -> Q ^ u2/Q -0.621
0.020 0.107 0.002 0.725 BUF - u3/A -0.619
0.011 0.093 0.075 0.800 BUF A ^ -> Y ^ u3/Y -0.544
0.011 0.093 0.000 0.800 AND - ua1/A -> -0.544
0.011 2.002 0.071 0.871 AND A ^ -> Y ^ ua1/Y -0.473
0.011 2.002 0.000 0.871 BUF - u4/A -0.473
0.006 1.951 0.716 1.587 BUF A ^ -> Y ^ u4/Y 0.243
0.006 1.951 0.000 1.587 DFF - u5/D 0.243
-------------------------------------------------------------------------
The slew through “A” pin of the AND gate “ua1” is 0.093ns and through B pin is 1.068ns (not
shown in the above report). During GBA, the software performs slew merging and uses
1.068ns as the slew through “A” pin. Hence, a lot of pessimism is added in this analysis, which
can be removed if PBA is used.
Given below is the result of PBA analysis of the above path. The highlighted red numbers
show how PBA numbers remove pessimism induced due to slew merging in GBA.
Note: To report re-timed numbers, you can add retime_slew, retime_delay, and
retime_incr_delay options to the report_timing_format global variable or use the with the
report_timing -format parameter.
Path 1: VIOLATED Setup Check with Pin u5/CK
Endpoint: u5/D (^) checked with leading edge of 'CLK_W_4'
Beginpoint: u2/Q (^) triggered by leading edge of 'CLK_W_4'
Retime Analysis { Path-Slew }
Other End Arrival Time 0.453
- Setup 0.068
+ Phase Shift 10.000
+ CPPR Adjustment 0.000
- Uncertainty 10.000
= Required Time 0.385
- Arrival Time 0.934
= Slack Time -0.549 --> PBA Slack
= Slack Time(original) -1.344 --> GBA Slack
Clock Rise Edge 0.000
+ Clock Network Latency (Prop) 0.455
= Beginpoint Arrival Time 0.455
---------------------------------------------------------------------------------
Load Slew Retime Delay Retime Arrival Cell Arc Pin Required
Slew Delay Time Time
---------------------------------------------------------------------------------
0.205 0.178 0.178 - - 0.455 - CK ^ u2/CK -0.094
0.020 0.107 0.107 0.268 0.268 0.723 DFF CK ^ -> Q^ u2/Q 0.174
0.020 0.107 0.107 0.002 0.002 0.725 BUF - u3/A 0.176
0.011 0.093 0.093 0.075 0.075 0.800 BUF A ^ -> Y ^ u3/Y 0.251
0.011 0.093 0.093 0.000 0.000 0.800 AND - ua1/A -> 0.251
0.011 2.002 0.079 0.071 0.071 0.871 AND A ^ -> Y ^ ua1/Y 0.322
0.011 2.002 0.079 0.000 0.000 0.871 BUF - u4/A 0.322
0.006 1.951 0.062 0.716 0.064 0.934 BUF A ^ -> Y ^ u4/Y 0.385
0.006 1.951 0.062 0.000 0.000 0.934 DFF - u5/D 0.385
---------------------------------------------------------------------------------
Regular
In the regular model of PBA reporting, you can use the report_timing command, as
shown below:
report_timing –retime <retime type> –max_paths ‘N‘ –nworst ‘M‘ –max_slack ‘S’
Exhaustive
Due to the impact of path-based analysis, slack ordering of paths can be changed due to path
re-calculation. The most critical path before re-calculation may not be the most critical path
after re-calculation. This is the reason why exhaustive path-based analysis is performed,
which aims at reporting the true worst path after PBA is performed by examining all the
violating paths in the design.
To ensure optimal path search runtime, you can use the following setting to limit the worst
paths:
set_global timing_pba_exhaustive_path_nworst_limit ‘L’ (default: 10K)
Tempus performs the steps given below, when you use the following command:
report_timing –retime <retime type> –retime_mode exhaustive –max_paths ‘N’ –nworst
‘M’ –max_slack 0
1. Collect top ‘N’ GBA violating endpoints (max slack less than zero).
2. Perform PBA on top ‘L’ nworst paths for each endpoint in the above step. Whenever the
Lth path on an endpoint is a PBA candidate (GBA violating), Tempus will issue a warning
indicating the lack of full coverage on that end point.
3. Report top ‘N’ paths from step 2 above with PBA_Slack less than 0 - sorted by PBA slack
with maximum of ‘M’ paths per endpoint are picked.
The stage count in AOCV (advanced on-chip variation) is calculated differently in GBA and
PBA, and hence AOCV derates differ in GBA and PBA mode. Further, the
timing_aocv_analysis_mode global variable control in GBA and PBA differs based on the
selected mode. The two methods of AOCV analysis with PBA are:
report_timing –retime aocv
and
report_timing –retime aocv_path_slew_propagation
For more information on AOCV, refer to the Timing Analysis Modes chapter.
PBA has significant impact when performing noise analysis. When PBA is enabled, the actual
timing window of the victim is computed. The attacker timing window is always taken from
GBA. In this way pessimism in SI can be reduced.
Below is sample report which shows change in incr_delay (shown under retime_incr_delay
column) in PBA. For more information, refer to the Signal Integrity Delay and Glitch Analysis.
Path 1: VIOLATED Setup Check with Pin u14/CK
Endpoint: u14/D (^) checked with leading edge of 'CLK_W_1'
Beginpoint: u9/Q (^) triggered by leading edge of 'CLK_W_1'
Path Groups: {CLK_W_1}
Retime Analysis { Path-Slew SI WP EWM }
Other End Arrival Time 0.849
- Setup 0.093
+ Phase Shift 20.000
+ CPPR Adjustment 0.001
- Uncertainty 1000.000
= Required Time -979.243
- Arrival Time 1.922
= Slack Time -981.170
= Slack Time(original) -981.435
Clock Rise Edge 0.000
+ Clock Network Latency (Prop) 1.059
= Beginpoint Arrival Time 1.059
----------------------------------------------------------------------------
Pin Cell Slew Retime Delay Retime Arrival Incr Retime
Slew Delay Time Delay Incr Delay
----------------------------------------------------------------------------
u9/CK - 0.096 0.096 - - 1.059 - 0.000
u9/Q -> DFF 0.380 0.380 0.318 0.318 1.377 0.000 0.000
u10/A BUF 0.383 0.383 0.008 0.008 1.385 0.000 0.000
u10/Y BUF 0.143 0.143 0.108 0.108 1.493 0.000 0.000
u11/A INV 0.143 0.143 0.005 0.005 1.497 0.000 0.000
u11/Y INV 0.212 0.212 0.090 0.090 1.587 0.000 0.000
u12/A INV 0.336 0.336 0.433 0.168 1.755 0.336 0.071
u12/Y INV 0.092 0.092 0.052 0.052 1.807 0.000 0.000
u13/A BUF 0.092 0.092 0.009 0.009 1.816 0.008 0.008
u13/Y BUF 0.136 0.136 0.104 0.104 1.920 0.000 0.000
u14/D -> DFF 0.136 0.136 0.001 0.001 1.922 0.000 0.000
-------------------------------------------------------------------------
4.5.1 Overview
Multiple input cells that have an underlying transistor topology with parallel P or N device
pulling the output up or down respectively, can exhibit accelerated delays when multiple
inputs are switching in the same direction. If a secondary input switches within a specified
delay window with respect to the primary transition, the delay from the initial transition will be
smaller.
The example below shows a NAND gate implementation with parallel PMOS pull-up
transistors, and a NOR gate with parallel NMOS pull-down devices:
Simultaneous falling transitions at the NAND gate’s A and B inputs will accelerate the rising
output transition. Conversely, rising transitions of the NOR gate’s A and B inputs within a
specified proximity window will accelerate the output falling delay.
Faster delays on early paths increase pessimism. Guard-banding approaches can be used
to derate the early paths – but doing this globally can lead to overall increased pessimism
over the whole design.
With SSI enabled, simultaneous switching effects can be detected by the software and
specific SSI derating factors provided by the user can be applied in those cases. When these
timing-guided derating assertions are applied, the overall guard-band derating can be
reduced – resulting in an overall less pessimistic analysis.
4.5.2 Implementation
The implementation of the simultaneous switching input (SSI) derating functionality involves
additional syntax provided to the set_timing_derate constraint, library properties for
defining the switching sensitivity delay window, and a set of heuristics of determining which
input phase arrival times should be considered as interacting, and therefore, subject to
possible SSI derating.
By using additional set_timing_derate options, you can configure the derate behavior for
different delay corners or operating voltage domains:
set_timing_derate 0.5 –fall –data –early
–delay_corner tt_800 -power_domain pdDefault
–input_switching [get_lib_cells NOR2*]
In order for a secondary signal transition to affect the delay from the initial input switching, it
must occur within a certain proximity of the first input’s transition. By default, the proximity
window is equivalent to the early input-to-output delay from the first transitioning input pin.
In the diagram below, pin A is the first input to switch. For a transition at B to affect the delay
from A to Y, it must transition after A has transitioned, but before Y has completed its transition
to the new state.
You can then set the proximity factor on a per library basis:
set_property [get_libs slow] k_input_switching_window_rise 1.1
set_property [get_libs slow] k_input_switching_window_fall 1.1
The property definitions and settings are preserved persistently in the SDC file if the design
is saved.
Based on the clocking relationships of the signals arriving on the input pins of a cell
configured for SSI, the software will determine if the SSI derate should always be applied,
never be applied, or applied based on the evaluation of the proximity window. Conservative
analysis requires applying the SSI derate, unless it can be shown that the inputs are not
interacting. The following table summarizes the situations where SSI should be applied or not
applied:
4.5.3 Reporting
All the deratings applied via the set_timing_derate command are reflected in the “User
Derate” column of the detailed report_timing report output.
In the example below, a nominal derate on early data paths is set as 0.90. An additional
simultaneous switching derate of 0.50 is also specified. The User Derate column will show a
cumulative derate of 0.45 if the simultaneous input switching condition has been met.
set_timing_derate 0.90 –early –data –fall
set_timing_derate 0.50 –early –data –fall \
–input_switching [get_lib_cells NOR2X1]
In the timing report shown above, the delay from U_W/A to U_W/Y is subject to SSI derating;
it received the full, cumulative derate of 0.45.
4.6.1 Overview
In high-frequency designs, clock pulses may get distorted or die down during propagation
through the clock tree network. This may be due to slow slews or long waveform tails causing
rise/fall waveforms to not reach the VDD/VSS levels before the opposing transition arrives.
The minimum pulse width checks may not capture such failures, as these checks work based
on the arrivals at delay threshold, so the waveform shapes are not considered.
The Tempus software has a capability to perform the following checks to identify and report
such potential clock distortions:
■ Rail Swing Checks
■ Waveform aware Pulse Width Checks
The pulse at any pin is formed by aligning the actual rise and fall transition waveforms over
the pulse width (pw), that is computed using regular minimum pulse width checks. The
intersection of these rise and fall transition waveforms defines the rail voltage achieved (v).
The achieved rail voltage (v) is then checked against the user-defined threshold (vt) to check
the violations.
Use Model
The following global variables can be used to specify the voltage thresholds as a ratio of the
VDD:
■ timing_rail_swing_checks_high_voltage_threshold
■ timing_rail_swing_checks_low_voltage_threshold
For example,
set timing_rail_swing_checks_high_voltage_threshold 0.95
set timing_rail_swing_checks_low_voltage_threshold 0.05
width checks to report minimum pulse width violations on user-specified voltage levels, and
not just delay measurement thresholds. These checks can be applied on clock network pins.
Use Model
You can use the following global variables to specify voltage levels for waveform aware pulse
width checks:
■ timing_waveform_aware_pulse_width_checks_high_voltage_level
■ timing_waveform_aware_pulse_width_checks_low_voltage_level
For example,
set timing_waveform_aware_pulse_width_checks_high_voltage_level 0.75
set timing_waveform_aware_pulse_width_checks_low_voltage_level 0.25
You can use the following command to specify the required pulse width at a user-defined
voltage level:
set_min_pulse_width -waveform_aware_type {absolute | source_width_ratio}
For example,
set_min_pulse_width 0.1 [get_clocks clk1] -waveform_aware_type absolute
----------------------------------------------------------------------
Path 1: MET PulseWidth Check with Pin FF1/CP
Ending Clock Edge: FF1/CP (v) checked with trailing edge of 'clk'
Beginning Clock Edge: FF1/CP (^) triggered by leading edge of 'clk'
Other End Arrival Time 1.485000
+ Other End Arrival Time Adjustment -0.05
- Arrival Time Adjustment 0.06
- Pulse Width 0.047190
+ Phase Shift 0.000000
+ CPPR Adjustment 0.032300
= Required Time 1.420110
- Arrival Time 1.013900
= Slack Time 0.346210
The "Arrival Time Adjustment" and "Other End Arrival Time Adjustment" details in the above
report denote the offsets measured over the actual launching transition waveforms and
capturing transition waveforms respectively, as shown below:
These offsets are the time differences between the delay measurement threshold and user-
specified voltage level measured over the actual transition waveforms. The traditional pulse
widths are adjusted by the computed offsets to obtain a width at the user-specified voltage
threshold.
5
Concurrent Multi-Mode Multi-Corner
Timing Analysis
5.1 Overview
As feature sizes decrease, it becomes difficult to determine the worst-case combinations of
device corner (timing libraries and PVT operating conditions), RC corners, and constraint
modes at which the designers need to validate timing requirements for a design. Multi-mode
multi-corner analysis and optimization provides the ability to configure the software to support
multiple combinations of modes and corners, and to evaluate them concurrently.
Multi-mode multi-corner analysis uses a tiered approach for defining the required data. It
allows top-level definitions (analysis views) that share common information to be specified by
referencing the same lower-level objects. The active analysis views defined in the software
represent the different design variations that will be analyzed.
Complex designs might require the specification of multiple library files to define all of the
standard cells, memory devices, pads, and so forth, included in the design. Different library
sets can be defined to provide uniquely characterized libraries for each delay corner or power
domain.
Library sets allow a group of library files to be treated as a single entity so that higher-level
descriptions (delay corners) can simply refer to the library configuration by name. A library set
consists of timing libraries and can also include cdB/UDN models, AOCV, SOCV libraries
which are supported through various options of
create_library_setcreate_library_set command.
For details on UDN syntax, refer to the cdB Noise Library Format section in the Noise
Library Characterization chapter of the make_cdB Noise Characterizer User Guide.
For more information on UDN model, refer to the User-Defined Noise Model - An
Overview section in the Noise Library Characterization chapter of the make_cdB Noise
Characterizer User Guide.
The same library set can be referenced multiple times by different delay corners.
Note: You can create as many library sets as needed to support for delay corners that will be
included in the multi-mode multi-corner analysis.
Timing libraries must be read into the system first, using read_libread_libs command.
If you want to create a library set that includes cdB libraries, they also must be read into the
system first, using the read_lib -cdbread_libs -noise_libs command. This same flow
is adopted in single-mode single-corner (SMSC) analysis.
The order in which you define timing libraries is important. The software considers the first
library in the list as master library, with successive libraries having low priority.
The library sets can be created only after the top module is set. The following figure shows
the creation of a library set that associates timing libraries and cdB libraries with a nominal
voltage of 1 volt with the library name is COM-1V.
* Either AOCV or SOCV libraries can be specified at a time. The AOCV and SOCV files can
also be added to the library set by either -aocv [list aocv1.lib aocv2.lib] or –socv
[list socv1.lib socv2.lib] in the create_library_setcreate_library_set
settings.
Note: You can use the create_library_set -timing parameter and interpolate a set of
timing libraries to perform IR-drop aware delay calculation.
To change the timing and cdB library files for an existing library set, use the following
command:
■ update_library_setupdate_library_set
You can update a library set in the GUI mode by using the following ways:
Click the File tab and select Configure MMMC. A new window opens, double-click on one of
the library set objects, where the timing library files need to be updated. A new terminal will
open that allows you to add or delete timing library files. After updating the files, click on
Apply and OK to save the changes.
Or
Click the Timing & SI tab and select MMMC Browser. Select the library set and double-click
on one of the library sets where the timing library files need to be updated. A new terminal
will open where you can add or delete timing library files. After updating the files, click on
Apply and OK to save the changes.
Note:
■ It may not be necessary to update a library set, but Timing/SI libraries under a library set
can be updated.
■ You can use the update_library_set command or the Edit Library Set option (in GUI
Mode), before (or any time later) the multi-mode multi-corner views are loaded into the
design. Once the views are loaded, any change in the library set (using the
update_library_set command (or Edit Library Set form) will reset the timing, RC data,
and delay corner settings for all the analysis views.
For example, the following command creates a timing condition called TC1 for the library set
fast and for the virtual operating condition oc1:
create_timing_condition -name TC1 -library_sets [list fast] -opcond oc1
In general, the process, voltage, and temperature (PVT) point is specified by referring to a
predefined operating condition defined in a timing library. The library operating condition
provides the system with values for P, V, and T. However, there are situations when there are
no predefined operating conditions in user timing libraries, or pre-existing operating
conditions are not consistent with user's operating environment. Instead of modifying timing
libraries to add or adjust operating condition definitions, you can create a set of virtual
operating conditions for a library, to define a PVT operating point. These virtual operating
conditions can then be referenced by a delay corner, as if they actually existed in the library.
The operating conditions scale the delay numbers if there is a mismatch between the PVT
condition of libraries and the virtual operating conditions. To create a virtual operating
condition for a library, use the following command:
■ create_op_condcreate_opcond
For example, the following command creates a virtual operating condition called PVT1oc1 for
the library IsCOM-1V:
create_op_cond -name PVT1
-library_file IsCOM-1V.lib
-P 1.0
-V 1.2
-T 120
create_opcond -name oc1
-process 1.0
-voltage 1.2
-temperature 120
In GUI mode, you can add or change attributes for a defined virtual operating condition using
the “Add OP Cond” form.
Click the File tab and choose Configure MMMC. A new window opens in which you need
to double-click on the OP Conds tab and add the operating condition. Click Apply and OK
for the changes to take affect.
or
Click the MMMC Browser under the Timing & SI tab, and the double-click on the OP Conds
tab. After adding the operating condition, click Apply and OK for the changes to take affect.
You can edit a virtual operating condition before multi-mode multi-corner view definitions are
loaded into the design or any time later. However, once the software is in multi-mode multi-
corner analysis mode, any changes to an existing object results in the timing, delay
calculation, and RC data being reset for all analysis views.
An RC corner object provides the information necessary to properly annotate, and use the
RCs for delay calculation. In Tempus, you read the RC information using the SPEF files. A
SPEF file contains the parasitic information for a RC corner. In multi-mode multi-corner
analysis, you can use a SPEF file for each view.
RC corner objects are referenced when creating delay calculation corner objects.
A delay corner provides information necessary to control delay calculation for a specific
analysis view. Each corner contains information on the libraries, the operating conditions with
which the libraries should be accessed, and the RC corner for loading the parasitic data.
Delay corner objects can be shared by multiple top-level analysis views.
Use separate delay calculation corners to define major PVT operating points (for example,
Best-Case and Worst-Case).
Use the -early_* and -late_* parameters within a single delay calculation corner to
control on-chip variation.
The following figure shows the creation of a delay calculation corner called dcWCCOM.This
corner uses the libraries from IsCOM-1V, sets the operating condition to WCCOM, as defined
in the stdcell_1V timing library, and uses the rc-cworst RC corner:
To add or change attribute values of an existing delay calculation corner object, use the
following command:
■ update_delay_cornerupdate_delay_corner
In GUI mode, you can make changes to a delay calculation corner object by using Add Delay
Corner form.
Click the File tab and choose Configure MMMC. A new window opens, double-click on the
Delay Corners tab. Select the type of analysis mode and specify the rc corner, library set,
OpCond Lib, OpCond, IrDrop File. Once done, click Apply and OK to save the settings.
Or,
Click Timing & SI tab and choose MMMC Browser. A new window opens, double-click on
the Delay Corners tab. Select the type of analysis mode and specify the rc corner, Library
set, OpCond Lib, OpCond, IrDrop File. Once done, click Apply and OK to save the settings.
You can use the update_delay_corner command or the “Add Delay Corner” form before (or
any time later) multi-mode multi-corner view definitions are loaded into the design. However,
once the software is in multi-mode multi-corner analysis mode, any changes to an existing
object results in the timing, delay calculation, and RC data being reset for all analysis views.
The following example shows how to create two corners and update the delay corners with
the appropriate information.
To associate the best-case and worst-case RC corners with the appropriate delay corner, use
the update_delay_corner command:
update_delay_corner -name AV_HL_FUNC_MIN_RC1_dc -rc _corner rc_cworst
update_delay_corner -name AV_HL_FUNC_MIN_RC2_dc -rc_corner rc_cbest
update_delay_corner -name AV_HL_FUNC_MAX_RC1_dc -rc_corner rc_cworst
update_delay_corner -name AV_HL_FUNC_MAX_RC2_dc -rc_corner rc_cbest
update_delay_corner -name AV_HL_SCAN_MIN_RC1_dc -rc_corner rc_cworst
update_delay_corner -name AV_HL_SCAN_MAX_RC1_dc -rc_corner rc_cworst
update_delay_corner -name AV_HO_FUNC_MIN_RC1_dc -rc_corner rc_cworst
update_delay_corner -name AV_HO_FUNC_MAX_RC1_dc -rc_corner rc_cworst
update_delay_corner -name AV_LO_FUNC_MIN_RC1_dc -rc_corner rc_cworst
update_delay_corner -name AV_LO_FUNC_MAX_RC1_dc -rc_corner rc_cwors
A single delay calculation corner object specifies the delay calculation rules for the entire
design. If a design includes power domains, the delay calculation corner can contain domain-
specific subsections that specify the required operating condition information, and any
necessary timing library rebinding for the power domain.
You must use the same power domain names that you read in using the power domain file to
define the physical aspects of the domain. For more information about power domain file, see
read_power_domainread_power_intent.
To create a power domain definition for a delay calculation corner, use the following
command:
■ update_delay_cornerupdate_delay_corner
For example, the following command adds definitions for the power domain domain-3V to the
dcWCCOM delay calculation corner:
update_delay_corner -name dcWCCOM
-power_domain domain-3V
-library_set libs-3volt
-opcond_library delayvolt_3V
-opcond slow_3V
To add or change attribute values for an existing power domain definition, use the following
command:
■ update_delay_cornerupdate_delay_corner
In GUI mode, you can make changes to a power domain definition using the Edit Power
Domain form:
Click the File tab and choose Configure MMMC. A new window opens, double-click on the
Delay Corners tab. In the “Power Domain List” column, click Add. A new Add Power
Domain window opens, you can enter the details for library set, OpCond Lib, OpCond, IrDrop
File. Once done, click Apply and OK to save the settings.
or:
Click Timing & SI tab and choose MMMC Browser. A new window opens, double-click on
the Delay Corners tab. In the “Power Domain List” column, click Add. A new “Add Power
Domain” window opens, you can enter the details for library set, OpCond Lib, OpCond,
IrDrop File. Once done, click Apply and OK to save the settings.
You can use the update_delay_corner command or the Add Delay Corner form before (or
any time later) multi-mode multi-corner view definitions are loaded into the design. However,
after the software is in multi-mode multi-corner analysis mode, any changes to an existing
object results in the timing, delay calculation, and RC data being reset for all analysis views.
A constraint mode object defines one of possibly many different functional, test, or Dynamic
Voltage and Frequency Scaling (DVFS) modes of a design. It consists of a list of SDC
constraint files that contain timing analysis information, such as the clock specifications, case
analysis constraints, I/O timings, and path exceptions that make each mode unique. SDC files
can be shared by many different constraint modes, and the same constraint mode can be
associated with multiple analysis views.
The following figure shows that the constraint mode “missionSetup” reads in 3 constraint
mode files “io.sdc”, “mission1-clks.sdc” and “mission1-except.sdc”:
To change the SDC constraint file information for an existing constraint mode object, use the
following command:
■ update_constraint_modeupdate_constraint_mode
In the GUI mode, you can make changes to a constraint mode object using the Add
Constraint Mode form.
Click the File tab and choose Configure MMMC. A new window opens, double-click on the
Constraint Modes tab and add the “SDC Constraint File(s)”. Once done, click Apply and
OK to save the settings.
Or,
ClickTiming & SI tab and choose MMMC Browser. A new window opens, double-click on
the Constraint Modes tab and add the “SDC Constraint File(s)”. Once done, click Apply
and OK to save the settings.
You can use the update_constraint_mode command or the Add Constraint Mode form
before (or any time later) multi-mode multi-corner view definitions are loaded into the design.
However, once the software is in multi-mode multi-corner analysis mode, any changes to an
existing object results in the timing, delay calculation, and RC data are reset for all the
analysis views.
The Tempus software allows you to update assertions for a multi-mode multi-corner
constraint mode object, and have those changes take immediate effect, use the following
command:
■ set_interactive_constraint_modesset_interactive_constraint_modes
For example, the following commands put the software into interactive constraint entry mode,
and apply the set_propagated_clockset_propagated_clock assertion on all views
in the current session that are associated with the constraint mode func1:
set_interactive_constraint_modes func1
set_propagated_clock [all_clocks]
The software stays in interactive mode until you exit it by specifying the
set_interactive_constraint_modes command with an empty list:
set_interactive_constraint_modes { }
All the new constraints are saved in the SDC file for the specified constraint mode when you
save the design.
For example, the following commands put the software into interactive constraint entry mode,
and apply the set_propagated_clock assertion on all active analysis views in the current
session.
set_interactive_constraint_modes [all_constraint_modes -active]
set_propagated_clock [all_clocks]
■ set_disable_timing
■ set_drive
■ set_driving_cell
■ set_false_path
■ set_fanout_load
■ set_input_delay
■ set_input_transition
■ set_load
■ set_max_delay
■ set_max_time_borrow
■ set_max_transition
■ set_min_delay
■ set_min_pulse_width
■ set_multicycle_path
■ set_output_delay
■ set_propagated_clock
■ set_resistance
An analysis view object provides all of the information necessary to control a given multi-
mode multi-corner analysis. It consists of a delay calculation corner and a constraint mode.
The following figure shows the creation of the analysis view missionSetup:
To change the attribute values for an existing analysis view, use the following command:
■ update_analysis_viewupdate_analysis_view
In the GUI mode, you can make changes to an analysis view using the Add Analysis View
form:
Click the File tab and choose Configure MMMC. A new window opens, double-click on the
Analysis Views tab and specify the constraint mode, delay corner, and analysis view. Click
Apply and OK to save the settings.
Or,
Click Timing & SI tab and choose MMMC Browser. A new window opens, double-click on
the Analysis Views tab and specify the constraint mode, delay corner, and analysis view.
Click Apply and OK to save the settings.
Note: You can use the update_analysis_view command or the Add Analysis View form
before (or any time later) multi-mode multi-corner view definitions are loaded into the design.
However, once the software is in multi-mode multi-corner analysis mode, any changes to an
existing object in the timing, delay calculation, and RC data are reset for all the analysis views.
After creating analysis views, you must set which views the software should use for setup and
hold analysis. These "active" views represent the different design variations that will be
analyzed. Active views can be changed throughout the flow to utilize different subsets of
views. Libraries and data are loaded into the system, as required to support the selected set
of active views.
For example, the following command sets missionSlow and mission2Slow as the active
views for setup analysis, and missionFast and testFast as the active views for hold
analysis:
set_analysis_view
-setup {missionSlow mission2Slow}
-hold {missionFast testFast}
For example, if the analysis view missionSlow is currently the default active setup view in the
design, the following command temporarily changes the default view to mission2Slow:
set_default_viewset_default_view -setup mission2Slow
Use the following command to generate a hierarchical report of your current multi-mode multi-
corner configuration:
■ report_analysis_viewsreport_analysis_views
-post_route_clock_cap 0.969117\
-temperature 125\
-qrc_tech ${::IMEX::libVar}/mmmc/qrcTechFile\
create_opcond -name PVT1 \
-process 1 \
-voltage 2 \
-temperature 120 \
create_delay_corner -name slow_max\
-timing_condition {default_mapping_tc_1}\
-rc_corner rc_max
create_delay_corner -name fast_min\
-timing_condition {default_mapping_tc_2}\
-rc_corner rc_min
create_constraint_mode -name functional\
-sdc_files\
[list ${::IMEX::libVar}/mmmc/eagle.sdc]
create_analysis_view -name func_slow_max -constraint_mode functional -delay_corner
slow_max
create_analysis_view -name func_fast_min -constraint_mode functional -delay_corner
fast_min
set_analysis_view -setup [list func_slow_max] -hold [list func_fast_min]
You can also save the design using the save_designwrite_db command. If constraints
are sourced interactively then a designer can save the design after interactive reading of
constraints through this command.
By default, the report_timing command analyzes all active analysis views in the design
concurrently. The timing report details indicate the views that are responsible for a path. By
default, the software returns only one path per end point.
If you have a large number of views, you can use the report_timing -view command to
process multiple views. The software stores results for each view, along with an aggregated
report in machine-readable timing reports (.mtarpt). You can view the results graphically in
the Tempus Timing Debug environment. You can use this procedure to determine the critical
view subsets that should be used to drive the implementation flow.
Note: The SPEF data is only read after a view is created to avoid multi-corner errors.
For other reports, see the report_* commands in the “Timing Analysis Commands”
chapter.
6
Distributed Multi-Mode Multi-Corner
Timing Analysis
6.1 Overview
The multi-mode multi-corner (MMMC) timing analysis can be run in distributed mode also.
Distributed multi-mode multi-corner (DMMMC) enables controlled distribution of various
analysis views to a selected or shared group of machines, and then merges the reports
generated for timing and signal integrity across the views.
This chapter describes how an existing MMMC setup can be transitioned to distributed
MMMC (that is, to multiple machines/CPUs). These multiple machines/CPUs will be referred
as Tempus clients in this chapter.
Distributed MMMC is a method of processing timing analysis views where the runs are
distributed on several Tempus clients. This allows you to run Timing/SI analysis for different
analysis views on multiple Tempus clients and then merge/aggregate the generated reports
from various views into a single report. The flow is shown in the figure below.
The Tempus master invokes a set of Tempus clients on the specified machines/CPUs, using
the set_distribute_host command. Besides tracking the activity on Tempus clients, the
Tempus master also governs the responsibility of adjusting queued analysis jobs to active
Tempus clients, in case some Tempus clients fail due to an unexpected event.
Licensing Requirements
Refer to “License Options for Distributed MMMC (DMMMC)” in the “Product and Licensing
Information” chapter.
Restrictions
The software saves all data from the distributed analysis runs in a user-specified output
directory (specified with the distribute_read_design command).
■ The software generates view-specific reports in directories with the corresponding view
name within this directory.
When concurrent multi-mode multi-corner timing analysis (CMMMC) is enabled, within a
DMMMC framework, the software generates CMMMC session-specific reports in
directories that have the corresponding CMMMC session names, under a user-defined
For more information on how to enable CMMMC, you can refer to the
distribute_views command.
■ In the DMMMC analysis flow, client monitoring is enabled by default. This feature enables
robust master/client resource monitoring and re-launches the clients when they fail due
to resource overloading. The master monitors the health of clients at regular intervals
and writes the information about per client resources (cpu/memory/tmp) in the host-
monitor.log file. If the host-monitor log file already exists in the run directory, software will
create the new file with name host-monitor.log1, host-monitor.log2 and so on.
An example report is given below:
###################
Status keys: E excellent, G good, B bad, T terrible.
Memory values:
total = Real memory of host
progs = Real memory used by processes, including swappable cache
used = Real memory used by processes, excluding swappable cache
Started at: 16/10/04 01:54:14
sjfib003(0) TMPDIR is : /tmp/ssv_tmpdir_11610_OIMPtR
============ ======== ======================== ==================
Host CPU Memory (GB) TMPDIR (GB)
name(id) util % total progs used %used used avail
============ ======== ===== ===== ===== ====== ==================
01:54:14
sjfib003(0) 44 E 377 193 51 13 E 0.00 228.19 E
01:55:14
sjfib003(0) 40 E 377 193 51 13 E 0.00 228.19 E
ec1-hw025(1) 33 E 330 110 26 7 E 0.22 432.97 E
ec1-hw025(2) 33 E 330 110 26 7 E 0.22 432.97 E
######################
The software checks for overloading of client resources and issues appropriate warning
messages for over-utilization of client resources. If client resources are over-utilized and view
analysis is not able to proceed, the software will automatically terminate the view job and
restart it on another client.
The DMMMC flow enables re-launch of clients using the same LSF configuration in the LSF
mode, if any overloading (cpu/mem) occurs in clients during view analysis. When
set_distribute_host -local mode is set, the re-launch feature is disabled.
Handling Scripts
For distributed MMMC analysis the following Tcl scripts are required:
■ Master Script on page 28
■ Design Loading and MMMC Configuration Script on page 31
■ Parasitic Information, Analysis, and Report Generation Script on page 33
Master Script
The master script is the overall flow script that runs the entire Tempus distributed MMMC
session. This script includes all generic environment variables, distribution commands, and
commands for specifying CPU usage, running DMMMC analysis, and merging reports.
The master script is read into the master Tempus server, which then distributes the analysis
runs to the user-specified machines.
The following steps list the order in which you should define the commands in the master
script that are necessary for running a distributed MMMC analysis session.
1. Specify environment variables or shell variables to be used in the flow.
2. Specify distribution infrastructure like machine names, mode of execution (LSF or rsh),
by using the set_distribute_host command.
For example:
set_distribute_host -rsh -add {hostName1 hostName2 hostName3 hostName4}
3. Specify the Tempus client usage by using the set_multi_cpu_usage -remoteHost
command. The number specified here must be less than or equal to the number of
machines specified in step 2, (if specific machines have been requested using the –rsh
parameter of the set_distribute_hostcommand).
For example:
set_multi_cpu_usage -remoteHost 4
The following example shows that jobs on each remote host can further be multi-
threaded:
set_multi_cpu_usage -remoteHost 4 -cpuPerRemoteHost 4
If LSF distribution is used, then you can specify the number of Tempus clients to be used.
The software needs CPU usage information in order to figure out how many licenses the
system can use for distribution.
4. Load the design in distributed mode using the distribute_read_design command.
This requires providing an input script that contains all the design loading commands,
except the read_spef and read_parasitics command. The
distribute_read_design command opens up N number of Tempus clients (as
specified with the set_multi_cpu_usage -remoteHost) for the Tempus distributed
processing session, and loads the design script into the Tempus clients.
For example:
distribute_read_design
-design_script $rootDir/design_load.tcl
-outdir $output_directory
5. Specify the active setup and hold analysis views.
For example:
set Views [list func_ss_rcmax test_ss_rcmax func_ss_rctyp]
6. Distribute and analyze views using the distribute_views command. This command
distributes the active setup and hold analysis views to Tempus clients, and sources the
specified command script to perform timing and signal integrity analysis.
For example:
distribute_views
-views $Views
-script $rootDir/analysis.tcl
7. Merge the timing and noise reports generated from various servers using the
merge_timing_reports command.
8. Close all the Tempus clients using the exit_servers command to end the distributed
processing session.
The following sample master script needs to be provided as input to the Tempus master.
source env.tcl
set cwd [pwd]
set outDir "$cwd/Output"
# Instructs Tempus to launch jobs in rsh. You can specify the list of machines that can be used
to launch utility servers. You can also specify LSF queue (refer to the Tempus Text Command
Reference).
set_distribute_host -rsh -add {hostname1 hostname2}
or
set_distribute_host -lsf -queue <queue-name> -args {-x –W 30} -resource
"OSNAME==Linux && OSREL==EE50 rusage [mem=10000]"
# Instructs 3 Tempus clients to be used for this session run. Each Tempus client will use 8
CPUs for multi-threading.
set_multi_cpu_usage -remoteHost 3 –cpuPerRemoteHost 8
# Invokes the Tempus clients based on the above information and loads Script-2
(design_load.tcl) on each client. Specified “outDir” is the area where the Tempus client log
files will be generated. All the outputs relevant to this session will be created here. The master
log will reside in the directory where the run is launched.
distribute_read_design -design_script $rootDir/design_load.tcl -outdir
$outDir
# Distributes list of specified analysis views to Tempus clients and processes the commands
specified in Script-3 (analysis.tcl) on each client.
set views [list func_ss_rcmax test_ss_rcmax func_ss_rctyp]
distribute_views -views $views -script $rootDir/analysis.tcl
# Merges the timing report (machine readable format) files from specified views and
generates a merged view file. The paths are sorted based on the slack value.
merge_timing_reports -view_dirs { func_ss_rcmax test_ss_rcmax func_ss_rctyp} -
base_report hold_worst.rpt -base_dir ./dist_mmmc/out > merged_hold_worst.rpt
For more information on loading a MMMC configuration script, see Design Loading and MMMC
Configuration Script on page 31.
For more information on parasitics, see Parasitic Information, Analysis, and Report
Generation Script on page 33.
The analysis views are specified with the distribute_views command, which distributes
them internally to the Tempus clients for processing.This command is automatically issued by
Tempus master via a distribution method (distribute_views).
Note: The script must not include parasitic file loading commands (read_spef) and analysis
view setting commands (set_analysis_view). If specified, these commands will be ignored
by the distribution mechanism.
This script contains commands for SPEF reading, analysis, reporting, and ECO DB
generation (for Tempus ECO flow, if needed).
The commands for reading parasitic information must be specified in the script before the
reporting commands. You must specify parasitic files for all the RC corners. For example:
read_spef -rc_corner corner1 rc1.spef
read_spef -rc_corner corner2 rc2.spef
read_spef -rc_corner corner3 rc3.spef
read_spef -rc_corner corner4 rc4.spef
If the file includes report commands that redirect their output to a specified file (for example,
report_timing >rt.rpt), then the software generates the file in the active view directory
(output directory specified with the distribute_read_design command). For report
commands with no specified redirection, the software generates the report in the
corresponding log file.
The following script examples show distributed MMMC save and restore flows:
# output is the same directory used in the above example where views were saved.
distribute_read_design -restore_design $Views -restore_dir Output -outdir
new_output
distribute_command {report_timing}
To restore a single view from DMMMC saved session on a single machine environment use
the following commands:
read_design Output/view1.enc.dat <topcell>
report_timing
The MMMC commands generate output data in directories as view names inside the
specified output directory. You can specify the output directory in the
distribute_read_design command with the -outdir parameter. For example, consider
the following scenario:
1. A design containing three views (view1, view2, and view3).
2. Run distribute_read_design –design_script design_load.tcl –outdir
Output command.
All the Tempus client-specific .log/.cmd files reports will be saved in the ./Output directory.
The directory structure is shown in the figure below.
After processing the views in distributed mode, segregated reports will be available for each
view in a specific directory that is to be analyzed. One of the prime requirements is to have a
holistic look of all the analysis views for further action.
The merge_timing_reports command can be used to merge reports that are generated
using the reporting commands, such as, report_timing and report_constraint.
You can merge view specific standard timing reports that can be generated using the
report_timing and report_constraints commands.
For GUI-based timing analysis, you can merge view-specific timing reports generated in
machine readable format (using report_timing –machine_readable command in
analysis.tcl), to create a single merged report, which can be loaded in Tempus Global Timing
Debug (GTD).
Merging of timing reports is done based on slack criticality. As each path will contain the
“view” field that represents the view to which a path belongs, so analysis of critical views
becomes easier.
To get optimum run time while using view grouping, it is recommended to use delay corner-
based auto grouping, as mentioned in the example above.
Script -1 (master.tcl):
Script -2 (design_load.tcl):
Sample design_load.tcl:
####################### Script 2 : “design_load.tcl” #########################
source $designDir/settings.tcl
source $dataDir/global_file.tcl
read_verilog $dataDir/netlist1.final.v
read_verilog $dataDir/netlist2.final.v
set out_dir out_dir
read_view_definition viewdefinition.tcl
set_top_module xyz
read_power_domain -cpf power.cpf
set_interactive_constraint_modes [all_constraint_modes -active]
set_propagated_clock [all_clocks]
set_annotated_delay -cell -to [all_inputs] 0
Script - 3 (analysis.tcl):
This script contains all the SPEF reading, analysis, and reporting commands.
####################### Script 3: “analysis.tcl” ##########################
read_spef -rc_corner MIN_rc_corner "$dataDir/pqr1.spef.gz $dataDir/pqr2.spef.gz "
read_spef -rc_corner MAX_rc_corner "$dataDir/pqr3.spef.gz $dataDir/pqr4.spef.gz
set_delay_cal_mode -SIAware true
report_timing -max_path 10 -check_type -setup > setup_report_max.rpt
report_timing -nworst 1 -check_type -setup > setup_worst.rpt
report_timing -max_path 10 -check_type hold > hold_report_max.rpt
report_timing -nworst 1 -check_type hold > hold_worst.rpt
The script example below demonstrates how to perform view-specific reporting. The following
example shows 4 views. The section in the analysis.tcl script, which is provided as input to
the distribute_views command, generates setup.rpt and hold.rpt reports for two views
each:
The DMMMC interactive interface is available only after the views have been dispatched to
Tempus clients.
The DMMMC interactive mode is successfully enabled when the Tempus shell prompt
changes from the standard tempus> to tempus_dmmmc>. Once in interactive mode (set using
set_distribute_mmmc_mode –interactive true setting), the commands are no longer
needed to be dispatched using the distribute_command {}, and can be directly run in the
Tempus master session.
The DMMMC interactive mode supports reporting commands, timing constraints, file writing
commands (such as write_sdc) and ECO commands.
The DMMMC interactive interface is available only after the distribute_views commands
are run.
The distribute_command can be run several times to create a synchronized flow with
multiple commands.
■ Perform What-If ECO and check results from multiple views using -evaluate_all or
evaluate_only parameters of ECO commands.
The above steps can be executed on the interactive prompt, or directly from the master in the
distributed environment.
#RSH mode
tempus> set_distribute_host -rsh -add {machine1 machine2}\
OR
#LSF mode useful for getting a machine from a remote farm environment
# Perform What-If ECO and check results from multiple views using -evaluate_all / -
eavalute_only options of ECO commands
tempus_dmmmc> change_cell -inst i2 -upsize -evaluate_all
tempus_dmmmc> change_cell -inst i2 -upsize -evaluate_only
# Perform get_property query to know slack and other property values with ECO
commands from multiple views
tempus_dmmmc> report_timing -through [get_cells i2]
tempus_dmmmc> set newSlack [get_property [get_pins i2/A] slack_max_rise]
tempus_dmmmc> set_distribute_mmmc_mode -interactive false
tempus> get_distribute_variables newSlack
Specify all the parasitic file loading commands (pertinent to all RC corners used in the design)
in the analysis.tcl (Script 3) script that are accepted as an argument to the
distribute_views command.
■ If distributed MMMC session is not getting launched, you need to check the following:
❑ There are no errors in your design loading file (design_load.tcl) that is used as an
argument to the distribute_read_design command.
❑ If the error message “Unable to open socket, connection refused” is
displayed, then check for items listed in bullets ‘c’ to ‘g’. In all these cases, the
DMMMC system will issue the appropriate error/warning messages.
❑ Log on to the machines specified as resources to the DMMMC session. You must
have direct login access to these machines (that is, without requiring a password at
the time of login). Update your rhosts settings to avoid this issue.
❑ Make sure that the specified Tempus clients in the DMMMC setup are not heavily
loaded. Enough resources should be available on each Tempus client to process a
view.
❑ If using LSF mode, then the required LSF variable and environmental settings
should be done prior to the launch. Similarly, for rsh the DMMMC system assumes
you have configured the RSH access to the Tempus client properly.
❑ The commands that are supported beyond timing and noise analysis flow are not
used in the scripts. The MMMC parameters and options related to RC extraction
must be removed from the design_load.tcl to run the flow smoothly.
■ The set_analysis_view command is not allowed in any of the scripts that are
accepted as input to the DMMMC system. Specify a list of views using the
distribute_views command. This command will distribute these views internally to the
Tempus clients for processing.
■ All merging commands work on the Tempus master and the output of these commands
will be placed in the specified output file. These merge commands will not follow the
protocol of moving the output reports to the specific output area, as mentioned above.
This applies to any command that is capable of generating an output specific to a view.
■ Single machine MMMC and distributed MMMC cannot be used concurrently in the same
Tempus master session.
■ DMMMC is a batch mode execution feature - distributed save/restore and interactive
command entry capabilities are supported in Tempus.
■ Merged noise report will not specify the view name for each record of delay/glitch. You
will see multiple entries of records where each record will correspond to a specific
Tempus client. To match the record to a view and make noise reports handy, you need
to generate text reports along with the merged view text report.
7
Distributed Static Timing Analysis
7.1 Overview
The Tempus Timing Analysis tool provides enhanced performance and capacity to real world
designs by using an innovative massive parallel computer architecture. Timing Analysis has
two modes of operation:
■ Static Timing Analysis (STA)
■ Distributed Static Timing Analysis (DSTA)
You must execute the main script on the master machine - work is shared between multiple
client machines.
To run the DSTA flow, you must specify the following additional commands:
■ set_distribute_host
■ distribute_start_clients
■ distribute_partition
Note: All the STA commands are not supported in the DSTA mode. For more details, see
section Commands Not Supported in DSTA Mode on page 61.
The following table describes some of the key features of STA and DSTA:
STA DSTA
■ Utilizes a single machine and supports ■ Utilizes multiple parallel machines and
multi-threading. supports multi-threading.
■ Multi-threaded performance has ■ Leverages large number of less powerful
improved over the earlier machines.
timing analysis solution - Encounter
■ Reduces overall runtime on large
Timing System (ETS).
designs.
■ Maintains signoff accuracy.
■ Reduces per-process memory footprint
■ Ideal for small designs (<15M on large designs.
instances).
■ Maintains signoff accuracy.
■ Requires minor script changes.
■ Ideal for large designs (>15M instances).
The choice of the static timing analysis mode depends on the design size and runtime.
■ A one million instance design may not realize the benefits of DSTA.
■ A 200 million instance design is not possible using a single machine STA.
■ A 15 million instance design may choose STA or DTSA based on runtime expectations.
If you need to reduce the run time, and have already maximized the threading of STA, then
Tempus DSTA is the best choice. Alternatively, if the run time is less than an hour and your
memory requirements are not a limiting factor, then STA should be selected. Running STA on
a large design will cause longer run time and memory usage. Similarly, running DSTA on a
small design will consume processors with no significant gain.
The table below shows sample scripts for STA and DSTA flows:
You can specify the LSF parameters using the set_distribute_host command:
set_distribute_host -timeout 300 -lsf -queue lnx64 \
-args {-n 4 –R “(CPUS>=4) span[hosts=1] rusage[mem=15000]"}
The following table shows reasonable client counts and thread counts for various sizes of
designs:
Master Log
Master logs are unique to DSTA. You can name a log file using the following command:
tempus -log
The default log file name is ./tempus.log. The file naming increments to tempus.log1 in
the next run. If you do not want to increment, but want to overwrite the existing log file, use
the tempus -overwrite command.
The master log shows that the master machine starts the clients, and loads the design. The
client machines do most of the work with constraints, timing, and reports.
Client Log
The client log files are the same as the Tempus STA log files. Each client runs a copy of
Tempus. The client machine has its own directory and log file, as shown below:
partOutput_0/tempus.log
partOutput_1/tempus.log
partOutput_0/tempus.log12
partOutput_1/tempus.log6
This is caused due to multiple runs with different number of clients. It is recommended that
you check the time stamp to ensure that the logs are for the specific master/client set.
<CMD> report_timing
Analyzing view default_emulate_view with delay corner[0]
default_emulate_delay_corner, rc corner[0] ...
All-RC-Corners-Per-Net-In-Memory is turned ON...
Analyzing view default_emulate_view with delay corner[0]
default_emulate_delay_corner, rc corner[0] ...
Analyzing view default_emulate_view with delay corner[0]
default_emulate_delay_corner, rc corner[0] …
Master
■ To name the master log and overwrite the old log file, use the following command:
tempus -distributed -overwrite -log tempus.log
■ Consider using 4c8t to indicate 4 clients 8 threads, use:
Client
To avoid randomly numbered log file names, delete, or rename the old directories before the
next run, use the following command:
rm -rf partOutput*
Saving the master and client log files allows comparison of various client/thread
configurations and scripts. To save logs, use the following commands:
mkdir saveLog1
cp –rfp tempus*.log pathOutput* saveLog1
Add a print message at the end of the script to confirm completion of DSTA.
# Master run.tcl Script
. . .
. . .
puts “All done”
You can use a single run.tcl file for both STA and DSTA. This can ensure that there are no
errors when DSTA is selected over STA. This can be done by wrapping the DSTA commands
with a 'if' statement, and allowing STA to skip these commands and DSTA to use them.
For example,
if {[info command distribute_partition] != "" } {
puts "You are using Tempus DSTA“
set_multi_cpu_usage -localCpu 4 -cpuPerRemoteHost 4 -remoteHost 2
} else {
puts "You are using Tempus STA“
set_multi_cpu_usage -localCpu 4
}
You can run a script in both the batch and interactive modes without changing the Tcl
commands, by specifying the following in the run.tcl file:
# Master run.tcl Script
. . .
. . .
return ; # Stops the script if it is in the interactive mode but does not exit
exit ; # Exits Tempus if it is in the batch mode
You can use the following command to track the start to finish runtime:
# Initalize at the top of the master run.tcl
set initTimeTick [clock seconds]
. . .
. . .
. . .
# Calculate runtime at the bottom of the master run.tcl
set lastTimeTick [clock seconds]
set totalTime [expr $lastTimeTick - $initTimeTick]
set totalMin [format "%4.1f" [expr $totalTime / 60.0]]
puts “The total walltime minutes was: $totalMin minutes”
You can track the master current and peak memory using the following command:
report_resource
This command will print the resource usage for the master. The following is an example
output:
Cpu=03:02:02 Real=02:31:31 Peak_mem=70502meg Cur_mem=70494meg
To print the resource usage for each client, you can use the following command:
distribute_print_client_usage
This command does not interrupt or wait for whatever the client is currently doing.
You can measure the /tmp free disk space by inserting the following code at the beginning
and at the end of the script:
set dir /tmp
set a [lindex [lindex [split [exec df -k $dir] \n] end] end-2]
set a [expr {$a / 2.0**20 }]
set localTmpGigs [format "%0.1f" $a ]
puts “The /tmp disk has $localTmpGigs gigs free”
set nWorstCnt 1
report_timing -retime path_slew_propagation -max_paths $maxPathCnt \
-nworst $nWorstCnt -path_type full_clock > $reportName
If a pre-defined sorting criteria is not defined, then the timing report output is displayed
in any order.
Note: The path numbers that are assigned to each path in the timing report are not
reported in DSTA output reports.
The use models of write_sdf and write_twf commands are the same for both DSTA and
non-distributed Tempus. The use models of these commands have been modified for DSTA,
as given below:
■ save_design: Allows you to save a snapshot of the design in the distributed timing
analysis mode. All the design data, partitioning information, and client sessions are
saved in the directory specified using the save_design command. The saved data size
can be 2 times the size of the flat saved session due to partition overlap.
■ The command usage of save_design is:
Usage: save_design [-help] <session> [-cellview {libname cellname
viewname} ] [-noRC] [-overwrite]
Where -cellviewand -noRC parameters are not supported in DSTA.
Example
## DSTA setup
set_multi_cpu_usage -localCpu 4 -remoteHost 2 -cpuPerRemoteHost 4
set_distribute_host -local -timeout 300
## Start clients
distribute_start_clients
read_lib
read_verilog
set_top_module
read_spef/read_rcdb
distribute_partition
read_sdc
report_timing
## Save current session
save_design <session> –overwrite
■ read_design: Enables you to restore the analyzed design in the distributed mode for
further reporting (or analysis).
The command usage of read_design is:
Usage: read_design [-help] [-cellview {libname cellname viewname}][-
physical_data]
Where -cellview and -physical_data parameters are not supported in DSTA.
Example
## DSTA setup
set_multi_cpu_usage -localCpu 4 -remoteHost 2 -cpuPerRemoteHost 4
set_distribute_host -local -timeout 300
## restore saved session
read_design distSave -cell <cellname>
## Design is now in fully analyzed state
The number of clients must be same for the saved and restored sessions. The number
of master and client threads can be changed in the read_design from that used in the
save_design.
■ report_disk: Measures the disk metrics of the current working directory and the /tmp
directory. The output of this command allows you to investigate Mb/sec throughput of the
disk and disk I/O requirements. This command is supported in both distributed (DSTA)
and non-distributed Tempus.
The command usage of report_disk is:
report_disk [-help] [-dir directory_name]
Example
dsta> report_disk
DISK_INFO : 206.66 Mb/S 381G total 1.1G used 359G free /tmp
{206.66 381G 1.1G 359G}
Sample Scripts
STA
# Non-distributed script
puts “Starting script:
set_multi_cpu_usage -localCpu 4
read_verilog
read_lib
read_spef
read_sdc
update_timing
report_timing
DSTA
set clientCnt 4
set threadCnt 2
set lsfQueue ssv
set hostGroup ssvpe
set maxMem 91000
set_multi_cpu_usage -cpuPerRemoteHost $threadCnt –localCpu \
$threadCnt -remoteHost $clientCnt
set_distribute_host -timeout 300 -lsf \
-queue ${lsfQueue} -args "-m ${hostGroup} -n ${threadCnt} \
-R \"(CPUS>=${threadCnt}) span\[hosts=1\] \
rusage\[mem=${maxMem}\]\""
}
distribute_start_clients
source load_libs.tcl
source load_netlist.tcl
source load_parasitics.tcl
distribute_partition
source load_constraints.tcl
update_timing –full
distribute_print_client_usage
set reportName rt_max_200K.rpt.gz
report_timing -late -max_paths 200000 -nworst 1 -path_type \
full_clock -net > $reportName
set reportName rt_max_pba_200K.rpt.gz
set maxPathCnt 200000
set nWorstCnt 1
report_timing -retime path_slew_propagation -max_paths $maxPathCnt \
-nworst $nWorstCnt -path_type full_clock > $reportName
General Commands
■ change_inst_name
■ get_metric
■ get_preference
■ save_testcase
■ set_preference
■ write_flow_template
■ set_license_check
■ write_def
■ write_rcdb
■ read_scope_spef
■ read_scope_verilog
■ report_annotated_assertions
■ report_cell_instance_timing
■ report_clock_sense
■ report_critical_instance
■ report_design_rule
■ report_freq_violation
■ report_lib_cells
■ report_pba_aocv_derate
■ report_slack_histogram
■ report_statistical_timing_derate_factors
■ report_wire_load
■ set_exclude_net
■ write_annotated_transition
■ write_loop_break_sdc
■ analyze_paths_by_hierarchy
■ analyze_paths_by_view
■ create_path_category
■ delete_path_category
■ dump_histogram_view
■ highlight_timing_report
■ load_path_categories
■ load_timing_debug_report
■ save_path_categories
■ write_category_summary
■ write_text_timing_report
■ ctd_trace
■ ctd_win
■ get_ctd_win_id
■ get_ctd_win_title
■ set_ctd_win_title
RC Extraction Commands
■ extract_rc
■ get_qrc_tech_file
■ rc_out
■ report_rcdb
■ report_unit_parasitics
■ set_qrc_tech_file
■ set_twf_attribute
■ set_virtual_clock_network_parameters
■ write_power_constraints
■ write_tcf
Unsupported Parameters
The -tcl_list parameter of all the report_* commands, is not supported in the DSTA mode.
8
Signoff ECO
8.1 Overview
Tempus ECO is a licensed feature available in Tempus to address certain signoff concerns.
Tempus ECO is easy to plug in in any Signoff analysis flow and allows the user to clean up
the remaining timing violations as well as reducing the power consumption of the netlist. Also,
this feature allows fixing timing violations on large designs (multi-million instances) with many
analysis views. You can run the ECO feature in Tempus by invoking Tempus using the -tso
option.
In Signoff environment, designers always find some remaining timing violations that must be
cleaned up. These violations can be due to many reasons:
■ Block-level versus top-level timing analysis do not match.
■ Imprecise Timing budgeting, which has generated the setup/hold/drv/cap/glitch
violations.
■ Timing was not optimized across all the analysis views during implementation flow to
avoid over-fixing, and the designer is relying on the Signoff stage to catch final violations.
The final violations are identified at the Signoff stage for which the absolute number can
be slightly different in the implementation flow.
■ Often additional corners and/or modes are added at the time of signoff.
■ There may be timing model differences.
■ Implementation tools cannot optimize timing with full Signoff STA precision.
Instead of back-annotating the timing into the implementation tool, it is much easier to stay in
the Signoff environment and perform various transforms to fix the remaining violations. In the
Signoff stage, the netlist changes committed are written in an ECO file, which will be used in
the implementation tool to perform incremental place and route.
In addition to timing closure, Tempus ECO is also a solution to reduce overall power
consumption of the netlist. At Signoff stage, some amount of timing pessimism is removed
due to Path Based Analysis (PBA), also called as retiming, and that extra timing margin can
be used to perform netlist change leading to overall power reduction. This is especially
beneficial when AOCV or SOCV timing modes are enabled.
Usage
These features can be used in the scenarios mentioned below to fix timing violations:
The goal is to fix the inter-partition timing violations after assembling the design on full flat DB.
In this scenario, the timing violations to be fixed can be large but their number should not be
big. This means that you can have some paths with negative slack because those are inter-
partitions paths, which might not have optimized correctly earlier in the flow. But the number
of such violations is usually not too much because there are not many such paths.
At the block level, there may be remaining violations at the Signoff stage. This is because one
methodology is to remove any pessimism in the timing constraints used by the
implementation tool, and then rely on the Signoff STA tool to fix the real remaining violations.
In this scenario, since optimization is already performed once in the flow, thus the timing
violations to fix are probably small.
Here the challenge is to perform precise fixing across all analysis views without creating any
new violations.
This is typically where Path Based Analysis mode would be applied in order to allow Power,
Performance, Area push with Signoff timing analysis accuracy.
The input and output data, and various fixing methodologies and targets for setting up the
ECO environment are as follows:
Input Data
■ Technology data (timing libraries)
■ Design data (Verilog, MMMC, SPEF)
■ Optional design data (DEF, CPF/UPF, ILM, and LEF)
Output Data
Starting ECO
To start a ECO session, type the following command with the appropriate parameters on the
UNIX/Linux command line.
tempus > tempus -tso
Terminating ECO
Generating ECO Timing DB and Running ECO Timing Closure in Separate Sessions
ECO Timing DB is a lightweight timing graph built using the design input data. Since this
timing graph is lightweight compared to the complete timing graph and stores only the data
that is required for ECO fixing, it reduces the memory.
Within ECO fixing, Timing analysis is based on the hold and setup light-weight timing graph.
Evaluation and commit time are also reduced when done on light-weight timing graphs.
Therefore, it reduces both memory as well as turnaround time (TAT) significantly.
The write_eco_opt_db command will save the ECO Timing DB after timing analysis, in
non-distributed mode or in a distributed-MMMC session. In case several views are active at
the same time, ECO Timing DB for each of them will be saved. The data will be saved in the
directory pointed to by the set_eco_opt_mode -save_eco_opt_db option.
Example
tempus> set_eco_opt_mode -save_eco_opt_db mySignOffTGDir
tempus> write_eco_opt_db
This will save the ECO Timing DB information in the mySignOffTGDir directory.
Example
The below figure shows that in Session 1, the clients performing timing analysis in parallel
can be launched on the local machine, but can also be distributed on LSF farm
(set_distribute_host -lsf).
Running Signoff Optimization with ECO Timing Generated in Batch Mode Using
DMMMC
Note: spef.tcl must contain the read_spef or read_parasitics commands so that every
active rc_corner is parasitic annotated.
For small to medium size designs where not many views are active (below 8), you can
generate ECO Timing DB in CMMMC and perform ECO fixing in one single Tempus session,
Example of Hold fixing with ECO Timing DB generation and ECO fixing in one single Tempus
CMMMC session:
read_lib $liberty
read_lib -lef $lef
read_verilog $netlist
set_top_module my_top
source viewDefinition.tcl
read_def $def_file
source spef.tcl
set_distribute_host -local
set_multi_cpu_usage -localCpu 8
set_eco_opt_mode -save_eco_opt_db myEcoTimingDB
write_eco_opt_db
set_eco_opt_mode -load_eco_opt_db myEcoTimingDB
eco_opt_design -hold
Note: spef.tcl must contain the read_spef or read_parasitics commands so that every
active rc_corner is parasitic annotated.
The PARADIME flow allow you to perform various tasks, such as distributed timing analysis,
ECO, and any interactive debugging (such as, reporting, what-if analysis) in a single Tempus
session leading to improved usability of the tool. The licensing requirements for this flow
require Tempus to be invoked with the -tso license option for performing optimization in
addition to the Tempus Distributed Multi-Mode Multi-Corner licensing requirements.
The following diagram shows the launch of the PARADIME flow, where Tempus master is
used for ECO runs and clients are used for timing analysis runs.
To enable this flow, you need to make the following setting in the script provided to the Tempus
master.
set_distribute_mmmc_mode -eco true
The Tempus master and clients load the design data for running either of the following flows:
■ Full analysis
■ Restored analysis
To run the full analysis flow, you need to make the following settings:
distribute_read_design -design_script design_loading.tcl -outdir Output
distribute_views -script report.tcl -views {view1 view2}
Tempus master launches multiple DMMMC clients to load the design data as specified in
design_loading.tcl and run report.tcl in order to perform full timing analysis runs and
generate timing reports. Meanwhile, Tempus master also loads MMMC design for all active
views of interest.
Once the design loading and timing analysis is done on the clients, the software is available
with an interactive dmmmc> prompt with access to live clients. You can do the following:
■ Perform merging of report after full timing analysis run or run manual commands to find
out critical views of interest.
■ Perform interactive querying and debugging on one, few, or all views of clients.
By default, all active views will be specified as setup and hold views for Tempus ECO run on
master. If setup and hold views for Tempus ECO run are different, they can be specified using
the variables below:
set eco_setup_view_list “<list of setup views>” # To specify setup views for
ECO run
set eco_hold_view_list “<list of hold views>” # To specify hold views for ECO
run
Sample Script
# To configure multiple CPUs
set_distribute_host –local set_multi_cpu_usage -localCpu 8 -remoteHost 2 -
cpuPerRemoteHost 8
# To enable the flow
set_distribute_mmmc_mode -eco true
# To specify different Tempus version for DMMMC client runs
set eco_client_tempus_executable "/icd/flows/142_tempus/bin/tempus"
# Variables to specify list of setup and hold view for Tempus ECO (in case different
than the views restored on clients). By default, all clients’ views will be in
setup/hold view list
set eco_setup_view_list "view1"
set eco_hold_view_list "view2"
# Variables to specify physical data
set eco_lef_file_list “tech.lef design.lef”
set eco_def_file_list "design.def
set data_dir /a/b/c
distribute_read_design –design_script design_loading.tcl -outdir
eco_restore_output_dmmmc
distribute_views -script report.tcl -views {view1 view2}
report_timing > before_ECO.rpt
eco_opt_design -hold
report_timing > after_ECO.rpt
The design_loading.tcl script is the following:
read_view_definition <view definition file>
read_verilog design.v
set_top_module
The report.tcl script is the following:
read_spef <all corner spef files>
update_timing –full
report* commands (optional)
In this flow, saved sessions from individual STA runs are restored. These individual SMSC
STA runs have unique view names and are saved in MMMC configuration using a view
definition file with a unique library set, delay-corner, rc-corner, constraint-mode, analysis-
view, and so on. This flow uses the saved SMSC sessions as clients. This is done by setting
up the compatible DMMMC sessions to restore the flow structure, as shown below:
set Views [list func_rmax func_rcmin test_rcmax]
distribute_read_design -restore_design $Views -restore_dir
<pathname_of_directory_of_saved_session> -outdir Output
Alternatively, a way to restore saved SMSC sessions is available if sessions are not saved in
compatible DMMMC restore flow structure. You can provide a list of sessions’ directories and
corresponding view names as input in pairs as mentioned below:
set data_dir <unix path>
distribute_read_design -restore_design { {view1 $data_dir/view1/session.enc}
{view2 $data_dir/view2/session.enc} ...{viewN $data_dir/viewN/session.enc} } –
outdir Output
Same number of clients are required as the number of sessions to be restored. Each saved
session can have data for one MMMC view.
Data from same restored sessions is loaded on the master for all views together. List of setup
and hold views for Tempus ECO run can be specified using the variables below:
set eco_setup_view_list “<list of setup views>” # To specify setup views for Tempus
ECO run
set eco_hold_view_list “<list of hold views>” # To specify hold views for Tempus
ECO run
All data for master is picked from the saved sessions, including constraints and parasitic
information. Only the libraries are picked from the UNIX path that are given in the view
definition file because the library data is not saved in saved sessions. In the scenario where
there is no common view definition file for restore sessions, you can auto-merge (or
concatenate) all the view definition files, and create a single view definition file (which is the
superset of all the individual sessions’ view definition files) to load on the master.
If there is no common view definition file, you need to do the following settings:
set_distribute_mmmc_mode –merge_view_definition
Sample Script
# To configure multiple CPUs
set_distribute_host –local/-rsh/-lsf … set_multi_cpu_usage -localCpu 8 -remoteHost
2 -cpuPerRemoteHost 8
# To enable the flow
set_distribute_mmmc_mode -eco true
# To specify different Tempus version for DMMMC client runs
set eco_client_tempus_executable "/icd/flows/142_tempus/bin/tempus" –
# Variables to specify list of setup and hold view for Tempus ECO (in case different
than the views restored on clients). By default, all clients’ views will be in
setup/hold view list.
set eco_setup_view_list "view1"
After the design loading and analysis (relevant only in full analysis flow) is done on clients,
the interactive prompt is available to user. You can do report merge after full timing analysis
run or run manual commands to find out critical views of interest. Any pre-requisite
commands/setting for Tempus ECO run should be applied by this stage.
Interactive querying and debugging can be done on any number (one, few or all) of clients.
To select few views, use:
distribute_command –views { <list of views to select>} { <list of commands>}
Manual ECOs (if any) must be done on Tempus master directly without
distribute_command. Netlist update is done for all clients and master database. Tempus
software detects if manual ECOs are performed using distribute_command and errors out.
Running ECO
When you run ECO file written by Tempus ECO, it is sent automatically to clients for post ECO
signoff timing report generation. On completion of the Tempus ECO run, the master will return
to interactive prompt with access to Tempus clients for signoff timing report generation and
manual what-if analysis. You can also do successive Tempus ECO runs.
Note that running Tempus ECO as part of the paradime flow is different from running normal
ECO (when invoked from outside this flow) where all the set_eco_opt_mode parameters
are available in this flow except for the parameters below:
■ –load_eco_opt_db: ECO cannot accept pre-generated ECO Timing DB from outside.
■ –save_eco_opt_db: This parameter is ignored and ECO Timing DBs are stored in
DMMMC output directory.
Post ECO, you can generate sign-off reports, debugging, perform manual what-if analysis
and so on.
The interactive prompt after ECO is available to the user. It can be used for generating sign-
off reports, debugging, doing manual what-if analysis, and so on. You can also run another
Tempus ECO run at this stage.
Use Model
■ Master does not have any timing information available. There is check in software to
ensure that timer update is never triggered in master session.
■ All timing related queries are to be done from clients using two ways
❑ Use distribute_command in non-interactive mode. You can also make selected
views active in this mode.
distribute_command –views { <list of views | all}
■ If any command needs to apply to both master and clients, it needs to be specified for
both master and clients using separate commands. For example, if user needs to specify
timing derates, it needs to be done for master as well as clients
Any settings/commands, which affect timing analysis should be applied to clients using
distribute_command { list of commands}
Use the following command to assign variable value from master to clients
set_distribute_variables “list_of_variable_names” [ -view <viewName> ]
Different Tempus version can be specified for client runs. This is useful in scenarios where
timing analysis and ECO need to be run with different Tempus versions.
set eco_client_tempus_executable "tempus executable path"
Signoff Timing Optimization feature allows you to run timing and power optimization within
Innovus on Signoff parasitic from Quantus QRC and Signoff timing from Tempus. This feature
gives a complete automated solution for using the entire signoff tools through one high-level
super command.
In a good timing closure methodology, at the implementation stage the timing targets that are
set by the signoff Static Timing Analysis (STA) tool should be met. In order to ensure that the
design state is close to sign-off quality, the timing reported by the implementation tool must
correlate as much as possible to the signoff STA tool. From that stage, signoff timing
optimization provides the following features:
■ Allows you to run timing and power optimization on signoff timing within Innovus.
■ Maximizes the usage of Cadence tools - Innovus will enable you to run extraction
(Quantus QRC) and Tempus without extra effort.
■ To provide signoff timing report in Innovus using Tempus, you can use the
signoffTimeDesign command of Innovus. This command uses Quantus QRC and
Tempus in standalone mode to perform signoff STA using the DMMMC infrastructure and
saves an ECO Timing DB per view. This signoff timing can be optimized using
signoffOptDesign. Similarly, the signoffOptDesign command can be used to
perform power optimization on this signoff timing.
The following diagram illustrates the flow and the architecture of each signoff command:
In case the ECO Timing DB is not available when the signoffOptDesign command is run,
then the super command will automatically run signoffTimeDesign, as shown in the figure
below:
If parasitics should be extracted using TQuantus or IQuantus, this can be done manually by
you. Then signoffTimeDesign can be used with the -reportOnly option to reuse those
parasitics and skip the Quantus QRC call.
In case specific steps/options should be performed before/during Tempus ECO routing, this
step can be performed manually after running signoffOptDesign with the -noEcoRoute
option.
When specific signoff STA commands/options/global variables should be applied, you can set
these in a file and pass it to Tempus through setSignoffOptMode -preStaTcl FILE
parameter.
The syntax below is the basic template flow when user runs parasitic extraction and ecoRoute
manually:
setMultiCpuUsage -localCpu 16 -remoteHost 4 -cpuPerRemoteHost 4
extractRC
signoffTimeDesign -reportOnly -outDir RPT_final
This command will generate the eco_innovus.tcl file, which should be used in Innovus to
perform place and route. It also generates the eco_tempus.tcl file, which can be sourced in
Tempus to perform timing analysis after ECOs. Each optimization engine always ensures no
new violations. For example, when fixing Setup timing, the tool ensures no new DRV/Hold
violations, or when fixing Hold timing, the tool ensures no new DRV/Setup violations. This is
the key to ensure good timing convergence in a minimum of ECO loops.
■ All timing derates, AOCV tables, delay calculation settings, CTE global variables must
also be provided before running the eco_opt_design since those will the timing updates
done during ECO fixing.
■ It is important to correctly set up the timing environment and multi-CPU settings before
running eco_opt_design to avail the benefit of DMMMC timing analysis and Multi-
threading during timing/leakage/area optimization.
■ In case there are filler cells in the design, eco_opt_design will automatically delete them
at the start. To implement this, it is mandatory to specify the filler cells that need to be
removed by using the command, set_filler_mode -core {{list-of-cells1}
{list-of-cells2} …}.
Examples
■ Example 1:
eco_opt_design –hold
This will perform Hold fixing by using Vth swapping, buffering, and resizing techniques on the
combinational cells.
■ Example 2:
set_eco_opt_mode –optimize_sequential_cells true
eco_opt_design –leakage
This will perform Leakage recovery by using Vth swapping technique on both the
combinational and sequential cells.
■ Example 3:
set_eco_opt_mode –delete_inst true
eco_opt_design –area
This will perform Area recovery by using downsizing on both the combination and sequential
cells in addition to buffer removal.
At the signoff stage, you can optimize all remaining violations, such as DRV, Setup, and Hold,
but also to recover Power or Area when needed. This can be achieved in one single Tempus
session using the incremental optimization feature enabled with set_eco_opt_mode -
allow_multiple_incremental true.
The recommended flow is the one described in Example 2 above. In case, area optimization
is needed, it should be called as the first flow step.
Note that if more Tempus ECOs are done in a session then more routing changes will be
needed when implementing those ECOs and therefore larger is the risk to get timing
degradation.
Each optimization step will output an ECO file so in order to avoid overwriting the previous
one, you should apply a unique prefix for each with the set_eco_opt_mode -
eco_file_prefix prefixName option.
Example
set_eco_opt_mode –load_eco_opt_db ECOdb
set_eco_opt_mode –allow_multiple_incremental true
set_eco_opt_mode -eco_file_prefix DRV_FIX
eco_opt_design –drv
set_eco_opt_mode -eco_file_prefix HOLD_FIX
eco_opt_design -hold
This will perform DRV fixing followed by Hold fixing, while giving a different prefix for the ECO
files.
SI Glitch Violations
A signal integrity noise glitch, also called as voltage bump, generated by crosstalk coupling
can propagate and amplify while traveling along a path. As a result, this glitch can cause
incorrect signal state change. Tempus provides the ability to fix SI glitch violations in Tempus
ECO. This is done using the -fix_glitch parameter of the set_eco_opt_mode command.
Syntax:
set_eco_opt_mode -fix_glitch true|false
When set to true, the software performs SI glitch fixing during DRV fixing using resizing and
buffering techniques.
■ In case remaining SI glitch could not be fixed using resizing and buffering techniques, it
is recommended to select those nets and re-route them with extra SI property.
Example
SI Slew Violations
Crosstalk effects caused by parasitic capacitance between adjacent nets can lead to a larger
signal transition (SI slews) on the victim nets. Tempus provides the ability to consider SI slews
apart from base slews while performing transition violation fixing during DRV optimizations.
All other optimizers that include setup, hold, leakage, area, power, and dynamic do
not consider SI slews. You must run this as the first step of optimization before proceeding for
any other incremental optimization.
Syntax
set_eco_opt_mode -fix_si_slew true|false
When this parameter is set to true, the tool checks max_tran rule against SI slew and such
violations will be resolved during DRV fixing using resizing and buffering techniques.
Examples:
In Tempus when attackers are transitioning opposite the victim, it causes the arrival time to
increase (positive delta delay). And, when attackers are transitioning at the same time as the
victim, it causes the arrival time to reduce (negative delta delay).
Tempus provides the ability to fix crosstalk delta delay in Tempus ECO. This helps in
improving the design robustness, SI-delay fixing convergence, and minimizing the Setup
versus Hold timing conflicts on critical paths.
Syntax:
set_eco_opt_mode -fix_xtalk true|false
When set to true, the software reduces the crosstalk on the net that violates the thresholds
set by you.
■ To fix the nets with the slack threshold value equal to or less than a specified threshold
value:
The following example uses DRV fixing to reduce the crosstalk delay on all nets that violated
the 300ps threshold rule in setup views:
set_eco_opt_mode -setup_xtalk_delta_threshold 0.3
set_eco_opt_mode -fix_xtalk true
eco_opt_design -drv
The software picks the worst victim and its attackers from ECO-DB. If the victim is violating
then the attackers with positive slack are identified and downsized to avoid any new timing
violations. Else, non-violating victims are ignored.
To fix IR drop in Tempus ECO, use the -fix_ir_drop and -load_irdrop_db parameters of
the set_eco_opt_mode command. When enabling the -fix_ir_drop parameter along with
providing an IR Drop DB using the -load_irdrop_db parameter, eco_opt_design -drv
performs an IR drop fixing by downsizing instances without creating any Setup/Hold/DRV
violations.
For more information, refer to the “Timing-aware IR Drop Fixing” section in the Voltus User
Guide.
The following five options are specific to the PBA mode for Tempus ECO:
Example:
report_power
set_eco_opt_mode -delete_inst true -optimize_sequential_cells true
eco_opt_design -power
In order to allow sequential elements to be resized during power optimization, ensure that
there is no Fixed attribute applied on them. If you measure Setup timing degradation after
doing a Power optimization, see section Setup Timing Recovery After a Large Leakage
or Power Optimization.
■ Verify that all the sequential elements are not Fixed, otherwise they will not be the
candidates for resizing.
■ When doing aggressive Power optimization, a large amount of netlist changes is
generated and the timing histogram attains a huge peak at around 0ns slack.
In this context, the software cannot completely avoid Setup timing degradation and a light
Setup recovery based on the Vth cell swapping will help to get back to the initial timing.
The solution is to perform a setup timing recovery optimization after generating a fresh
signoff timing post-power optimization.
write_eco_opt_db
set_eco_opt_mode -load_eco_opt_db ECO-DB-PBA2 -setup_recovery true
eco_opt_design -setup
update_timing -full
On a hierarchical design, you have the flexibility to optimize timing only at the top level, or on
the top-level and block-level netlists. You can apply the dont_touch attribute on the modules
that should not be touched by ECO fixing. The output of the eco_opt_design command is
an ECO file for the top level and for each identified partition, so that you can go back to
implement those ECOs in each of the respective netlists.
On a hierarchical design, the buffering happens in logical and physical hierarchy-aware mode.
This also implies that the partitions' interface remain unchanged.
In order to perform hierarchical chip finishing in Tempus, there are two main phases that need
to be correctly set up:
■ Assembling the design
First, the top-level and all block-level verilog must be loaded in Tempus. Then, the
merge_hierarchical_def command will merge the top-level DEF and all the block-
level DEF files. Next, the read_spef command loads the top-level SPEF and all block-
level DEFs for every corner.
■ Specifying which modules should be treated as partitions
In order for the tool to know which modules should be treated as partitions, you have to
provide the list of those module cells through an external file. This is done using
set_eco_opt_mode –partition_list_file file.
Note: You must provide the pointer to the ECO Timing database using set_eco_opt_mode
–load_eco_opt_db since eco_opt_design cannot do it in batch mode for hierarchical
designs.
The intent of the Master/Clone design methodology is to build common blocks once and
instantiate them multiple times. It is also called a hierarchical implementation with Master/
Clones. This methodology allows the duplicated functionality within a chip to be built and
verified once, and then instantiated multiple times, thus reducing work load and data storage.
Keeping a non-uniquified netlist makes the scope and breadth of late logic changes easier.
The logic changes would then be limited to a subset of the chip, reducing the critical path
turnaround time and amount of re-verification required to achieve final signoff.
A cloned block is implemented so that it can operate in the worst-case corner scenario in any
of its instantiation but once assembled in its top level, the full flat STA might reveal new timing
violations. Master/Clone timing optimization is needed because each clone can have:
■ Different physical environments (such as different IO loads )
■ Different timing environments (such as change in clock slew/skew/OCV between blocks
and flat)
■ Different signal integrity environments
The Master/Clone timing optimization capability in Signoff ECO is able to fix timing violations
and optimize timing in the replicated modules while earlier those would have been treated as
dont_touch. Any netlist change will be checked against each clone’s timing and physical
context to ensure that no violations are created. Some of the benefits of Master/Clone timing
optimization are:
■ Top and CPUs are optimized
The use model for running ECO timing closure on a hierarchical design with unique or
replicated instances is the same.
The Master/Clone use model for a design with 2 clones block 1 and block 2 is given below:
read_lib $liberty
read_lib –lef “$techno_lef $all_lef”
read_verilog “my_top.v cellA.v”
set_top_module my_top
merge_hierarchical_def “my_top.def cellA.def”
cellA
set_eco_opt_mode -optimize_replicated_modules true
eco_opt_design –hold
■ When replicated instances have different orientations, the design must be assembled in
Tempus because loading one full flat DEF/Verilog will not work. Or you can also load an
assembled DB from Innovus.
Using this flow, you can run timing analysis on a hierarchical design and finds timing violations
in one particular block. Instead of running ECO at the full chip level, you can generate ECO
Timing DB for that block only. During the next Tempus session, you can load only the data for
the identified block (including physical data) and then reuses the ECO Timing DB generated
earlier and runs ECO fixing again. So once the ECOs are implemented, you can rerun timing
analysis on the hierarchical design and as a result, less or no timing violations are reported,
for the identified block.
■ Step 1: Design is assembled and final signoff timing constraints are applied.
■ Step 2: Timing is met except in the CPU block. At block level, CPU design does not
include the latest timing signoff constraints.
■ Step 3: Load Verilog/DEF/Libs for CPU block only, and run Tempus ECO using ECO
Timing DB generated at top level.
■ Step 4: Timing is met for all blocks.
To automate the top down block ECO flow, use the -pruned_block_name parameter of the
set_eco_opt_mode command. Using this parameter, you can provide a module name or
hierarchical instance name.
The following scripts are used for running Top down block ECO flow:
Note:
■ At block level, you do not need to set this parameter as the tool automatically identifies
the running of ECO fixing on an ECO timing DB, which is generated in block scope
context.
■ There is no need to assemble the physical data for the full chip session.
■ You do not have to provide SDC at block level. All timing information extracted from top
level are embedded in the ECO Timing DB directory.
■ This flow does not support Master/Clone module, but you can select one clone by
providing a hierarchical instance name and then run the Top down Block Eco flow.
You can generate SPEF along with node locations using the following option in the QRC
command file:
output_db -type spef -subtype standard -disable_subnodes false
Note: Use the following command to pass a command file to Quantus QRC when running it
from the Innovus cockpit.
setExtractRCMode -qrcCmdFile <file>
You can use a third-party tool to generate SPEF with node locations.
Example:
The syntax below shows how node locations are saved in a SPEF file. A SPEF file with the
node locations has extra lines with the *N prefix in the CONN section.
*CONN
*I *15488:z O *C 71.65 237.505 *L 0 *D MUX2_X1
*I *15465:D I *C 73.035 236.08 *L 0.00316 *D SDFFR_X1
*N *907:2 *C 72.675 236.95 //CDNZ 1
*N *907:3 *C 72.675 236.95 //CDNZ 2
*N *907:4 *C 72.675 235.76 //CDNZ 2
To provide parasitic with node location (See section, Generating Node Locations in Parasitic
Data on page 101)
In addition, when enabling this feature, the setup timing optimization will be able to insert pairs
of inverter along the route, if that is seen as a better choice for timing closure compared to
single buffer insertion.
Example:
set_eco_opt_mode -along_route_buffering true
eco_opt_design –drv
This will perform DRV fixing in a mode where buffering will also be able to insert buffers along
the route topology.
Path group support for Tempus ECO can be used for hold or setup fixing.
Note: This feature is currently not supported for DRV or leakage optimization.
You can specify endpoints that need to be included or excluded during the optimization for a
view with the following set_eco_opt_mode parameters:
■ -select_hold_endpoints
■ -select_setup_endpoints
File format:
<View> include/exclude <Endpoints>
<View> can be specified as either viewName or V* (if the endpoints are to be included/
excluded for all views)
■ Tempus default behavior refers to the inclusion of all pins for the view, as shown below:
> V* include E*
■ Wildcards cannot be used for including/excluding pins, as shown in the below example:
■ You can set exclude endpoints one by one without using any wild card.
You can specify slack adjustment (margin) for selected endpoints during optimization for a
view with the following set_eco_opt_mode parameters:
■ -specify_hold_endpoints_margin
■ -specify_setup_endpoints_margin
File format:
<View> <Margin> <Endpoints>
<View> can be specified as either viewName or V* (if the endpoints are to be included/
excluded for all views)
<Margin> is specified as a float value in nanosecond. Margin value is subtracted from the
endpoint slack, so a positive margin means that the endpoint slack would be degraded by the
margin amount.
In addition to timing closure, Tempus ECO is also a solution to reduce overall power
consumption of the netlist. At Signoff stage, some amount of timing pessimism is removed
due to Path Based Analysis, also called retiming, and that extra timing margin can be used to
perform netlist change leading to lesser overall power. This is especially beneficial when
AOCV or SOCV timing mode are enabled.
■ The list of Gate Array filler cells must contain enough granularity to ensure that any empty
space created during metal ECO can be filled back.
■ Do not specify cells through setTieHiLoMode if Tie cell insertion is not allowed.
The software automatically identifies the Gate Array cells by checking which library instances
have the same SITE name as the Gate Array filler cells specified by the user. Here, empty
spaces will be filled up by the Gate Array filler cells to ensure 100% placement density.
The following command lists all the Gate Array filler cells, which can be deleted or inserted
back:
set_eco_opt_mode -use_ga_filler_list {<list_of_Gate_Array_filler_cells_name>}
Example:
The following command enables Hold fixing in the metal ECO mode by allowing the listed
Gate Array filler cells to be deleted or inserted during the ECO process.
tempus> set_eco_opt_mode –post_mask true
tempus> set_eco_opt_mode –use_ga_filler_list {GFILL1BWP GFILL2BWP GFILL4BWP
GFILL10BWP}
tempus> eco_opt_design -hold
To enable the SmartMMMC feature in the two sessions flow, use the below parameters of
the set_eco_opt_mode command:
■ set_eco_opt_mode:
To enable the SmartMMMC feature in the Paradime flow, use the below parameters of the
set_distribute_mmmc_mode command:
■ set_distribute_mmmc_mode:
9
Timing Model Generation
9.1.1 Overview
Timing model extraction is the process of extracting the interface timing of hierarchical blocks
into a timing library. Typically, model extraction has the following advantages:
■ Reduces the memory requirements by generation of extraction timing models (ETMs) for
respective blocks, which may be huge in size.
■ Reduces the static timing analysis (STA) run time.
■ Hides the proprietary implementation details of the block from a third-party.
The do_extract_model command is used to build a timing model (.lib) of a digital block to
be used with a timing analyzer. The extraction of the "actual" timing context for a lower-level
module instance is required for achieving timing convergence with large hierarchical design
databases. The timing analyzer has the following advantages while analyzing timing
extracted models instead of a complete block design:
■ Provides the timing engine capability to allow for quick derivation of a module's timing
context.
■ Extracts data correctly across multiple clock domains.
■ Allows merging of various models in various modes for their respective blocks.
You can start with model extraction with the following data loaded in the software:
■ Design netlist
■ Timing libraries
■ Block context (constraints, such as, clocks, path exceptions, operating conditions etc.)
■ RC data of the nets
The flop-to-flop type of paths are not written in the ETM, as these do not affect the interface
paths timing.
The following figure shows the equivalent ETM for a given netlist:
The extracted timing model is context-independent because it gives the correct value of arcs/
delays, even with varying values of input transitions, output loads, input delays, or output
delays. In such cases, it is not required to re-extract the model if some of the context is
changed at a later stage of development.
However, the model depends upon the operating conditions, wire load models, annotated
delays/loads, and RC data present on internal nets defined in the original design. So if these
elements change at the development stage of design then we need to re-extract the model
for correlation with the changed scenario.
After model extraction for MMMC designs, the dumped assertion files will be added with
${viewName} suffix, and the dumped derate related assertion files will be added with
${delayCornerName} prefix. You need to choose the corresponding file while using the
extracted models.
In worst slew propagation mode, for characterizing both A-Z and B-Z delay arcs, the worst
slews S1 and S2 will be propagated to calculate the delay of logic downstream to the AND
gate.
In path-based propagation mode, the slew S1 will be propagated to characterize the A-Z arc,
whereas S2 will be propagated to characterize the B-Z arc.
Nets
Nets can mainly be classified into two types – boundary nets and internal nets. The nets
which are directly connected to the input or output ports of the block are termed as the
boundary nets. The nets which drive and are driven by some internal instance pin of the block
are termed as the internal nets. Model extraction treats both the nets differently as boundary
nets are always related and connected to the context.
■ Boundary Nets
The boundaries are connected to the context. So the RC data for them may change if the
context of the block changes at a later stage. To be better context independent the model
should not consider SPEF or DSPEF data for their delay calculation and a separate
SPEF/DSPEF file for the boundary nets can be stitched to the top level data while
instantiating the extracted model.
The software by default considers the RC data while extracting the model. The software
provides a command-line option that can be used to ignore the RC data for boundary
nets by using the following command:
set_delay_cal_mode -ignoreNetLoad true
Note: Currently, the software does not output the SPEF file for boundary nets which can
be used at the top level. To solve this problem, you need to create the top level SPEF file
for boundary nets of this block or use the default behavior to consider the boundary nets
RC data for model extraction.
■ Internal Nets
As the internal nets connect the pins for the internal instance of the block, they are in no
way dependent on the context environment. So the RC data defined for the internal nets
is used as it is for delay calculation and is added in the extracted paths. If no RC is
defined for these nets, then the wire load models are used to calculate their delays.
However, if a load or resistance is annotated using the set_load/set_resistance
command, then it will override the annotated SPEF or the applied wire load model.
If the nets are annotated with the delays using the set_annotated_delay command
or SDF annotation, then the annotated delay is used instead of the calculated delays. In
case of incremental delays the addition of calculated and incremental delays is used.
Timing Paths
Hold arc value = data path delay (input to flop) - hold value of flop – clock path delay
(clock source to clk pin)
The value for these arcs is the function of the transition on the input port and the
transition at the clock source. If a flop is captured by multiple clocks then separate setup/
hold arcs are extracted with respect to each clock source.
■ Reg2out Paths
The reg2out paths are paths starting from a register and ending up on an output port.
These paths are a combination of trigger arcs (of starting register) and the combinational
delay from sink of trigger arc to the output port. So for such paths an equivalent trigger/
sequential arc is modeled in the extracted model. The delay for the arc will be equal to:
Sequential arc delay = delay (clock source to CK of register) + delay (register CK pin to
out port).
The delay for these arcs is a function of the slew at the clock source and the capacitance
at the output port. As the extracted model can be used for max as well as min analysis,
two arcs are preserved in the model to represent the longest and the shortest
path. Different types (rising_edge/falling_edge) of arcs are extracted for the different
valid clock edges.
■ In2Out Paths
The in2out paths are the path starting from an input port and ending up on an output port.
These paths are pure combinational paths. So for such paths an equivalent
combinational arc is modeled in the extracted model. The delay for the arc will be equal
to:
Combinational arc delay = delay (delay of all elements in the path)
The delay for these arcs is a function of the slew at the input port and the capacitance at
the output port. As the extracted model can be used for max as well as min analysis, two
arcs are preserved in the model to represent the longest and the shortest combinational
path. In case if no path exists for a particular transition (rise/fall), half unate
(combinational_rise /combinational_fall) arcs will be extracted. The timing sense for the
arc will depend on the function of worst (early/late) paths.
The minimum pulse width and period constraints defined at the CK pin of the registers are
transferred to the clock source pins during model extraction.
There may be several different type of registers in the fanout of a clock source. So while
transferring the minimum pulse width to the clock source you can use the worst values
present on the fanout registers. The pulse width is calculated as:
■ pulse width = MAX(Arrival time of Launch clock Path - Arrival time of Capture Clock Path
+ pulse width at clock pins from library)
The minimum period for any clock pin is calculated in the same way as the minimum pulse
width. The minimum period is calculated as:
■ Min Period = MAX(Arrival time of Launch clock Path - Arrival time of Capture Clock Path
+ Min Period at clock pins from library)
Library Attribute
By default, these checks are written as library attributes in ETM.
pin (CLKIN2 ) {
clock : true ;
min_period : 2.0554;
min_period : 2.6248;
min_pulse_width_low : 0.2773;
min_pulse_width_high : 0.7673;
}
If min_period checks corresponding to both rise and fall transitions are present in a
design, then they wiil be modeled as duplicate entries in ETM when written as library
attributes. To avoid duplicate entries we can model these checks as scalar tables or arcs,
where rise and fall transition of min_period checks can be modeled as shown in
following sections. These arcs will be honored by the timer depending on the context,
hence will be more accurate.
Scalar Tables
If the timing_extract_model_write_clock_checks_as_scalar_tables
global variable is set to true, then these checks will be written as scalar tables as shown
below:
pin (CLKIN2 ) {
clock : true ;
timing() {
timing_type : minimum_period ;
rise_constraint (scalar){
values( " 2.0554");
}
fall_constraint (scalar){
values( " 2.6248");
}
related_pin :" CLKIN2 ";
}
timing() {
timing_type : min_pulse_width ;
rise_constraint (scalar){
values( " 0.7673");
}
fall_constraint (scalar){
values( " 0.2773");
}
related_pin :" CLKIN2 ";
}
}
Arc-Based Modeling
These checks can also be written as arcs by setting the
timing_extract_model_write_clock_checks_as_arc global variable to true.
In this case the resulting arc is the function of rise/fall slew of CLK port, hence delay and
slew propagation of the clock network for rise and fall transitions is considered for writing
these arcs. The arc-based modeling of clock-style checks is more accurate and is
recommended for use.
pin (CLKIN2 ) {
clock : true ;
timing() {
timing_type : minimum_period ;
rise_constraint (lut_timing_2 ){
values(" 2.000, 2.000, 2.000, 2.000, 2.000, 2.000, 2.000");
}
fall_constraint (lut_timing_2 ){
values(" 2.000, 2.000, 2.000, 2.000, 2.000, 2.000, 2.000");
}
related_pin :" CLKIN2 ";
}
timing() {
timing_type : min_pulse_width ;
rise_constraint (lut_timing_2 ){
values("0.767, 0.767, 0.767, 0.767, 0.742, 0.087, 0.100");
}
fall_constraint (lut_timing_2 ){
values("0.201, 0.201, 0.201, 0.201, 0.238, 0.247, 0.2636");
}
related_pin :" CLKIN2 ";
}
}
Path Exceptions
Timing extraction flow honors path exceptions defined in the given constraints' file. Typically,
the following path exceptions are used:
■ set_false_path
■ set_multicycle_path
■ set_min_delay
■ set_max_delay
For more information on handling of these exceptions, refer to section “Constraint Generation
during Model Extraction”.
Constants
The case analysis and constants are propagated while extracting a model. When you specify
the set_case_analysis command, you can use the following global variable to control
how constants, propagated at o/p or bi-di ports, are modeled in ETM:
set timing_extract_model_case_analysis_in_library true (or false)
When set to false, the software models the propagated or applied constants to output ports
in the generated constraints’ file (which is generated using the do_extract_model -
assertions command).
When set to true, the software models the propagated constants to output ports written as
pin functions in the extracted model.
Unconstrained Paths
The unconstrained end points exist when proper launch/capture clock phase is not
propagated at the desired endpoint due to any exceptions. The unconstrained input ports due
to false path exceptions are ignored and are not modeled during ETM extraction. The
unconstrained combinational IO paths due to false path exceptions are ignored and are not
modeled during ETM extraction. The unconstrained trigger arcs are calculated during ETM
extraction.
If integrated clock gating (ICG) cells are used for gating the clocks, then these arcs are
preserved as setup/hold arcs. If combinational cells are used for gating, then these arcs will
be preserved as no-change arcs between a clock pin and its enabling signal pin. If you wish
to extract these checks as regular setup/hold checks, you can set the
timing_extract_model_gating_as_nochange_arc global variable to false.
Depending on the type of clock gating situation, no change checks are inferred as follows:
Note: After extracting the clock gating check arc the signal downstream the gate output is not
propagated to the clock pins of the registers.
In case of clock gating with unknown logic, as shown below, no_change checks will be
checked with respect to both the rising edge and the falling edge of the clock signal.
There are some gates, such as multiplexers or XOR gates, where a clock signal cannot
control the clock gate, as shown below.
In such cases, no checks are inferred so you need to explicitly set the gating check if you want
these interface paths to be extracted in the ETM. To know where static timing analyzer will not
infer the gating in such situations, you can use the following command:
check_timing -check_only clock_gating_controlling_edge_unknown –verbose
Model extraction uses the back annotated delay slews and the load information during the
extraction process and reflect the effect in the extracted model. Here is a small description
how these are used.
■ Annotated Delays
The annotated delays using SDF or the set_annotated_delay command override
the calculated delay (from library or RC data) value for the arc; however, the output slew
for the arcs is used as calculated. In case of incremental delays the delta delay is added
to the calculated arc delay.
■ Annotated Slews
Annotated slews are ignored during timing model extraction. These constraints are
dumped in assertions file generated with the do_extract_model -assertions
parameter.
■ Annotated Load
Annotated load overrides the pin capacitance defined in the library, and is used for delay
calculations.
Note: The annotated delays are generated with a particular context and remain true for that
context (transition times) only. So annotating the delays/slews makes the model context
dependent. So to create a context independent model it is recommended not to annotate the
SDF.
Design Rules
Model extraction uses the design rules defined in the library. The worst (smaller for max
design rules and vice-versa) among all the fanout pins (topologically first level) is used for the
input ports and the worst of all the fanin pins (topologically first level) is used for the output
ports.
If design rule limits are defined at the pin and library level, the design rule from the pin is
chosen, rather than the worst of the pin and library level, because the pin level information
overrides the cell level, which in turn overrides the library level information. If design rule
violations (DRV) are coming from the constraints, then you can choose them based on the
following setting:
set timing_extract_model_consider_design_level_drv true (or false)
When set to false, the user-asserted design level DRVs are not considered while modeling
DRVs in the extracted timing model.
When set to true, the user-asserted design level DRVs are considered while modeling DRVs
into the extracted timing model.
Clocks
■ Created Clocks
■ Generated Clocks
■ Clocks with Sequential and Combinational Arcs
Created Clocks
If the create_clock assertion is applied on the pin of a design (not port), then the pin is
modeled as an internal pin with the same name as that of the clock asserted on it. If a clock
is created on a design port, then this port will be preserved as ETM I/O pin, with the same
name as that of the port itself.
Generated Clocks
The generated clocks that defined in a hierarchical block are supposed to be a part of the
block itself and do not come from the top level. So ETM preserves generated clocks inside
the model as internal pins using the Liberty generated_clock construct. The name of any such
internal pin is the same as that of the generated clock.
During the extraction process the pin “buf1/A” will be preserved as an internal pin in the library
with name gclk. The model will show as follows:
generated_clock (gclk) {
master_pin : clk;
divided_by : 2;
clock_pin : “gclk “;
}
pin (gclk ) {
clock: true ;
direction: internal ;
.
.
}
Example 2: Multiple clocks on the same pin
There are some design scenarios when multiple generated clocks are defined on a single pin.
This asserts multiple clock definitions on the pins. In this case, during model extraction the
pin is duplicated with the name of the clock. For example, in a design if there are two clock
definitions, such as:
create_generated_clock –name gclk1 –source [get_ports clk] –add –master_clock CLK
–divide_by 2 [get_pins buf1/A]
create_generated_clock –name gclk2 –source [get_ports clk] –add –master_clock CLK
–divide_by 2 [get_pins buf1/A]
During the extraction process the pin buf1/A will be preserved as an internal pin with names
gclk1 and gclk2. The model will be as follows:
generated_clock (gclk1) {
master_pin : clk;
divided_by : 2;
clock_pin : “gclk1 “;
}
generated_clock (gclk2) {
master_pin : clk;
divided_by : 2;
clock_pin : “gclk2 “;
}
pin (gclk1) {
clock: true;
direction: internal;
…..
}
pin (gclk2) {
clock: true;
direction: internal;
…..
}
When a generated clock is defined on multiple pins, the software asserts a single clock
definition on multiple pins. To handle this scenario, all the pins asserted with this clock are
preserved as internal pins in the model with the name [clock_name_<count>] and the
generated_clock construct is written in the model with all the pin names in the clock_pin
attributes with a space between them. For example, consider a netlist having clock definitions
on multiple pins.
create_generated_clock –name gclk1 –source [get_ports clk] –add –master_clock CLK
–divide_by 2 [get_pins {buf1/A buf2/A}]
During the extraction process, the pin buf1/A will be preserved as an internal pin in the library
with the name gclk1_1; and the pin buf2/A will be preserved as an internal pin with name
gclk1. The model will be as follows:
generated_clock (gclk1) {
master_pin : clk;
divided_by : 2;
clock_pin : “gclk1_1 gclk1 “;
}
pin (gclk1_1) {
clock: true;
direction: internal;
…
}
pin (gclk1) {
clock: true;
direction: internal;
…
}
In this case when a ETM is read, two generated clocks gclk1_1 and gclk1 will be created on
two internal pins - gclk1_1 and gclk1, respectively. Any constraint coming from the top level
will match only with clock gclk1, and not with gclk1_1. To avoid such a situation, you can set
timing_library_genclk_use_group_name global variable to true. When this global
variable is enabled, the original clock (gclk1) is generated at two internal pins - gclk1_1 and
gclk1.
Liberty supports the master_pin attribute inside a generated_clock group definition, which
refers to the pin where the corresponding master clock is defined.
Please note that you are not allowed to define a master clock name in the generated_clock
group in Liberty. Due to this, the software may infer an incorrect master for the generated
clock genclk - if multiple clocks are defined on the CLKIN pin.
generated_clock ( genclk ) {
divided_by : 2 ;
clock_pin : " genclk ";
master_pin : CLKIN ;
}
Hence, for the correct master clock association with the generated clocks, you need to
provide the create_generated_clock definition with the corresponding master clock,
while reading the ETM at the top level.
For example, assume that the cell for instance a/b in the timing library contains the following
generated clock group:
generated_clock ( genclk1 ) {
divided_by : 2 ;
clock_pin : " genclk1 ";
master_pin : CLKIN ;
}
By default (true), the software creates a generated clock with the name - genclk1.
When set to false, the software uses only the clock pin name when creating a generated
clock.
If ETM is instantiated at the top level as BLOCK1 and BLOCK2, then by default the
report_clocks command output will show the following:
----------------------------------------------------------
Clock Descriptions
----------------------------------------------------------------------------
Clock Name Source Period Lead Trail Generated Propagated
----------------------------------------------------------------------------
BLOCK1/genclk1 BLOCK1/genclk1 7.200 0.000 3.600 y y
BLOCK2/genclk1 BLOCK2/genclk1 7.200 0.000 3.600 y y
----------------------------------------------------------------------------
If you do not want to differentiate between genclk1 generated in various ETM instantiations,
you can set timing_prefix_module_name_with_library_genclk global variable to
false. In this case, the report_clocks command will show the following output:
-----------------------------------------------------------------------
Clock Descriptions
-----------------------------------------------------------------------
Clock Name Source Period Lead Trail Generated Propagated
-----------------------------------------------------------------------
genclk1 BLOCK2/genclk1 7.200 0.000 3.600 y y
-----------------------------------------------------------------------
Note: You will need to ensure that the constraints are applied with respect to the generated
clock naming. If required, you can remove the library generated clocks and then apply the
specified generated clocks so that minimal changes are required in the constraints.
Consider a case where both the sequential and combinational arcs exist between a clock
(CLK) and an output (OUT) pin. If any of the early/late sequential/combination arcs are
missing (due to a path exception) between the CLK and OUT pins, the CLK pin is duplicated
as two pins with _SEQ_pin and _COMB_pin suffixes. All the combinational arcs starting from
this clock root to the duplicated pin are bound with the “_COMB_pin” suffix and all the
sequential arcs are bound to be duplicated pin with the “_SEQ_pin” suffix.
The extracted timing model for this block consists of two delay arcs - one from a -> z1 and
another from a -> z2. But the delay of arc a -> z2 also depends on the secondary loading, that
is, at port z1.
This gives rise to a delay arc from a to z2 which is dependent on two loads and one input slew.
So this arc will be dumped as a three-dimensional delay table because the delay depends on
the primary output loading at z2, as well as a secondary output loading at z1.
By default, 3D arc modeling is disabled - the software considers 3D arcs as 2D arcs in timing
modeling.
Note: You should always buffer the port to avoid 3D dependencies. If there is more than a
couple of load dependencies, then there will be accuracy loss since model extraction cannot
accurately model beyond 3D arcs accurately.
All the check arcs (e.g., clk->in) will be characterized for the slew points as follows:
■ Reference slew points will be taken from the slew index of the first element just after the
“clk” port.
■ Signal slew points will be taken from the slew index of the first element just after the “in”
port.
A snapshot of the original timing library for the interface elements (i.e., BUF and CLK_BUF)
is as follows:
Cell (BUF)
{
timing ()
index_1 ("0.0500, 1.4000, 4.5000");
index_2 ("1.0500, 6.5000, 10.0000");
}
Cell (CLK_BUF)
{
timing ()
index_1 ("1.0500, 2.4000, 3.5000");
index_2 ("0.0500, 4.5000, 5.0000");
}
If the do_extract_model command is used, then the extracted model will be characterized
as follows:
■ The signal slew is taken from buf1 slew-index in the original libraries.
Check Arc clk->in
index_1 ("0 0.0500, 1.4000, 4.5000");
■ The reference slew is taken from clk_buf slew-index in the original libraries.
index_1 ("0 1.0500, 2.4000, 3.5000");
■ The input slew is taken from clk_buf slew-index in the original libraries.
The model extraction process will output a timing library and two constraint files containing
the subset of the original constraint. One of these constraint files will be used for a standalone
validation of the model compared to the original netlist. By default model.asrt and
model.asrt.latchInferredMCP will be written in the CWD. If the do_extract_model -
assertions test.asrt command is specified, then three assertion files are generated,
named -test.asrt. test.asrt.latchInferredMCP, and top_model.asrt. The other constraint file
(top_model.asrt) will be used when the extracted model will be stitched to a top level netlist
and test.asrt will be used for standalone model validation.
If the set_false_path constraint is applied through some internal pins/ports, then those
paths/arcs are removed during extraction.
If the set_false_path constraint is applied between clocks or a clock and a port, then these
paths are removed and these exceptions are saved in a top_model.asrt as well as test.asrt
file.
If multi-cycle paths through pins/ports are applied, then during extraction the worst paths
through them mapped to the IO ports are calculated and the exceptions through these IOs
are dumped in the top_model.asrt file.
Consider the following design scenario with multi-cycle path exception applied at A.
If there is no path from IN1/OUT1 and IN2/OUT2, the multi-cycle path will be pushed to IN2/
OUT1. Since there are other paths going through these ports, multi-cycle paths cannot be
pushed to IN2/OUT1 and cycle adjustment is done in delay values of the arcs. This will make
the model context dependent.
■ set_disable_timing
If the set_disable_timing constraint is applied on any arc, then this arc gets disabled
and is not used for the extraction purpose. Thus, such arcs are handled internally by the
tool and are not written in any of the constraint files. Also, the path broken by them will
not be extracted during ETM generation.
■ set_case_analysis
Constants applied/propagated by the set_case_analysis command can be written as
a function attribute of pins in the ETM by setting the
timing_extract_model_case_analysis_in_library global variable to true.
This can be written in the ETM-validation constraint file generated by setting this global
variable to false.
■ create_clock
The pins/ports having create_clock definitions on them are preserved in the timing
model. If a clock is created on some internal pin then the pin name needs to be modified
to reflect the instance name of the extracted model. This is achieved using the same
variable approach.
[get_pins “$ETM_CORE/pin1 $ETM_CORE/pin2 $ETM_CORE/pin3”]
When the extracted model is stitched to some top level netlist, then the clock definitions
are supposed to come from the top level netlist itself. So that such clock definitions are
not needed to be dumped in the top level constraint file, but need to exist in the assertion
file for standalone validation.
■ create_generated_clock
The pins having the create_generated_clock defined on them are preserved in the
extracted model as internal pins. As generated clocks are very much intended for the
block itself and are not supposed to be coming from the top level, liberty provides syntax
to define the generated clocks in the timing model. You can use the following use model:
generated_clock (gclk) {
clock_pin : gclk ;
master_pin : clk ;
multiplied by : 2 ;
}
While loading a model, the software names the generated clocks after their target pin
names, so while dumping the generated clocks in the library the target pin name is
modified to the clock name itself. This facilitates the same name of generated clock
names in the original netlist and the extracted model. This name changing cuts down the
need to modify other constraints (clock uncertainty/path exceptions) related to this clock.
In this case it is not required to dump these generated clocks as a separate constraint.
■ set_input_delay/set_output_delay
In the above design there are two paths CLK->IN (check path) and CLK->OUT (sequential
path).
Here, the check (setup) path will be captured by the early path of clock (CLK->buf4->buf5-
>FF/CK). But the sequential path will be using the late clock path (CLK->buf1->buf2->buf3-
>and1->FF/CK). The extraction of early/late attributes is differentiated through the
min_delay_arc attribute. So, in the extracted model for combinational/trigger/latency arc, both
the rise/fall maximum and minimum arcs exist.
In case of an ideal master clock, the arcs between master and generated clock source, is
controlled through the following setting:
set timing_extract_model_ideal_clock_latency_arc false (or true)
When set to true, the zero delay arc from the master clock to generated clock is considered
in the extracted model. When set to false, this arc is not modeled.
used at the top level. The assertions should be audited before using multi-cycle paths, as they
cannot be inferred in all the cases.
The AOCV analysis mode can be enabled by using the following command:
set_analysis_mode -aocv true
The weights written in the ETM are not meant to derate the model. The model will be
containing the derated delays. The stage weight extracted on arcs will be used to calculate
the stage count of chip level paths going across the ETM.
The extraction of stage weight will be done by tracing the minimum stage count path on arc-
by-arc basis. A path-based cell stage count will be printed on all sequential and combinational
arcs. The extraction strategy for computing stage weight will be as follows:
The stage weights in the extracted model are dumped as user-defined attributes. This will
require defining three attributes at the arc level.
define ("aocv_weight","timing","float");
define ("clock_aocv_weight","timing","float");
The first attribute will be used for combinational and trigger arc and will be
dumped at arc level
as below.
timing () {
timing_type : combinational;
timing_sense : positive_unate;
aocv_weight : 4;
.
.
}
The check arcs will be dumped with two separate stage weights for data and clock:
timing () {
timing_type : setup_rising;
aocv_weight : 4;
clock_aocv_weight : 3;
.
.
}
■ path_based: Delay in ETM are derated using total path stage count of worst path
between those pin pairs.
■ none: Models derated delays that contain the effect of user-derate but does not contain
effect of AOCV derates. The default is set to none.
Before setting this global variable to graph_based or path_based, it is mandatory that the
AOCV libraries are read in and AOCV analysis is enabled (using the set_analysis_mode
-aocv true setting).
The merged timing model contains minimum stage_weight defined between various input
library files, hence the merged timing model is pessimistic.
❑ Different critical paths between the ports for different instances is possible.
You can use ETM with most conservative stage count for all the instances, but this will
lead to pessimistic analysis.
3. The ETMs are written taking AOCV derates into account. At the top level, you need to
have two types of AOCV derate tables:
❑ Cell level AOCV tables
❑ Design level AOCV tables for net
4. While loading ETM for model validation the AOCV derates are already modeled in the
ETM. In this case, you should turn off AOCV analysis mode.
If design level cell AOCV derates are used at the top level, then the block delays (as seen
from the top) will have the AOCV effect twice - once during model extraction at the block level
and second at the top level from design level cell AOCV tables. In case design level AOCV
tables are being passed with ETM at the top level, then you should provide a cell level table
for ETM with derating as 1 for all the possible stage counts and/or distance.
To write PG pin information in a timing model, you can use the do_extract_model -pg
parameter. The low power attributes can be written at the library level, cell level, and pin level
in the ETM.
PG Modeling in ETM
pg_pin (VDD1) {
voltage_name : VDD ;
pg_type : primary_power;
}
pg_pin (VSS1) {
voltage_name : VSS ;
pg_type : primary_ground ;
}
The supported pg_type in model extractions: primary_power, primary_ground,
internal_power, internal_ground. If a power rail is the output of a power switch cell, it will
be marked as internal_power/ground.
■ Associating power and ground pins to signal pin
This information will be written for all the logic input/output/in-out pins that are written in
the ETM. For internal pins that are preserved inside the ETM dotlib (e.g., a pin on which
the generated clock was asserted), no such information will be retained.
pin (A) {
…
related_power_pin: VDD1;
related_ground_pin: VSS1;
}
For ports, that are written as pins in ETM, the associated pin (driver or receiver of a net)
will be checked and printed in the same way as related_power_pin and
related_ground_pin information.
■ Run model extraction. During this phase, the incremental delays will be added to the
computed base delays for characterization of the dotlib table. When the final dotlib is
written, it contains the effect of the SI analysis in terms of characterized delays.
The block ETM can then be instantiated in the top level flow and the required file can be
loaded for performing top level analysis with ETM.
When set to false, the product of sigma multiplier and the sigma value of delay/constraint/
transition will be added (or subtracted) to (or from) the corresponding mean value and
modeled in the ETM.
To merge two ETMs (corresponding to funct and scan views), use the following command:
merge_model_timing -library_file funct_etm.lib scan_etm.lib -modes funct scan -
mode_group funct_scan -outfile merged_funct_scan.lib
In a merged ETM, the arcs corresponding to different modes are defined as given below:
timing() {
mode( funct_scan," funct " );
min_delay_arc : "true" ;
related_pin :" SI_ClkIn ";
}
timing() {
mode( funct_scan ," scan " );
To read arcs corresponding to funct (scan) mode, use set_mode funct (scan). If the
set_mode command is not issued, the arcs corresponding to both the modes will be reported
by the report_timing command.
The single mode can be specified using the set_mode command. An error is issued if more
than one mode is passed as an argument to this command. The mode merging enables you
to do the analysis in various modes on a single shell.
When BLOCK netlist is read at the top level, the stage count for buf1 and buf2 is 4, but
when an ETM of BLOCK is read, their stage count becomes 2.
The following example shows a timing report with BLOCK netlist:
Path 1: MET Late External Delay Assertion
Endpoint: DATAOUT2 (^) checked with leading edge of 'clk'
Beginpoint: DATAIN (^) triggered by leading edge of '@'
Path Groups: {clk}
Other End Arrival Time 0.000
- External Delay 0.010
+ Phase Shift 3.600
= Required Time 3.590
- Arrival Time 0.354
= Slack Time 3.236
Clock Rise Edge 0.000
+ Input Delay 0.000
= Beginpoint Arrival Time 0.000
-------------------------------------------------
Aocv Aocv Cell Pin
Stage Derate
Count
------------------------------------------------
DATAIN
4.000 1.169 BUF buf2/Y
4.000 1.169 BUF buf_2/Y
4.000 1.169 BUF BLOCK/buf7/Y
4.000 1.169 BUF BLOCK/buf8/Y
5.000 1.167 DATAOUT2
------------------------------------------------
The following example shows a timing report with BLOCK ETM:
Path 1: MET Late External Delay Assertion
Endpoint: DATAOUT2 (^) checked with leading edge of 'clk'
Beginpoint: DATAIN (^) triggered by leading edge of '@'
Path Groups: {clk}
Other End Arrival Time 0.000
- External Delay 0.010
+ Phase Shift 3.600
= Required Time 3.590
- Arrival Time 0.325
= Slack Time 3.265
Clock Rise Edge 0.000
+ Input Delay 0.000
= Beginpoint Arrival Time 0.000
--------------------------------------------------------------------
Aocv Aocv Cell Pin
Stage Derate
Count
--------------------------------------------------------------------
DATAIN
2.000 1.173 BUF buf2/Y
2.000 1.173 BUF buf_2/Y
3.000 1.171 cppr_block BLOCK/DATAOUT2
pin (DATAOUT ) {
direction : output ;
timing() {
timing_type : combinational ;
timing_sense : positive_unate ;
cell_rise (lut_timing_2 ){
values(\
" -10, -20", \
" -30, -40" \
);
}
cell_fall (lut_timing_2 ){
values(\
" -10, -20", \
" -30, -40" \
);
}
aocv_weight : 4.0000;
related_pin :" CLKIN ";
}
A brief description of the ETM commands used in a validation flow is given below:
❑ Transition Time: Reports the actual transition time at each port for the four delay
types: min_fall, min_rise, max_fall, and max_rise.
❑ Capacitance: Reports the maximum total (lumped) capacitance at each port, and if
available, the effective capacitance.
❑ Design Rules: Reports all the design rules that apply to each port, including the
maximum capacitance, minimum capacitance, maximum transition time, maximum
fan-out (for input ports), and fan-out load (for output ports).
■ compare_model_timing
The compare_model_timing command compares two reports generated by the
write_model_timing command. If the timing parameter values in the two files are the
same or within the specified tolerance, then the result is pass, or otherwise fail. The use
model is as follows:
compare_model_timing –ref ref.rpt -compare comp.rpt -outFile final.rpt
percent_tolerance 3 -absolute_tolerance [expr 0.30/$timeUnit]
The compare_model_timing report shows the comparison results for individual paths,
ports, and timing parameters. The resulting comparison report has the same sections as
the interface timing report: slack, or arc value, transition time, capacitance, design rules.
There are two tolerance settings as follows:
❑ Absolute tolerance: Indicates the absolute acceptable difference between compared
parameters in library time units.
❑ Percentage tolerance: Shows the percentage of acceptable difference between
compared parameters.
A path is flagged as a failure by the compare_model_timing command if it violates both
the absolute and percentage tolerance values.
read_verilog test.v
read_lib test.lib
set_top_module test
read_sdc test.asrt
write_model_timing –type slack comp.rpt
compare_model_timing –ref ref.rpt -compare comp.rpt -outFile final.rpt
-percent_tolerance 3 -absolute_tolerance 0.003
Note: It is recommended to set
timing_prefix_module_name_with_library_genclk global variable to false,
and timing_library_genclk_use_group_name to true. For more information,
refer to section on Generated Clocks.
At the end of a complete validation flow, the following files will be written:
■ Files generated by do_extract_model (test.lib, test.v, test.asrt)
■ Interface timing (write_model_timing) report from netlist session (ref.rpt)
■ Interface timing (write_model_timing) report from ETM session (comp.rpt)
■ Comparison (compare_model_timing) report of the above two files (final.rpt)
The model is extracted using the do_extract_model command with the following set of
commands:
set viewList [all_analysis_view]
foreach viewName $viewList {
set_analysis_view –setup {$viewName} –hold {$viewName}
read_spef -rc_corner $rcCorner.spef
file mkdir $viewName
do_extract_model -view $viewName $viewName/test.lib -assertions \
$viewName/test.asrt -verilog_shell_file $viewName/test.v \
-verilog_shell_module test
write_model_timing -view $viewName -type slack -verbose $viewName/
ref.rpt
}
exit
This will create a separate directory for each view in $viewList, and files from each view
will be written in the corresponding directory. The generated ETM and the
write_model_timing report from the complete netlist will be saved in the
corresponding ($view) folder.
■ Step2: For validation of ETM generated from multiple views, the following syntax can be
used to read the ETMs from their corresponding directory.
foreach viewName $viewList {
free_design
read_verilog $viewName/test.v
read_lib $viewName/test.lib
set_top_module test
read_sdc $viewName/test.asrt.$viewName
write_model_timing -type slack -verbose $viewName/comp.rpt
compare_model_timing -ref $viewName/ref.rpt -compare $viewName/comp.rpt
–ignore_view -outFile $viewName/final.rpt -percent_tolerance 2 -
absolute_tolerance 0.003
}
exit
It is recommended to set timing_prefix_module_name_with_library_genclk
global variable to false, and timing_library_genclk_use_group_name to true.
For more information, refer to Generated Clocks.
At the end of a complete validation flow, the following will be written out in each view-
specific directory for the corresponding view:
❑ Files generated by do_extract_model (test.lib, test.v, test.asrt.$view)
❑ Interface timing (write_model_timing) report from netlist session (ref.rpt)
❑ Interface timing (write_model_timing) report from ETM session (comp.rpt)
❑ Comparison (compare_model_timing) report of above two files (final.rpt)
This flow will write out the required write_model_timing and compare_model_timing
reports in $val_dir. At the end of the auto-validation, the shell with block netlist is retained.
The comparison of both setup and hold checks is performed by the auto-validation.
---------------------------------------------------------------------------
| 5 | 2 | 1 | 0 | 2 | setup
| 2 | 1 | 0 | 0 | 1 | hold
---------------------------------------------------------------------------
Additionally, in GBA mode the problem of ETM validation is computationally more difficult. In
GBA mode, the assertion of a slew on a particular input port may have an impact on the timing
of a path starting from some other input port. Therefore, different combinations of input slews
at the input ports will result in different timing behavior of the block in GBA mode. Since there
can be exponentially large number of combination of slews at the input ports, validation of
ETM in GBA mode is computationally more difficult.
The “Extremity-Validation” of ETM (also referred as EV_ETM) validates ETM at the minimum/
maximum value of the slew at the input ports and minimum/maximum value of the output load
at the output ports, thereby validating the ETM to a greater extent of the possible scenarios
at the top. The minimum/maximum slew at the input port is defined as the minimum/maximum
slew for which that input port has been characterized in the ETM library. Similarly, the
minimum/maximum load at the output port is defined as the minimum/maximum load for
which that output port has been characterized in the ETM library.
The minimum/maximum value of the slew/load will yield four corners of the ETM context, as
given below:
■ Corner 1 (Fast): the minimum slew at the input ports and the minimum load at the output
ports
■ Corner 2: the minimum slew at the input ports and the maximum load at the output ports
■ Corner 3: the maximum slew at the input ports and the minimum load at the output ports
■ Corner 4 (Slow): the maximum slew at the input ports and the maximum load at the
output ports
The validation flow in exhaustive mode is the same as that in non-exhaustive mode, that is,
■ do_extract_model
■ compare_model_timing
The additional files generated in the EV-ETM (but not generated in normal validation) will be
stored in the current working directory by default. However, the location to save these files
can be controlled by the timing_extract_model_exhaustive_validation_dir
global variable. These files are written as hidden files.
Currently, the extremity validation feature is not supported with auto-validation. You will need
to run the two-step validation flow in this mode.
9.2.1 Overview
A boundary model for a module provides sufficient details of its interface paths in order to
accurately analyze these paths for timing (including path-based analysis) when loading the
model into timing analysis of a higher-level module. The model includes timing context
information that improves the accuracy of the model, for example, the timing windows of
attacker nets that are not on interface paths for SI analysis.
The first step is to perform a full timing analysis on the lower-level module. This analysis is
done using block-level constraints for the module. After the analysis is complete, the
boundary model can be generated.
The following figure shows a typical block and its boundary model.
This model can be subsequently loaded into a timing session for a higher-level module. The
higher-level session is timed using flat constraints for those constraints that affect the
interface paths of the instances of all the boundary model blocks.
The following figure shows the top level design with a block flat design vs block boundary
model:
Figure 9-15 Top level design with flat design vs block boundary model
For creating a boundary model of a block, you can use the create_boundary_model
command.
To ensure that the correct context information is saved in the boundary model, you should
make the following setting before running the update_timing command:
set timing_full_context_flow 1
In the top-level timing run, the boundary model can be loaded (instead of the full block Verilog
and SPEF) by using the read_boundary_model command before the set_top_module
command is run. The boundary models can be loaded for multiple blocks.
The following example shows a sample top run script for flat timing analysis:
read_verilog ‘top.v block.v’
read_libs <>
set_top_module top
read_spef ‘top.spef block.spef’
read_sdc top.sdc
update_timing
This script can be modified for top analysis with boundary models, as shown below:
read_verilog top.v
read_libs <>
read_netlist top.v -top top
read_boundary_model -dir bm
set_top_module top
read_spef top.spef
read_sdc top.sdc
update_timing
It may be noted that none of the higher-level SPEF files should contain parasitics for the
boundary model block, because this will lead to extra parasitics being present on the primary
I/O nets of the block instances. Therefore, for performing timing analysis with boundary
models you must use the hierarchical SPEF.
If both the boundary model and Verilog of a block are read at the top level, then the model
netlist will override the block netlist. This run will have a higher run time and memory usage
as compared to the run with only block boundary models - with the same accuracy. Hence, it
is recommended to remove the block Verilog from the top run script.
The non-default true setting of the timing_full_context_flow global variable in the top
run will increase the run time/memory usage. Hence, this should be used in the top run, only
if you need to create a scope from this run.
The receiver instances on the interface path nets that are not part of the interface
logic are included.
The following figure shows an example of a netlist saved for a boundary model of a simple
block.
❑ Clock definitions. The definitions of all the clocks used in the block-level timing is
stored in the model, in order to automatically map block-level clocks to the top-level
clocks. This mapping is required for timing window application.
❑ Constant values on pins of sequential instances that are not part of a boundary path.
These constants can affect timing results of sequential instances and are therefore
maintained in the boundary model. The extra constants on non-extended fanin pins
are also maintained in the boundary model.
You can specify the mapping for some or all the clocks for each block instance by using a
clock mapping file. You can specify a clock map file using the read_boundary_model -
clock_map_file parameter.
The software attempts the auto clock mapping for clocks that do not have any user-specified
mapping. The user-specified clock mapping settings have higher precedence over auto
inferred clock mapping.
The details of all the mapped and unmapped clocks are written in files named -
blkname_clock_map.txt and blkName_unmapped_clocks.txt respectively, where blkName is
the name of the block module. These files are written for every boundary modeled block. If a
block is multiply instantiated at the top level, then the software writes mapped and unmapped
clocks corresponding to each instance of a block.
If a block-level clock is not mapped to the top-level clock, then the timing windows (saved in
the boundary model context), which reference the unmapped clock, are treated as infinite
windows.
In addition to finding the corresponding clock, the timing window application applies a latency
adjustment for a better correlation between the saved timing windows and the timing windows
present in a full flat run. This latency adjustment is to account for the difference in clock arrival
time between the block-level run and the top-level run. This is based on the difference in the
arrival time between the matching clock phase on the block instance pin and the arrival time
seen in the block-level run. This latency adjustment is made for each boundary model
instance and clock, when there is a matching phase found. No latency adjustment is done
where mapping is done by the clock name.
timing windows will be used for every SI delay calculation pass in the top-level run. If
there are multiple SI passes, the timing window convergence can differ between the full
flat top-level run and the top-level run with the model. Hence, it is recommended to use
two SI iterations in both the block and top runs for good correlation.
■ Clock Mapping: A successful mapping of all the block clocks is necessary for performing
timing correlation between the top flat vs top boundary model runs. If there are
unmapped clocks, you can use the set_si_mode -use_infinite_TW true command
setting for the block as well as top runs for correlation purpose. If clock mapping is not
successful and this setting is not used, then the top run with the boundary model will be
pessimistic compared to the top flat run.
■ Power Supply Voltage: If the power supply voltage setting is different in the block and the
top CPF, then the cell delay and slew will change in two runs. This difference affects the
slew and timing window calculation of the non-interface attacker nets. Due of this timing
window difference, the top scope STA run can either get pessimistic or optimistic as
compared to a full flat run.
For glitch-only analysis, the software will keep N-levels (default is 2 levels) of logic (controlled
by the create_glitch_boundary_model -max_stages command parameter) from the
boundary along with the RCs connected to any of those nets. If a multi-stage cell is
encountered, then the noise will not propagate through the logic and multi-stage cells will be
considered as path end or start points.
The following figure shows an example of a netlist saved for a boundary model of a simple
block for a maximum of 2 levels of glitch stages.
Figure 9-17 Saved netlist for a boundary model with 2 levels of glitch stages
If a cell is encountered without any noise model, then it is treated as a single-stage cell for
the purpose of logic level tracing. The next stage after the end point is also kept as load so
that the slew/waveform can be put on the driver of the net connected to the start point, but is
not analyzed when the block is used. The driver stage of the start point is kept as a driver and
noise is injected if the cell is single-stage or a buffer. This logic is described below:
■ The internal path nets that are SI attackers to the N-level path nets. All the leaf drivers
and receiver instances of such nets are also included.
■ The receiver instances on the N-level path nets that are not part of the interface logic are
included. These side load receivers can occur in the clock network and on the paths from
the register to the output port paths.
■ The end points are saved to ensure proper loading, but they are not analyzed when the
boundary model is used.
■ The attacker driver and receiver are saved, but not analyzed when the boundary model
is used.
■ The analyzed noise on the drivers to the start points is saved and injected when the
driver is a single-stage cell or buffer.
The glitch correlation between a fully flat higher level run and a higher level run using one or
more boundary models is expected to be close. However, the following are some of the
factors that can negatively affect the correlation:
■ Boundary slews at the block and the top level will not match perfectly, but the expectation
from the boundary constraints is that they will be worst case. The differences in slews
can cause differences in glitch results.
■ User errors in the form of inconsistent SI settings between the block level and the top
level.
■ create_glitch_boundary_model
In addition, the following global variable must be set prior to glitch/delay calculation so that
the attacker timing windows are stored as part of the boundary model:
set timing_full_context_flow 1
The boundary model generated from the MMMC environment saves the SPEF data for all the
active RC corners, the constrains for all active modes, and the context for all the active views.
9.3.1 Overview
The SmartScope hierarchical analysis feature allows you to re-time a modified block with its
context without having to re-time the full design. The feature also allows timing at the top-level
without having to time the full internals of the blocks. There are two aspects of SmartScope
analysis, which can be used either separately or together:
■ Boundary models can be generated for the blocks and used at the top level. This
provides a timing analysis of the complete top level paths with a reduced runtime.
■ Scope models can be generated from a top level run for the instance(s) of a block and
the surrounding context. The scope models can be generated either from a full flat run,
or a top level run with boundary models.
Using both aspects together allows for a complete hierarchical analysis without having to
make a full flat timing run.
The scopes mentioned above are referred to as block scope, because they contain the block
instance(s) along with the surrounding fanin and fanout logic.
A scope of the top-level logic can also be generated, which is referred to as a top scope. A
top scope is the dual of a block scope, such that it contains all of the top-level logic, and the
interface paths of the hierarchical child instances. The top scope is analogous to a top level
run with boundary models.
■ Scopes can be generated from an STA run without a full flat timing analysis.
■ For multi-instantiated blocks, the scope analysis can be limited to a single copy of the
block internals from one of the instances. For the other instances, only the boundary
paths with be analyzed.
■ A scope for the top-level logic can be generated from a either full STA or DSTA run.
Additionally, SmartScope Analysis reduces CPU requirements, and increases the quality of
constraints. The budgetary constraints cannot fully capture the top level environment.
The top-level constraints can be different than budgetary constraints for the following reasons:
■ Top level design may tie in different clocks than expected.
■ Full chip introduces new pin drives and loads.
■ Full chip introduces new module input and output expectations.
■ Full chip introduces new clock latencies and CRPR.
■ Full chip introduces new constants or constraints many be added.
SmartScope analysis is designed to be used with Tempus ECO. For ECO purposes, the flow
can be extended as follows:
■ From the top-level run with boundary models, generate an ECO-DB for the top-level
logic.
■ Run Tempus ECO with the top-level netlist and the generated ECO-DB.
■ Run timing analysis using the scope models for each block, and then generate an ECO-
DB for each block.
■ Run Tempus ECO with each block-level netlist and the corresponding ECO-DB.
The following diagram illustrates the block scope flow for Tempus ECO:
For timing of the top-level logic with the context of the block interfaces, an alternative to using
boundary models is to generate a scope of the top-level logic from a full flat run. This type of
scope is referred to as a top scope rather than a block scope.
An ECO-DB for the top-level logic can be generated from a timing run of the top scope. This
has the disadvantage of requiring a flat run, but has the advantage of not requiring good
block-level constraints for a timing run of the block.
To generate the boundary model for a block, make a block-level timing run using the following
commands:
■ set timing_full_context_flow 1
For the top level timing run, the following commands should be used.
■ read_boundary_model -dir path [-clock_map_file file]
The read_boundary_model command is used for each cell boundary model generated
by the block-level runs. Multiple commands can be specified if there are multiple models.
The commands must be issued prior to the set_top_module command.
■ set timing_full_context_flow 1
If scopes are to be generated from the run, then set the timing_full_context_flow to
1. This setting must be done ahead of any timing update.
■ create_scope_model {-cell cell | -instance inst_list | -cell_nohier
cell | -instance_nohier inst_list} [-exclude_cell cell_list]
[-exclude_instance inst_list] -path dir
[-rep_instance inst] [-overwrite]
For the scope timing run, the following commands should be used.
■ read_scope_verilog file_list
The read_scope_verilog command is optional, but should be issued in cases where
there is a modified version of the block Verilog which is to be run with the scope. The
module definitions in the supplied file(s) will overwrite the modules saved in the scope.
Multiple commands can be used, and the commands must be issued prior to the
read_scope command.
■ read_scope_spef [-scaleRC] [{-rc_corner name} | {-early_rc_corner
name} {-late_rc_corner name}]
The read_scope_spef command is optional, but should be issued in cases where there
is a modified version of the block SPEF, which is to be run with the scope. The supplied
file(s) will replace the corresponding files specified in any subsequent read_spef
commands. Multiple commands can be used, and the commands must be issued prior
to the read_scope command.
■ read_scope -dir path
The read_scope command reads a scope. The scope includes the netlist, SPEF,
constraints, settings, modes, view definition, and so on. When the scope is loaded, the
STA session is ready for timing updates and reporting.
Given below are some of the differences between scope generation in STA and DSTA modes:
■ The scope generation command is distribute_create_scope_model (in DSTA)
instead of create_scope_model.
■ For multi-instantiated blocks, the scope will contain the internal register-to-register logic
for analysis for all the instances instead of a single representative instance.
Note that the timing_full_context_flow global variable should be set for DSTA scope
generation in the same way as for STA scope generation.
The DSTA-generated scopes are loaded in a STA session in exactly the same way as a STA-
generated scope.
9.4.1 Overview
The prototype timing model (PTM) feature enables you to define and generate a prototype
timing model database, which contains preliminary information about the block, such as
ports, delay arcs, timing check or constraints. This information is then used to generate a
library (.lib), Verilog (.v), and What-If (.cmd) command files.
PTM models are useful for performing feasibility studies on a logical block. In addition, PTM
can be used to generate preliminary timing information, which becomes the validation check
point for early development, and evolves with design.
With PTM, you can easily create a block without providing many details, which would then
provide preliminary timing information for it. This block can be replaced by a detailed timing
model later in the design cycle to get more accurate timing information.
This chapter describes how to define and generate prototype timing models (PTM). It explains
the inputs and outputs for PTM flow and the procedure to use PTM models.
Inputs
■ Standard cell libraries or macros.
■ A set of PTM commands to define the PTM model.
Outputs
Command Flow
The following figure shows the PTM command flow for generating a dotlib model:
The following procedure shows how to define a PTM model and use it to generate a dotlib
timing model, which can later be instantiated in a top-level design:
1. To create the PTM model, use the create_ptm_model command:
create_ptm_model dma
Note: All other PTM commands will work only after this command is executed.
2. To define global values for setup check arcs, hold check arcs, or sequential delay arcs
across the PTM model, use the set_ptm_global_parameter command:
PTM Example
The following example provides a list of commands that can be used to generate a PTM
model illustrated in the figure (Sample PTM Block) below:
# Start of model dma
create_ptm_model dma
create_ptm_constraint_arc -hold -value 0.1 -from clock_in -to data_in -edge rise
create_ptm_constraint_arc -hold -value 0.2 -from clock_in -to data_in -edge fall
To create a bus port along with bus members definition, use the create_ptm_port
command. An integer specified with a bus name designates the number of bus bits, as shown
below:
create_ptm_port -type input test_input[31:0]
Delay ARC
Example1:
The example shows how to create delay arc on pin, test_clk, with respect to each bit of
test_input bus:
create_ptm_delay_arc -from test_input[31:0] -to test_clk -value 1.0
Example 2:
The example shows how to create delay arc on pin, test_inout[7:0], with respect to each
bus bit, test_input[31:0]:
create_ptm_delay_arc -from test_input[31:0] -to test_inout[7:0] -value 5.0
Example 3:
The example shows how to create delay arc on pin, test_inout[7:0], with respect to
selected bus bit:
create_ptm_delay_arc -from test_input[20:0] -to test_inout[7:0] -value 5.0
Constraint ARC
Example 1:
The example shows how to create constraint arc on bus bits, test_input[31:0], with
respect to clock pin, test_clk1:
create_ptm_constraint_arc -setup -value 0.3 -from test_clk1 -to
test_input[31:0] -edge rise
Example 2:
The example shows how to create constraint arcs with different values for selected bits of bus,
test_input[31:0], with respect to clock pin, test_clk1:
create_ptm_constraint_arc -setup -value 0.3 -from test_clk1 -to
test_input[3:0] -edge rise
create_ptm_constraint_arc -setup -value 0.8 -from test_clk1 -to
test_input[7:4] -edge rise
Example 1:
The example shows how to create a load type by assigning it a unique name using the
create_ptm_load_type command:
create_ptm_load_type -lib_cell ABC -input_pin A load1
The example shows how to set the load type, load1 on all the bus bits using the
set_ptm_port_load command:
set_ptm_port_load -type load1 test_input[31:0]
Example 2:
The example shows how to set the different load type on specified bus bits using the
set_ptm_port_load command:
create_ptm_load_type -lib_cell ABC -input_pin A load1
set_ptm_port_load -type load1 test_input[21:0]
create_ptm_load_type -lib_cell XYZ -input_pin A load2
set_ptm_port_load -type load2 test_input[31:22]
This will set load1 on 0-21 bits and load2 on 22-31 bits of the test_input bus.
Example 3:
The example shows how to define a load for ports by specifying a capacitance value using
the set_ptm_port_load command:
set_ptm_port_load -value 4.0 test_input[31:0]
Example 1:
The example shows how to specify a value for the max_transition, max_capacitance, and
max_fanout design constraints:
set_ptm_design_rule -max_transition 1.1 -port test_input[31:0]
set_ptm_design_rule -max_capacitance 1.2 -port test_inout [7:0]
set_ptm_design_rule -max_fanout 4 -port test_inout[7:0]
Example 2:
The example shows how to specify a value for the max_transition, max_capacitance, and
max_fanout using the set_ptm_design_rule command on specified bit:
set_ptm_design_rule -max_transition 1.5 -port test_input[21:0]
set_ptm_design_rule -max_fanout 5 -port test_inout[4:0]
set_ptm_design_rule -max_capacitance 1.8 -port test_inout[4:0]
9.5.1 Overview
Models are compact and accurate representations of timing characteristics of a block.
The ILM is not only a netlist; it comprises at least three files: verilog netlist, SPEF, and SDC
constraints. The SI ILM logic model, or XILM additionally contains capacitances and other
logic needed to model SI effects. An XILM would contain netlist, SPEF, and SDCs, and also
a timing window file (.xtwf).
Note: An ILM created for an incomplete block is not as accurate as an ILM created for a
complete block. Always use ILMs for complete blocks to complete the top-level design.
The software generates ILM data for timing and signal integrity (SI):
■ ILM data for timing
The model contains the netlist of the circuitry leading from the I/O ports to interface
sequential instances (that is, registers or latches), and from interface sequential
instances to I/O ports. The clock tree leading to the interface registers is preserved.
■ Internal register-to-register paths, if internal logic is not part of the interface path.
However, in special cases some internal paths will be kept, as shown in the following
example:
■ Internal paths
Internal paths controlled by different clock, or clocks connected to the ILM module
through different ports. If the logic between the I/O ports is pure combinational, it is
preserved in an ILM.
■ ILM data for SI
The model includes all of the above, plus attacker drivers or nets which affect I/O paths.
It also includes the timing window files in the ILM model directory.
The following command generates the ILM ignoring certain ports and including certain
objects in the BlockB directory. It also writes out the ILM SDF file under the BlockB
directory.
The following is a sample summary report generated after running the write_ilm
command:
--------------------------------------------------------------
createInterfaceLogic Summary
--------------------------------------------------------------
Model Reduced Instances Reduced Registers
--------------------------------------------------------------
ilm_data
+
setup 4/16 (25%) 0/3 (0%)
hold 4/16 (25%) 0/3 (0%)
setupHold 4/16 (25%) 0/3 (0%)
--------------------------------------------------------------
si_data
In this report, the reduction ratio in the ilm_data model is 25 percent which means that 4 out
the total 16 instances for this block have been eliminated.
Note: You can run the set_ilm_mode -keepHighFanoutPort false command for
improving the reduction ratio.
The write_ilm command can preserve specified instances and/or nets. The -
include_object parameter of the write_ilm command accepts a collection of instances
and/or nets. All the specified instances and nets are preserved in the generated ILM.
You can use the same sub-block module in different ILM blocks, enabling reuse of versatile
modules. The write_ilm command considers constant propagate, so that only the enabled
parts of a module are considered when creating ILMs for the reused modules. Because the
Tempus database cannot handle the same module name in different circuits, the software
automatically modifies the module names with the following rule:
topModuleName+timestamp+$+moduleName
As an example, one ILM block (ModuleA) uses an ALU module (ALU) as an unsigned ALU,
and a second block (ModuleB) uses the ALU as a signed ALU. You can change the input
signal to use the ALU differently, setting one ALU as sign enabled and the other to off. When
you run the write_ilm command, the software considers only the enabled parts of the ALU
when creating ILMs for ModuleA and ModuleB. The software also ensures that the name of
the ALU module in ModuleA and the name of the ALU module in ModuleB are different.
If you do not have Tempus database for an implemented block but have a Verilog netlist,
constraints, and SPEF and TWF for that block, then use the import_ilm_data command
to store data in the ILM/XILM format.
The following example shows the import_ilm_data command in case of a MMMC design:
import_ilm_data -si -dir block_A.ILM -cell block_A -mmmc -verilog myfile.v
import_ilm_data -si -dir block_A.ILM -cell block_A -mmmc -incr \
-spef max.spef.gz -rcCorner rcMax
import_ilm_data -si -dir block_A.ILM -cell block_A -mmmc -incr \
-spef typ.spef.gz -rcCorner rcTyp
import_ilm_data -si -dir block_A.ILM -cell block_A -mmmc -incr \
-spef min.spef.gz -rcCorner rcMin
import_ilm_data -si -dir block_A.ILM -cell block_A -mmmc -incr \
-sdc funMaxMax.sdc -viewName funct-devSlow-rcMax
import_ilm_data -si -dir block_A.ILM -cell block_A -mmmc -incr \
-sdc funMaxTyp.sdc -viewName funct-devSlow-rcTyp
import_ilm_data -si -dir block_A.ILM -cell block_A -mmmc -incr \
-sdc tstMaxMax.sdc -viewName test-devSlow-rcMax
import_ilm_data -si -dir block_A.ILM -cell block_A -mmmc -incr \
-sdc funMinMin.sdc -viewName funct-devFast-rcMin
import_ilm_data -si -dir block_A.ILM -cell block_A -mmmc -incr \
-sdc tstMinMin.sdc -viewName test-devFast-rcMin
setting for a block. If master/clones exist in a design, the cell name will have the name of the
master partition.
You can use the unspecify_ilm command to revert to using the dotlib model for a block.
Note: You must use the specify_ilm (or unspecify_ilm) command before specifying
read_ilm. This is because the ILM settings cannot be changed after using read_ilm.
2. Start a Tempus session from the top-level module directory within the directory where
the partitions are saved.
3. Load the config file, including the top-level netlist, libraries, top-level constraint file, and
ILM directory name.
specify_ilm -cell block_A -dir ../block_A/block_A.ILM
specify_ilm -cell block_B -dir ../block_B/block_B.ILM
read_design filename
4. Run read_spef to load the top-level Standard Parasitic Extraction File (SPEF).
5. Run the read_ilm command.
6. Run the report_timing command to perform timing analysis.
Use the following steps to run the automated ILM validation flow:
1. Load a block level design.
2. Load the SPEF file.
3. Run the following command:
write_ilm -dir ilm_dir -validation_dir validation_dir
Two directories are created - one for saving the ILM data and the second for saving the
validation information. The validation directory contains following files:
File Description
init.tcl Used to initialize the ILM data.
nets.tcl Used to get the list of net names in which only the real ILM nets are
included and other nets like attacker nets are excluded.
full.tcl Used to run timing analysis on the original netlist using the
write_model_timing command.
xilm.tcl Used to run timing analysis on the generated ILM data using the
write_model_timing command.
rpt.tcl Compares the output of original netlist with the output of ILM data
using the compare_model_timing command.
validation.src Used to run the ILM validation flow by sourcing the Tcl files
automatically.
XILM HOLD
Slack (0.100 , 3%) 0/0 NA NA #
PinCap (0.100 , 3%) 0/5 0.000 0.000 #
Tran (0.100 , 3%) 0/5 0.000 0.000 #
DRV ( , 3%) 0/5 -- NA #
#----------------------------------------------------------------------
# ILM/XILM Validation PASS
Note:
■ When write_ilm is specified, all the views are generated for multi-corner, multi-mode
(MMMC) analysis.
■ The automated ILM validation performs both ILM/XILM validation depending upon the
data available.
The write_ilm command creates a directory structure containing the ILM data for timing and
SI analysis as described below:
The XTWF is a timing file that contains timing window (the earliest and the latest possible
arrival times that a signal may arrive on a net or a pin) for attacker nets. Tempus does use the
XTWF for SI analysis in the ILM flow. The TWF file is usually used in Tempus if you are
performing timing analysis in third-party tool and you want to bring the design into Tempus for
SI analysis.
The ILM model is self-contained with all the needed information for both Timing and SI
analysis which is suitable for the ILM bottom-up generation/top down analysis flow. See
example below:
In a new session (when the hierarchical design is all stitched together), you read the ILMs of
the sub-blocks to perform top-level STA and SI analysis sign-off.
Example 2: Top-Level ILM based flow of design made up of two sub-module blockA
and blockB
For SI Analysis:
specify_ilm -cell blockA -dir dir1
specify_ilm -cell blockB -dir dir2
read_lib, read_lib -cdb …
read_verilog top.v
set_top_module TOP
read_spef top.spef
read_sdc top.sdc
read_ilm
set_delay_cal_mode -siAware true
report_timing
write_sdf
The SDC files generated within the ILM directories do not reflect a complete normal set of
constraints. You will notice that only set_annotated_transition and
set_case_analysis constraints are written in the SDC.
The SDC constraints found in the ILM directories are primarily used to save the input slew
information for loop back path between interface logic and non-interface logic. This feature
provides higher accuracy for both Timing/SI analysis using the ILM/XILM flow in Innovus/
Tempus. Here is a scenario describing how the slews of reduced nets are stored for better
accuracy of timing and SI:
To perform timing analysis using ILM data files, you will need to use the chip level SDC
constraints and the generated SDC constrains for the ILM block. The idea here is that these
constraints are giving high accuracy while not colliding with top-level SDC constraints during
ILM top down analysis flow.
Example:
read_verilog blockA.v
set_top_module blockA
read_sdc blockA.sdc
read_spef blockA.spef
write_ilm -dir blockA
report_timing > sta1.rpt
Now to use the ILM data for timing analysis and suppose the file names in the ILM directory
are: ilm.v, ilm.spef, ilm.sdc, ilm.xtwf.
Simply read the original SDC and the SDC generated for the ILM.
Example:
read_lib tech.lib
read_verilog ilm.v
set_top_module blockA
read_sdc ilm.sdc
read_sdc blockA.sdc *
read_spef ilm.spef
report_timing > sta2.rpt
The timing report of the ILM interface paths should be consistent with the timing report of
original full netlist (sta1.rpt should match sta2.rpt). This is usually done for validation
purposes and not a real usage of the ILM flow.
To create an ILM or XILM for a block in Tempus, you must be at that block's hierarchy level;
you cannot write a block ILM from the top-chip level of hierarchy. To provide the data needed
for the ILM, you need the block's netlist, timing libraries, SPEF annotation, and SDC
constraints.
read_verilog "$designDir/blockA.v"
set_top_module blockA
read_sdc "$designDir/blockA.sdc"
set_dc_sources -global 1.65
read_spef "$designDir/blockA.spef"
write_ilm -dir blockA
set_delay_cal_mode -siAware true
report_timing
write_sdf blockA.sdf
When ILM is created using the write_ilm command, a directory named blockA will be
created with the MMMC sub-directory. Within this directory you will see another level of sub-
directories, named ilm_data and si_ilm_data, depending upon the -modelType
parameter settings.
You must run read_ilm after read_spef, and before report_timing. If you get an error
such as:
**ERROR: (xxxILM-334): Specified ILM blockA has non-empty module definition; no ILM
created for it.
You will need to remove gates, assign statements, and so on from the blockA module in the
top verilog netlist, because an ILM cannot overwrite the existing logic. The module, if it exists
in the verilog netlist, must be empty.
create_constraint_mode -name mymode -sdc_files {file1_top_level.sdc
file2_top_level.sdc ...} \
-ilm_sdc_files {file1_chip_level.sdc file2_chip_level.sdc ...}
If ILM constraint files (at the chip level SDC) are not specified with the
create_constraint_mode command (in the viewdefinition.tcl while reading the design),
then these can be read using the update_constraint_mode command (after the
specify_ilm command is issued), as shown in the following example:
update_constraint_mode –name mymode \
-ilm_sdc_files {file1_chip_level.sdc file2_chip_level.sdc ...}
10
Tempus Power Integrity Analysis
Traditionally, the IR-aware STA analysis mechanisms involve running either vector-based or
vectorless dynamic simulations to compute the IR drop for each instance. As both these
approaches are not truly timing-aware, it is very difficult to identify all potential IR-induced STA
violations using these approaches.
The primary objective of the Tempus PI flow is to identify timing-critical and IR-sensitive timing
paths, to accurately predict IR drop on these paths with directed vectorless analysis, and to
enable automated fixing of these critical paths using Tempus ECO. The IR-sensitive timing
paths are paths that may have sufficient positive slack but degrade significantly with IR drop.
This timing/sensitivity-driven IR analysis is multi-cycle (transient IR simulation), functional,
and vectorless. It also involves propagating the states/events of the scheduled critical paths
through the fanout combinational logic using the Voltus state propagation engine.
The IR drop and timing events are natively aligned within the tool because Tempus STA
analysis and Voltus IR analysis share all information, such as IR drop, timing windows, and
switching within the timing windows.The following diagram illustrates the Tempus-Voltus
integration in the Tempus PI flow:
■ Calculate impact of delay/timing on voltage and time critical paths using cycle-cycle
voltage statistic.
Timing libraries are needed for multiple voltages below the nominal operating voltage,
preferably in the step size of 10% to 15% of the lowest voltage. This is required for
accurate STA analysis with voltage interpolation because timing analysis will be done at
the software computed post-IR effective instance voltages, instead of the nominal
voltage. Recommendation is to have at least three different voltage libraries to enable
accurate non-linear delay interpolation.
2. Critical Path Analysis: Identify the timing-critical and IR-sensitive paths using the user-
specified IR budgets. The identified critical paths are scheduled in dynamic vectorless
simulation.
The user-specified IR budgets are the estimated worst IR drops expected in the design.
3. Power and Rail Analysis: Perform directed vectorless power analysis by scheduling the
critical paths identified in step 2. After power analysis is done, run rail analysis to
generate the Effective Instance Voltage (EIV) database.
4. Timing Analysis with IR Drop: Specify the EIV database generated from rail analysis as
input to timing analysis, and then rerun STA analysis. The IR-induced timing violations
are reported post this step.
5. IR-Aware Tempus-ECO Optimization: Perform ECO fixing on timing violations reported
after IR-aware STA analysis.
6. Post-ECO Tempus PI Analysis: Run the Tempus PI analysis again to re-check the results
after Tempus ECO.
This flow generates an EIV database with better timing and potentially better IR drop.
1.
Procedure
Tcl command:
4. Run STA analysis using the voltage derates applied in the previous step.
Tcl command:
update_timing -full
set_power_output_dir dynVecLessPowerResults
2. Define the power analysis mode. The Tempus PI analysis flow is applicable only to the
dynamic vectorless power calculation method.
Tcl command:
set_power_analysis_mode \
-method dynamic_vectorless \
-disable_static true \
-enable_state_propagation true \
-power_grid_library { \
../data/pgv_dir/tech_pgv/techonly.cl \
../data/pgv_dir/stdcell_pgv/stdcells.cl \
../data/pgv_dir/macro_pgv/macros_pll.cl \
} \
-enable_tempus_pi true \
3. Define switching activity of the design. This is needed for dynamic vectorless analysis.
Tcl command:
set_default_switching_activity -input_activity 0 \
-clock_gates_output 2.0 -seq_activity 0.2
The default switching activity for sequential cells (-seq_activity) in percentage (ratio 0.0
to 1.0) specifies the number of fully expanded data paths that will be scheduled to switch
in the Tempus PI flow in each cycle.
4. Define the power simulation period and resolution.
Tcl command:
The dynamic power simulation period defines the number of power analysis cycles to be
run.
Note: The user-defined sequential activity per cycle
(set_default_switching_activity -seq_activity) and the total power
analysis simulation period (set_dynamic_power_simulation -period) control the
number of critical path end-points that will be covered per simulation cycle and the total
simulation time. Allowing a larger power simulation period will allow Tempus PI to cover
all the end-points.
For more information on setting the appropriate values for sequential activity and
simulation period, you can refer to section “Sequential Activity and Simulation Period on
page 218".
5. Run power analysis.
Tcl command:
report_power
Tcl command:
set_rail_analysis_mode \
-method dynamic \
-accuracy hd \
-analysis_view AV_wc_1p00 \
-power_grid_library { \
../data/pgv_dir/tech_pgv/techonly.cl \
../data/pgv_dir/stdcell_pgv/stdcells.cl \
../data/pgv_dir/macro_pgv/macros_pll.cl \
} \
-enable_rlrp_analysis true \
-verbosity true \
-temperature 125 \
-eiv_eval_window switching \
-eiv_method {bestavg worstavg}
7. Optional. If you do not load the CPF file, use the set_pg_nets command to define the
power nets in the design, and assign attributes to these nets. Then, use
set_rail_analysis_domain to define the power domains.
Tcl command:
8. Define the location of the voltage sources for each power/ground net.
Tcl command:
9. Define the rail simulation resolution, and specify the location of the binary current files
generated through dynamic power analysis (step 5).
Tcl command:
The Voltus console will display rail analysis statistics, as shown in the following snippet:
Rail Analysis completed successfully.
Finished Rail Analysis at 19:32:45 02/10/2019 (cpu=0:01:12,
real=0:02:33, peak mem=1697.00MB)
Current Voltus IC Power Integrity Solution resource usage: (total
cpu=0:09:48, real=1:06:51, mem=1697.00MB)
Fix the IR drop paths, identified by Tempus PI as timing critical paths, using Tempus ECO.
Tcl command:
The following snapshot shows the top five register2register critical paths (Timing SI ->
Debug Timing menu option) and the corresponding IR drop heat map (Power Rail -> Power
Rail Plots menu option):
Through the User-Defined Critical Paths (UDCP) support, the tool provides a mechanism for
specifying a collection of timing paths that are to be prioritized for scheduling. This feature is
useful when designers have prior information on certain timing paths that may switch
together, and can potentially cause IR-induced STA violations.
After the user-specified paths are scheduled, the Tempus PI algorithm for identifying and
scheduling IR-sensitive paths remains the same for the remaining simulation time.
Tcl command:
The UDCP collection can be built by using the -collection option of the report_timing
command. Refer to the Tempus Text Command Reference document for more details on this
option.
The Tempus PI flow identifies and schedules the timing-critical and voltage-sensitive paths,
along with switching the fanout cone of the critical victim instances using the state
propagation algorithm. Though some aggressors for these critical instances are implicitly
modeled due to the transient behavior of toggling fanout cones, the aggressor identification
and scheduling for each victim instance is not explicitly done, which could lead to optimism in
the analysis.
Sample Script
# Load the design
read_lib -lef $lefs
read_physical -lefs $lefs
read_view_definitionread_mmmc ../design/viewDefinition.tcl
read_verilog ../design/postRouteOpt.enc.dat/super_filter.v.gz
set_top_module super_filter
read_netlist ../design/postRouteOpt.enc.dat/super_filter.v.gz -top super_filter
init_design
read_def ../design/super_filter.def.gz
read_spef -rc_corner RC_wc_125 ../design/postRouteOpt_RC_wc_125.spef.gz
../data/pgv_dir/stdcell_pgv/stdcells.cl \
../data/pgv_dir/macro_pgv/macros_pll.cl \
} \
-enable_rlrp_analysis true \
-verbosity true \
-temperature 125 \
-eiv_eval_window switching \
-eiv_method {bestavg worstavg}
set_pg_nets -net VDD_AO -voltage 1 -threshold 0.95 -force
set_pg_nets -net VDD_column -voltage 1 -threshold 0.95 -force
set_pg_nets -net VDD_ring -voltage 1 -threshold 0.95 -force
set_pg_nets -net VDD_external -voltage 1 -threshold 0.95 -force
set_pg_nets -net VSS -voltage 0.0 -threshold 0.05 -force
set_rail_analysis_domain -domain_name ALL -pwrnetspower_nets { VDD_AO VDD_external
} -gndnetsground_nets VSS
set_power_pads -net VDD_AO -format xy -file ../design/super_filter_VDD_AO.pp
set_power_pads -net VDD_external -format xy -file
../design/super_filter_VDD_external.pp
set_power_pads -net VSS -format xy -file ../design/super_filter_VSS.pp
set_dynamic_rail_simulation -resolution 10ps
Sequential activity is one of the important input parameters, which govern the overall toggling
in the design, during directed vectorless simulations. If you are a user of the traditional
vectorless dynamic analysis, you would already know what sequential activity to provide, as
the same setting serves as input to both the traditional and Tempus PI vectorless runs.
However, if you are primarily a user of the vector-based dynamic analysis, then an existing
capability from Voltus can be used to report the average sequential activity based on the input
vector. This reported average sequential activity can be used (along with some margining) as
input sequential activity in the Tempus PI setup.
Tcl command:
set_power_include_file ./pm.inc
#Contents of "pm.inc":
ChipPwr rActivityCalculationCycleCountFix 1
ChipPwr rReportInstanceInGateVcdFlow 1
The average sequential activity will be reported in the output file "<output power direc-
tory>/voltus_power.stateprop.stats".
Sample Output
-------------------------------------------------------------------------------
* Voltus Power Analysis - Power Calculator - Version v21.10-d109_1 64-bit
(06/08/2020 10:34:09)
* Copyright 2007, Cadence Design Systems, Inc.
*
* Date & Time: 2020-Jun-17 17:02:36 (2020-Jun-18 00:02:36 GMT)
*
*------------------------------------------------------------------------------
*
* Total number of data nets : 3921235
* Constant data nets skipped : 0
* NoTiming data nets skipped : 0
* Average data activity : 0.291627
* Number of iterations : 0
* Sequential activity : 0.05
*
…
Simulation period determines the simulation period for Tempus PI dynamic analysis. Larger
the simulation period, more will be the number of paths covered in the analysis.
The following formula can be used for guidance to set the simulation period:
sim_cycles = (2/seq_act)*N
Where,
❑ seq_act: input sequential activity (for eg: 0.05, 0.1 etc.)
❑ N: number of nworst paths to be covered per endpoint
Recommendation is to have N>=1, that is, at least one path per endpoint should be scheduled
in the analysis.
set_delay_cal_mode
:
create_delay_corner/update_delay_corner
Default: 0
- Specifies the estimated IR drop to be used for all
late_estimated_worst_irDrop_fac instances in the late STA analysis. Value specified
tor <value> is in ratio of VDD.
This value is honored only when the EIV database
has not been specified using any of the
*irdrop_data options.
This option takes precedence over the -
estimated_worst_irDrop_factor option.
Default: 0
set_irdrop_mode
11
Low Power Flows
11.1 Overview
Along with capturing the design and technology-related power constraints, the Common
Power Format (CPF) defines timing analysis views based on a combination of different
operating corners, power modes, and timing library sets. CPF does not contain RC corner
information. To update the RC corners for each timing view, you must use Tempus command
to define the RC corners.
The following figure shows the procedure for setting-up Tempus using the CPF file:
The following sample script shows settings for Tempus using the PG Verilog flow:
set_multi_cpu_usage -localCpu n
read lib < >
read_verilog <PG verilog.v>
set_top_module <abc>
read_sdc < >
read_spef -rc_corner
set_lib_binding_by_voltage -power_net_voltages
update_timing -full
report_analysis_views
report_instance_library <instance>
report_delay_calculation -voltage
report_timing
save_design -overwrite
exit
The following figure shows the procedure for setting-up Tempus using the PG Verilog flow:
set_top_module top_module
init_design
Use the following command to set operating conditions for each power domain:
After you have completed these steps, you can run other Tempus commands to continue with
the timing flow.
12
Appendix
Overview
Tempus provides the Global Timing Debug feature for debugging the timing results. The
various Timing Debug forms provide easy visual access to the timing reports and debugging
tools.
You can group all paths that are failing for the same reason and apply solutions for faster
timing closure. You can cross-probe between the timing paths in the timing report and display
area under Layout Tab in Tempus.
Note: If you have a previously saved timing debug report, you can use the timing debug
feature even when the design is not loaded in the Tempus session.
You can also generate text-format report from a machine readable report.
You analyze the following data in the Analyze tab in the main Tempus window:
■ Visual display of passing and failing paths as a histogram. Failing paths are represented
in red and passing paths are represented in green color. The goal of timing debug
process is to identify paths that fall in red category.
■ Details of the critical paths in the Path list. You identify a critical path in this list for further
analyses using the Timing Path Analyzer form.
■ Visual display of paths reported in different timing reports. When you load multiple debug
reports in a single timing debug session, the paths are displayed in different colors
corresponding to the report file they are coming from. You can move the cursor over a
path to display the name of the report file.
You analyze the following data in the Timing Path Analyzer form:
■ Slack calculation bars for arrival and required times. You can identify clock skew issues,
latency balancing or large clock uncertainty issues using these bars.
The following examples illustrate the problems that you can identify using the slack
calculation bars in the Timing Path Analyzer form.
Example 9-1
Launch and capture latency components are not aligned. Therefore there can be large clock-
latency mismatch in this path.
Example 9-2
The cycle adjustment bar in the required time indicates presence of multicycle path.
Example 9-3
Large input delay in an I/O path is represented by the blue bar in the arrival time.
Example 9-4
Flag Description
a Assign net
b Blackbox instance
c Clock net
cr Cover cell
f Preplaced instance
i Ignore net
s Skip route net
t "don't touch" net
t instance marked as "don't touch"
T instance not marked as "don't touch" when the module it
belongs to is marked as "don't touch"
u Unplaced cell
x External net
■ SDC related to the path. The Path SDC tab displays the SDC constraints related to the
selected path. The list contains the name of the SDC file, the line number that indicates
the position of the constraint in the SDC file, and the constraint definition.
The commands that can be displayed in the Path SDC tab are:
■ create_clock
■ create_generated_clock
■ group_path
■ set_multicycle_path
■ set_false_path
■ set_clock_transition
■ set_max_delay
■ set_min_delay
■ set_max_fanout
■ set_fanout_load
■ set_min_capacitance
■ set_max_capacitance
■ set_min_transition
■ set_max_transition
■ set_input_transition
■ set_capacitance
■ set_drive
■ set_driving_cell
■ set_logic_one
■ set_logic_zero
■ set_dont_use
■ set_dont_touch
■ set_case_analysis
■ set_input_delay
■ set_output_delay
■ set_annotated_check
■ set_clock_uncertainty
■ set_clock_latency
■ set_propagated_clock
■ set_load
■ set_disable_clock_gating_check
■ set_clock_gating_check
■ set_max_time_borrow
■ set_clock_groups
When you create a constraint on the command line, the Path SDC tab interactively displays
the result of the additional constraint.
Note: MMMC views are not displayed interactively.
Note: You can create a path category directly from SDC constraints in the Path SDC form.
When you right-click a constraint and view the Create Path Category form, to see the line
number (from the SDC file) and the name of the constraint.
In Tempus, you can also ceate a path category based on SDC constraint using the -sdc
parameter of the create_path_category command:
create_path_category -name category_name -sdc {file_name line_number}
where file_name is the name of the constraint file and line_number is the line number of
the SDC constraint.
■ Schematic display of the path. The Schematics tab displays the gate-level schematic
view of the critical path. For more information, see Viewing Schematics.
■ Timing interpretation for the path. This feature provides rule-based path analysis to help
you discover sources of potential timing problems in a path. By default, the software
performs the following checks on the following rules:
Path structure
■ Transparent Latch in Path
■ Clock Gating
■ Hard Macros
■ HVT Cells
■ Buffering List
■ Net Fanout
■ Level Shifters
■ Isolation Cells
Floorplan
■ Fixed Cells
■ Distance from start to end
■ Distance of repeater chain
■ Detour
■ Multiple power domains
DRVs
■ Max transitions
■ Max capacitance
■ Max fanout
You can customize the type of timing information reported. The Edit Timing Interpretation
GUI Tempus lets you add, modify, or delete rules you want the tool to check and report.
■ Timing bar to analyze delays associated with instances and nets in a path. Use this
information to identify issues related to large instance or net delays, repeater chains,
paths with large number of buffers, and large macro delays. The small bars
■ Hierarchical representation of the path in the Hierarchy View field. This representation of
the path-delay shows the traversal of a path through the design hierarchy drawn on the
time axis. A longer arrow means that there are more instances on its path. Use this
information to see the module where the path is spending more time or to identify inter-
partition timing problems.
While debugging critical paths on MSV designs, it is useful to be able to identify power
domains and low power cells. The Timing Debug feature displays this information in the
following ways:
■ The level shifters and isolation cells are listed in the Timing Interpretation tab of the
Timing Path Analyzer.
■ The delay bar of the Timing Path Analyzer can display the level shifters and isolation
cells. You can also use the Preferences form to specify the colors in which the level
shifters and isolation cells are displayed.
■ Input to Output
Registers can be macros, latches, or sequential-cell types. To create categories by basic path
groups, choose the Analysis tab - Analysis drop-down menu - Path Group Analysis
option.
■ Clock Paths
Creates categories according to launch clock - capture clock combinations.
To create categories for clock paths, choose the Analysis tab - Analysis drop-down menu -
Clock Analysis option.
■ Hierarchical Floorplan
Creates categories according to the hierarchical characteristics of a path.
■ View
Creates categories according to the view for which the path was generated.
To create view path categories, choose the Analysis tab - Analysis drop-down menu - View
Analysis option.
■ False Paths
Creates a category with paths defined as False paths.
To create view path categories, choose the Analysis tab - Analysis drop-down menu -
Critical False Path option.
■ Bottleneck
Creates categories based on instances that occur often in critical paths.
To create view path categories, choose the Analysis tab - Analysis drop-down menu -
Bottleneck Analysis option.
■ DRV Analysis
Generates or loads a DRV report containing capacitance, transition, or fanout violations.
Paths that are affected by the selected DRV types are grouped in a category.
To create or load this report, choose the Analysis tab - Analysis drop-down menu - DRV
Analysis option.
To define a new category, use the Create Path Category form. The Create Path Category
form contains drop-down menus with conditions that you use to define a path category. The
conditions are characteristics that a path must have to be added to the named category. You
can define multiple conditions that a path must meet to be added to the category.
The category that you create is added in the Path Category field in the Analysis tab. All
paths that meet the conditions set for this category are grouped under the category name.
Paths are separated automatically according to MMMC views into different categories, for
example:
CLOCK1<View_test_mode>
CLOCK2<View_mission_mode>
■ Double-click on the category name in the Path Category field in the Analysis tab to
display the list of paths in the Path List field.
Note: You can add a comment in the Comment field to record any notes that you would like
to include with the category. The comment appears in the category report file.
Creating Sub-Categories
You can create sub-categories based on existing categories. While analyzing a sub-category,
global timing debug will traverse the paths in the master category instead of all the paths in
the current report.
■ Creating Sub-Categories through the GUI on page 245
■ Creating Sub-Categories through Command Line on page 246
In the Master category name field, the name of the category you selected previously is
displayed. Create one or more subcategories as explained in Creating Path Categories.
Note: You can create nested sub-categories, that is, you can further create sub-categories
for a sub-category.
You can also use the Category - Create menu command to bring up the Create Path Category
form. In the Master category name field, type the name of the category for which you want
to create the sub-category, and then create one or more subcategories as explained in
Creating Path Categories.
The following other commands also support sub-categories; to run these commands only on
the sub-categories of a particular master category, specify the master category name with the
-master parameter.
■ analyze_paths_by_basic_path_group
■ analyze_paths_by_bottleneck
■ analyze_paths_by_clock_domain
■ analyze_paths_by_critical_false_path
■ analyze_paths_by_drv
■ analyze_paths_by_hierarchy
■ analyze_paths_by_view
Note: If the parent category of a sub-category is deleted, the sub-category cannot be edited
or changed anymore. However, the sub-category is still displayed in case you want to refer to
it.
Viewing Sub-Categories
The subcategories for a master category are displayed in a hierarchically numbered list below
the master category. As an illustration, consider the example shown here:
In this example:
■ master_category1 is the master category
■ nested_category_1a and nested_category_1b are the sub-categories of
master_category1.
The prefix (1) is displayed with nested_category_1a and nested_category_1b.
■ nested_category_2 is the sub-category of nested_category_1a.
The prefix (2) is shown with nested_category_2.
To remove a path category from the histogram display, right-click on a path and select Hide
Category. The category name in the category list is not hidden, but is marked with an "H" as
hidden.
To generate a report containing information about path categories, use the following options:
■ Use the write_category_summary command
■ Use the Write Category Report File GUI
Sample report:
You can use the categories that you create to group the timing paths, and display them as
histogram in the Analysis tab. The Analysis tab displays the category details in the Path
Category field. You can perform the following tasks in the Analysis tab to analyze the timing
results:
Double-click on any category to display the details of the paths grouped in that category in
the Path List field.
Right-click on the category name and select Add to Histogram option. The paths related to
the selected category are highlighted in a different color in the histogram. This gives you a
visual representation of the number of paths that meet the conditions in that category and can
possibly have the same timing problem.
For example, in the following figure the SetupCheck category was added to the histogram.
Analyzing the resulting the Analysis tab gives you information for fixing problems related to
larger sets of timing paths. After identifying the problems, you can make the required changes
such as modify floorplan, script or SDC files and run timing analysis again for further analysis.
Paths are separated automatically according to MMMC views into different categories, for
example, the following figure shows two categories based on MMMC views:
1. view_mission_140MHz_1.0V
2. view_mission_166MHz_1.8V
Do the following:
■ Right-click on one of view_mission_140MHz_1.0V and choose List Paths.
■ Right-click on one the paths and choose Show Timing Path Analyzer.
Note that the SDCs relative to mode mission_140MHz that produced the path are
highlighted.
Use the Set Category Slack Correction form to specify the estimated slack correction for the
selected category of paths. A slack correction that you apply to a category modifies all the
paths in that category. If a path belongs to several categories, all the correction from the
categories are added. The worst negative slack and total negative slack values of a category
can be affected by the correction applied to another category.
Once you enable the slack correction, the histogram is updated to reflect the slack correction.
An asterisk (*) is added next to the slack value of paths that belong to this category in the
Path List field in the Analysis tab. Paths are reordered based on new specified slack. This
allows you to filter out the paths that can be fixed and work on the remaining paths.
To access the Set Category Slack Correction form complete the following steps:
■ Click on the Analysis Tab in the main Tempus window.
■ Right click on the category name in the Path Category field.
■ Choose the Set Category Slack Correction option.
■ Choose the timing window that contains the table to want to customize.
■ Choose the table whose columns you want to customize. The selections change
according to the timing window you choose.
■ Choose a column item or specify a command.
For commands, specify the procedure you want to use to determine the information you want
to include in the column. Source the file containing the procedure before you specify the
procedure here.
For example:
# Combine fedge (from edge) and tedge (to edge) #information into a single field
proc my_get_edge {id var} {
upvar #0 $var p
($ added before p)
if {p(type) == "inst"} {
return "$p(fedge) -> $p(tedge)"
} elseif {$p(type) == "port" } {
return $p(fedge)
} else {
return ""
}
}
❑ Modify let you modify characteristics. Click on a column in the column list. Edit the
information, then click Modify.
❑ Delete removes a column from the column list.
❑ Move Up moves a column up in the column list. This effectively moves a column to
the left in the table.
❑ Move Down moves a column down in the column list. This effectively moves a
column to the right table.
■ (Optional) Click Load. The opens the GTD (Global Timing Debug) Preferences form.
Specify a file name.
Cell Coloring
Use the Cell Coloring page of the Timing Debug Preferences form to choose colors for
specific cells in the delay bar.
When you assign colors, this same colors will be restored when you start a new session.
In the Cell Name Selection Elements field for each color, you can choose whether you are
providing one of the following:
■ Cell name
■ Instance
■ Procedure that you have defined
The procedure is invoked with the full instance name as the argument. You must source the
file containing the procedure before you use this feature.
For example:
# Colors when the instance name contains "core/block1"
proc belongs_to_block1 {inst_name} {
if [regexp {core/block1} $inst_name] {
return 1
} else {
return 0
}
}
Viewing Schematics
The Critical Path Schematic Viewer displays the gate-level schematic view of the critical
path. To display the Schematic Viewer, click on the schematics icon in the Path List field of
the Analysis tab. You can display additional paths in the Schematic Viewer by using the
middle mouse button to drag the path from path list to Schematic Viewer.
You can also display the Schematics by selecting the Schematics tab in the Timing Path
Analyzer form. The form is displayed when you double-click on a critical path in the Path List
in the Analysis tab.
On displaying the Schematic Viewer, you can see the power instance colored and the power
domain information displayed in a popup message box as well as in terminal.
You can perform the following tasks in the Module Schematic Viewer:
■ View the Gate-level design elements.
■ Select an element in the schematic.
❑ Click on an object in the schematic to select and highlight it. When you move the
cursor to an object, the object type and name of the object appear in the information
box.
■ Scroll over an object to display the object type and name of the object in the Object field.
■ Cross-probe between the Schematics window and Path List field.
❑ Select a path and left-click on the Schematics button above the Path List Table. (This
is the button at the far-right side, just above the table).
❑ To show multiple paths, select another path, and drag and drop it to the Schematics
window.
■ Use the menu options provided in the Schematic Viewer. To access the menu options,
you can either click on the menu bar or right-click on an object in the schematic. You can
use the menu options to perform the following tasks:
❑ Manipulate schematic views of fan-in and fan-out cones.
❑ Trace connectivity between drivers, objects, and loads.
❑ Move between different levels of instance views.
■ The software highlights the entire ILM module instead of the instances and nets inside
the ILM. The instances and the nets inside the ILMs are greyed out in the Timing Path
Analyzer - Path SDC form.
Overview
You can accelerate portions of the design flow by using multiple-CPU processing.
The Tempus Timing Signoff Solution software has the following multiple-CPU modes:
■ Multi-threading
In this mode, a job is divided into several threads, and multiple processors in a single
machine process them concurrently.
■ Distributed processing
In this mode, a job is processed by two or more networked computers running
concurrently.
You can configure multiple-CPU processing by using the commands described in the
Multiple-CPU Processing Commands chapter of the Tempus Text Command
Reference.
Use this command to specify a configuration file for distributed processing or create the
configuration for the remote shell, secure shell, or load-sharing facility queue to use for
distributed processing. If you request more machines than are available, most
applications wait until all requested machines are available.
To display the current setting for set_distribute_host, use the
get_distribute_host command.
■ set_multi_cpu_usage:
Use this command to specify the maximum number of computers to use for processing.
To display the current setting for set_multi_cpu_usage, use the
get_multi_cpu_usage command.
Running Multi-Threading
To run the software in multi-threading mode, the following command is required:
■ set_multi_cpu_usage
Use this command to specify the number of threads to use. Upon completion, the log file
generated by each thread is appended to the main log file.
Note: The -localCpu parameter limits the number of threads running concurrently.
Although the software can create additional threaded jobs during run time, depending on the
application in use, only the number of threads specified with this parameter are run at a given
time.
If you ask for more threads than are available, the software issues a warning and runs with
the maximum number of available threads.
For example, to run signal integrity analysis with four threads, specify the following
commands:
set_multi_cpu_usage -localCpu 4
set_delay_cal_mode -siAware true
report_timing
When you run report_resource -verbose, the following detailed memory information is
displayed:
■ Load average is the system load averages for the past 1 minute.
■ Mem and Swap are the current memory information of the machine.
The value of MEM in the LSF report corresponds to the value of RES in the
report_resource report, and the value of SWAP in the LSF report corresponds to the
value of VIRT in the report_resource report.
■ Data Resident Set (DRS)is the amount of physical memory devoted to other than
executable code. "current mem" shows this value (Total current DRS) .
■ Private Dirty (DRT) is the memory which must be written to disk before the
corresponding physical memory location can be used for some other virtual page. "peak
res" shows this value (Total peak DRT). This is the minimum number that you must
reserve to run the program.
■ Virtual Size (VIRT) is the total amount of virtual memory used by the task. It
includes the swapped and non-swapped memory.
■ Resident Size (RES) is the non-swapped physical memory a task has used. The
number of "Total Peak RES" is the recommended physical memory to reserve.
The -verbose parameter also works in conjunction with the -peak and -start/-end
parameters of the report_resource command. When you run the local distributed host
(set_distribute_host -local) command, the memory information will include the
memory consumed by master and clients. Otherwise, the master and client details are not
displayed.
The following command script specifies to display detailed memory information during the
report_timing command:
report_resource -start report_timing
set_distribute_host -local
set_multi_cpu_usage -localCpu 8
report_timing -machine_readable -max_paths 100
report_resource -end report_timing -verbose
Note: For -start/-end parameters, use -verbose with the -end parameter only.
Task peak reports peak value of each item from all clients, therefore, it is possible that eight
values come from eight different clients.
For information on the default check-out order, see Encounter Digital Implementation
System Packaging and Licensing.
This license list can be customized from among the available choices by using the
set_multi_cpu_usage -licenseList command.
■ At the point when you want to release the multi-CPU licenses (for example, when global
placement finishes), specify the following command:
set_multi_cpu_usage -releaseLicense
By default, the software does not write starting and ending information for threads or timing
details to the log file, but you can change this behavior by specifying 1 or 2 for the -
threadInfo parameter.
■ Specify 1 to write the final message to the log file.
■ Specify 2 to write additional starting/ending information for each thread.
Overview
To maintain signoff accuracy of the design, designers often use SPICE to correlate critical
paths in timing analysis with path simulation. Tempus offers a built-in critical path simulation
for base delay correlation with SPICE.
This chapter describes how to perform SPICE correlation with base delay timing in
Tempus. The methodology is explained by providing an overview of the
create_spice_deck command used for SPICE deck generation and then, by explaining
the process to run path simulation.
-report_timing {report_timing_options}
Description:
Specifies the path(s) for which SPICE deck needs to be generated. SPICE deck will contain
the SPICE trace of the path exactly as reported by the report_timing options.
Options Used:
■ -path_type full_clock: Is used when launch or capture clock path is also needed in
the SPICE deck.
■ -late/-early: Is used to generate a SPICE deck for the setup or hold mode.
Note: Without using the -report_timing options, SPICE deck will be generated for worst
path identified by the software.
-run_path_simulation
Description:
Enables the tool to perform path simulation using the Spectre™ simulator in Tempus.
Note: If this option is used, it is recommended to use the report_timing -retime
path_slew_propagation option of create_spice_deck for more accurate correlation with
SPICE because SPICE deck is path specific.
-subckt_file filename
Description:
Specifies the name of the SPICE sub-circuit file for the library cells. This option is used to get
the port directions.
Note: When create_spice_deck is specified with -run_path_simulation and this option
is not specified, Tempus uses the SPICE sub-circuits from the cdB files loaded in the design.
Recommended option.
-model_file filename
Description:
Specifies the name of the SPICE models file. This option must be used when you specify a
SPICE sub-circuit file for simulation.
Note: When create_spice_deck is specified with -run_path_simulation and this option
is not specified, Tempus uses the SPICE models from the cdB files loaded in the design.
Recommended option.
-Spectre path_to_Spectre
Description:
Specifies the location of the Spectre™ version, which is to be used for path simulation.
-spice_include "spice_options"
Description:
Specifies the user-defined SPICE statements that are written to the SPICE deck. For example,
.measure statement or any SPICE option represents a user-defined SPICE statement.
-outdir spice_dir
Description:
Specifies the name of the output directory that contains the generated SPICE decks. The
default directory name is tempus_pathsim.
Note:
■ If the –run_path_simulation option is not specified, SPICE deck is saved in the
specified directory as path_<index_of_path>_setup.sp.
■ If a single path is specified, the SPICE deck filename is saved as path_1_setup.sp.
■ If more than one path is specified (using the max_path/max_point/nworst options of
report_timing), SPICE decks are saved as path_1_setup.sp, path_2_setup.sp,
and so on.
■ If the –run_path_simulation option is specified in addition to the path_1_setup.sp
file, some result files are also saved as mentioned in the Running Path Simulation and
Results section.
-side_path_level number
Description:
Specifies the number of levels for the side path stages to be included in the SPICE deck. By
default, the side path stages are not included in the SPICE deck. You can assign
the maximum value of 4 for a side path stage. As you increase –side_path_level, the size
of the SPICE deck and simulation run time will increase.
The default value of –side_path_level is 0, which means that only lumped cap model of
side loads are provided.
Note: It is recommended to use value of 1 to include real gate load. It provides good accuracy
with reasonable SPICE deck size and simulation run time.
If the -power and –ground options are not specified, Tempus retrieves this information from
the power/ground supplies set via other ways in the design, such as the set_dc_sources
command used from libraries/cdb and so on. If the information is not available, Tempus
uses the default list of power node names (VDD and VCC) and ground node names (GND
and VSS).
For more details on the parameters and options, see create_spice_deck in the Tempus
Text Command Reference Guide.
The -xtalk parameter generates Spice deck for a single net (not a path).
For example, the following commands create a VL and VH Spice deck for the receiver pin x1/
A and will place them in the spice_rip/outlier directory:
create_spice_deck -xtalk vl_glitch -receiver_pin x1/A -outdir spice_rip/outlier -
model_file models.sp -subckt_file base.sp
create_spice_deck -xtalk vh_glitch -receiver_pin x1/A -outdir spice_rip/outlier -
model_file models.sp -subckt_file base.sp
If you do not specify the report_timing -point_to_point parameter, the Spice deck can
be generated (with victim sweep). However, path level Spice deck generation is not
supported.
Example 1: The following section in SPICE deck specifies global supplies and transient
analysis window time.
*--------------------
*Command and Options
*--------------------
.GLOBAL vdd vbbnw
V0Xvdd vdd 0 1.0
V0Xvbbnw vbbnw 0 1.0
.GLOBAL vss vbbpw
V0Xvss vss 0 0
V0Xvbbpw vbbpw 0 0
.TEMP -40.0000
.TRAN 1p 10256p
*---------------------------------
Example 2: The following section shows an example of a net and its instance connections.
*------------------------
*Net Instances
*------------------------
*Net module1/inst_1/net
*------------------------
Xmodule1/inst_1/net module1/inst_1/q
+ module1/inst_2/a wc:module1/inst_1/q
*------------------------
Example 3: The following section shows an example of a gate instance and its port
connections.
*----------------------------------------
*Gate Instances
*----------------------------------------
*Gate module1/inst_2
*----------------------------------------
*Cell ports in order : a y vss vdd vbbpw vbbnw
*----------------------------------------
Xmodule1/inst_2/a module1/inst_2/y
+ 0 module1/inst_2/vdd 0 module1/inst_2/vbbnw
+ inv1
*----------------------------------------
Example 4: The following section shows the measurement statements for delay and slew.
Note: The DELAY and SLEW keywords in the MEASURE statements indicate that these are
the measurement statements for delay and slew, respectively.
Also, stage numbers (Stage_0001 and Stage_0002) in the MEASURE statement indicate the
respective stages; first and second stage, in the timing path, which makes it easier for
correlation with the report_timing report.
■ Using the standalone (outside the Tempus environment) path simulation that can be run
using Spectre™ or any simulator that understands the SPICE syntax.
You can use the create_spice_deck –run_path_simulation parameter to run the path
simulation. In addition, you can specify the Spectre™ version using the -spectre parameter
of the create_spice_deck command. If the path is not specified with the -spectre option,
the software will check if you have the Spectre™ location defined in your path. If it is not
defined in your path, it will use the Spectre™ version that is available under the Tempus
installation. The generated log file will have the Spectre™ version used for path simulation.
Important
A table of timing (see figure below) with the slew, delay, and arrival columns from
report_timing and path simulation, which are used for correlation comparison, is displayed.
If report_timing -path_type full_clock is used, two separate tables for launch and
capture paths are also shown.
Using the standalone simulation generates the SPICE deck in the user-specified directory.
The SPICE deck of the path (path_1_setup.sp) is saved at the specified path within the
specified directory. Specify the directory through the -outdir parameter of the
create_spice_deck command. By default, the generated SPICE deck is saved in the
tempus_pathsim directory.
You can also run standalone path simulation using Spectre™ or any other simulator, which
understands the SPICE syntax on the SPICE deck (path_1_setup.sp) saved by Tempus.
The path_1_setup.measure file is generated, which can be used to extract path simulation
results.
The figure below is an example of the path_1_setup.measure file, which shows the slew and
delay measurements of the two stages. This file can be easily post-processed to extract
simulation results. For example, sum of all “delay” stages will give the path delay of the total
path.
<top_cell>_dc_outbound_<view>_*.rpt
■ SPICE deck generation and built-in path simulation do not account for any timing derates
that may have been specified. Derate values can come from various sources, such as
user-defined derates, AOCV derates, and so on.
For correlation comparison, ensure that you compare un-derated STA numbers from
Tempus. To do this, you need to load the design in Tempus without any derates.
■ Another source of miscorrelation could be the waveform used for simulation. Check that
the library file has normalized driver waveforms (NDW) specified.
■ Another potential source of differences between SPICE path simulation and STA results
is the difference in analysis mode in both runs. This can happen when STA is done in the
On-Chip Variation (OCV) mode (which is the default in Tempus) because the SPICE
simulation is done only in one corner, either MAX or MIN. This means in SPICE both the
launch and capture paths are using the same corner SPICE data for path simulation
results.
■ If path being correlated has latches, Tempus timing will have time borrowing during
timing analysis while SPICE run will not have any time borrowing. In that case, turn off
time borrowing in Tempus using set timing_use_latch_time_borrow false setting for
correlation with SPICE.
For list of supported CPF commands and options within Encounter product family, see
"Supported CPF 1.0e Commands".
#--------------------------------------------------------------------------------
------------
# setting
#-------------------------------------------------------------------------------
set_cpf_version 1.0e
set_hierarchy_separator /
#-------------------------------------------------------------------------------
# define library_set/cells
#-------------------------------------------------------------------------------
define_library_set -name wc_0v81 -libraries { \
../LIBS/timing/library_wc_0v81.lib }
define_library_set -name bc_0v81 -libraries { \
../LIBS/timing/library_bc_0v81.lib }
define_library_set -name wc_0v72 -libraries { \
../LIBS/timing/library_wc_0v72.lib }
define_library_set -name bc_0v72 -libraries { \
../LIBS/timing/library_bc_0v72.lib }
#-------------------------------------------------------------------------------
# macro models
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# top design
#-------------------------------------------------------------------------------
set_design top
#-------------------------------------------------------------------------------
# create power domains
#-------------------------------------------------------------------------------
create_power_domain -name PDdefault -default
create_power_domain -name PDshutoff_io -instances { IOPADS_INST/Pspifsip \
IOPADS_INST/Pspidip } -boundary_ports { spi_fs spi_data } \
-external_controlled_shutoff -shutoff_condition io_shutoff_ack
create_power_domain -name PDpll -instances { INST/PLLCLK_INST \
IOPADS_INST/Pibiasip IOPADS_INST/Ppllrstip IOPADS_INST/Prefclkip \
IOPADS_INST/Presetip IOPADS_INST/Pvcomop IOPADS_INST/Pvcopop } -boundary_ports {
ibias reset \
refclk vcom vcop pllrst }
create_power_domain -name PDram_virtual
create_power_domain -name PDram -instances { INST/RAM_128x16_TEST_INST } \
-shutoff_condition !INST/PM_INST/power_switch_enable \
-secondary_domains { PDram_virtual }
create_power_domain -name PDtdsp -instances { INST/RAM_128x16_TEST_INST1 \
INST/DSP_CORE_INST0 INST/DSP_CORE_INST1 } -shutoff_condition \
!INST/PM_INST/power_switch_enable -secondary_domains { PDdefault }
#-------------------------------------------------------------------------------
# set instances
#-------------------------------------------------------------------------------
set_instance INST/RAM_128x16_TEST_INST1/RAM_128x16_INST -domain_mapping \
{ {RAM_DEFAULT PDtdsp} }
set_macro_model ram_256x16A
end_macro_model
#-------------------------------------------------------------------------------
# create power modes
#-------------------------------------------------------------------------------
create_power_mode -name PMdvfs1 -default -domain_conditions { PDpll@nom_0v81 \
PDdefault@nom_0v81 PDtdsp@nom_0v81 PDram@nom_0v72 PDshutoff_io@nom_0v81 \
PDram_virtual@nom_0v72 }
create_power_mode -name PMdvfs1_off -domain_conditions { PDpll@nom_0v81 \
PDdefault@nom_0v81 PDshutoff_io@nom_0v81 PDram_virtual@nom_0v72 }
create_power_mode -name PMdvfs1_shutoffio_off -domain_conditions { \
PDpll@nom_0v81 PDdefault@nom_0v81 PDram_virtual@nom_0v72 }
create_power_mode -name PMdvfs2 -domain_conditions { PDpll@nom_0v81 \
PDdefault@nom_0v72 PDtdsp@nom_0v72 PDram@nom_0v72 PDshutoff_io@nom_0v72 \
PDram_virtual@nom_0v72 }
create_power_mode -name PMdvfs2_off -domain_conditions { PDpll@nom_0v81 \
PDdefault@nom_0v72 PDshutoff_io@nom_0v72 PDram_virtual@nom_0v72 }
create_power_mode -name PMdvfs2_shutoffio_off -domain_conditions { \
PDpll@nom_0v81 PDdefault@nom_0v72 PDram_virtual@nom_0v72 }
create_power_mode -name PMscan -domain_conditions { PDpll@nom_0v81 \
PDdefault@nom_0v81 PDtdsp@nom_0v81 PDram@nom_0v72 PDshutoff_io@nom_0v81 \
PDram_virtual@nom_0v72 }
#-------------------------------------------------------------------------------
# create rules
#-------------------------------------------------------------------------------
create_power_switch_rule -name PDram_SW -domain PDram -external_power_net VDDL
create_power_switch_rule -name PDtdsp_SW -domain PDtdsp -external_power_net \
VDD
create_state_retention_rule -name \
INST/DSP_CORE_INST0/PDtdsp_retention_rule -instances { \
INST/DSP_CORE_INST0 } -save_edge !INST/DSP_CORE_INST0/clk
create_state_retention_rule -name \
INST/DSP_CORE_INST1/PDtdsp_retention_rule -instances { \
INST/DSP_CORE_INST1 } -restore_edge \
!INST/PM_INST/state_retention_restore -save_edge \
INST/PM_INST/state_retention_save
#-------------------------------------------------------------------------------
# update domains/modes
#-------------------------------------------------------------------------------
update_nominal_condition -name nom_0v81 -library_set wc_0v81
update_nominal_condition -name nom_0v72 -library_set wc_0v72
VSS
update_power_domain -name PDtdsp -primary_power_net VDD_sw -primary_ground_net \
VSS
#-------------------------------------------------------------------------------
# update rules
#-------------------------------------------------------------------------------
update_power_switch_rule -name PDram_SW -cells { HEADERHVT1 } -prefix \
CDN_SW_RAM -peak_ir_drop_limit 0 -average_ir_drop_limit 0
update_power_switch_rule -name PDtdsp_SW -cells { HEADERHVT2 } -prefix \
CDN_SW_TDSP -peak_ir_drop_limit 0 -average_ir_drop_limit 0
update_state_retention_rules -names \
INST/DSP_CORE_INST0/PDtdsp_retention_rule -cell_type master_slave
update_state_retention_rules -names \
INST/DSP_CORE_INST1/PDtdsp_retention_rule -cell_type ballon_latch
#-------------------------------------------------------------------------------
# end
#-------------------------------------------------------------------------------
end_design
For list of supported CPF commands and options within, see "Supported CPF 1.0
Commands".
set_cpf_version 1.0
####################################################
# #
# Technology portion of the CPF: #
# Defining the special cells for low-power designs #
# #
####################################################
################################
#### High-to-Low level shifters
################################
##########################################
#### Always-on High-to-low level shifters
##########################################
################################
#### Low-to-High Level Shifters
################################
define_level_shifter_cell -cells LVLL2H* \
-input_voltage_range 0.8:1.0:0.1 \
-output_voltage_range 0.8:1.0:0.1 \
-input_power_pin VDDI \
-output_power_pin VDD \
-direction up \
-ground VSS \
-valid_location to
##########################################################
#### Low-to-High level shifting plus isolation combo cells
##########################################################
define_level_shifter_cell -cells LVLCIL2H* \
-input_voltage_range 0.8:1.0:0.1 \
-output_voltage_range 0.8:1.0:0.1 \
-output_voltage_input_pin ISO \
-input_power_pin VDDI \
-output_power_pin VDD \
-direction up \
-ground VSS \
-valid_location to
####################
#### Isolation cells
####################
#################################
#### Power switch cells: headers
#################################
#################
#### SRPG cells
#################
################################################
#### Always-on cells: buffers and level shifters
################################################
set_design top
set_hierarchy_separator "/"
####################################################
#### create the power and ground nets in this design
####################################################
### VDD will connect the power follow-pin of the instances in the always-on
#power domain
### VDD_core_SW will connect the power follow-pin of the instances in the
#switchable power domain and is the power net that can be shut-off
### VDD_core_AO is the always-on power net for the switchable power domain
#####################################################################
#### Creating three power domains:
#### AO is the default always-on power domain
#### CORE is the switchable power domain
#### PLL is another always-on power domain
### Also specifying the power net-pin connection in each power domain
######################################################################
#########################
### For power domain "AO"
#########################
###########################
### For power domain "CORE"
###########################
###########################
### For power domain "PLL"
###########################
### PLL conatins a single PLL macro and five top-level boundary ports which
#connect to the PLL macro directly
########################################
########################################
$libdir/technology45_sprg_ao_0p8.lib \
"
set lib_core_bc_extra "\
$libdir/technology45_lvlh2l_1p0.lib \
$libdir/technology45_headers_1p0.lib \
$libdir/technology45_srpg_ao_1p0.lib \
"
#############################
#### Create operating corners
#############################
#########################################
#### Create and update nominal conditions
#########################################
######################################
#### Create and upDate four power modes
######################################
#################################
##### Creating ten analysis views
#################################
#########################################################
#### Creating and updating the rules for the insertion
#### of power switch, level shifter, isolation cell
#########################################################
###########################
##### One power switch rule
###########################
################################
##### Three level shifting rules
################################
####################
##### One SRPG rule
####################
end_design
For list of supported CPF commands and options within Encounter product family, see
Supported CPF 1.1 Commands.
#--------------------------------------------------------------------------------
------------
# setting
#-------------------------------------------------------------------------------
set_cpf_version 1.1
set_hierarchy_separator /
#-------------------------------------------------------------------------------
# define library_set/cells
#-------------------------------------------------------------------------------
define_library_set -name wc_0v81 -libraries { \
../LIBS/timing/library_wc_0v81.lib }
define_library_set -name bc_0v81 -libraries { \
../LIBS/timing/library_bc_0v81.lib }
define_library_set -name wc_0v72 -libraries { \
../LIBS/timing/library_wc_0v72.lib }
define_library_set -name bc_0v72 -libraries { \
../LIBS/timing/library_bc_0v72.lib }
#-------------------------------------------------------------------------------
# macro models
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# top design
#-------------------------------------------------------------------------------
set_design top
#-------------------------------------------------------------------------------
# create power domains
#-------------------------------------------------------------------------------
create_power_domain -name PDdefault -default
create_power_domain -name PDshutoff_io -instances { IOPADS_INST/Pspifsip \
IOPADS_INST/Pspidip } -boundary_ports { spi_fs spi_data } \
-external_controlled_shutoff -shutoff_condition io_shutoff_ack
create_power_domain -name PDpll -instances { INST/PLLCLK_INST \
IOPADS_INST/Pibiasip IOPADS_INST/Ppllrstip IOPADS_INST/Prefclkip \
IOPADS_INST/Presetip IOPADS_INST/Pvcomop IOPADS_INST/Pvcopop } -boundary_ports {
ibias reset \
refclk vcom vcop pllrst }
create_power_domain -name PDram_virtual
create_power_domain -name PDram -instances { INST/RAM_128x16_TEST_INST } \
-shutoff_condition !INST/PM_INST/power_switch_enable \
-base_domains { PDram_virtual }
create_power_domain -name PDtdsp -instances { INST/RAM_128x16_TEST_INST1 \
INST/DSP_CORE_INST0 INST/DSP_CORE_INST1 } -shutoff_condition \
!INST/PM_INST/power_switch_enable -base_domains { PDdefault }
#-------------------------------------------------------------------------------
# set instances
#-------------------------------------------------------------------------------
set_instance INST/RAM_128x16_TEST_INST1/RAM_128x16_INST -domain_mapping \
{ {RAM_DEFAULT PDtdsp} }
set_macro_model ram_256x16A
#-------------------------------------------------------------------------------
# create power modes
#-------------------------------------------------------------------------------
create_power_mode -name PMdvfs1 -default -domain_conditions { PDpll@nom_0v81 \
PDdefault@nom_0v81 PDtdsp@nom_0v81 PDram@nom_0v72 PDshutoff_io@nom_0v81 \
PDram_virtual@nom_0v72 }
create_power_mode -name PMdvfs1_off -domain_conditions { PDpll@nom_0v81 \
PDdefault@nom_0v81 PDshutoff_io@nom_0v81 PDram_virtual@nom_0v72 }
create_power_mode -name PMdvfs1_shutoffio_off -domain_conditions { \
PDpll@nom_0v81 PDdefault@nom_0v81 PDram_virtual@nom_0v72 }
create_power_mode -name PMdvfs2 -domain_conditions { PDpll@nom_0v81 \
PDdefault@nom_0v72 PDtdsp@nom_0v72 PDram@nom_0v72 PDshutoff_io@nom_0v72 \
PDram_virtual@nom_0v72 }
create_power_mode -name PMdvfs2_off -domain_conditions { PDpll@nom_0v81 \
PDdefault@nom_0v72 PDshutoff_io@nom_0v72 PDram_virtual@nom_0v72 }
create_power_mode -name PMdvfs2_shutoffio_off -domain_conditions { \
PDpll@nom_0v81 PDdefault@nom_0v72 PDram_virtual@nom_0v72 }
create_power_mode -name PMscan -domain_conditions { PDpll@nom_0v81 \
PDdefault@nom_0v81 PDtdsp@nom_0v81 PDram@nom_0v72 PDshutoff_io@nom_0v81 \
PDram_virtual@nom_0v72 }
#-------------------------------------------------------------------------------
# create rules
#-------------------------------------------------------------------------------
create_state_retention_rule -name \
INST/DSP_CORE_INST0/PDtdsp_retention_rule -instances { \
INST/DSP_CORE_INST0 } -save_edge !INST/DSP_CORE_INST0/clk
create_state_retention_rule -name \
INST/DSP_CORE_INST1/PDtdsp_retention_rule -instances { \
INST/DSP_CORE_INST1 } -restore_edge \
!INST/PM_INST/state_retention_restore -save_edge \
INST/PM_INST/state_retention_save
#-------------------------------------------------------------------------------
# update domains/modes
#-------------------------------------------------------------------------------
update_nominal_condition -name nom_0v81 -library_set wc_0v81
update_nominal_condition -name nom_0v72 -library_set wc_0v72
-primary_ground_net VSS
update_power_domain -name PDram -primary_power_net VDDL_sw -primary_ground_net \
VSS
update_power_domain -name PDtdsp -primary_power_net VDD_sw -primary_ground_net \
VSS
#-------------------------------------------------------------------------------
# update rules
#-------------------------------------------------------------------------------
update_power_switch_rule -name PDram_SW -cells { HEADERHVT1 } -prefix \
CDN_SW_RAM -peak_ir_drop_limit 0 -average_ir_drop_limit 0
update_power_switch_rule -name PDtdsp_SW -cells { HEADERHVT2 } -prefix \
CDN_SW_TDSP -peak_ir_drop_limit 0 -average_ir_drop_limit 0
update_state_retention_rules -names \
INST/DSP_CORE_INST0/PDtdsp_retention_rule -cell_type master_slave
update_state_retention_rules -names \
INST/DSP_CORE_INST1/PDtdsp_retention_rule -cell_type ballon_latch
#-------------------------------------------------------------------------------
# end
#-------------------------------------------------------------------------------
end_design
-average_ir_drop_limit N/A
create_isolation_rule
-name
-isolation_condition
-pins
-from
-to
-isolation_target N/A
-isolation_output
-exclude
create_level_shifter_rule
-name
-pins
-from
-to
-exclude
create_mode_transition N/A
-start_condition
create_nominal_condition
-name
-voltage
-pmos_bias_voltage N/A
-nmos_bias_voltage N/A
create_operating_corner
-name
-voltage
-process
-temperature
-library_set
create_power_domain
-name
-default
-instances
-boundary_ports
-shutoff_condition
-default_restore_edge
-default_save_edge
-power_up_states N/A
create_power_mode
-name
-domain_conditions
-default
create_power_nets
-nets
-voltage
-external_shutoff_condition
-internal
-user_attributes Accessible by
getCPFUserAttr
-peak_ir_drop_limit N/A
-average_ir_drop_limit N/A
create_power_switch_rule
-name
-domain
-external_power_net
-external_ground_net
create_state_retention_rule
-name
-domain
-instances
-restore_edge
-save_edge
define_always_on_cell -cells
-power_switchable
-power
-ground_switchable
-ground
define_isolation_cell
-cells
-library_set
-always_on_pin
-power_switchable
-ground_switchable
-power
-ground
-valid_location
-non_dedicated N/A
-enable
define_level_shifter_cell
-cells
-library_set
-always_on_pin N/A
-input_voltage_range
-output_volage_range
-direction
-output_voltage_input_pin N/A
-input_power_pin
-output_power_pin
-ground
-valid_location
define_open_source_input_p
in
-cells
-pin
-library_set
define_power_clamp_cell N/A
-cells
-data
-ground
library_set
-power
define_power_switch_cell
-cells
-library_set
-stage_1_enable
-stage_1_output
-stage_2_enable
-stage_2_output
-type
-power_switchable
-power
-ground
-ground_switchable
-on_resistance Accessible by
::CPF::getCpfPsoCell
-stage_1_saturation_current Accessible by
::CPF::getCpfPsoCell
-stage_2_saturation_current Accessible by
::CPF::getCpfPsoCell
-leakage_current Accessible by
::CPF::getCpfPsoCell
define_state_retention_cell
-cells
-library_set
-always_on_pin N/A
-clock_pin N/A
-restore_function
-restore_check N/A
-save_function
-save_check N/A
-power_switchable
-ground_switchable
-power
-ground
define_library_set
-name
-libraries
end_design
identify_always_on_driver N/A
identify_power_logic
-type
-instances
set_array_naming_style
set_cpf_version
set_design
-ports
module
set_hierarchy_separator
set_instance
-port_mapping
-merge_default_domains
hier_instance
set_power_target N/A
set_power_unit N/A
set_register_naming_style
set_switching_activity
-all
-pins
-instances
-hierarchical
-probability
-toggle_rate
-clock_pins N/A
-toggle_percentage N/A
-mode N/A
set_time_unit
update_isolation_rules
-names `
-location
-cells
-library_set
-prefix
-combine_level_shifting N/A
-open_source_pins_only
-update_level_shifter_rules
-names
-location
-cells
-library_set
-prefix
update_nominal_condition
-name
-library_set
update_power_domain
-name
-internal_power_net
-internal_ground_net
-min_power_up_time N/A
-max_power_up_time N/A
-pmos_bias_net N/A
-nmos_bias_net N/A
-user_attributes Accessible by
::CPF::getCpfUserAttr
-rail_mapping N/A
-library_set
update_power_mode
-name
-activity_file N/A
-activity_file_weight N/A
-sdc_files
-peak_ir_drop_limit N/A
-average_ir_dropt_limit N/A
-leakage_power_limit N/A
-dynamic_power_limit N/A
update_power_switch_rule
-name
-enable_condition_1
-enable_condition_2
-acknowledge_receiver
-cells
-library_set
-prefix
-peak_ir_drop_limit Accessible by
::CPF::getCpfUserAttr
-average_ir_drop_limit Accessible by
::CPF::getCpfUserAttr
update_state_retention_rules
-name
-cell_type
-cell
-library_set
-name
-instances
-boundary_ports
-default
-shutoff_condition
-external_controlled_shutoff
-default_isolation_condition
-default_restore_edge
-default_save_edge
-default_restore_level Supported
-default_save_level Supported
-power_up_states Unsupported
-active_state_condition Unsupported
-secondary_domains
create_ground_nets
-nets
-voltage
-external_shutoff_condition
-user_attributes Supported: query
getCPFUserAttributes
-peak_ir_drop_limit
-average_ir_drop_limit
create_isolation_rule
-name
-isolation_condition
-no_condition Unsupported
-pins
-from
-to
-exclude
-isolation_target
-isolation_output
-secondary_domain
create_level_shifter_rule
-name
-pins
-from
-to
-exclude
create_mode_transition
-name
-from
-to
-start_condition
-end_condition
-cycles
-clock_pin
-latency
create_nominal_condition
-name
-voltage
-ground_voltage
-state Unsupported
-pmos_bias_voltage Unsupported
-nmos_bias_voltage Unsupported
create_operating_corner
-name
-voltage
-ground_voltage Unsupported
-pmos_bias_voltage Unsupported
-nmos_bias_voltage Unsupported
-process
-temperature
-library_set
create_power_mode
-name
-default
-group_modes
-domain_conditions
create_power_nets
-nets
-voltage
-external_shutoff_condition
-user_attributes Supported: query
getCPFUserAttributes
-peak_ir_drop_limit
-average_ir_drop_limit
create_power_switch_rule
-name
-domain
-external_power_net
-external_ground_net
create_state_retention_rule
-name
-domain
-instances
-exclude
-restore_edge
-save_edge
-restore_precondition
-save_precondition
-target_type
-secondary_domain
define_always_on_cell
-cells
-library_set
-power_switchable
-ground_switchable
-power
-ground
define_isolation_cell
-cells
-library_set
-always_on_pins
-power_switchable
-ground_switchable
-power
-ground
-valid_location
-enable
-no_enable Unsupported
-non_dedicated
define_level_shifter_cell
-cells
-library_set
-always_on_pins
-input_voltage_range
-output_voltage_range
- Unsupported
ground_output_voltage_rang
e
-
groung_output_voltage_rang
e
-direction
-input_power_pin
-output_power_pin
-input_ground_pin Unsupported
-output_ground_pin Unsupported
-ground
-power Unsupported
-enable
-valid_location
define_library_set
-name
-libraries
-user_attributes cdb: specify cdb libraries for
the library set
aocv: specify aocv libraries
for the library set
define_power_clamp_cell
-location Unsupported
-within_hierarchy Unsupported
-cells Unsupported
-prefix Unsupported
define_power_switch_cell
-cells
-library_set
-stage_1_enable
-stage_1_output
-stage_2_enable
-stage_2_output
-type
-enable_pin_bias Unsupported
-gate_bias_pin Unsupported
-power_switchable
-power
-ground_switchable
-ground
-on_resistance Supported (for use with
addPowerSwitch)
-stage_1_saturation_current Supported (for use with
addPowerSwitch)
-stage_2_saturation_current Supported (for use with
addPowerSwitch)
-leakage_current Supported (for use with
addPowerSwitch)
define_state_retention_cell
-cells
-library_set
-cell_type
-always_on_pins
-clock_pin
-restore_function
-save_function
-restore_check
-save_check
-always_on_components Unsupported
-power_switchable
-ground_switchable
-power
-ground
end_macro_model
end_power_mode_control_g
roup
get_parameter
include
identify_power_logic
-type Only "isolation" is supported
for the -type
-instances Supported
-module Supported
set_array_naming_style
set_cpf_version
set_hierarchy_separator
set_design
-ports
-
honor_boundary_port_domai
n
-parameters
set_equivalent_control_pins
-master Unsupported
-pins Unsupported
-domain Unsupported
-rules Unsupported
set_floating_ports Unsupported
set_input_voltage_tolerance
-ports Unsupported
-bias Unsupported
set_instance
-design
-model
-port_mapping
-domain_mapping
-parameter_mapping
set_macro_model
set_power_mode_control_gr
oup
-name
-domains
-groups Unsupported
set_power_target
-leakage Unsupported
-dynamic Unsupported
set_power_unit
set_register_naming_style
set_switching_activity
-all Supported
-pins Supported
-instances Supported
-hierarchical Supported
-probability Supported
-toggle_rate Supported
-clock_pins Unsupported
-toggle_percentage Unsupported
-mode Supported
set_time_unit
set_wire_feedthrough_ports
update_isolation_rules
-names
-location
-within_hierarchy
-cells
-prefix
-open_source_pins_only Supported
update_level_shifter_rules
-names
-location
-within_hierarchy
-cells
-prefix
update_nominal_condition
-name
-library_set
update_power_domain
-name
-primary_power_net
-primary_ground_net
-pmos_bias_net Unsupported
-nmos_bias_net Unsupported
-user_attributes Supported: query
getCPFUserAttributes
-transition_slope Unsupported
-transition_latency Unsupported
-transition_cycles Unsupported
update_power_mode
-name
-activity_file Unsupported
-activity_file_weight Unsupported
-sdc_files
-peak_ir_drop_limit
-average_ir_drop_limit
-leakage_power_limit Unsupported
-dynamic_power_limit Unsupported
update_power_switch_rule
-name
-enable_condition_1
-enable_condition_2
-acknowledge_receiver
-cells
-gate_bias_net Unsupported
-prefix
-peak_ir_drop_limit
-average_ir_drop_limit
update_state_retention_rule
s
-names
-cell_type
-cells
-set_rest_control Unsupported
create_global_connection
-domain
-instances
-net
-pins
create_ground_nets
-average_ir_drop_limit
-external_shutoff_condition
-nets
-peak_ir_drop_limit
-user_attributes Supported: query
getCPFUserAttributes
-voltage
create_isolation_rule
-exclude
-from
-isolation_condition
-isolation_output
-isolation_target
-name
-no_condition
-pins
-secondary_domain
-to
-force
create_level_shifter_rule
-exclude
-from
-name
-pins
-to
-force
create_mode_transition
-clock_pin
-cycles
-end_condition
-from
-latency
-name
-to
-start_condition
create_nominal_condition
-ground_voltage
-name
-nmos_bias_voltage Unsupported
-pmos_bias_voltage Unsupported
-state Unsupported
-voltage
create_operating_corner
-ground_voltage Unsupported
-library_set
-name
-nmos_bias_voltage Unsupported
-pmos_bias_voltage Unsupported
-process
-temperature
-voltage
create_power_domain
-active_state_condition Unsupported
-base_domains
-boundary_ports
-default
-default_isolation_condition
-default_restore_edge
-default_restore_level Supported
-default_save_edge
-default_save_level Supported
-external_controlled_shutoff
-instances
-name
-power_up_states Unsupported
-shutoff_condition
create_power_mode
-default
-domain_conditions
-group_modes
-name
create_power_nets
-average_ir_drop_limit
-external_shutoff_condition
-nets
-peak_ir_drop_limit
-user_attributes Supported: query
getCPFUserAttributes
-voltage
create_power_switch_rule
-domain
-external_ground_net
-external_power_net
-name
create_state_retention_rule
-domain
-exclude
-instances
-name
-restore_edge
-restore_precondition
-save_edge
-save_precondition
-secondary_domain
-target_type
define_always_on_cell
-cells
-ground
-ground_switchable
-library_set
-power
-power_switchable
define_isolation_cell
-always_on_pins
-cells
-enable
-ground
-ground_switchable
-library_set
-no_enable
-non_dedicated
-power
-power_switchable
-valid_location
define_level_shifter_cell
-always_on_pins
-cells
-direction
-enable
-ground
-
ground_input_voltage_range
-
ground_output_voltage_rang
e
-input_ground_pin
-input_power_pin
-input_voltage_range
-library_set
-output_ground_pin
-output_power_pin
-output_voltage_range
-power
-valid_location
define_library_set
-libraries
-name
set_cpf_version
set_hierarchy_separator
set_design
module
-ports
-
honor_boundary_port_domai
n
-parameters
set_equivalent_control_pins
-domain Unsupported
-master Unsupported
-pins Unsupported
-rules
set_floating_ports Unsupported
set_input_voltage_tolerance
-bias Unsupported
-ports Unsupported
set_instance
-design
-domain_mapping
-model
-parameter_mapping
-port_mapping
set_macro_model
set_power_mode_control_gr
oup
-domains
-groups Unsupported
-name
set_power_target
-dynamic Unsupported
-leakage Unsupported
set_power_unit
set_register_naming_style
set_switching_activity
-all Supported
-clock_pins Unsupported
-hierarchical Supported
-instances Supported
-mode Supported
-pins Supported
-probability Supported
-toggle_percentage Unsupported
-toggle_rate Supported
set_time_unit
set_wire_feedthrough_ports
update_isolation_rules
-cells
-location
-names
-open_source_pins_only Supported
-prefix
-within_hierarchy
update_level_shifter_rules
-cells
-location
-names
-prefix
-within_hierarchy
update_power_domain
-equivalent_ground_nets
-equivalent_power_nets
-name
-nmos_bias_net Unsupported
-pmos_bias_net Unsupported
-primary_ground_net
-primary_power_net
-transition_cycles Unsupported
-transition_latency Unsupported
-transition_slope Unsupported
-user_attributes Supported: query
{{disable_secondary_domain getCPFUserAttributes
s {list of domains}}}
update_power_mode
-activity_file Unsupported
-activity_file_weight Unsupported
-average_ir_drop_limit
-dynamic_power_limit Unsupported
-leakage_power_limit Unsupported
-name
-peak_ir_drop_limit
-sdc_files
update_power_switch_rule
-acknowledge_reciever_1
-acknowledge_reciever_2
-average_ir_drop_limit
-cells
-enable_condition_1
-enable_condition_2
-gate_bias_net Unsupported
-name
-peak_ir_drop_limit
-prefix
update_state_retention_rules
-cell_type
-cells
-names
-set_rest_control Unsupported
The following list shows the priorities (highest to lowest) for path exceptions applied to
the same path.
13
Glossary
The below glossary defines the terms and concepts that you should understand to use
Tempus effectively.
arc
Is the timing relation between two points. This could either be a cell arc or net arc.
arrival time
Is the time elapsed from the source of launch clock till the arrival of the data at the end point.
asynchronous clocks
Two clocks that do not have a fixed phase relationship between their time period.
attribute
attacker
bindkey
A keyboard key or mouse button linked (bound) to a Cadence command or function name.
bounding box
A rectangular area, identified by a lower-left point and an upper-right point. Typically used to
identify the area of an object (a path or an instance) or a collection of objects (the selected
set).
branch
A path between two nodes. Each branch has two associated quantities, a potential and a flow,
with a reference direction for each.
capacitance
cell
An inverter and a buffer are examples of a small cell. A decoder register, arithmetic logic unit
(ALU), memories, complete chips, and printed circuit boards are examples of large cells.
cell delay
Represents the time difference of a signal when transmitted from an input to an output.
cellview
clock
clock gating
One of the basic power-saving techniques where the clock is gated in a logic block only when
a next state logic is required to be captured.
clock latency
Is the amount of time taken from the clock origin point to the clock pin of the flop (sink pin).
clock path
Is the timing path from the clock source to the sink(clock) pin of the flop.
clock skew
Is the difference between the clock arrival time at two different nodes.
clone
A layout structure that has been replicated from a specified source structure already
implemented in the layout view. Each clone inherits its physical characteristics from the layout
structure on which it is based, and the connectivity information from the associated schematic
structure.
constraint
The restrictions set on the objects in a layout or schematic to meet the routing or placement
requirements in a design.
corner
A corner is defined as a set of libraries (characterized for process, voltage, and temperature
variations) and net delay, which together account for delay variations. Corners are not
dependent on functional settings; they are meant to capture variations in the manufacturing
process, along with expected variations in the voltage and temperature of the environment in
which the chip will operate.
coupled capacitance
coupling
Is the transfer of electrical energy from one circuit segment to another. In the context of Signal
integrity, coupling refers to the capacitive coupling that is often unintended because of the
capacitance between two wires that are adjacent to each other. Usually, one signal
capacitively couple with another signal and causes noise.
critical path
Is defined as the path that has the worst amount of slack relative to the desired arrival time.
crosstalk
cross coupling
Is the effect introduced on neighboring nets because of the coupling capacitance between
them.
current design
data path
Is the timing path between output of the launch flop to the input of capture flop.
default value
The value used by the software unless you specify otherwise. The default is frequently the
initial state.
delay
Is the time that it takes a signal to propagate from a given point to another given point.
delay calculation
Is the term used in an integrated circuit design for the sum of the delay of logic gates and
delay of wires attached to it; basically the delay of any path from a start point to end point.
This also refers to the process by which cell delay or net delay is calculated.
design
The collection of all data in a cellview, including all nested data, starting at the top and
expanding the hierarchy.
design library
A library that contains data for the current design. It is usually in the designer’s own directory
or in the design group’s directory.
design verification
device
A design element that has both a symbol view and a layout view, with corresponding pins.
distributed processing
distortion
Is the changing of any of the attributes of a signal, such as amplitude, pulse width, rise time,
and so on because of the medium, such as a connector or a cable through which the signal
flows.
DMMMC
driver
A primitive device or behavioral construct that affects the digital value of a signal.
DSTA
Abbreviation for Distributed Static Timing Analysis. It is the Master/Client architecture that
fully leverages multiple threads on both the Master/Client processes allowing maximum
scalability, even with the growing size and complexity of the designs.
dynamic analysis
Dynamic analysis is a method of analyzing a circuit to obtain operating currents and voltages.
It is a time-based analysis, where the circuit netlist is analyzed over a specified period, such
as a clock cycle.
endpoint
Point in a design where the timing path ends. This is either a primary output port or the
launching pin of a sequential cell (CK pin of a flop or EN pin of a latch).
environment
The hardware and software setup and conditions within which the system operates.
extrapolation
Using two or more points on a curve to determine an intermediate curve point that provides
a more accurate value than the provided available points. For example, calculating delay for
cases where the inputs are lying outside of look up table.
false path
Is a timing path not required to meet its timing constraints for the design to function properly.
fanin
Is the number of pins or ports in the cone of logic connected to the input of a logic gate.
fanout
Is the number of gate inputs that can connect to the gate output. For example, with a fanout
of 4, one TTL gate can drive 4 others.
floorplanning
Placing ports, cells, memories, macros, and so on to either create a rough plan to estimate
whether a design meets the timing and routability criteria, or create a starting point for design
implementation.
GBA
Abbreviation for Graph Based Analysis. It calculates the worst-case delays of all cells
considering the worst-case slew for all the inputs of a gate when the worst slew propagation
is ON.
GUI
glitch
Unintended noise pulse induced on the neighboring nets due to capacitive (or inductive)
coupling.
hierarchical design
A hierarchical design is a way of structuring the logic at more than one level of abstraction;
that is, a symbol at one level of abstraction represents the internal contents of a cell at a
higher level of hierarchy.
hierarchy
Nested design levels, such as instances within a cell. By default, you open the top level in the
hierarchy when you open a cellview.
hierarchy representation
Specification of how the physical hierarchy is generated from your logical design, including
which logical components are to be generated or ignored in the physical implementation and
which physical views are used to implement logical components.
IR drop
IR drop is a reduction in the voltage that occurs on the VDD network of an integrated circuit
because of the current flowing through the resistance of the VDD network itself (V = I x R).
impedance
interconnect
Refers to the physical wires and vias between the gates and cells in an integrated circuit.
instance
A database object that creates a level of hierarchy. An instance creates an occurrence of the
referenced cellview.
latch
Latch is a level-sensitive register with three ports - input, output, and enable. When enable is
active, input drives output, which means that the latch is open or transparent. When enable
is inactive, the output is kept at the existing value.
latency
Is the time taken by a clock signal to be transmitted from the input source to output.
layer
A layer refers to a mask material. Various database shape objects are created referencing a
layer and a purpose.
library
man page
A description of a command, variable, or message code displayed using the man command
in Tempus. For example, entering man report_timing at the Tempus prompt displays the man
page showing the description of the command and its related parameters.
miller capacitance
Is the coupling capacitance between nets associated with the coupling between the gate and
the source/drain of a transistor.
mode
A mode is defined by a set of clocks, supply voltages, timing constraints, and libraries. It can
also have annotation data, such as SDF or parasitics files. Many chips have multiple modes
such as functional modes, test mode, sleep mode, and so on.
modeling
multithreading
MMMC
Abbreviation for Multi Mode Multi Corner. MMMC is the ability to configure the software to
support multiple combinations of modes and corners, and to evaluate them concurrently.
MSV Designs
Abbreviation for Multi Supply Voltage Design where the design is using more than one voltage
sources.
net
A logical signal connection between a set of pins on different instances. After routing, a net
consists of routed wires on the routing layers.
netlist
Is a collection of related lists of the terminals (pins) in a circuit along with their
interconnections.
optimization
Ability to achieve the most efficient design of a product. There are various types of
optimizations, which are performed by different tools in the design flows for chips, boards, and
so on.
path
A path object is a shape-based object represented by a point array with a specified width,
style, and layer-purpose pair.
path search
The list of directories the software searches for files, libraries, and commands.
parasitic capacitance
PBA
Abbreviation for Path Based Analysis. Here, a timing path that is found by graph-based
analysis (GBA), is re-timed for increased accuracy and for removing pessimism due to slew
merging effects, AOCV stage counts, and so on.
peak current
phase timing
Is the timing relationship between the edges of a clock and other clock signals or data signals.
pin
A physical implementation of a terminal. You can place pins on any layer. Pins have a figure
defining the physical implementation and a terminal defining the type, such as the input,
output, and so on. Pins also have names, access directions and placement status.
ports
Endpoints that let the model and the application to interact during simulation.
propagation delay
properties
pulse
receiver
A primitive device or behavioral construct that samples the digital value of a signal.
required time
Is the latest time at which a signal can arrive without making the clock cycle longer than
desired.
routing
Physically connecting objects in a design according to the design rules set in the reference
library or technology file.
RCDB
RSH
Abbreviation for Remote Shell. It is the method of launching jobs on remote machines.
scaling
Scaling is the process of globally reducing or enlarging a design. Scaling is typically used to
match a design to a specific process.
session window
The current working window. A session window can contain multiple tabs, each potentially
running a different application. You can have more than one session window open at a time,
each with a workspace of its own.
skew
Is the difference in the timing that arises when a clock transition occurs.
slack
Is associated with each connection and is the difference between the required time and the
arrival time. A positive slack s at a node implies that the arrival time at that node may be
increased by s without affecting the overall delay of the circuit. Whereas, a negative slack
implies that a path is too slow, and the path must be sped up (or the reference signal delayed)
if the whole circuit is to work at the desired speed.
slew
Is the time taken by a signal to change from rise to fall or from fall to rise . This is also known
as the transition time.
signal integrity
Refers to a signal's freedom from noise and the unpredictable delay caused by increasing the
coupling capacitance between neighboring lines.
standalone
A mode in which a machine can run only locally installed and licensed applications.
startpoint
Is a point in a design where the timing path begins. This is either a primary input port or the
capturing pin of a sequential cell (D pin of a flop, a latch or synchronous reset/set pins of a
reset/set flop).
static analysis
superthreading
SDF file
Abbreviation for Standard Database Format files. These are used to store values and the data
of fixed lengths in a defined way and can easily be transferred across databases and
programs.
SMSC
Abbreviation for Single Mode Single Corner. This is the ability to configure the software to
support single mode and single corner at one time.
STA
Abbreviation for Static Timing Analysis. It is a simulation method of computing the expected
timing of a digital circuit without requiring a simulation of the full circuit.
SSH
Abbreviation for Secure Shell. It is the method of securely launching jobs on remote
machines.
SPEF
SPEF is an acronym for Standard Parasitic Exchange Format, which is a form of SPF that
allows true coupling capacitance to be carried between nodes and is passed to downstream
analysis tools.
synchronous
When specific transitions occur at the same time between two clocks or signals, thereby
maintaining a timing relationship with each other.
task
Work objective. For example, a hierarchical task comprising a complex objective, such as
optimizing device sizing, or a simple task such as adding a new pin to a schematic.
time borrowing
Is a technique that allows logic to automatically borrow time from the next cycle, thereby
reducing the time available for the data to arrive for the following cycle or permitting the logic
to use the slack from the previous cycle in the current cycle.
timing arc
Is the path set when a signal travels from one input to another output.
tool
Is a shorthand term for an EDA product in the electronic design automation industry.
top-down design
An approach to hierarchical design that uses estimates and floorplanning to start at the top
level of a design.
transistor
Is a semiconductor device, which is used to amplify a signal, or to open and close a circuit.
transient analysis
tapeout
Process of transferring the final chip layout design files to a mask-making vendor.
via
A via is a connection point between two adjacent metal routing layers defined by a pad in each
layer.
victim
A victim net receives undesirable cross-coupling effects from any neighboring attacker net.
VDD
VDD is the common name of the power node, which is the voltage supply. It is the same as
VCC.
VSS
VSS is the common name of the ground node, which is a conducting body used as the
electrical current return. It is the same as GND.
wire
Wire refers to the routed physical metal conducting an electrical signal in contrast to a net,
which refers to the logical electrical signal that is being transferred.