Synth Data
Synth Data
Contents
Preface .......................................................................................................................... 11
About This Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Other Information Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Syntax Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Text Command Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
About the Graphical User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Using Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Using Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Static Timing Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Supported File Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Timing Analysis in the Synthesis Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Timing in the Generic Synthesis Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Timing in the PKS Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2
Choosing a Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Partitioning a Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Hierarchical Top-Down Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Bottom-Up Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Bottom-Up-Top-Down Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Budgeting the Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Serial and Parallel Bottom-Up-Top-Down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3
Using Timing Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Reading Timing Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Using Cadence TLF Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Using Synopsys .lib Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Using Synopsys Stamp Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Using IEEE 1481 Delay and Power Calculation System (DCL) Libraries . . . . . . . . . . 54
Using OLA v1.0.2 Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Specifying Target Technology Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Multiple Target Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Linking Cells to a Target Technology Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Getting Library Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Overriding Default Values in the Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Updating Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4
Setting Timing Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Timing Constraints Quick Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Setting the Timing Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Specifying Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Defining Ideal Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Defining Multiple Clock Domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Associating Clock Waveforms and Polarity to Pins . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Specifying Clock Insertion Delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Specifying Clock Uncertainty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Using Gated Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Using Derived Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5
Linking Physical Design Information . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Exchanging Physical Design Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Forward Annotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Backannotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
The Generic Synthesis and Timing Task Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Integrate Chip-Level Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Verify Chip-level Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Initial Floorplanning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Final Floorplanning and Placement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Post Placement Timing Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Post Final Route Timing Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Generating SDF Constraint Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Sample SDF Constraint File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Backannotation Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Reading SDF Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Finding Missing SDF Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Reading Net Parasitic Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Sample Net Parasitic File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Finding Missing Net Parasitic Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6
Deriving the Timing Context for a Module . . . . . . . . . . . . . . . . . . . . 115
Timing Context of a Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Using Time-Budgeting to Derive a Module’s Timing Context . . . . . . . . . . . . . . . . . . . . . 117
Using the dont_modify and do_uniquely_instantiate Commands . . . . . . . . . . . . . . 117
Deriving the Timing Context in Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Using do_derive_context with Backannotated Timing and RC Information . . . . . . . 122
7
Generating and Understanding Timing Reports . . . . . . . . . . . . . 127
Types of Reports for Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Checking the Design for Timing Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Generating Library Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Generating Timing Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Generating Design Information Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Generating Clock Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Generating Port Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Generating Cell Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Generating Net and Pin Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Generating Path Exception Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Understanding Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Phase Shift in Single Clock Domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Phase Shift in Multiple Clock Domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Loop Check and Time Borrowed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
8
Identifying and Eliminating False Paths . . . . . . . . . . . . . . . . . . . . . . . 141
Critical False Path Verification Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Static and Robust False Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Reporting and Eliminating False Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
CFPV Use Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Options to report_timing for False Path Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Example: Timing Reports with False Path Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
9
Finding and Fixing Violations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Finding Violations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Setting Path Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Specifying False Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Specifying Path Delay Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Adding Cycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Path Exception Priorities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Reporting Path Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Specifying Constant Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
10
Using Advanced Analysis Techniques . . . . . . . . . . . . . . . . . . . . . . . . 193
Using RAM and ROM Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Using RAM and ROM Models In Logic Optimization . . . . . . . . . . . . . . . . . . . . . . . . 194
Importing RAM and ROM Models Into Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
A Simple RAM Cell Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Analyzing Latch-based Designs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Latch Time Borrowing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Example 1. Balancing Slacks (No External Delay) . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Example 2. Balancing Slacks (External Delay) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Limiting Time Borrowing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
On and Off Chip Variation Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Analyzing Simultaneous Best Case and Worst Case On-Chip Variation . . . . . . . . . 212
Analyzing Simultaneous Best Case and Worst Case Off-Chip Variation . . . . . . . . . 214
A
Sample Tcl Scripts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Converting Synopsys Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Modular Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Setting up the Synthesis Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Reading Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
A Script Showing How to Read Verilog Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Clocking and Default Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Applying Time Budget Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Design Rule Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
max_transition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
max_capacitance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
max_fanout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Writing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Writing Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
B
Generating GCF Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Generating GCF 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
C
Understanding Errors and Warnings . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Error Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Constraint Error Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
False Path Analysis Error Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Index.............................................................................................................................. 247
Preface
Depending on the product licenses your site has purchased, you could also have these
documents.
■ PKS User Guide
■ Datapath Option of Ambit BuildGates Synthesis and Cadence PKS
■ Low Power Option of Ambit BuildGates Synthesis and Cadence PKS
Ambit BuildGates synthesis is often used with other Cadence® tools during various design
flows. The following documents provide information about these tools and flows. Availability
of these documents depends on the product licenses your site has purchased.
■ Cadence Timing Library Format Reference
■ Cadence Pearl Timing Analyzer User Guide
■ Cadence General Constraint Format Reference
Syntax Conventions
This section provides the Text Command Syntax used in this document.
Important
Command names and arguments are case sensitive. User-defined information is
case sensitive for Verilog designs and, depending on the value specified for the
global variable hdl_vhdl_case, may be case sensitive as well.
literal Nonitalic words indicate keywords that you must enter literally.
These keywords represent command or option names.
{ } Braces are used to indicate that a choice is required from the list
of arguments separated by OR-bars. You must choose one from
the list.
... Three dots (...) indicate that you can repeat the previous
argument. If the three dots are used with brackets (that is,
[argument]...), you can specify zero or more arguments. If
the three dots are used without brackets (argument...), you
must specify at least one argument, but can specify more.
Using Menus
The GUI commands are located on menus at the top of the window. They can take one of
three forms.
CommandName … A command name with three dots displays a form for choosing
options.
CommandName -> A command name with a right arrow displays an additional menu
with more commands. Multiple layers of menus and commands
are presented in what are called command sequences, for
example: File – Import – LEF. In this example, you go to the File
menu, then the Import submenu, and, finally, the LEF command.
Using Forms
Cancel The Cancel button cancels the command and closes the form.
Defaults The Defaults button displays default values for options on the
form.
Apply The Apply button executes the command but does not close the
form.
1
Introduction
This chapter introduces Cadence® timing analysis as used in the Ambit® BuildGates®
synthesis flow and the Cadence® physically knowledgeable synthesis (PKS) flow. The
following topics are discussed:
■ Static Timing Analysis on page 16
❑ Features on page 16
❑ Supported File Formats on page 17
■ Timing Analysis in the Synthesis Flow on page 19
Features
The basic features are outlined below. For information about features that are new for this
release, see the timing section in the Ambit BuildGates Synthesis Product Notes .
You can use timing analysis interactively from either the UNIX command line or the graphical
user interface (GUI). This manual describes command line usage. The synthesis tools are
invoked by the ac_shell command. For information about starting ac_shell in either GUI
or non-GUI mode, see “Getting Started” in the Ambit BuildGates Synthesis User Guide.
Timing analysis can also be done in batch mode using Tcl scripts. More detail about scripts
is provided in Appendix A, “Sample Tcl Scripts.”
Some static timing analyzers require a flat netlist. Cadence timing analysis can use either flat
or hierarchical netlists. A context-based optimization approach is used for hierarchical
netlists. The context is the set of constraints set at the top level of the design. These
constraints are pushed down the hierarchy so that each of the lower level modules are
optimized using the correct set of constraints. Later, as the higher level modules are grouped
together, the optimized modules are all connected correctly with respect to each other.
However, because logic across the hierarchy boundaries cannot be combined or
restructured, flattening the hierarchy can produce better results.
Time Budgeting
Time budgeting lets you start with initial time budget values rather than constraints derived
from context. This means fewer synthesis iterations and quicker convergence to target
performance.
Incremental Analysis
If the design has been synthesized once, the quality of design can be improved using an
incremental optimization approach. In this process, portions of the design (clock net, for
example) can be extracted from the netlist and certain transformations applied for specific
improvements. For an incremental optimization, timing analysis re-times only the individual
gates affected. A demand-driven algorithm performs only necessary updates rather than re-
timing the whole design.
Input Files
See Chapter 5, “Linking Physical Design Information” for more information about these
formats.
Output Files
Cadence timing analysis generates the following types of output files for you to examine when
debugging your design.
■ Report files
The report files contain the results of the timing analysis. You can customize the report
format. See Chapter 7, “Generating and Understanding Timing Reports” for more
information.
■ Histograms (GUI only)
■ Log files
Ambit synthesis automatically creates two session log files when you start ac_shell.
❑ ac_shell.log
Contains the copyright notice and version of ac_shell.
❑ ac_shell.cmd
Contains a list of the Tcl commands that you enter during the session. After the
session, you can rename and edit this file for use in future sessions.
Cadence timing analysis generates the following types of output files for use by downstream
tools.
■ Constraint files
❑ SDF path constraints
See “Generating SDF Constraint Files” on page 107 in Chapter 5, “Linking Physical
Design Information” for more details.
❑ General Constraint Format (GCF) v1.3 or v1.4
See Appendix B, “Generating GCF Files” for more details.
■ Parasitics files
❑ SPF reduced format
2
Choosing a Methodology
This chapter discusses the high-level tradeoffs when choosing a synthesis methodology for
achieving timing convergence.
Overview
The methodology is the specification of
■ How the design is partitioned
■ How each piece is optimized
■ How the entire design is assembled
Many different methodologies are supported by Ambit® BuildGates® synthesis. You can
combine aspects of the methodologies presented here to develop a custom methodology.
If you have a license for Cadence® physically knowledgeable synthesis (PKS), you should
read the “PKS Design Flow” chapter in the PKS User Guide before deciding on a
methodology.
Partitioning a Design
Design teams usually have several reasons to partition the synthesis of a design:
■ Different designers for different blocks
■ Different place and route blocks
■ Capacity of the synthesis tool in run-time or memory
■ Ability to achieve better timing results with small pieces
This last reason does not apply to Ambit BuildGates synthesis in general. If the design can
be optimized in one run, Ambit BuildGates synthesis produces near optimal results.
Partitioning the design into pieces, each with their own constraints, tends not to produce a
significantly better design than the single run.
Bottom-Up Methodology
This is a fairly simple but time-consuming methodology. The design is partitioned into
synthesizable blocks. Constraints are created for each block, either the default constraints or
fairly accurate constraints created from a manual budgeting process, or some mix of the two.
Each block is optimized separately according to those constraints, and the design is
integrated at intermediate levels of hierarchy up to and including the top-level.
When the design is integrated, timing analysis is performed, and the critical paths are
analyzed. Information about the performance of the circuit is then manually processed into
modifications of the bottom-up constraint files. This is known as manual time budgeting.
For example, if a signal from block A going to block B is not meeting timing, then the designer
for block A increases the set_external_delay, and the designer of block B reduces the
set_input_delay. The amount of this adjustment is based on a heuristic, but it is usually
the result of a reasonable budgeting process like the following scenario. Suppose the signal
has slack of -2.5, meaning that it does not meet timing by 2.5 ns, then designer A adjusts the
budget for block A by 1.2 and designer B adjusts the budget for block B by 1.3.
The bottom-up methodology is relatively simple to implement, but it can be costly and
inefficient to carry out for a large design. Cadence timing analysis supports bottom-up
methodology, but it is not recommended because the automatic time budgeting feature can
take much of this work from the designers. Time budgeting is discussed in the next section.
Bottom-Up-Top-Down Methodology
The bottom-up-top-down methodology is similar in concept to the bottom-up methodology,
except that the system automatically propagates constraint information (budgets) from the
top-level to the lower-level blocks.
Both of these commands analyze the timing information of the design and create new timing
constraints for the boundaries of lower level hierarchical blocks within the design. The
write_assertions command is used in both cases to write out these constraints to a file
for reuse in subsequent optimizations of the lower-level blocks.
The do_time_budget command uses a novel algorithm to divide the positive and negative
slacks at every port. This produces timing constraints for each of the lower-level blocks that
closely mimic the budgets produced by a manual budgeting process, where the work is
divided between the block designers.
For more information, see Chapter 6, “Deriving the Timing Context for a Module.”
In the serial method, the design is too large to optimize in one run. However, the entire design
is loaded into memory and each block is characterized and optimized in turn. After every
optimization, the timing analysis of the entire design is updated to reflect the new timing of
the particular block.
The do_derive_context method is appropriate for this strategy, because at every point in
time you would like timing analysis to work on the full negative slack problem, and have
access to the full positive slack for nets that it can worsen to improve the critical path. You
want every block that you optimize to be timed just as it appears in the integrated design.
The serial method breaks down for large designs, especially in cases where different blocks
in the design are the responsibility of different designers, and there are changes to the RTL
for functionality that prevent integrating the full design on a regular basis.
In these cases, the need is to break the problem into truly separable optimization steps,
where every optimization of a lower-level block is completed using the latest available
information from the other blocks. This latest information is from the previous integration of
the design. Therefore, this represents an iterative technique to converge on a solution to the
global constraints of the design.
Floorplanners
The first step in physical information is often a floorplanner.
An RTL floorplanner takes the RTL directly and produces a rough estimate of the wiring
resistance and capacitance for each block in the form of a wire-load model. This wire-load
model can then be used to guide Cadence timing analysis during pre-layout synthesis using
the read_library_update and set_wire_load commands.
Often a previous layout of the same or similar block can serve as an equivalent or better
starting point for the wireload model used in pre-layout synthesis in the place of an RTL-level
floorplanner.
Another function of floorplanning at the design level is to determine the actual capacitance of
the top-level interconnect before synthesis. These can be annotated to the pre- and post-
layout synthesis using the set_port_capacitance command.
If the physical information is available earlier in the design cycle, during the integration of the
bottom-up compiles, then it can be annotated to the design using the SDF delay file format,
via INTERCONNECT and/or IOPATH statements. This information then can be used by the
do_time_budget process to produce budgets which account for the interconnect delay.
In-Place Optimization
Ambit BuildGates synthesis supports the annotation of physical information at the wire level
using SDF, and capacitance and resistance values. The database maintains this information
during further optimizations of the circuit.
Other optimizations are also allowed, such as cloning and restructuring. However, performing
such optimizations creates new nets in the design that use the wire-load models to estimate
their physical information. Because the new nets use estimates, cloning and restructuring
should not be performed in a normal in-place optimization flow.
Each of the above constructs can have separate RISE and FALL values. If there is only
one value present in these constructs, the same value is assumed for both RISE and
FALL values.
■ New slew parameters have been introduced to distinguish "measured" slew values from
"interpreted" slew values.
❑ Slew_Measure_Lower_Threshold_Pct and
Slew_Measure_Upper_Threshold_Pct define how library transition time data
was measured during SPICE characterization. These are the points on the voltage
waveform where it is sampled. Using these two thresholds, the voltage waveform is
approximated by a ramp. The default measurement points are 40-60% as shown in
Figure 2-1 on page 28.
❑ Slew_Lower_Threshold_Pct and Slew_Upper_Threshold_Pct define the
interpretation of transition time values. These are the actual slew thresholds where
slew is the time it takes for the above ramp to go from say 10% to 90%. The default
is 10-90% as shown in Figure 2-1 on page 28.
■ No threshold scaling is performed after the library is loaded. This behavior is different
from Pearl and is specific to BG. The old CTLF reader scaled delay thresholds to 50/50
and slew thresholds to 10/90. Also, unlike Pearl which lets you change the "reported"
slew thresholds, BG simply uses slew threshold values from the library when reporting
slew values.
■ The following defaults are assumed for delay and slew thresholds if they are not
specified:
Slew Slew
Input Output Slew Slew
Measure Measure
Delay Delay Lower Upper
Lower Upper
Threshold Threshold Threshold Threshold
Threshold Threshold
Rise 50 50 10 90 40 60
Fall 50 50 10 90 40 60
90
60
50
40
10
These defaults apply to all BG libraries: CTLF, TLF 4.3 or ALF. The same defaults apply
to libraries which use cell delays and those that use propagation delays. If the threshold
values are specified, then BG uses the specified values. If the TLF comes from .lib,
then syn2tlf picks up relevant delay and threshold values from the .lib. If such
values are not present, syn2tlf forces you to specify them. No defaults are assumed
in syn2tlf.
Tip
It is not advisable to mix TLF 4.3, 4.1 and CTLF libraries.
■ Delay and slew thresholds can now be changed after the library is loaded using
set_tech_info. This change can be made at the library level and be applied to all the
cells in the library or at the cell level for one or more selected cells. The relevant syntax
is shown below:
set_tech_info [-library list_of_library_names ]
[-input_threshold_pct_rise float ]
[-input_threshold_pct_fall float ]
[-output_threshold_pct_rise float ]
[-output_threshold_pct_fall float ]
[-slew_lower_threshold_pct_rise float ]
[-slew_lower_threshold_pct_fall float ]
[-slew_upper_threshold_pct_rise float ]
[-slew_upper_threshold_pct_fall float ]
[-cell list_of_cell_names ]
[-input_threshold_pct_rise float ]
[-input_threshold_pct_fall float ]
[-output_threshold_pct_rise float ]
[-output_threshold_pct_fall float ]
[-slew_lower_threshold_pct_rise float ]
[-slew_lower_threshold_pct_fall float ]
[-slew_upper_threshold_pct_rise float ]
[-slew_upper_threshold_pct_fall float ]
Note: Threshold values for slew degradation are used only when in the accurate net delay
calculation modes of PKS (Steiner) and SPEF. Threshold-based degradation is not employed
if the less-accurate wire-load models are present. In the wireload case, if the library has the
data for constant multipliers or degradation tables, that data is directly employed without the
need for any threshold scaling.
Understanding Thresholds
This example shows how the thresholds are determined for the circuit shown in Figure 2-2 on
page 30.
set_slew_time 1 in1
ARM
(0-100%) Core (25-75%)
Slew thresholds for the port will follow the definition from the first library in the target
technology list. Essentially, all BuildGates defaults (units, operating conditions, slew
thresholds) are picked up from the first library in the target technology list. This behavior is
identical to that of Synopsys tools.
Thus, if slew thresholds in the first library are 20-80%, then the slew at the input port (in1) is
1ns (20-80%).When this slew is propagated to the buffer, it is degraded across the net and
then scaled to conform to buffer input threshold definition (10-90%). Similarly, the same port
slew is propagated through the RC circuit for the net (degraded), and scaled to conform to
ARM core threshold definition (0-100%)
Because TLF allows cells to have different input and output thresholds, the output of both the
buffer and ARM core could have slew thresholds as 25-75%. The slew reported at the output
of these cells will use those thresholds.
3
Using Timing Libraries
This chapter describes how to use various library formats for static timing analysis in Ambit®
BuildGates® synthesis and Cadence® physically knowledgeable synthesis (PKS)
environments. This chapter contains the following information:
■ Reading Timing Libraries on page 34
❑ Using Cadence TLF Libraries on page 36
❑ Using Synopsys .lib Libraries on page 43
❑ Using Synopsys Stamp Models on page 51
❑ Using IEEE 1481 Delay and Power Calculation System (DCL) Libraries on page 54
❑ Using OLA v1.0.2 Libraries on page 60
■ Specifying Target Technology Libraries on page 62
■ Linking Cells to a Target Technology Library on page 63
■ Getting Library Information on page 64
The libraries are summarized in Table 3-1 on page 34 and discussed in the sections that
follow. Each library description contains four sections:
■ Source Format
Discusses the source format. Some libraries require conversion before being read. This
section also lists unsupported features (if any).
■ Loading the Library
Describes how to load the library into the database. This section also tells whether or not
the timing library contains synthesis and power information.
■ Wire-load Models
Describes how Cadence timing analysis uses the wire-load models from the library.
■ Operating Conditions
Describes how Cadence timing analysis uses the operating conditions defined in the
library.
TLF is the common repository of timing model information in the Cadence backend timing
flow and is the primary timing model format for Pearl. The primary advantage of using the
same TLF library for both Ambit BuildGates (synthesis and timing) and Pearl (the timing
engine for Silicon Ensemble) is that one library can be used for the entire synthesis place and
route flow.
For more information on the TLF, see the Timing Library Format Reference Manual in the
Pearl documentation set. Your local Cadence field office can also assist in converting existing
libraries to TLF 4.3.
The terms TLF and .tlf are used interchangeably throughout this section. When using TLF
or .tlf, the text typically refers to the constructs in the TLF standard or to the actual library
source. When using .ctlf, the text refers to a TLF library compiled by the obsolete utility
tlfc. Compiled files are no longer supported. Vendors usually provide encrypted TLF.
Libraries in the .tlf format can be used for synthesis, timing, and power analysis. A .tlf
library file (either encrypted or unencrypted) is loaded into Cadence timing analysis using the
read_tlf command.
To support existing design databases, read_tlf also loads .ctlf files. However, support
for CTLF is being phased out. It is recommended that you obtain a TLF source file version 4.3
or higher. If the TLF (or CTLF) was generated from .lib, you can use the latest version of
syn2tlf to generate a v4.3 (or higher) TLF file.
➤ To read a .tlf use the read_tlf command as shown in the following examples:
read_tlf my.tlf
read_tlf myold.ctlf
For command options, see read_tlf in the Command Reference for Ambit BuildGates
Synthesis and Cadence PKS .
The read_library_update command supports a merge from a second .tlf library into
an existing .tlf library in memory. The following example appends cells from the
second.tlf library to the first.tlf library:
read_tlf first.tlf
read_library_update second.tlf
➤ To analyze an existing netlist containing cells from multiple TLF libraries, load each TLF
library with a separate read_tlf command. For example:
read_tlf ram.tlf
read_tlf cpu.tlf
Note: The individual libraries must be loaded before executing the do_build_generic
command, which links the technology cells to the instances in the netlist.
TLF libraries and .lib libraries have a similar representation for wire-load models. For this
reason, using TLF libraries for wire-load support in Cadence timing analysis is very similar to
the wire-load support described in “Wire-load Models in .lib Libraries” on page 47.
Operating Conditions
TLF supports named operating conditions like those available in the .lib standard. The
set_operating_condition, set_operating_parameter and
get_operating_parameter commands can be used with .tlf libraries.
Unlike a .lib library, a .tlf library can define a set of lookup tables (in addition to linear
models) to specify delay and slew variations with respect to process, temperature and
voltage. These variations are modeled by process, voltage, and temperature (PVT)
multipliers. However, read_tlf in Cadence timing analysis supports only linear models for
PVT multipliers.
Statetables model the behavior of sequential logic. You can use statetables to model
■ Generic sequential functionality in an easy to understand format
■ Complex sequential cells
While simplistic flip-flop or latch descriptions have limitations in supporting complex
sequential cells, statetables can be used in complex macro-cells such as shift-registers
and counters.
■ Truthtables from vendor databooks
Another common application arises from the presence of truthtables in ASIC vendor
databooks. The library developer can easily translate databook truthtables into
statetables. Because these representations are also useful for Verilog or VHDL
simulations, many libraries end up having statetables. Synthesis tools need to be able to
understand and map to those cells with statetables.
Important
In releases before 4.0.8, statetables were not supported. A ff{} or latch{}
primitive existing in the same cell definition as state_table{} was used instead,
if it was defined.
The library vendor creates the statetable as part of the cell definition. A statetable has
columns for the values of the input pins, the current state value of the output pins, and the
next state values that result from the transition on the inputs. There is one row for each set of
input values.
The values allowed for pinValue (TLF) and input_node_values (.lib) are shown in
Table 3-2 on page 39.
Value Value
Meaning
(TLF) (Liberty)
0 L Low
1 H High
01 L/H Expands to both 0 and 1
10 H/L Expands to both 1 and 0
R R Rise transition
~R ~R Not rising edge
F F Fall transition
~F ~F Not falling edge
- - Don’t care
The values allowed for currentStateValue are the same as above with the addition of
Z for high-impedance. Typically, a don’t care (-) is used as shorthand for
currentStateValue .
Value Value
Meaning
(TLF) (Liberty)
0 L Low
1 H High
01 L/H Expands to both 0 and 1
10 H/L Expands to both 1 and 0
N N No event from the current value
- - Output not specified
X X Unknown
Value Value
Meaning
(TLF) (Liberty)
Z Z High impedance
Statetable Implementation
The software maps the statetables into equivalent flip-flop (ff) or latch constructs. For
instance, in the following example, the statetable representation of a D flip-flop is illustrated.
The implementation derives the next_state, clocked_on, clear, and preset equations
and generates the corresponding ff representation as shown.
This example shows a TLF statetable for a D flip-flop with direct clear and direct preset (both
active-low):
State_Table(D_ff
(D CP CD SD : IQ IQN)
((10 R 1 1 : - - : 10 01)
(- ~R 1 1 : - - : N N)
(- - 0 1 : - - : 0 1)
(- - 1 0 : - - : 1 0)
(- - 0 0 : - - : 0 0)
)
The above example is shown in Liberty syntax in Statetable Example (Liberty Format) on
page 49.For more information on statetable syntax in TLF, see STATE_TABLE in the Timing
Library Format Reference . Follow the links in that document for more detailed examples.
Derived ff Representation
ff (IQ,IQN)
next_state : "D" ;
clocked_on : "CP" ;
clear : " CD’ " ;
preset : " SD’ " ;
clear_preset_var1 : L ;
clear_preset_var2 : L ;
In addition to the basic statetable description in the cell, the algorithm relies heavily on the
timing arcs as the basic building blocks. The software derives a lot of information regarding
the pin-types and other cell functionality from the arcs. Hence, it is imperative that the timing
information for the cells in the library be complete and the timing arcs have correct
timing_type and timing_sense definitions.
Additional Constructs
For correct and complete interpretation of statetables, Ambit BuildGates synthesis also
supports additional .lib constructs such as internal_node, input_map and
inverted_output. Each statetable has its independent, isolated name space and the
above constructs provide the mapping with respect to the real pin names.
The most common situation where these constructs might be present is in multi-bit registers
(banks). In this case, ff/latch banks are deduced, the appropriate name-space mapping is
performed and the statetables are correctly translated.
■ Multiple sequential cells such as master-slave pairs, shift registers, and counters
■ A single cell with two latches that have different timing information. For example, one
latch with regular output and the other with tri-state output.
■ dcm_timing true — No ff/latch functionality derivation from statetables for DCL/OLA.
The .lib format is the ASCII synthesis, timing, and power library format originally defined by
Synopsys and now licensed by Synopsys through the TAP-in program. Cadence is a TAP-in
licensee.
The Cadence library compiler command, libcompile, supports the .lib format and
produces a binary Advanced Library Format (.alf) file that can be used for synthesis and
timing. Usually the ASIC or library vendor provides libraries in .alf format. If your libraries
are already compiled into .alf, you can skip ahead to “Supported .lib Features” on page 45
or “Loading .alf Libraries” on page 46.
The terms .lib and .alf are used interchangeably throughout this section. Typically, .lib
refers to the constructs in the .lib standard or to the actual library source. While .alf refers
to the compiled library that is loaded into Ambit BuildGates synthesis.
The vendor uses the libcompile command to generate .alf files for any given technology.
If the vendor does not provide .alf, but does provide .lib, you must compile the library
yourself.
➤ To compile a .lib file into a .alf file, use the libcompile command at the UNIX
prompt as shown in the following example:
libcompile my_cells.lib my_cells.alf
Note: You must execute the libcompile command from the UNIX prompt, not from
ac_shell.
Command libcompile
Syntax libcompile
[-help] [-version] [-expire] [-queue] [-ipformat] [-debug]
[-verbosity level ] [-logfile file_name ]
library_file_name output_file_name
Command libcompile
Description The libcompile command reads in a technology library in the
Synopsys Liberty Format (.lib) and writes out a compiled binary file
in the Advanced Library Format (.alf).
The .alf file can be read into Ambit BuildGates synthesis using the
read_alf command from the ac_shell.
Arguments library_file_name
The name of the library filename in the
Synopsys Liberty Format (.lib).
output_file_name
The name of the compiled library filename written in the
Advanced Library Format (.alf).
-logfile log_file_name
Name of the log file where run time messages are saved. The
default is libcompile.log.
-verbosity level
Message verbosity level. An integer in the [3-9] range. A higher
level indicates higher verbosity. If the level is set to 9, information
messages such as ignoring unsupported cell and pin properties
appear. The default verbosity level is 7.
-ipformat
Used when the input file is in iplf format (graybox). This format
is no longer supported.
-debug
For debugging purposes. Includes more information in the .alf
output file about the source library.
-help
Displays usage message.
-version
Displays the version of libcompile.
Command libcompile
-expire
Displays license information.
-queue
Waits for a license if all licenses are in use.
Related read_alf
Information read_library_update
report_library
Examples This example compiles the Synopsys library rac.lib into a binary
Ambit library rac.alf. The logfile libcompile.log has default
verbosity and debugging is turned on.
libcompile -logfile libcompile.log -debug rac.lib rac.alf
Ambit BuildGates synthesis and libcompile support the following standard .lib library
features:
■ state_table{} for specifying functionality of cells
For more information, see Statetables in .lib Libraries on page 49.
■ Nonlinear delay models with table lookup
■ Three dimensional (3D) lookup tables
■ Slew-rate derating for cells
■ Arc-specific derating for cells (not available in other tools).
Each timing arc in the library can have a set of scaling factors associated with it. This
enhances the accuracy of delay calculation.
■ Cell-specific derating
Each cell in the library can have a set of scaling factors associated with it.
■ Wire-load models (including multiple wire-load selection groups and area-based
wire-load selection)
Note: The multiple wire-load selection group feature requires that the source .lib files
be compiled with the Ambit BuildGates synthesis version 2.3 (or higher) libcompile
command.
■ Multiple operating conditions
■ Scan cells
■ The min_capacitance and min_transition commands
Libraries in the .alf format can be used for synthesis and timing. A .alf library is loaded
into Ambit BuildGates synthesis using the read_alf command. In the case of multiple
target libraries, the individual libraries must be loaded before executing the
do_build_generic command, which links the technology cells to the instances in the
netlist.
Some library vendors distribute wire-load, RAM, and custom timing models separately from
the main standard cell library. In addition to merging cells from another library, the
read_library_update command can be used to merge these wire-loads, RAMs, or timing
models from another library. In the case of RAMs and custom timing models, the read_alf
command could also be used to load these models into separate libraries in memory since
they are used for timing only. The wire-load models, however, need to be merged into the
library being used for mapping.
Before loading the .alf form of a RAM or timing model (with either the read_alf command
or the read_library_update command), the .alf form must be compiled with the
Cadence libcompile program, which requires the library to be complete with normal
header information.
For more information about loading and updating .alf libraries, see read_alf and
read_library_update in the Command Reference for Ambit BuildGates Synthesis and
Cadence PKS. For more information on multiple libraries, see “Multiple Target Libraries” on
page 62.
Wire-load models are used to estimate the interconnect resistance and capacitance based
on the number of fanouts on a net. Multiple groups of wire-load models can be defined for
different technologies, like five layer and six layer metal, and individual wire-load models
within a group can also be chosen based on area. The report_library command can be
used to get information on wire-load models in a library.
Cadence timing analysis does not support the generation of wire-load models. Wire-load
models that have been generated by floorplanning tools can be backannotated with the
read_library_update command.
The wire-load model that is used for delay calculation depends on what you choose as the
wire-load selection table, the wire-load mode, the wire-load models, and the area of the
module.
The wire-load mode is set using the set_wire_load_mode command. The library may also
have a default wire-load mode. The two wire-load modes available are:
■ top
Setting the mode to top uses the area of the largest block enclosing the net to select the
wire-load model from the wire-load selection table. The default wire-load mode is top if
not defaulted in the library.
■ enclosed
Setting the mode to enclosed uses the area of the smallest block enclosing a net to
select the wire-load model.
The wire-load model for a particular module can be manually set by using the
set_wire_load command. If the set_wire_load command is used, it can be removed
using the reset_wire_load command. Upon removing this assertion, the wire-load model
is then automatically selected depending on the wire-load mode and the wire-load selection
table specified.
Without manual override, Cadence timing analysis selects the appropriate wire-load model
from the library (during synthesis) using an area based wire-load selection table. Wire-load
model selection is based on module area, which is the sum of the area of all the cells in the
module and its submodules.
Predefined operating conditions from the library may be selected using the
set_operating_condition command. The library may also contain a default operating
condition which is used if you do not manually select an operating condition. Process, voltage,
or temperature can be individually changed from the current value set by the default operating
condition by using the set_operating_parameter command. For both commands, the
-pvt option can be used to take advantage of the simultaneous analysis capabilities. For
more information about simultaneous analysis, refer to “Analyzing Simultaneous Best Case
and Worst Case Off-Chip Variation” on page 214.These parameters can be retrieved using
the get_operating_parameter command.
Note: In a .lib library, only one set of lookup tables is defined, which returns the delay and
slew of a specific process, temperature, and voltage. Whenever the process, temperature, or
voltage is varied, linear derating factors multiplied by results from the lookup table are used
to calculate delays and slews.
General information about statetables is provided in Statetables in TLF Libraries on page 38.
After statetables in Liberty (.lib) format are read in by read_alf they are implemented in
the same manner as statetables in TLF libraries. The same limitations described in Statetable
Support Limitations on page 41 also apply to statetables in Liberty format.
Important
In releases before 4.0.8, statetables were not supported. A ff{} or latch{}
primitive existing in the same cell definition as state_table{} was used instead,
if it was defined. If you want to take advantage of the new statetable support, you
must recompile with the latest libcompile and read in the resulting ALF with
read_alf in order to get the statetables into the database.
The library vendor creates the statetable as part of the cell definition. In Liberty, a sequential
cell can have only one statetable in the cell definition. The Liberty syntax of a statetable is
statetable(“input_node_names ” , “internal_node_names ”)
{table : “input_node_values : current_internal_values : next_internal_values ,
input_node_values : current_internal_values : next_internal_values ”;
}
The values for input_node_values are shown in Table 3-2 on page 39 The values
allowed for current_internal_values are the same with the addition of Z for
high-impedance. Typically, a don’t care (-) is used as shorthand for
current_internal_values .
The values allowed for next_internal_values are shown in Table 3-3 on page 39.
This example statetable models the same D flip-flop as discussed in Statetable Example
(TLF) on page 40.
statetable("D CP CD SD","IQ IQN") {
table : "H/L R H H : - - : H/L L/H,\
- ~R H H : - - : N N,\
- - L H : - - : L H,\
- - H L : - - : H L,\
- - L L : - - : L L";
}
For more information about statetables in .lib format, see the Synopsys Liberty
documentation.
The Stamp model describes the interface timing of the block and consists of two parts:
■ Model file (technology-independent information)
Describes the ports, timing modes, and interface timing arcs. The filename has a .mod
suffix. For example, DMA.mod.
■ Model data file (technology-dependent information)
Contains actual delay values and constraints for arcs in the model file. The filename has
a .data suffix. For example, DMA.data.
A Stamp model is used for synthesis and timing. You should verify the Stamp model using
PrimeTime before using the model in Cadence timing analysis.
The Stamp model is loaded using the read_stamp command. The command requires two
arguments, one for the model file and one for the model data file. The -mod argument
specifies the name of the Stamp model. The model data file is specified by the -min, -typ
or -max argument. The -min argument specifies the best case operating condition, -typ
indicates typical case operating condition and -max the worst case operating condition. If the
-min, -typ or -max argument is omitted, the default is -typ. For example, the following
loads the ram.data into the typical operating condition field of the library:
read_stamp -model ram.mod ram.data
You can load multiple operating conditions simultaneously by combining -min, -typ, or
-max arguments. For example, the following loads ram_min.data into the best case
operating condition field and ram_max.data into the worst case operating field of the library:
read_stamp -model ram.mod -min ram_min.data -max ram_max.data
For more information about the command, see read_stamp in the Command Reference for
Ambit BuildGates Synthesis and Cadence PKS.
Wire-load models are part of the Stamp model if they were present when the model was
extracted. See the Synopsys PrimeTime documentation for more information about preparing
a design for extraction with wire-load models or backannotated parasitics and delays.
Operating conditions are optionally specified in the Stamp model. They are the operating
conditions under which the model was extracted. Prime Time adds an
_opcondname .data suffix to the model data file when the -operating_conditions
option is used to generate the model. More than one operating condition can be specified at
the time of model generation. This results in two data files for the model. For example,
PrimeTime extracts values for a DSP core under best-case commercial conditions (BCCOM)
then worst-case (WCCOM) and creates a STAMP model file named dsp.mod and two STAMP
data files named dsp_BCCOM.data and dsp_WCCOM.data. Both data files can be read in
simultaneously by the following command:
read_stamp -model dsp.mod -min dsp_BCCOM.data -max dsp_WCCOM.data
Using IEEE 1481 Delay and Power Calculation System (DCL) Libraries
This section describes how to use IEEE 1481 Delay and Power Calculation System (DPCS)
libraries with Cadence timing analysis.
Source Format
The Delay Calculation Language (DCL) is a language standardized by IEEE for representing
timing and power in DPCS. All references to DCL in this section refer to standard IEEE 1481
DPCS v1.0.
Since DCL is an actual language as opposed to a library format containing lookup tables, the
library developer creating libraries with DCL has greater flexibility. The library developer can
model cell and interconnect delays and slews in ways which suit the application using the
library, or in ways which better model the process technology. For applications like synthesis,
which require high performance, the library developer may choose to model delays and slews
with lookup tables. For applications that require high accuracy, like static timing signoff, the
library developer may choose to model delays and slews with high-order equations or calls to
external delay calculators written in C or Spice applications.
Note: One DCL library can contain both styles of modeling such that the same DCL library
can be used in the design flow from initial synthesis, through physical design, and to final
static timing signoff.
The DCL compiler, ndcl, compiles DCL into a binary Delay and Power Calculation Module
(DPCM). The DPCM is an executable shared library that is linked to an application (like Ambit
BuildGates synthesis) at runtime. The DCL compiler is available through Cadence for library
development purposes. For library distribution rights, the DCL compiler must be purchased
from Si2 which is a not-for-profit organization of industry-leading silicon systems and tool
companies focused on improving productivity and reducing cost in creating and producing
integrated silicon systems. To contact Si2, refer to the following URL:
http://www.si2.org
Si2 also provides DCL templates for converting existing libraries to DCL.
Libraries written in DCL can be used for synthesis, timing, and power. However, DPCS
libraries do not contain cell function or properties like dont_utilize or dont_modify that
are used in synthesis.
Loading DCL libraries is a multi-step process. First you must set some environment variables.
Then you load a .alf library using the read_alf command, then a DCL library (or more
accurately a DPCM) is loaded on top of the .alf using the load_dcl_rule command.
When the DPCM library is loaded over a .alf, all timing information is derived from the
DPCM, while cell function is derived from the .alf. If the DPCM contains cell properties (like
area) and pin properties (like capacitance and wire load), the DPCM takes precedence over
the .alf and overrides any similar information provided by the .alf. If the DPCM does not
contain this information, the cell and pin properties and wire-load models from the .alf are
used.
To map to multiple libraries, you load one library using the read_alf command and merge
additional libraries using the read_library_update command. Then you load the DPCM
with the load_dcl_rule command. An example is provided after the discussion of
environment variables.
Note: When using a DPCM, multiple libraries should not be loaded into memory with multiple
read_alf commands because the DPCM overrides the timing for only the target technology
library that was specified at the time the load_dcl_rule was executed. No other libraries
are overridden. Also, multiple DPCMs cannot be loaded at one time by Ambit BuildGates. The
DPCS standard includes mechanisms whereby the library developer can give you the
capability to use multiple DPCMs as one unit so that the application loads only one DPCM.
A DPCM is a shared library executable. This means that before Ambit BuildGates can load
the DPCM, you must specify the path to the DPCM runtime library created by the DCL
compiler and the DPCM executable library. Also, the DPCM executable library needs to know
the path to the binary data tables that get created by the DCL compilation process.
To enable this communication between Ambit BuildGates synthesis and the DPCM, you must
set the following UNIX environment variables.
■ LD_LIBRARY_PATH for Solaris (or the equivalent for other platforms)
Used to communicate the location of the DPCM runtime library. You must set
LD_LIBRARY_PATH from the UNIX shell before starting ac_shell.
■ DCMRULEPATH
Used to communicate the location of the DPCM executable library. You can set this
variable from the UNIX shell or ac_shell. You must set DCMRULEPATH before using the
load_dcl_rule command.
■ DCMTABLEPATH
Used to communicate the location of the binary data tables. You can set this variable
from the UNIX shell or ac_shell. You must set DCMTABLEPATH before using the
load_dcl_rule command.
The UNIX environment variables listed above are mandatory. A DPCM can also require you
to set other UNIX environment variables. The library developer documents any additional
requirements for the DPCM.
Note: Although you can set the UNIX environment variables, DCMRULEPATH and
DCMTABLEPATH, at the UNIX prompt, setting them in the ac_shell script documents which
library was loaded for the synthesis job. To make the log file easier to read, you can set these
variables immediately before the load_dcl_rule command.
The following example illustrates the proper sequence for loading libraries when using a
DPCM.
At UNIX prompt:
setenv LD_LIBRARY_PATH "/libdata/lib"
For more information, see these commands in the Command Reference for Ambit
BuildGates Synthesis and Cadence PKS :
read_alf
load_dcl_rule
set_dcl_level
set_dcl_functional_mode
set_dcl_calculation_mode
read_library_update
DCL libraries and .lib libraries have a similar representation for wire-load models. For this
reason, wire-load support in Cadence timing analysis for DCL libraries is very similar to the
wire-load support described in “Wire-load Models in .lib Libraries” on page 47, except for the
following differences:
■ DCL does not inherently allow for multiple wire-load selection groups.
The library developer may have provided a DCL mechanism for you to select multiple
wire-load models. A typical approach is to define a UNIX environment variable, such as
DCM_wireload_selection, which you set before executing the load_dcl_rule
command. Then, when the DPCM initializes, it checks for this variable and adjusts its
internal wire-load tables accordingly.
Note: A limitation of this approach is that you do not have the ability to change the
wire-load selection group after initially setting it. The reason is that Cadence timing
analysis caches the wire-load tables from the DPCM into internal data structures for
performance reasons when initializing the DPCM. Therefore, even if the DPCM checked
the environment variable at a later time and updated its internal wire-load tables, the
database would still have the original tables cached. Under these conditions, the
set_wire_load_selection_table and reset_wire_load_selection_table
commands do not have any effect on the wire-load models from the DPCM.
■ If the DPCM has wire-load tables defined, they override the wire-load tables in the .alf
library loaded in memory.
If the library in memory also had wire-load models added with read_library_update,
they are also overridden. However, you can backannotate wire-load models from a
floorplanner after a DPCM has been loaded.
If a DPCM does not have wire-load models defined, then wire-load models from the
.alf and any merged libraries are used as normal for a .alf library only.
Operating conditions are supported with DCL libraries, but the DCL approach is slightly
different than the .lib standard. DCL does not have “named” operating conditions. The most
similar setting in DCL is the OpRange. Cadence timing analysis does not currently support
The most similar setting in DCL to the process component of the .lib operating condition is
calculation mode. In DCL, the calculation mode refers to chip-to-chip process variation, not
on-chip process variation. In Cadence timing analysis, you set the calculation mode with the
set_dcl_calculation_mode command with a value of worst_case, best_case, or
nominal_case. The default is worst_case.
Note: DCL defines unique wire-load models for each calculation mode. If you manually set
wire-load models on a design using the set_wire_load command, you must reset them
(reset_wire_load) whenever you change the calculation mode. Then estimations of
interconnect resistance and capacitance will be different for different calculation modes.
DCL also supports the temperature and voltage components of an operating condition that
you can specify with the set_operating_parameter command and can retrieve with the
get_operating_parameter command. Unlike the .lib library, which uses temperature
and voltage in combination with a linear derating factor to calculate delays and slew, the DCL
library may include temperature and voltage in more accurate delay and slew calculation
functions. If you do not manually set the temperature and voltage, or .lib operating
condition, Cadence timing analysis first sets the temperature and voltage to the defaults in
the .alf library. Cadence timing analysis then overrides those defaults with defaults from the
DPCM if they exist.
Cadence timing analysis does NOT support the following DCL constructs:
■ Multiple voltage rails
The default voltage that timing analysis uses from the DPCM is the default for voltage
rail 0.
■ Instance specific temperature and voltage components
With a .lib library, Cadence timing analysis lets you define different operating conditions for
early and late timing paths. With DCL, this functionality is built into the library and timing
analysis takes advantage of it automatically.
DCL does not specify the interconnect topology type (tree_type) component of a .lib
operating condition; Cadence timing analysis uses worst_case_tree as the default.
With a .lib library or a TLF library, Cadence timing analysis calculates cell delays and slews
using look up tables provided in the library. To calculate interconnect delays and slews,
Cadence timing analysis uses its own calculations. These calculations require a tree type to
be set (using the set_operating_condition command) along with estimations of
resistance and capacitance from a wire-load model or backannotated resistance and
capacitance.
A DCL library performs the calculations for cell and interconnect delays and slews internally
and then gives the results back to the application using the library. Cadence timing analysis
currently uses cell delay and slew calculations as well as lumped RC interconnect delay and
slew calculations from the DCL library. Interconnect calculations with detailed parasitics or
reduced parasitic models such as PI models are not yet supported. Since DCL does not
specify a tree type, Cadence timing analysis defaults to worst_case_tree. To estimate
resistance and capacitance, the system downloads the wire-load models defined in the
DPCM into internal data structures and performs the RC estimation internally.
Source Format
As with DPCS, the Delay Calculation Language (DCL) with some extensions is used for OLA
libraries. Additionally, the OLA specification allows libraries written in OVI Advanced Library
Format (OVI ALF) to be converted to the DCL language. The OVI ALF to DCL converter is
available from SI2. The library developer chooses which source format to use.
Libraries in OLA can be used for synthesis, timing, and power analysis. A key feature of OLA
over DPCS is the addition of cell function information and properties equivalent to dont_use
and dont_touch that can be used for synthesis.
To map to multiple libraries, the library developer should use the facilities in OLA for allowing
multiple DPCMs to be loaded as one unit. Cadence timing analysis can load only one DPCM.
As with DPCS, you must set UNIX environment variables for an OLA library to be loaded. The
environment variables required are the same as those required for a DPCS library which was
described in “Loading DCL Libraries with a DPCM” on page 55.
The following example illustrates the proper sequence for loading OLA libraries when using
a DPCM:
At UNIX prompt:
setenv LD_LIBRARY_PATH "/libdata/lib"
At ac_shell prompt:
# Set the UNIX environment variables
set env(DCMRULEPATH) "/libdata/OLA/myDPCM"
set env(DCMTABLEPATH) "/libdata/OLA/tables:/libdata/OLA/%RULENAME"
# Load the OLA library
read_ola
Wire-load models in an OLA library are accessed and used in the same fashion as wire-load
models in a DPCS library. See “Wire-load Models in DCL Libraries” on page 57.
Operating conditions in OLA are used in the same fashion as in a DPCS library as described
above except that since a .lib library is never loaded, predefined operating conditions are
not available to be selected with set_operating_condition. Instead, use the
set_operating_parameter and set_dcl_calculation_mode commands to set the
temperature, voltage, and calculation mode specifically.
Calculation of cell and interconnect delay and slew with an OLA library in Cadence timing
analysis is identical to calculation with a DPCS library. See “Cell and Interconnect
Calculations in DCL Libraries” on page 59.
For example:
set_global target_technology lca500k lca3k
Note: If only one library has been loaded, Ambit BuildGates synthesis uses that library as
the target technology library by default.
Timing analysis picks up default parameters from the first library on the list. By contrast, if
some default parameters are picked from one library, and some from others, the behavior
becomes very confusing and ill defined. For example, say the second library has a default
operating condition defined, but the first library has default operating parameters, then the
timing results still depend upon the order in which libraries are specified in the target list.
Tip
You always have the choice of specifying wire loads and operating conditions using
appropriate commands, if you are not happy with the default behavior.
This example Tcl script loads the design data and sets multiple target technology libraries.
# Read in all libraries
read_alf lib1.alf
read_alf lib2.alf
read_alf lib3.alf
replace the wire-load estimations, you also read the delay file. Then you run optimization
which does the mapping and completes the process.
1. Create the generic netlist, using this command:
do_build_generic
3. Read in delays and parasitics. See Chapter 5, “Linking Physical Design Information.”
This is an optional step. For example:
read_sdf placed.sdf
4. Run optimization. Optimization to map to a target library can be performed either with the
do_optimize command or the do_xform_map command. See “Optimize the Design”
in the Ambit BuildGates Synthesis User Guide . For example:
do_optimize
➤ To view the library contents, use the report_library command. For example,
ac_shell[2]>report_lib -library lib2 > lib2.rpt
The report_library command lists all of the cells in the technology library and their
functions. It also provides Information on wire-load models and operating conditions.
Typically this file is very large and text is lost from the display. Use more to view the file
in ac_shell or open the file in a text editor in a UNIX shell.
➤ To retrieve information about a specific library cell, use the -cell option in the
get_tech_info command. For example,
ac_shell[3]>get_tech_info -library lib2 -cell NR2L
{cellname NR2L} {area 4.0000}
❑ input_threshold_pct_rise
❑ input_threshold_pct_fall
❑ output_threshold_pct_rise
❑ output_threshold_pct_fall
❑ slew_lower_threshold_pct_rise
❑ slew_lower_threshold_pct_rise
❑ slew_upper_threshold_pct_rise
❑ slew_upper_threshold_pct_fall
■ Pin-level assertions
❑ fanout_load
❑ max_fanout
❑ max_capacitance
❑ max_transition
This example tells Ambit BuildGates synthesis not to use the BUFA cell during optimization.
ac_shell[11]>set_tech_info -cell BUFA -dont_utilize true
The reset_tech_info restores the value to the default as specified in the library as shown
in this example.
ac_shell[26]>reset_tech_info -cell BUFA -dont_utilize
ac_shell[27]>get_tech_info -cell BUFA
{cellname BUFA} {area 4.0000}
Updating Libraries
Sometimes it is necessary to replace or add to data in the target library with new data from a
different library. Replacing wire-load models and adding cells are two common reasons for
updating the target library.
The read_library_update command -cells option adds all cells from the specified
library (ASCII file) to the target technology library. This is the case when you are using models
such as RAMs from a separate memory library. This example reads all cells from the memlib
library into the technology library:
read_library_update -cells memlib
For more information, see read_library_update in the Command Reference for Ambit
BuildGates Synthesis and Cadence PKS.
4
Setting Timing Constraints
Before you can verify that your design meets timing requirements, you must specify what the
requirements are. You do this by setting assertions and constraints. This chapter discusses
the following topics:
■ Timing Constraints Quick Reference on page 70
■ Setting the Timing Context on page 72
■ Specifying Clocks on page 72
❑ Defining Ideal Clocks on page 74
❑ Associating Clock Waveforms and Polarity to Pins on page 75
❑ Specifying Clock Insertion Delay on page 76
❑ Specifying Clock Uncertainty on page 79
❑ Defining Multiple Clock Domains on page 75
❑ Using Gated Clocks on page 82
❑ Using Derived Clocks on page 87
■ Specifying Operating Conditions on page 89
■ Specifying Wire Loads on page 89
■ Specifying Boundary Conditions on page 93
■ Specifying Slew Rates on page 93
■ Specifying Design Rule Limits on page 96
■ Specifying Latch Transparency on page 97
Saved in ADB?
Global
Constraint Default
or Per Port/Net/Pin
Type Value
set_global variable
Saved in ADB?
Global
Constraint Default
or Per Port/Net/Pin
Type Value
set_global variable
The timing analyzer maintains the analysis and constraints pertaining to different timing
contexts. Thus, the set_top_timing_module command can be viewed as a selection
mechanism for timing contexts.
For more information, see Setting the Timing Context for Synthesis on page 119. Also see
set_top_timing_module in the Command Reference for Ambit BuildGates
Synthesis and Cadence PKS .
Specifying Clocks
Timing analysis of sequential circuits is relative to the clock. You must specify one or more
clocks for sequential designs. The most important assertion you can make for correct timing
analysis is the clock definition. Clock information that you can specify includes:
■ Period and waveform
■ Latency (insertion delay)
■ Uncertainty (skew)
■ Gated clock checks
■ Transition time (slew time)
Cadence timing analysis approximates the actual waveform edge as a ramp. Figure 4-1 on
page 73 shows the measurement points for the delays in a clock waveform.
skew
90-80
threshold
10-20
fall time
cycle time
Here are the basic steps to define clocks and data arrival/required times:
1. Define ideal clock waveforms with the set_clock command.
2. Associate ideal clock waveforms with ports using set_clock_root command.
3. Define data arrival times at input ports using set_input_delay command, and
required times at output ports using set_external_delay command.
4. Define clock source and network insertion delay (latency) using
set_clock_insertion_delay command.
Any clock source insertion delay is applied in both ideal and propagated modes.
The network insertion delay assertions are recognized only during ideal mode. In the
propagated mode, the assertion is replaced by network insertion delay that is calculated
from the actual circuit delays.
Source and network insertion delays specified on the clock waveforms are picked up for
both set_input_delay and set_external_delay assertions. Insertion delay
specification on a port/pin overrides any previous insertion delay on the same port/pin/
waveform.
You define an ideal clock by supplying its name, period, and waveform.
➤ To specify an ideal clock, use the set_clock command as shown in the following
example:
set_clock ideal_clock -period 20 -waveform {0 10}
Since the ideal clock is defined by leading edge and trailing edge times instead of rising edge
and falling edge times, the ideal clock has no intrinsic polarity. The above example defines
both the waveforms shown in Figure 4-2 on page 74.
Positive ideal_clock
Negative ideal_clock
0 10 20
For complete syntax and more examples, see set_clock in the Command Reference for
Ambit BuildGates Synthesis and Cadence PKS .
Note: An ideal clock is not needed to analyze purely combinational logic. However, you can
still use set_clock to define an ideal clock and use it to define input and external delays
(boundary conditions). This clock is sometimes called a virtual clock. Without a virtual clock,
the default is @, a symbol that denotes an asynchronous clock.
Two clocks are considered synchronous when they have harmonic frequencies. More than
one clock net can be associated with the same ideal clock as long as they are synchronous.
In other words, the same ideal clock can be used to define any number of clock signals with
frequencies that are harmonic to the ideal frequency.
Tip
Because timing analysis must compute timing checks for every ideal clock, you
should keep the number of ideal clocks to a minimum. Having too many extraneous
ideal clocks adversely affects analysis performance and makes your design more
difficult to understand.
You can use the get_clock command to retrieve information about the ideal clocks that you
have previously defined. You can also create a report with clock information using the
report_clocks command. For more information see get_clock and report_clocks
in the Command Reference for Ambit BuildGates Synthesis and Cadence PKS .
External
Clock
Generator
0 10 20
negclk
For the complete description, see set_clock_root in the Command Reference for
Ambit BuildGates Synthesis and Cadence PKS .
You can use the get_clock_source command to retrieve information about the clock pins
used in previous set_clock_root commands. The get_clock_source command
returns the list of all such pins.
You can also use the get_derived_clock command which traverses the clock network
and reports the list of clock ports and generated clock pins.
For more information see remove_assertions in the Command Reference for Ambit
BuildGates Synthesis and Cadence PKS .
The time a clock signal takes to propagate from its ideal waveform origin point to the
clock definition point (clock port) in the design.
■ Clock network latency
The time a clock signal (rise or fall) takes to propagate from the clock definition point
(clock port) to a register clock pin. Clock network latency is also called clock tree delay.
The latency at a register clock pin is the sum of clock source latency and clock network
latency. In Figure 4-4 on page 77, Sx is the source insertion delay and Nx is the network
insertion delay. The total clock insertion delay seen at the clock of RIN is SIN + NIN.
Top
CLK2
External RIN
Clock2 SIN NIN set_external_delay
R1
CP1
CLK1 OUT 3 ERO
External
Clock
Generator ModA
R2A
S1 N1
CP2 S2 N2
R2B
ERI IN
2
set_input_delay
➤ To specify clock network insertion delay on a waveform, simply give the clock name, for
example:
set_clock_insertion_delay 4 CLK1
Note: The specification on the port has priority over the waveform assertion.
➤ To specify clock source insertion delay on a clock port or pin, use the -source and -pin
option. The following example sets a value of 2 for S2 in Figure 4-4 on page 77.
set_clock_insertion_delay -source 2 -pin ModA/clk
➤ To specify clock network insertion delay on a clock port or pin, simply give the pin list.
The following example sets a value of 5 for N2 in Figure 4-4 on page 77.
set_clock_insertion_delay 5 -pin ModA/clk
The last full specification on the path has priority. Referring back to Figure 4-4 on page 77, If
both S2 and N2 are specified, the latency at the clock pins of R2A and R2B is S2 + N2. If
neither latency is specified at the hierarchical port of ModA, the latency at the clock pins of
R2A and R2B is S1+ N1.
In rare cases, there is more than one ideal clock arriving at a clock port. For instance, in
Figure 4-4 on page 77, the clock port CP1 can be reached from both CLK1 and CLK2. In this
case, you can specify which ideal clock is causing the source latency by using the -clock
option with the -source option.
➤ To specify the clock responsible for the source delay in a multiple clock situation, use the
-clock option, for example:
set_clock_insertion_delay -source -clock CLK2 1.0 -pin CP1
There are two propagation modes for timing analysis, ideal and propagated. Source insertion
delay (Sx ) is considered in both ideal and propagated modes. Network insertion delay (Nx )
is only considered in ideal mode. In propagated mode, the asserted network delay is replaced
by the actual clock tree delays. In other words, in ideal mode both Sx and Nx are considered.
In propagated mode, Nx is replaced by backannotated clock tree data and only the source
insertion delay on clock ports is honored.
➤ To analyze your design with clock tree insertion delays set to zero, use the ideal
argument in the set_clock_propagation command as shown.
set_clock_propagation -ideal
Cadence timing analysis uses ideal clock latency mode by default. You can override the
default for the current top timing module when you do have layout data.
➤ To analyze your design with clock tree insertion delays from backannotated data, use the
-propagated argument in the set_clock_propagation command as shown.
set_clock_propagation -propagated
Note: In propagated mode, any insertion delay specification (source or network) that is
asserted on internal pins is ignored. Propagated mode considers the source insertion delay
on clock ports and replaces the network delay assertions with backannoted data.
FF1/clk1
FF1 FF2
Skew
clk1 clk2 FF2/clk2
Clock
You can specify different uncertainties for early (hold) and late (setup) checks on the same
path.
The set_clock_uncertainty command is also used when the clocks are in different
domains, this is known as interclock skew. Interclock uncertainty exists between two
registers with different clocks, as shown in Figure 4-6 on page 80.
Clock1
Skew
Clock2
Clock1 Clock2
Clock uncertainty can also be used as a general method to add pessimism. Mathematically,
you can think of uncertainty as an offset to the final slack. A positive uncertainty contributes
to pessimism. A negative uncertainty has no meaning physically, but it makes all slack
numbers optimistic. Negative uncertainty can be used to adjust conservative constraints into
more realistic ones.
Consider the circuit shown in Figure 4-7 on page 81. Suppose the four uncertainty
specifications denoted by U1-U4 on the schematic are given as follows:
U1:
set_clock_uncertainty -pin g1/Z 4.5
U2:
set_clock_uncertainty -pin g2/Z 3.5
U3:
set_clock_uncertainty -pin g3/Z 2.5
U4:
set_clock_uncertainty -pin g4/Z 1.5
CP CP
ff1 ff2
U3
g3 U4
U1 U2
clk
g1 g2 g4 D Q
CP
ff3
The uncertainty specification U1 applies to instances ff2 and ff3 because there is a path
from g1/Z to the data and the clock pin of both instances. On the other hand, uncertainty U2
applies only to ff2, and not to ff3 because the there is no path from g2/Z to the clock pin
of ff3. Among all applicable pin-based uncertainty specifications, the one furthest down the
clock tree has the highest priority. In this example, for the instance ff2, uncertainty U2 is the
one that is actually used. Thus, the command report_timing -to ff2/D reports an
uncertainty of 3.5 for the path ending at pin ff2/D. Specifications U3 and U4 are ignored
because there is no path from their respective pins to the data and the clock pin of any
flip-flop.
U4:
set_clock_uncertainty -pin g4/Z -to 1.5
Now uncertainty U4 does apply to instance ff2, and so the command report_timing -to
ff2/D will report an uncertainty of 1.5.
U3:
set_clock_uncertainty -pin g3/Z -to 2.5
then it becomes applicable to ff1, and the command report_timing -to ff1/D reports
an uncertainty of 2.5 for the path ending at pin ff1/D.
For more details about the command options, see set_clock_uncertainty in the
Command Reference for Ambit BuildGates Synthesis and Cadence PKS .
You can get information about the clock uncertainties by using the -uncertainty_table
option in the report_clocks command. For example:
ac_shell[11]>report_clocks -uncertainty_table
+-----------------------------------------------+
| Clock To Clock Uncertainty |
|-----------------------------------------------|
| From | To | L->L | L->T | T->L | T->T |
|-------+-------+-------+-------+-------+-------|
| CLK1 | CLK1 | 0.00 | 0.00 | 0.00 | 0.00 |
| CLK1 | CLK2 | 1.60 | 1.60 | 1.60 | 1.60 |
| CLK2 | CLK1 | 0.00 | 0.00 | 0.00 | 0.00 |
| CLK2 | CLK2 | 0.00 | 0.00 | 0.00 | 0.00 |
+-----------------------------------------------+
A typical circuit is shown in Figure 4-8. When the AWAKE input is at logic 1, the CLK1 input
propagates to the output CLK2 as is. When AWAKE is 0, the output also becomes logic 0.
Thus CLK2 is a gated clock signal controlled by the AWAKE input.
g1
CLK1
A CLK2
AWAKE B C
Normally timing analysis blocks the arc from the data input and allows only the clock input to
propagate through the gate. There is one exception to this rule as explained in the section
Using Gated Clock Output as Data on page 86. In order to obtain a proper gated clock signal
at the gate output, some conditions must be satisfied.
■ First, the data input (AWAKE in Figure 4-8 on page 82) must satisfy a setup check and
a hold check, as described in Clock Gating Setup and Hold Checks on page 83.
■ Second, the clock input (CLK1 in Figure 4-8 on page 82 must be the dominant (or
controlling) input as discussed in Checking for Clock Clipping on page 84.
If you expect all pins at the output of the gated clock to be clock pins, you can skip this
step because the default value of this global is true. For more information. see Using
Gated Clock Output as Data on page 86.
2. If you need to change the default setup or hold times of the gate as discussed in Clock
Gating Setup and Hold Checks on page 83, use the set_clock_gating_check
command as illustrated in this example:
set_clock_gating_check -setup 0.55 -pin g1/B
set_clock_gating_check -hold 0.15 -pin g1/B
This sets the gated-clock timing checks to verify that the data input to a gated clock is
stable when the clock signal makes its transitions.
3. Before you run timing analysis, check for clock clipping (and other timing errors) by
issuing this command:
check_timing
More details about how the checks are performed are given in Checking for Clock
Clipping on page 84.
The setup and hold check are shown as Ia and Ib in Figure 4-9 on page 84. The purpose of
these checks is to ensure that the data input is stable while the clock input makes its
transitions. A violation of either check implies that the clock input is not properly propagated
to the output.
The setup and hold times are based on the gate delays. In ideal propagation mode, the clock
network is assumed to have zero delays, so timing analysis uses zero setup and zero hold
time. In propagated mode, for setup time, the analysis uses the maximum arc delay from the
data pin to the output pin. For hold time, it uses the minimum arc delay from the clock pin to
the output pin. These are default values, you can override them using the
set_clock_gating_check command.
The clock gating setup and hold checks are not sufficient to guarantee a proper clock signal
at the output of a gated clock. If the clock input is not dominant (or controlling) before and after
it makes its transitions, then the output signal could be distorted by the data input. This
distortion is called clipping.
There is a separate check in timing analysis called the "clock clipping check." The clock
clipping check finds the logic value of the clock input before the active clock transition and
checks whether this value is controlling for that gate.
You can check for clock clipping by running the check_timing command. The clock clipping
check is one of the checks performed by the check_timing command and is performed for
every logic gate where clock gating is utilized. For information about the other checks, see
check_timing in the Command Reference for Ambit BuildGates Synthesis and
Cadence PKS .
In Figure 4-9 on page 84, the clock clipping check on the clock is labeled (II) while the setup/
hold checks are labeled (Ia/Ib). The clock clipping check ensures that prior to the transition
on the clock signal, the clock input is the dominant one for the logic gate. That is, it determines
the output of the gate by itself. Otherwise, the transition on the data input can propagate
through the gate and result in a distorted clock waveform on the output. The dominant
(controlling) logic value for the clock input is 0 if the gate (cell) is of type AND or NAND, and
1 if the gate is of type OR or NOR. In the following example, if the gate type is AND or NAND,
the clock clipping check is met because the clock input has the controlling value of 0 before
its rise transition.
CLOCK
setup hold
(Ia) (Ib)
DATA
DATA must be stable
here (II)
First the clock roots from which the clock and the data signal originate are identified. Let
Clk_C be the clock root for the clock signal, and Clk_D be the clock root for the data signal.
The periods of Clk_C and Clk_D must have a certain relationship for clock gating to work
correctly. If the clock periods are Tc and Td respectively, the following condition must be
satisfied:
If this condition is not satisfied, meaning either Tc > Td, or Tc=x*Td (where x is a real
number), then the check fails, and an appropriate message is issued.
If the condition is satisfied, then the logic value of the clock input is checked, as described
above. This check is performed as follows (see Figure 4-10 on page 85.)
1. The Clk_D transition that triggers the data signal is found
2. The first Clk_C transition that follows this Clk_D transition is identified
3. The corresponding transition on the gated clock signal is found
4. The logic value before this clock transition is checked to see if it is controlling. A warning
message is issued if it is not.
Clk_D
triggering edge
for DATA
(1.)
DATA
Clk_C
Clk_C edge that immediately
follows triggering Clk_D edge
(2.)
CLOCK
CLOCK must
be dominant
(controlling)
(4.) here (3.)
Normally the output of a gate with a clock and data input fans out to other buffers or inverters
in the clock network, or the gated clock output feeds register clock pins.
In some cases, however, a gated clock output can be used as a data signal. For instance it
may be connected to a register data input. By default, timing analysis does not convert clock
signals to data signals automatically. However, you can set a global variable which instructs
the tool to do this conversion for gated clocks. This global is
clock_gating_regardless_of_downstream_logic and is set to true by default. If you
set this global to false, then a clock signal gets changed to a data signal wherever it is
necessary.
➤ To automatically convert clock signals to data signals where a data signal is required,
issue this command:
set_global clock_gating_regardless_of_downstream_logic false
For example, in Figure 4-11 on page 86, by default, both ff1/D and ff2/CP receive clock
signals, gClk1 and gClk2 which are the same as gClk. With
clock_gating_regardless_of_downstream_logic set to false, the ff1/D pin
receives a data signal whereas the ff2/CP pin receives a clock signal. The data signal
received by ff1/D is gClk1 converted to data. This automatic conversion is similar to the
effect that you can achieve using the set_clock_info_change command. For more
details, see “Using set_clock_info_change on Output Pins Of Registers” on page 87.
D BUF1
gClk gClk1
clk D Q
CP
ff1
D Q
BUF2 gClk2
CP
ff2
In the special (rare) case where all of the downstream pins of a gated clock are data signals,
timing analysis does not perform clock gating setup and hold checks
(clock_gating_regardless_of_downstream_logic must be false for this to
happen.) The arc from the data input is not blocked either. The clock signal, which is
converted to data, as well as the data signal propagated through the gate in this case.
This section describes how the rising and the falling edges of the final clock signal are
computed when the output of a register is defined as a clock
Important
In releases prior to 2.2, using the set_clock_info_change command required
you to specify set_cycle_addition with the clock edge (rising or falling)
adjustment for both late and early modes. In 2.2 and later releases, you only need
to specify set_clock_info_change. The set_clock_info_change
command automatically does the edge adjustment, without the use of
set_cycle_addition command, whenever data is converted to clock.
If set_clock_info_change assertion is put on the output pin of a flip-flop, then in the ideal
clock propagation case, rising and falling arrival times at output pin Q correspond to clk->Q
rising and clk->Q falling delays.
Where CLOCK is the ideal clock for the clk pin of the flip-flop. The rising and falling clock
edges of the resulting clock are computed as follows:
ClockLeadingEdge and ClockTrailingEdge are times at which the leading and the trailing
edges of the ideal clock CLOCK occur. This ensures that pin U1/Q, which is now a clock pin,
has the same pulsewidth (waveshape) as the ideal clock CLOCK.
In rare situations, the clock signal is from an output port such as when the clock signal goes
straight through a module. In these cases you need to specify the external delay by using the
-ref option of the set_external_delay command.
set_external_delay
EXT
FF
clkout 2
➤ To specify external clock delay, use the set_external_delay command with the
-ref option. For example
set_external_delay -clock main_clk -ref 2 clkout
This means that the assertion is set on a clock network. The default (-sig) sets the
assertion on a data signal. For more information, see set_external_delay in
Command Reference for Ambit BuildGates Synthesis and Cadence PKS .
Each technology library contains one or more operating conditions. Each operating condition
is identified by name and specifes the process, voltage, and temperature. This information is
used in calculating accurate cell delays from the nominal cell delays and the k-factors (also
called derating factors) using either a linear model or non-linear model.
➤ To specify the operating conditions for the design, select the named operating condition
from the library with the set_operating_condition command. For example:
set_operating_condition wc_mil
For the complete usage, see these commands in the Command Reference for Ambit
BuildGates Synthesis and Cadence PKS :
set_operating_condition
set_operating_parameter
expressed as a function of the physical characteristics of the nets in the design such as wire
capacitance and wire resistance. In order to perform meaningful analysis before a physical
layout exists, these parameters must be estimated. These estimates are derived from the
models called wire load models.
A wire load model is a function that uses the fanout count of a net and estimates its
capacitance and resistance. A technology library contains different wire load models that are
pre-computed based on the analysis of several designs differing in area. Typically, the
technology libraries have area lookup tables containing the wire load model for a given cell
area. The library has a default wire load selection table that specifies which table is used, but
you can override it.
➤ To override the default wire-load selection table, use the set_wire_load_selection_table
command. For example:
Additionally, the floorplanning tools may determine a specific wire load model for a design
based on an initial physical design. The wire load models generated from floorplanning can
be read in using read_library_update command.
Figure 4-13 on page 91 provides a flow chart of the algorithm used for selecting a wire load
model for a net.
Net N
Wireload mode
= enclosed
No Yes
Figure 4-14 on page 92 depicts the wireload for a net, where T is the current top module, A
is an instance inside T, and M1 and M2 are two instances inside A. The net net1 is fully
contained inside A, but not fully contained inside either M1 or M2.
A
M1 M2
net1
top
enclosed
The area lookup table for the wire load model is in the technology file.
See these commands in the Command Reference for Ambit BuildGates Synthesis and
Cadence PKS :
set_wire_load_selection_table
set_wire_load_mode
set_wire_load
set_port_wire_load
read_library_update
The input delay given in this command corresponds to the delay through logic that is driven
by the flip-flop triggered by specified ideal clock (see Figure 4-4 on page 77).
➤ To specify the arrival time for output ports with respect to an ideal clock, use the
set_external_delay command as shown in this example
set_external_delay -clock CLK1 3 OUT
The output delay given in this command corresponds to the delay though logic that drives the
flip-flop triggered by the specified ideal clock (see Figure 4-4 on page 77).
The advantage of using these commands is that changes in the clock definition do not require
changing the data arrival or required times. For instance, the (source) clock insertion delays
for the ideal clock are automatically taken into account, without having to manually change
the arrival or required times.
For more information, see the command syntax in the Command Reference for Ambit
BuildGates Synthesis and Cadence PKS :
set_input_delay
set_external_delay
80
20
Design rules of a process require that slew time at each input and output port be less than a
predefined limit. The set_slew_time_limit command syntax is as follows:
where:
■ -max sets a maximum limit and -min sets a minimum limit (default is -max)
■ float is the maximum (or minimum) slew allowed
■ port_list is the list of ports to which the limit applies
For example,
set_slew_time_limit 2.3 {bus1 bus2}
The maximum limit for bus1 and bus2 is set at 2.3, the slew of the signal at bus1 or bus2
cannot exceed this limit. The maximum limit value is usually derived from the design rule
constraints placed on the cells that the output port is driving or the input port by which it is
driven.
■ Worst
■ Critical
All modes propagate output slew through all logic levels and are specified using the global
variable.
set_global slew_propagation_mode {worst_slew | crit_slew | fast}
Fast Slew
Fast slew propagation mode calculates the output slew of a gate based on a certain depth,
where depth means the number of logic levels preceding the gate. This depth can be set from
0 to 3 using the following global command
set_global depth_for_fast_slew_prop [0 | 1 | 2 | 3]
A higher depth results in more accurate slews, but requires more computation and memory.
See set_global depth_for_fast_slew_prop in the Command Reference for
Ambit BuildGates Synthesis and Cadence PKS .
Because fast slew mode only requires local computation, it is very effective for optimization
purposes. Among the three slew modes, this mode has the fastest runtime, but is the least
accurate in terms of results. Figure 4-16 provides an example of fast slew propagation.
(delay, slew)
Worst Slew
Using worst slew propagation mode, the effect of the input slew on the output slew for all arcs
is calculated and the worst slew effect is combined into the output slew along with the effect
of output loading. Consequently, if the worst slew effect is associated with an input that arrived
much earlier than the other inputs, that slew effect is still used.
The worst slew algorithm is more pessimistic than the critical slew propagation mode
described below.
Figure 4-17 provides an example of worst slew propagation. Even though the arrival time at
input a is earlier than at b, the input slew for a is so much greater that the effect on the output
slew from input a is likely worse than the effect from input b. Thus the effect from a will be
used.
a
(1, 10) delay: 1
(3, fslew (output load) with
worst of [fslew(1, 10) & fslew(2,2)])
(2, 2) delay: 1
b
Critical Slew
In critical slew propagation mode, the effect of the critical input slew from the latest arriving
signal and the effect of output loading is used to calculate the total output slew. Figure 4-18
shows that the effect of the input slew from the latest arriving signal, (2, 2), is used in the
output slew calculation.
(1, 10) a
delay: 1
(3, fslew (output load) & fslew(2, 2))
(2, 2) delay: 1
b
set_slew_time_limit
set_global max_slew_time_limit
set_global min_slew_time_limit
set_port_capacitance_limit
set_global max_capacitance_limit
set_global min_capacitance_limit
set_fanout_load_limit
latch1
D Q
QN
G
Example 1.
set_constant_for_timing 1 latch1/G
Only the D to latch1/QN arc is transparent. The D to latch1/Q arc is still in normal
mode, neither transparent or opaque, because it has not been disabled.
Example 3.
set_disable_timing -from latch1/G
In the transparent mode, timing paths are traced through transparent latches just like a
combinational gate. Additionally, transparent latches propagate constants and also the clock/
data status of their inputs to their outputs.
Tip
Propagation of constants and clock information through latches is not performed
incrementally. You need to execute report_timing to update the timing and let
the constants and clock information propagate through the entire circuit. In the case
of optimization, this is done automatically after every certain number of optimization
steps.
Constants on the clear and preset inputs of latches are also taken into account. The logic
value of the latch output is determined by first evaluating the clear and preset functions as
defined in the library. Usually, if the clear is active-high, a constant 1 on the clear pin puts a 0
at the output. Similarly, a constant 1 on an active-high preset puts a 1 at the output. If neither
function is activated, then the normal output function is evaluated. The normal function is
usually a copy of the input for the Q output and a copy of the inverted input for the QN output.
5
Linking Physical Design Information
This chapter describes the exchange of information between the logical and physical design
environments in Ambit® BuildGates® synthesis. This chapter assumes you have some
familiarity with physical design tools and design processes.
An optimal methodology for achieving design convergence includes the ability to exchange
bidirectional information between the synthesis environment and the physical design tools
(floorplanners, place and route tools). Ideally, there is a mechanism for feeding timing
constraints forward from the synthesis environment (front-end) to the physical design tools
(back-end). Likewise, the back-end physical design tools must be able to extract cell and
interconnect delay information, net parasitics, and cell placement information for use in the
front-end design tools.
As the name implies, Cadence® physically knowledgeable synthesis (PKS) has a tighter link
with physical data than Ambit BuildGates synthesis. This chapter discusses the exchange of
physical data within Ambit BuildGates synthesis. If you have a license for PKS, you should
also read the “PKS Design Flow” chapter in the PKS User Guide .
Forward Annotation
In Ambit BuildGates synthesis you pass the timing constraints to the back-end physical
design tools through the use of a Standard Delay Format (SDF) file. The SDF file is
path-based and represents the timing requirements that you specified by setting constraints
as discussed in Chapter 4, “Setting Timing Constraints.”. The SDF file is used by the
back-end physical design tools to guide cell placement and routing.
Note: Some back-end tools require constraints to be in a General Constraint Format (GCF)
file instead of an SDF file. See Appendix B, “Generating GCF Files” for more information.
Backannotation
The physical design tools extract the following information:
■ Cell and interconnect delays
Calculated by an external delay calculator and written to an SDF file. Ideally the delay
calculator has knowledge of the physical circuit topology. The delay calculator uses wire
load estimations in the absence of actual physical data.
■ Net parasitics
Extracted from the physical design database as SPF or SPEF files and annotated on the
nets.
■ Cell placement information in DEF format can be backannotated into Cadence physically
knowledgeable synthesis (PKS).
A somewhat similar task flow exists within Envisia Physically Knowledgeable Synthesis
(PKS). The major exceptions being that initial placement takes place within PKS before
optimization. And PKS uses Steiner tree routing algorithms to estimate the interconnect
delays. The physical information is available earlier in the design cycle which reduces the
number of timing analysis iterations. PKS provides closer correlation between pre- and
post-route timing than traditional methods. If you have a PKS license, refer to the
“Conventional Synthesis Limitations” chapter in the PKS User Guide .
do_time_budget &
write_assertions
timing no
met?
yes
yes
floorplanning
done?
write_verilog
write_constraints no
Routing
floorplanning /
initial placement .rc
.sdf
.rc .v
.sdf
Integrate and verify
Integrate and verify
chip-level timing
chip-level timing
no
yes timing
est. timing met?
met?
yes
no
do_xform_resize DONE!
Initial Floorplanning
The ability to accurately model block-level interconnect early in the design cycle is an
important step towards achieving timing convergence. Intramodule nets typically do not
correlate well with the statistical data that vendors use to derive the wire-load models in their
libraries. The floorplanning tools can generally be run early in the design cycle, prior to the
availability of a gate-level netlist. The output of the floorplanning tool is either a wire-load
model derived from the placement or an estimate of net parasitics for the block-level
interconnect.
Once timing is achieved using estimated delays, the netlist and the SDF file are forwarded to
the physical design tools.
Important
To ensure that drivers of global nets are sized appropriately, perform a resizing
transform on the complete design prior to extracting time-budgeted constraint
information. See do_xform_resize in the Command Reference for Ambit
BuildGates Synthesis and Cadence PKS
The flow proceeds until no timing problems are found during the chip-level timing check.
After final routing, usually a detailed parasitic file is used to generate an accurate SDF file.
This SDF file is used to perform static timing analysis. You may also need to input a gate-level
netlist as extracted from the physical design tools if any modifications to the netlist were made
in the back-end during scan-chain routing, clock-tree generation or synthesis. Ambit
BuildGates synthesis does not require any special control to support an ECO process. You
have complete control to selectively reoptimize specific modules and to preserve
backannotated timing wherever possible in the design database. If the design does not meet
timing, you must repeat the whole flow.
There may be several iterations before timing is met for the design. All these iterations cause
delays in the project. At smaller geometries (0.25 microns or less) there is a chance that the
design never converges on required timing.
Important
The data written out to the SDF file created by write_constraints is the data
you specified as your target timing goals (constraints), not the actual path delay as
timed by Cadence timing analysis.
➤ To generate the SDF constraint file use the write_constraints command as shown
in the following example:
write_constraints my_constraints.sdf
For the complete syntax, see write_constraints in the Command Reference for
Ambit BuildGates Synthesis and Cadence PKS .
( PATHCONSTRAINT inc i_4/A i_4/Z i_1/B i_1/Z i_2/A i_2/Z dd_outz 1.445000 )
( PATHCONSTRAINT inc i_4/A i_4/Z i_1/B i_1/Z i_3/A i_3/Z copy_outz 1.445000 )
( PATHCONSTRAINT inc i_4/A i_4/Z i_1/B i_1/Z i_2/A i_2/Z dd_outz 1.445000 )
( PATHCONSTRAINT inc i_4/A i_4/Z i_1/B i_1/Z i_3/A i_3/Z copy_outz 1.445000 )
( PATHCONSTRAINT inb i_5/A i_5/Z i_11/A i_11/Z i_22/A i_22/Z d_outx 1.321100 )
( PATHCONSTRAINT inb i_5/A i_5/Z i_11/A i_11/Z i_22/A i_22/Z d_outx 1.321100 )
( PATHCONSTRAINT inb i_5/A i_5/Z i_2/B i_2/Z dd_outz 1.321100 )
( PATHCONSTRAINT inb i_5/A i_5/Z i_2/B i_2/Z dd_outz 1.321100 )
( PATHCONSTRAINT inc i_4/A i_4/Z i_3/B i_3/Z copy_outz 1.445000 )
( PATHCONSTRAINT inc i_4/A i_4/Z i_22/B i_22/Z d_outx 1.445000 )
( PATHCONSTRAINT inc i_4/A i_4/Z i_3/B i_3/Z copy_outz 1.445000 )
( PATHCONSTRAINT inc i_4/A i_4/Z i_22/B i_22/Z d_outx 1.445000 )
( PATHCONSTRAINT ina i_007/A i_007/Z i_1/A i_1/Z i_2/A i_2/Z dd_outz 1.766000 )
( PATHCONSTRAINT ina i_007/A i_007/Z i_1/A i_1/Z i_2/A i_2/Z dd_outz 1.766000 )
( PATHCONSTRAINT ina i_007/A i_007/Z i_11/B i_11/Z i_22/A i_22/Z d_outx 1.766000 )
( PATHCONSTRAINT ina i_007/A i_007/Z i_11/B i_11/Z i_22/A i_22/Z d_outx 1.766000 )
)
)
)
Backannotation Support
The following is a list of the features that Cadence timing analysis supports for
backannotation:
■ Backannotation of the SDF delay file for performing full-chip timing.
SDF delay information can be used during post-layout optimization. Support exists for
backannotation of cell and interconnect delay at one specific operating condition.
INTERCONNECT statements must model interconnect (RC) delay only.
■ Backannotation of the net parasitic file for use with post-layout optimization.
Values in the net parasitic file must be lumped RC values.
■ Backannotation of the Standard Parasitics Format (SPF) or Standard Parasitics
Exchange Format (SPEF) file.
Distributed RC values are supported in SPF and SPEF files.
The following is a list of the unsupported features in Cadence timing analysis for
backannotation:
■ Automatic wire-load model generation from PDEF or net parasitics
Warnings or errors are captured in the logfile. Timing analysis may issue warnings on
asynchronous timing arcs for which the data is not preserved in memory (such as, RECOVERY
or REMOVAL timing checks on asynchronous CLEAR or SET direct input). For more
information, see read_sdf in the Command Reference for Ambit BuildGates Synthesis
and Cadence PKS .
The data in the net parasitic file must be in units consistent with the units specified in the
library. Net parasitics are typically annotated with the current_module set to the top of the
design. The net naming convention is hierarchical and must match that of the design
database.
The data associated with a set_wire_resistance statement represents the data for the
interconnect only, it does not include data for any cell pins on the net. However, some parasitic
extraction tools produce files where the capacitance of cell pins and ports are included in the
load value given in the set_wire_capacitance statement. Refer to the extraction tool
documentation to determine if pin loads are included. You can subtract pin and port
capacitances by editing the net parasitic file to specify the -subtract_pin_caps option.
For example, if the total pin and port capacitance on the net e1/mid_internal_net[1] is
0.08, the following command sets the wire capacitance to 0.70910.
set_wire_capacitance -subtract_pin_caps 0.78910 {e1/mid_internal_net[1]}
A parasitics file is associated with a design and describes parasitics elements of the design
interconnections. Parasitics are of two forms, the detailed form and the reduced form.
The currently supported reduced form is composed of a PI-circuit which models the driver
load and an Elmore delay for the interconnection. Internally, the delay calculator supports only
the reduced form which means that all detailed form files read are reduced and the resulting
reduced form is stored. You can write out the stored reduced form with the write_spf
command. See write_spf in the Command Reference for Ambit BuildGates
Synthesis and Cadence PKS .
The delay calculator uses the reduced form to compute the gate delay and interconnect delay.
The gate delay is computed using an effective capacitance algorithm. The interconnect delay
is computed using the Elmore delay of the reduced form and the waveform at the driver.
Note: Parasitics stitching is not supported. Parasitics are supported only for the full flat
design.
Parasitics commands are used for gate-level timing analysis. Below are the general steps of
gate-level timing analysis with parasitics.
1. Read the libraries.
2. Read the gate level netlist.
3. Set timing constraints and design rules.
4. Read the parasitic file. For command options, see read_spf and read_spef in the
Command Reference for Ambit BuildGates Synthesis and Cadence PKS .
5. Perform timing analysis.
Figure 5-1 on page 104 showed that the design should include the integration of
floorplanning information into the synthesis of individual design objects. Figure 5-2 on
page 113 shows how PDEF works.
WLM
HDL (Default)
Step 1.
Verilog write_verilog
read_pdef set_wire_resistance
Step 3.b.2
Timing Correction read_library_update
Ambit BuildGates Optimization
read_sdf
set_wire_resistance
set_wire_capacitance Verilog SDF PDEF write_pdef
write_constraints
SDF
Third Party Place and Route Step 3.b.3
RC
These are the steps illustrated in the PDEF flow chart in Figure 5-2 on page 113.
1. Run Ambit BuildGates synthesis using the default wire-load model (WLM) and generate
a gate-level Verilog netlist using the write_verilog command.
2. Using a floorplanner, read in the netlist, create and place the groups and blocks. Place
the cells within the groups using a placement tool. The floorplanner generates a new
wire-load model based on the physical placement information.
■ Read the PDEF file into Ambit BuildGates synthesis with the read_pdef command
read_pdef filename
■ Import the RC data by sourcing the net parasitics file containing the
set_wire_capacitance and set_wire_resistance commands.
source parasitics.tcl
6
Deriving the Timing Context for a Module
This chapter provides a basic understanding of the timing context in a module, how timing
information may be extracted from the module, how this information may be used within the
Ambit® BuildGates® synthesis environment, and phase shifts for single and multiple clocks.
This chapter assumes that you are familiar with the logic optimization process.
Time-driven logic optimization requires a timing context from which the delay calculation of
all timing paths is derived. The synthesis results obtained are directly related to the accuracy
of the timing context used to guide the synthesis process.
For more information about the list of constraints, see Chapter 4, “Setting Timing Constraints.”
Typical approaches for the synthesis of a design module can be found in Chapter 2,
“Choosing a Methodology.”.
The capability to do automatic derivation and extraction of the “actual” timing context for a
lower-level module instance is a must for achieving timing convergence with large design
databases. You may already be familiar with the problem of trying to derive and properly use
a module’s timing context. Ambit BuildGates synthesis offers several advantages in this area
above and beyond the baseline capability offered by other synthesis tools. The Ambit
BuildGates synthesis tool has the following advantages for timing extraction:
■ It has a very fast timing engine that allows for quick derivation of a module’s timing
context.
■ It provides the capability of extracting a module’s timing context at any point in the design
hierarchy for an integrated time-budgeting solution.
■ It extracts data correctly across multiple clock domains.
Ambit BuildGates synthesis is designed to support more than one timing context per module.
It allows you to specify which timing context to use for a particular optimization. This is an
extremely powerful architecture which forms the basis of many features. For example, it is this
architecture that lets you read a large design database into memory, execute time-budgeting
on some number of lower-level module instances, and then lets you scope to those module
instances and extract the time-budgeted timing context from them instead of the timing
context as derived from the circuit topology.
The advantage of building the design object once and using dont_modify instead is the
reduction in the compute overhead that results in building hierarchical design trees containing
these objects. The rule of thumb is that making an object unique should only be necessary if
one instance of the design object resides in an environment which is significantly different
from other instances of the same design object. If the objects were not unique, the design
would be built to meet the “worst-case” timing specifications. The resulting area penalty to the
overall design if it is not made unique could be significant, depending upon the number of
instances of the design object in the design.
Ambit BuildGates synthesis has the capability of making instances of a current module
unique. This is done using the do_uniquely_instantiate command. This command lets
you either specify a list of instances to be made unique or you can make all instances of the
current module unique. If hierarchical synthesis from the RTL source is performed, this
command is automatically executed as part of the do_optimize command flow.
Using dont_modify
See the Command Reference for Ambit BuildGates Synthesis and Cadence PKS for
further information on the syntax for do_derive_context, write_assertions, and
do_time_budget.
In the ac_shell environment, two primary variables are used to control the timing context
used for logic optimization and to control the specific module being optimized.
In most cases, the top_timing_module variable is set to point to the root of the design
tree and the current_module variable is used to control the design being optimized. The
following examples show how to set the values of these variables under different compilation
scenarios. In these examples setup_libraries and apply_constraints are user-
specified Tcl procedures and not ac_shell commands.
If a single module is compiled independently of any other modules, then both the
top_timing_module variable and the current_module variable should be set to
point to this module. This is shown in the example below:
setup_libraries
read_verilog foo.v
do_build_generic
set_top_timing_module foo
set_current_module foo
apply_constraints
do_optimize
...
If hierarchical synthesis is being performed, multiple modules will exist in memory. In this
case, you would typically apply timing constraints only to the root of the design tree. Timing
constraints for all other modules are automatically derived during the optimization. The
top_timing_module should point to the root of the design tree before applying the timing
constraints. The value of the current_module should also point to the root of the design
tree as this is the starting point for the optimization. These values do not need to be changed
during the optimization.
setup_libraries
read_verilog bot.v top.v mid.v
do_build_generic
set_top_timing_module top
set_current_module top
apply_constraints
do_optimize
...
Take the case of using a structural database from which the time-budgeted constraint
information for lower-level modules is extracted to rebuild the design in parallel. As in the
example above, top_timing_module and current_module should both point to the
root of the design tree before applying the timing constraints. The values of these variables
remain unchanged when performing time budgeting and when extracting the timing context
on lower-level module instances.The value of the current_module variable changes only
when writing out the timing context for a lower-level module.
setup_libraries
read_verilog top_str.v
do_build_generic
set_top_timing_module top
set_current_module top
apply_constraints
do_derive_context {i_2 i_3/i_1}
set_current_module foo
write_assertions foo.cntxt
set_current_module top
set_current_module foobar
write_assertions foobar.cntxt
...
Here i_2 is a top-level instance of module foo and i_3/i_1 is an instance of module
foobar.
Note: The value of the top_timing_module variable must be set to the root of the design
tree. This variable need only change if you want to recompile a lower-level module in memory
and simultaneously use the time-budgeted timing context for that module in the recompilation.
In this case, the top_timing_module variable switches the timing context used from that
of the circuit topology (top-level timing context) to that of the time-budgeted timing context.
setup_libraries
read_verilog top_str.v
do_build_generic
set_top_timing_module top
set_current_module top
apply_constraints
do_time_budget
set_current_module foobar
set_top_timing_module foobar
do_optimize
...
Assume that modules mid_drv and mid_rcv represent two hierarchical modules of ~50K
gates each. These are also the boundaries for which you want to derive timing context for use
in hierarchical resynthesis of these modules.
Figure 6-1 on page 123 contains two lower-level modules, bot_drv and bot_rcv.
top_drv_rcv is the top-level interconnect between the modules. It is connected to ports
drv_out of instance m0 and rcv_in of instance m1. The buf8x macrocell in module
bot_drv, instance u1, is the source driver on the top-level net, top_drv_rcv. This cell
drives a total fanout of five, four of which are in module bot_rcv and one of which is
contained in the same module as the source driver.
core (c0)
Now suppose you derive timing context for instances m0 and m1 and writes out the assertions
for each as detailed in the previous section. The assertions file for instance m0 would have
the following statements included for port drv_out:
set_data_required_time -clock “my_ideal_clock” -lead
-late -rise 6.82 {drv_out}
set_port_capacitance -0.1795 {drv_out}
set_port_wire_load -library my_library W12X12 {drv_out}
set_num_external_sources 0 {drv_out}
set_num_external_sinks 4 {drv_out}
set_fanout_load 4.00 {drv_out}
The assertions file for the instance m1, has the following statements included for port
rcv_in:
set_input_delay -clock “my_ideal_clock” -lead -late -rise 4.42 {rcv_in}
set_port_capacitance -0.1825 {rcv_in}
set_port_wire_load -library my_library W12X12 {rcv_in}
set_drive_cell -late -cell_rise BUF8X -library_rise my_library -from_pin_rise A \
-pin_rise Z -rise_source_edge rise {rcv_in}
set_drive_cell -late -cell_fall BUF8X -library_fall my_library -from_pin_fall A \
-pin_fall Z -fall_source_edge fall {rcv_in}
set_num_external_sources 1 {rcv_in}
set_num_external_sinks 1 {rcv_in}
set_fanout_load 1.00 {rcv_in}
set_capacitance_limit 0.344 {rcv_in}
Where did the values come from in the example above? The delay values on the port are
extracted from the timing analysis of all paths which propagate through the port. Other
external constraints are also included, such as the driving cell on the input port and the
constraints used for design rule checks. The capacitive values are set such that the use of
these constraints in stand-alone synthesis of the corresponding block, along with equivalent
internal fanout and pin loading on the port, results in exactly the value of capacitance that was
backannotated on the port.
The following is a review of how the capacitance value was calculated for port drv_out
above:
■ BAn = capacitance value backannotated onto the net attached to the port = 0.1234 units
The equation for the modified value of the external port capacitance is:
The value for the modified port capacitance on port rcv_in of instance m1 is calculated in a
similar fashion. The only change being the value of the external pin capacitance, which
becomes 0.029 due to the INV16X macrocell.
7
Generating and Understanding Timing
Reports
The check_timing command generates messages about the potential problems in the
design. The messages are categorized as follows with the most serious problem first:
■ ERROR
Timing analysis cannot be run for the reason stated in the message.
■ WARNING
Analysis results may be erroneous due to the stated condition. You should be aware of
the consequences if you choose to ignore a warning.
■ INFO
Informative messages about your design. You should look through these messages to
see that the libraries are as expected.
Before you run the analysis you can check your design after loading the libraries and setting
constraints.
➤ To identify the timing problems in the design, use the check_timing command before
generating a timing report. The example below shows the command and the results for
a design that is missing some assertions.
ac_shell>check_timing
--> WARNING: No drive assertion found at port ’I’ <TA-107>.
--> WARNING: No arrival time assertion found for signal ICLK lead early fall at
port ’I’ <TA-105>.
--> WARNING: No arrival time assertion found for signal ICLK lead late fall at
port ’I’ <TA-105>.
--> WARNING: No drive assertion found at port ’I1’ <TA-107>.
--> WARNING: No arrival time assertion found for signal ICLK lead early fall at
port ’I1’ <TA-105>.
--> WARNING: No arrival time assertion found for signal ICLK lead late fall at
port ’I1’ <TA-105>.
--> WARNING: No drive assertion found at port ’CLK’ <TA-107>.
By default, only the late inconsistencies are reported. The results can be redirected to a file.
For information about the most common messages and the command options, see
check_timing in the Command Reference for Ambit BuildGates Synthesis and
Cadence PKS .
For more information, see report_library in the Command Reference for Ambit
BuildGates Synthesis and Cadence PKS .
ac_shell>report_timing
Path 1: VIOLATED Required Assertion
Endpoint: O (v)
Beginpoint: reg4/Q (v) triggered by leading edge of ’ICLK’
Required Time 0.00
- Arrival Time 0.70
= Slack Time -0.70
+-------------------------------------------------------------+
| Instance | Arc | Cell | Delay | Arrival | Required |
| | | | | Time | Time |
|----------+-------------+-------+-------+---------+----------|
| | CLK ^ | | | 0.00 | -0.70 |
| reg4 | CP ^ -> Q v | FD1 | 0.70 | 0.70 | 0.00 |
| | O v | | 0.00 | 0.70 | 0.00 |
+-------------------------------------------------------------+
By default, only late paths (setup checks) are reported. There are many options to control
what gets reported and the format of the report. There are now options for false path
reporting. For information about the command options and many more examples, see
report_timing in the Command Reference for Ambit BuildGates Synthesis and
Cadence PKS .
+--------------------------------+
| Report | report_clocks |
|---------+----------------------|
| Options | |
+---------+----------------------+
| Date | 20010216.143118 |
| Tool | ac_shell |
| Release | v4.1-eng |
| Version | Feb 14 2001 11:13:58 |
+--------------------------------+
+--------------------------------+
| Clock Descriptions |
|--------------------------------|
| Clock | Period | Lead | Trail |
| Name | | | |
|-------+--------+-------+-------|
| A | 10.00 | 0.00 | 5.00 |
| B | 10.00 | 2.00 | 8.00 |
+--------------------------------+
+-----------------------------------------------+
| Total Clock To Clock Relationship (Late) |
|-----------------------------------------------|
| From | To | L->L | L->T | T->L | T->T |
|-------+-------+-------+-------+-------+-------|
| A | A | 9.76 | -0.48 | 9.28 | 9.04 |
| A | B | -1.20 | -1.44 | 8.32 | -1.92 |
| B | A | 7.84 | -2.40 | 7.36 | 7.12 |
| B | B | 6.88 | -3.36 | 6.40 | 6.16 |
+-----------------------------------------------+
+-----------------------------------------------+
| Total Clock To Clock Relationship (Early) |
|-----------------------------------------------|
| From | To | L->L | L->T | T->L | T->T |
|-------+-------+-------+-------+-------+-------|
| A | A | 0.24 | -9.52 | 0.72 | 0.96 |
| A | B | -8.80 | -8.56 | 1.68 | -8.08 |
| B | A | 2.16 | -7.60 | 2.64 | 2.88 |
| B | B | 3.12 | -6.64 | 3.60 | 3.84 |
+-----------------------------------------------+
By default, all ideal clocks are reported. There are many options to control what assertions
are reported, including insertion delays and clock to data changes. For information about the
command options, see report_clocks in the Command Reference for Ambit
BuildGates Synthesis and Cadence PKS .
+------------------------------------------------------------------------------+
| | | | | Early | Late |
|-------+-------+------------------+-----------+---------------+---------------|
| Pin | Dir | Assertion | Clock | Rise | Fall | Rise | Fall |
| Name | | | Name | | | | |
|-------+-------+------------------+-----------+-------+-------+-------+-------|
| clk | IN | clock_root | CLK(C)(P) | | | | |
| clk | IN | source_insertion | *(D)(P) | 2.50 | 2.50 | 2.50 | 2.50 |
| in | IN | input | CLK(D)(P) | 3.00 | 3.00 | 3.00 | 3.00 |
+------------------------------------------------------------------------------+
+---------------------------------------------------------------+
| Pin | Dir | Assertion | Value |
| Name | | | |
|-------+-------+-------------+---------------------------------|
| clk | IN | insertion | ( 1.50 3.50 : - - : 2.50 4.50 ) |
| clk | IN | uncertainty | 1.00(T) 1.10 - 1.20(T) |
+---------------------------------------------------------------+
The insertion and uncertainty are reported as one value in the following format:
insertion : RISEmin FALLmin : RISEtyp FALLtyp : RISEmax FALLmax
uncertainty : EARLYrise EARLYfall LATErise LATEfall
The -to uncertainty is denoted by (T) next to the number. If a value is not specified, it is
denoted by a dash (-).
By default, all assertions present on all ports are reported. You can use the -type option to
limit the report to certain assertions. You can use the -pin option to report the assertions on
specific ports or pins.
➤ To report the assertions on pins, use the report_port command with the -pin option
as shown in the example below:
report_port -pins {U1/en U2/en}
For information about the types of assertions reported and the command options, see
report_port in the Command Reference for Ambit BuildGates Synthesis and
Cadence PKS .
By default, the report_net command now provides additional information about the
interconnect delay model. You can get the older 3.0 format by using the -old option. Other
options let you find nets that have not been backannotated or that exceed a specified number
of fanouts. See report_net in the Command Reference for Ambit BuildGates
Synthesis and Cadence PKS for a complete command description.
For each of the sinks for the source, the following is reported.
■ pin name
■ direction
■ cell
■ cap
■ delay and slew per phase
■ Reduced Net Parameters
These are the parameters used in the reduced net model. This currently is the Elmore
time constant for the source->sink. (Refer to the Reduced Net Model in the source. The
reduced net model is the same for all sinks on a source, but the reduced net parameters
will be different.)
Each path exception is listed per line, and each line corresponds to an assertion that you have
made. Any wildcards are expanded, and all pins are listed. Clocks are enclosed in quotes.
Each column labeled From | Through | To corresponds to the -from, -through, -to
used to assert the exception.
The final two columns are for Early | Late analysis mode. These columns contain the
following information:
■ <blank>
There is no assertion for this analysis mode.
■ delay n
The assertion set_path_delay_constraint n was made for this mode.
■ add n
The assertion set_cycle_addition n was made for this mode.
■ false
The assertion set_false_path was made for this mode.
■ ignored
This means that the assertion is ignored because another path exception has priority. For
assertions that have multiple pins, this means that all combinations have been ignored.
The priorities are listed in Table 9-1 on page 188.
Understanding Reports
Ideal clocks are positive when the rising edge occurs before the falling edge (the rising edge
is generated by the leading edge). Ideal clocks are negative when the falling edge occurs
before the rising edge (the rising edge is generated by the trailing edge).
For single clocks, the phase shift is listed in Table 7-1 on page 137.
Table 7-1 Phase Shift for Single Clocks
0 2 4 6 8 10 12
Leading 1
CLK1 L T L
CLK2 Leading 2
L T L
phase shift
Leading 1
CLK1 L T L
CLK2 Trailing 2
L T L
phase shift
Trailing 1
CLK1
L T L
Leading 2
CLK2
L
phase shift
Trailing 1
CLK1 L T L
Trailing 2
CLK2
L T L
phase shift
■ A path starting with a leading edge of CLK1 and ending with a leading edge of CLK2 has
a phase shift of 2.00.
■ A path starting with a leading edge of CLK1 and ending with a trailing edge of CLK2 has
a phase shift of -2.00. When determining the direction of phase shift, it is helpful to think
of a virtual 0 at the launching edge.
■ A path starting with a trailing edge of CLK1 and ending with a leading edge of CLK2 has
a phase shift of 4.00.
■ A path starting with a trailing edge of CLK1 and ending with a trailing edge of CLK2 has
a phase shift of 0.00.
8
Identifying and Eliminating False Paths
Cadence® timing analysis uses a fast search algorithm to identify critical paths in the netlist.
STA only considers delays on the gates and does not consider functionality. Therefore, the
delay of the longest critical path is a pessimistic delay since the path could be a false path,
meaning the path might never be excited by any input vector.
Critical false path verification (CFPV) analysis, however, does consider the functionality of the
library gates on a path and combines the functionality and timing delays to determine whether
a path is a true path or a false path. A critical path obtained using the false path analysis is a
better representative of the delay of the netlist since the false paths are filtered during a false
path analysis and only the delays of the true paths are considered.
False path analysis uses a sensitization criterion to determine whether a path is true or false.
The false path identification feature available in Cadence timing analysis provides an option
to use one of the two sensitization criteria, static or robust.
This chapter describes the different false path identification features available.
Side Inputs
For a gate on the path under consideration, the side inputs are those inputs to the gate which
do not fall on the path.
Although the exact sensitization criterion is not supported, it is described first to provide a
comparison point for understanding the static and robust criteria. The exact sensitization
criterion is defined as follows.
A path is said to be exactly sensitizable if there exists at least one primary input vector such
that the following condition is satisfied at each gate along the path:
■ if the on-path input is a controlling value, the side inputs either settle to non-controlling
values at any time or to controlling values not earlier than the on-path input
■ if the on-path input is a non-controlling value, the side inputs settle to non-controlling
values no later than the on-path input.
The exact criterion is derived from conditions which occur during timing simulation and is
shown to be the most accurate criterion. It estimates the longest delay exactly and correctly
identifies a path to be sensitizable (or non-sensitizable). All other sensitization criteria are
compared to the exact criterion. The comparison is made as follows:
■ Whether a given sensitization criterion identifies the longest delay the same as that by
exact criterion, or overestimates the delay, or underestimates the delay.
The exact criterion combines functionality and timing to obtain the most accurate and exact
results.
Static Paths
A path is said to be a static true path if and only if the side inputs of every gate on the path
have stable non-controlling values. A path which does not satisfy this condition is a static false
path. This condition is also referred to as the static sensitization criterion.
Consider a simple 3-input AND gate as shown in Figure 8-1 on page 143. Now take the path
from input a to output z. In order for this path to be true, under the static sensitization criterion,
the side inputs b and c must have non-controlling values. So, in order for the path from a to
z to be true, the values of the side inputs b and c must be 1.
a
b z
c
Robust Paths
A path is said to be a robust true path if and only if either of these conditions is true:
■ The on-path input has a non-controlling value and all the side inputs have stable
non-controlling values.
■ The on-path input has a controlling value.
A path which does not satisfy any of the above mentioned conditions is a robust false path.
This condition is also known as the robust sensitization criteria.
Note: In the discussions that follow
↑ denotes a rising transition
↓ denotes a falling transition
Consider once again the three-input AND gate as given in Figure 8-1 on page 143. For the
path a↑ → z↑ to be true under the robust sensitization criteria, the side inputs b and c must
have a value 1. This is because the on-path input a has a value1.
Consider another path - a↓ → z↓. Since the on-path input a is 0, which is the controlling value
for the AND gate, there is no requirement on the side inputs b and c. Hence, this path is true
under the robust sensitization criteria.
a e
g1 g
g4
f
d
g2
g3
c
Problem Statement: Given the circuit shown above for Problem 1., check if the path a↓ →
d↓→ f↓→ g↓ is true.
Solution: For the path, a↓ → d↓ → f↓ → g↓, to be true under the static sensitization criteria,
the following conditions need to be satisfied:
1. For the arc a↓ → d↓, b must be 1
2. For the arc d↓ → f↓, c must be 0
3. For the arc f↓ → g↓, e must be 1
For the third condition to be satisfied, both a and b need to be 0. Now, if both a and b are 0
then the first condition does not get satisfied. Since there is a contradiction in conditions 1
and 3, this is a false path under the static sensitization criteria.
For the path, a↓ → d↓ → f↓ → g↓, to be true under the robust sensitization criteria, the
following conditions need to be satisfied:
1. For the arc a↓ → d↓, the value of on-path input a is a controlling value, that is 0 for the
AND gate g2, so that it does not impose any requirement on the side inputs of g2.
2. For arc d↓ → f↓, the on-path input d is a non-controlling value, that is 1 for the OR gate
g3. This requires c to be a non-controlling value, that is, c must be 0.
3. For arc f↓ → g↓, the value of the on-path input f is a controlling value, that is 0 for the
AND gate g4, so it does not impose any requirement on the side inputs of g4.
So the only requirement necessary for this path to be true under the robust sensitization
criterion is that c must be 0. This condition can be satisfied since c is a primary input. Thus,
the path is a robust true path under the robust sensitization criteria.
c
g x
d
y
f
e h
b i
Problem Statement: Given the design in Figure 8-3 on page 145, check if the following
paths are true:
Path 2: b↑ → i↑→ h↑ → y↑
Solution 1. For the path c↑ → e↓→ f↓→ h↓ → y↓ to be true under the static sensitization
criterion, the following conditions need to be satisfied:
■ For the arc c↑ → e↓ to be true there is no requirement since this transition will always
propagate through the NOT gate.
■ For the arc e↓→ f↓ to be true, d must be 0; which in turn means b must be 1.
■ For the arc f↓→ h↓, i must be 0, which in turn means that both a and b must be 0. But
the requirement above says that b must be 1. Since there is a contradiction in the two
requirements, the path c↑ → e↓→ f↓→ h↓ → y↓ is a false path under the static
sensitization criterion.
For the path c↑ → e↓→ f↓→ h↓ → y↓ to be true under the robust sensitization criterion, the
following conditions need to be satisfied:
■ For the arc c↑ → e↓, there is no requirement since this transition will always propagate.
■ For the arch e↓→ f↓, since e↓ is a non-controlling value, the side input d should also
be a non-controlling value, that is d must be 0, which in turn means b must be 1.
■ For the arch f↓→ h↓, since f↓ is a non-controlling value, the side input i must be 0,
which in turn means that both a and b must be 0. Since this requirement conflicts with
the previous requirement, this path is a false path according to the robust sensitization
criterion, too.
Solution 2. For the path b↑ → i↑→ h↑ → y↑ to be true under the static sensitization
criterion, the following conditions need to be satisfied:
■ For the arc b↑ → i↑, a needs to be 0.
■ For the arc i↑→ h↑, f needs to be 0. This in turn requires both d and e to be 0. For both
d and b to be 0, b and c should be set to 1.
■ For the arc h↑ → y↑, x needs to be 1, which in turn requires g to be 0.
Since all the above conditions can be satisfied, this path is true under the static sensitization
criterion. And if a path is true under the static sensitization criterion, it is also true under the
robust sensitization criterion.
Solution 3. For the path b↓→ d↑ → f↑ → h↑ → y↑ to be true under the static sensitization
criterion, the following conditions need to be satisfied:
■ For the arc b↓→ d↑, there is no requirement as a transition can always propagate
through a NOT gate.
■ For the arc d↑ → f↑, e needs to be 0. This in turn requires c to be 1.
■ For the arc f↑ → h↑, i needs to be 0. This in turn requires both a and b to be 0.
■ For the arc h↑ → y↑, x needs to be 1. This in turn requires g to be 0. Since the earlier
conditions require both d and c to be 1, g cannot be set to 0. Hence this condition cannot
be satisfied.
Because the last condition was not met, this path is false under the static sensitization
criterion.
Now apply the robust sensitization criterion to this path. For the path b↓→ d↑ → f↑ → h↑ →
y↑ to be true under the robust sensitization criterion, the following conditions need to be
satisfied:
■ For the arc b↓→ d↑, there is no requirement since a transition can always propagate
through a NOT gate.
■ For the arc d↑ → f↑, since the on-path input d of the OR gate has a controlling value,
there is no requirement on the side input of the OR gate.
■ For the arc f↑ → h↑, since the on-path input f of the OR gate has a controlling value
there is no requirement on the side input of the OR gate.
■ For the arc h↑ → y↑, since the on-path input h of the AND gate has a non-controlling
value, the side input x needs to be 1. This in turn requires g to be 0 and g can be set to
0 by setting c to 0.
Thus all requirements for this path are satisfied and this path is a true path according to the
robust sensitization criterion.
Now that you understand the difference between static and robust criteria, here is how they
compare to the exact criterion.
The delays are not considered in static sensitization criterion. The static sensitization criterion
compares with exact criterion as follows:
The robust sensitization criterion compares as follows with the exact criterion:
■ Robust sensitization criterion overestimates the longest delay.
Thus, both static and robust sensitization criteria when used in combination, provide a fast
means of doing static timing analysis on a circuit. The static and robust criterion can be
combined to get a realistic lower and upper bound, respectively, for a netlist. If the two
bounds, the lower bound and the upper bound, are same, then the exact delay is same as the
bound obtained.
The concepts explained so far are elaborated through the following example. Consider the
netlist for the circuit shown in Figure 8-5 on page 149. The numbers inside the gates indicate
the delays.
a f h
1
1
b d g
1
1 z
1
c e
2
i
1
Simple topological analysis, as done by Cadence timing analysis, determines the delay of the
netlist as 5, which is the longest topological path c -> e -> g -> h -> z.
Static false path analysis on this circuit determines that both c ^->z v and c v ->z ^paths of
delay 5 are false paths. It determines the path of delay 4 as the critical path. Thus the lower
bound on the delay is 4.
Subsequent robust false path analysis on this circuit also determines the path of delay 4 as
the critical path, finding paths of delay 5 as false paths. Thus the upper bound on the delay is
4. Since the lower bound determined by static analysis and upper bound determined by
robust analysis are same, the exact delay of the circuit is 4.
Paths of length 5 are false, and path of length 4 is true. according to the exact criterion also.
Thus delay independent analysis can help in getting the exact delay of 4, which is better than
the delay of 5 as determined by topological analysis.
■ Determine more accurate (than topological) upper bound using robust sensitization.
■ Provide fast means of doing false path analysis.
■ Identify exact delay by comparing lower and upper bounds.
■ Generate constraints for iterative runs and for downstream tools.
Timing Reports
with
false paths identified Status of paths
in
sequential operation
The delay of the critical path is a lower bound on the delay of the circuit.
2. Find the critical path using robust sensitization criterion. For example:
report_timing -false_path_analysis robust -justify -tclfile f.tcl -gcffile f.gcf
The delay of the critical path is an upper bound on the delay of the circuit.
3. The actual delay of the circuit lies between the two bounds obtained in steps 1. and 2.
above. If the lower and upper bound are same, then the exact delay of the circuit is also
obtained.
4. Use the vectors generated by the -justify option for manufacturing test pattern
generation or for verification of true paths using simulation.
5. Use the Tcl file generated in the process to ignore the identified false paths in all future
analysis/optimization runs.
6. Use the GCF file generated to specify false paths to downstream tools in backend of the
design implementation.
-justify
Using the -justify option generates a vector which sensitizes
a true path. These vectors are useful in verifying the true paths
using simulation. These vectors can also be used to generate
manufacturing test patterns for path delay fault detection.
Note: This option can only be used with the -false_path_analysis option.
-true
The -true option displays all true paths identified. The false
paths identified are not printed. The sensitization criterion must
be specified using the -false_path_analysis option.
Note: This option can only be used with the -false_path_analysis option.
-tclfile tclfilename
Generates a Tcl file, tclfilename , containing Tcl
set_false_path commands corresponding to the false paths
identified. An error message is issued if tclfilename is not
specified.
The Tcl file can also be sourced before performing finer timing
optimizations so that the false paths are not optimized.
-gcffile gcffilename
Generates a General Constraint Format (GCF) file,
gcffilename , containing GCF DISABLE constraints which
correspond to the false paths identified. An error message is
issued if gcffilename is not specified.
Various errors that can result from the misuse of the false path analysis options are given in
Appendix C, “Understanding Errors and Warnings.”
a e
I2 g
I4
f
d
I1
I3
c
input a;
input b;
input c;
output g;
endmodule
Continued...
Contents of false.tcl
set_false_path \
-from_fall i1/B \
-through_fall i1/Z \
-through_fall i3/A \
-through_fall i3/Z \
-through_fall i4/B \
-to_fall i4/Z \
-late
Contents of false.gcf
(GCF
(HEADER
(VERSION "GCF Version 1.3" )
(DESIGN "vlsi" )
(DATE "Thursday, July 20, 2000 - 18:04:04" )
(PROGRAM BuildGates "v4.0-eng" "Cadence Design Systems, Inc." )
(DELIMITERS "/[]" )
)
(CELL vlsi
(SUBSET TIMING
(EXCEPTIONS
(LEVEL 1
(DISABLE
(THRU_ALL
(
negedge
i1/B
)
(
negedge
i1/Z
)
(
negedge
i3/A
)
(
negedge
i3/Z
)
(
negedge
i4/B
)
(
negedge
i4/Z
)
)
setup
)
)
)
)
)
)
Continued...
Continued...
Continued...
Contents of tclfile_rep.tim
set_false_path \
-from_fall i1/B \
-through_fall i1/Z \
-through_fall i3/A \
-through_fall i3/Z \
-through_fall i4/B \
-to_fall i4/Z \
-late
set_false_path \
-from_rise i1/B \
-through_rise i1/Z \
-through_rise i3/A \
-through_rise i3/Z \
-through_rise i4/B \
-to_rise i4/Z \
-late
set_false_path \
-from_fall i1/A \
-through_fall i1/Z \
-through_fall i3/A \
-through_fall i3/Z \
-through_fall i4/B \
-to_fall i4/Z \
-late
set_false_path \
-from_rise i1/A \
-through_rise i1/Z \
-through_rise i3/A \
-through_rise i3/Z \
-through_rise i4/B \
-to_rise i4/Z \
-late
Continued...
Continued...
Continued...
Contents of gcffile_rep.tim
(GCF
(HEADER
(VERSION "GCF Version 1.3" )
(DESIGN "vlsi" )
(DATE "Friday, July 21, 2000 - 14:46:31" )
(PROGRAM BuildGates "v4.0-eng" "Cadence Design Systems, Inc." )
(DELIMITERS "/[]" )
)
(CELL vlsi
(SUBSET TIMING
(EXCEPTIONS
(LEVEL 1
(DISABLE
(THRU_ALL
(
negedge
i1/B
)
(
negedge
i1/Z
)
(
negedge
i3/A
)
(
negedge
i3/Z
)
(
negedge
i4/B
)
(
negedge
i4/Z
)
)
setup
)
(DISABLE
(THRU_ALL
(
posedge
i1/B
)
(
posedge
i1/Z
)
(
posedge
i3/A
)
(
posedge
i3/Z
)
(
posedge
i4/B
)
(
posedge
i4/Z
)
)
setup
)
(DISABLE
(THRU_ALL
(
negedge
i1/A
)
(
negedge
i1/Z
)
(
negedge
i3/A
)
(
negedge
i3/Z
)
(
negedge
i4/B
)
(
negedge
i4/Z
)
)
setup
)
(DISABLE
(THRU_ALL
(
posedge
i1/A
)
(
posedge
i1/Z
)
(
posedge
i3/A
)
(
posedge
i3/Z
)
(
posedge
i4/B
)
(
posedge
i4/Z
)
)
setup
)
Continued...
Continued...
Continued...
Continued...
Continued...
Continued...
Continued...
Continued...
9
Finding and Fixing Violations
This chapter contains information to help you complete timing analysis with no violations. The
following topics are covered:
■ Finding Violations on page 186
■ Setting Path Exceptions on page 186
Finding Violations
Violations are contained in the output report from report_timing. However many of these
reported violations may not be actual violations. Often the first task in debugging your design
is to eliminate false violations from the report. Once you have found the true violations, you
can fix them.
Many reported violations can be eliminated by the correct use of path exceptions. The path
exceptions are:
■ False path
A false path is one that will never be used. The violation will never actually occur.
■ Path delay constraint
■ Cycle addition
Some path violations are reported because proper analysis requires more than one clock
cycle. By default, STA uses one clock cycle for analysis. You can eliminate this kind of
violation by adding cycles on the path.
If you want to set a false path for debugging purposes, see set_false_path in the
Command Reference for Ambit BuildGates Synthesis and Cadence PKS .
The syntax is like set_false_path with the addition of a delay value. See
set_path_delay_constraint in the Command Reference for Ambit BuildGates
Synthesis and Cadence PKS . Any path that matches the parameters given (from/through/
to, and so on) is constrained by the set_path_delay_constraint command. Only
set_false_path has priority over the set_path_delay_constraint, and
set_path_delay_constraint commands are prioritized with each other the same way
set_cycle_addition is. See Path Exception Priorities table on page 188.
The effect of a sequential path delay constraint is similar to changing the cycle time. Here is
how the slack is calculated:
late slack = (early arrival time of capturing clock) - (setup, uncertainty, external delay, etc.)
+ (the late path delay constraint) - (late arrival time of data at endpoint)
early slack = (early arrival time of data at endpoint) - (late arrival time of capturing clock)
- (hold, uncertainty, external delay, etc.) - (the early path delay constraint)
Note: The clocks, uncertainty, setup/hold, and other constraints are considered. The only
difference you should notice is the “phase shift” change with the path delay constraint.
The effect of a combinational path delay constraint is simply the creation of a signal at the
startpoint with a required time for that signal to arrive at the endpoint that is equal to the path
delay constraint. For example:
set_input_delay 0 [ find -inputs ]
et_external_delay 0 [ find -outputs ]
set_path_delay_constraint -from In1 -to In2 5
In1
In2
This constrains all paths through the block to a maximum of 5 nanoseconds. In other words,
the constraint does not have to be set on all inputs to all outputs.
Adding Cycles
See set_cycle_addition in the Command Reference for Ambit BuildGates
Synthesis and Cadence PKS .
This gives you a report of each path exceptions in a table. See Generating Path Exception
Reports on page 136 for details of the table format.
analysis within the Ambit BuildGates synthesis environment. The constant value commands
are: set_constant_for_timing, reset_constant_for_timing, and
get_constant_for_timing.
Using the constant value commands, applied state value(s) will propagate through the
corresponding logic cone(s) and enable or disable sections of logic.Figure 9-2 provides an
example of a multiplexor with a constant value applied to the “S” (Select) input to limit the
scope of the timing analysis. This action is performed using the
set_constant_for_timing command to set the “S” input to a logic one so that the
analysis times only those paths which flow through the “B” input of the multiplexor (B->X). No
timing paths from A->X are timed.
IN_A A
X FF1
IN_B B
S
SEL
CLK B4
User-asserted constants are propagated through the combinational portion of the circuit.
Constants are not propagated through the sequential elements. For example, a constant set
on the D input of a flip-flop will not be propagated to the Q output. Both rising and falling
transitions will be calculated at Q, as directed by the CLK->Q arc. If the output of the flip-flop
is expected to be constant, it will have to be explicitly asserted using the
set_constant_for_timing command.
The three commands for setting constants during timing analysis are defined in the
paragraphs below.
Note: Constant values are saved to the .adb file when using the command write_adb
(refer to the Command Reference for Ambit BuildGates Synthesis and Cadence PKS .)
set_constant_for_timing {0|1} list_of_pins
The get_constant_for_timing command queries the design database for the constant
that has been set on a pin or propagated through the logic cone to that pin. This command
does not work for hierarchical pins.
The following script shows constants being used in the context of timing analysis.
Read timing libraries
set TargetTech [read_alf stdcell_wccom.alf]
set_global target_technology $TargetTech
set_operating_condition WORST_CASE
# load design
read_verilog chip.v
do_build_generic
set_top_timing_module chip
set_current_module chip
# Set up timing constraints on the design
source TimingConstraints.tcl
report_timing
set_constant_for_timing 1 i4/A
report_timing
10
Using Advanced Analysis Techniques
With the advent of hierarchical synthesis and the ability to synthesize increasing amounts of
logic, the scope of the logic optimization may be expanded to include the RAM element within
the hierarchical block being synthesized. That is not to say that the RAM element should be
dissolved into the surrounding control logic. The approach here is to leave the RAM
instantiated at the same level as the instantiation of all logic blocks that interface to it.
Hierarchical synthesis with the RAM (included as one of the logic blocks) clearly provides
better ease-of-use as the designer does not have to spend the effort in manually developing
external budgets for all logic blocks that interface to the RAM.
An alternate approach is to leave the RAM instance(s) at the top-level and derive the timing
context for all modules that interface to them. For more details, refer to Chapter 6, “Deriving
the Timing Context for a Module.” When deriving the timing context for all logic blocks, timing
analysis times all paths through a RAM object. Cadence timing analysis supports the
extraction of time-budgeted information around the RAM objects. This timing context
information can then be used, along with hierarchical synthesis, on all design objects that
interface to the RAM.
The choice as to whether or not to perform hierarchical synthesis with the included RAM is
often a function of such technology issues as:
■ Does the vendor require that the RAM model be instantiated at the top-most level of the
hierarchy?
■ Is the floor planning information accurately reflected in the wireload estimates for the
nets that interface to the RAM?
■ Would the area of RAM element corrupt the auto-wireload selection such that unrealistic
wireload estimates would be obtained for top-level nets?
Cadence timing analysis automatically considers all timing arcs through the RAM element
when performing timing analysis. For an asynchronous RAM, the timing arc from the write
enable input MUST include the timing_type keyword, particularly if a clock is propagated
to or specified directly on the write enable input. Timing analysis does not automatically
deduce the sense of the write enable based upon analysis of timing arcs associated with it.
Example 8-1 shows a sample portion of an asynchronous RAM model. There is no library
header information. Instead a cell definition exists by itself, thus this model is a stand-alone
cell definition that can be used with the read_library_update command.
Output pin DOA contains timing arcs from input pins AADR3, AADR2, AADR1, AADR0, OEA,
WEC, and DIC. All of these timing arcs are considered when performing timing analysis. Input
pin WEC is the write enable input. Note that the timing arc from the WEC pin to the DOA
output contains a timing_type: rising_edge; statement. This statement is necessary
for timing analysis to understand the clocked nature of this input pin and to block the
propagation of the clock through the RAM element. Note that the definition of the WEC pin
itself includes only direction and capacitance keywords. Input pin DIC is a data input pin with
a setup and hold constraint relative to the falling edge of the WEC input.
Before attempting to do timing analysis on circuits with RAM models, you should take the time
to review the RAM model in detail to understand if it conforms to the suggested format listed
below.
lu_table_template(my_output) {
variable_1 : total_output_net_capacitance;
index_1 (“0.08000, 0.09000, 0.110000, 0.180000, 0.293800, 0.56780, 1.0000”);
}
lu_table_template(my_output_b) {
variable_1: total_output_net_capacitance;
index_1 (“0.0700, 0.09500, 0.125000, 0.175400, 0.313100,
0.6060, 1.123400”);
}
cell ( MYRAM ) {
area: 1234.5678;
dont_use : true ;
dont_touch : true ;
pin ( DOA ) {
direction : output ;
capacitance : 0.08 ;
three_state : “OEA’” ;
timing ( ) {
related_pin : “AADR3 AADR2 AADR1 AADR0” ;
rise_propagation (scalar) { values (“2.000”); }
fall_propagation (scalar) { values (“2.000”); }
rise_transition (my_output) { values (“0.029000
0.032000 0.036000 0.037000 0.052000 0.081000
0.230000”);
fall_transition (my_output) { values (“0.024000 0.025000
0.027000 0.033000 0.043000 0.055000 0.080000”); }
}
timing ( ) {
related_pin : “OEA” ;
rise_propagation (scalar) { values (“0.777000”); }
fall_propagation (scalar) { values (“0.777000”); }
rise_transition (my_output) { values (“0.026000
0.033300 0.039000 0.0396700 0.055000 0.088000
0.280000”); }
fall_transition (my_output) { values (“0.022000
0.025700 0.026600 0.033000 0.043000 0.058000
0.123000”); }
}
timing ( ) {
related_pin : “WEC” ;
timing_type : rising_edge;
rise_propagation (scalar) { values (“1.993000”); }
fall_propagation (scalar) { values (“1.993000”); }
rise_transition (my_output) { values (“0.019900
0.022200 0.026600 0.027700 0.042200 0.081100
0.143000”); }
fall_transition (my_output) { values (“0.014400
0.015500 0.017700 0.023300 0.033300 0.055500
0.087000”); }
}
timing ( ) {
related_pin : “DIC” ;
timing_sense : “positive_unate” ;
rise_propagation (scalar) { values (“0.994000”); }
fall_propagation (scalar) { values (“0.994000”); }
rise_transition (my_output) { values (“0.029900
0.032200 0.036600 0.037700 0.052200 0.091100
0.243000”); }
fall_transition (my_output) { values (“0.024400
0.025500 0.027700 0.033300 0.043300 0.065500
0.097000”); }
}
}
pin ( DOB ) {
direction : output ;
capacitance : 0.99 ;
three_state : “OEB’” ;
}
pin ( WEC ) {
direction : input ;
capacitance : 0.99 ;
}
pin ( OEA ) {
direction : input ;
capacitance : 0.99 ;
}
pin ( OEB ) {
direction : input ;
capacitance : 0.99 ;
}
pin ( DIC ) {
direction : input ;
capacitance : 0.99 ;
timing ( ) {
related_pin : “WEC” ;
timing_type : “setup_falling” ;
rise_constraint (scalar) { values (“0.76000”); }
fall_constraint (scalar) { values (“0.76000”); }
}
timing ( ) {
related_pin : “WEC” ;
timing_type : “hold_falling” ;
rise_constraint (scalar) { values (“0.65000”); }
fall_constraint (scalar) { values (“0.65000”); }
}
}
pin ( AADR3 ) {
direction : input ;pacitance : 0.99 ;
}
pin ( OEA ) {
direction : input ;
capacitance : 0.99 ;
}
pin ( OEB ) {
direction : input ;
capacitance : 0.99 ;
}
pin ( DIC ) {
direction : input ;
capacitance : 0.99 ;
timing ( ) {
related_pin : “WEC” ;
timing_type : “setup_falling” ;
rise_constraint (scalar) { values (“0.76000”); }
fall_constraint (scalar) { values (“0.76000”); }
}
timing ( ) {
related_pin : “WEC” ;
timing_type : “hold_falling” ;
rise_constraint (scalar) { values (“0.65000”); }
fall_constraint (scalar) { values (“0.65000”); }
}
capacitance : 0.89 ;
}
pin ( AADR2 ) {
direction : input ;
capacitance : 0.89 ;
}
pin ( AADR1 ) {
direction : input ;
capacitance : 0.89 ;
}
pin ( AADR0 ) {
direction : input ;
capacitance : 0.89 ;
}
Designs containing latches are more complex than edge-triggered flip-flop designs, because
latches are transparent for a finite time during which the D input may stabilize and the logic
following the Q output could begin evaluation.Time borrowing is based on this assumption.
In a physical circuit, optimal time borrowing automatically occurs. The logic following the Q
output is always updated with the latest value passing from D through the latch, so that when
D is stable, the computation for logic following the Q output begins immediately. Time
borrowing is an attempt to model this behavior in timing analysis, however it is always
conservative in comparison to the real circuit.
Time is always borrowed from one stage to its previous stage. No time borrowing for a latch
means that the logic feeding the D input must be stable before the latch opens. Max time
borrowing means that the logic feeding the D input has time to become stable until the latch
closes (see Figure 10-1 on page 200).
CLK CLK
Not all timing analysis engines use the same time borrowing algorithm. There are some
differences with Synopsys where they borrow slack to the previous stage from a later stage
and slack is not equalized.
In the Ambit BuildGates synthesis methodology the amount of time borrowing at a latch is
represented by the quantity X. The value of X is adjusted independently for each latch to
equalize the slack on both sides of the latch. This happens periodically throughout the
do_optimize loop and converges to a stable set of values.
Note: By default, time borrowing is performed automatically when performing a timing
analysis of a design. Time borrowing happens even if the current stage has positive slack.
This is demonstrated in the two examples, Example 1. Balancing Slacks (No External Delay)
on page 203 and Example 2. Balancing Slacks (External Delay) on page 208. You can
disable time borrowing for all or part of the design.
D Q 8ns D Q 1ns D Q
clk
G G
clk
clk_bar
clk
3ns
borrowed clk_bar
0 5 8 10 15
For path LAT1 to LAT2, signal arrives at 8ns while clock arrives at 5ns. However, since LAT2
is still open, this path borrows 3ns from the next path (LAT2 to FF1), and thereby meets setup.
Each timing arc has separate rising, falling, propagation, and transition delays. In Cadence
timing analysis methodology the setup check from the closing edge of the clock (CLK) to the
D input is always performed. This check determines the maximum limit on time-borrowing.
The required time for input D that corresponds to the maximum time-borrowing situation is
denoted by RTsetup(D), which is calculated by equation.
When the amount of time borrowing is less than its maximum value, the required time for
input D, denoted by RT(D), is earlier than RTsetup(D). A loop-check now replaces the flow-
through check from D->Q (the arc is ‘cut’).
The new arrival time (AT) at Q is calculated in the following equation where X is the amount
of time borrowed:
The loop-check determines how late D can be factored in, if the arrival time at Q is allowed to
slip by some amount X, without causing the D->Q flow-through delay to be worse than that
arrival time at Q. The equation for loop check delay is:
The new required time (RT) at D becomes: RT(D) = CLK(opening) + loop check delay or
Hence the larger the value of X, the greater the required time at D, and the greater the arrival
time at Q. The maximum value of X is the value that gives the same RT as the RTsetup.
The equation for maximum time borrowing (Max X) takes the width of the active clock pulse
and subtracts the CLK->D setup and the CLK->Q value, and then adds the D->Q value.
Note: Remember to pick the least or greatest of the rising or falling delay values, as
appropriate, if you perform these calculations manually.
To conclude, the larger the pulse width, the more time is available for borrowing because
there is more time in the active pulse. The larger the setup time, the less time is available for
borrowing because the D input must be ready earlier.
Note: There are two required times for the D input, the loop check and the setup check. The
loop check is the more restrictive of the two and usually applies unless the maximum amount
has been borrowed from the next stage. In this case the setup check path is displayed on the
endpoint at D. This may occur when the next stage is unconstrained or meets timing while the
current stage has negative slack.
Design Example 1. contains three latches (i0, i1, and i2) in series, with a single gate, a,
between i0 and i1, and two gates b and c between i1 and i2. i0 and i2 are clocked by
the inverse of clk, and i1 is clocked by clk.
There are no constraints on the input and output of the circuit, so latch i0 has no cycle
stealing taking place (takes advantage of having no constraints in the previous cycle), and i2
has maximum cycle stealing taking place (takes the maximum time allowed from the stage
following i2).
Assuming a 10 ns clock, the two stages of the circuit have three half-periods to evaluate, or
15 ns.
D Q D Q D Q q
a b c
G G G
i0 i1 i2
clkbuf
clk
Time Max Time
borrowed borrowed
(X1) (X2)
clk
clkbuf
0 5 10 15 20
The objective is to balance slack on the two sides of the latch i1.
Slack@D= Slack@Q
Known quantities for arrival time(D) and required time(Q) are denoted by at(D) and rt(Q).
Note: The rt(Q) calculation starts from i2 to the left and the at(D) calculation starts from i0 to
the right.
Slack@D= slack@Q
Given the values shown in Figure 10-4 on page 205, we can now calculate slack based on
the value of X and the equations.
clkbuf
G G G
i0 i1 i2
CLK -> Q = 0.1
clk D -> Q = 0.2
IV Delay = 0.11
i2 setup = 0.4
Total time = 15ns
or 20-5
slack (i2/D) = rt(i2/D) - at(i2/D) = 19.6 - (10 + 0.1 + 2.3 + 0.11 + 0.11) = 6.98
The timing report is given in Figure 10-5 on page 207. Here are a few things you should be
aware of when reading the timing report:
■ The report shown gives i1/Q to 12/D as Path 1. Because the slacks on the two paths are
equal, either could be displayed as Path 1, the path with worst slack.
■ The timing report shows the slack as 6.99 instead of 6.98 due to round-off in the report.
■ The amount of time borrowed, X, is not reported directly.
➤ To determine the amount of time borrowed, use the following equation, where X
represents the time borrowed and |Loop Check Delay| is the absolute value of Loop
Check Delay from the timing report:
The negative polarity of the loop check in the report means that time is borrowed from the
next stage and given to the previous stage.
The -trail option indicates that the trailing edge of the ideal clock CLK is responsible for
capturing the signal.
5-10
The slack is balanced across two latches. The simultaneous equations are:
(10 + 0.1 - 0.2 + X1) - 5.21 = (15 + 0.1 + X2 -0.2 - 0.11 - 0.11) - (10 + X1 + 0.1)
The value of X2 is now 1.0, the arrival time at l2/q is 5.0 + 0.1 + 1.0 = 6.10 instead of
6.61. The slack is increased to 5.90 instead of 5.39 (see Figure 10-7 on page 209).
You can specify a limit on ideal clock waveforms or on pins. For command details, see
set_time_borrow_limit in the Command Reference for Ambit BuildGates
Synthesis and Cadence PKS .
➤ To prevent time borrowing, set the limit to 0. This example disables time borrowing for the
whole design:
set_time_borrow_limit 0
The default is the maximum possible which is Max = pulse width - setup. The above
command resets the time borrowing to maximum possible for the whole design. You can
also reset specific waveforms or pins. For command details, see
reset_time_borrow_limit in the Command Reference for Ambit BuildGates
Synthesis and Cadence PKS .
If you have previously set borrow limits, you can find out what they are.
➤ To display the time borrow limit as set by the set_time_borrow_limit command, use
the get_time_borrow_limit command. This example shows the value returned.
>get_time_borrow_limit -pin l2/Q
1.0
There are two types of variation for which on and off chip variation analysis is desirable.
■ On-chip variation (min-max analysis)
The on-chip variation is the small difference in the operating parameter value across the
chip. This is modeled in the library with linear k-factor derating tables. For simultaneous
min-max analysis, you can use either
❑ A single library containing both min and max values. For details, see “Min-max
Analysis from a Single Library” on page 212.
❑ A merged library created from two libraries, one containing min data and the other
max data. For details, see “Min-max Analysis from Two Libraries” on page 213.
■ Off-chip variation (simultaneous BC-WC analysis)
The off-chip variation is a much larger range of values than on-chip and the derating is
generally non-linear. This is modeled in the library as the PVT values. For this reason two
operating conditions are needed. For simultaneous best-worst analysis, you can use
either:
❑ A single library and two operating conditions. For details, see “BC-WC Analysis from
One Library and Two Operating Conditions.” on page 214.
❑ Two libraries and two operating conditions. For details, see “BC-WC Analysis from
Two Libraries and Two Operating Conditions” on page 214.
Min/max delay numbers are obtained using on-chip PVT variations, specified as k-factors in
the library. Under this analysis, both early data and clock paths use min delay numbers and
both late data and clock paths use max delay numbers. You must specify process, voltage
and temperature values for two different corners using set_operating_condition or
set_operating_parameter commands. Here are the steps:
2. Associate early paths with min and late paths with max by these commands
set_global pvt_early_path min
set_global pvt_late_path max
3. Associate one operating condition or parameter with min corner and another with max.
For example
set_operating_condition -pvt min best
set_operating_condition -pvt max worst
The above associates the operating condition named best with the min corner and the
operating condition named worst with the max corner.
In this case, you need to load both the min and max libraries using a single read_alf or
read_tlf command. Under this analysis (as is the single library case), both late data and
clock paths use max delay numbers and both early data and clock paths use min delay
numbers. Here are the steps:
1. Type this ac_shell command to set the analysis type to min_max
set_global timing_analysis_type min_max
2. Associate early paths with min and late paths with max by these commands
set_global pvt_early_path min
set_global pvt_late_path max
This merges the two libraries into one in the database and also writes the merged library
to the file named merged.alf.
4. Associate one operating condition or parameter with min corner and another with max.
For example
set_operating_condition -pvt min best
set_operating_condition -pvt max worst
The above associates the operating condition named best with the min corner and the
operating condition named worst with the max corner.
Alternatively, you could use the read_library_update PVT options to set the
environment corner as follows:
read_library_update -pvt min merged.alf
read_library_update -pvt max merged.alf
.Lib
set_operating_condition -pvt min best
set_operating_condition -pvt max worst
Common:
set_global pvt_early_path min
set_global pvt_late_path max
set_global timing_analysis_type bc_wc
In this case, setup checks are performed at worst case operating condition. The hold checks
are performed at best case operating condition.
.Lib
read_alf -min min_lib -max max_lib -name merged_library_name
set_operating_condition -library min_lib -pvt min best
Common:
set_global pvt_early_path min
set_global pvt_late_path max
set_global timing_analysis_type bc_wc
In this case, setup checks are performed at worst case operating condition. The worst case
delays are picked up from max_lib and appropriately scaled for operating condition worst.
Similarly, the hold checks are performed at best case operating condition. The best case
delays are picked up from the min_lib library and scaled appropriately for best operating
condition.
A setup check at a flip-flop in a circuit ensures that the latest arriving signal at the data pin
arrives before the earliest arriving signal on the clock pin. Similarly, a hold check ensures that
the earliest arriving data signal arrives after the latest arriving clock signal. The earliest or
latest arriving signal on the data pin of a flip-flop is usually triggered by another flip-flop.
If both the earliest arriving clock and latest arriving data signals (or earliest arriving data
signal and latest arriving clock signals) share a portion of the clock network, then for the
common clock network, a pessimism equal to the difference in maximum and minimum delay
values is introduced. Common path pessimism removal refers to the process of computing
delay adjustments through clock network to remove the pessimism introduced at various
checks.
As shown in Figure 10-8 on page 216, the setup check at FF2 compares the latest arriving
data at the D pin against earliest arriving clock at the CLK pin. The latest arriving data at FF2/
D consists of maximum signal delay from FF1/Q to FF2/D, plus the maximum delay from
CLK_SOURCE to FF1/CLK plus the delay from FF1/CLK to FF1/Q. Similarly, the earliest
clock arrival time at FF2/CLK refers to the minimum delay from CLK_SOURCE to FF2/CLK.
D Q D Q
FF1 FF2
CLK CLK
CLK_SOURCE
B1 B2
Branching Node
B3
t4
Where:
t1 = Delay between CLK_SOURCE and FF1/CLK
t2 = Delay between FF1/CLK and FF1/Q
Where:
tpa = Period adjustment
tsu = Setup time
In the above equation, it is assumed that the common clock network simultaneously exhibits
maximum delay for the data path (clock source to FF1/CLK) and minimum delay for the clock
path (clock source to FF2/CLK), which is impossible. Common path pessimism removal
(CPPR) refer to the process of removing this pessimism. If common path pessimism time
(tcpp) is defined as the difference in the maximum and minimum delay from the clock source
to the branching node, the actual setup check equation is as follows:
Where:
tH = Hold time
Pessimism removal can be specified for either early or late data paths. By default, the
command will remove pessimism from both the early and the late data paths.
As common path pessimism is removed from a path, some other path for which common path
pessimism has not been removed may become critical. The CPPR algorithm visits each end
point and repeatedly removes path pessimism from the most critical path to the end point, for
which common path pessimism has not been removed and while its slack is still worse than
the slack limit specified.
For each end point, when the critical option is specified, the common path pessimism removal
process stops when the most critical path to the end point already has its common path
pessimism removed. By default, the common path pessimism removal process continues
until the pessimisms are removed for all paths to the end point whose slacks are worse than
slack_limit .
Note: CPPR analysis must be rerun when either a change to the netlist or timing data has
been made.
Subsequent to executing the do_cppr_analysis command, all future slack queries (such
as report_timing) will take into account CPPR adjustments. Similarly, any changes to the
netlist due to timing optimization will take into account CPPR adjustments. For any structural
changes to the clock network of the netlist (on which synthesis does NOT work) or changes
to the data network or timing assertions (because of slack dependence introduced by the
slack_limit option), CPPR adjustments will have to be recomputed. Since CPPR analysis
is an expensive operation, recomputation of adjustments is not performed automatically every
time the netlist or the timing assertions change. The do_cppr_analysis command must
be explicitly invoked. The do_cppr_analysis command deletes previously computed
adjustments and recomputes.
Note: CPPR data is not currently saved when writing the database out to an .adb file. If an
.adb database is restored, the CPPR analysis must be rerun.
The timing report on the following page reflects the CPPR analysis adjustments.
A
Sample Tcl Scripts
This appendix provides sample Tcl scripts for use in the Ambit® BuildGates® synthesis
ac_shell environment. Its focus is on synthesis of a single module.
All relevant commands are described in detail in the Command Reference for Ambit
BuildGates Synthesis and Cadence PKS . See the Ambit BuildGates Synthesis User
Guide for information on using ac_shell. Online help is available through the command line
interface in ac_shell by typing help command_name at the prompt.
Modular Scripts
The Tcl interface allows you to keep your scripts modular and reusable. Sections of code that
are common between blocks can be written as procedures, with arguments to handle
exception cases.
The following is a sample script showing the synthesis of a given module. The routines
beginning with the arbitrary prefix “my_” are defined in the following pages.
proc my_block { top ver_files adb_files clk } {
my_setup
my_read_lib
if { $adb_files != ““ } {
# read sub-blocks previously synthesized
my_read_adb $adb_files
}
my_read_verilog $top $ver_files
my_optimize
my_write_files $top
my_report $top
}
Search paths are specified differently in ac_shell than in dc_shell. For information on
use of multiple target libraries, refer to Chapter 2, “Choosing a Methodology.”
proc my_setup {
# Here are some common global settings.
# max_fanout
set_global fanout_load_limit 12
A typical procedure to read the library is shown below. Note that the wire load mode can be
set here. The wire load model (not mode) must be set after reading in a design because it is
attached to the current module.
proc my_read_lib {
read_alf /path/to/lib.alf
set_global target_technology libname
set_wire_load_mode top
set_operating_condition WCCOM
}
Reading Files
The read_verilog command builds a control-data-flow-graph (CDFG), but does not
populate any netlist. The do_build_generic command creates a generic (AND-OR-NOT)
netlist from the CDFG (see example below).
It may appear that the ideal clock definition (set_clock) and the set_clock_root and
set_clock_insertion_delay assertions contain redundant information, but there are
cases when all of these degrees of freedom can be used. The ideal clock waveform directs
the timing analyzer in determining phase shifts; that is, the clock period when a signal must
be valid. The insertion delays (arrival rise and fall times) specify the skew on the particular
clock port.
Note that the order of applying clock arrival time and data arrival time to a given port is
important. Whichever occurs first determines whether the port becomes a clock or data port,
respectively. In the script below, the -no_clocks flag is used with the find command to
prevent such a situation.
Applying your own default constraints is not required if you are going to apply specific
constraints to each port, but it is a safeguard against any omission. Otherwise, ac_shell
defaults are the same as dc_shell defaults of infinite drive strength on input ports, zero
capacitance on output ports, and no arrival or required times (no timing checks performed).
proc my_set_default_constraints { clk } {
# $clk is the name of the clock port. CLOCK is the name of the ideal #clock.
set_clock CLOCK -waveform {0 4} -period 8
set_clock_root -clock CLOCK $clk
set_clock_insertion_delay -clock CLOCK -rise 0 -pin $clk
set_clock_insertion_delay -clock CLOCK -fall 4 -pin $clk
set_dont_modify -network [find -port $clk]
set_clock_uncertainty -early 0.5 -clock_to CLOCK
set_clock_uncertainty -late 0.5 -clock_to CLOCK
# Alternate form:
set_drive_resistance 0.8 [find -port -input -no_clocks .]
set_input_delay -clock CLOCK 0 [find -port -input -no_clocks .]
set_data_required_time 5.0 -clock CLOCK [find -port -output \
-no_clocks .]
Tip
Overconstraining designs in general does not lead to better performance with
ac_shell, especially if you are accustomed to 10% to 20% overconstraining.
Realistic constraints usually perform better with ac_shell when overconstrained
by 0% to 5%.
max_transition
The max_transition command is set globally in the .lib library format with
default_max_transition. Related dc_shell commands are:
set_max_transition 0.5 <top_module>
set_max_transition 0.5 <ports>
In ac_shell it is possible to override the default for the complete design, or to set the limit
for a particular port with one of the following. Currently, ac_shell does not support setting
the limit on a particular module.
set_global slew_time_limit 0.5
set_slew_time_limit 0.5 <ports>
max_capacitance
The max_capacitance command is set globally in the .lib library format with
default_max_capacitance. Related dc_shell commands are:
set_max_capacitance 0.5 <top_module>
set_max_capacitance 0.5 <ports>
In ac_shell it is possible to override the default for the complete design, or to set the limit
for a particular port with one of the following. Currently, ac_shell does not support setting
the limit on a particular module.
set_global capacitance_limit 0.5
set_port_capacitance_limit 0.5 <ports>
max_fanout
The max_fanout command is set globally in the .lib library format with
default_max_fanout. Related dc_shell commands are:
set_max_fanout 0.5 <top_module>
set_max_fanout 0.5 <ports>
In ac_shell it is possible to override the default for the complete design, or to set the limit for
a particular port with one of the following. Currently, ac_shell does not support setting the
limit on a particular module.
set_global fanout_load_limit 0.5
set_fanout_load_limit 0.5 <ports>
Optimization
The following is a simple optimization procedure:
proc my_optimize {} {
do_optimize -effort high
do_xform_fix_multiport_nets -fix_constant_ports
}
Use the following commands on the ac_shell command line to view more optimization
options:
ac_shell> help do_optimize
ac_shell> help do_timing_correction
ac_shell> help xform
In particular, the critical ratio or critical offset options with values higher than the default (0)
can be useful if the constraints are reasonable.
Writing Files
The following is a sample procedure that allows you to write to files. Using the flag -hier
allows you to write out the entire hierarchy. The Verilog writer has several flags. Type help
set_global for more details.
proc my_write_files { top } {
mkdir -p netlist adb
write_verilog -hier netlist/$top.vm
write_adb -hier adb/$top.adb
}
Writing Reports
A variety of reports are available.
Note: The output redirection characters, > and >>, are supported.
B
Generating GCF Files
This appendix contains information about the General Constraint Format (GCF) file that can
be created from Cadence® timing analysis.
■ Generating GCF 1.4 on page 230
■ Example on page 236
After you completely specify your design constraints, you can optionally create a GCF file to
pass the constraints to downstream tools that read GCF.
➤ To create a GCF 1.4 file, use the following command
write_gcf_assertions -version 1.4 filename.gcf
Note: Currently, write_gcf_assertions writes constraints for the top timing module, not
the current module as used by all the other write_ commands.
The tables below show the supported constraints and their related GCF constructs. An
example follows the tables.
Ambit BuildGates
Related GCF
Command
set_false_path DISABLE
-from FROM_PINS PATHS
-to TO_PINS
Internal pins (pins that are not valid start or end points of
a path) are treated as THRU pins. Boundary pins are
mapped to the nearest internal pins.
Edges OK
early/late OK
Ambit BuildGates
Related GCF
Command
set_false_path DISABLE
[-clock_from FROM_CLK ]
[-clock_to TO_CLK ]
Important
Ambit BuildGates
Related GCF
Command
set_disable_cell_timing NOT SUPPORTED
(until 4.0)
Use set_disable_timing on
all instances of the cell.
Important
If you budget a block, the GCF created for the budgeted block may not contain the
proper constraints. This is caused by any path exceptions that cross budgeted
boundaries. Carefully watch for warnings from write_gcf_assertions. The
message TCLCMD-521 is issued if this happens.
Ambit BuildGates
Related GCF
Command
set_input_delay ARRIVAL
set_clock_root CLOCK
set_clock_insertion_delay CLOCK_ARRIVAL
set_external_delay DEPARTURE
Use set_external_delay
instead.
set_clock_required_time SHOULD NOT BE USED
Ambit BuildGates
Related GCF
Command
set_slew_time INPUT_SLEW
INTERNAL_SLEW
Ports only.
set_drive_resistance DRIVER_STRENGTH
Ambit BuildGates
Related GCF
Command
set_port_capacitance EXTERNAL_LOAD
Ambit BuildGates
Related GCF
Command
set_wire_resistance NOT SUPPORTED
(post-3.0.14)
set_wire_load WIRE_LOAD_MODEL
(post-3.0.14)
set_wire_load_mode NOT SUPPORTED
Ambit BuildGates
Related GCF
Command
set_clock_propagation CLOCK_MODE
Ambit BuildGates
Related GCF
Command
set_clock_info_change NOT SUPPORTED
Ambit BuildGates
Related GCF
Command
set_global capacitance_limit INTERNAL_LOAD
LOAD
set_port_capacitance_limit INTERNAL_LOAD
set_global fanout_load_limit NOT SUPPORTED
Example
This example uses some of the constraints from the tables above. The constraints and values
are for illustration purposes only and are not intended to represent a real design.
The constraints are entered in a constraint file, myconstraints.tcl. For a real design, you
can create several constraint files with different values for comparison purposes. The
commands to read in the libraries and design data, set the constraints, and generate a GCF
file are stored in the file named creategcf.tcl
)
(GLOBALS
(GLOBALS_SUBSET ENVIRONMENT
(PROCESS 1.0000 1.0000)
(VOLTAGE 3.3000 3.3000)
)
)
)
(GLOBALS_SUBSET TIMING
(WAVEFORM “CLK2” 5.0000
(POSEDGE 0.0000) (NEGEDGE 2.5000)
)
(WAVEFORM “CLK2_neg” 5.0000
(NEGEDGE 0.0000) (POSEDGE 2.5000)
)
(WAVEFORM “CLK1” 4.0000
(POSEDGE 0.0000) (NEGEDGE 2.0000)
)
(WAVEFORM “CLK1_neg” 4.0000
(NEGEDGE 0.0000) (POSEDGE 2.0000)
)
)
(CELL ()
(SUBSET TIMING
(ENVIRONMENT
(DEPARTURE ( NEGEDGE “CLK1” ) 1.0000 1.0000 -1000000000.0000 -
1000000000.0000
out
)
(DRIVER_CELL
((CELLTYPE “lcbg10pv” “BUFA” ) Z )
(
(INPUT_SLEW 0.0000 A )
)
in
)
(CLOCK “CLK2_neg” clkA )
(CLOCK_ARRIVAL -0.5000 -0.5000 0.0000 0.0000 clkA )
(INPUT_SLEW 1.3000 1.3000 1.3000 1.3000
clkA
)
(CLOCK “CLK2” clkB )
(CLOCK_ARRIVAL 0.0000 0.0000 -0.5000 -0.5000 clkB )
(INPUT_SLEW 1.3000 1.3000 1.3000 1.3000
clkB
)
(CLOCK “CLK2” clkC )
(CLOCK_ARRIVAL 0.0500 0.0500 -2.4300 -2.4300 clkC )
(CLOCK “CLK2_neg” clkD )
(CLOCK_ARRIVAL 0.5000 0.5000 0.5000 0.5000 clkD )
(ARRIVAL ( POSEDGE “CLK1” )(NEGEDGE 0.0700 0.0700)
J_block/D_reg/D
)
(DRIVER_STRENGTH 1.2000 1.2000
J_block/D_reg/D
)
(INPUT_SLEW 1.6000 1.6000 1.6000 1.6000
I_block/u000/A
)
)
(EXCEPTIONS
(MAX_TRANSITION_TIME 2.0000)
(MAX_TRANSITION_TIME 1.5000
in
)
(MULTI_CYCLE
(SETUP 2 SOURCE )
(HOLD 1)
(
(FROM “CLK1_neg” “CLK1” )
(TO “CLK2_neg” “CLK2” )
(DISABLE
(FROM I_block/A_reg/Q )
)
(DISABLE
(PATHS
(FROM I_block/A_reg/Q )
(TO J_block/D_reg/D )
)
)
(MULTI_CYCLE
(SETUP 3 SOURCE )
(HOLD 2 )
(PATHS
(FROM I_block/A_reg/Q )
(TO J_block/D_reg/D )
)
)
)
(SUBSET PARASITICS
(ENVIRONMENT
(EXTERNAL_LOAD 3.2000 3.2000
out
)
(LEVEL 1
(EXTERNAL_FANOUT 4
out
)
)
(CONSTRAINTS
(INTERNAL_LOAD 3.5000)
(LOAD 3.5000)
(INTERNAL_LOAD 4.0000
out
)
(INTERNAL_LOAD 2.0000
in
)
(INTERNAL_LOAD 2.0000
clkA
)
(INTERNAL_LOAD 2.0000
clkB
)
(INTERNAL_LOAD 2.0000
clkC
)
(INTERNAL_LOAD 2.0000
clkD
)
C
Understanding Errors and Warnings
This chapter lists some of the Cadence® timing analysis error and warning messages with
probable causes and corrections.
■ Error Messages on page 244
❑ Constraint Error Messages on page 244
❑ False Path Analysis Error Messages on page 244
Error Messages
Error messages cannot be ignored. The errors prevent timing analysis from completing.
TCLCMD-419
This message results when you try to apply a primary IO port constraint to a hierarchical port.
There are three ways to overcome this error, generally the first one is best:
■ You can set the constraint on the leaf pin directly connected to the hierarchical port. You
must also set_false_path -to leaf_pin to block incoming signals to the leaf pin.
■ You can set the constraint on the top level port. This is then propagated through simple
combinational gates and hierarchy. You can use the report_fanin command to find
the top level port name.
■ You can change the current and top_timing module before applying the constraint.
Always use -false_path_analysis with any of the false path options. You must also
specify a filename for the Tcl output.
Index
Symbols delay and slew thresholds 27
Delay Calculation Language (DCL) 54
"interpreted" slew values 27 do_build_generic 46
"measured" slew values 27 do_derive_context 23, 24
.lib do_optimize 22
supported features 45 do_time_budget 23, 24
unsupported features 46 do_uniquely_instantiate 26, 117
.tlf 36 dont_modify 26, 117
@ clock 74
E
A ECO 106
ac_shell 22 Elmore delay 110
ac_shell.cmd 18 Equations
ac_shell.log 18 Slack 204
asynchronous clock 74 Examples
automatic time budgeting 23 do_derive_context with backannotated
data 122
false path anaylsis error messages 244
B gate-level timing analysis with
parasictics 111
batch mode 16 get_tech_info 66
Buffering 26 net parasitic file 109
read_library_update 67
SDF constraint file 107
C set_tech_info 66
Static and Robust Comparison 149
characterize 24 Tcl procedure to derive context 121
Clock gating 82 top_timing_module
Clock latency 76 current_timng_module Case 1
cloning 26 Single Module 119
Constraint files 18 top_timing_module
constraints and their related GCF current_timng_module Case 2
constructs 230 Hierarchical Synthesis 120
context-based optimization 16 top_timing_module
CTLF 28 current_timng_module Case 3
Time-Budgeted Modules 120
D F
defaults 30
Definitions Features 16
cycle stealing 200 Files
Side Inputs 142 ac_shell.cmd 18
Time borrowing 200 ac_shell.log 18
threshold definitions 27
Threshold-based degradation 29
time budgeting 23
Time-driven logic optimization 116
timing context 116
timing convergence 102
Timing Library Format (TLF) 36
Tips
ideal clocks 75
tradeoffs 21
Truthtables 38
U
units 30
V
virtual clock 74
W
write_assertions 23