NanoTime User Guide K-2015.12
NanoTime User Guide K-2015.12
User Guide
Version K-2015.12, December 2015
Copyright Notice and Proprietary Information
© 2015 Synopsys, Inc. All rights reserved. This software and documentation contain confidential and proprietary
information that is the property of Synopsys, Inc. The software and documentation are furnished under a license
agreement and may be used or copied only in accordance with the terms of the license agreement. No part of the
software and documentation may be reproduced, transmitted, or translated, in any form or by any means, electronic,
mechanical, manual, optical, or otherwise, without prior written permission of Synopsys, Inc., or as expressly provided
by the license agreement.
Destination Control Statement
All technical data contained in this publication is subject to the export control laws of the United States of America.
Disclosure to nationals of other countries contrary to United States law is prohibited. It is the reader's responsibility to
determine the applicable regulations and to comply with them.
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH
REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Trademarks
Synopsys and certain Synopsys product names are trademarks of Synopsys, as set forth at
[Link]
All other product or company names may be trademarks of their respective owners.
Third-Party Links
Any links to third-party websites included in this document are for your convenience only. Synopsys does not endorse
and is not responsible for such websites and their practices, including privacy practices, availability, and content.
Synopsys, Inc.
690 E. Middlefield Road
Mountain View, CA 94043
[Link]
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
[Link] of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
[Link] in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
[Link] advertising materials mentioning features or use of this software must display the following acknowledgement:
This product includes software developed by the University of California, Berkeley and its contributors.
[Link] the name of the University nor the names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This software is not subject to any license of the American Telephone and Telegraph Company or of the Regents of
the University of California.
Permission is granted to anyone to use this software for any purpose on any computer system, and to alter it and
redistribute it freely, subject to the following restrictions:
[Link] authors are not responsible for the consequences of use of this software, no matter how awful, even if they arise
from flaws in it.
[Link] origin of this software must not be misrepresented, either by explicit claim or by omission. Since few users ever
read sources, credits must appear in the documentation.
[Link] versions must be plainly marked as such, and must not be misrepresented as being the original software.
Since few users ever read sources, credits must appear in the documentation.
[Link] notice may not be removed or altered.
1. Overview
NanoTime Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-2
Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6
Unsupported Design Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6
Nonstandard Design Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6
Accuracy and Runtime Considerations. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-7
Error Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-7
NanoTime Session Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-8
Starting and Ending a NanoTime Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-8
Setup Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9
The Command Log File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10
Saving and Restoring a NanoTime Session . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10
License Queuing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-12
Distributed Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-12
Host Files for Distributed Processing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-13
Testing the Computing Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-16
Parallel NanoTime Runs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-17
Invoking Parallel NanoTime Runs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-17
Invoking Hierarchical NanoTime Runs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-18
Defining Computing Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-20
Parallel Analysis Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-20
v
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Contents vi
NanoTime User Guide Version K-2015.12
Chapter 1: Contents
Contents vii
1-vii
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
3. Technology Data
SPICE Transistor Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-2
Reading SPICE Models Implicitly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-2
Reading SPICE Models Explicitly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-4
SPICE Model File Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-5
Using Encrypted Device Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-7
Other Technology Data Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-8
Using Custom Modeling Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-8
Using Device Models With Voltage-Controlled Voltage Sources . . . . . . . . . . . 3-11
Reading Device Parameter Data from Parasitics Files . . . . . . . . . . . . . . . . . . . 3-11
Modifying Transistor Drive and Transistor Parameters . . . . . . . . . . . . . . . . . . . 3-12
Reporting Technology Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13
Setting the Technologies for Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-14
FinFET Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-17
SOI Transistor Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-18
Partially Depleted SOI Technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-18
SOI Analysis in the NanoTime Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-19
Body Voltage Range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-20
Usage Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-20
SOI Analysis Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-21
The set_soi_parameters Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-21
The set_soi_transistor_type Command . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-23
Reporting SOI Parameter Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-24
4. Topology Operations
Topology Recognition Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-2
Recognizing Channel-Connected Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6
Reporting Channel-Connected Blocks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-6
Recognizing Storage Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10
Contents viii
NanoTime User Guide Version K-2015.12
Chapter 1: Contents
Contents ix
1-ix
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
6. Recognizable Topologies
Limitations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-2
Inverter Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-3
Transfer Gates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-4
Feedback Transistors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-6
Pulldown and Pullup Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-8
Pulldown and Pullup Transistors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-8
Cross-Coupled Pull-up Transistors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-8
Weak Pullup and Pulldown Transistors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-9
Turnoff Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-10
Latch Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-12
Debugging Latch Data Inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-14
Latch Timing Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-14
Tapped Feedback in a Latch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-15
Flip-Flop Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-17
Multiplexer Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-20
Domino Precharge Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-21
Domino Precharge Recognition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-22
Main Precharge Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-22
Internal Precharge Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-23
Evaluation Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-24
Embedded Latch Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-25
Predischarge Domino Circuits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-27
Contents x
NanoTime User Guide Version K-2015.12
7. Differential Circuits
Differential Circuit Analysis in NanoTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-2
Differential Nets, Pins, and Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-3
Fingered Devices in Differential Circuits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-3
Attributes for Objects in Differential Circuits . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-4
Differential Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-5
Creating Boundary Differential Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-5
Creating Internal Differential Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-6
Reporting Differential Clocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-8
Differential Skew Analysis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-9
Determining Differential Skew Automatically . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-9
Guidelines for Analysis Setup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-10
Using Multiple Types of Iterative Analysis . . . . . . . . . . . . . . . . . . . . . . . . . 7-10
Setting Differential Skew Manually . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-10
Differential Synchronizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-11
Differential Latches and Flip-Flops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-14
Cascode Voltage Switch Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-16
8. Timing Constraints
Input and Output Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-2
Input Delay. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-3
Output Delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-5
Input Transition Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-6
Input Drive Characteristics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-7
Output Load Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-8
Capacitance on Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-8
Capacitance on Nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-9
Capacitance Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-9
Chapter 1: Contents
Contents xi
1-xi
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
9. Timing Checks
Timing Check Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-2
Timing Check Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-2
Timing Check Targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-4
Library-Based Timing Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-6
Latch Setup and Hold Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-7
Clock-Gating Setup and Hold Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-11
Contents xii
NanoTime User Guide Version K-2015.12
Chapter 1: Contents
Contents xiii
1-xiii
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Contents xiv
NanoTime User Guide Version K-2015.12
Chapter 1: Contents
Contents xv
1-xv
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Contents xvi
NanoTime User Guide Version K-2015.12
Chapter 1: Contents
Contents xvii
1-xvii
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Contents xviii
NanoTime User Guide Version K-2015.12
Chapter 1: Contents
Contents xix
1-xix
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Contents xx
NanoTime User Guide Version K-2015.12
Chapter 1: Contents
Contents xxi
1-xxi
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Glossary
Contents xxii
Preface
This preface includes the following sections:
• About This User Guide
• Customer Support
xxiii
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Audience
This user guide is for engineers who perform static timing analysis on custom, semicustom,
and gate-level designs.
Related Publications
For additional information about the NanoTime tool, see the documentation on the
Synopsys SolvNet® online support site at the following address:
[Link]
You might also want to see the documentation for the following related Synopsys tools:
• PrimeTime®
• StarRC™
• HSPICE ®
• Library Compiler ™
• FineSim
Release Notes
Information about new features, enhancements, changes, known limitations, and resolved
Synopsys Technical Action Requests (STARs) is available in the NanoTime Release Notes
on the SolvNet site.
To see the NanoTime Release Notes,
1. Go to the SolvNet Download Center located at the following address:
[Link]
2. Select NanoTime, then select a release in the list that appears.
Preface
About This User Guide xxiv
NanoTime User Guide Version K-2015.12
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
Preface 1: Preface
Chapter
About This User Guide 1-xxv
xxv
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Customer Support
Customer support is available through SolvNet online customer support and through
contacting the Synopsys Technical Support Center.
Accessing SolvNet
The SolvNet site includes a knowledge base of technical articles and answers to frequently
asked questions about Synopsys tools. The SolvNet site also gives you access to a wide
range of Synopsys online services including software downloads, documentation, and
technical support.
To access the SolvNet site, go to the following address:
[Link]
If prompted, enter your user name and password. If you do not have a Synopsys user name
and password, follow the instructions to sign up for an account.
If you need help using the SolvNet site, click HELP in the top-right menu bar.
Preface
Customer Support xxvi
1
Overview 1
The NanoTime transistor-level static timing analysis tool provides fast and accurate
block-level timing verification. This chapter describes the phases of the analysis flow and
provides an overview of static timing analysis.
This chapter contains the following sections:
• NanoTime Features
• NanoTime Session Management
• The NanoTime Shell Interface
• NanoTime Documentation
• The NanoTime Analysis Flow
• Static Timing Analysis Overview
1-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
NanoTime Features
The NanoTime transistor-level static timing analysis tool performs block-level and full-chip
timing verification of custom digital designs. NanoTime analysis provides near-SPICE
accuracy for all critical timing paths. The tool allows you to quickly detect and correct timing
violations, thereby reducing verification time and final time-to-market.
Some of the features of the NanoTime tool are as follows:
• Transistor-level delay calculation with SPICE-level accuracy
• Direct support of many types of transistor models
• Comprehensive checking of sequential circuits (setup, hold, transparency)
• SPICE-level consideration of back-annotated detailed parasitics
• Automatic recognition of complex topologies, including domino precharge logic, latch
structures, flip-flops, transfer gates, and gated clocks
• Hierarchical timing model generation and analysis, allowing chip-level analysis with high
performance and virtually unlimited capacity
• Ability to create and use timing models that are compatible with other simulation tools
• Powerful and easy-to-use tool command language (Tcl) interface that supports making
scripts and generating custom reports
• Support for the Synopsys Design Constraints (SDC) specification format
NanoTime Ultra is an optional add-on product that offers advanced features, including:
• Analysis of differential circuits that have traditionally required dynamic simulation,
including differential clocks and clock networks
• Ability to use different supply voltages for different analysis modes, such as minimum
delay analysis versus maximum delay analysis or clock path analysis versus data path
analysis
• Path-based slack adjustment and parametric on-chip variation analysis, which provide
two methods for including the effects of on-chip variations
• Crosstalk delay analysis, which analyzes changes in delay resulting from electrical
crosstalk between capacitance-coupled nets
• Crosstalk noise analysis, which analysis noise glitches resulting from crosstalk
• SOI analysis, which accounts for the floating-body effects of SOI technologies
• Integrated HSPICE analysis of complex topographies
Chapter 1: Overview
NanoTime Features 1-2
NanoTime User Guide Version K-2015.12
Chapter 1: Overview
NanoTime Features 1-3
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Figure 1-1 shows how NanoTime static timing analysis is used in a typical design flow.
Figure 1-1 NanoTime in the Design Flow
Custom Intellectual
property Transistor
logic
models
.sp
Timing constraints
Command-
Design data
Transistor-level specified
description NanoTime conditions
SPICE or
Verilog + SPICE
.lib, .db
Timing constraints
Place and route
Timing
models
Detailed parasitic data for
back-annotation
Layout
description SPEF, DSPF
PrimeTime
block-level
IP module or timing analysis tool
Design signoff chip design
Chapter 1: Overview
NanoTime Features 1-4
NanoTime User Guide Version K-2015.12
structures such as latches, multiplexers, domino precharge logic, transfer gates, and
register file cells. It automatically recognizes many types of structures based on the circuit
topology. It can also recognize the remaining structures by topology matching or by cell
naming conventions. After you specify the timing constraints and operating conditions, the
path tracing operation generates a timing database. From this database, you can produce a
variety of timing reports.
NanoTime analysis includes the following checks:
• Setup and hold constraints at latches, flip-flops, gated clocks, and domino circuits
• User-specified timing checks: data-to-data checks, clock-to-data checks, and
clock-gating checks
• Minimum pulse width
• Maximum clock skew
• Design rules for minimum and maximum transition time and capacitance
• Nontransparent setup and hold
Chapter 1: Overview
NanoTime Features 1-5
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Limitations
Effective use of the NanoTime tool requires that you observe all limitations on supported
design styles and that you follow all usage recommendations.
Chapter 1: Overview
NanoTime Features 1-6
NanoTime User Guide Version K-2015.12
Error Checking
NanoTime identifies many types of errors in circuit designs and in NanoTime scripts. The
tool issues informational, warning, and error messages to provide information about
unexpected situations. However, your design and your NanoTime scripts might contain
errors even if the NanoTime tool does not issue any messages. NanoTime cannot detect all
possible design and setup errors.
Chapter 1: Overview
NanoTime Features 1-7
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
NanoTime checks out a license and displays an initial message and the nt_shell prompt.
Here is an example, but the message you see might be different depending on the version:
NanoTime
nt_shell>
Chapter 1: Overview
NanoTime Session Management 1-8
NanoTime User Guide Version K-2015.12
If you need assistance, ask your system administrator or consult the installation and
licensing documentation.
If the NanoTime shell fails to start, check the following:
• Is NanoTime correctly installed?
• Is the NanoTime installation path included in your path definition?
• Is the Synopsys license server running?
• Is your Synopsys license key file available and current, and does it include a NanoTime
license?
To end a NanoTime session, enter the quit or exit command at the NanoTime prompt:
nt_shell> exit
Maximum memory usage for this session: 0.72 MB
CPU usage for this session: 0 seconds
Diagnostics summary: 2 errors
Setup Files
Each time you start a NanoTime session, the tool executes the commands contained in one
or more setup files. You can put commands into a setup file to set variables, to specify the
design environment, and to select your preferred working options.
The name of each setup file ends with .synopsys_nt.setup. NanoTime looks for setup files
in the following directories:
• The Synopsys installation setup directory at admin/setup. For example, if the installation
directory is /usr/synopsys, the setup file name is /usr/synopsys/admin/setup/
.synopsys_nt.setup
• Your home directory
• The current working directory from which you started NanoTime
If more than one of these directories contains a setup file, the files are executed in the order
shown: first in the Synopsys setup directory, then in your home directory, then in the current
working directory. Typically, the file in the Synopsys setup directory contains setup
information for all users at your site, the file in your home directory sets your personal
preferred working configuration, and the file in your current working directory sets the
environment for the current project.
To suppress execution of all setup files, use the -no_init option when you start NanoTime.
Chapter 1: Overview
NanoTime Session Management 1-9
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
• extract_model
• characterize_context
• update_timing
• update_noise
• continue_trace
Only certain types of commands, primarily reporting functions, can be used in the restored
session. The following command types are available:
• report_xxx for standard reporting
• write_xxx (limited to commands that would work in a nonrestored session after the
trace_paths command)
Chapter 1: Overview
NanoTime Session Management 1-10
NanoTime User Guide Version K-2015.12
The save and restore feature is platform independent. You can restore the session on any
supported platform, but this capability is not meant to be used as a database communication
method nor as a design archival method.
The following types of data items are saved:
• NanoTime application variables
• Currently linked design
• Transistor models
• Timing exceptions and other constraints
• Timing checks
• Parasitics
• Analysis data
• Signal integrity data, if available at the time the session is saved
The current session is saved to the named directory. If the directory already exists, an error
occurs unless you use the -replace option. When this option is present, the existing
subdirectories and files are replaced with the data of the current session.
The saved files are binary files, with the exception of two ASCII files. One ASCII file is
named README and contains the NanoTime version, the creation date, the current design
name, and a list of logic library information. The other ASCII file is named lib_map and
contains the full path names for each of the cell libraries that must be loaded, in addition to
the files in this directory, to restore the session.
Note:
If the location of any of the cell libraries change, you must edit the lib_map file to provide
the correct location. The order and number of cell libraries must not be changed.
When you use the restore_session command, the cell library files and design data
needed to restore the session are read from the specified directory. The session is
successfully restored only if all cell library files exist and have the same library version as
was used when the session was saved.
Limitations
Note the following limitations to the save and restore operations:
• Data from one version cannot be restored in a different version, including service pack
releases.
• Backward compatibility is not maintained.
Chapter 1: Overview
NanoTime Session Management 1-11
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
• Tcl procedures cannot be saved or restored. You are expected to reload your Tcl
procedures from your .synopsys_nt.setup file.
• What-if analysis is not supported.
• Commands that alter the timing exceptions or other constraints or require that you run
the trace_paths command again are not allowed.
• Variables that hold collections are not saved.
• Tcl variables that are not NanoTime application variables are not saved.
• Tcl command histories are not saved.
License Queuing
When all NanoTime licenses are in use, you can wait for available licenses by using the
license queuing capability. To enable license queuing, set the SNPSLMD_QUEUE environment
variable to true:
% setenv SNPSLMD_QUEUE true
If license queuing is enabled, the following message appears at the startup of the NanoTime
shell:
Information: License queuing is enabled. (LICS-007)
You can optionally set the maximum time to wait for an initial NanoTime license by setting
the SNPS_MAX_WAITTIME environment variable:
% setenv SNPS_MAX_WAITTIME time_in_seconds
You can set the maximum time for an existing process to wait for a subsequent license (such
as a NanoTime Ultra license) by setting the SNPS_MAX_QUEUETIME environment variable:
% setenv SNPS_MAX_QUEUETIME time_in_seconds
The default for the SNPS_MAX_WAITTIME variable is 72 hours (259,200 seconds) and the
default for the SNPS_MAX_QUEUETIME variable is 8 hours (28,800 seconds).
Distributed Processing
NanoTime tasks such as extraction recalibration and composite current source noise
modeling use the HSPICE simulator for analysis. Using distributed processing for HSPICE
simulations can greatly reduce the elapsed time for complex analyses. NanoTime
distributes simulation tasks to multiple hosts, using Perl scripts to control the load balance
between distributed jobs. You can choose the set of hosts, the maximum number of HSPICE
licenses to use, and the working directory used for Perl scripts.
Chapter 1: Overview
Distributed Processing 1-12
NanoTime User Guide Version K-2015.12
Parallel execution is available via the Common Distributed Processing Library (CDPL),
which is included with every NanoTime installation. Several utility programs are available to
help you set up and monitor distributed processes. For more information about CDPL and
the utility programs, see the user documents located in the NanoTime_install_root_
directory/cdpl/doc directory. The documents are the CDPL Users Manual, the DP Manager
User Guide and DP Manager Frequently Asked Questions.
To enable and configure distributed HSPICE processing,
• Use the distributed_processing_host_file variable to specify the host file.
• Use the distributed_processing_number_hspice_license variable to specify the
maximum number of HSPICE licenses to check out.
• Use the distributed_processing_perl_path variable to specify a path to use for Perl
scripts. Perl versions [Link] and later are supported.
• Keep the nt_tmp_dir variable set to its default of “.” to ensure that all of the necessary
simulation files are globally accessible.
The host file is an ASCII file in which each line follows the same format and provides
information about one entity. Comment lines begin with a pound sign (#).
Chapter 1: Overview
Distributed Processing 1-13
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Each line in the host file must observe the following rules:
• The format for each line is: flag | hostname | num_slots | tmpDir | mode | command
• Each field is terminated by a pipe symbol (“|”) except the last field.
• A space must be present for an empty field.
• Each line must be a single unwrapped line.
• The fields contain information as follows:
❍ flag: 1 to enable; 0 to disable
❍ hostname: Machine name; empty for some environments
❍ num_slots: number of worker slots on this host or farm; -1 indicates unlimited
❍ tmpDir: (optional) temporary work directory
❍ mode: RSH, SSH, LSF, SGE, SH, PBS, or RTDA
❍ command and options: string containing the command to connect to worker
machines (slave processes), written on a single unwrapped line in the host file
The string in this field can also be the file name (optionally including a path) of a script
file that contains the submission command. The contents of the file must be a single
unwrapped line of text.
Examples:
• RSH infrastructure with two host machines and allowing a total of 10 worker slots (4 on
one machine and 6 on the other)
# host file for RSH
1|engr_lab-x9|4|/remote/users/tmp |RSH| rsh
1|engr_lab-x2|6|/remote/users/tmp |RSH| rsh
Chapter 1: Overview
Distributed Processing 1-14
NanoTime User Guide Version K-2015.12
• SGE compute farm in which the number of launched jobs is limited to 3 and a directory
for temporary files is specified
# host file for SGE
1| |3| /remote/users/tmp |SGE| qsub -P bnormal arch=glinux
• LSF compute farm allowing an unlimited number of worker slots and using a script file to
provide the submit command
The file named my_bsub contains the following line:
/lsf/bin/bsub -R rusage[mem=8000] -R arch=glinux
• The SH protocol can be used to distribute processing over multiple cores on the same
machine when RSH and SSH are not available. The hostname field is not required, but
in this example, localhost is entered as a reminder:
# host file for SH
1|localhost |8|/remote/users/tmp |SH| sh
Chapter 1: Overview
Distributed Processing 1-15
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
3. Create a script file to configure your compute farm environment or obtain a script from
your Information Technology support group. The objective is to configure a submit host
that submits a distributed processing run to a compute farm.
Determine the name of the compute farm and check that the machine you are using is a
submit host for the farm. Use the dpvalidate command and the dpcheck -m command
with the appropriate argument ( lsf, sge, pbs, or rtda) to validate the infrastructure. For
SSH or RSH protocols, all Linux hosts are submit hosts.
4. Verify that the selected queue has appropriate capabilities (such as memory and
duration) for the planned NanoTime runs.
5. Test the farm setup with a simple command such as the ls command or the date
command. For example, if you are using an LSF farm,
% bsub -R "rusage[mem=1000]" date
Chapter 1: Overview
Distributed Processing 1-16
NanoTime User Guide Version K-2015.12
Use options after the nt_shell command in the same way that you would without DP
Manager. DP Manager allows you to monitor job and task status information, create and
edit host files, and stop jobs.
For more information about DP Manager, see the DP Manager User Guide and DP Manager
Frequently Asked Questions documents, located in the NanoTime_install_root_ directory/
cdpl/doc directory. For more information about CDPL and other utility programs, see the
CDPL Users Guide located in the same directory.
For assistance with your computing environment, contact your Information Technology
support group.
Chapter 1: Overview
Parallel NanoTime Runs 1-17
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
each instance. These script files can contain run_parallel commands, which then
launch additional instances of NanoTime.
NanoTime launches new instances from the directory containing the script file unless the
-directories option is specified. You must configure the search_path and
library_path variables in the Tcl script so that a NanoTime instance running in the
same directory as the Tcl script can access all the files referenced in the script. If the
script file name has the format file_prefix.tcl, NanoTime saves the screen output in files
named file_prefix.log; otherwise, the extension .log is appended to the script file name
(for example, file_prefix.nt generates file_prefix.[Link]).
In both cases, instance names or full-path script names must be unique and cannot contain
special characters. Files from repeated runs overwrite files from earlier runs.
As with other NanoTime commands, the run_parallel command returns a 1 when it
succeeds and 0 otherwise. For the command to be a success, all of its parallel instances
must complete successfully. The script execution continues beyond the run_parallel
command only after all of the parallel instances have completed. There is no interaction
between parallel instances. The command can be executed at any point in the flow.
Chapter 1: Overview
Parallel NanoTime Runs 1-18
NanoTime User Guide Version K-2015.12
script B script C
2 instances 4 instances
In this example, script A launches two NanoTime runs. Each of those runs executes a script
that includes a run_parallel command, but script B uses the -instance_names option to
launch three NanoTime instances, while script C uses the -files option to execute scripts
D and E. Scripts D and E then use the run_parallel command and -instance_names
option to launch additional NanoTime instances.
In general, the sum of all of the values of the -parallel_instance_count options in scripts
that launch NanoTime runs (here, scripts B, D, and E) should be less than or equal to the
total number of NanoTime licenses available. You must reduce the values of the
-parallel_instance_count option in cases where each run requires more than one
NanoTime license.
NanoTime licenses are consumed as needed to execute commands. If there are not enough
licenses available, instances execute sequentially as licenses become available. You
should configure NanoTime licensing to wait for a license to become available instead of
exiting when a license is not available. There is no license penalty for the submit host
computer. If the submit host is not capable of running NanoTime, the host relinquishes its
NanoTime license while waiting for the runs to finish. If the submit host computer can run
NanoTime, the host uses a license while it executes one of the instances.
The -parallel_instance_timeout option limits the runtime to handle instances that are
stalled due to system, design, or user errors. The default is infinity and the minimum value
is 30 seconds. In the event of an error, you can rerun the failed instances by checking for the
expected output files when you construct the run_parallel command.
The -exclude_master option prevents the invoking instance from performing any of the
parallel tasks. Use this option when the invoking instance is running on a host computer that
is not suitable for performing a parallel NanoTime task.
Chapter 1: Overview
Parallel NanoTime Runs 1-19
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
The log outputs for each select mode are placed in the top-level directory; they are named
[Link] and [Link]. The log from the master instance appears on the screen and also is
directed to a file named [Link] in the top-level directory.
Chapter 1: Overview
Parallel NanoTime Runs 1-20
NanoTime User Guide Version K-2015.12
#setup commands
...
if {$mode eq “sel1”}{
set_case_analysis 1 [get_pins -of [get_nets sel] ]
} elseif {$mode eq “sel0”}{
set_case_analysis 0 [get_pins -of [get_nets sel] ]
}
check_topology
check_design
Chapter 1: Overview
Parallel NanoTime Runs 1-21
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
if($distributed_processing_is_master){
set files [list]
if {![file exists sel0_lib.db]} {
lappend files “[Link]”
}
if {![file exists sel1_lib.db]} {
lappend files “[Link]”
}
if {![file exists sel2_lib.db]} {
lappend files “[Link]”
}
if {![file exists sel3_lib.db]} {
lappend files “[Link]”
}
if {[llength $files]>0} {
set result [run_parallel -files $files -exclude_master]
}
if {$result} {
set result [merge_models -db_files {\
sel0_lib.db \
sel1_lib.db \
sel2_lib.db \
sel3_lib.db \
} \
-mode_names {sel0 sel1 sel2 sel3} \
-output 4MUX]
}
}
Chapter 1: Overview
Parallel NanoTime Runs 1-22
NanoTime User Guide Version K-2015.12
The nt_shell interface is based on the Tcl scripting language. You can use features of Tcl
such as user-defined variables, procedures, conditional execution, lists, and expressions.
The general features of Tcl are beyond the scope of the NanoTime documentation. For this
type of information, see a reference book on Tcl. For information about how the features of
Tcl are used in the NanoTime shell, see Appendix A, “Tcl Command Interface.”
The prompts are programmable. By default, the primary prompt is nt_shell> and the
secondary prompt is a question mark ( ? ). To change the prompt, set the tcl_prompt1 or
tcl_prompt2 variable to the name of a procedure that displays the desired prompt. The
procedure cannot take an argument. For example, to make the primary prompt an asterisk
( *> ), do the following:
nt_shell> proc prompt1 {} { echo -n "*> " }
nt_shell> set tcl_prompt1 prompt1
prompt1
*>
Chapter 1: Overview
The NanoTime Shell Interface 1-23
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
If you enter an ambiguous command, NanoTime attempts to help you find the correct
command. For example, the set_min command as entered here is ambiguous:
nt_shell> set_min
Error: ambiguous command 'set_min' matched 2 commands:
(set_min_library, set_min_pulse_width) (CMD-006)
The error message lists up to three of the possible command matches. To list all of the
commands that match the ambiguous abbreviation, use the help function with a wildcard
pattern. For example,
nt_shell> help set_min_*
set_min_library # Set/remove min library for a library
set_min_pulse_width # Specify min pulse width checks
When you enter a long command, you can split it across multiple lines by using the
backslash (\) continuation character. During entry of a long command using backslashes (or
in other incomplete input situations), NanoTime displays the secondary prompt for each
additional line of the command. The default secondary prompt is a question mark. For
example,
nt_shell> alias my_timing_report {report_paths \
? -max -max_paths 5 -path_type full_clock_expanded}
In this user guide, a command that cannot fit on one line is shown on multiple lines with the
continuation character. However, the secondary prompt is omitted from the examples.
To execute a script upon startup, use the -file option (short form -f):
% nt_shell -f file_name
You can create scripts that use variables, loops, and conditional execution. The flow control
commands if, while, for, foreach, break, continue, and switch determine the
execution order of other commands.
Chapter 1: Overview
The NanoTime Shell Interface 1-24
NanoTime User Guide Version K-2015.12
Any line of text in a script file that begins with the pound sign (#) is a comment. Any text from
a semicolon and pound sign (;#) to the end of a line is also considered comment text.
You can also redirect the output to a file. The following command runs the Tcl script named
big_analysis.tcl and redirects all output and error messages to the file result_file.out.
% nt_shell -file big_analysis.tcl > result_file.out
If your script contains a syntax error, NanoTime stops and waits for input unless the
sh_continue_on_error variable is set to true.
End the script with the quit or exit command. Otherwise, the nt_shell prompt does not
appear, and you do not know when the script has finished executing. If your script does not
end with the quit command, the tool waits for input. Type quit or exit to end the session.
NanoTime Commands
Commands are statements that cause actions, such as defining values, executing analysis,
or displaying reports. Commands return a 1 to indicate success or a 0 to indicate failure in
cases where there is no specific resulting output. For example,
nt_shell> create_clock -period 6.67 [get_ports clk1]
1
Command examples in this user guide usually do not show the return value unless the result
is of particular interest.
For some commands, the result is a collection. For example, the result of the get_ports
command is a collection of ports. The following command creates a collection of all ports
whose names begin with the letters IN. The displayed result is the collection.
nt_shell> get_ports IN*
{"IN1", "IN2", "IN3", "IN4"}
You can nest commands so that the result of one command is an argument for another.
Enclose each nested command in square brackets. For example, the set_input_delay
command sets a timing constraint on one or more specified input ports. You can gather a
collection of input ports with the get_ports command and pass the result to the
set_input_delay command on one command line:
nt_shell> set_input_delay 2.3 [get_ports IN*]
The get_ports IN* command creates a collection, which is used as the second argument
of the set_input_delay command. The effect is to set the input delay to 2.3 for all ports
beginning with the letters IN.
The output of some commands, such as the report_paths command, is a report. By
default, the display scrolls through the entire report. To pause between screenfuls of text
(similar to the more command in UNIX), set the sh_enable_page_mode variable to true.
Chapter 1: Overview
The NanoTime Shell Interface 1-25
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
To view a long report in this mode, press the space bar to view each successive screen. To
cancel a long report and return to the nt_shell prompt, type the letter q.
You can interrupt a command in progress by typing Ctrl+C. Computationally intensive
commands might take some time to stop. Typing Ctrl+C multiple times terminates the shell
and returns to the operating system prompt.
NanoTime Variables
Variables hold data. You can control many NanoTime options by specifying the value of
application variables. You can also define user variables for convenience in scripts or at the
command line. To specify the value of a variable, use the set command:
nt_shell> set variable_name value
You can use the set_app_var command instead of the set command when setting the
value of an application variable. In this case, if NanoTime does not recognize the variable
name, the tool issues a warning and defines a new user variable with the given name:
nt_shell> set_app_var abc value
Error: Variable ‘abc’ is not an application variable. Value will still
be set in Tcl. (CMD-104)
Information: Defining new variable ‘abc’. (CMD-041)
When you set an application variable, the displayed result is the new setting for the variable:
nt_shell> set sh_enable_page_mode true
true
If you attempt to set an application variable to an invalid value, NanoTime issues an error
message. For example,
nt_shell> set sh_enable_page_mode maybe
Error: can't set "sh_enable_page_mode": invalid value:
use true or false
Use error_info for more info. (CMD-013)
To determine the current setting for a variable, use the printvar command. For example,
nt_shell> printvar sh_enable_page_mode
sh_enable_page_mode = "false"
You can use one or more wildcard characters (*) to view a group of variables. For example,
to see a list of variables whose names include the string “clock,” enter
nt_shell> printvar *clock*
timing_all_clocks_propagated = "true"
timing_clock_gate_hold_fall_margin = "0"
...
Chapter 1: Overview
The NanoTime Shell Interface 1-26
NanoTime User Guide Version K-2015.12
To add values to an argument list for a variable, use the append command. For example,
nt_shell> set link_prefer_model { inv* }
inv*
nt_shell> append link_prefer_model { latch* }
inv* latch*
nt_shell> printvar link_prefer_model
link_prefer_model = " inv* latch* "
• verbose: Additional details that vary with the specific command used
• debug: Further details, beyond the verbose mode, possibly including messages that are
only seen with this setting; varies with the specific command used
A few NanoTime commands provide a -quiet option to suppress all warning and error
messages. This is common with the get_* commands (such as the get_cells or
get_nets commands) because complicated filtering operations might return many
unimportant messages as the filter operates on various objects.
Chapter 1: Overview
The NanoTime Shell Interface 1-27
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
The following example shows the same message when the message context feature is
activated. Additional information appears at the end of the message, separated by
characters that you define (@&# in this example).
Warning: Simulator Warning: The ratio 29.4 of transition time 0.436
at pin X10.X00.MP0.g to the delay 0.015 to net pnode10 exceeds the
user specified ratio 25.0. (DELC-104) @&# [net=X10.X00.A,
inst=X10.X00, subckt=ppullup][net=pnode10]
Messages produced by third-party code libraries are not changed from their current form
when displayed.
Activate the message context by specifying custom delimiter characters with the
sh_enable_message_context_with_delimiter variable. Choose unique delimiter
characters so that the reported message is not obscured due to similarities to other
messages. The following command uses the characters “@&#” as a delimiter.
nt_shell> set sh_enable_message_context_with_delimiter @&#
The output message syntax when the message context function is activated is as follows:
original_message delimiter_string message_context_information
Chapter 1: Overview
The NanoTime Shell Interface 1-28
NanoTime User Guide Version K-2015.12
When context messaging is activated, the following items of information are appended if
they are available:
• The net name – the name of the most significant net that is related to the message
• The instance name – the full instance name of the most related subcircuit
• The subcircuit name – the subcircuit name of the instance when the transistor wrapper
is not used as the name of the instance
• The transition direction – the path tracing edge direction of the net if the message is
produced during path tracing
Messages that do not have additional information to report are displayed with the delimiter
string and empty context as shown in the following example:
Without message context
Warning: Specified default supply voltage of 1.300V is outside the range
(1.200V, 1.200V) of supply voltages found in the design. (OPCD-008)
Some messages have more than one information object, as shown in the following warning
message. The information objects are XI1/MM0/G and XI2/MM0/G.
Warning: Failed to get delay from pin XI1/MM0/G (net clk) rising to
XI2/MM0/G (net z) falling, unable to trace further. (DELC-003) @&#
[net=clk, inst=XI1, subckt=INV, edge=rising][net=z, inst=XI2, subckt=INV,
edge=falling]
In this case, NanoTime displays additional information for each of the two information
objects. Square brackets enclose the context information for one object.
NanoTime Attributes
An attribute is a string or value associated with an object in the design that carries some
information about that object. For example, the number_of_pins attribute attached to a cell
indicates the number of pins in the cell. You can write Tcl scripts to get attribute information
from the design database and generate custom reports about the design. See Chapter 17,
“Object Attributes” for the names and descriptions of NanoTime attributes and for more
information about how to work with attributes.
Attributes are read-only values that NanoTime assigns during execution. However, many
attributes obtain their values from variables or command options that you specify.
Chapter 1: Overview
The NanoTime Shell Interface 1-29
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
To see a list of available attributes, use the list_attributes command with the
-application option:
nt_shell> list_attributes -application
To generate a report of attributes and their values associated with specific objects in the
design, use the report_attribute command with the -application option, as shown
here for a list of nets:
nt_shell> report_attribute [get_nets {in}] -application
To get a specific attribute of a specific object, use the get_attribute command with
arguments for the object and the attribute, as follows:
nt_shell> get_attribute Sn1 total_capacitance_fall_max
0.039744
To find and operate on targeted groups of attributes, use nested commands as shown in the
following example. The example finds the nets with a name prefix of Sn, gets the value of
the maxcap attribute, and reports the net names and corresponding maxcap values.
foreach_in_collection snets [get_nets Sn*] {
set maxcap [get_attribute $snets \
total_capacitance_fall_max]
set netname [get_attribute $snets full_name]
echo "total cap. fall max of net $netname is $maxcap"
}
NanoTime Documentation
If you need help, information is available from the following resources:
• Command information displayed with the help command
• Man pages displayed with the man command
• The NanoTime User Guide and NanoTime Tutorial
• Galaxy Custom Designer online help
• SolvNet articles
Chapter 1: Overview
NanoTime Documentation 1-30
NanoTime User Guide Version K-2015.12
The help command shows a list of all NanoTime commands, organized by command
group:
nt_shell> help
...
Default Command Group:
add_to_collection, all_clocks, all_inputs, all_instances
...
You can use wildcard characters to restrict the scope of the command list or to find the name
of a command that you cannot remember exactly. For example, to find all commands
containing the string “clock,” enter
nt_shell> help *clock*
...
create_clock # Create a clock object
create_gated_clock_timing_check # Create gated clock ...
create_generated_clock # Create a generated clock object
erase_clock_gate # Remove a clock gate structure ...
...
For a concise description of a command, enter help with the command name:
nt_shell> help set_input_delay
set_input_delay # Set input delay on ports or pins
To see the full command syntax, including options and arguments, use the -verbose option:
nt_shell> help -verbose set_input_delay
set_input_delay # Set input delay on ports or pins
[-clock clock_name] (Relative clock)
[-clock_fall] (Delay is relative to falling edge)
[-level_sensitive] (Delay is from closing edge ...
[-asynchronous] (Delay is asynchronous)
[-rise] (Specifies rising delay)
...
The help -verbose command and the man page provide the most complete lists of
options for a command. The user guide describes the most important or most complex
options, but it does not describe every option for a command.
An alternate method to display the same information is to enter the command name directly
and use the -help option:
nt_shell> set_input_delay -help
set_input_delay # Set input delay on ports or pins
[-clock clock_name] (Relative clock)
[-clock_fall] (Delay is relative to falling edge)
[-level_sensitive] (Delay is from closing edge ...
[-asynchronous] (Delay is asynchronous)
[-rise] (Specifies rising delay)
...
Chapter 1: Overview
NanoTime Documentation 1-31
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Chapter 1: Overview
NanoTime Documentation 1-32
NanoTime User Guide Version K-2015.12
Many commands can be executed only during specific phases of the analysis flow. The
“Command Phasing” section of each command man page describes the phases during
which the command can be executed. If you attempt to execute a command during a phase
in which the command is not allowed, NanoTime issues a warning message.
NanoTime documentation sometimes uses a different naming convention to describe a
point in the analysis flow. The analysis state is named for the most recently executed
phase-completion command. For example, NanoTime enters the “netlist-linked” state after
the link_design command. Man pages sometimes use this terminology.
Chapter 1: Overview
The NanoTime Analysis Flow 1-33
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Start NanoTime
Execute startup scripts
Actions:
State: Phase:
Startup-complete Netlist Set up environment
Read in design
Read technology data
link_design
match_topology
check_topology
check_design
extract_model
trace_paths
characterize_context
Chapter 1: Overview
The NanoTime Analysis Flow 1-34
NanoTime User Guide Version K-2015.12
Netlist Phase
The netlist phase is the first phase of an analysis. NanoTime reads in the design and
technology data and builds an in-memory representation of the design for analysis.
Figure 1-4 shows the steps performed within this phase.
Figure 1-4 Netlist Phase
link_design
You can set variables that affect the linking process. For example, the search_path
variable specifies a list of directories from which to read the design and library files. The
library_path variable specifies where and in what order to look for SPICE library files.
The link_path variable specifies where to look for design files and library files.
Transistor models used for simulation can come directly from SPICE model files or external
compact model files.
For a large design, you can use timing models rather than complete netlists to represent
blocks in the hierarchy. You can use timing models created by NanoTime or by external
tools.
The link_design command resolves all references between different modules in the
hierarchy and builds an internal representation of the design for timing analysis. The
link_design command reports any problems such as mismatches between subcircuits or
cells with no definition.
Chapter 1: Overview
The NanoTime Analysis Flow 1-35
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
After the design has been successfully linked, you can get specific information about input
or output ports, cells, transistors, nets, connections, and so on using reporting commands
such as the report_port, report_cell, and report_net commands.
Figure 1-5 shows the steps typically performed in the clock propagation and topology
recognition phase.
You need to specify the clocks in this phase because NanoTime needs clocking information
to identify latches and other clocked structures. You must specify the clock properties and
the clock network timing characteristics. You can optionally postpone specifying some
timing characteristics until the timing constraint phase, just before the check_design
command.
You can optionally specify case analysis conditions (set_case_analysis) and logic
constraints (set_logic_constraint) in this phase to help the structure recognition
process. Otherwise, you can set these conditions later, in the timing constraint phase.
After the clocks have been specified, you can use the match_topology command to
perform automated topology recognition. This command propagates the clocks from their
defined source locations and recognizes circuit structures based on their topology. The
command marks those structures by assigning attribute values to the design objects.
After the match_topology command, you can use the report_topology command and
other reporting commands to find out about the structures that have been recognized. You
can get detailed reports on the clocks and topology of the design, such as the reason a node
was not marked as a clock or the function of a specific transistor.
The types of structures that can be recognized and reported include:
clock_gate flip_flop register
cross_coupled mux tgate
cross_coupled_pmos precharge turnoff
feedback pulldown weak_pullup
inverter pullup xor
latch ram differential_synchronizer
Chapter 1: Overview
The NanoTime Analysis Flow 1-36
NanoTime User Guide Version K-2015.12
Topology recognition
additions and corrections Report topology
structures recognized
Topology recognition
additions and corrections
check_topology
The reports identify places in the design where structures in the design are not recognized
correctly. In that case, you need to manually specify the structures so that NanoTime can
recognize them. There are several ways to help NanoTime to correctly recognize structures:
• Use the mark_* commands (for example, mark_latch and mark_mux) to manually
mark the presence of structures in the design. You can use the foreach_match
command to automatically search through the design for matching subcircuits (by name)
or patterns (by SPICE circuit pattern) and mark each occurrence with mark_*
commands. You can read in patterns for matching with the read_pattern command.
• Use the erase_* commands (for example, erase_latch and erase_mux), in
conjunction with the foreach_match command, to cancel and override automatic
recognition of structures in the design.
Chapter 1: Overview
The NanoTime Analysis Flow 1-37
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
• Guide clock propagation forward or backward from specified points in the design with the
mark_clock_network command.
• Specify the signal direction in situations where the direction is ambiguous, using the
set_port_direction or set_transistor_direction command.
• Where applicable, specify fixed logic conditions at specific ports or pins by using the
set_case_analysis command, or specify logic constraints at specific nets by using the
set_logic_constraint command.
After you specify the circuit structures, signal direction, constant logic values, and logic
constraints, the match_topology and report_topology commands should accurately
report the actual circuit structures in the design. At this point, you use the check_topology
command to perform a final topology check and finish the topology recognition phase.
Timing Constraints
To perform timing analysis, NanoTime needs information about the timing constraints.
The most common types of constraints are the following:
• Clock characteristics specified with the create_clock command.
• Input delays and output delays specified with the set_input_delay and
set_output_delay commands.
Also needed before the check_design command are the transistor models specified with
the set_technology command.
Chapter 1: Overview
The NanoTime Analysis Flow 1-38
NanoTime User Guide Version K-2015.12
When all constraints have been specified, you conclude this phase with the check_design
command, which checks the design for proper structure in the context of all timing
constraints that have been set. The command reports any inconsistencies or other structural
problems, which you must fix before you can proceed to the next phase.
Figure 1-6 shows the steps typically performed in the timing constraint specification phase.
Figure 1-6 Timing Constraint Specification Phase
check_design
Chapter 1: Overview
The NanoTime Analysis Flow 1-39
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Path Tracing
After you specify all constraints and successfully run the check_design command, you can
proceed with the timing analysis.
Figure 1-7 shows the steps typically performed in the path tracing phase.
Figure 1-7 Path Tracing Phase
Model environment
Specify analysis parameters
setup
The trace_paths command performs static timing analysis. It is the most common type of
NanoTime analysis and is the most computation-intensive part of a typical analysis session.
To perform this analysis, the tool breaks up the design into discrete units, analyzes those
units to characterize their timing, and traces paths through the design. The most critical
timing paths are saved in a database. The execution of the trace_paths command is
typically the most computation-intensive step in an analysis session.
There are several path tracing options that you can control by using the trace_paths
command options or by setting variables before you use the trace_paths command. These
options include the types of paths traced (minimum, maximum, or clock), the numbers and
types of paths stored in the path database, the latch transparency rules, and the
determination of path startpoints and endpoints.
The extract_model command creates a timing model in .lib or .db format for the current
design. This model can be used for timing analysis at a higher level of hierarchy in the
NanoTime or PrimeTime tools. Using timing models is much more efficient than analyzing a
single large, flattened design at the top level.
The characterize_context command captures the timing context of a subdesign within a
higher-level design. This context information includes clock information, input arrival times,
output delay times, timing exceptions, input drives, and capacitive loads. This information
can be used to set the constraints for module-level logic optimization in the Design Compiler
tool or module-level timing analysis in the NanoTime or PrimeTime tools.
Chapter 1: Overview
The NanoTime Analysis Flow 1-40
NanoTime User Guide Version K-2015.12
Analysis Reporting
After successful completion of the trace_paths command, you can get a variety of design
and timing reports by using commands such as report_paths, report_constraint, and
get_timing_paths. Figure 1-8 shows the steps typically performed upon completion of
timing analysis.
Figure 1-8 Analysis Reporting Phase
The report_paths command is commonly used to generate reports after path tracing. It
gets the timing information from the database without performing any additional path tracing
or simulation. You can choose the level of detail and the number of paths reported, as well
as the scope of the design to report. A typical report lists the worst-case paths in order of
increasing slack, starting with the worst-case path. For further analysis, you can write out a
SPICE netlist file that represents a selected worst-case timing path.
If design errors or timing violations are reported, you should first determine whether they are
caused by true timing problems in the design or by incorrectly specified constraints such as
false paths, multicycle paths, or same-phase and no-same-phase transparency recognition.
You can debug and fix problems by using a variety of methods. A Tcl script is often used to
perform complex or repetitive tasks. If necessary, you can go back in the flow to an earlier
phase and repeat the analysis process, using different parameters or design data.
Chapter 1: Overview
The NanoTime Analysis Flow 1-41
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Timing Paths
NanoTime analyzes the timing of each path in the design, from startpoint to endpoint. The
startpoint is a place in the design where data is launched by a clock edge. The data
traverses combinational logic and transparent latches in the path and is captured at the
endpoint by another clock edge. The locations of startpoints and endpoints in the design are
determined by topology recognition.
The startpoint of a path is a clock pin of a sequential element, or possibly an input port of the
design (because the input data can be launched from some external source). The endpoint
of a path is a data pin of a sequential element, or possibly an output port of the design
(because the output data can be captured by some external sink).
Chapter 1: Overview
Static Timing Analysis Overview 1-42
NanoTime User Guide Version K-2015.12
Figure 1-9 shows an example of a simple design and the data paths contained in the design.
Figure 1-9 Timing Paths
CLK
Logic
Path 4
In this figure, each logic cloud represents a combinational logic network. Each path starts at
a data launch point, passes through some combinational logic (and possibly transparent
latches), and ends at a data capture point:
• Path 1 starts at an input port and ends at the data pin of a sequential element.
• Path 2 starts at the clock pin of a sequential element and ends at the data pin of a
sequential element.
• Path 3 starts at the clock pin of a sequential element and ends at an output port.
• Path 4 starts at an input port and ends at an output port.
A combinational logic cloud might contain multiple paths, as illustrated in Figure 1-10.
NanoTime uses the longest path to calculate a maximum delay or the shortest path to
calculate a minimum delay.
Chapter 1: Overview
Static Timing Analysis Overview 1-43
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Shorter path:
2 gate delays
Longer path:
3 gate delays
In addition to the data paths just described, NanoTime considers other types of paths for
timing analysis, such as the following:
• Clock path (a path from a clock input port or cell pin, through one or more buffers or
inverters, to the clock pin of a sequential element) for data setup and hold checks
• Clock-gating path (a path from an input port to a clock-gating element) for clock-gating
setup and hold checks
Data path
A
D Q Logic D Q
CLK
Clock path
CLKOFF
Clock-gating path
Chapter 1: Overview
Static Timing Analysis Overview 1-44
NanoTime User Guide Version K-2015.12
Constraint Checking
After NanoTime determines the timing paths and calculates the path delays, it can check for
violations of timing constraints, such as setup and hold constraints.
A setup constraint specifies how much time is necessary for data to be available at the input
of a sequential device before the clock edge that captures the data in the device. This
constraint enforces a maximum delay on the data path relative to the clock path.
A hold constraint specifies how much time is necessary for data to be stable at the input of
a sequential device after the clock edge that captures the data in the device. This constraint
enforces a minimum delay on the data path relative to the clock path.
In addition to setup and hold constraints, NanoTime can also check data-to-data constraints,
clock-gating setup and hold constraints, and minimum pulse width for clock signals.
The amount of time by which a violation is avoided is the slack. For example, for a setup
constraint, if a signal must reach a cell input at no later than 8 ns and is determined to arrive
at 5 ns, the slack is 3 ns. A slack of 0 means that the constraint is just barely satisfied. A
negative slack indicates a timing violation.
NanoTime is typically used to analyze high-performance circuits, such as microprocessors
and DSP chips, that use transparent latches. Latch-based designs can use multiple clocks
with different phases to control successive registers in a data path.
For example, consider the two-phase, latch-based path shown in Figure 1-12. All three
latches are level-sensitive, with the gate active when the G input is high. L1 and L3 are
controlled by PH1, and L2 is controlled by PH2. A rising edge launches data from the latch
output, and a falling edge captures data at the latch input. In this example, consider the latch
setup and delay times to be zero.
Figure 1-12 Latch-Based Paths
Setup 1
L1 L2 Setup 2 L3
D Q Combinational D Q Combinational D Q
logic logic
G G G
PH1
PH2
Chapter 1: Overview
Static Timing Analysis Overview 1-45
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Figure 1-13 shows how NanoTime performs setup checks between these latches. For the
path from L1 to L2, the rising edge of PH1 launches the data. The data must arrive at L2
before the closing edge of PH2 at time = 4. This timing requirement is labeled Setup 1.
Figure 1-13 Setup Checks in a Latch-Based Path
PH1L1
Setup 1
PH2L2
Setup 2b
Setup 2a
PH1L3
0 1 2 3 4 5 6
By default, NanoTime assumes that the path from L1, through L2, and arriving at L3 occurs
within a single cycle. Therefore, it checks for the arrival of data at the next closing edge at
L3, at time = 2. This is labeled Setup 2a in the figure. It is an even more restrictive check
than the path from L1 to L2.
If L3 is designed to capture data in the next cycle rather than the same cycle, you should
specify next-cycle checking behavior. In that case, NanoTime checks for the arrival of data
at the closing edge of the next cycle, at time = 6. This is labeled Setup 2b in Figure 1-13.
To perform hold checking, NanoTime considers the launch and capture edges relative to the
setup check. It verifies that data launched at the startpoint arrives late enough not to be
Chapter 1: Overview
Static Timing Analysis Overview 1-46
NanoTime User Guide Version K-2015.12
captured by the previous capture edge (the capture edge just before the one at which the
setup check is performed). This is shown in Figure 1-14.
Figure 1-14 Hold Checks in a Latch-Based Path
PH1L1
PH2L2
PH1L3
Setup 2a
(same-cycle check)
0 1 2 3 4 5 6
Chapter 1: Overview
Static Timing Analysis Overview 1-47
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Chapter 1: Overview
Static Timing Analysis Overview 1-48
2
Netlist Data and Analysis Setup 2
The first step in timing analysis is to load the design data, including the netlist, technology
files, library-based timing models, and parasitic data.
This chapter includes the following sections:
• Design Data in the NanoTime Analysis Flow
• Path Variables
• Netlist Registration
• Design Linking
• Using Timing Models
• Defining the Voltage Environment
• Design Reporting
• Parasitic Data
2-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Startup
link_design
SPICE models
Parasitics
Define voltage
.lib [Link] libraries
environment
check_design
Path Variables
Before you read in the netlist data, you should specify the directory paths in which the data
files are stored. Then it is not necessary to specify absolute paths of files when you use
commands that read in data. The search_path and link_path variables specify where
to obtain the data files for reading and linking the design.
Set the link_path variable with the set command. The argument value should be an
asterisk followed by a list of cell library names. Delimit each element with a space and
enclose the list in double quotation marks. For example,
nt_shell> set link_path "* [Link]"
* [Link]
In this example, when the link_design command is executed, NanoTime first looks for
cells in loaded libraries and then looks in the library called [Link] in the directories
specified by the search_path variable.
Netlist Registration
Each analysis flow requires a register_netlist command that contains, at a minimum,
the top-level design netlist. You can optionally include more than one file in this command.
If you set the link_path and search_path variables, you only need to register the top
design. At design linking, NanoTime automatically finds the other netlist files and libraries if
they are located in the specified paths.
When you execute the register_netlist command, NanoTime verifies the existence of
all referenced files and records the file names in the registry. However, the tool does not
read the files or check their contents. The netlist files are not used until the link_design
command.
The -format option specifies the format of the netlist file to be registered, such as spice or
verilog. If you do not use the -format option, the command can assumes formats
according to the file name extension: .sp for SPICE and .v for Verilog. You can register
multiple files in different formats and use wildcard characters to register multiple files.
A netlist can be a plain ASCII text file or an ASCII file that has been compressed with gzip.
Compressed files must have .gz as the file name extension.
Each file can be specified with an absolute path (starting with a slash character) or a relative
path. When you specify a relative path, NanoTime searches for the files in the directories
specified by the search_path variable.
After the files have been registered, use the list_netlists command to view the netlist
registry. To remove netlist files from the registry, use the remove_netlist command.
Design Linking
After the netlist files have been registered, use the link_design command to build a
representation of the design for analysis. The design linking operation performs a
name-based resolution of hierarchical references for the design.
A number of variables affect the behavior of the link_design command, as described in
the following sections. For more information about specific variables, see the man pages.
You must make changes to the link variables before executing the link_design
command.
This section contains the following topics:
• The link_design Command
• Current Design and Current Instance
• Design Units
• Pin, Transistor, and Net Naming Conventions
• Defining Ports for SPICE Netlists
• Handling Special Devices
• Linking Encrypted Device Models
• Linking Designs With Embedded Parasitics
• Linking Designs with Models That Contain Parasitics
By default, the case sensitivity of the link operation is determined by the source of the
objects being linked. You can change this behavior by setting the link_case variable. The
variable default is an empty string, which results in case-sensitive linking without case
shifting. Set the variable to upper or lower to shift all names to uppercase or lowercase.
All subsequent references to node and pin names must be made in the specified case.
If the link_design command fails to resolve one or more references, first determine and
correct the source of the problem, then run the link_design command again. Failures are
typically caused by missing libraries or designs, incorrectly specified link_path or
search_path variables, or a file that does not have read permission.
By default, the hierarchy separator character in NanoTime is the period character. If you
want to use a single period “ . ” or double period “ .. ” to represent the current or higher-level
instance, you must set the hierarchy separator character to a different character such as a
slash. Use the following command:
nt_shell> set hierarchy_separator /
You can use the current_instance command to move up and down the design hierarchy:
nt_shell> current_design TOP
{"TOP"}
nt_shell> current_instance U1
U1
nt_shell> set hierarchy_separator /
/
nt_shell> current_instance "."
U1
nt_shell> current_instance U3
U1/U3
nt_shell> current_instance "../U4"
U1/U4
nt_shell> current_instance
Current instance is the top-level of design 'TOP'.
Design Units
The following global variables specify the sizes of the measurement units of a design:
lib_time_unit
lib_capacitance_unit
lib_voltage_unit
lib_resistance_unit
lib_current_unit
NanoTime places the unit specifications into the built-in library (the in-memory
representation of the design) when you execute the link_design command. When the tool
reads in or writes technology data, data is scaled to match the specified unit sizes. These
variables must be set before you execute the link_design command.
After the design has been linked, you can report the design unit sizes with the
report_design command, as in the following example.
nt_shell> report_design
...
Design Attribute Value
- ------------------------------ -------------
Units:
Time Unit 1 ns
Capacitance Unit 1 pf
Voltage Unit 1 V
Resistance Unit 1 kohm
Current Unit 1 mA
Width/Length Unit 1 um
Area Unit 1 um square
The values shown in this example are the variable default settings. The Width/Length and
Area units come from the technology data and cannot be set manually.
NanoTime recognizes the following unit sizes:
• Time – 1ps, 10ps, 100ps, and 1ns
• Capacitance – 1ff, 10ff,100ff, and 1pf
• Voltage – 1mV, 10mV, 100mV, and 1V
• Resistance – 1ohm, 10ohm, 100ohm, and 1kohm
• Current – 1uA, 10uA, 100uA, 1mA, 10mA, 100mA, and 1A
Using a large design unit might cause small values to lose precision. For example, a current
value of 0.23759 mA would become 237.59 uA if the current unit specified in the
lib_current_unit variable is set to 1uA. In this case, no information is lost. However, if the
specified current unit is set to 1A, the value becomes 0.000238 A, losing some digits of
precision.
This issue is especially important if you are creating composite current source (CCS)
models. You must verify that your lib_current_unit variable setting does not have an
adverse effect on the accuracy of current values stored in the model. For best results, use a
value of 1uA for the lib_current_unit variable when you are create CCS models.
Table 2-1 shows the commands that support user-defined units. Other commands relating
to time, capacitance, voltage, resistance, and current support only the default units.
Table 2-1 Command and Argument Pairs That Support User-Defined Units
Command Argument
set_max_delay delay_value
set_min_delay delay_value
The defaults of the capacitor and resistor pin names are term1 and term2, as seen in the
variable names. The diode pin names default to ANODE (the link_diode_base_pin_name
variable) and CATHODE (the link_diode_emitter_pin_name variable). The defaults of the
transistor pin names are b for bulk, d for drain, g for gate, and s for source.
The default of the link_nmos_alias variable is the "*nfet* n* *nch*" string. During
linking, NanoTime recognizes a transistor as an NMOS transistor if its cell name starts with
the letter n or contains nfet or nch. If your netlist uses any other naming convention to
identify NMOS transistors, specify that convention in the variable. For example,
nt_shell> set link_nmos_alias "nch N n NCH NMOS"
Similarly, the default of the link_pmos_alias variable the "*pfet* p* *pch*" string.
The create_port command is supported only at the top level of a design. NanoTime issues
a warning message when the command is used in any other location, as follows:
Warning: Net Xareg.hld11 is not a top-level design net. (CMDS-108)
In this case, NanoTime analysis continues. However, using the create_port command on
an internal net is not a supported usage and accuracy is negatively affected.
Behavioral Resistors
By default, behavioral resistors (voltage-controlled resistors) in the design are converted
into constant value parasitic resistors during design linking. You can ignore all behavioral
resistors by setting the rc_enable_behavioral_resistor_conversion variable to false.
You can specify a global voltage to use for converting behavioral resistors into constant
value resistors with the rc_behavioral_resistor_controlling_voltage variable. The
default of this variable is -1.0, in which case the controlling voltage is set to the value of the
oc_global_voltage variable. If the oc_global_voltage variable is not set, the default rail
voltage is used.
Behavioral resistors in parasitic netlists are not supported.
When embedded parasitics exist in the netlist, you must address incomplete nets by using
the complete_net_parasitics command. For more information, see Completing Partially
Annotated Nets.
A library file can be specified as an absolute path (starting with a slash character) or a
relative path. When you specify a relative path, NanoTime searches for each file in each
directory listed in the search_path variable and uses the first one found. You can use
wildcard characters to specify multiple files.
Each file can contain one library object. To report the library objects after the files are
loaded, use the list_libs command.
In the following example, the file [Link] is read in from the /libs/cmos directory, which is
included in the search_path variable.
nt_shell> set search_path "/libs/cmos"
/libs/cmos
nt_shell> set link_path " * mycell_lib.db $link_path"
* mycell_lib.db $link_path
nt_shell> read_library [Link]
Loading db file '/libs/cmos/[Link]'
Four variables are available to specify preferred models, as shown in Table 2-2.
Substitution based on subcircuit names means that for each block matching a listed name,
NanoTime uses the identically named .db model in place of the netlist. In the following
example, NanoTime uses the [Link] timing model rather than the regblk1 netlist for
each block named regblk1 in the design:
nt_shell> set link_prefer_model {regblk1}
Substitution based on instance names means that for each block having an instance name
matching a listed name, NanoTime uses the .db model having the same name as the cell
name. In the following example, NanoTime uses the model with the matching name for block
instances U1 and U2, each of which could be an instance of cell regblk1:
nt_shell> set link_prefer_model_inst {U1 U2}
For position-based port mapping, NanoTime assumes that the ports are defined in the netlist
in the same order that the ports are defined in the timing model, regardless of naming
conventions. For name-based port mapping, NanoTime matches the port names in the
netlist to the port names in the timing model, regardless of the order in which the ports are
defined. If there is a conflict between position-based and name-based variable settings,
NanoTime uses position-based port mapping.
The list_libs and report_lib commands display minimum and maximum library
information, as follows:
nt_shell> list_libs
Library Registry:
builtin_elements builtin_elements:None
m fast /data/CL180G/libcell/[Link]:fast
slow /data/CL180G/libcell/[Link]:slow
M typical /data/CL180G/libcell/[Link]:typical
1
nt_shell> report_lib typical
...
Operating Conditions:
Name Process Temp Voltage
--------------- --------- --------- ---------
typical 1.0000 25.0000 1.8000
Min Library:
/data/CL180G/libcell/[Link]:fast
...
Lib Cell Attributes
--------------- ----------
OAI211X0 --
...
The list_libs command reports the max-min relationship using the uppercase letter “M”
to indicate the maximum library and lowercase “m” to indicate the minimum library. The
report_lib command shows any minimum library associated with a maximum library.
In this example, the cells were characterized using thresholds at 30 to 70 percent because
slew_derate_from_library is set to 1.0.
In this example, the new range is twice the range found in the library, centered at the same
value of 50 percent, which results in a new range of 10 to 90 percent.
If a vendor specifies infeasible values for the slew_derate_from_library parameter and
the trip points, NanoTime is not able to compute the slew correctly. For example, this could
occur if the slew_derate_from_library parameter is set to 0.5, the library parameter
slew_lower_threshold_pct_fall is 10, and the library parameter
slew_upper_threshold_pct_fall is 90.
Both libraries contain tables for three capacitance values, one of which is 0.00354 pf; this
value is needed for the example in Figure 2-2. The values of the cell_fall and
fall_transition parameters for this capacitance appear in Table 2-3 and Table 2-4. The
values are the same for both libraries.
Table 2-3 Values of cell_fall Parameter for One Output Capacitance
In the circuit shown in Figure 2-2, an input transition of 0.3 ns at 20 to 80 percent thresholds
is applied to the input port in. The capacitance on net out is 0.00354 pF.
Using model_1-[Link]
When model_1-[Link] is used, the 0.3 ns transition at 20 to 80 percent is converted to a 0.2 ns
transition at 30 to 70 percent by interpolation. The delay (fall) on net out is determined to be
0.54583 ns and the transition time (fall) is 0.100 ns, based on the values in Table 2-3 and
Table 2-4 that correspond to a cell_rise value of 0.2 ns. Since the transition time of 0.1 ns
is at 30 to 70 percent, the full transition time is 0.25 ns (reported under the column heading
Ftrans), determined by extrapolation to the rail voltages.
Figure 2-2 Threshold Applied to Input Port
80%
70% 70%
30%
in out 30%
20%
0.2 ns 0.1 ns
0.3 ns 0.25 ns
Using model_0-[Link]
With 30 to 70 percent thresholds and the value of the slew_derate_from_library
parameter set to 0.5, the effective thresholds of library model_0-[Link] are 10 to 90 percent.
When model_0-[Link] is used, as shown in Figure 2-3, the 0.3 ns transition at 20 to 80 percent
is extrapolated to a 0.4-ns transition at 10 to 90 percent. The delay (fall) on net out is
determined to be 0.66370 ns and the transition time (fall) is 0.400 ns, based on the values
in Table 2-3 and Table 2-4 that correspond to a cell_rise value of 0.4 ns. Since the
transition time 0.4 ns is at 10 to 90 percent, the full transition time (FTrans) is 0.500 ns by
extrapolation to the rail voltages.
Figure 2-3 Threshold Applied to Input Port
90% 90%
80%
in out
20%
10% 10%
0.3 ns
0.4 ns
0.4 ns
0.5 ns
When a library includes the slew_derate_from_library parameter, and you also have
defined the rc_slew_derate_from_library NanoTime variable, the library parameter has
a higher priority. The rc_slew_derate_from_library variable is applied only when the
slew_derate_from_library parameter is not defined in the library, or its value is 1.0.
In addition to the slew derate factors, there are three ways to specify lower and upper slew
thresholds, listed in order of precedence:
1. Using parameters from the timing model
slew_lower_threshold_pct_fall
slew_upper_threshold_pct_fall
slew_lower_threshold_pct_rise
slew_upper_threshold_pct_rise
When using a timing model, however, both global and local thresholds are ignored. Only
thresholds from the .lib or .db files are considered.
When there are multiple .lib or .db files, each cell uses the slew_derate_from_library
parameter value from the library it comes from. Also, the transition time (Trans) and full
transition time (FTrans) are reported according to each cell’s convention. Therefore, the
ratio of transition times to full transition times could be different in a single path.
mp0
net1 out
in
Inv1
mn0
Suppose also that the threshold, slew derate variables, and set_measurement_threshold
commands are applied as shown:
set rc_slew_lower_threshold_pct_fall 10.0
set rc_slew_upper_threshold_pct_fall 90.0
set rc_slew_lower_threshold_pct_rise 10.0
set rc_slew_upper_threshold_pct_rise 90.0
set rc_slew_derate_from_library 0.88
set_measurement_threshold -slew_lower_threshold_pct_fall 40 [get_nets { net1 out }]
set_measurement_threshold -slew_lower_threshold_pct_rise 40 [get_nets { net1 out }]
set_measurement_threshold -slew_upper_threshold_pct_fall 60 [get_nets { net1 out }]
set_measurement_threshold -slew_upper_threshold_pct_rise 60 [get_nets { net1 out }]
On net in, the thresholds are 10 to 90 percent. The ratio of transition and full transition
times is 0.8 based on the threshold variables. On net1, thresholds are 10 to 90 percent and
the ratio of transition and full transition times is 0.8 because the thresholds are 30 to 70
percent and the slew_derate_from_library = 0.5 from the library data. On net out,
thresholds are 40 to 60 percent and the ratio of transition and full transition times comes
from the set_measurement_threshold commands.
The default for both of these variables is false, causing CCS modeling information to be
ignored and only the nonlinear delay model (NLDM) information to be used. Setting these
variables to true causes NanoTime to use the CCS models for delay calculation if they are
available. Otherwise, the NLDM models are used.
When both variables are set to true, NanoTime performs CCS delay calculation on any net
with RC parasitics. The delay calculation is consistent with that of the PrimeTime tool,
except that analysis is limited to a single operating condition. Multicorner-multimode
analysis and scalable CCS models are not supported.
General Procedure
This procedure illustrates typical usage of the commands and variables that define the
voltage environment. Other steps involved in reading and linking designs are not included.
You might need to use different combinations of steps for different designs.
1. Add power supply and ground net names to the link_vdd_alias and link_gnd_alias
variables.
2. For accurate transistor capacitances, include in the voltage directive of a SPICE
technology file all of the supply voltages that a transistor of that type might encounter.
3. Set the tech_default_voltage variable to provide a supply voltage to use when a
SPICE technology file does not include a voltage directive.
4. Use the highest supply voltage when defining the gate and drain voltage sweeps in
SPICE technology files.
5. Set the oc_global_voltage variable for use as the global default voltage (typically
either the largest voltage or the most common voltage).
6. Execute the link_design command.
7. Use the set_supply_net command to identify nets as being supply and ground nets if
they were not already defined by the link_vdd_alias and link_gnd_alias variables.
8. Use the set_supply_net command with the -virtual option to identify nets as virtual
supplies. (This option requires a NanoTime Ultra license.)
9. Use the set_voltage command to specify voltages on supply nets that were identified
with the set_supply_net command or whose voltages were not defined in the netlist.
Use the set_voltage command with the -min, -max, -min_clock, and -max_clock
options to specify voltages to use for minimum and maximum delay analysis. (These
options require a NanoTime Ultra license.)
[Link] use in timing analysis, use the set_input_transition command with the
-rail_voltage option to identify input ports that have switching voltages different from
the oc_global_voltage variable value.
11. For use in timing characterization, use the set_model_input_transition_indexes
command with the -rail_voltage option to identify input ports that have switching
voltages different from the oc_global_voltage variable value.
[Link] use in extracted timing models, set the model_apply_oc_global_voltage variable
to true to use the value of the oc_global_voltage variable instead of supply voltages
set with the set_voltage command.
[Link] with clock propagation and topology recognition operations.
To use other power supply and ground nets, append their names to the default lists in the
link_vdd_alias and link_gnd_alias variables before running the link_design
command. This process is especially important for designs containing back-biased
transistors where the bulk connection is driven by a different power supply net. Unresolved
power supply nets or ground nets might increase the runtime of the link_design,
match_topology, and check_topology commands.
For example, the following command adds vcc#1, vcc#2, and similar names to the default
supply voltage list:
nt_shell> lappend link_vdd_alias " vcc#*"
vdd vcc !vdd !vcc vdd! vcc! vdd1 vdd2 vdd# vcc#*
If power supplies are not defined in the netlist, use the set_supply_net command after the
link_design command to identify power supply nets and ground nets in the design. The
following commands identify all nets matching the v* name pattern as power supply nets and
all nets matching the gn* name pattern as ground nets:
nt_shell> set_supply_net v*
1
nt_shell> set_supply_net -gnd gn*
1
To specify nets in the design that are virtual supply nets, use the set_supply_net
command with the -virtual option. A virtual supply net is used like an actual supply net.
Typically, it is connected to a true supply or ground net through a single transistor
(sometimes called a sleeper transistor or power switch transistor) having a very low
resistance. A net cannot be defined as both a true supply and a virtual supply. A NanoTime
Ultra license is necessary to define a virtual supply net.
The voltage on a virtual supply net might be different from the true supply voltage due to IR
drop across the power switch transistor. Use the set_supply_net command to specify the
actual voltage on this net. If you do not set the voltage on a virtual supply net, NanoTime
includes the power switch devices in the simulation for each relevant stage in an attempt to
account for the IR drop. However, this is only an approximation because the true effect
depends on the dynamic behavior of all stages connected to the power switch transistors.
Use the remove_supply_net command to undo a supply net definition.
vdd2
vdd1 vdd3
However, for multivoltage designs, you should enable nonlinear waveform analysis to
accurately represent the waveforms between voltage domains. For more information, see
Nonlinear Waveform Analysis.
The following command applies to the level shifter circuit shown in Figure 2-6:
nt_shell> set_nonlinear_waveform -samples 11 -mode accurate \
[get_nets { out outb }]
vdd1
Mp1 Mp2
outb out
inn
in Mn1 Mn2
vss vdd2
vss
Complex multivoltage circuits require dynamic delay simulation for accurate results. For
more information, see Chapter 14, “Dynamic Simulation.”
Stage delays for multivoltage designs are measured at 50 percent of the supply voltage,
based on the output swing of each individual stage. If a stage has paths to more than one
supply voltage, the measurement is based on the supply voltage associated with that path.
This is also true for the slope, rise time, and fall time calculations.
Each channel-connected block can have only one supply voltage. If NanoTime detects more
than one supply voltage in a single stage, the tool issues an NTL-017 warning message and
chooses one voltage for the simulation. For best accuracy, specify all supply voltages
explicitly.
For multivoltage designs, you must use the -rail_voltage option whenever you use the
set_input_transition or set_model_input_transition_indexes command for all
cases where the voltages are different from the design default voltage. Also note that
different supply voltages cause transistors to have different calculated capacitances. To
calculate the correct lookup tables, include all supply voltage directives in the SPICE model
file. If a SPICE model file does not include a supply voltage directive, the value of the
tech_default_voltage variable is used.
Design Reporting
NanoTime provides the following commands for reporting the characteristics of a loaded
design:
• The report_cell command lists all cells in the current instance or displays information
about the nets and connected pins of specified cells.
• The report_design command reports the attributes of the current design, including
unit sizes and operating conditions.
• The report_hierarchy command lists the instance names in the hierarchy of the
design, block by block, down a specified number of levels.
• The report_lib command reports the unit sizes, operating conditions, and cells of the
currently loaded libraries.
• The report_net command lists the nets and their characteristics such as fanin, fanout,
port connections, pin connections, and capacitance.
• The report_port command lists the input and output ports and their characteristics
such as direction, capacitance, and input or output delay.
• The report_technology command reports the details of technology model entries in
the logic libraries, including operating conditions, transistor parameters, and transistor
lookup table indexes.
You can use these commands after the design is linked with the link_design command.
For more information, see the man page for each command.
Parasitic Data
Timing analysis is more accurate if parasitic information is included. Before routing, you can
use the set_load command to provide estimated capacitance values on nets. After
routing, you can use the read_parasitics command to back-annotate the design with a
parasitic device netlist generated by a parasitic extraction tool.
This section discusses how to work with parasitic netlists and back-annotation. For more
information about using the set_load command for prelayout timing analysis, see Output
Load Characteristics.
This section includes the following topics:
• Overview of Parasitic Back-Annotation
• Extraction Tool Setup to Generate Parasitic Netlist Files
• Using Parasitics in the NanoTime Flow
• Working With Parasitics Files
• Variables for Parasitic Data Analysis
• Detailed parasitic data consists of a set of resistors, capacitors, and subnodes for each
net. Each capacitor must be connected from a net or subnode to another net, subnode
or ground. NanoTime splits coupling capacitors into two separate capacitors, each
connected to ground. Each resistor must be connected from one net or subnode to
another. NanoTime ignores resistors that are connected to ground. The detailed RC
network must be complete, with connections to all components in the net. NanoTime
discards incomplete RC networks.
NanoTime can handle multiple resistors and capacitors between the same nodes. It adds
together the values of multiple capacitors connected to a node. Multiple resistors between
the same two nodes are kept separate and are considered during delay calculation.
NanoTime reduces complex annotated RC parasitics, thereby reducing the amount of data
and the analysis runtime. The tool combines or removes RC sections from each net to make
a simpler representation that has a path delay within a tolerance of the original delay of the
RC network. The tolerance for each net is based on the net’s RC parasitics. NanoTime
simplifies the parasitics of a net until the worst-case change in delay reaches the computed
tolerance. The simplification cannot cause the change in delay to exceed the tolerance.
• (Optional) If you plan to perform NanoTime signal integrity analysis, use the StarRC
COUPLE_TO_GROUND: NO command to retain coupling capacitances in the netlist. The
command default is YES, so you must include this command in the StarRC command file.
• (Optional) If the transistor device models contain transistors implemented in a .subckt
block (which is common for advanced process nodes), use the
HN_NETLIST_SPICE_TYPE: model_name X command to use the letter X as a prefix for
the devices.
• (Optional) If the design contains designed diode structures such as antenna diodes, use
the CONVERT_DIODE_TO_PARASITIC_CAP command to provide capacitance conversion
factors.
• Use the NETLIST_MERGE_SHORTED_PORTS: NO command to avoid merging ports. You
can leave the command out of the command file because the default is NO.
• Ensure that the NanoTime parasitics_xref_layout_instance_prefix variable
setting matches the StarRC XREF_LAYOUT_INSTANCE_PREFIX command setting. Ensure
that the NanoTime parasitics_xref_layout_net_prefix variable setting matches
the StarRC XREF_LAYOUT_NET_PREFIX command setting.
• (Optional) If you plan to enable rail contact resistance in the NanoTime analysis, use the
StarRC POWER_EXTRACT: DEVICE_LAYERS command to include the rail net parasitics in
the parasitics netlist. The command default is NO, so you must include this command in
the StarRC command file.
You can use the -complete_with option to complete any partially annotated nets. This
option is one of three methods to accomplish this goal. For more information, see
Completing Partially Annotated Nets.
8. (Optional) If your design includes fingered devices, set the
parasitics_enable_drain_source_swap variable to true. For more information, see
Handling Special Devices.
9. (Optional) If you plan to use the set_load command later in the flow to specify load
capacitance on specific ports or pins, set the parasitics_allow_spf_net_override
variable to true.
10.(Optional) Read device parameter files with the read_device_parameters command.
11. (Optional) Use the report_annotated_parasitics command to check the
annotations. For more information, see Checking and Reporting Annotated Parasitics.
12.(Optional) Use the complete_net_parasitics command to complete any partially
annotated nets. This command is one of three methods to accomplish this goal. For
more information, see Completing Partially Annotated Nets.
13.(Optional) If you want to include rail net parasitics in the analysis, set the
parasitics_enable_rail_contact_resistance variable to true. For more
information, see Using Contact Resistance in Delay Analysis.
14.(Optional) if you want to include RC delay between connected trigger devices in the
analysis, use the set_enable_input_spf_skew command. For more information, see
Including the Effects of Common Trigger Skew.
15.(Optional) If you plan to create a boundary cell timing model, set the
rc_reduction_exclude_boundary_nets variable to true to prevent the boundary
parasitics from being modified by the parasitic reduction operation.
In addition, you must set the timing_save_wire_delay variable to true. Setting this
variable also enables you to report wire delay values in path reports.
16.(Optional) Set other parasitics-related variables as needed. For more information, see
Variables for Parasitic Data Analysis.
[Link] the check_design command.
If you have not already used an option or command to resolve partially annotated nets,
use the -complete_with option.
The read_parasitics command can read parasitic data files in SPEF and DSPF formats.
SPEF and DSPF files can be in plain ASCII format or compressed with gzip.
Note:
All keywords in parasitic data files must be uppercase. This includes terms such as
*|DSPF, *|NET, *|P, and *|I (where * and | are the asterisk and vertical bar characters).
NanoTime issues an error message if it cannot parse a line in a parasitic data file.
Net and instance pin names in the design must match instance names in the parasitic data
file. For example, if you create the parasitic data file from a design using SPICE naming
conventions, the design name must also use SPICE naming conventions.
The back-annotated parasitic data replaces any existing settings made previously with the
set_load command. By default, parasitic data back-annotated with the read_parasitics
command cannot be changed by the set_load command. To allow it, set the
parasitics_allow_spf_net_override variable to true.
In some cases, parasitics are embedded in netlist cells, but there is also a top-level
parasitics file. In this case, the read_parasitics command must include the -increment
option to preserve the netlist parasitics.
For example, consider a design named Xtop with four blocks, as shown in Figure 2-7.
Blocks X1, X2, X3, and X4 are instantiations of subcircuits blk_1, blk_2, blk_3, and blk_4,
respectively.
The NanoTime commands to read the parasitics files are as follows:
nt_shell> read_parasitics -path X1 -increment blk_1.spef -format spef
nt_shell> read_parasitics -path X2 -increment blk_2.spef -format spef
nt_shell> read_parasitics -path X3 -increment blk_3.spef -format spef
nt_shell> read_parasitics -path X4 -increment blk_4.spef -format spef
nt_shell> read_parasitics [Link]
The -path options specify the relative paths from the current design to the hierarchical
instance names for which the parasitics files have been created. The -increment options
tell NanoTime to keep all previously annotated parasitic data on nets that are listed in the
SPEF file. The -increment option is not necessary when reading the top-level parasitics file
because it does not name nets included in the other files.
Figure 2-7 Example of Hierarchical Parasitic Annotation
Xtop
X1 X2
X3 X4
You can suppress this report by using the -quiet option of the read_parasitics
command.
The reset_design command removes all attributes from the current design, including
annotated parasitics.
After parasitics have been annotated on the design, NanoTime generates an annotation
report. You can generate the same report by using the report_annotated_parasitics
command. For example,
nt_shell> report_annotated_parasitics
...
The report shows the number of nets that have been annotated with detailed parasitics (RC
networks) and reduced parasitics (lumped capacitance). The report counts nets without
considering hierarchical crossings.
Nets that are missing both a global driver and a global load are counted as driverless nets.
The -check option verifies that all annotated networks are complete, with the driver of each
net connected through the RC network to the fanouts of the net. The -internal_nets and
-boundary_nets options restricts reporting to internal nets (nets connected only to cell
pins) or boundary nets (nets connected to ports). By default, both types of nets are reported.
Use the -list_annotated option to get a list of all nets that have been annotated, or the
-list_not_annotated option to get a list of all nets that have not been annotated. For
example,
nt_shell> report_annotated_parasitics -list_not_annotated
...
To restrict the report to one or more specified nets, list those nets in the command. For
example,
nt_shell> report_annotated_parasitics {n5* n61 n62}
Fingered Devices
If a parasitic data file contains fingered devices made by splitting transistors in the netlist,
you might need to enable recognition of those transistors. Fingered instances are supported
in NanoTime only if the fingered device or net names conform to the following syntax:
{schematic_device_name}{finger_char}{number}
{schematic_net_name}{finger_char}{number}
Examples of valid syntax are mn3@2 (for an instance) or net3@3 (for a net).
For fingered devices, NanoTime automatically creates duplicate transistors and assigns the
device data to them.
For fingered nets, NanoTime automatically creates a large resistor that connects from each
schematic net to its corresponding fingered net (for example, from net3 to net3@2). As a
result, both nets go into the same stage or cluster, but the large resistor prevents any
inaccuracy that would result from tying the two nets together directly.
By default, the finger character can be either @ or #. You can change this character by
setting the parasitics_fingered_device_chars variable. You must also set the
parasitics_enable_drain_source_swap variable to true to annotate parasitics on
fingered devices.
Diodes
For timing analysis, NanoTime converts diodes into capacitances and treats them as
parasitic elements in an embedded RC flow. However, the diode pins are still available for
back-annotation with parasitic data and the diode capacitance value can be overwritten.
Different parasitic extraction tools might use different pin names in the parasitic files. You
can specify diode pin names explicitly with the link_diode_base_pin_name (default
ANODE) and link_diode_emitter_pin_name (default CATHODE) variables.
NanoTime does not support corner-specific parasitics. Since diodes are treated as
capacitors, corner-specific diode back-annotation using different diode models is not
allowed.
C
C
You can optionally define a reduction factor that is applied to each new capacitor, by using
the -coupling_reduction_factor option of the read_parasitics command. For
example, if you specify a reduction factor of 0.5, each new grounded capacitor has half the
capacitance of the original cross-coupling capacitor. The default factor is 1.0.
RC RC
should not be inherited from a netlist transistor to post-layout fingered devices. The
default is an empty string.
• The parasitics_ground_incomplete_coupling_cap variable
This variable enables recognition of incomplete coupling capacitances in DSPF files.
By default, a coupling capacitance is defined between two nets whose parasitics are also
defined in the DSPF file. If the file contains the definition of only one of the two nets,
NanoTime ignores coupling capacitances between them. If you set this variable to true,
NanoTime recognizes an incomplete coupling capacitance and converts it to a ground
capacitance on the defined net.
• The parasitics_enable_annotation_to_embedded_rc variable
This variable enables back-annotation of parasitics to netlist resistors and capacitors.
Back-annotation does not replace the netlist RC values; it adds RC values to the existing
RC pins. Back-annotation to both primitive devices (such as R1 A B 12.8) and subcircuit
devices (such as XR1 A B rpoly l=3.57e-06 w=2e-06) is supported. The default is false.
You must set the following RC terminal variables correctly for accurate back-annotation:
link_resistor_term1_pin_name, link_resistor_term2_pin_name,
link_capacitor_term1_pin_name, and link_capacitor_term2_pin_name.
3-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
nt_shell> check_design
In this example, the [Link] file has the following lines to specify the process technology and
the SPICE model library file used for analysis:
*nanosim tech="voltage 1.00"
*nanosim tech="body_bias 0 1.02 0.02"
*nanosim tech="vds 0 1.02 0.02"
*nanosim tech="vgs 0 1.02 0.02"
*nanosim tech="delta_vt -.35 .35"
* TEMP = 85
.TEMP 85
* PROC = SS
.lib './../libs/tn90lp_v1.[Link]' SS
The check_design command implicitly reads the SPICE transistor models into a
technology, generates the transistor data lookup tables for the transistors used in the
design, and puts that information into another technology.
The following part of the check_design message indicates that the lookup tables have
been generated for all the transistors used in the design:
Information: 11032 out of 11032 transistors have all
transistor models linked to them. (TECH-003)
The name of the technology created by implicit reading of SPICE models is determined by
the tech_netlist_spice_model_name variable. The default for this variable causes the
technology to be named “typ.”
The list_technology command lists all the technologies that are available to use. In the
resulting report, the letter in the T column indicates the type of technology. The letter s
indicates a SPICE model template file read directly from a SPICE file, and the letter m
indicates a set of lookup table models generated from the template file.
nt_shell> check_design
The read_spice_model command lets you assign a technology name to the SPICE model
file you are reading. The set_technology command lets you specify by name which
technologies to use for analysis. You can specify up to four different technologies: one each
for minimum data tracing, maximum data tracing, minimum clock tracing, and maximum
clock tracing. NanoTime generates the transistor lookup models at the check_design
command, filling the type m technology with the models needed to analyze the design.
The check_design command checks for missing or improperly configured transistor
models. You can fix errors by reading additional models with the read_spice_model
command followed by the set_technology command.
You can use the list_technology and report_technology commands to get information
about the transistor models and sizes that have been used and modeled. To remove SPICE
models previously read in or to remove technology data lookup tables created from these
SPICE models, use the remove_technology command.
To specify macro models, see Setting the Technologies for Analysis.
For backward compatibility, the following forms of syntax in the SPICE model file are
accepted by NanoTime as equivalent directives:
*nanosim tech= "directive"
*epic tech= "directive"
• Model alias
The model_alias directive defines equivalent names for transistor models. This
directive can be useful when you have multiple technologies from different vendors that
define their models with names that are different from those in your netlist. For example,
to define the model names nch and nmos to be equivalent, use the following statement:
*nanosim tech= “model_alias nch nmos”
• Design voltage
The voltage directive specifies a list of supply voltages used in the design. NanoTime
uses these voltages only to calculate transistor capacitance values for the creation of
transistor model tables, not as supply voltages for timing analysis. If the voltage
directive is not present, the tool uses the tech_default_voltage variable, as discussed
in Defining the Voltage Environment.
For example, to define a single voltage supply of 1.2 volts, use the following statement:
*nanosim tech= “voltage 1.2”
• Voltage sweeps
The vds, vgs, and body_bias directives specify the end voltage and the voltage step
size for the sweeps used to generate the lookup tables for the drain-to-source,
gate-to-source, and body-to-source voltage tables. You can specify a finer resolution to
minimize interpolation error, or a larger end voltage to accommodate a larger voltage
swing, at the cost of more simulation time. For example, to set the VDS end voltage to
5.0 and the step size to 0.05 volts, use the following statement:
*nanosim tech= “vds 0 5.0 0.05”
If the circuit uses higher than normal voltages for body bias, you can set a larger sweep.
For example, to sweep the body voltage from 0 to 1.2 V with a step size of 0.1 V, use the
statement:
*nanosim tech= “body_bias 0 1.2 0.1”
In the absence of these directives, the end voltage is the supply voltage and the step size
is 1/50 of the supply voltage.
• extract_model -hspice_timing
• report_technology
• list_technology
It might be difficult to debug an analysis containing an encrypted device model due to the
modified output of these NanoTime commands. A good practice is to validate a model
before using it in encrypted form.
The following limitations apply to the use of encrypted models:
• Encrypted resistors, capacitors, and diodes are not supported.
• A protected model file cannot contain unprotected model files. If any part of the wrapper
models or model cards is encrypted, all models are considered to be encrypted.
• Encrypted model cards or wrapper models cannot appear in the same file as a
pseudo-top cell (an unnamed .subckt block used in place of a top cell to contain the root
portions of the design when a top cell does not exist).
• Multicorner flows are not supported.
• Elaborations of encrypted parameters are not protected (for example, using encrypted
.param statements with unprotected .model cards).
TMI models
TMI models support TSMC extensions for standard compact model for process
technologies of 45 nm and below. TSMC provides a single compiled TMI library (.so) to
which simulation tools can link during runtime. The TMI setup options are included in SPICE
model libraries. To use TMI models, make the following changes in the netlist or model file:
• Set .option tmiflag = 1 (or set .option tmiflag in the model file).
• Set .option tmipath =”$your_tmi_lib_path” for the path of the TMI .so library.
• Set .option macmod= <1|2|3> for the macro-model design for backward compatibility.
Table 3-1 lists the options for use with TMI models.
M to X .option Netlist instance name starts with M, but the TMI model of the same
mapping macmod = 1 device name refers to a macro model, not a transistor model.
X to M .option Netlist instance name starts with X, but the TMI model of the same
mapping macmod = 2 device name refers to an actual transistor model.
• For CMI models, add the following to your model file. If multiple statements are specified,
the last one is applied:
.option cmipath=’lib_path’
Set the path variable to point to the TMI (or CMI) .so library path. NanoTime searches for the
libTMImodel shared library (or libCMImodel library) in the tmipath/platform directories
(or cmipath/platform directories). Use the following guidelines:
• The specified lib_path can have only one path.
• If lib_path is an absolute path, NanoTime links to the library from lib_path/
platform.
For TMI models, follow these steps to enable automatic platform selection:
• Set .option tmipath= ‘/remote/snps/nt/tmi/lib’ to the model file.
• Place all [Link] files according to the platform as follows:
/remote/snps/nt/tmi/lib/SUN/[Link]
/remote/snps/nt/tmi/lib/SUN_64/[Link]
/remote/snps/nt/tmi/lib/RH/[Link]
/remote/snps/nt/tmi/lib/RH_64/[Link]
For CMI models, follow the same steps, but use the CMI path and model names.
To enable flexible instance parameter support, make the following change in the netlist or
model files:
.option process_dev_params=1
G G'
+ –
V GG = V DS
To change the gain value, use the -bvs_gain option with the set_transistor_parameter
command. Gain values are typically much less than 1.0.
Designs that use voltage-controlled voltage sources cannot use dynamic clock simulation or
dynamic delay simulation.
The list_technology command lists the technology source files that have been loaded
and are available for linking in NanoTime. Here is an example of a technology listing:
nt_shell> list_technology
Technology Registry
Attributes (T):
t - Tech data from techfile
m - Tech data from SPICE model
s - SPICE model
For each technology, the report shows the technology name, supply voltage, temperature,
NMOS transistor model name, PMOS transistor model name, technology attributes, and
model source file. The “Attributes” column uses the letter code t, m , or s to indicate the
type of technology:
• The letter t indicates a set of lookup models taken from a technology file (read with the
read_techfile command). This file type is now obsolete.
• The letter m indicates a set of lookup models generated by NanoTime from a SPICE
model template. The models are generated with the check_design command.
• The letter s indicates a SPICE model template read explicitly by the read_spice_model
command or implicitly by the check_design command.
The “Source file” column indicates the file from which the technology was obtained, which
could be a technology file or a SPICE model file. The notation <netlist> indicates that the
models were read in implicitly during linking by the link_design command.
The report_technology command reports the details of model entries in the
technologies. Here is an example of a technology report:
nt_shell> report_technology
Model Tech.
Name Name Volt Temp Width Length Delvto Mulu0 Total
----- ----- ----- ----- ------ ------- ------ ------ -----
nch typ 1.20 85.00 1.444u 0.130um 0.000 1.000 2
pch typ 1.20 85.00 1.444u 0.130um 0.000 1.000 4
For each technology model, the report shows the following information: the transistor model
name, technology name, voltage, temperature, channel width, channel length, delta
threshold voltage offset (an adjustment to the voltage threshold), electron mobility
adjustment multiplier, and the total number of transistor models.
The columns Width, Length, Delvto, and Mulu0 show the number of index values supported
by the technology, or the value itself if there is only a single value in the technology. The total
number of transistor models is the number of supported combinations of Width, Length,
Delvto, and Mulu0.
By default, the report_technology command reports all transistor models. To restrict the
scope of the report to a specific model name, technology name, voltage, or temperature, use
the -model, -name, -voltage, or -temperature option. To show the range of index values
(minimum and maximum) for Width, Length, Delvto, and Mulu0, use the -ranges option.
Use the -index option to list all index values.
The following command reports the technology model called pch and shows the width and
length index values:
nt_shell> report_technology -model pch -name typ -index
Tech.
Name Name Volt Temp Width Length Delvto Mulu0 Total
----- --------- ----- ------ ----- ------ ------- ------ ------
pch typ 1.70 85.00 21 2 0.000 1.000 42
To remove technology data that has been read in but is no longer needed, use the
remove_technology command.
The operating conditions (voltage, temperature, and process parameters) are determined
by the SPICE models or technology files invoked with the set_technology command.
Up to four separate technology settings are used for analysis:
• min – for minimum-delay (shortest) data paths
For a setup check, NanoTime uses maximum delays and longest paths for the launch clock
path and data path, and minimum delays and shortest paths for the capture clock path.
For a hold check, NanoTime uses minimum delays and shortest paths for the launch clock
path and data path, and maximum delays and longest paths for the capture clock path.
The set_technology command specifies which technologies (transistor models) to use for
which paths. In the command, you must specify the technologies for the paths in one of the
following three ways:
• A single technology, in which case NanoTime uses the same technology for all analysis.
For example,
nt_shell> set_technology typ
• Two technologies, one minimum and one maximum. NanoTime uses the worst-case
technology for each path segment in a timing check. This is the most conservative kind
of checking. For example,
nt_shell> set_technology -min MINp1 -max MAXp1
In this example, the two technologies are assigned to the four path types as follows:
min technology = MINp1
max technology = MAXp1
min_clock technology = MINp1
max_clock technology = MAXp1
• Up to four different technologies, one for each of the four path types, using the -min,
-max, -min_clock, and -max_clock options. For example,
nt_shell> set_technology -min MINp1 -max MAXp1 \
-min_clock MAXp1 -max_clock MINp1
Technology:
max_technology typ
min_technology typ
max_clock_technology typ
min_clock_technology typ
...
When you execute the check_design command, NanoTime links each transistor in the
design to a transistor model and reports the number of transistors linked, as shown here:
Linking transistor models...
Information: 11032 out of 11032 transistors have all
transistor models linked to them. (TECH-003)
During the linking process, NanoTime generates lookup models from SPICE model
templates as needed to fill the type “m” technologies reported by the list_technology
command.
If not all the transistors in the design are linked to models, you see a warning message
similar to the following:
Linking transistor models...
Warning: 478 out of 11032 transistors do not have all
transistor models linked to them. (TECH-002)
1
This warning can happen when you are using transistor models derived from technology
files, and no models are available models to match some of the transistors in the design.
To increase the usage of models derived from technology files, increase the allowable
difference between transistor parameter values in the design and the parameter values of
the models. To do this, set the tech_match_length_pct, tech_match_width_pct, and
tech_match_param_pct variables to nonzero values.
Before you can analyze the design, each transistor must have a linked model. The
check_design command verifies that this requirement is satisfied.
Macro models contain a wrapper subcircuit in the library. These models require special
handling, which is enabled when the link_enable_corner_specific_wrapper_subckts
variable is set to true. NanoTime usually detects the absence of macro models and sets the
variable to false. If you have added a wrapper to a non-macro model, it might be necessary
to manually set the variable to false.
When using macro models with multicorner analysis, in addition to specifying the SPICE
models with the read_spice_model command, you must specify a model as part of the
netlist as follows:
read_spice_model -name tt tech_tt.sp
read_spice_model -name tt1 tech_tt1_new.sp
register_netlist -format spice tech_tt.sp
The model specified in the register_netlist command does not need to be one of the
corners used in the analysis. The specified model makes it possible to find the transistor
cells. If NanoTime cannot correctly locate the transistors in the netlist, it might be necessary
to identify the models with the sim_transistor_wrapper_subckts variable.
This variable should be set to all possible macro model names in your model files:
set sim_transistor_wrapper_subckts "pmos nmos pmos_hv nmos_hv
FinFET Models
Multigate transistors, also known as FinFETs, provide advantages such as high speed and
low leakage current for advanced technology nodes. NanoTime supports FinFET designs
without any changes to the analysis flow.
N+ N+ N+ P N+
SiO2 insulator
In a conventional process technology, the P-type body of the NMOS transistor is held at the
ground voltage by means of a metal contact to the substrate. A PMOS transistor in this
technology (not shown in the diagram) is fabricated in an N-well, with the transistor body
held at the Vdd supply voltage by means of a metal contact to the N-well.
In a silicon-on-insulator process technology, the source, body, and drain regions of
transistors are insulated from the bulk substrate. The parasitic junction capacitance is
reduced because source and drain are insulated from the substrate. The transistor area is
also reduced because there is no need for metal contacts to N-wells used for making PMOS
transistors. The body of each transistor is typically left unconnected, but it can be tied to the
rail voltage or to the source node of the transistor where elimination of the floating-body
effect is desired. Body contacts are used only where needed because they increase the
layout area and decrease performance.
In an NMOS transistor, applying a positive voltage to the gate depletes the body of P-type
carriers and induces an N-type inversion channel on the surface of the body. If the insulated
layer of silicon is made very thin, the inversion layer fills the full depth of the body, and the
whole body behaves as an N-type conducting channel. A technology designed to operate
this way is called a “fully depleted” SOI technology. The thin body avoids a floating voltage,
but it has lower conductivity and longer switching times.
On the other hand, if the insulated layer of silicon is made thicker, the inversion region does
not extend the full depth of the body. A technology designed to operate this way is called a
“partially depleted” SOI technology. The undepleted portion of the body is not connected to
anything, so its voltage level is unpredictable. The exact voltage depends on the history of
source, gate, and drain voltages leading up to the current time (the “history effect”).
However, the voltage can be expected to fall within a known range.
The body voltage affects the conduction of the channel and therefore the switching speed
and parasitic capacitance of the circuit. In an NMOS transistor, a lower initial body voltage
results in a thinner inversion layer, lower conductivity, and slower switching. Conversely, a
higher initial body voltage results in faster switching. In a PMOS transistor, the opposite is
true; a lower initial body voltage results in faster switching.
You must have a NanoTime Ultra license to use the SOI analysis feature. To enable SOI
analysis, set the soi_enable_analysis variable to true. To specify the range of body
voltages resulting from the history effect, use the set_soi_parameters command for each
transistor model. To specify the presence of any body contacts used in the design, use the
set_soi_transistor_type command.
Usage Restrictions
The following restrictions apply to SOI analysis:
• Body voltage bounds can be defined only on a per-model (not per-instance) basis. If
different instances require different voltage boundaries, it is necessary to create a
separate SPICE model for each set of boundary values.
• The design can contain only SOI transistors. Conventional bulk-CMOS and SOI and
transistors cannot be mixed within a design.
• Information about the transistor bulk pin voltages is not available from the design
attributes, and you cannot back-annotate attributes on the bulk pins. You can, however,
get information about the body voltage range settings with the report_technology
command. You can also get detailed modeling information for a circuit segment by using
the write_spice command.
• Only SPICE models provided directly to NanoTime can be used for SOI analysis.
The following example invokes the conservative method for estimating body voltages for the
“nch” transistor model, for gate-source-drain sates 0r0, 000, and 010.
nt_shell> set_soi_parameters -model nch -conservative \
-states {0r0 000 010}
The following example specifies that the initial body voltage bounds as 0.2 to 0.8 volts for
the “nch” transistor model, for gate-source-drain sates 0r0, 000, and 010. The rail reference
voltage is 1.8 volts.
nt_shell> set_soi_parameters -model nch \
-min 0.2 -max 0.8 -rail_reference 1.8 \
-states {0r0 000 010}
In the three-character gate-source-drain codes, 0 means the “off” voltage, “1” means the
“on” voltage, and “r” means the rail-tied voltage. For an NMOS transistor, the “on” voltage is
high and the “off” voltage is low.
Model Name
The -model name option specifies the name of the SPICE transistor model affected by the
-min, -max, and -rail_reference values. If this option is not used, the same settings apply
to all transistor models.
NanoTime supports BSIM4SOI and BSIM3SOI models.
Gate-Source-Drain States
The -states option specifies the initial gate, source, and drain states. Specify a set of three
characters for the gate, source, and drain, respectively: 0 for “off,', 1 for “on,', or r for
“tied-to-rail.” If the -states option is not used, the command applies to all states.
For an NMOS transistor, 0 means a low voltage, 1 means a high voltage, and r means the
source tied to ground. For a PMOS transistor, 0 means a high voltage, 1 means a low
voltage, and r means the source tied to Vdd.
Table 3-2 lists the gate-source-drain states that can be specified and the corresponding
voltages on NMOS and PMOS transistor pins. The states 101 and 110 are not allowed
because they represent the transistor in an unstable state, with the transistor turned on and
the source and drain at opposite voltages.
Table 3-2 Gate-Source-Drain States
The tied-to-rail state is different from 0 or 1 because the source terminal is held strongly at
the rail voltage, causing less deviation of the body voltage from the rail voltage. This results
in a tighter maximum-conduction bound than using 0 or 1.
For example,
nt_shell> set_soi_transistor_type -body_contact 1.2 x00.mp1
The argument is a list of transistor instances affected by the command. If the body has an
electrical contact to the constant voltage, use the -body_contact option and specify the
voltage. If the body is connected to the source terminal of the transistor, use the
-body2source option.
The command reports the body voltage range and rail reference voltage for each state of
each transistor model. The parameter source is reported as conservative, average,
scaled, or user, depending on how the SOI parameters were set.
To get detailed modeling information for a circuit segment, use the write_spice command
and examine the generated SPICE file.
4-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
For example, the following command looks for and marks feedback and multiplexer
structures in the design:
nt_shell> match_topology -structure_types {feedback mux}
In some cases, additional structures are necessary to identify the specified structures. For
example, if you use the -structure_types precharge option, structures such as
clock_gate, feedback, and latch are also marked because they are needed to identify
precharge structures.
If the -structure_types option is not used, NanoTime looks for the structure types listed
in the topo_auto_search_class variable. By default, the variable is set to the following
string:
mux clock_gate turnoff xor cross_coupled nand nor latch precharge
ram feedback weak_pullup differential_synchronizer
During the design process, you can run an interactive flow to troubleshoot topology issues.
If there are topology errors, you must fix them, then run topology matching again to check
the results. You might need to modify the clocks or clock networks, erase or define
topologies, or set logic constraints to resolve the issues.
By default, NanoTime propagates the clock network and recognizes topologies only one
time, at the first occurrence of either the match_topology or check_topology command.
The check_topology command propagates clocks and recognizes topologies only if there
are no match_topology commands.
Manual topology marking can occur after the match_topology command. This is necessary
when you want to specify the clock signals during manual marking, because the clocks are
propagated only at the match_topology command.
However, if you want to propagate the clock network and perform automatic topology
recognition more than one time, you must perform these steps:
• Set the topo_match_topology_reset_clock_and_topology variable to true.
• Execute the match_topology command with the -force option.
Topology recognition actions must occur after setting the variable to true to have an effect.
The report_topology, get_topology, report_transistor_direction commands and
other reporting commands provide information about structures in the design. In addition,
NanoTime sets the value of many attributes associated with the design objects. The reports
and attributes can help you to understand the topologies identified.
After the check_topology command, the design cannot be modified. If you execute any
topology definition commands after the check_topology command, NanoTime discards all
commands and actions performed after the check_topology command. At that point you
can modify topology objects until you successfully execute another check_topology
command.
After a design has been successfully defined, the topology recognition phase is typically
automated through a script. A simple flow is shown in Figure 4-1. An interactive flow with
multiple match_topology commands is shown in Figure 4-2.
Specify clocks
and clock networks
match_topology
(Optional) Mark
dependent structures
Report topology
status
check_topology
If OK, proceed
link_design match_topology
(Optional) Mark
Specify clocks and dependent structures
clock networks
(Optional) Define
settings A, B, C
NO
Issues? check_topology
YES YES
Issues?
Settings Proceed to
next phase
(A) Transistor and Modify clocks and
port directions clock networks
reset1 reset2
ckb X2 ck X3
d db P1 P2 q
X1 lm om ls os
N1 N2
ck ckb X4
qN
The summary report of the channel-connected blocks for nets lm, db, om, and os is
produced by the following command:
nt_shell> report_channel_connected_block "lm db om os"
Report : report_channel_connected_block
...
CCB ID : A net in the CCB which is the representative of the CCB
CCB Inputs : The nets which drive the gate pins of the CCB devices
CCB Outputs : The nets in the CCB which drive the inputs of other CCBs
Nets db and lm are part of the same channel-connected block, therefore the first and second
rows of the report are identical. The “CCB ID” column shows the name assigned to the block
(db). The report covers four nets, so there are four lines in the report and four unique entries
in the “Net” column. However, there are only three unique channel-connected blocks and
three unique entries in the “CCB ID” column. The number of unique CCBs appears at the
end of the report.
The -verbose option generates a listing of all devices and nets of the channel-connected
block in the report, as shown in this example:
nt_shell> report_channel_connected_block "lm" -verbose
...
Report : report_channel_connected_block
Attributes:
c - Clocked device
b - Feedback device
t - Timing model
l - Latch net
p - Precharge net
r - Register file net
g - Gated clock net
f - Forced clock net
s - Stopped clock net
Devices Attrs
---------- ---------
P1 c
N1 c
X1.p
X1.n
X2.p1 b
X2.p2
X2.n1 b
X2.n2 b
Attributes:
c - Clocked device
b - Feedback device
l - Latch net
p - Precharge net
r - Register file net
g - Gated clock net
f - Forced clock net
s - Stopped clock net
P - Port
Net: om
CCB ID: ls
CCB CCB
Inputs Attrs Fan-ins
---------- ------- -------------
ck c ck
ckb c ckb
lm l db
rs P reset2
os l os
CCB CCB
Outputs Attrs Fan-outs
---------- ------- -------------
ls l os
ls l qN
om lm
channel-connected
block 1
X
potential
storage nodes
X
channel-connected
block 2
In the case of a register file, such as the one shown in Figure 4-6, one pair of
channel-connected blocks might have multiple storage nodes between the blocks.
Figure 4-6 Register File With Multiple Storage Nodes Between Channel-Connected Blocks
channel-connected
channel-connected block 2
block 1
X
X potential
storage nodes
In the case of the flip-flop shown in Figure 4-7, the channel-connected block in the center
belongs to the channel-connected block loops of both the master latch and the slave latch.
Figure 4-7 Flip-Flop with Three Channel-Connected Blocks
channel-connected
block 1 X
potential
storage nodes
X
X
X X
channel-connected
channel-connected block 3
block 2
Generate report
report_storage_node
Any NO Proceed to
storage
next phase
nodes?
YES
NanoTime finds storage nodes by detecting multiple channel-connected block loops. Some
of the storage nodes might be already marked as sequential topologies such as latches,
precharge structures or register files. Storage nodes that are unmarked or that are not
clocked are considered to be error conditions. To understand the situation, examine the
storage node report. To resolve the issues, either mark a sequential topology on the storage
node, resolve clock propagation issues, or remove the storage node designation. You can
repeat the reporting and modification steps to resolve all error conditions.
The report_storage_node command produces a summary of all storage nodes in the
design, including the counts of valid sequential topologies, invalid sequential topologies, and
storage nodes without topology marking. The invalid sequential topologies are user-defined
or automatically recognized latches, precharge structures, and register files that are not
driven by clocks. Invalid sequential topologies and storage nodes without topology markings
are reported as errors, which must be fixed.
An example of a storage node report is as follows:
nt_shell> report_storage_node
****************************************
Report : storage_nodes
...
****************************************
Type Count
----------------------------------- ----------
Valid Sequential Marking 2
Invalid Sequential Marking 0
No marking 6
----------------------------------- ----------
Total 8
The -verbose option causes the report to list the subcircuit containing the storage node,
other storage nodes in the same multiple channel-connected block loop, and attributes of
the storage node. If the storage node is marked or already recognized as a latch, precharge,
or register file net, the report shows the attribute l, p, or r, respectively. The attribute c
indicates that a clock propagates to the channel-connected block loop of the storage node.
The -errors option causes the report to include the number of storage nodes with error
conditions. The argument for the -errors option specifies which type of error to report:
• not_marked — Storage nodes that are not marked as a latch net, precharge net, or
register file net, and have no feedback device driving the storage node
• not_clocked — Storage nodes for which a clock does not propagate to the
channel-connected block loop containing the storage node
• all — Both types of error
You can generate a report for one specific storage node or a collection of storage nodes.
You can obtain a report of the other storage nodes in the same channel-connected block
loop as the specified node by using the report_channel_connected_block command.
You can remove the storage node classification from a net or a collection of nets by using
the remove_storage_node command.
The storage node report shows the subcircuit to which a storage node belongs. To waive
multiple storage nodes in instances of the same subcircuit, you can review one of them and
remove the whole group with subcircuit matching.
Analysis does not stop for a warning. If you want to stop the run when a clock signal drives
a data input, set the topo_sequential_structure_strict_input_matching variable to
true. This variable takes effect only if the topo_find_clock_driven_data_inputs
variable is set to true. The default of both variables is false.
Note:
In clock divider circuits, the data input is usually a clock signal. NanoTime automatically
recognizes simple clock divider topologies and does not apply the strict input matching
test. However, for complex clock divider circuits, you might need to set the
topo_sequential_structure_strict_input_matching variable to false to allow the
analysis to proceed.
For manually marked latches, the data input pin is explicitly specified. For automatically
recognized structures, the tool must identify the data input pin. To report the pins identified
as data input pins for sequential elements, use the -message_level debug option with the
check_topology command.
to set transistor directions can improve performance and reduce pessimism during path
tracing.
Figure 4-9 Unresolved Transistor Direction
inverter3
bi-di
inverter1
inverter4
inverter2
Some transistor directions are not resolved when case analysis or logic constraints turn off
the signal flow through the transistor. NanoTime reports these nondirectional transistors as
errors. However, you can waive direction checking on nondirectional transistors by setting
the topo_waive_nondirectional_transistor variable to true before running the
check_topology command.
After you use the match_topology command, check the direction of all transistors by using
the report_transistor_direction command. If the report shows a large number of
bidirectional transistors that are not truly bidirectional, use the set_transistor_direction
command to specify the actual direction of flow. An excessive number of bidirectional
transistors might adversely affect topology recognition, especially for multiplexers, and
might cause longer path searching times. Note that user-specified bidirectional transistors
are allowed in the design if they have been verified to be truly bidirectional.
The following example shows a transistor direction report.
**********************************
Report : transistor direction
...
**********************************
Type Count
----------------------------------- --------
Bidirectional 3
Unidirectional (Automatically Set) 26
Unidirectional (User Defined) 0
--------------------------------------------
Total 29
The following example shows a report which provides the SPICE netlist for an unresolved
transistor, as a result of using the -transistor and -channel_connected_block options
of the report_transistor_direction command:
****************************************
Report : transistor direction
...
****************************************
f --- floating output related bi-directional transistors
u –-- user defined direction
the mark_* commands such as the mark_latch and mark_mux commands allow you to
specify structures that NanoTime does not recognize automatically. See Chapter 6,
“Recognizable Topologies” for more information about the topology structures.
The erase_* commands such as the erase_latch and erase_mux commands remove
the topology marking from structures that are either automatically recognized or manually
marked. Before the first execution of a match_topology command, the only structures
available for erasing are manually marked structures. After a match_topology command,
many topologies are likely to be automatically recognized. You can erase any existing
topology structure.
Executing an erase_* command does not prevent similar topology structures from being
recognized later. If the topo_match_topology_reset_clock_and_topology variable is set
to true, NanoTime repropagates the clock network and rerecognizes topologies at every
subsequent match_topology -force command (note the use of the -force option). In this
case, the tool is likely to rerecognize any automatically recognized structures that you
erased. You can avoid this occurrence by performing topology erasing steps after the last
match_topology command in the flow.
To automatically mark or erase multiple occurrences of a circuit pattern or cell, use the
foreach_match command as described in Automated Search by Name or Pattern
Matching.
An alternative to using the erase_* commands to remove recognition of structures is to
use the erase_topology command with the get_topology command. The
get_topology command creates a collection of structures and the erase_topology
command removes recognition of all the structures in the collection.
Using the get_topology and erase_topology commands together might be easier than
using the erase_* commands because of the flexibility of the get_topology command.
You can create a collection of all instances of a structure and erase them immediately. For
example, the following command removes recognition of all latch structures in the design:
nt_shell> erase_topology [get_topology -all -structure_type latch]
The command returns a 1 for each successful execution of the embedded command,
followed by the total number of matches upon completion of the foreach_match command.
To use the -pattern option, you must first read the pattern into NanoTime with the
read_pattern command. To display the subcircuits that have been read in as patterns, use
the list_patterns command.
The following example reads the pattern file named [Link] and lists the subcircuits that
have been read in as patterns. Then, for each matching occurrence of the pattern in the
current design, it applies the erase_turnoff command at output net z.
nt_shell> read_pattern -format spice [Link]
Compiling "/node1/user1/designs/[Link]"
1
nt_shell> list_patterns
Pattern Registry
Pattern Name
-------------------------------------------
pre_an2k
1
nt_shell> foreach_match -pattern pre_an2k \
-command {erase_turnoff -output_net z}
1
...
The read_pattern command looks for the specified pattern file in the directories specified
by the library_path variable. The pattern file must be read after the link_design
command and before the foreach_match command. SPICE format is the most common.
The corresponding circuit diagram for the pattern is shown in Figure 4-10.
Figure 4-10 Circuit Pattern to Match
enode
mp4
clk mp3
d1 mn1 z
mn4
d2 mn2
clk mn3
The pattern file can contain multiple pattern subcircuits, although each subcircuit must be a
flat netlist. Hierarchical netlists are not supported for patterns.
A SPICE pattern file might contain device parameter information such as transistor widths
and lengths, but that information is not used for pattern matching. NanoTime checks for an
identical configuration of interconnected NMOS and PMOS transistors, ignoring transistor
parameters other than the NMOS or PMOS type.
A SPICE pattern file must follow all rules for SPICE format. For example, the first line must
be a comment. If the pattern is for an existing SPICE subcircuit, the SPICE file can be used
directly. For example,
***** Pattern Files *****
.subckt mynand A B Z
Mn0 Z A n1 gnd nch W=dwn L=0.130U
+ NRD=0.157 NRS=0.091
Mn1 n1 B gnd gnd nch W=dwn L=0.130U
+ NRD=0.157 NRS=0.091
Mp0 vdd A Z vdd pch W='dwp * 2' L=0.130U
+ NRD=0.045 NRS=0.069
Mp1 vdd B Z vdd pch W='dwp * 2' L=0.130U
+ NRD=0.045 NRS=0.069
.ends
The transistor sizes and other parameters are ignored for pattern matching. If you code a
pattern by hand, you can omit the unused information and use “n” and “p” for the transistor
types:
***** Pattern Files *****
.subckt mynand A B Z
Mn0 Z A n1 n
Mn1 n1 B gnd n
Mp0 vdd A Z p
Mp1 vdd B Z p
.ends
All input and output nets of the pattern should be specified as pins. Unused outputs do not
cause the pattern matching to fail, but if an output is not specified as a pin and that output is
used elsewhere in the circuit, the pattern does not match.
Power and ground need not be specified as pins. If specified, they are ignored for pattern
matching. If the only pins specified for a pattern are power and ground, NanoTime does not
try to match the pattern, as it has no connection to the rest of the circuit.
The foreach_match -pattern command returns the number of matches. You can also add
commands to print out the details of the pattern match. For example,
foreach_match -pattern abc -command {
set_logic_constraint -one_hot { A B }
echo [get_attribute [get_nets "n1"] full_name]
}
X5.X6.n1
X3.n1
2
The final 2 is the number of matches of pattern abc. Node n1 in the pattern matches
X5.X6.n1 and X3.n1.
For best pattern matching results, keep patterns small in size, to match just enough of the
netlist to apply the required commands.
Avoid putting unused outputs in the pin or port list to minimize the pattern matching time.
Use transistor names and net names in the pattern that have meaning and that allow you to
execute pattern-matching Tcl commands easily. For example,
foreach_match -pattern LAT_PAT -command {
mark_feedback -transistors [get_cells -nocase Mfdbk*] }
To remove a pattern that you no longer need, use the remove_pattern command.
If the value of the pattern_merge_parallel_transistors variable is true (the default),
multiple transistors that share common source, drain, and gate connections are considered
a single transistor for purposes of matching patterns, including swapped source and drain
transistors.
However, keep in mind that this does not include parallel stacks. For example, if two NAND
gates are connected in parallel with common inputs and output, the two stacked NMOS
transistors are not considered to be in parallel because the intermediate connection
between the two stacked transistors is not connected in parallel between the two gates. As
a result, there would be two matches reported, not one.
nt_shell> report_storage_node
...
Type Count
----------------------------------- ----------
Valid Sequential Marking 6
Invalid Sequential Marking 0
No marking 2
----------------------------------------------
Total 8
Topology Libraries
The topology database consists of topology libraries, which include a common library, a
global library, and optional user libraries. Each topology library is a directory that contains
one control file plus the files that describe the individual topologies. Figure 4-11 shows the
structure of a topology database containing the global and common libraries and two user
libraries.
Figure 4-11 Topology Database Structure
Topology database
The common library contains a set of the most commonly used topologies, such as simple
logic gates, latches, and precharge circuits. The global library contains another set of
topologies that are used less often. A user library contains user-defined topologies such as
uncommon, design-specific, or proprietary circuits.
The common and global topology libraries are built into the NanoTime software installation
and should not be modified. They can be found in the installation path as follows:
nt_install_dir/auxx/nt/topolibs/common
nt_install_dir/auxx/nt/topolibs/global
To remove a topology library that has been read in, use the remove_topology_library
command. Do not remove the global or common libraries.
Multiple pattern definitions can be used to represent variations of the basic netlist structure
of the lib_topology object. NanoTime searches for each type of pattern in the order that it
appears in the pattern file and applies the action commands to each successful match. The
net and device names used in multiple subcircuit definitions must all be consistent with the
action commands.
To apply action commands on the current design, use the -current_design option. If this
option is not specified, you must supply subcircuit names for subcircuit name matching or a
search pattern in a .sp file.
You can separately specify the actions taken at any of the following phase points:
• Before or after the match_topology command
• After clock propagation
• Before or after the check_topology command
• Before or after the check_design command
For example, the following file, [Link], performs a latch-marking operation after clock
propagation for each occurrence of the “muxflop” subcircuit:
create_lib_topology \
-description "muxflop latch" -version ‘V20070215’ \
-subckt_name muxflop \
-enable_search \
-action_post_clock_propagation { \
mark_latch -latch_net lat1n -output lat1 \
-feedforward { X5.Mn0 X5.Mp0 } \
-feedback { Mp6 Mp7 Mn6 Mn7 } \
-clock { Mn0.G Mp0.G } -name muxflop \
}
Table 4-1 lists the phase points during which actions can be carried out and the typical
actions that occur during these phases. At each phase point, the actions are executed in the
same order that the topologies are searched. The “pre” phase actions are taken before any
NanoTime built-in actions are taken. The “post” phases actions are taken after the
NanoTime built-in actions have been processed.
Table 4-1 Topology Action Phase Points and Precedence
-action_ Execute clock tree propagation adjustments needed for correct marking
pre_match_topology of clocked topologies. Library topologies take precedence over
automatic recognition.
-action_ Execute clock tree propagation adjustments needed for correct marking
pre_check_topology of clocked topologies. Library topologies take precedence over
automatic recognition.
By default, when you enable a topology library, you enable searching for all topologies that
were defined in that library with the -enable_search option of the create_lib_topology
command. You can selectively enable or disable searching for individual lib_topology
objects by using the set_search_enabled and remove_search_enabled commands.
To search for a topology without taking any action when it is found, use the -only_used
option:
nt_shell> set_search_enabled -only_used
NanoTime searches for all loaded lib_topology objects, whether or not they were previously
enabled for searching, and marks each lib_topology object's search_enabled attribute to
true if the topology exists in the design, or to false otherwise. No actions are carried out
on the topologies found. After running this command, searching is enabled for all topologies
found to exist in the design, and disabled for ones that do not exist in the design.
For example, to get a collection of all the lib_topology objects in the global library:
nt_shell> get_lib_topology global.*
{"global.latch_itri_istack", global.latch_itri ... }
Instead of using the get_lib_topology command directly, you can specify the lib_topology
names in a separate file. For example,
nt_shell> set_search_enabled -from_file mylist
In the file “mylist,” you specify each lib_topology object by library name and lib_topology
name, separated by a space. For example,
common nando_istack2
common noro_istack2
global latch_itri_ostack
user_topo_lib latch_itri_ostack
...
You can filter the collection based on the lib_topology object attributes. For example, the
following command gets a collection of all the global lib_topology objects that exist in the
design (those that have a matched_count attribute greater than zero):
nt_shell> get_lib_topology -filter "matched_count>0" global.*
{"global.latch_itri_ostack"}
You can enable or disable a lib_topology object from a script, as in the following example:
if { [file exists [Link]] } {
set_search_enabled -from_file [Link]
} else {
set_search_enabled -only_used
list_lib_topology -only_used -output [Link]
}
To get a collection of global lib_topology objects for which searching is currently enabled:
nt_shell> get_lib_topology -filter “search_enabled==true” global.*
{"global.latch_itri_ostack ... "}
To see a list of lib_topology objects that have been read in, use the list_lib_topology
command:
nt_shell> list_lib_topology -library user1
Topology Library Registry
The list_lib_topology command by itself lists the lib_topology objects in all the loaded
libraries, including the common and global libraries. The list_lib_topology -only_used
command lists only the topologies that exist in the design. This option works only after
topology matching has been performed or the set_search_enabled -only_used
command has been executed.
Use the -enabled, -only_used, or lib_topology_list options to restrict the scope of the
report.
For information about each structure, use the -verbose option. To restrict the report to just
one type of structure, use the -structure_type option and specify one or more of the
structure types.
For example,
nt_shell> report_topology -structure_type feedback -verbose
...
Attributes:
u - User Defined
C - Common Topology Library Defined
U - User Topology Library Defined
G - Global Topology Library Defined
Feedback Attrs
---------------------------------- -----
[Link].XC1.Mp1
[Link].Xla4.XG3.X0.Mp1
[Link].XC4.Mp1
...
To restrict the scope of the search to just part of the design rather than the whole design,
specify a topology collection with the get_topology command. For example,
nt_shell> report_topology -structure_type latch \
-verbose [get_topology -of_objects \
[get_cells Xaddsub]]
The following command creates a collection of inverter structures. The echo command
reports the number of inverters currently recognized or marked in the design.
nt_shell> echo [sizeof_collection [get_topology -all \
-structure_type inverter]]
25
The get_topology command must use either the -all or -of_objects option. The -all
option causes the command to search through the whole current design. The -of_objects
option causes the command to search for topologies associated with a specified collection
of nets or leaf-level cells.
Each structure type is associated with a net or cell, as indicated in the following list. For
example, to get a collection of inverter structures using the -of_objects option, you would
search through a collection of nets, not cells.
clock_gate net cross_coupled_pmos net
flip-flop net inverter net
latch net mux net
precharge net ram net
register net turnoff net
xor net
feedback cell pulldown cell
pullup cell tgate cell
weak_pullup cell
You can use the -filter option of the get_topology command to restrict the collection to
structures for which a logical expression is true. For example, the following command
generates a list of all latches having the structure name mylatch1. Structure names can be
assigned with the -name option of the mark_latch command, other mark_* commands,
and the match_topology command.
nt_shell> get_topology -all -structure_type latch \
-filter "structure_name == mylatch1"
Each topology has a set of attributes that you can report with the foreach_in_collection
and get_attribute commands. The following script defines a process called
print_latch_nets that gets a collection of all latches and prints the latch net of each latch.
proc print_latch_nets {} {
set latches [get_topology -all -structure_type latch]
foreach_in_collection latch $latches {
set net [get_attribute $latch latch_net]
echo [get_attribute $net full_name]
}
}
nt_shell> print_latch_nets
[Link]
[Link]
[Link]
[Link]
For a list of the attributes associated with each topology, see Chapter 17, “Object Attributes.”
5-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Analysis of differential clocks requires a NanoTime Ultra license. For more information about
differential circuits, see Chapter 7, “Differential Circuits.”
To perform timing analysis in NanoTime, you must specify each clock used in the design
and its properties, including the period, waveform, latency, uncertainty, and transition time.
You might also need to help NanoTime propagate the clock network correctly. The clock
network information is necessary for topology recognition, so that NanoTime can trace clock
paths and identify clocked circuit elements.
Some commands require the name of a clock as an argument. To ensure that you are
specifying a clock object (not a port, pin, or net), use the get_clocks command. For
example, to set the uncertainty of all clocks beginning with the letters “PH,” use the following
command:
nt_shell> set_clock_uncertainty 0.1 [get_clocks "PH*"]
The first command creates a collection of all clocks that have a period of 4.0 time units. The
second command sets the uncertainty of those clocks.
Creating Clocks
The first part of clock network definition is to describe all clocks and their waveforms.
Standard clocks do not depend on any other circuits, while generated clocks are derived
from other clocks. Pulse clocks are special cases of generated clocks that have very short
duration output signals. If your design contains more than one clock, you must provide
additional information to enable NanoTime to analyze the design correctly.
This section contains the following topics:
• Standard Clocks
• Generated Clocks
• Pulse Clocks
• Multiple Clocks
Standard Clocks
Use the create_clock command to define single-ended clocks that do not depend on any
other circuits. This command creates a clock object and applies that clock to a specified
source object, which must be a port or a boundary pin. If you want to define a clock on an
internal pin, use the create_generated_clock command instead of the create_clock
command.
No more than one clock can be defined on any single port or pin. NanoTime traces the clock
network so that the clock reaches all sequential elements in the transitive fanout of the
source object.
If you do not specify a clock source object, NanoTime creates a virtual clock that can be
used to represent a clock outside of the design for specifying input and output delays.
You must specify the period of the clock with the -period parameter of the command.
Unless you specify the clock edges explicitly, the clock has a single pulse per period and a
duty cycle of 50 percent, with a rising edge at the beginning of the period and falling edge in
the middle, as shown in Figure 5-1.
Clock period
To specify an asymmetrical or inverted waveform, use the -rise and -fall options to
specify the times at which the rising and falling edges occur within the clock period, or use
the -waveform option to specify the times at which successive clock edges occur.
For example, the following command creates a clock at the port named PH1. The clock has
a period of 10.0, a rising edge at time 5.0, and a falling edge at time 9.5, as shown in
Figure 5-2. The clock name is the same as the port name, PH1.
nt_shell> create_clock -period 10.0 -rise 5.0 -fall 9.5 PH1
1
PH1
Clock period
0 1 2 3 4 5 6 7 8 9 10
The following command creates the same clock as the previous example, using the
-waveform option instead of the -rise and -fall options.
nt_shell> create_clock -period 10.0 -waveform {5.0 9.5} PHI1
In the next example, the create_clock command creates a clock named PH2 on an input
port named ck2, with a period of 10.0, a rising edge at 6.0, and a falling edge at 9.5. The
clock name is different from the port name.
nt_shell create_clock -name PH2 -period 10.0 \
-waveform { 6.0 9.5 } [get_ports ck2]
This example creates a virtual clock named PH2 with a period of 10.0, a rising edge at 0.0,
and a falling edge at 5.0. A virtual clock is not associated with any port or pin and can be
used as a basis for specifying input delays and output delays at data ports.
nt_shell> create_clock -name PH2 -period 10.0 waveform {0.0 5.0}
Generated Clocks
A generated clock is a clock whose timing characteristics (period, waveform, and latency)
depend on another clock in the design, called the master clock. If the master clock
characteristics change, the generated clock characteristics change accordingly. For
example, a divide-by-2 clock circuit produces a generated clock signal with half the
frequency of the master clock. The latency of the generated clock is equal to the latency of
the master clock at the clock divider plus the propagation delay of the clock generator circuit.
You can specify a generated clock on a boundary pin by using the create_clock
command, just like any other clock. However, if you use the create_generated_clock
command instead, NanoTime automatically handles any change in the master clock
characteristics. In addition, the create_generated_clock command can be used on
internal pins, but the create_clock command is restricted to boundary pins and ports.
For example, you can specify a divide-by-2 generated clock as follows:
nt_shell> create_generated_clock -name CLK2 \
-source [get_ports SCLK] \
-divide_by 2 [get_pins -of_objects FF1/Q \
-filter “lib_pin_name==$link_transistor_gate_pin_name”]
Figure 5-3 shows the clock created by this command. In this example, the new clock is
named CLK2. The master clock (the source of the generated clock) is port SCLK. FF1/Q is
the output pin where the divide-by-2 clock is generated and is the generated clock source
object. The frequency of the generated clock is half that of the master clock, as specified by
the -divide_by 2 option; the period is therefore twice as long.
CLK2
D Q
SCLK
QN
FF1
SCLK
CLK2
You specify two source objects in the design: the generated source object (where the
generated clock is defined) and the master source object (where the master clock is
defined). The generated source object can be specified as an input port, pin, or net. If it is
specified as a net, the driving pin of the net is considered the clock source object.
The master clock source object is typically specified with the -source option. However, if
the -source option is not used, the master clock is a virtual clock, a clock with no source
object. In that case, you must specify the name of the virtual clock by using the
-master_clock option with the create_generated_clock command.
The following example creates a generated clock from a virtual master clock. Specifying the
source pin is optional if the master clock is a virtual clock. The generated clock inherits the
clock latency of the master clock.
nt_shell> create_generated_clock -master_clock ref_clk \
-edges {1 2 3} [get_ports clk]
You define the timing relationship between the master clock and generated clock by using
one of the following options:
• -divide_by (frequency divider)
The -divide_by option defines a generated clock by dividing the frequency of the master
clock by an integer (for example, a divide-by-2 clock divider). If the specified divide-by factor
is a power of 2 (2, 4, 8, 16, ...), NanoTime uses only the rising edges of the master clock to
determine the edges of the generated clock. For all other factors, NanoTime scales all the
edge times of the master clock to determine the edge times of the generated clock.
The -multiply_by option defines a generated clock by multiplying the frequency of the
master clock by an integer (for example, a multiply-by-2 phase-locked loop clock generator).
You can invert a frequency-divided or frequency-multiplied clock with the -invert option,
as shown in the following example. This command creates a clock that is inverted with
respect to clock CLK. Note that the divide_by option is required with the -invert option,
even though divide by 1 means there is no change in the clock frequency.
nt_shell> create_generated_clock -divide_by 1 -invert \
-source [get_pins CLK] [get_pins CLKINV]
The -edges option lists three edge numbers of the master clock that are used to trigger the
edges of the generated clock. For example, consider the clock divider circuit shown in
Figure 5-4.
Figure 5-4 Divide-by-3 Clock Generator
U1 U2
DIV3A
D Q D Q
QN
SCLK
SCLK
DIV3A
Clock edge
1 2 3 4 5 6 7 8 9 10 11
The generated clock signal DIV3A has a period three times longer than the master clock,
with an asymmetric waveform.
The -edges {1 5 7} option means that the rising, falling, and rising edges of the
generated clock are triggered by the first, fifth, and seventh edges of the master clock,
respectively. Both rising and falling edges of the master clock are counted, beginning with a
rising edge as edge number 1.
If you are using the -edges option to generate a normal-edge clock (not a pulse clock), you
can shift each edge of the generated clock by a specified amount of time by using the
-edge_shift option. You should use the -edge_shift option only to represent the
intentional operation of the clock generator circuit, not to represent clock latency.
The set_clock_latency, set_clock_uncertainty, set_propagated_clock, and
set_clock_transition commands apply to generated clocks as well as standard clocks.
For generated clocks, NanoTime automatically computes the clock source latency if the
master clock of the generated clock has propagated latency and no user-specified value for
generated clock source latency exists. If the master clock is ideal and has source latency,
and there is no user-specified value for the generated clock’s source latency, then zero
source latency is assumed.
To display information about both regular and generated clocks, use the report_clock
command. To undo the effects of the create_generated_clock command, use the
remove_generated_clock command.
Pulse Clocks
A generated clock that consists of a sequence of short pulses is called a pulse clock. You
can specify this type of clock by using the -edges option with a repeated digit in the list of
edges. The repeated edge of the master clock triggers both the leading and trailing edges of
the generated clock pulse.
For example, using the -edges option with an argument of {1 1 3} means that the rising
and falling edges of the initial pulse of the generated clock are both triggered by the first
edge of the master clock, and the next rising edge of the generated clock is triggered by the
third edge of the master clock. This effectively means that the first pulse occurs at master
clock edge 1 and the second pulse occurs at master clock edge 3, which effectively defines
the period of the generated clock.
Using the same master clock edge twice in the option argument implies a pulse width of
zero. In reality, the clock generator circuit is usually designed so that a circuit delay defines
the pulse width. NanoTime does not analyze the circuit delay. Instead, you must use the
set_clock_latency command to define the pulse width.
For example, consider the pulse clock circuit shown in Figure 5-5. Each rising edge of the
master clock SCLK generates an active-high pulse on CLKP. Master clock edge number 1
triggers both the rising and falling edges of the first pulse, while edge number 3 triggers the
second pulse and sets the pulse clock period. The pulse width is determined by the delay of
the inverter chain, but you must specify the rise and fall latencies to represent this delay.
Specify the generated pulse clock CLKP as follows:
nt_shell> create_generated_clock -name CLKP -source [get_ports SCLK] \
-edges {1 1 3} [get_pins -leaf -of U1/Z \
-filter “lib_pin_name==$link_transistor_gate_pin_name”]
Set the rise and fall latencies to produce a pulse width of 0.2:
nt_shell> set_clock_latency -source -rise 0.0 [get_clocks CLKP]
nt_shell> set_clock_latency -source -fall 0.2 [get_clocks CLKP]
The clock pulses must have a positive pulse width. If you create a clock with active-low
pulses, you must specify the clock latency to have a fall time which occurs before the rise
time.
SCLK
Z CLKP
Master clock
Generated
Inverter chain SCLKB U1 pulse clock
with delay
SCLK
SCLKB
CLKP
Time
1 2 3 4 5 6 7 8 9 10
To specify a similar clock with active-low pulses instead of active-high pulses, modify the
commands as follows:
nt_shell> create_generated_clock -name CLKP -source SCLK \
-edges {1 3 3} [get_pins U1/Z]
nt_shell> set_clock_latency -source -rise 0.2 [get_clocks CLKP]
nt_shell> set_clock_latency -source -fall 0.0 [get_clocks CLKP]
You could create a pulse clock by defining a standard clock with closely spaced rise and fall
times. However, specifying the pulse clock as a generated clock ensures the correct
checking of delays between the master clock and generated clock domains.
In summary, to define a pulse clock, you need to specify its period, whether it is active-high
or active-low, and whether it triggers from a master clock rising edge or falling edge. The
-edges option allows you to specify those three things in a concise way:
• If the repeated digits in the option argument appear at the beginning of the list, then the
pulse clock is active-high. If the repeated digits are at the end of the list, then the pulse
clock is active-low.
• If the repeated digits are odd numbers, then the pulse trigger is a master clock rising
edge. If the repeated digits are even, then the trigger is a falling edge.
• The pulse clock period is equal to the time difference between the master clock edges
listed as the first and last values in the argument list.
For example, the {1 1 3} argument results in active-high pulses that are triggered on a
master clock rising edge. The period is equal to the time difference between master clock
edge 1 and master clock edge 3.
During path tracing, NanoTime sets fixed logic states on nets for simulation. However, it is
not possible to sensitize a pulse clock net to a specific static logic state. To allow simulation
of the circuit, you need to disable the logic checks on those nets with the
set_disable_logic_check command. This action sets the value of the net attribute
logic_check_is_disabled to true.
For example, suppose that a pulse generator has a net pgen1 that cannot be sensitized to
a static logic 1, causing an error during path tracing. The following command disables logic
checking of that net, allowing analysis of the design to proceed:
nt_shell> set_disable_logic_check [get_nets pgen1]
Multiple Clocks
When multiple clocks are defined for a design, the relationships between the clock domains
depend on how the clocks are generated and how they are used in the design. A clock
domain is a specific edge of a specific clock; one clock can therefore be the source of more
than one clock domain.
The relationship between two clocks can be synchronous, asynchronous, or exclusive, as
shown by the examples in Figure 5-6.
Figure 5-6 Synchronous, Asynchronous, and Exclusive Clocks
CK1 CKP1
CK1 and CK2
0
exclusive
CK2 CKP2 1
create_clock -period 2 -name CK1 \
[get_ports CKP1]
create_clock -period 8 -name CK2 \
SEL [get_ports CKP2]
set_case_analysis 0 [get_ports SEL]
For NanoTime to correctly analyze paths between different clock domains, you might need
to use case analysis to exclude one or more clocks from consideration, or specify only the
clocks that are active in the current operating mode. In general, NanoTime does not allow
simultaneous existence of multiple clocks on the same port or pin in the design.
Synchronous Clocks
Two clocks are synchronous with each other if they share a common source and have a
fixed phase relationship. Unless you block timing paths between clocks by using the
set_false_path command, NanoTime assumes that two clocks are synchronous if there is
a path with data launched by one clock and captured by the other clock. The clock
waveforms are synchronized at time zero, as defined by the create_clock command.
For example, consider the following create_clock commands:
nt_shell> create_clock -period 4 -name CK1 -waveform {0 2}
nt_shell> create_clock -period 4 -name CK2 -waveform {1 3}
nt_shell> create_clock -period 6 -name CK3 -waveform {2 3}
NanoTime creates the clocks as specified in the commands, with the waveforms
synchronized as shown in Figure 5-7. NanoTime adjusts the timing relationships further for
any specified or calculated latency or uncertainty.
Figure 5-7 Synchronous Clock Waveforms
CK1
CK2
CK3
Time 0 1 2 3 4 5 6 7 8 9 10
In a design that uses these three clocks, there might be paths launched by one clock and
captured by another clock. When such paths exist, to test all possible timing relationships
between different clock edges, NanoTime internally “expands” the clocks to the least
common multiple of all synchronous clock periods, thus creating longer-period clocks with
multiple rising and falling edges.
For example, the three clocks in the foregoing example have periods of 4, 4, and 6. The
least common multiple of these periods, called the base period, is 12. To analyze the paths
that cross the clock domains, NanoTime internally expands the clocks by repeating them
over the base period. The resulting clock waveforms are shown in Figure 5-8. Each
expanded clock has a period of 12.
Figure 5-8 Expanded Clock Waveforms
CK1
CK2
CK3
Time 0 2 4 6 8 10 12 14 16 18
NanoTime checks timing paths between all edges in the expanded clocks. For example, the
most restrictive setup check between a falling edge of CK2 and a rising edge of CK3 is from
time=7 to time=8, as shown by the dashed arrow in Figure 5-8.
Asynchronous Clocks
Two clocks are asynchronous if they do not have a timing relationship in the design. For
example, a free-running, on-chip oscillator is asynchronous with a system clock signal
coming into the chip from the outside. Clock edges in the two clock domains can occur at
any time with respect to each other.
You can declare a false path between the two clocks so that NanoTime does not check the
timing paths launched by one clock and captured by the other clock.
For example,
nt_shell> set_false_path -from [get_clocks CK1] -to [get_clocks CK2]
nt_shell> set_false_path -from [get_clocks CK2] -to [get_clocks CK1]
Exclusive Clocks
Two clocks are exclusive if they do not interact with each other. For example, a circuit might
multiplex two different clock signals onto a clock line, one a fast clock for normal operation
and the other a slow clock for low-power operation. Only one of the two clocks is enabled at
any given time, so there is no interaction between the two clocks.
To prevent NanoTime from spending time checking the interaction between exclusive
clocks, you need to analyze the circuit behavior one clock at a time by using case analysis,
or by creating only the clocks that are active in a given operating mode.
For example, consider a clock selection circuit like the one shown in Figure 5-9. The input
signal SEL enables either clock CK1 or CK2.
Figure 5-9 Clock Selection Circuit
CK1 CKP1 0
CK2 CKP2 1
SEL
To analyze one clock at a time using case analysis, set one clock to an inactive state while
allowing the other to be analyzed. For example, to analyze the circuit for the case where
SEL=0 and CK1 is enabled, use the following command:
nt_shell> set_case_analysis 0 [get_ports SEL]
This applies a logic 0 to port SEL, which disables CK2 and prevents it from being analyzed.
An alternative method is to use the create_clock command to define only the clock that
is active for the current operating mode, leaving the other clock undefined.
This approach eliminates all timing checks between the two domains. However, it might
block some needed timing checks in addition to unwanted ones.
• Eliminating specific timing checks
You can use all of the path selection options of the set_no_timing_check_path
command to be very specific about the timing checks to eliminate.
NanoTime first finds paths that match the -from, -through, and -to options in the
command. The tool evaluates all timing checks up to the point where the options are
matched. Timing checks for the next latch in the path (or other topology that includes
timing checks) are not evaluated. More than one timing check might be eliminated,
depending on the specific topology. Path tracing continues beyond the affected topology
and all timing checks in the rest of the path are evaluated.
After all of the invalid cross-clock timing checks are removed, NanoTime checks
transparency for each remaining reference clock domain. If any reference clock domain is
not transparent, the tool considers all domains to be nontransparent. Therefore, it is
essential to remove all invalid cross-clock timing checks so that transparency for each path
arriving at a timing check is evaluated against a minimal set of reference clock domains.
Clock Latency
Latency is the amount of time that a clock signal takes to get from its ideal-waveform origin
point to a sequential element inside the design. Clock latency consists of two parts, source
latency and network latency.
Source latency is the amount of time the clock signal takes to get from its ideal-waveform
origin point to the clock definition point in the design, often called the clock source object.
The clock source object is the port or pin specified in the create_clock command.
Network latency is the amount of time the clock signal takes to get from the clock source
object to sequential elements in the design.
For each sequential element in the design, NanoTime uses either propagated or ideal
clocking to determine the latency. For propagated clocking, NanoTime calculates the
cumulative delays along the clock network, including the effects of wire parasitics. For ideal
clocking, NanoTime uses latency values set on objects with the set_clock_latency
command, or zero latency where no latency value has been set. Compare Figure 5-10 and
Figure 5-11.
Source Parasitic D Q
Ideal-waveform (clock capacitance
clock origin point definition
MCLK point)
Net with parasitic delay Latch
Delay = 1.5 ns clk1
Source latency
Propagated network latency
set_clock_latency \ (NanoTime default)
-source 1.5 [get_clocks MCLK]
Source D Q
Ideal-waveform (clock g13/CP
clock origin point definition
point) Net delay
MCLK
Latch
Delay = 1.5 ns clk1 Delay = 1.2 ns
Source latency
set_clock_latency \ Ideal network latency
-source 1.5 [get_clocks MCLK] set_clock_latency \ set_clock_transition \
1.2 [get_pins g13/CP] 0.2 [get_clocks MCLK]
To report network or source latency set on a clock, use the report_clock command with
the -skew option. To report network or source latency set on a port or pin, use the
get_attribute command. For example,
nt_shell> get_attribute [get_ports clk3] clock_latency_fall_max
Because the -source option is not used, each command sets the network latency of clock
CLK1, which applies to all sequential elements clocked by CLK1. The edge type (rising or
falling) refers to the signal transition arriving at the sequential element, including any
inversions along the clock path.
Similarly, you can optionally use the -min and -max options to set different latency values
for minimum and maximum operating conditions.
To specify a worst-case range of source latency values, use the -early or -late option
together with the -source option. NanoTime uses the early and late latency values to
determine the earliest and latest possible clock arrival times, respectively. For example, for
a setup check, it uses the late value for data launch and the early value for data capture.
For example, consider source latency that varies from 1.5 to 2.5 ns, as shown in
Figure 5-12.
D Q Combinational D Q
Logic
Clock
CLK
source
Delay = pin
1.5 to 2.5 ns
To specify this type of source latency, use commands such as the following:
nt_shell> create_clock -period 10 [get_ports CLK]
nt_shell> set_clock_latency 1.5 -source -early [get_clocks CLK]
nt_shell> set_clock_latency 2.5 -source -late [get_clocks CLK]
NanoTime uses the more conservative source latency value (either early or late) for each
startpoint and endpoint clocked by that clock. For setup analysis, it uses the late value for
each startpoint and the early value for each endpoint. For hold analysis, it uses the early
value for each startpoint and the late value for each endpoint.
Figure 5-13 shows the early and late timing waveforms and the clock edges used for setup
and hold analysis in the case where the startpoint and endpoint are both clocked by CLK.
Figure 5-13 Early and Late Source Latency Waveforms
Clock
source Source
latency
Capture
Setup
Launch
Early (+1.5 ns)
Hold Capture
Late (+2.5 ns) Launch
0 5 1
Clock Uncertainty
Uncertainty is the amount of variation in the arrival times of a clock edge. An ideal clock has
an uncertainty of zero. Any real clock has some variation in the arrival time of each edge. By
specifying the clock uncertainty, NanoTime can account for the worst-case situation such as
late launch of data, combined with early capture of data, for a setup check.
The set_clock_uncertainty command specifies the uncertainty of specified clock
networks. This command can specify either simple uncertainty (between different edges of
the same clock) or interclock uncertainty (skew between two different clocks). Interclock
uncertainty is important when the clock used to launch data at the path startpoint is different
from the clock used to capture data at the path endpoint.
The command specifies an uncertainty value, which is the maximum amount of variation in
arrival times for a single clock or the maximum amount of skew between two different clocks.
NanoTime uses the worst possible variation in clock arrival times to perform setup and hold
checks. You should specify the worst expected uncertainty for a single clock or between two
different clocks. You can specify a slightly larger number to provide additional timing margin.
For simple uncertainty, you specify a list of clocks, ports, or pins. If you specify a clock, the
uncertainty value applies to all sequential elements clocked by that clock. If you specify a
port or pin, the uncertainty value applies to all sequential elements in the fanout of the port
or pin.
For interclock uncertainty, use the -from,-rise_from, or -fall_from options to specify
the source clock and the -to, -rise_to, or -fall_to options to specify the destination
clock. The uncertainty value applies to the paths that start from the source clock domain and
end in the destination clock domain.
The -setup or -hold option restricts the uncertainty setting to just setup or just hold
checking. Otherwise, the setting applies to both setup and hold checking.
For interclock uncertainty, specify all possible interactions of clock domains. For example,
for paths from CLKA to CLKB and from CLKB to CLKA, you must specify the uncertainty for
both directions, even if the uncertainty values are the same.
If no interclock uncertainty is specified for a path, the value for simple uncertainty is used. A
command that specifies interclock uncertainty has higher precedence than a conflicting
command that specifies simple uncertainty.
To view the current clock uncertainty settings, use the report_clock -skew command. To
remove uncertainty values that have been set, use the remove_clock_uncertainty
command.
The following examples specify that all paths ending at elements clocked by CLK have setup
uncertainty of 0.65 and hold uncertainty of 0.45.
nt_shell> set_clock_uncertainty -setup 0.65 [get_clocks CLK]
nt_shell> set_clock_uncertainty -hold 0.45 [get_clocks CLK]
These four commands specify interclock uncertainty within and between clock domains
PHI1 and PHI2.
nt_shell> set_clock_uncertainty 0.4 -from PHI1 -to PHI1
nt_shell> set_clock_uncertainty 0.4 -from PHI2 -to PHI2
nt_shell> set_clock_uncertainty 1.1 -from PHI1 -to PHI2
nt_shell> set_clock_uncertainty 1.1 -from PHI2 -to PHI1
These three commands specify interclock uncertainty between clock domains PHI1 and
PHI2 for specific rising and falling edges.
nt_shell> set_clock_uncertainty 0.4 -rise_from PHI1 -to PHI2
nt_shell> set_clock_uncertainty 0.4 -fall_from PHI2 -rise_to PHI2
nt_shell> set_clock_uncertainty 1.1 -from PHI1 -fall_to PHI2
These two commands specify the uncertainty from CLKA to CLKB and from CLKB to CLKA.
Notice that both must be specified, even though the uncertainty value is the same for both.
nt_shell> set_clock_uncertainty 2.0 \
-from [get_clocks CLKA] \
-to [get_clocks CLKB]
nt_shell> set_clock_uncertainty 2.0 \
-from [get_clocks CLKB] \
-to [get_clocks CLKA]
These two commands are used in a situation where a simple uncertainty setting is used for
interclock uncertainty.
nt_shell> set_clock_uncertainty 5.0 [get_clocks CLKA]
nt_shell> set_clock_uncertainty 2.0 \
-from [get_clocks CLKB] \
-to [get_clocks CLKA]
The first command specifies a simple uncertainty of 5.0 for CLKA paths. The second
command specifies an interclock uncertainty of 2.0 for paths from CLKB to CLKA. If there
are paths between CLKA and other clocks (for example, CLKC, CLKD, ...) for which
interclock uncertainty has not been specified, the simple uncertainty for CLKA is used (in
this case, 5.0).
The remove_propagated_clock command makes clock PH2 an ideal clock rather than a
propagated clock, so NanoTime no longer calculates clock delays and transition times from
driver and load considerations. The set_clock_latency command sets the network
latency is set to 0.8 time units. Network latency is the amount of delay from the clock source
object to sequential elements in the design. The set_clock_transition command
specifies a transition time of 0.2 time units for the PH2 clock signals reaching sequential
elements in the design. To remove a clock transition time setting, use the
remove_clock_transition command.
If the clock tree has been implemented, you can have NanoTime calculate the clock network
delays and transition times from the drivers and loads. Use the set_input_transition
command to specify the transition time explicitly or the set_drive command to specify the
drive resistance of the external device that is driving the clock port.
For example, to set the transition time at the input of clock port CK1 to 0.2 time units, use
the following command:
nt_shell> set_input_transition 0.2 [get_ports PH2]
To set the drive resistance of the external device that is driving clock port PH2 to 20
resistance units, use the following command:
nt_shell> set_drive 20 [get_ports PH2]
Clock Networks
An accurate clock network is a requirement for recognition of other sequential topology
structures. At the match_topology command, NanoTime propagates the clock network
from the clock sources through inverters, transistors that are turned on, clock-gating
structures, and enabled combinational logic gates. NanoTime automatically recognizes
many clock-related topologies. However, you can help NanoTime to propagate or stop the
clock network correctly and to identify complex clock-gating structures.
If NanoTime does not correctly propagate the clock network, use the mark_clock_network
command with the -force_propagation option on ports, pins, or nets to force the tool to
propagate the clock network through those objects. An example is when a clock network
contains latches along the control or reset paths that need to be toggled to create the correct
waveform. The latches must be marked as clocks to be included in the clock network.
Use the -stop_propagation option to force NanoTime to stop clock propagation at an
object. Any clock paths beyond that point are not considered part of the clock network, which
means that no timing checks can be performed for sequential devices beyond that point.
Valid clock endpoints are as follows:
• Latch clock pin input
• Register file clock pin input
• Precharge clock pin input
• Reference pin of a user-defined timing check
• Output port of the design
• Input pin of subsequent generated clock
• Clock pin of an extracted timing model
• Channel-connected block with no fanout
• Port, pin, or net identified with the mark_clock_network -stop_propagation
command
NanoTime automatically stops clock propagation for some conditions. A pin is defined as an
invalid endpoint when any of the following conditions exist:
• The pin resides within the transitive fanout of a clock or net having the is_clock
attribute.
• The pin drives a channel-connected block without a clock net output.
• The pin does not meet any of the criteria for a valid endpoint.
For a path starting from any one of these nets, NanoTime eliminates all but one of the
parallel timing arcs for delay analysis. For a path ending at one of these nets, merging has
no effect. Also, merging does not affect pattern matching, structure recognition, or the
netlist.
To report nets that have been merged, use the report_merged_nets command. To cancel
the effects of the set_merged_nets command and restore independent behavior for one or
more of the merged nets, use the remove_merged_nets command.
Clock-Gating Structures
A clock gate is a topology structure whose inputs include one or more clock signals and
whose output is also a clock signal. Recognizing the output as a clock signal is important for
the analysis of downstream sequential topologies. NanoTime automatically recognizes
some types of clock gates.
Simple clock gates use enable signals to control whether an input clock signal propagates
to the output. Reconvergent clock gates such as pulse generators and pulse shapers use
two or more inputs from a single clock source to generate complex clock signals at the
output. NanoTime can analyze reconvergent clock gates using either a topology-based
approach or a timing-based approach.
This section includes the following topics:
• Clock-Gate Topology Recognition
• Reconvergent Clock Gates
• Timing-Based Reconvergent Clock-Gate Analysis
• Topology-Based Reconvergent Clock Gate Analysis
CLK1
CLKG
EN
CLK1
Setup Hold
EN
CLKG
If NanoTime does not automatically recognize a clock-gating structure, you can use the
mark_clock_gate command to manually specify the location of the structure.
You must specify the input clock pin and the output (gated-clock) net. In addition, you must
specify at least one of the positive or negative enable pins.
Figure 5-15 Clock-Gating Circuit
P1 P2
CLKG
CLK1N
CLK1 N1
EN N2
Timing checks are attached only to the enable pins. No timing checks are done between
clock inputs.
The following conditions must be met for NanoTime to recognize clock-gating topologies
automatically:
• For topology-based analysis, a clock gate must consist of a static CMOS
channel-connected block (CCB) with at least one PMOS transistor and one NMOS
transistor driven by the same clock-enable input net. Either the NMOS or PMOS
transistors must form a stack in a NAND or NOR gate configuration. Constant logic value
clock inputs and enable signals are ignored.
For timing-based analysis, an enable signal is not required. Consequently, a larger
number of clock gates might be recognized automatically.
• There must be at least one clock input, which must be in the clock network.
• Two or more clock inputs are allowed if the clock inputs originate from the same clock
source definition and belong to the same clock domain, making the gate a pulse
generator or pulse shaper. See the following sections for more information about pulse
generators and pulse shapers.
• If any feedback loop devices drive the clock-gate output net, you must force clock-gate
recognition by using the following commands:
mark_clock_network -force_propagation clock_gate_output
mark_feedback -transistors feedback_loop_device
• The propagation must not be stopped and the output must not be forced to a specific
logic state, as can happen with the following commands:
mark_clock_network -stop_propagation clock_gate_output
set_case_analysis [1|0] [get_pins -leaf -of_objects clock_gate_output]
en1
blk
clk
en2
Reconvergent
clock gate
In this example, the clock signals reconverge at the NAND gate inputs blk and clk. For the
circuit to be automatically recognized as a clock-gating structure, the reconvergent signal
must not intersect any other clock signal and must belong to the same clock domain as the
original clock signal.
The topo_clock_gate_allow_reconvergent_clocks variable affects this recognition; its
default is true. When NanoTime recognizes a clock gate, logic checking on the clock input
of the clock-gating structure is disabled. If you want finer control over clock-gating
structures, you can optionally set the topo_clock_gate_allow_reconvergent_clocks
variable to false and manually mark the clock-gating circuits. In this case, you must
manually disable logic checking on the clock signals.
NanoTime can analyze reconvergent clock gates in two different ways:
• Timing-based analysis
The tool analyzes the timing of multiple clock signals arriving at a clock gate to determine
which paths controls the switching of the output signal. Depending on the logic of the
clock gate, the controlling path for maximum-delay analysis might not be the
latest-arriving path and the controlling path for minimum-delay analysis might not be the
earliest-arriving path.
• Topology-based analysis
The tool chooses the paths most likely to be the worst-case maximum-delay and
minimum-delay paths based on the number of topology features in each path, under the
assumption that paths with more levels (more channel-connected blocks) have longer
delays.
After analysis, reconvergent clock gates are classified as either resolved or unresolved:
• Resolved
If NanoTime selects specific paths through the clock gate to use for worst-case timing
analysis, the clock gate is said to be resolved. All other clock paths are ignored for timing
analysis.
• Unresolved
If the tool cannot determine the best paths to use for timing analysis, the clock gate is
said to be unresolved. All clock paths are propagated through the clock gate, which
might lead to pessimistic results.
If a clock gate is resolved, the names of the controlling pins are stored in four attributes
associated with the clock-gate topology object: the controlling_nmos_pin_max,
controlling_nmos_pin_min, controlling_pmos_pin_max, and
controlling_pmos_pin_min attributes. If the clock gate is unresolved, all clock pins
remain active and some of these attributes are not set.
When an upstream logic gate or library cell blocks a clock input to a reconvergent clock gate,
NanoTime classifies the clock gate as an unresolved pulse shaper or unresolved pulse
generator. Performing this strict checking guarantees pessimism. However, you can relax
the requirement by setting the topo_clock_gate_strict_checking variable to false (the
default is true). When you do this, NanoTime performs more aggressive clock gate
recognition and classifies the clock gate as a resolved pulse shaper or resolved pulse
generator.
NanoTime analyzes the number of simulation levels (channel-connected blocks) from the
common clock net to the clock gate as follows:
• If the number of levels is an odd value for one clock input and an even value for the other
clock input, the structure is a pulse generator.
• If the number of levels is an even value for both clock inputs or an odd value for both, but
the two values are different, the structure is a pulse shaper.
For both types of unresolved clock-gating structures, NanoTime propagates all clock paths
through the clock gate, producing a pessimistic output waveform.
You should attempt to reduce the pessimism of the clock-gate output waveform by guiding
the critical clock paths through the clock gate, using commands such as the following:
mark_instance -dont_search_thru_gate \
clock_cells_driven_by_noncritical_paths
set trace_disable_switching_net_logic_check true
set_false_path -through clock_gate_input_pin \
-through clock_gate_output_pin
The numbers in the Waveform column indicate the times at which the rising and falling
edges of the clock occur.
The letters in the Attrs column indicate the attributes of the clock (propagated, generated,
pulse clock high, or pulse clock low). A propagated clock uses calculated rather than ideal
delays. A pulse clock is a clock whose leading and trailing edges are triggered by the same
event, but with different delays from the common triggering event.
The Sources column indicates the source object specified at the time of clock creation.
To get a report on clock latency and uncertainty for an ideal (not propagated) clock, use the
-skew option of the report_clock command. For example,
nt_shell> report_clock -skew
...
Min Rise Min Fall ... Hold Setup
Object Latency Latency ... Uncertainty Uncertainty
------------ -------- -------- --- ----------- -----------
MCLK -- -- ... 0.200 0.200
clk1 -- -- ... 0.200 0.200
clk2 -- -- ... 0.200 0.200
clk3 -- -- ... 0.200 0.200
To restrict the scope of the report to specific clocks, list the clocks in the report_clock
command. For example,
nt_shell> report_clock MCLK
...
Clock Period Waveform Attrs Sources
-------- -------- ----------------- ----- ------------
MCLK 4.000 {0.000 2.000} p
By default, the command reports a summary for each clock in the design. The summary
includes the number of clock nets, clock gates, valid endpoints, and invalid endpoints.
The -from option can be used to restrict the report to a single clock or a subsection of a
single clock network. If a net is specified, then the report considers only that net and the
transitive fanout from that net. If a clock is specified, then the transitive fanout of all source
pins of that clock is used.
The -errors option reports the details of all errors found in every clock network. By default,
a summary of errors is listed. The summary includes the number of invalid endpoints in
every clock network. Also, there might be some nets that are not part of the clock network
but should be, perhaps because they have the is_requires_clock attribute; these nets
are reported as “non-clock specific errors.” You can use the -errors option in conjunction
with the -from option to investigate errors from a single clock port or net.
The -verbose option reports detailed information about the errors. For invalid endpoints,
the channel-connected block driven by the endpoint is further analyzed. If the driven
channel-connected block contains a net with an attribute indicating a potential storage node,
then channel-connected block is listed on the report as a “possible missing sequential
topology.” If the channel-connected block has a net with the is_requires_clock attribute
in its transitive fanout, then it is reported as a “possible missing clock gate.” For a non-clock
specific error, the reasons why the net should be a clock are listed.
An example of a clock network report is as follows:
****************************************
Report : clock network
Design : ALU
Version: G-2012.06
Date : Tue Aug 14 [Link] 2012
****************************************
To investigate a specific net within the clock network, specify a single net for the nets
argument. If the net is not part of the current clock network, then the transitive fanin of the
net is searched, and a list of clock network endpoints or primary inputs with fanout to the
current net is displayed. The points found are sorted by the fewest number of traversed
channel-connected blocks. The -from option cannot be used to generate a report for
multiple nets.
If the net is part of the clock network, then a back propagation through channel-connected
blocks of the clock network occurs and the driving clock ports are displayed.
If the -verbose option is used, then the full channel-connected block paths are also
displayed when showing transitive fanin points of the report.
Net Min Rise Min Fall Max Rise Max Fall Period Attrs Clock
----------- --------- --------- --------- --------- ------ ----- ------
Xsreg.ck10 3.549 0.322 3.628 0.423 6.000 clk2n
Xbreg.ck10 4.052 0.830 4.134 0.937 6.000 clk2n
Xareg.ck10 4.160 1.013 4.245 1.095 6.000 clk2n
...
Some clock arrivals might be missing from the report because NanoTime does not calculate
unneeded delays. For example, if a clock only drives a P-channel pullup transistor, the tool
analyzes only the falling edge for that pin. You can force the report to include all clock arrival
times by adding pulse width checks on all clocks, as shown in the following example:
set_min_pulse_width 200 [get_pins -leaf -of \
[get_nets -hier * -filter “is_clock==true”] \
-filter “lib_pin_name==$link_transistor_gate_pin_name”]
This report shows the full clock network using a tree representation. Each node in the tree,
represented by one line in the report, is a timing point in the clock tree. Timing points
propagated from another timing point are shown indented below the higher-level point.
At each timing point, the report shows the following information:
• Arrival time (delay from clock source)
• Edge direction at clock source (r = rising, f = falling)
• Timing point name (pin or net name)
• Method of propagation from the previous point:
via net = connection from an input port
via inverter = propagation through an inverter
via clock_gate = propagation across a clock gate
via force_propagation = mark_clock_network setting
via unknown gate type = other situation
When you use the -tree option, you can use the -min or -max and -rise or -fall
options to restrict the scope of the report. You can also specify which clocks are to be
reported. Otherwise, the command reports all conditions and all clocks. Use the -nets
option if you want the report to show net names rather than pin names.
6-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Limitations
For non-digital topologies, you assume the responsibility for validating the delays calculated
by NanoTime. NanoTime does not support the following design styles:
• Analog circuits, except certain sense-amp circuits used in an SRAM context
• BiCMOS logic
• Complementary pass transistor logic (CPL)
• Flash or content-addressable memory
NanoTime supports a wide variety of digital design topologies, as described in this user
guide. However, unique designs might encounter unexpected results during NanoTime
analysis. You must validate NanoTime delays against HSPICE for unusual designs,
including the following:
• Topologies with very nonlinear switching characteristics
• Stages with very large transitions at their outputs
• Circuits with multiple channel-connected stages that must be simulated together (such
as cross-coupled stages)
• Circuits with complex self-timed loops
• Circuits with multiple inputs that switch simultaneously
• Circuits that require initial conditions within the simulated region
• Circuits that do not have full rail to rail voltage switching
• Circuits that use the source or drain terminals of pass transistors as inputs
Inverter Structures
NanoTime automatically recognizes standard CMOS inverter structures, including
long-channel inverters consisting of all transistors in one channel-connected block, as
shown in Figure 6-1. NanoTime uses inverter information to propagate clocks and to trace
data signals through the design.
Figure 6-1 CMOS Inverter Structures
in out in out in
out
Simple inverter
Long-channel inverters
The mark_inverter command lets you specify the location of an inverter that NanoTime
does not recognize automatically. In the command, you specify the NMOS pulldown
transistor and the PMOS pullup transistor for each inverter in the design. For long-channel
inverters, you specify the transistors in the NMOS pulldown stack and in the PMOS pullup
stack, between the output of the inverter to the power rails, for each inverter in the design.
To cancel the effects of the mark_inverter command, or to override recognition of an
automatically detected inverter, use the erase_inverter command.
Transfer Gates
NanoTime automatically recognizes a transfer gate consisting of an NMOS and a PMOS
transistor with their sources and drains connected. Figure 6-2 shows some types of transfer
gates that are automatically recognized. NanoTime uses information about transmission
gates to correctly generate critical paths and to improve delay calculation accuracy.
Figure 6-2 CMOS Transfer Gates
x1
in1 out1
x2
x x
For the transfer gate shown on the lower left of Figure 6-2, to calculate the delay from the “x”
input, NanoTime includes the inverter as part of the stage. For all other types of transfer
gates such as the one shown on the right, NanoTime assumes that the complementary
inputs are symmetrical. In other words, it calculates the slope of the signal at the gate of the
NMOS or PMOS transistor and assumes that the other gate signal switches in the opposite
direction with the same slope.
The mark_tgate command lets you specify the location of a transmission gate that
NanoTime does not recognize automatically. In the command, you specify the NMOS and
PMOS transistors in the design that operate as pass transistors. For example,
nt_shell> mark_tgate -n_transistor mn21 -p_transistor mp18
Feedback Transistors
NanoTime recognizes feedback transistors connected between the input and output of an
inverter. It removes them from path searches to prevent looping through the circuit.
However, it considers them to be active devices during delay calculation. Figure 6-3 shows
examples of PMOS and NMOS feedback transistors.
Figure 6-3 Feedback Transistors
PMOS
feedback
NMOS
feedback
If the circuit is designed with an NMOS feedback transistor that is stronger (having less
resistance) than the NMOS transistor of the forward inverter, NanoTime does not recognize
the feedback transistor by default. To ensure proper recognition, you can set variables that
determine the relative resistance threshold for recognizing feedback transistors.
NanoTime checks the following relationship:
where R tran is the resistance of the transistor in question, R forward is the resistance of the
transistor in the forward inverter, and ratio is the value of one of the ratio variables. The
topo_feedback_n_res_ratio variable is used if the transistor in question is an NMOS
transistor, and the topo_feedback_p_res_ratio variable is used for a PMOS transistor.
If the relationship is true, the transistor is recognized as a feedback transistor. A feedback
transistor is eliminated from path tracing but is considered an active device during delay
enable
data
enable_x
In cases where automatic recognition of feedback transistors does not work as desired, you
can manually mark the transistor instances with the mark_feedback command. To cancel
the effects of the mark_feedback command or erase automatic recognition of an
automatically recognized feedback transistor, use the erase_feedback command.
Similarly, the mark_pullup command specifies the location of a pullup transistor in the
design, where a falling-edge transition cannot be propagated due to the lack of a pulldown
transistor.
Figure 6-5 shows pulldown and pullup transistors.
Figure 6-5 Pulldown and Pullup Circuits
Pulldown Pullup
transistor transistor
not support the automatic recognition of this structure and issues an error message if the
structure does not conform to a conventional cross-coupled PMOS topology. The following
command marks transistors MP1 and MP2 as a cross-coupled PMOS structure:
nt_shell> mark_cross_coupled_pmos -transistors {MP1 MP2}
The mark_weak_pullup command lets you specify the location of a pullup or pulldown
transistor that NanoTime does not recognize automatically. For example, the following
command identifies transistor m1 as a weak pullup transistor:
nt_shell> mark_weak_pullup m1
Turnoff Structures
NanoTime automatically recognizes three-state turnoff structures like the one shown in
Figure 6-8. The structure consists of two PMOS pullup transistors and two NMOS pulldown
transistors connected in series, with complementary enable signals at the respective PMOS
and NMOS transistor gates.
Figure 6-8 Recognized Turnoff Structure
In
EnB
Out
En
In
The mark_turnoff command lets you specify the location of turnoff structures that
NanoTime does not recognize automatically, such as the one shown in Figure 6-9.
In En Mp2
In EnB Mn2
For example, the following command identifies a three-state turnoff structure with an output
net Out and enable and disable input pins Mn1.g and Mp1.g:
nt_shell> mark_turnoff -enable_pins {Mn1.g Mp1.g Mn2.g Mp2.g} \
-output_net Out
In the command, you must specify the output net of the turnoff structure. You can optionally
specify the enable and disable pins of the structure, where NanoTime performs turn-off and
turn-on timing checks.
To cancel the effects of the mark_turnoff command, or to override recognition of an
automatically detected turnoff structure, use the erase_turnoff command.
Latch Structures
NanoTime automatically recognizes latch structures based on the meeting of clock and data
signals where inverter, NAND, NOR, or three-state elements are arranged in a feedback
configuration. Figure 6-10 shows four different latch structures that are recognized.
NanoTime performs latch timing checks on these structures to ensure that the setup and
hold constraints are satisfied.
Figure 6-10 Recognized Latch Structures
A B
CLK
CLKb
CLKb
CLKb
CLK
CLK
The mark_latch command lets you specify the location of a latch that NanoTime does not
recognize automatically.
You must specify the latch node. If the topo_auto_find_latch_clock variable is set to
false (the default), you must also specify the clock pin. If you set the variable to true and
do not specify a clock pin, NanoTime attempts to find a clock pin for the marked latch. You
can also specify the input, output, feedback elements, feedforward elements, and timing
endpoints in the latch. For example, consider the latch circuit shown in Figure 6-11.
m6 clk
m4
lat_node
m3
m2 clkb
clk
m7
lat_in m1 lat_out
m8
The latch circuit shown in Figure 6-11 is automatically recognized by NanoTime. If it could
not be recognized automatically, you would specify it manually with the following command:
nt_shell> mark_latch -latch_net lat_node \
-inputs lat_in -output lat_out -clock m1.g \
-feedforward {m7 m8} -feedback {m2 m3 m4 m6}
The latch node is lat_node, the latch input net is lat_in, the latch output net is lat_out, the
feedforward elements are m7 and m8, the clock pin is m1.g, and the feedback elements are
m2, m3, m4, and m6. The feedforward elements go from the latch node to the input of the
feedback devices (not necessarily to the output of the latch).
If you specify feedback elements, they must be driven by the output net of the latch.
NanoTime stops path tracing at each feedback element to prevent looping through the
circuit. If you specify feedforward elements, NanoTime simulates the feedforward elements
together to get more accurate delay results.
By default, when NanoTime encounters a latch with an inverter loop, it recognizes the
inverter with smaller resistance (stronger drive) as the forward inverter and assumes that the
weaker inverter is the feedback inverter. The input of the forward inverter is the latch input
node, and its output is the latch output node. To change this behavior, set the
topo_feedback_inv_ratio variable to a value smaller than the default of 1.0.
For more information, see Debugging the Data Inputs of Sequential Elements.
Similarly, the -hold_to option specifies where NanoTime performs hold checking in the
latch circuit. It can be set to either latch_net (the default) or input. Setting it to input
causes NanoTime to check for the arrival of data at the latch input, resulting in a more
conservative check than using the latch net. In the absence of this option, the hold checking
point is determined by the topo_latch_hold_to variable, which is set to latch_net by
default.
You can change the places where NanoTime performs setup and hold checking by using the
set_timing_check_attachment command. For details, see the man page for the
command.
To prevent the setup check from being changed from the default location for nontransparent
latches, set the timing_enable_non_transparent_setup_delta_delay variable to
false.
CK
X4
CKB
CKB
D X1 X2 X3 Q
LAT
CK
QB
There are two ways to perform path tracing through tapped-feedback devices:
• Allow NanoTime to find and mark tapped-feedback devices. By default, the
report_topology -verbose command reports such devices with a b+ annotation;
regular feedback devices are marked with a b annotation. Feedback device marking is
controlled by the topo_latch_find_tapped_feedback variable. The variable is set to
true by default, which allows NanoTime to automatically mark tapped-feedback devices
and continue path tracing through such devices.
• Explicitly mark tapped feedback devices with the -tapped_feedback object_list
option of the mark_latch command. NanoTime continues path tracing through these
marked devices. Any device identified as a tapped feedback in the -tapped_feedback
object list must also belong to the feedback device list.
Flip-Flop Structures
A flip-flop is a structure where two latches are connected together sequentially with both
latches clocked by the same clock, but with an inverted phase relationship. The first latch is
the master, which must have a transparent path to the second latch. The second latch is the
slave, which is evaluated as a nontransparent device. The clock that drives the slave must
be an inverted version of the clock that drives the master. See Figure 6-13 for an example.
Figure 6-13 Flip-Flop Example
CKN
CK CKN CK
D QN Q
Master
CK CK CKN
latch
CK
Slave
latch
net
Master Slave
NanoTime can detect flip-flop structures where the master latch output (master latch
feed-forward transistor) and slave latch net are in the same channel-connected block. In the
example in Figure 6-14, the master latch output is gated through a transfer gate, which
drives a slave latch net. Because both sides of a transfer gate are in the same
channel-connected block, the flip-flop is recognized.
D ML MO SL SO
Master feedforward
channel-connected block
To enable recognition of simple flip-flops constructed from two consecutive latches, add the
flip_flop argument to the topo_auto_search_class variable. You should also enable
automatic recognition of topologies in the global database. Use the following commands
before you execute the match_topology command:
set_search_enabled global$(hierarchy_separator)*
set topo_auto_search_class “$topo_auto_search_class flip_flop”
...
match_topology
...
You can set this condition as the default in the NanoTime flow.
NanoTime can also recognize flip-flops when the slave latch net is not in the same
channel-connected block as the master feed-forward device, as in the case when an inverter
exists between the master latch output and the transfer gate, as shown in Figure 6-15. To
enable recognition of these flip-flops, set the topo_flip_flop_strict_slave_check
variable to false. The default for this variable is true.
Figure 6-15 Flip-flop with Separated Channel-Connected Blocks
D ML MO SL SO
Master feedforward
channel-connected block
NanoTime cannot automatically recognize flip-flops with AOI or OAI structures in the
feedforward or feedback legs of either latch. They must be marked explicitly.
If a flip-flop is not automatically recognized, use the mark_flip_flop command to mark it
manually. The mark_flip_flop command should be used after the match_topology
command, which finds the automatically recognized latches. For user-defined flip-flops, the
mark_flip_flop command should be used after the mark_latch command, but it can
occur before the match_topology command.
You must specify the master object and slave object of the flip-flop. For each object, you can
specify either the name of the latch net or the name of a latch structure previously
recognized by the match_topology command or marked manually with the mark_latch
command.
By default, NanoTime uses the latch net as the path endpoint for setup and hold checks.
You can change the places where NanoTime performs these checks by using the
set_timing_check_attachment command. For details, see the man page for the
command.
To cancel the effects of the mark_flip_flop command, or to override recognition of an
automatically detected flip-flop, use the erase_flip_flop command.
Multiplexer Structures
NanoTime automatically recognizes multiplexer (MUX) structures based on the presence of
parallel pass gates or transmission gates that are connected together at the source or drain.
See Figure 6-16 for some examples. NanoTime uses multiplexer information to prevent the
tracing of false paths.
Figure 6-16 Multiplexer Circuit Examples
S0
S0
N1
S0 S0
N1
S1
S1
N1
S1
S1
To be recognized as a multiplexer, the pass gates or transfer gates must share a common
drain or source. In addition, by default, the resistance of the pass gates or transfer gates
must be exactly the same. To enable recognition of multiplexer circuits with pass gates or
transfer gates with slightly different strengths, set the topo_mux_drive_res_ratio variable
to specify the allowable difference in strengths.
The mark_mux command lets you specify the location of a multiplexer that NanoTime does
not recognize automatically. In the command, you must specify the names of the output net
and the multiplexer selection pins. For example:
nt_shell> mark_mux -output_net N1 \
-select_pins [get_pins -leaf -of_objects [get_nets {S0 S1}] \
-filter "lib_pin_name == G"]
Precharge Q
node
A C
B
NMOS stack
(pulldown logic
network)
CLK
Evaluate
transistor
When the clock goes low, the precharge transistor is turned on and the evaluate transistor
is turned off. This charges the precharge node up to a high voltage and forces the output Q
low. When the clock goes high, it turns off the precharge transistor and turns on the evaluate
transistor. Depending on the input values A, B, and C, the circuit either does or does not
discharge the precharge node, causing the output Q to either change from low to high or
stay low.
The NMOS logic network can contain any combination of NMOS transistors arranged in an
AND-OR (series-parallel) configuration. This NMOS network is sometimes called the
pulldown stack. If the stack can be guaranteed to be always off during the precharge phase,
the NMOS evaluate transistor is redundant and can be omitted from the circuit. A domino
stage without an evaluate transistor is called a “footless” circuit.
A weak PMOS feedback transistor between the output Q and the precharge node holds the
precharge node steady during the evaluate stage. When the evaluation stack is off, the
feedback transistor prevents the precharge node from unwanted discharge due to leakage,
cross-coupled noise, or charge sharing with nodes in the pulldown stack.
In a cascade of these domino stages, multiple stages in sequence can be evaluated within
a single clock cycle. The first-stage output Q can either stay low or go high. If it goes high, it
can cause the second-stage output to either stay low or go high. If the second-stage output
goes high, it can affect the third stage, and so on down to the last stage, like a row of
dominoes.
The precharge phase “sets up” the dominoes, and then the evaluate phase conditionally
“topples” them, one by one in sequence, until blocked by a logical condition at any one
stage. After a domino falls, it cannot rise again until it is set up by another precharge phase.
CLK
CLK
Clock
Clock
Clock
Automatic recognition of a precharge node in a domino circuit depends on not only the
topology of the circuit, but also the widths and lengths of the feedback transistor and forward
inverter. NanoTime recognizes the PMOS transistor as a feedback transistor if its resistance
is greater than that of the NMOS transistor in the forward inverter. The resistance
comparison is affected by the topo_feedback_p_res_ratio variable. To have feedback
transistors recognized by connectivity only, set the variable to 0.
Evaluation Clock
NanoTime can handle multiple evaluation circuits connected to a single evaluation clock,
such as the configuration shown in Figure 6-20.
Figure 6-20 Single Evaluation Clock
CLK
Within a single evaluation stack, the evaluation clock device need not be at the bottom of the
stack as shown in Figure 6-21.
Figure 6-21 Evaluation Clock Location
OUT OUT
IN CLK
CLK IN
For a single domino, there can be multiple evaluation stacks controlled by different clocks as
shown in Figure 6-22.
Figure 6-22 Different Evaluation Clocks for Same Domino Nodes
CLK
A B
CLKA CLKB
The precharge clock and the evaluation clock do not have to be the same clock node. The
evaluation stacks without evaluation clocks are recognized as footless domino logic.
Evaluate Domino
net output
Domino
Evaluate output
-latch_type none
net
A half-latch keeper is a pullup feedback transistor connected between the domino output
and the evaluate net. A full keeper has both pullup and pulldown feedback transistors, thus
making a set of two inverters that feed back into each other.
The phrase “same phase as data” means that the domino gate and the latch or domino gate
that precedes it in the path are controlled by the same clock and are transparent on the
same phase of that clock.
The flop, latch, and retain latch types all have the same full-keeper feedback structure.
Because of the pulldown transistor on the evaluate net, a data input that is high does not
need to remain high throughout the evaluate phase. This relaxes the falling-clock to
falling-input hold constraint. The other timing checks done for the latch and retain cases
are the same as those done for the half_latch case. A precharge gate acts like a latch
because its output can be in a different clock cycle from its input.
For latch, NanoTime assumes that the domino gate should be on a clock phase boundary.
That is, the clock for the domino gate should be inverted with respect to any domino gate or
latch that drives its input. If this is not the case, NanoTime issues a warning during path
tracing.
For retain, NanoTime assumes that the domino gate should not be on a clock phase
boundary. If this is not the case, it issues a warning during path tracing.
For flop, NanoTime treats the gate as nontransparent, does not trace paths through the
gate, and does not issue any warnings about the phase of the data. It allows a full cycle for
setup and hold checks if the data comes from a latch or domino gate controlled by the same
clock and clock phase. (For the other latch types, NanoTime expects the data to arrive at the
input of the domino gate in the same clock cycle that it leaves the previous latch or domino
gate.) Otherwise, the checks are the same as for the latch or retain case.
The example shown in Figure 6-24 is a simple precharge gate having one precharge clock
transistor, a half-latch keeper, and a footless stack with two evaluate data transistors.
NanoTime recognizes this structure automatically and it is not necessary to use the
mark_precharge command. The command that would identify the structure is shown as an
illustration of the command options.
Figure 6-24 Footless Precharge Gate With Half-Latch Keeper
enode
z
d1 MN1 MN2 d2
The example shown in Figure 6-25 is a predischarge gate having one predischarge clock
transistor, a stack with two evaluate data transistors, and an evaluate clock transistor.
NanoTime recognizes this structure automatically and it is not necessary to use the
mark_precharge command. The command that would identify the structure is shown as an
illustration of the command options.
Figure 6-25 Predischarge Gate Without Keeper
clk MP3
d1 MP1 MP2 d2
enode
z
clk MN1
The example shown in Figure 6-26 is a set of two precharge gates that share a common
evaluate clock transistor. NanoTime recognizes this structure automatically and it is not
necessary to use the mark_precharge command. The command that would identify the
structure is shown as an illustration of the command options.
Figure 6-26 Multiple Evaluate Stacks With a Shared Evaluate Transistor
e1 e2
clk MN13
The example shown in Figure 6-27 is a precharge gate that has a half-latch keeper and a
secondary precharge transistor to precharge an intermediate node in the evaluate stack.
NanoTime does not recognize this structure automatically.
Figure 6-27 Precharge Gate With Secondary Precharge Transistor
enode
z
clk MP3
d1 MN1
d2 MN2
clk MN3
The example shown in Figure 6-28 is a precharge gate that has a full keeper and two
precharge data transistors to precharge an intermediate node in the evaluate stack.
NanoTime does not recognize this structure automatically.
Figure 6-28 Precharge Gate With Precharge Data Transistors
enode
z
d1 MN1 MN3
MP3
MP4
d2 MN2
The example shown in Figure 6-29 is a precharge gate that has a half-latch keeper on the
evaluate net, a secondary precharge transistor to precharge an intermediate node in the
evaluate stack, and a full keeper on the intermediate node in the stack. NanoTime does not
recognize this structure automatically.
Figure 6-29 Precharge Gate With Keeper on Data Node
enode
z
d2 MN2 MN3
N1
out
n1
Precharge Evaluate
n1
CLK
CLK
CLK
N2
out
n2
n2 Precharge Evaluate
CLK
N3
out
n3
Precharge Evaluate
n3
CLK
CLK
p4
p4
P4
out
CLK
RAM Structures
NanoTime automatically recognizes a random-access memory (RAM) structure when two
equal-strength inverters feed back into each other. Figure 6-34 shows a typical RAM
structure.
Figure 6-34 RAM Structure
pmos 4/1
nmos 2/1
pmos 4/1
nmos 2/1
By default, the strengths of the two inverters must be the same for automatic recognition of
the RAM structure. To enable recognition of inverters of slightly different strengths, set the
topo_ram_drive_res_ratio variable to specify the allowed amount of difference in
strengths.
By default, NanoTime continues path tracing through RAM structures. To have NanoTime
stop path tracing when it reaches a RAM structure, set the topo_ram_search_thru_cell
variable to false.
The mark_ram command lets you specify the location of a RAM structure that NanoTime
does not recognize automatically. The command must specify the names of the two input
nets of the RAM structure.
For example, the following command identifies a RAM structure having input nodes at nets
n47 and n48:
nt_shell> mark_ram -node1 n47 -node2 n48
Back-to-back inverters can also be used for differential synchronizers. If the two nets on
each end of the structure have been marked as a differential circuit pair, the circuit in
Figure 6-34 is recognized as a differential synchronizer and not as a RAM cell.
To cancel the effects of the mark_ram command, or to override recognition of an
automatically detected RAM structure, use the erase_ram command.
WR
reg1 reg2
IN m1 OUT
WR
n2
m2
By default, timing paths and timing checks for register file structures do not include the path
segment across the register file (the path between nets reg1 and reg2 in Figure 6-35). The
only path from IN to OUT goes through net n2, and the associated timing checks are defined
with respect to the clock signal on transistor m2.
If you want NanoTime path tracing to include the path segment across the register file, set
the timing_register_file_add_cross_delay_constraint_arcs variable to true. In
this case, two paths are traced from IN to OUT, the original path through net n2 and a new
path through nets reg1 and reg2. New timing checks are also automatically created. In this
example, the timing checks reference the clock signal on transistor m1.
Figure 6-36, Figure 6-37, and Figure 6-38 show additional register file structures that
NanoTime recognizes automatically. The tool can also recognize the structure in
Figure 6-36 if the initial NAND gate is replaced with a NOR gate, and the structures in
Figure 6-37 and Figure 6-38 if the initial inverter is replaced with a NAND gate or NOR gate.
Figure 6-36 Pulldown Register File Topology
WR WR
IN1
IN2 OUT
WR WR
IN
OUT
WR WR
IN
OUT
The mark_register_file command lets you specify the location of a register file structure
that is not recognized automatically. The command must specify the names of the nets that
serve as the register data nodes and clock pins.
For example, the following command identifies a register structure having data nodes at
nets n47 and n48 and controlling clocks at pins m51.g and m52.g:
nt_shell> mark_register_file -net1 n47 -net2 n48 \
-clock1 m51.g -clock2 m52.g
clk clk
IN m51 m52
n47 n48
OUT
XOR Structures
NanoTime automatically recognizes a 6-transistor implementation of XOR (exclusive OR)
and XNOR (exclusive NOR) logic gates. The recognized XOR implementation is shown in
Figure 6-40. The recognized XNOR structure is similar. NanoTime uses its knowledge of
XOR and XNOR structures to eliminate false paths for some logic states.
Figure 6-40 Recognized XOR Structure
B
Mp7
Mp6
A
Mn6
Mn7
The mark_xor command lets you specify the location of an XOR structure that NanoTime
does not recognize automatically. The command must specify the input pins and output net
of the XOR structure. For example, the following command identifies an XOR structure with
input pins Mn6.g and Mn7.g and output net out1:
nt_shell> mark_xor -output_net out1 -input_pins { Mn6.g Mn7.g }
7-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Dn Qn
Dp Qp
clkn
Xsync
clkp
Analysis of differential clocks and circuits requires a NanoTime Ultra license. The following
conditions apply:
• You cannot use dynamic simulation (dynamic clock simulation or dynamic delay
simulation) or multi-input switching to analyze differential circuits.
• Sequential topologies can have only one differential clock pair.
Two commands and one variable are specific to differential circuits:
• The set_differential command associates two objects of the same type (ports, pins,
or nets) as a differential pair. The command is used to create differential clocks, define
differential net pairs, and define differential pin pairs.
• The mark_differential_synchronizer command is used to manually mark
differential synchronizers that are not automatically recognized.
• The timing_differential_iteration_count variable specifies the minimum number
of iterations to use when determining differential skew automatically.
For example, the following commands ensure that nonreference pins of fingered devices are
filtered from the lists of source and target objects of a generated clock:
nt_shell> set source_pins [get_pins -leaf -of {n2clk1n n2clk1p} \
-filter “!is_parallel_non_reference”]
{“xnd1/MN1/G”,”Xcn4/md1/D”,”Xcn4/mdn1/D”,”xnd1/MP1/G”,”Xcp4/mup1/D”,
“Xcp4/mdn1/D”}
Differential Clocks
The set_differential command is used on ports or pins together with the create_clock
and create_generated_clock commands to create differential clocks.
nclkn
clkn Qn
clkp Qp
nclkp
The following procedure creates a differential clock pair at ports clkp and clkn in Figure 7-2:
1. Define a standard clock on port clkp with the create_clock command.
2. Assign ports clkp and clkn to be a differential pair with the set_differential
command. Because clkp is the clock object, it is the reference object of the differential
pair that includes ports clkp and clkn. Therefore, it must appear first in the argument list.
The resulting commands are as follows:
create_clock -name clkn_clkp [get_ports clkp] \
-waveform {0 1.0} -period 2.0
set_differential [get_ports {clkp clkn}]
You can then specify clock properties such as latency and uncertainty on the reference port
or pin of the differential pair. You can set clock properties any time before the
check_design command.
Alternatively, you can first create a reference clock to use as a basis for creating generated
clocks. The reference clock enables you to define properties such as input delay and
latency more easily when there are multiple generated clocks.
To create the differential clock in Figure 7-2 with this method, use the following procedure:
1. Define a reference clock with the create_clock command.
2. Define a generated clock at port clkp based on the reference clock, using the
create_generated_clock command. Using the -edges option with the
create_generated_clock command is required when you are creating differential
clocks for use in extracted timing models.
3. Assign ports clkp and clkn to be a differential pair with the set_differential
command.
The resulting commands are as follows:
create_clock -name refclk -waveform {0 1.0} -period 2.0
create_generated_clock -name clkn_clkp -master_clock \
[get_clocks refclk] [get_ports clkp] -edges {1 2 3}
set_differential [get_ports {clkp clkn}]
You can then specify clock properties such as latency and uncertainty on the reference
clock. Generated clocks inherit the properties of their reference clocks. You can set clock
properties any time before executing the check_design command.
nclkp
clkp
bclkp
X7
Dn X6 Lp Qn
X1 X2
X5
Dp Ln Qp
X8
bclkn
clkn
nclkn
3. Define differential pairs between the PMOS and NMOS pins of each transmission gate
with the set_differential command. The PMOS pins appear first in the argument list
because they are the reference clock objects.
Executing a set_differential command on a net does not cause the pins of that net
to be marked as differential. You must mark both the pins and the nets of parallel
structures in differential clock networks.
4. Define one differential pair between the PMOS pins of cells X7 and X8 and another
between the NMOS pins, using the set_differential command.
The report lists the sequential device clock input nets, the “Min Rise,” “Min Fall,” “Max Rise,”
and “Max Fall” arrival times at each pin, and the clock source (with attributes, if applicable)
as shown here:
nt_shell> report_clock_arrivals
...
Attributes:
H - Pulse clock with high pulse
L - Pulse clock with low pulse
D - Differential clock
Net Min Rise Min Fall Max Rise Max Fall Period Attrs Clock
----------- --------- --------- --------- --------- ------ ----- --------
out3n 0.014 1.014 0.014 1.014 2.000 D vip_vin
out3p 1.014 0.014 1.014 0.014 2.000 D vip_vin
out9n 1.021 0.021 1.021 0.021 2.000 D vip_vin
Differential net skew is nondirectional and edge-agnostic. The complement net always
switches later than the trigger net. For example, consider two nets data1n and data1p. Set
a skew value of 5 ps for maximum delay analysis with the following command:
nt_shell> set_differential {data1n data1p} -skew_max 5
If data1n switches during maximum delay analysis, data1p switches 5 ps later. If data1p
switches first, data1n switches 5 ps later.
You can experiment with different values of differential skew. First, use the reset_design
-paths command to reset the analysis database. Then, use the set_differential
-skew_max command to change the manually applied skew. Run path tracing again to
observe the results.
Differential Synchronizers
Differential synchronizers reduce the skew between two nets in a differential pair. NanoTime
automatically recognizes the synchronizer circuit types shown in Figure 7-4 and Figure 7-5.
Figure 7-4 Cross-Coupled NMOS and PMOS Differential Synchronizers
bclkn bclkn
bclkp bclkp
bclkp X4
data1n
Figure 7-6 shows examples of acceptable and unacceptable synchronizer designs. In each
side of circuit (a), an inverter feeds into a pass gate.
However, although circuit (b) also contains two channel-connected blocks, each
channel-connected block does not connect the enclosing nets bclkn and bclkp. NanoTime
cannot handle circuit (b) as a differential synchronizer.
Figure 7-6 Differential Synchronizer Designs
X3
X4
bclkp bclkp
To enable automatic recognition of synchronizer circuits, you must mark the enclosing nets
(the differential nets associated with the synchronizer) as a differential pair before executing
the match_topology command:
nt_shell> set_differential {bclkn bclkp}
...
nt_shell> match_topology
bclkn
set
clkn mn2 mp2 clk
X3
outx
out
X4
clk mp1 mn1 clkn
rst
bclkp
Timing analysis does not include paths through differential synchronizers. To perform timing
analysis through paths that traverse any part of a differential synchronizer, you must mark
that synchronizer manually to indicate that some or all of the transistors in the synchronizer
are tapped transistors by using the -tapped_transistors option of the
mark_differential_synchronizer command.
For example, in Figure 7-7, nets set, rst, out and outx are internal to the synchronizer. If you
want to perform timing checks related to these internal nets, use the following commands to
mark the transistors of cells X3 and X4 as tapped transistors:
nt_shell> set_differential {bclkn bclkp}
nt_shell> set_differential {out outx}
nt_shell> set_differential {clk clkn}
nt_shell> mark_differential_synchronizer \
-transistors {mp1 mn1 mp2 mn2 X3/* X4/*} \
-tapped_transistors {X3/* X4/*}
If you also want to perform timing checks between the nets bclkn and bclkp, you must
additionally mark the transistors of the pass gates as tapped transistors:
nt_shell> set_differential {bclkn bclkp}
nt_shell> set_differential {out outx}
nt_shell> set_differential {clk clkn}
nt_shell> mark_differential_synchronizer \
-transistors {mp1 mn1 mp2 mn2 X3/* X4/*} \
-tapped_transistors {mp1 mn1 mp2 mn2 X3/* X4/*}
bclkp
X3 Qn
X6 Ln
Dn
X1 X2
X5
Dp
Lp Qp
X4
bclkn
clkn
nclkn
To manually mark the latch shown in Figure 7-8, use the following procedure:
1. Mark known differential nets with the set_differential command, including the latch
nets (Lp and Ln), the clocks (bclkp and bclkn), and the inputs (Dp and Dn).
2. Execute the match_topology command to propagate the clocks.
3. Mark the latch with the mark_latch command, but do not include the differential
synchronizer cells X1 and X2 in the latch definitions.
4. Review the topology report (obtained with the report_topology command) to verify that
the topologies are correct.
X6
X16 Sn Qn
Mn
Dn
Q1n
X1 X2
Q1p
Dp
X5 Mp Sp Qp
X15
bclkn
nclkn
The resulting commands for the example in Figure 7-9 are as follows:
set_differential {nclkp nclkn}
set_differential {Dn Dp}
set_differential {Mn Mp}
set_differential {Q1p Q1n}
set_differential {Sn Sp}
set_differential {Qn Qp}
...
match_topology
...
mark_latch -latch_net {Mn} -inputs {Dn} -clock {X6/*}
mark_latch -latch_net {Mp} -inputs {Dp} -clock {X5/*}
mark_latch -latch_net {Sn} -inputs {Mn} -clock {X16/*}
mark_latch -latch_net {Sp} -inputs {Mp} -clock {X15/*}
...
mark_flip_flop -master_latch {Mn} -slave_latch {Sn}
mark_flip_flop -master_latch {Mp} -slave_latch {Sp}
Mp0 Mp1
Z Zn
A Mn0 Mn2 An
Figure 7-11 shows two simple DCVS logic gates. The first is a differential 2-input AND gate
with respect to output Z. The circuit also serves as a NAND gate because the complement
signal Zn is also available. Similarly, the second gate provides both OR and NOR logic
functions. The transistor layout is identical but the assignment of inputs and outputs is
different.
Figure 7-11 DCVS Logic Gates
Z Zn Zn Z
A Mn2 An Mn2
An Mn0 Mn1 Bn A Mn0 Mn1 B
n1 n1
B Mn3 Bn Mn3
To analyze these circuits, you must mark the differential net pairs for the input and output
nets and mark the differential synchronizers. For example, to mark the differential inverter
shown in Figure 7-10, use the following commands:
foreach_match cvsl_inv -command {
set_differential { A An }
set_differential { Z Zn }
mark_differential_synchronizer -transistors { Mp0 Mp1 } \
-tapped_transistors { Mp0 Mp1 }
mark_weak_pullup -transistors { Mp0 Mp1}
}
Mark the differential logic structures for the gates shown in Figure 7-11 as follows. The
statements are identical for both structures, with the exception of the structure name.
foreach_match cvsl_and2 -command {
set_differential { A An }
set_differential { B Bn }
set_differential { Z Zn }
mark_differential_synchronizer -transistors { Mp0 Mp1 } \
-tapped_transistors { Mp0 Mp1 }
mark_weak_pullup -transistors { Mp0 Mp1}
}
8-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
set_output_delay
... or Design
MCLK under Delay
analysis
... BUS[n]
...
... ... MCLK
External
clk1
clock
create_clock
MCLK
The set_input_delay command specifies the minimum and maximum amount of delay
from a clock edge to the arrival of a signal at a specified input port. NanoTime uses this
information to check for timing violations in the transitive fanout from that input port.
Similarly, the set_output_delay command specifies the minimum and maximum amount
of delay between the output port and the external sequential device that captures data from
that output port. This setting establishes the times at which signals must be available at the
output port to meet the setup and hold requirements of the external element.
An important part of the analysis is to consider the effects of signal transition times (slews).
At the inputs of the design, the transition times depend on the external drivers. You can
specify the external driver characteristics with the set_drive command, or you can
explicitly specify the input transition times with the set_input_transition command.
Similarly, at the outputs of the design, you can specify the external loads with the set_load
command. Figure 8-2 shows an example.
Figure 8-2 Input Transition Time, Input Drive, and Output Load
set_input_transition -fall
t
Design
set_drive under set_load
analysis C
R
VDD
Input Delay
The set_input_delay command specifies the amount of delay from a clock edge that
launches data to the arrival of the data at the input of the design, for a specified list of inputs.
For example, the following command sets an input delay of 1.2 time units relative to the
rising edge of CLK1 for all input ports in the design:
nt_shell> set_input_delay -clock CLK1 1.2 [all_inputs]
The -clock option specifies the clock from which the delay applies. Use the -clock_fall
option if the delay is from the falling edge of the clock. A clock does not need to be specified
for a purely combinational design. If the clock is a differential clock, you must use the
reference side of the differential pair with the -clock option.
If the external launch element is a domino precharge gate, use the -level_sensitive
option. In that case, when NanoTime performs setup and hold checking, it assumes that the
specified input delay applies to the launch of data on the closing edge of the clock, rather
than the opening edge.
The -asynchronous option specifies that the input is not tied to a clock. This option is
required to activate recovery or removal timing checks. The -clock option cannot be used
with this option.
The -rise or -fall option specifies that the input delay value applies only to the specified
edge type arriving at the input.
The -min or -max option specifies that the input delay value is the worst-case minimum
(early) or maximum (late) arrival time. You can set different minimum and maximum times
and NanoTime uses the worst-case value for each timing check. In the absence of these
options, the same value is used for both the minimum and maximum.
The -add_delay option adds the delay information to the existing input delay information,
instead of overwriting it. Use this option in multiple set_input_delay commands to
capture information about multiple paths leading to an input port that are relative to different
clocks or clock edges.
The -network_latency_included option causes the clock network latency to be included
in the input delay value when ideal clocking is being used. If the option is not used, the
network latency is added to the input delay value. The -source_latency_included option
causes the clock source latency to be included in the input delay value. In the absence of
this option, the clock source latency of the related clock is added to the input delay value.
The following example sets the input delay for the bidirectional port INOUT1. The input
signal arrives at INOUT1 2.5 units after the falling edge of CLK1. The set_output_delay
command specifies the output delay for the port.
nt_shell> set_input_delay 2.5 -clock CLK1 -clock_fall [get_ports INOUT1]
nt_shell> set_output_delay 1.4 -clock CLK2 [get_ports INOUT1]
In the following example, there are three paths to input port IN1. The first path is relative to
the rising edge of CLK1. The second path is relative to the falling edge of CLK1. The third
path is relative to the falling edge of CLK2. The -add_delay option adds the new input
delay settings without overwriting the old ones.
nt_shell> set_input_delay 2.2 -max -clock CLK1 -add_delay {IN1}
nt_shell> set_input_delay 1.7 -max -clock CLK1 \
-clock_fall -add_delay {IN1}
nt_shell> set_input_delay 4.3 -max -clock CLK2 \
-clock_fall -add_delay {IN1}
To get a report on input delays set on ports, use the report_port command with the
-input_delay option. To remove input delay values, use the remove_input_delay
command.
Output Delay
The set_output_delay command specifies the amount of time it takes for a signal to
travel from an output port to the external sequential element that captures the data on a
clock edge.
For example, the following command sets an output delay of 1.7 relative to the rising edge
of CLK1 for all output ports in the design:
nt_shell> set_output_delay -clock CLK1 1.7 [all_outputs]
The -clock option specifies the clock to which the delay applies. Use the -clock_fall
option if the delay is to the falling edge of the clock. A clock does not need to be specified
for a purely combinational design. If the clock is a differential clock, you must use the
reference side of the differential pair with the -clock option.
If the external capture element is a level-sensitive latch, use the -level_sensitive
option. In that case, when NanoTime performs setup and hold checking, it assumes that the
specified output delay applies to the capture of data on the closing edge of the clock, rather
than the opening edge.
The -rise or -fall option specifies that the output delay value applies only to the specified
edge type at the data output.
The -min or -max option specifies that the output delay value is the worst-case minimum
(shortest path) or maximum (longest path) delay to the external latch. You can set different
minimum and maximum times; NanoTime uses the worst-case value for each timing check.
If neither option is present, the same value is used for both the minimum and maximum.
The -add_delay option adds the delay setting to the existing output delay, instead of
overwriting it. Use this option to capture information about multiple paths leading from an
output port that are relative to different clocks or clock edges.
The -network_latency_included option causes the clock network latency to be included
in the output delay value when ideal clocking is being used. Propagated clocking is more
commonly used in NanoTime than ideal clocking.
The -source_latency_included option causes the clock source latency to be included in
the output delay value. In the absence of this option, the clock source latency of the related
clock is added to the input delay value.
In the following example, there are three paths from output port OUT1. One of the paths is
relative to the rising edge of CLK1. Another path is relative to the falling edge of CLK1. The
third path is relative to the falling edge of CLK2. The -add_delay option adds the new
output delay settings without overwriting the old ones.
nt_shell> set_output_delay 2.2 -max -clock CLK1 -add_delay {OUT1}
nt_shell> set_output_delay 1.7 -max \
-clock CLK1 -clock_fall -add_delay {OUT1}
nt_shell> set_output_delay 4.3 -max \
-clock CLK2 -clock_fall -add_delay {OUT1}
To get a report on output delays set on ports, use the report_port command with the
-output_delay option. To remove output delay values, use the remove_output_delay
command.
The -rise or -fall option specifies that the transition time applies only to the specified
edge type arriving at the input.
The -min or -max option specifies that the transition time is the worst-case minimum or
maximum transition time. You can set different minimum and maximum times and
NanoTime uses the worst-case value for each timing check.
You can specify the transition time relative to a clock by using the -clock option. This
option makes the transition time apply only to external paths driven by the specified clock.
For a falling-edge clock, use the -clock_fall option together with the -clock option.
The -rail_voltage option specifies the rail voltage used to generate the input transition
waveform. If you do not use this option, NanoTime generates the input waveform based on
the global rail voltage defined by the oc_global_voltage variable. By default, this variable
is set to –1.0. To ensure reasonable generation of input waveforms in the absence of the
-rail_voltage option, it is a good idea to set the oc_global_voltage variable to the main
rail voltage early in the design flow, for example, before the set_technology or
check_topology commands.
To view the transition times that have been set on ports, use the report_port -drive
command.
If no transition time is set for a port, NanoTime uses the transition times determined by the
values of the sim_transition_*_** variables, where * represents max or min and **
represents fall or rise. These variables default to 0.05 nanoseconds.
The sim_transition_min_limit and sim_transition_max_limit variables specify the
minimum and maximum allowable transition times used for simulation, in [Link]
default minimum is 0.003 ns and the default maximum is 10 ns. Any value outside of this
range, whether calculated by NanoTime or specified with the set_input_transition
command, is forced to the allowed minimum or maximum value for analysis.
Input Port Min Rise Min Fall Max Rise Max Fall
------------ -------- -------- -------- --------
BUS[0] 0.250 0.250 0.250 0.250
BUS[1] 0.250 0.250 0.250 0.250
selA 0.250 0.250 0.250 0.250
...
NanoTime models the external driver as the voltage supply connected to a resistor for a
rising transition, or ground connected to a resistor for a falling transition. It uses the
resistance value and the capacitive load of the port to calculate the wire delay of the port.
A higher drive resistance means less drive capability and a longer delay at the input port.
Conversely, a lower drive resistance results in a smaller external delay. The specified
resistance must be greater than zero.
If a transition time has also been set on the port with the set_input_transition
command, NanoTime models the external driver as a voltage ramp driving the resistor and
connected to the port.
To remove the drive resistance set on a port, use the remove_drive_resistance
command.
Capacitance on Ports
For ports, you specify the capacitance (in design units) and the ports to which that
capacitance value applies. For example, the following command sets a pin capacitance of
2.5 units on the port named ox1:
nt_shell> set_load 2.5 [get_ports ox1]
The report_port command reports the load settings as shown in the following example:
nt_shell> report_port ox1
...
Attributes:
s - Same phase checking
n - No same phase checking
The -add option adds the specified value to the existing capacitance. Otherwise, the
specified value replaces the existing value.
You can use the -pin_load and -wire_load options to specify whether the load value is
the pin capacitance or wire capacitance of the port. If both are used, the command sets both
the pin capacitance and the wire capacitance. If neither option is used, NanoTime sets the
pin capacitance only (the same as using -pin_load alone).
You can use the -min or -max option to specify different load values for minimum or
maximum delay analysis. If neither is specified, the same value applies to both. Similarly,
you can use the -rise or -fall option to apply the load value to rising or falling edges
only. Otherwise, it applies to both rising and falling edges.
To remove capacitance values that have been set on a port, use the remove_capacitance
command. To reset all annotated capacitance values in a design, use the reset_design
command.
Capacitance on Nets
For nets, you specify the capacitance (in design units) and the nets to which that
capacitance value applies. For example, the following command sets a pin capacitance of 3
units on the net named U1.U2.net3:
nt_shell> set_load 3 [get_nets U1.U2.net3]
The -add option adds the specified value to the existing capacitance. Otherwise, the
specified value replaces the existing value.
By default, the set_load command does not affect any net that has been back-annotated
by the read_parasitics command. Attempting to use the set_load command in this
case results in a warning message, with no change to the net. To allow set_load to
override back-annotated capacitance, set the parasitics_allow_spf_net_override
variable to true before you execute the set_load command.
To obtain a report of the capacitance values on a net, use the report_net command with
the -connections option. To view a list of the capacitance attributes of a port or net, use the
report_attribute command as shown in the following examples:
nt_shell> report_attribute -application -class port port_name
nt_shell> report_attribute -application -class net net_name
You can use the -min or -max option to specify worst-case minimum and maximum load
values. If neither is specified, the same value applies to both. Similarly, you can use the
-rise or -fall option to apply the load value to rising or falling edges only. Otherwise, it
applies to both rising and falling edges.
To remove capacitances on a net, use the remove_capacitance command. To reset all
annotated capacitances in a design, use the reset_design command.
Capacitance Attributes
Each of the 16 possible capacitance values for a port or net is assigned to an attribute.
For the port object class, the attributes have names in the format pin_capacitance_* and
wire_capacitance_*. There are eight of each type, representing combinations of edge
type, minimum or maximum delay analysis, and clock or data path.
For the net object class, the attributes also have names in the format pin_capacitance_*
and wire_capacitance_*. In addition, the sums of the pin and wire capacitances for each
of the eight conditions are also available in attributes named total_capacitance_*.
The following example uses the get_attribute command to retrieve the value of the
pin_capacitance_fall_max attribute on pin X5.Mn0.d, then sets that value on ports in1
and in2.
nt_shell> set_load [get_attribute [get_lib_pins X5.Mn0.d] \
pin_capacitance_fall_max] [get_ports {in1 in2}]
Logic Constraints
Specifying logic constraints on nets can help NanoTime eliminate analysis of logic
conditions that never occur in the actual circuit. This can save runtime and produce more
accurate results. Use the set_logic_constraint command to specify them.
For example, the following command defines the set of control signals ct0 through ct3 to be
“one hot.” This means that at any given time, exactly one signal is at logic 1 and the other
three are at logic 0.
nt_shell> set_logic_constraint -one_hot \
[get_nets {ct0 ct1 ct2 ct3}]
1
You can set the following types of logic constraints on a list of nets:
• -one_hot: At any given time, exactly one of the nets has a value of logic 1; the others
have a value of logic 0.
• -one_off: At any given time, exactly one of the nets has a value of logic 0; the others
have a value of logic 1.
• -at_most_one_hot: At any given time, no more than one of the nets can have a value
of logic 1.
• -at_most_one_off: At any given time, no more than one of the nets can have a value
of logic 0.
• -invert: The first specified net is the input of an inverter; the second is the output of
the inverter. Exactly two objects must be specified.
• -equal: At any given time, all of the nets have the same value, either logic 0 or logic 1.
• -nand: The last specified pin or net is the output of the logical NAND; other pins or nets
are the inputs of the NAND.
• -nor: The last specified pin or net is the output of the logical NOR; other pins or nets are
the inputs of the NOR.
To report logic constraints that have been set, use the report_logic_constraint
command. To remove logic constraints that have been set, use the
remove_logic_constraint command.
Setting or removing logic constraints changes the design and invalidates any existing
analysis results, making it necessary to run check_design and trace_paths again to get
new analysis results.
Case Analysis
To apply a logic state to the analysis, you can use the set_case_analysis command to
specify the logic state. For example, if you are analyzing the test mode of the circuit , you
can assert the test mode input to a logic 1. You can also restrict logic conditions by using the
set_logic_constraint command. For example, if only one of a set of control signals is
active at any given time, you can define those signals to be a “one-hot” set. See Figure 8-3
for an example. Specifying logic restrictions can reduce runtime and produce more
meaningful and accurate results.
Figure 8-3 Case Analysis and Logic Constraints
set_case_analysis 1 \
[get_ports test] 1 test
a
set_logic_constraint -one_hot \ b
[get_nets {a b c d}] c
d
abcd
0001
0010
0100
1000
To restrict the timing analysis to a specific logic condition, use the set_case_analysis
command. The command set a constant logic value (either 0 or 1) on a port or pin in the
design.
For example, you can set logic 1 on an enable input and logic 0 on a test-mode input to
analyze the chip in the enabled mode and to eliminate consideration of the test mode
circuitry, as follows:
nt_shell> set_case_analysis 1 [get_ports EN]
1
nt_shell> set_case_analysis 0 [get_ports TEST]
1
NanoTime propagates this constant value forward through the design if the value controls
the value of the downstream logic, as shown in the example in Figure 8-4. Propagation of
the logic constant works in the forward direction, and also backward through inverters.
Figure 8-4 Propagation of a Logic Constant
set_case_analysis 0 TEST
?
?
? ?
zero
TEST one
zero
When the latch input is in a fixed logic state, you can direct NanoTime to propagate logic
constraints to latch nets by setting the topo_latch_enable_logic_propagation variable
to true. NanoTime adds an equal logic constraint from the input net to the latch net when
they are connected by pass transistors.
Setting or removing a logic constant changes the design and invalidates the current timing
results, if any. You must run the check_design and trace_paths commands again to
generate new analysis results.
You can analyze a design for different cases, then merge the resulting timing models into a
single model. The operating modes in the final model are derived from the logic settings
specified by the set_case_analysis command. The default behavior of the timing model
is to assume that different cases are mutually exclusive. If this is not true, use the
set_case_analysis command with the -exclude_from_when option to define those logic
conditions.
To report case analysis values that have been set, use the report_case_analysis
command. For example,
nt_shell> report_case_analysis
...
Case Net
----- -------------------------------------------
one EN
zero TEST
The report shows the values directly set on ports and pins. It does not include information
about the propagation of the logic settings into the design.
To get a list of nets that have been set to a constant, you can use the following command:
nt_shell> report_logic_state -valid_only \
[get_nets -hierarchical \
-top_net_of_hierarchical_group]
Note:
The set_case_analysis command in the Synopsys Design Constraints (SDC) format
supports the setting of a rising or falling transition on a port or pin. This capability is not
supported in NanoTime. However, you can remove a specified transition from
consideration in NanoTime by using the set_false_path command.
Figure 8-5 shows a simple circuit in which the inverter and AND gates are library cells. A
value of 0 is set on input IN1, which makes the path from IN0 irrelevant. Therefore the path
from IN0 to output OUT is a false path. NanoTime cannot detect the false path without
considering the AND gate function. The tool propagates the 0 to the AND gate output and
does not trace paths through the gate. As a result, the false path is detected and pruned.
Figure 8-5 Inverter and AND Gate Library Cells
IN0 OUT
IN1
The constant propagation feature handles logic conflicts that might happen when NanoTime
propagates logic values for set_case_analysis or set_logic_constraint commands.
When a conflict is detected, NanoTime issues an error message for the failed command
function as shown in the following example:
nt_shell> set_case_analysis 1 in0
1
nt_shell> set_case_analysis 0 in0
Error: Constraint conflicts with previous constraints: unable to set net
in0 to logic state 0 (LOGC-005)
0
NanoTime does not disable timing arcs across a tristate cell using the associated tristate
logic function.
NanoTime skips the creation of conditional timing checks based on the same rules. Skipped
timing checks are not considered during path tracing.
In Example 8-1, the multiplexer has two inputs, I0 and I1. From the select signal S to the
output Q, there are three timing arcs. Assume that set_case_analysis 0 is applied to input
I0 and set_case_analysis 1 is applied to input I1. The negative_unate arc is disabled
because the when expression "I0&!I1" is false. The positive_unate arc remains
enabled because the when expression "!I0&I1" is true. The default arc is disabled
because the when expression of the positive_unate arc evaluates to true.
The CCS receiver model selected has impact when calculating delays using CCS. All
disabled models are not considered during calculation, which speeds up the calculation
time.
An example of a conditional CCS receiver model is shown in Example 8-2. If
set_case_analysis 1 is applied to pin I, then the when statement is true, and the receiver
capacitance for condition 1 is enabled.
****************************************
Report : disable_timing
Design : test
***************************************
Flags: C Conditional arc
d default arc
****************************************
Report : library
Design : Test
...
****************************************
Time Unit : 1 ns
Capacitance Unit : 1 pF
Voltage Unit : 1 V
Resistance Unit : 1 kohm
Current Unit : 1 mA
Operating Conditions:
Name Process Temp Voltage
--------------- --------- --------- ----------
DEFAULT 1.000 50.000 0.000
Library Cells:
Attributes:
b - black box (function unknown)
d - dont_touch
s - state table
u - dont_use
A - abstracted timing model
E - extracted timing model
I - Interface timing spec model (ITS)
S - Stamp timing model
Q - Quick timing model (QTM)
Arc
Lib Cell Attributes # Sense/Type Arc From Arc To When
-------- ---------- --- --------------- ---------- -------- -----
MUX2 -- 0 positive_unate S Q !I0&I1
MUX2 -- 1 negative_unate S Q I0&!I1
MUX2 -- 2 non_unate S Q
Impact on Tracing
During path tracing, NanoTime does not consider disabled delay arcs or CCS receiver
models. Similarly, NanoTime does not evaluate skipped timing checks.
NanoTime does not evaluate any when statements to further disable delay arcs, timing
checks, or CCS receiver models during tracing. All the when statements are evaluated
statically during the check_design step. The corresponding delay arcs and CCS receiver
models are disabled before tracing.
Mode Analysis
Timing models and library cells can have operating modes defined in them, such as read
and write modes for the RAM cell described in Example 8-3. Each mode has an associated
set of timing arcs that should be considered in timing analysis while that mode is active.
Some library cells and timing models have conditional modes defined by a when statement.
The mode is selected when the when statement is true.
NanoTime does not support mode analysis.
The types of path-based timing exceptions that you can specify, in order from highest to
lowest priority, are as follows:
• False path – A path that can never propagate data due to the logic of the design.
NanoTime does not trace these paths.
• No-timing-check path – A path for which one or more timing checks should be disabled.
• Multicycle path – A path that takes multiple clock cycles for the data to propagate from
the startpoint to the endpoint, rather than one cycle. NanoTime needs this information to
properly evaluate the timing checks.
• Same-phase path or no-same-phase path – A path that captures data in the same phase
or the next phase as the data launch, possibly contrary to the global behavior setting or
settings made on the objects in the path.
A timing exception command can apply to a single path or to a group of related paths, such
as all paths from one clock domain to another, or all paths that end at a specified point in the
design. You can report the exceptions that have been set with the report_exceptions
command.
The timing exception commands are typically set before the check_design command
because they affect the way NanoTime analyzes the design database to prepare for path
tracing. You can use the timing exception commands after the check_design command
only with the -use_existing_timing_points option, which enables the commands to be
applied to the existing database but does not allow changes to it.
In cases of conflicting exceptions for a path, the timing exception priority determines the
behavior. Multiple exception settings that are not in conflict with each other can apply to the
same path. For example, there is no conflict between the set_multicycle_path and
set_same_phase_path commands, so both can apply to a given path. NanoTime applies
the same-phase setting first, then it applies the multicycle path setting to move the capture
edge a number of cycles away from the position determined by the same-phase setting.
Also, there is no conflict between the -setup and -hold options for any specific exception.
The most straightforward approach is to explicitly specify the startpoint of the path using the
-from option and the endpoint using the -to option, as in the following examples:
nt_shell> set_false_path -from PORTA -to PORTZ
nt_shell> set_false_path -from FFB1/CP -to FFB2D
nt_shell> set_multicycle_path -setup 2 -from FF4 -to FF5
Each command affects all of the paths that start at the specified startpoint and end at the
specified endpoint. You can also specify just a startpoint or just an endpoint, as in the
following examples:
nt_shell> set_multicycle_path -setup 2 -from [get_clocks CLK1]
nt_shell> set_multicycle_path -setup 2 -to [get_pins [Link]]
A startpoint can be a clock, a primary input port, a sequential cell, a clock input pin of a
sequential cell, a data pin of a level-sensitive latch, or a pin that has an input delay specified.
If you specify a clock, all registers and primary inputs related to that clock are used as path
startpoints. If you specify a cell, the command applies to all input pins and bidirectional pins
of that cell.
An endpoint can be a clock, a primary output port, a sequential cell, a data input pin of a
sequential cell, or a pin that has an output delay specified. If you specify a clock, all registers
and primary outputs related to that clock are used as path endpoints. If you specify a cell,
the command applies to paths ending at pins of that cell.
Instead of specifying the path endpoints with the -from and -to options, you can use the
-through option to specify all paths that pass through one or more specific pins, ports, or
cells. However, this method is more computationally intensive, especially in larger designs.
You can use multiple -through , -rise_through , and -fall_through options in a single
command to specify a group of paths. For example, the following command specifies any
path that starts at A1, passes through B1 and C1 in that order, and ends at D1:
nt_shell> set_false_path -from A1 -through B1 -through C1 -to D1
The following example specifies any path that starts at A1, passes through either B1 or B2,
then passes through either C1 or C2, and ends at D:
nt_shell> set_false_path -from A1 -through {B1 B2} -through {C1 C2} -to D
The -consecutive option means that the specified “from,” “through,” and “to” points must
be consecutive, without other points in between. For example,
nt_shell> set_false_path -from A1 -through B1 -to C1 -consecutive
This causes only the path that starts at A1, passes through B1 on the next arc, and ends at
C1 on the next arc to be a false path. Without the -consecutive option, paths with other
intermediate points would also be set to false paths, such as a path that starts at A1, passes
through X1, B1, Y1, and Z1, and ends at C1.
You can provide an additional restriction on the selected timing paths by using the
-rise_from , -rise_to , -rise_through, -fall_from, -fall_to, or -fall_through
options. Their effects are as follows:
• When the referenced object is not a clock, these options consider only those paths that
exhibit a rising or falling transition at the specified object.
• When the referenced object is a clock, these options specify paths based on the launch
of data at startpoints or the capture of data at endpoints for a specific edge of the source
clock. The transition direction at the path endpoint does not matter.
In addition, the -rise_from, -rise_to, -fall_from, and -fall_to options take any
transparency windows into account, as follows:
• The -rise_to and -fall_to options always refer to the closing edge of the
transparency window.
• The -rise_from and -fall_from options always refer to the opening edge of the
transparency window.
The -from, -through, and -to options specify the paths that are set to false paths. You can
use them alone or in combination.
The following example concerns a test mode input port tmode that you do not want to
analyze. To declare all paths from that input to be false paths, use the following command:
nt_shell> set_false_path -from [get_ports tmode]
In the next example, a design has two cells, ff12 and ff34, that are never used at the same
time. The following commands declare the timing paths between the cells to be false paths.
These paths are not traced and are not saved in the path database.
nt_shell> set_false_path -from [get_cells ff12] -to [get_cells ff34]
nt_shell> set_false_path -from [get_cells ff34] -to [get_cells ff12]
The -setup option restricts the false path declaration to maximum delay paths only. The
-hold option restricts the false path declaration to minimum delay paths only.
Note:
The -setup and -hold options for this command do not refer to setup and hold timing
checks.
The following command disables minimum delay checking for endpoints clocked by CLK1:
nt_shell> set_false_path -hold -to [get_clocks CLK1]
The following command declares as false paths all paths that start from [Link], rise through
one or more of U1.Z and U2.Z, fall through one or more of U3.Z and U4.C, and end at ff2/D:
nt_shell> set_false_path -from [Link] -rise_through {U1.Z U2.Z}\
-fall_through {U3.Z U4.C} -to ff2/D
To remove false path exceptions set by the set_false_path command, use the
remove_false_path command.
No-Check Exceptions
The set_no_timing_check_path command disables timing checks at specified locations
in the design. This command is different from the set_false_path command, which
causes the specified paths to be ignored completely and stops all path tracing through them.
The set_no_timing_check_path command does not stop path tracing; it merely prevents
timing checks from being performed.
The -from, -through, and -to options (and related options such as the -rise_to option)
specify the paths that are affected. You can use them alone or in combination. Depending
on how you use these options, one path or many paths might be involved.
To remove no-check exceptions set by the set_no_timing_check_path command, use
the remove_no_timing_check_path command.
The following guidelines and restrictions apply:
• The -through type options cannot specify a clock object.
• The -setup and -hold options for this command do not refer to setup and hold timing
checks. The -setup option restricts the command to maximum delay paths only. The
-hold option restricts the command to minimum delay paths only.
If the specified endpoint is a latch, paths that end at that latch are not saved into the path
database. Path tracing continues through the latch as if it were transparent, but without any
cycle accounting adjustments. In effect, the action of choosing not to evaluate a timing
check at a nontransparent latch converts it to a transparent latch.
As an example of a simple no-check exception, a domino precharge circuit might use two
different evaluate clocks, ck1 and ck2. By default, NanoTime performs a timing check
between data arriving at the precharge node launched by one clock and captured by the
other, but this situation cannot occur in the circuit. To prevent all checks of this type from
being evaluated, use the following commands:
set_no_timing_check_path -from [get_clocks ck1] -to [get_clocks ck2]
set_no_timing_check_path -from [get_clocks ck2] -to [get_clocks ck1]
As another example, Figure 8-6 shows a path through four latches. NanoTime automatically
performs timing checks for each of the latches, but you might not want to evaluate all of
those timing checks.
Figure 8-6 Path With Four Latches
clk1
clk2
The following command defines the entire path as a false path. In this case, no path tracing
is performed and the tool does not evaluate timing checks for any of the latches. Specifying
the -to b option instead of the -to e option would have the same result, because the path
tracer would not reach the downstream portions of the path after net b.
set_false_path -from a -to e
The following command allows path tracing but disables timing checks for latch3, because
latch3 is the first structure encountered after all of the path specification options are
matched. The timing checks for latch1, latch2, and latch4 are still evaluated.
set_no_timing_check_path -from a -through b -to c
The following example uses clk1 as the -to object. In this case, timing checks for latch1 and
latch3 (and any other latches reached by clk1) are not evaluated. However, you could
disable timing checks only for one specific latch (say, latch3) by adding the -through option
to be very specific about the affected path.
set_no_timing_check_path -to clk1
For example, Figure 8-7 shows a path using transparent latches clocked by the same clock
edge. By default, NanoTime assumes same-cycle checking and verifies the timing at the
edges shown in the timing diagram in Figure 8-7.
Figure 8-7 Same-Cycle Checking, Single Clock
L1 L2 L3
D Q Combinational D Q Combinational D Q
Logic Logic
G G G
PH1
Same-cycle
Launch at L1
checking
PH1L1
Hold Setup
PH1L2/L3
Capture at L2 and L3
If the circuit is designed to use next-cycle checking, you should specify that type of checking
by one of the methods described in the section Same-Cycle and Next-Cycle Checking
Exceptions. In that case, NanoTime performs the setup and hold checking at the edges
shown in Figure 8-8.
Figure 8-8 Next-Cycle Checking, Single Clock
Launch at L1 Next-cycle
checking
PH1L1
Setup
Hold
PH1L2/L3
Capture at L2 and L3
The setup and hold timing relationships can be specified by choosing same-cycle or
next-cycle checking and by using the set_multicycle_path command. If both methods
are used, the effects are added together.
The command must specify the paths affected using one or more “from,” “through,” and “to”
type options, and a path multiplier.
By default, NanoTime performs each setup (maximum delay) check at the first capture edge
that occurs after the launch edge. To modify this check, use the -setup option and specify
the number of capture edges after launch where the setup check is to be done. The number
you specify is the path multiplier.
For example, -setup 1 has no effect because it causes the setup check to occur at the first
capture edge after launch, the same as the default. Use -setup 2 to perform the check at
the second capture edge, one clock cycle later than the default, as shown in Figure 8-9. Use
-setup 3 to perform the setup check two clock cycles later than the default, as shown in
Figure 8-10, and so on. The larger the number, the later the setup check is performed and
the easier it is for the setup constraint to be satisfied.
Launch at L1
PH1L1
Hold Setup
PH1L2/L3
Capture at
set_multicycle_path -from PH1 -setup 2 L2 and L3
Launch at L1
PH1L1
Hold Setup
PH1L2/L3
Capture at
set_multicycle_path -from PH1 -setup 3 L2 and L3
Moving the setup check with the -setup option does not affect the timing of the hold
(minimum delay) check. To modify a hold check, use either the -hold or -hold_cycle
option.
The -hold option moves the hold timing check backward in time from the position at one
clock cycle before the current setup check. For example, -hold 0 causes the hold check to
occur one clock cycle before the setup check, including a setup check that has been moved
with the -setup option of another set_multicycle_path command. Using -hold 1 causes
the hold check to occur two clock cycles before the setup check, and so on. See Figure 8-11
for an example. The larger the -hold number, the earlier the hold check is performed and
the easier it is for the hold constraint to be satisfied.
Launch at L1
PH1L1
Setup
Hold
PH1L2/L3
Capture at
set_multicycle_path -from PH1 -setup 3 L2 and L3
set_multicycle_path -from PH1 -hold 1
The -hold_cycle option moves the hold timing check forward in time from its default
position, independent of any movement of the setup check. Using -hold_cycle 0 causes
the hold check to occur one clock cycle earlier than the default time. Using -hold_cycle 1
causes the hold check to occur at the default time. Using -hold_cycle 2 causes the hold
check to occur one clock cycle later than the default time, and so on. See Figure 8-12 for an
example. The larger the -hold_cycle number, the later the hold check is performed and the
more difficult it is for the hold timing constraint to be satisfied.
Figure 8-12 Multicycle Path Setup = 2, Hold Cycle = 2, Same-Cycle Checking
Launch at L1
PH1L1
Hold Setup
PH1L2/L3
Capture at
set_multicycle_path -from PH1 -setup 2 L2 and L3
set_multicycle_path -from PH1 -hold_cycle 2
When you use the -hold option, NanoTime sets the hold check time relative to where the
setup check is being performed. However, during path tracing, NanoTime converts the
-hold setting to the equivalent -hold_cycle setting. (You can see this change if you use
the report_exceptions command.) As a result, if you change the setup time after you run
the trace_paths command, the hold check stays the same and is not based on the setup
time.
If you omit the -setup, -hold, and -hold_cycle options from the command, NanoTime
applies the path multiplier to both the -setup and -hold_cycle options.
A set_multicycle_path command shifts the edges at which checking is done away from
whatever positions they would otherwise have, including any same-cycle or next-cycle
setting. For example, Figure 8-13 shows a multicycle path setting (setup = 2) applied to a
next-cycle check. Compare the shifted checks in Figure 8-13 with the unshifted checks in
Figure 8-8.
Figure 8-13 Multicycle Path Setup = 2, Next-Cycle Checking
Next-cycle
Launch at L1
checking
PH1L1
Hold Setup
PH1L2/L3
Capture at
set timing_default_phasing next_cycle
L2 and L3
set_multicycle_path -from PH1 -setup 2
When different clocks are used for launch and capture, multiple setup relations can exist
between the two clocks. The most restrictive relationship (the smallest time difference from
a setup launch edge to a setup capture edge) determines the maximum delay requirement
for the setup check.
To perform the hold check, NanoTime considers the data paths relative to the setup check.
It verifies that the same data signal launched in the setup check arrives late enough not to
be captured by the previous capture edge. The most restrictive hold timing relationship
determines the hold requirement for the path.
If the launch (start) clock and capture (end) clock are two different clocks with different
frequencies, you should consider which clock is being used to move a setup or hold check.
By default, NanoTime moves a setup check by a multiplier of the end clock period, but it
moves a hold check by a multiplier of the start clock period. If this behavior is not what you
want, use the -start or -end option to explicitly specify which clock period to use for
adjusting the setup or hold check.
You can optionally use the -rise or -fall option to restrict the scope of the command to
just rising edges or just falling edges at the datapath endpoint. Otherwise, the command
affects both rising and falling edges.
L1 L2 L3
D Q Combinational D Q Combinational D Q
Logic Logic
G G G
PH1
Same-cycle
Launch at L1
checking
PH1L1
Hold Setup
PH1L2/L3
Capture at L2 and L3
If a downstream latch is designed to capture data in the next clock cycle rather than the
same clock cycle, you should specify next-cycle checking so that the timing checks are
performed at the correct times. In next-cycle checking, for a setup check, data launched at
the upstream latch by the opening edge of the launch clock must arrive at the downstream
latch before the closing edge of the capture clock in the next clock cycle. For a hold check,
the same data launched at the upstream latch must arrive at the downstream latch no earlier
than the closing edge of the capture clock in the same clock cycle.
Figure 8-15 shows next-cycle setup and hold checking for the same circuit as the one shown
in Figure 8-14. A launch event occurs at L1 on the rising edge of the clock at time 0. A
capture event occurs at L2 on the falling edge of the clock in the next clock cycle. Data
launched from L2 in the next clock cycle must arrive before the capture edge in the next
clock cycle after that.
L1 L2 L3
D Q Combinational D Q Combinational D Q
Logic Logic
G G G
PH1
Launch at L1
PH1L1
Hold Capture at L2
PH1L2 Setup
Hold
Setup
PH1L3
Capture at L3
The possible ways to specify same-cycle or next-cycle checking, in order from highest to
lowest priority, are as follows:
• The set_same_phase_path and set_no_same_phase_path commands (path-based
timing exceptions)
• The set_timing_check_attributes command with the -force_same_phase and
-force_no_same_phase options (object-based timing exceptions)
The choice between same-cycle and next-cycle checking applies only to cases where the
opening edges at the launch and capture latches occur at the same time. By default, if the
opening edges at the launch and capture latches occur at different times, next-cycle setting
is used, regardless of the same-cycle or next-cycle setting. However, this behavior can be
changed by the timing_intersection_transparency variable.
If a multicycle path exception is applied to a path with a same-cycle or next-cycle setting, it
shifts the capture edge by a specified number of cycles away from the same-cycle or
next-cycle position. In other words, the capture edge depends on both the same-cycle or
next-cycle setting and the multicycle path setting.
Using the set_phasing command sets the phasing attribute on the object to the string
same_cycle or next_cycle.
To undo the effects of the set_phasing command, use the remove_phasing command.
Use the set_timing_check_attributes command to apply same-cycle and next-cycle
checking to timing checks instead of objects. A timing check is considered to be an
object-based phasing setting, due to its association with objects at the startpoint and
endpoint.
Intersection Transparency
By default, NanoTime performs same-cycle checking only when the opening edges at the
launch and capture latches occur at the same time. If the two edges occur at different times,
NanoTime performs checking in the next succeeding cycle, ignoring the same-cycle or
next-cycle settings for the path or objects in the path.
However, if the timing_intersection_transparency variable is set to true, the opening
edges for launch and capture do not have to coincide to perform same-cycle checking. In
that case, NanoTime uses same-cycle checking when there is any amount of overlap
between the transparency windows at the launch and capture latches. An overlap occurs
when the opening edge of the launch clock occurs before the closing edge of the capture
clock. The amount of overlap must be greater than zero to cause same-cycle checking.
Figure 8-16 shows an example.
L1 L2 L3
Combinational Combinational
D Q D Q D Q
Logic Logic
G G G
PH1 PH2
Same-cycle
Launch at L1 checking
PH1L1
Phase Default
Setup
difference setup check
PH2 L3
Reporting Exceptions
The report_exceptions command reports the timing exceptions previously defined by
the exception-setting commands: the set_false_path, set_no_timing_check_path,
set_multicycle_path, set_no_same_phase_path, and set_same_phase_path
commands.
For each exception, the report shows the objects specified as the “from,” “through,” and “to”
points; the type of exception applied for setup and hold checks; and the number of matching
occurrences of that exception encountered during path tracing.
The report_exceptions command with no options reports all exceptions. To restrict the
scope of the report, use the same “from,” “through,” and “to” options that were used in the
original exception-setting commands.
A general path specification reports a matching general exception or a more specific
exception if there is a matching object in the path specification of the original exception-
setting command. For example, the report_exceptions -from selA command reports
all exceptions originally specified with the -from selA, -rise_from selA, and
-fall_from selA options.
The following example lists all timing exceptions set on the design:
nt_shell> report_exceptions
...
From Through To Setup Hold Matches
-------- --------- ---------- -------------- ---------- -------
selA * BUS[8] FALSE FALSE 4
selA(r) * {and add} FALSE FALSE 4
* {m1 m2} * cycle=3 -- 28
cyc1 * * no_same_phase no_same_phase 8
cyc0 * * same_phase same_phase 16
test * * no_check no_check 168
The From, Through, and To columns show the objects specified in the original
exception-setting commands. The notation “(r)” in the From column indicates that the object
selA was specified with the -rise_from option rather than the -from option.
The Setup and Hold columns indicate the type of exceptions applied for setup and hold
checking: false path, no_same_phase checking, same_phase checking, no_check status,
or multicycle checking.
Multicycle checks are displayed with the formats “cycle=3” and “abs_cycle=3.” In the Setup
column, entries are always in the format “cycle=3” and they result from
set_multicycle_path -setup commands. In the Hold column, entries can be in either
format before path tracing. The format “cycle=3” results from set_multicycle_path -hold
commands and the format “abs_cycle=3” results from set_multicycle_path
-hold_cycle commands. After path tracing, all entries in the Hold column have the format
“abs_cycle=3” because NanoTime converts all settings to a consistent format during path
tracing.
The Matches column indicates the number of times that the exception occurred during path
tracing. Two dashes (--) indicate either that path tracing has not been performed or that no
matches occurred during path tracing. The number of matches reported for an
exception-setting command such as the set_multicycle_path command can be affected
by conflicting higher-priority exceptions, such as false path exceptions.
To cancel an exception, use the remove_* command corresponding to the original
exception-setting command: the remove_false_path, remove_no_timing_check_path,
remove_multicycle_path, remove_no_same_phase_path, and
remove_same_phase_path commands.
The following command selects paths that start from port IN1 and end on port OUT1 or port
OUT2:
nt_shell> set_find_path -from [get_ports IN1] -to [get_ports {OUT1 OUT2}]
Using the set_find_path command is the only way to force the analysis of specific paths
that are defined by a “through” point. Standard path tracing saves only the single path with
the worst delay to an endpoint. Even if you choose to save a large number of the worst paths
to every endpoint during path tracing, paths through your “through” point of interest might
not be included.
Use the set_find_path command after the link_design command, but before the
check_design and trace_paths commands. After you specify the paths, the
check_design command checks only the specified paths and the trace_paths command
traces only those paths.
You can use the set_find_path command multiple times to specify multiple sets of paths
to be traced. NanoTime processes the sets of paths sequentially.
You can report the path restrictions defined by the set_find_path command with the
report_find_path command. To cancel the effects of the set_find_path command,
use the remove_find_path command.
The check_design command divides the design into units called channel-connected
blocks (CCBs). Each channel-connected block is a set of transistors whose sources and
drains are connected together in a network, in series or in parallel, or both. NanoTime
checks the channel-connected blocks and reports any problems it has in interpreting their
configuration. You can correct such problems by using commands such as mark_* and
erase_*, possibly in conjunction with the foreach_match command.
9-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
The figure also shows two timing checks (constraint arcs) for this latch. By default, setup and
hold timing checks for latches begin at a pin controlled by a clock signal and are evaluated
at the latch net (net b). The setup timing checks for this example are from pin Mn3.g to
Mn1.g and from Mn3.g to Mp1.g.
clk
Mp0 Mp1 Mp2
Q
D
Mn3
Mn0 a b Mn1 c Mn2
A timing check is associated with the delay arc endpoint. This means that in Figure 9-1, if
path tracing arrives at pin Mn1.g, the timing check labeled “constraint arc 1” is evaluated. In
some designs, more than one timing check might end at pin Mn1.g, and more than one
delay arc might end there as well. All of the timing checks that end at Mn1.g are evaluated
whenever path tracing reaches that pin—no matter which delay arc is traversed to get there.
To explicitly control when or if a timing check should be evaluated, you can specify the
trigger for the timing check. For example, you can specify that timing check 1 in Figure 9-1
should be performed only after a transition at input D by using the -trigger option of the
create_timing_check command. The “from” and “to” nets of the timing check remain the
same (clk to b), but the timing check is evaluated only if path tracing traverses the delay arc
from transistor Mp0 to transistor Mn1. The command to accomplish this is as follows:
nt_shell> create_timing_check -from Mn3.g -to Mn1.g -trigger Mp0.g
For further control, you can use the -rise_trigger or -fall_trigger option to require a
rising or falling transition at the trigger device. The trigger options are also available for the
set_data_check command for creating nonsequential timing checks. You must define new
timing checks before executing the check_design command to ensure that the tool
designates all needed pins as timing points.
Moving the timing check endpoint causes NanoTime to consider the entire latch structure to
be one simulation unit, even though it includes more than one channel-connected block.
However, a delay arc can only traverse one channel-connected block. Therefore, if you
move a timing check by using a -setup_to or -hold_to option, the “to” point of the timing
check and the target of the delay arc are now different pins, as shown in Figure 9-2. For this
example, the trigger, target, “from” point, and “to” point are four different pins.
Because the target and “to” pin are different pins, the timing check is now associated with
the delay arc instead of the timing check “to” pin. In other words, the path from the trigger to
the target must be traced for the timing check to be evaluated. This is a consequence of
moving the timing check evaluation point.
Delay Arc 1
“from”
Constraint Arc 1
trigger
clk
Mp0 Mp1 Mp2
D Q
Mn3
Mn0 a b Mn1 c Mn2
target “to”
After the check_design command, you can modify some aspects of a timing check by using
the set_timing_check_attributes command. For example, you can change the check
value or specify whether to continue path tracing if there is an error.
Since the timing check must already exist, the -from, -to, -target, and related options of
the set_timing_check_attributes command are filters that select the timing check to be
modified by other command options. The -target option is most commonly used to search
for timing checks with relocated “to” points in latch, precharge, and flip-flop topologies.
For example, the following set_timing_check_attributes command applies to
Figure 9-2. The intention is to find a specific timing check and to apply the
-continue_with_error_adjustment option to that timing check. The -trigger, -target,
-from, and -to options specify which timing path is to be modified.
nt_shell> set_timing_check_attributes -from Mn3.g -to Mn2.g \
-trigger Mp0.g -target Mn1.g -continue_with_error_adjustment
A timing check is normally associated with path tracing arrival at the timing check “to” point.
If you want the target and “to” points to be the same, but you want to specify that a timing
check is associated with the path tracing traversal of a delay arc instead, use the
-to_not_target option of the set_timing_check_attributes command to change that
property of the selected timing check.
For the example in Figure 9-3, the following command specifies that the timing check from
net clk to net b occurs only if path tracing traverses the path from net D to net b:
nt_shell> set_timing_check_attributes -from Mn3.g -to Mn1.g \
-trigger Mp0.g -target Mn1.g -to_not_target
Delay Arc 1
Constraint Arc 1
clk
Mp0 Mp1 Mp2
Q
D
Mn3
Mn0 a b Mn1 c Mn2
Defining nonsequential constraints in the library cell results in a more accurate analysis than
using the create_timing_check command because the setup and hold times can be
made sensitive to the slew of the constrained pin and the related pin. The
create_timing_check command is not sensitive to slew.
The remove_timing_check command does not remove data checks defined in library
cells.
The default rules for determining the clock edges for setup and hold checks typically reflect
the intended operation of the circuit. However, for paths that do not operate according to
these rules, you can specify a multicycle path timing exception as described in Multicycle
Path Exceptions, or same-cycle or next-cycle checking as described in Same-Cycle and
Next-Cycle Checking Exceptions.
By default, NanoTime assumes that latches are transparent. Latches that are not designed
to operate transparently should not allow path tracing to proceed through them. To specify
this behavior for selected topologies or clocks in the design, use the set_non_transparent
command. For example,
nt_shell> set_non_transparent [get_topology \
-of_object n1 -structure_type latch]
This command sets nontransparent checking on the latch that has its latch node at net n1.
When nontransparent checking is set on a latch or a precharge net, path tracing cannot
continue past that object. When it is set on a clock, NanoTime uses nontransparent
checking behavior on all latches clocked by that clock.
To cancel the effects of the set_non_transparent command, use the
remove_non_transparent command.
Latch-based designs can use multiple clocks with different phases to control successive
registers in a data path. For example, consider the two-phase, latch-based path shown in
Figure 9-4. All three latches are level-sensitive, with the gate active when the G input is high.
L1 and L3 are controlled by PH1, and L2 is controlled by PH2. A rising edge launches data
from the latch output and a falling edge captures data at the latch input.
Figure 9-4 Latch-Based Paths
Setup 1
L1 L2 Setup 2 L3
D Q Combinational D Q Combinational D Q
Logic Logic
G G G
PH1
PH2
Figure 9-5 shows how NanoTime performs setup checks between these latches. For the
path from L1 to L2, the rising edge of PH1 launches the data. The data must arrive at L2
before the next closing edge of PH2, at time = 4.
Figure 9-5 Setup Checks Using Two-Phase Clocks
PH1L1
PH2L2 A B C
L2 transparent
D
PH1L3
L3 transparent
0 1 2 3 4 5 6
If the data launched by L1 arrives at L2 before the opening edge of clock PH2, the data
enters the latch on the opening edge at L2, at time = 2, and the data is captured on the
closing edge, at time = 4. This situation is marked “A” in the figure. In this case, NanoTime
assumes that L2 is the intended endpoint of the data path and stops path tracing at L2.
Latch L2 is transparent when clock PH2 is high. If the data launched by L1 arrives at L2
during this period of transparency, NanoTime performs a setup check for the arrival of data
at L2 before the closing edge at time = 4. This situation is marked “B” in Figure 9-5.
Because L2 is transparent in situation “B,” NanoTime continues path tracing from L2 and
checks for the arrival of data at the next latch downstream, at L3. It performs the same kind
of setup check there. If the data arrives during the period of transparency at L3, NanoTime
continues path tracing forward, and so on. Path tracing stops at a nontransparent sequential
device or an output port.
If the data launched by L1 arrives at L2 after the closing edge of clock PH2, the result is a
timing violation, as shown by example “C” in Figure 9-5. To test for possible violations
downstream from this point, NanoTime adjusts the data arrival time back to the zero-slack
value and continues tracing the path forward, as indicated by the letter “D” in the figure. The
report_paths command reports this condition as a “latch error recovery” adjustment.
To cause NanoTime to stop path tracing when a setup error occurs, set the
trace_latch_error_recovery variable to false.
To perform hold checking, NanoTime considers the capture edges relative to the setup
check. It verifies that data launched at the startpoint arrives late enough not to be captured
by the previous edge, which is the capture edge just before the one at which the setup check
is performed. This behavior is shown in Figure 9-6.
Figure 9-6 Hold Checks Using Two-Phase Clocks
PH1L1
Setup at L2
PH2L2
Hold at L2
0 1 2 3 4 5 6
The default timing margin at the path endpoint is zero. You can specify a nonzero setup or
hold timing margin by setting the timing_latch_*_**_margin variables (where *
represents setup or hold and ** represents rise or fall).
Similarly, for timing paths that end at RAM cells, you can specify a nonzero setup or hold
timing margin by setting the timing_ram_*_**_margin variables.
By default, the margin is set to zero. Specify a positive margin for a more conservative and
restrictive check, or a negative margin for a more permissive check. The variable must be
set before you use the check_design command. After the check_design command, you
can adjust timing margins at individual locations in the design by using the
set_timing_check_attributes command.
Setup and hold checking at flip-flops is similar to the checking done at transparent latches.
However, there is no transparency through a flip-flop, and launch and capture both occur on
the same clock edge, either rising or falling, depending on the type of flip-flop. Use the
timing_flip_flop_*_**_margin variables to set the timing margins for setup and hold
checks at flip-flops.
NanoTime determines a setup relationship by finding the first capture edge at the path
endpoint that comes after the launch edge at the path startpoint. Then it determines the hold
relationship by checking the arrival of the data for the setup relationship relative to the
previous capture edge, and also the arrival of the next data launch relative to the setup
capture edge.
For example, in Figure 9-7, the setup relationships are different because of the different
clocks used for setup and capture. The more restrictive setup relationship is Setup 1, so that
relationship establishes the setup requirement for the path. For the hold requirement, the
most restrictive check is Hold 2b, so that relationship establishes the hold requirement for
the path.
Combinational
D Q D Q
Logic
CLK1
CLK2
Setup 1 Setup 2
launch edge launch edge
CLK1FF1
Hold 1a Hold 2b
Hold 1b Hold 2a
Setup 1
Setup 2
CLK2FF2
Setup 1 Setup 2
capture edge capture edge
0 5 10 15 20 25 30 35 40 45 50
NanoTime automatically checks for setup and hold violations on gating inputs to ensure that
the clock signal is not interrupted or clipped by the gate. This checking is done only for
combinational gates where one signal is a clock that can be propagated through the gate,
and the gating signal is not a clock.
The clock-gating setup check ensures that the controlling data signal enables the gate
before the clock becomes active. The arrival time of the leading edge of the clock signal is
checked against both edges of any data signal that feeds the data pins to prevent a glitch at
the leading edge of the clock pulse or a clipped clock pulse.
Figure 9-8 shows examples of clock-gating setup violations.
Figure 9-8 Clock-Gating Setup Violations
D Q D Q
CK1
GATE
Clipped
pulse Glitch
CK2
The clock-gating hold check ensures that the controlling data signal remains stable while the
clock is active. The arrival time of the trailing edge of the clock pin is checked against both
edges of any data signal that feeds the data pins. A clock-gating hold violation causes either
a glitch at the trailing edge of the clock pulse or a clipped clock pulse.
D Q D Q
CK1
GATE
CK2
NanoTime checks setup and hold times for gated clocks that it recognizes. The default
timing margin for a setup or hold check is zero, unless the library cell for the gate has gating
setup or hold timing arcs. You can specify a nonzero setup or hold timing margin for
specified paths in the design by using the set_gated_clock_timing_check_attributes
command, or you can specify them globally for all gated clock timing checks with the
timing_clock_gate_*_**_margin variables (where * represents setup or hold and **
represents rise or fall).
To create a gated-clock timing check where none exists by default, use the
create_gated_clock_timing_check command. To remove a gated clock timing check,
use the remove_gated_clock_check command. For more information, see the man pages
for the commands.
In this example, a pulse width of less than 2.0 time units anywhere in the CK1 clock tree
triggers a timing violation during path tracing.
You can use the -low or -high option to restrict the check to high or low pulses only.
Otherwise, the constraint applies to both high and low pulses.
Specifying a cell applies the minimum pulse width check to all pins of the cell. If the cell also
has a minimum pulse width constraint defined in the logic library, NanoTime uses the more
restrictive (smaller) value.
Note:
Setting pulse width checks globally on data nets is not recommended, because the
resulting large number of checks is likely to generate a large number of false violations.
Use the set_data_check command to define timing checks on a specific set of data nets
instead.
To report the existing pulse width checks, use the report_constraint
-min_pulse_width command or the report_min_pulse_width command. You can use
these commands only after the trace_paths command has been run.
To remove minimum pulse width checks, use the remove_min_pulse_width command.
The types of timing performed also depend on whether the inputs of the precharge circuit
are driven by precharge logic. If you specify that an input net is driven by precharge logic,
NanoTime can avoid the timing checks for combinational logic. To specify the nets that are
driven only by precharge logic, use the set_precharge_input_net command. To cancel
the effects of this command, use the remove_precharge_input_net command.
Table 9-1 lists the domino checks performed by NanoTime and the codes used to refer to the
checks in timing reports.
Table 9-1 Domino Precharge Timing Check Notation in Path Reports
Code Description
S1 Setup check at a falling precharge net, footed or footless, full or half keeper
S2a Setup check at a falling precharge input, footless, driven by a domino device,
full or half keeper
H3a1 Hold check at a falling precharge net, footed, driven by a domino device,
half-keeper, with min_latch_transparent enabled
H3a2 Hold check at a falling precharge net, footless, driven by another domino
device
H3b1 Hold check at a falling precharge net, footed, driven by a non-domino device,
half-keeper, with min_latch_transparent enabled
H3b2 Hold check at a falling precharge net, footless, driven by a non-domino device
H3x1 Hold check at a falling precharge net, footed, full keeper; or half-keeper with
min_latch_transparent disabled; a nontransparent check
H4 Hold check at a falling precharge input, footed or footless, full or half keeper
P
out
b
Precharge Evaluate
CLK
CLK
For a logic-high input signal, NanoTime verifies that the rising edge of the input signal
arrives soon enough to discharge the precharge node before the end of the evaluate phase.
This is called the S1 setup check. NanoTime also verifies that the falling edge of the input
signal occurs no sooner than the end of the evaluate phase, so that the precharge node is
not left floating. This is called the H4 hold check. See Figure 9-11.
Figure 9-11 Type D1 Checking for a Logic-High Input
Precharge Evaluate
CLK
H4
check
Input a
S1
Precharge check
node P
For a logic-low input signal, NanoTime verifies that the falling edge of the input signal arrives
soon enough before the start of the evaluate phase to prevent unwanted discharge of the
precharge node. This is called the S2b setup check. NanoTime also verifies that the rising
edge of the input signal occurs no sooner than the end of the evaluate phase, to prevent
unwanted discharge of the precharge node. This is called the H3 hold check. See
Figure 9-12.
Figure 9-12 Type D1 Checking for a Logic-Low Input
Precharge Evaluate
CLK
S2b
check H3
Input a
check
Precharge
node P
CLK
P
out
a
Precharge Evaluate
CLK
For a logic-high input signal, NanoTime verifies that the rising edge arrives soon enough to
discharge the precharge node before the end of the evaluate phase. This is called the S1
setup check. NanoTime also verifies that the falling edge of the input signal occurs no
sooner than the end of the evaluate phase, so that the precharge node is not left floating.
This is called the H4 hold check, as shown in Figure 9-14 for a logic-high input signal and in
Figure 9-15 on a D2 for logic-high input signal.
Figure 9-14 Type D2 Checking for a Logic-High Input
Precharge Evaluate
CLK H3a H4
check check
H3b
check
Input a
S1
Precharge check
node P
Precharge Evaluate
S2a
CLK
check
S2b
check
Input a H4
check
Precharge
node P
CLK CLK
p p
out out
Precharge Evaluate
CLK
H4
check
Input a
Precharge
node P
A domino stage with a full-cycle keeper falls into one of these categories:
• Domino retain: A full-keeper domino gate that is clocked with a clock that has the same
phase as the clock that triggers the input data, and that has not been marked as a
flip-flop by the mark_flip_flop command. This case is similar to the basic domino
stage, except that it has a full keeper rather than a half PMOS keeper.
• Domino latch: A full-keeper domino gate that is clocked with a clock having a different
phase from the clock that triggers the input data. The stage can act as a transparent
latch. NanoTime uses the new-phase clock for timing checks.
• Domino flop: A full-keeper domino gate that is clocked with a clock having the same
phase as the clock that triggers the input data, and that has been marked as a flip-flop
by the mark_flip_flop command. These gates are treated as flip-flops. The timing
margin calculations account for the cycle change. Instead of using the same cycle for the
basic typical domino checks, NanoTime uses the next clock cycle for the checks.
is defined from a clock object to a data object is defined between two clock objects or two
data objects
You must specify data checks before the check_design command. You can remove a data
check with the remove_data_check command. Data checks are not evaluated at the
extract_model command unless you include the -non_sequential_arcs option.
Figure 9-17 shows a simple example of a cell that has a nonsequential constraint. The cell
has two data inputs, D1 and D2. The rising edge of D2 is the active edge that might be used
to latch data at D1. Pin D1 (the “to” pin) is sometimes called the checked pin and pin D2 (the
“from” pin) is sometimes called the reference pin.
D1
Hold
Setup
D2
In this example, the signal at D1 must be stable for a setup time before the active edge. It
must also be stable for a hold time after the active edge. To define this check, use
commands similar to the following:
nt_shell> set_data_check -rise_from D2 -to D1 -setup 3.5
nt_shell> set_data_check -rise_from D2 -to D1 -hold 6.0
The “from” pin is the related pin and the “to” pin is the constrained pin. If the data checks
apply to both rising and falling edges on the related pin, use the -from option instead of the
-rise_from or -fall_from option, as shown in the following example:
nt_shell> set_data_check -from D2 -to D1 -setup 3.5
nt_shell> set_data_check -from D2 -to D1 -hold 6.0
For more information, see the man pages for the set_timing_check_attributes,
set_timing_check_attachment, mark_latch, and mark_precharge commands.
To report only a subset of timing checks, use the -status_details option with an
argument of untested, violated, removed, or met. To specify the type of check in the
report, use the -check_type option with an argument of hold or setup. To sort the report,
use the -sort_by option with an argument of slack, check_type, or name.
For example, the following command reports the coverage analysis of untested timing
checks:
nt_shell> report_analysis_coverage -status_details untested
Untested reasons:
NP - no_paths
NEC - no_endpoint_clock
CD - constant_disabled
UNK - unknown
FP - false_path
NTC - no_timing_check_path
DCD - data_constant_disabled
CCD - clock_constant_disabled
DST - dont_search_thru
PC - previous_check
type label slack reason Constrained Pin dir Related Pin dir
------ ------------------ --------- --------- ----------------- --- -------------- ---
hold gated clock hold untested NP Xreg0.X1.Mn1.G r Xreg0.X1.Mp0.G f
setup gated clock setup untested NP Xreg0.X1.Mn1.G r Xreg0.X1.Mn0.G r
hold gated clock hold untested NP Xreg0.X1.Mp1.G f Xreg0.X1.Mp0.G f
setup gated clock setup untested NP Xreg0.X1.Mp1.G f Xreg0.X1.Mn0.G r
hold latch hold (trans) untested FP Xreg0.X5.Mn0.G r Xreg0.Mp0.G r
...
Table 9-3 describes the reason codes for untested timing checks. The first four reason
codes can appear in all analysis coverage reports. The remaining reason codes are
reported only if the timing_analysis_coverage_fanin variable is set to true. If the
*****************************************************
Report: fanin coverage report for option false_path
Design:
...
*****************************************************
target-pin pins in transitive fanin cone
------------------------- --------------------------------
XI4.XI2.MN1.g XI1.XI2.MN1.g
XI4.XI2.MP1.g XI1.XI2.MP2.g
*****************************************************
Report: fanin coverage report for option no_timing_check_path
Design:
...
*****************************************************
target-pin pins in transitive fanin cone
------------------------- --------------------------------
XI4.XI2.MN1.g XI5.MP1.g
XI4.XI2.MP1.g XI5.MN1.g
10-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Timing Paths
A timing path is an analysis unit defined both by a set of connected devices and the signals
on those devices. A physical path with a rising transition and the same path with a falling
transition are considered to be different timing paths.
The startpoint of a timing path is a place in the design where data is launched by a clock
edge. The data proceeds through combinational logic and transparent latches in the path
and is captured at the endpoint by another clock edge. Properties of path startpoints and
endpoints are as follows:
• A startpoint can be a clock, a primary input port, a sequential cell, a clock input pin of a
sequential cell, a data pin of a level-sensitive latch, or a pin that has an input delay
specified. If you specify a clock, all registers and primary inputs related to that clock are
used as path startpoints. If you specify a cell, the command applies to all input pins and
bidirectional pins of that cell.
• An endpoint can be a clock, a primary output port, a sequential cell, a data input pin of a
sequential cell, or a pin that has an output delay specified. If you specify a clock, all
registers and primary outputs related to that clock are used as path endpoints. If you
specify a cell, the command applies to one path endpoint on that cell.
Timing paths fall into four categories of data paths and two categories of clock paths.
Figure 10-1 shows the four types of data paths:
Figure 10-1 Timing Paths
Path 1 Path 2 Path 3
CLK
Logic
Path 4
In this figure, “Logic” refers to a combinational logic network. Each path starts at a data
launch point, passes through some combinational logic (and possibly transparent latches),
and ends at a data capture point:
• Path 1 starts at an input port and ends at the data pin of a sequential element.
• Path 2 starts at the clock pin of a sequential element and ends at the data pin of a
sequential element.
• Path 3 starts at the clock pin of a sequential element and ends at an output port.
• Path 4 starts at an input port and ends at an output port.
Combinational logic might contain multiple paths, as illustrated in Figure 10-2. NanoTime
uses the longest path to calculate the maximum delay and the shortest path to calculate the
minimum delay.
Figure 10-2 Multiple Paths Through Combinational Logic
Shorter path:
2 gate delays
Longer path:
3 gate delays
In addition to data paths, NanoTime also analyzes clock and clock-gating paths, as shown
in Figure 10-3:
• A clock path is a path from a clock input port or cell pin, through one or more buffers or
inverters, to the clock pin of a sequential element.
• A clock-gating path is a path from an input port to a clock-gating element.
Figure 10-3 Clock and Clock-Gating Paths
Data path
A
D Q Logic D Q
CLK
Clock path
CLKOFF
Clock-gating path
A
mp1 mp2 mp3
arc 2
IN OUT
B
trigger 1
Transistors mp2 and mn2 form a pass gate, and signals A and B are side inputs (inputs
whose states might affect the timing). Under most circumstances, NanoTime does not
automatically define timing arcs that begin or end at side inputs. However, if you manually
create a timing check between A and OUT, the gate of transistor mp2 becomes a timing
point and timing arcs can begin or end at that point.
The trigger of a timing arc is the location (port or pin) of the active transition at the startpoint
of the arc. The trigger of arc 1 is the gate pin of transistor mn1; the trigger of arc 2 is the gate
pin of transistor mp1.
A NanoTime simulation unit is frequently the same as a channel-connected block. However,
it can be either smaller than or larger than a channel-connected block, as follows:
• A simulation unit includes only the transistors that are turned on. For example, only one
of several parallel transistors in a NAND or NOR gate might be conducting. That leg of
the circuit is included in the simulation unit and the nonconducting devices are not.
• A simulation region for dynamic simulation can include more than one
channel-connected block. See Chapter 14, “Dynamic Simulation” for more information.
The cell delay of a timing path is the sum of the individual cell delays of the timing arcs that
make up the path. Similarly, the wire delay of a path is the sum of wire delays for the
constituent arcs.
Several NanoTime features calculate an adjustment to the basic delay of a path. The values
of some adjustments are available in reports and attributes. For example, crosstalk delta is
the delay adjustment resulting from signal integrity analysis.
Transition time is the time required for the signal at the endpoint to switch between 10
percent of the rail voltage and 90 percent of the rail voltage. Full transition time is an
approximation of the time required to switch between the full rail voltages; it is calculated by
extrapolating a straight line drawn through the 10 percent and 90 percent points. Options are
available for adjusting slew thresholds and related calculations.
Timing Checks
Timing checks (also known as constraints) test whether signals arrive at specific locations
fast enough to ensure correct operation of the circuit. NanoTime automatically performs
several types of timing checks during path tracing. You can also define additional timing
checks.
A setup check (constraint) specifies how much time is necessary for data to be available at
the input of a sequential device before the clock edge that captures the data in the device.
This constraint enforces a maximum delay on the data path relative to the clock path.
A hold check (constraint) specifies how much time is necessary for data to be stable at the
input of a sequential device after the clock edge that captures the data in the device. This
constraint enforces a minimum delay on the data path relative to the clock path.
Extracted model
A B
Arc
Output load capacitance
For transition times or output loads at intermediate values within the table, NanoTime uses
linear interpolation between the data points to estimate the delay. For transition times and
output loads outside of the ranges defined in the table, NanoTime uses extrapolation to
estimate the delay. A table that spans a larger range of transition time or load capacitance
provides better accuracy for a larger range of conditions.
Driver Receiver
model models
C 1, C 2
Reduced-order
network model
C 1, C 2
i(t)
C 1, C 2
v
t
C1 C2
The CCS timing receiver model uses two different capacitor values rather than a single
lumped capacitance. The first capacitance is used as the load up to the input delay
threshold. When the input waveform reaches this threshold, the load is dynamically adjusted
to the second capacitance value.
A timing arc through a logic library is modeled as a driving cell, an RC network at the output
of the cell, and a capacitive load, as shown in Figure 10-6. NanoTime computes the
response at the driver output and at the load pins, given the input slew or waveform at the
driver input.
• The driver model is intended to reproduce the response of the driving cell’s underlying
transistor circuitry when connected to an arbitrary RC network, given a specific input
slew.
• The reduced-order network model is a simplified representation of the full annotated
network that has nearly the same response characteristics as the original network.
• The receiver model represents the complex input capacitance characteristics of a stage
input pin, including the effects of the transition direction, the slew at the pin, the receiver
output load, and the voltage and temperature conditions.
Note:
A direct comparison to delays from the PrimeTime or SPICE tools cannot be made for
nets with transistor drivers and CCS receiver models (either pin-based or arc-based)
because the PrimeTime tool does not support transistor drivers and SPICE does not
support CCS receiver models.
Because of the large runtime, the -full_path_enumeration option is practical only with
very small designs and when used with the set_find_path command to limit the scope of
the design being considered in the analysis.
Alternatively, you might want to save fewer paths in the database. These options reduce
runtime and memory usage. To save fewer paths,
• Use the -worst_fanin_path option to keep only the information about the worst path in
the fanin to each endpoint.
• Restrict the scope of the analysis with the set_find_path command.
• Use the -clock_only, -min_only or -max_only options to analyze only the clock
paths, the minimum delay paths, or the maximum delay paths.
To reduce memory usage, you can set an overall limit on the number of paths saved for the
whole design. The timing_*_**_paths_saved variables set the limits for different types of
timing paths (where * represents max or min and ** represents delay or slack). The
variables all default to a value of 1 million.
For example, to limit the total number of maximum-delay paths saved in the database to 500
paths for the whole design, use the following command:
nt_shell> set timing_max_delay_paths_saved 500
Path tracing might take a long time, depending on the size and complexity of the design and
the path tracing options. To get periodic progress reports during path tracing, set the
trace_show_stack_period variable to a nonzero integer value. The variable specifies the
number of minutes of elapsed time between periodic reports.
Path Reporting
The report_paths command generates a report on timing paths in the design. You must
first execute path tracing with the trace_paths command, which saves detailed
information about the worst-case timing paths into a path database. If you would like to see
more paths in the path reports, you must use options during the path tracing operation to
ensure that the additional paths are traced and saved in the path database.
This section contains the following topics:
• Path Report Contents
• Specification of Paths to Report
• Latch Error Recovery in Path Reports
• Custom Reports With the get_timing_paths Command
Path Path
Slack Delay Type Startpoint Endpoint
-------- -------- ----- -- --------------- -- ---------------------
0.513 4.171 C-L r clk2 f Xareg.Xreg63.X5.Mp0.G
0.515 4.169 C-L r clk2 f Xareg.Xreg62.X5.Mp0.G
0.530 4.171 C-L r clk2 f Xbreg.Xreg63.X5.Mp0.G
0.533 4.169 C-L r clk2 f Xbreg.Xreg62.X5.Mp0.G
...
Path Path
Endpoint Delay Required Slack
------------------------------- -------- -- -------- --------
Xbreg.Xreg50.X5.Mp0.G 9.435 f 6.784 -2.651
Xbreg.Xreg50.X5.Mp0.G 7.935 f 6.784 -2.651
Xbreg.Xreg50.X5.Mp0.G 6.435 f 6.784 -2.651
...
Xbreg.Xreg51.X5.Mp0.G 9.294 f 6.753 -2.542
Xbreg.Xreg51.X5.Mp0.G 7.794 f 6.753 -2.542
...
A detail report breaks up paths into different levels of granularity depending on the
-path_type and -clock_only options. Table 10-1 shows the effect of different
-path_type options, with and without the -clock_only option.
Table 10-1 Detail in Path Report Types
Net types appear under the column heading NT. The codes are defined in Table 10-1. An
abbreviated form of this table appears in the heading of every detail report.
Timing checks for domino circuits depend on the construction of the domino gate. The table
refers to type D1 and type D2 domino precharge structures. A type D1 domino structure has
a controlling clock on the evaluate stack, whereas a type D2 domino structure does not.
The table also refers to N-domino and P-domino circuits. An N-domino circuit has an NMOS
evaluate stack and charges a precharge node to a high voltage during a precharge phase,
when the clock is low. A P-domino circuit has a PMOS evaluate stack and discharges a
predischarge node to a low voltage during a predischarge phase, when the clock is high. For
more information about the construction of domino precharge circuits, see Domino
Precharge Circuit Types.
Table 10-2 Net Types in the NT column in Path Reports
Code Net type Code Net type
D Data input port N1 Precharge node of D1 N-domino
O Data output port N2 Precharge node of D2 N-domino
SZ Data turnoff output N3 Precharge node of D1 N-domino retain
Z Turnoff N4 Precharge node of D2 N-domino retain
E Turnoff enable N5 Precharge node of D1 N-domino latch
C Clock N6 Precharge node of D2 N-domino latch
CX Clock, dynamic simulation N7 Precharge node of D1 N-domino flip-flop
L Latch N8 Precharge node of D2 N-domino flip-flop
R Register file latch n1 Input of D1 N-domino
A Adjusted latch n2 Input of D2 N-domino
RA Adjusted register file latch n3 Input of D1 N-domino retain
G Gated clock n4 Input of D2 N-domino retain
T Transparent gated clock n5 Input of D1 N-domino latch
SC Stopped clock n6 Input of D2 N-domino latch
U User-defined constraint n7 Input of D1 N-domino flip-flop
DU User-defined data-to-data constraint n8 Input of D2 N-domino flip-flop
M Timing model P1 Predischarge node of D1 P-domino
LP Latch to latch loop P2 Predischarge node of D2 P-domino
PC Precharge clock P3 Predischarge node of D1 P-domino retain
EC Eval clock P4 Predischarge node of D2 P-domino retain
PP Precharge PC, predischarge EC P5 Predischarge node of D1 P-domino latch
PN Precharge EC, predischarge PC P6 Predischarge node of D2 P-domino latch
GC Generated clock P7 Predischarge node of D1 P-domino flip-flop
Mxx Memory-specific timing checks P8 Predischarge node of D2 P-domino flip-flop
$ Simultaneous switching inputs p1 Input of D1 P-domino
& Net has back-annotated parasitics p2 Input of D2 P-domino
p3 Input of D1 P-domino retain
p4 Input of D2 P-domino retain
p5 Input of D1 P-domino latch
p6 Input of D2 P-domino latch
p7 Input of D1 P-domino flip-flop
p8 Input of D2 P-domino flip-flop
• NT
The net type of the net in the Point column.
• Transition direction (unlabeled)
The transition direction at the location in the Point column; r for rising and f for falling.
• Point
The endpoint of the path segment reported on the line. You can optionally show the
subcircuit name associated with the point.
To limit the report to paths having a slack worse than a specified value, use the
-slack_less_than option. For example, to report only the maximum-delay paths that have
a negative slack (those that violate timing), use the following command:
nt_shell> report_paths -max -slack_less_than 0
Many different paths can share a common endpoint. By default, all of these paths are
reported. To specify the number of paths reported per endpoint, use the -nworst option. For
example, to report only the single worst path per endpoint, use the following command:
nt_shell> report_paths -max -nworst 1
To reduce the number of paths in the report when there are many similar paths (such as in
designs with buses), use the -suppress_similar_paths option in conjunction with the
create_net_group command. When two or more paths are similar, only the first path
appears in the report, along with a notation showing the number of similar paths that are not
being reported. This results in a much shorter report.
A path is considered similar to another path if both of the following conditions are true:
• The path has at least one net in the same group as the corresponding net in the other
path. Define net groups with the create_net_group command.
• The total path delays, slacks, and stage delays of the two paths are similar.
You can define how paths should be considered to be similar in terms of relative or
absolute delay or slack by using the report_paths_suppress_similar_paths_*
variables. For more information, see the man pages.
The -through option might return unexpected results because of the way NanoTime saves
paths during path tracing. When executing the trace_paths command, you can choose to
save the worst N paths to an endpoint, or all of the paths within a certain delay of the worst
path to that endpoint, but you cannot choose to save paths based on startpoints or
throughpoints. When you use the report_paths -through option, the database might not
contain any paths that pass through the point specified in the -through option. Even if some
paths are reported by using the report_paths -through command, there is no guarantee
that those paths represent the worst delays to the specified endpoint.
To force NanoTime to perform path tracing through a specific point, use one or more
set_find_path commands with the -through option before the trace_paths command.
You can then use the report_paths command to examine the delays on these paths. In
this case, path tracing is performed only on the specified paths. Delays in the rest of the
design are not saved into the path database and are therefore not available for reporting.
The paths defined with the set_find_path command do not appear in the report generated
by the report_exceptions command; to list them, use the report_find_path command.
The input, data1, arrives at latch node X2.lat1n at 4.245 ns (the initial 4.1 ns value plus the
values in the increment columns to this point, 0.032 ns and 0.113 ns). The latch clock turns
off at 4.153 ns according to the cycle line of the report, which is 0.092 ns before the data1
input arrives. Using latch error recovery, NanoTime adjusts the time by -0.092 ns so that the
data arrives at the latch just as the clock turns off. Path tracing continues to the X4.lat1n
latch node, where the path stops because it has arrived before the opening edge of the clock
for that latch. Latch error recovery allows you to find additional timing errors after the first
setup error.
The following procedure displays the startpoint name, endpoint name, and the slack of the
worst long path to each unique endpoint:
proc custom_report_worst_path_per_endpoint {} {
echo [format "%-20s %-20s %7s" "From" "To" "Slack"]
echo "-------------------------------------------------"
foreach_in_collection path [get_timing_paths -max -nworst 1] {
set slack [get_attribute $path slack]
set startpoint [get_attribute $path startpoint]
set sp_obj [get_attribute $startpoint object]
set endpoint [get_attribute $path endpoint]
set ep_obj [get_attribute $endpoint object]
echo [format "%-20s %-20s %s" \
[get_attribute $sp_obj full_name] \
[get_attribute $ep_obj full_name] $slack]
}
}
nt_shell> custom_report_worst_path_per_endpoint
From To Slack
---------------------------------------------------
clk1 out2 -3.000000
clk1 out1 -3.000000
clk1 xl4.xi2.mn1.g -1.000000
clk1 xl3.xi2.mp1.g -1.000000
clk1 xl3.xi2.mn1.g -1.000000
in0 xl1.xi2.mn1.g 6.000000
Multi-Input Switching
By default, for a gate with multiple inputs, NanoTime considers the delay from the switching
of one input at a time. The tool selects one of the inputs as the switching input and sets the
nonswitching inputs to a constant logic state.
However, in actual usage, the delay might be worse when two or more inputs switch
simultaneously. NanoTime offers two types of multi-input switching analysis: user-guided
and timing-based. Both types of multi-input switching analysis require a NanoTime Ultra
license.
Multi-input switching analysis is described in the following sections:
• User-Guided Multi-Input Switching
• Timing-Based Multi-Input Switching
• Multi-Input Skew Capture
• Multi-Input Switching in the Path Report
• Verification With the write_spice Command
A OUT
t=trigger OUT
t P=1 Q=1 R=1
A
B 0 0 0
C
GND
t D=0
A OUT
GND
In the circuit shown in Figure 10-9,
• The NMOS device connected to net A is the trigger.
• The non-trigger switching NMOS devices are those connected to nets B and C. The
PMOS device connected to D is tied low (logic 0) in this case.
A OUT
1 1 1 1
Eval=1
GND
1
P Q R
t
A 1 1 1
Eval =1
GND
1 1 1 1
GND
t = trigger OUT
1 1 1 1
1 1 1 1
CLK
GND
In the circuit shown in Figure 10-14, the trigger is the NMOS device connected to input CLK
rising. Since all stacks are connected to this evaluation device, other inputs are tied high
(logic 1).
Figure 10-15 AOI (Complementary Side) With Minimum Delay
VDD
t = trigger
D “0”
t B C
A
OUT
GND
A0
D0
A1
input
D1 signals
D2
select signals
D3 D3 D2 D1 D0
If a disabling select signal arrives at the multiplexer after an enabling select signal,
contention occurs because the multiplexer output cannot fully switch until the effect of the
disabling select signal is gone. This introduces an additional delay through the multiplexer
that must be simulated to avoid overly optimistic results.
You can use the mark_correlated_region command to help NanoTime analyze multiple
switching inputs during a delay calculation. List the inputs (ports, pins, or nets) in the
argument of the -inputs option and the outputs (ports or nets) in the argument of the
-outputs option. Every output object must be in the transitive fanout of one or more of the
inputs. For the decoder in Figure 10-16, the command is:
nt_shell> mark_correlated_region -inputs {A0 A1} -outputs {D0 D1 D2 D3}
The write_spice command does not include the skews or offsets for multi-input switching
stages captured by the mark_correlated_region command.
Controlling Accuracy
The accuracy of NanoTime timing analysis is comparable to that of HSPICE simulations.
You can analyze much larger designs with the NanoTime static timing analysis tool than with
the HSPICE dynamic simulator, but this capability requires simplifications and settings that
might affect the results. As with most analysis techniques, greater accuracy often requires
longer runtime. NanoTime features provide many options for customizing this tradeoff.
A different aspect of accuracy is whether the calculated delays match measurements on
actual devices. Within NanoTime, if your design setup has issues such as incorrect
transistor models, NanoTime results will be incorrect compared to finished devices—but
they will match a similarly set up (similarly incorrect) HSPICE run.
The HSPICE tool is the benchmark for NanoTime delay calculations. To facilitate
comparison, the NanoTime write_spice command is available to create HSPICE input
files for the design under consideration, one path at a time. You can run HSPICE on these
files to compare NanoTime path delays to HSPICE delays. For more information about the
write_spice command, see Chapter 11, “Correlation with HSPICE.”
For best results, ensure that your simulation setup is correct, including transistor models,
parasitics, design voltages, clock networks, topology markings, and timing constraints. Pay
attention to all information and warning messages and resolve the flagged conditions.
This section describes specific analysis conditions and parameter settings that might
improve both the overall accuracy of NanoTime delays and the correlation to HSPICE
delays. It includes the following topics:
• Initial Condition Adjustment
• Parasitics Options
• Library Model Considerations
• Using HSPICE for Selected Timing Arcs
• Nonlinear Waveform Analysis
• Extended Sidebranch Analysis
• Miller Capacitance Analysis
• Predriver Mix Ratio
• Other NanoTime Features
Runtime and accuracy often present tradeoff decisions. You must consider your
requirements for both runtime and accuracy when setting up the analysis flow. See
Controlling Runtime for more information about some specific settings that affect runtime.
You can control the initial conditions for specific nets by using the
set_initial_condition_adjustment command. The command allows you to scale the
threshold voltage before adding it to the ground voltage (for PMOS) or subtracting it from the
supply voltage (for NMOS). You can use different scale factors for NMOS and PMOS
transistors.
You might do this to consider a worst-case condition of excess voltage capacitively coupled
onto the internal nodes. For example, the set_initial_condition_adjustment
–nfactor 0 [get_nets x2] command causes the internal node in Figure 10-17 to be set
to VDD instead of the default value of VDD-VTHn.
Parasitics Options
Many aspects of parasitic netlist creation and annotation can affect the timing results. For
general information about parasitics, Parasitic Data Pay attention to the following items for
high-accuracy analysis:
• Parasitics pruning
NanoTime prunes low-impact resistors and capacitors to improve runtime. The tool
combines or removes RC sections from each net to make a simpler representation that
has a path delay within a tolerance of the original delay of the RC network. The tolerance
must be equal to or larger than the rc_reduction_min_net_delta_delay variable and
less than or equal to the rc_reduction_max_net_delta_delay variable. The defaults
are 1 and 10 ps, respectively.
Setting the variables to 0 turns off pruning completely. However, the accuracy
improvement is usually small while the increase in runtime might be significant. Setting
the rc_reduction_max_net_delta_delay variable to a value of 0.005 ns (5 ps) is
usually sufficiently small.
• Input skew
By default, NanoTime analysis ignores skew caused by parasitic RC delay between
connected trigger devices. Figure 10-18 shows a circuit with three connected PMOS
gates. The parasitic RC delay between these gates might be large enough to affect the
accuracy of the timing analysis. The set_enable_input_spf_skew command allows
you to set a threshold in time units for evaluating the magnitude of this RC delay. If the
value exceeds the threshold, the timing analysis takes the input skew into consideration.
Common-trigger skew might affect fingered transistors, especially if the number of
fingers is larger than 4.
Large RC skew might result in very nonlinear waveforms. In this case, use nonlinear
waveform analysis with a sufficient number of samples to represent the waveform
accurately.
Figure 10-18 Input Skew
RC RC
• Minimum capacitance
The default minimum capacitance used in NanoTime analysis is 1e-6 pF. When reading
in parasitic capacitance values, the tool automatically converts any values smaller than
this to the minimum value. You can modify this conversion by setting the
parasitics_min_capacitance variable to a smaller value such as 1e-7.
• Contact resistance
Enable rail contact resistance analysis by setting the
parasitics_enable_rail_contact_resistance variable to true.
A mnA
x
B mnB D mnD D mnD
y z z
C mnC E mnE E mnE
The and-or-invert gate includes ten transistors that are all part of the same
channel-connected block. There are many possible paths through this CCB. However, only
a few of them might be of interest. For example, case analysis commands might set input
signal A to logic 0 and input signals B, C, and D to logic 1. Then the reduced circuit at right
contains the essential devices to analyze the effect of a transition of input signal E and
simulating the entire CCB is unnecessary.
The following command uses HSPICE to analyze only paths through net z:
set_simulator z
The following command uses HSPICE to analyze all paths through the CCB:
set_simulator -ccb_containing z
Many more paths are analyzed with HSPICE in this case. The same paths are selected for
HSPICE analysis no matter which net within the CCB (for example x, y, w, or z) is used as
the command argument.
A detailed path report includes a comment on the line after a timing arc whose values are
derived from HSPICE simulation, as shown in this example:
Path Incr
Adjust Trans Cap NT Point Net
---- -----
------ ----- ----- -- -------------------- ------
0.100 clock clk1 (rise)
4.000 input external delay
4.100 0.000 0.100 0.020 D& r data1 (in) data1
4.100 0.000 0.100 0.020 & r X1,Mn0.G (inv2) data1
4.132 0.032 0.039 0.020 & f X2.Mp1.G (latch2) data1n
4.153 0.113 -0.092 0.185 0.045 A& r X2.X6.Mn0.G (inv2) X2.lat1n
(HSPICE simulation)
4.185 0.032 0.047 0.028 f X11.Mp0.G (inv2) q0
4.216 0.031 0.041 0.019 r X4.Mn1.G (latch1) q0n
4.288 0.062 0.086 0.045 L& f X4.X6.Mp0.G (inv2) X4.lat1n
...
The use of HSPICE simulation for specific arcs or paths interacts with other choices in the
NanoTime flow as follows:
• Timing models created with the -hspice_timing option of the extract_model
command already use HSPICE to simulate the model paths. The set_simulator
command has no effect on these models.
• Timing models created without the -hspice_timing option of the extract_model
command have improved accuracy if you use the set_simulator command to simulate
the paths saved in the model.
• Dynamic clock simulation takes precedence over the set_simulator command.
• Dynamic delay simulation for regions marked with the mark_simulation command
takes precedence over the set_simulator command.
• Signal integrity delay analysis is supported for use with this feature. The HSPICE
simulation does not change any aspect of aggressor timing window determination.
90%
10%
The thresholds used for analysis can be set for specific objects by using the
set_measurement_threshold command, or for the whole design by setting the
rc_slew_*_threshold_pct_** variables, where * represents lower or upper and **
represents fall or rise.
A linear slope approximation typically provides good tradeoff between accuracy and
runtime. However, where input transition waveforms differ significantly from the linear
model, you can get better accuracy, at the cost of memory and runtime, by using a nonlinear
waveform for simulation. A nonlinear waveform uses a number of voltage-time data points
rather than just two data points at the two threshold voltages, as shown in Figure 10-21.
Figure 10-21 Nonlinear Modeling of Transition Waveform
90%
70%
30%
10%
NanoTime can determine the smoothness of each calculated waveform. If the waveform is
relatively smooth, it converts the waveform to an equivalent linear transition for simulating
the next stage. On the other hand, if a waveform is relatively nonlinear or bumpy, it can
optionally use the piecewise linear (nonlinear) model for better accuracy.
NanoTime checks the smoothness by comparing the slopes of adjacent piecewise linear
segments of the waveform, based on the delay measurement point and the slew
measurement points. If the adjacent slopes are nearly the same, the waveform is
considered smooth. If the slopes are sufficiently different, the waveform is considered
nonlinear.
To perform this test, NanoTime considers the slopes of adjacent segments, A and B. It looks
at the larger slope ratio, either A/B or its inverse B/A, and compares this ratio to the
threshold value (5.0 by default). A ratio smaller than this threshold indicates a smooth
waveform; a larger ratio indicates a nonlinear waveform.
A glitch in the waveform can cause the ratio A/B to have a negative value. In that case, the
waveform is considered nonlinear.
The set_nonlinear_waveform command specifies the type of transition waveform
modeling to use at specified nets in the design.
The -mode option specifies one of four waveform handling modes: fast, detect_only,
efficient, or accurate (the default):
• The fast mode uses the simple linear model unconditionally. This mode is the fastest,
but it can be inaccurate where the actual transition waveforms are significantly nonlinear.
• The detect_only mode also uses the simple linear model. However, NanoTime
smoothes the waveform and marks the nets where the slope ratio exceeds the threshold.
The nets that have been marked can be found by using the report_net command or by
checking the is_nonlinear net attribute.
• The efficient mode smoothes the waveform and retains the nonlinear model where
the slope ratio threshold is exceeded, and uses the linear waveform otherwise. This
mode is recommended for initial analysis of new designs.
• The accurate mode saves the original transition waveform at the net, ensuring the
highest possible accuracy, at the cost of more runtime. The -threshold option has no
effect for this mode.
The comparison threshold can be set with the -threshold option to any value from 1.0 to
10000. The lower the threshold, the more likely it is that a waveform is considered nonlinear.
A value of 1.0 effectively forces all waveforms to be considered nonlinear. A large value like
1000 causes most waveforms to be considered smooth. In the absence of this option, the
threshold is determined by the nonlinear_waveform_detection_ratio variable, which is
set to 5.0 by default.
When NanoTime saves the nonlinear transition waveform, it uses the number of data points
specified by the -samples option of the set_nonlinear_waveform command. If the
-samples option is not used in the command, the number of samples is determined by the
nonlinear_waveform_samples variable, which is set to 10 by default. More samples give
better accuracy at the cost of memory and runtime.
The transition simulation mode information is stored in three attributes associated with the
net: nonlinear_mode, has_waveform, and is_nonlinear. The nonlinear_mode attribute
is a string indicating the transition simulation mode for the net: fast, detect_only,
efficient, or accurate. The has_waveform attribute is true when the nonlinear
waveform data points are saved for the net, which happens during path tracing when the
specified conditions are met. The is_nonlinear attribute is set to true when NanoTime
determines that the difference between the original and linear waveforms exceeds the
threshold. This also happens during path tracing.
You can get information about nets by checking the attributes with the get_attribute
command, or you can use the report_net command. In a report generated by the
report_net command, the letter w in the Attrs column indicates that the has_waveform
attribute is true, and the letter n indicates that the is_nonlinear attribute is true.
trigger
A OUT
E G
F H
B C D
However, some types of circuits can have a larger number of side inputs, such as the carry
chain circuit in Figure 10-23. If input A is the trigger, inputs B through T are side inputs—19
of them in the same channel-connected block. A sidebranch exploration effort level of 1 is
necessary to analyze the circuit as shown. In fact, the core unit of the carry chain might be
replicated many more times, resulting in an even larger number of side inputs for this circuit.
You must consider whether analyzing all of the side inputs offers enough benefit to outweigh
the cost of additional runtime.
Figure 10-23 Carry Chain Circuit
trigger
B A M R
D C G I K N P S
E F H J L O Q T
After path tracing is complete, you can use the write_spice command to write a SPICE
input file for a specific timing path to see which transistors are included in the simulation.
(a) (b)
Cm
in out in out
Cm1 Cm2
NanoTime models side load or fanout transistors as capacitive loads by default. However,
because of the capacitive coupling from transistor output to input, the gate capacitance of a
load transistor is not constant but is a function of the drain (or source) to gate capacitance
and the signal transition time.
For a more conservative analysis, set the sim_miller_use_active_load variable to true
(the default is false) to represent a side load circuit as an equivalent inverter with a single
Miller capacitance Cm, as shown in Figure 10-25. The Miller capacitance Cm is calculated
individually for each side load circuit.
The active load outputs are set to switch in the opposite direction of the trigger net to achieve
a worst-case condition.
Figure 10-25 Miller Effect for Side Loads
logic
Cload Cm
Applying active Miller loads might be too pessimistic for some situations. For example, in a
multiplexer fanout, the selected output is supposed to switch in the same direction as the
trigger net, which is different from the default assumption of opposite-direction switching.
You can reduce this pessimism for transmission gates in multiplexers by setting the
sim_miller_direction_check variable to true. For other transmission gates, use the
-check_miller_direction option of the mark_net command. The Miller effect variables
do not have an effect unless the sim_miller_use_active_load variable is set to true.
The sim_miller_use_active_load_min variable is false by default. Set it to true to
enable full Miller effect analysis on side loads on minimum delay paths.
When the sim_miller_use_active_load variable is set to true, all fanout transistors are
considered to be active load devices. To improve runtime, limit the number of active Miller
devices by setting the sim_miller_active_load_enable_fanout_limit variable to true
(its default is false). In this case, the number of active loads is limited to the number
specified by the sim_miller_active_load_fanout_limit variable.
For best accuracy for typical designs, set the sim_miller_use_active_load,
sim_miller_use_active_load_min and sim_miller_direction_check variables to
true. Due to the impact on runtime, you might want to use these settings only for final
signoff runs.
If you enable Miller capacitance analysis, a SPICE deck generated by using the
write_spice command includes the additional active devices needed to replicate the
NanoTime analysis.
The predriver is a fast and simple model that provides a way of modifying the waveform
propagated through a channel-connected block to more accurately reflect the waveform
shape. The mix ratio depends on the driver circuit outside the block, the length of the timing
path, the edge rate, the voltage at the input, and other connected devices. You must
determine an appropriate mix ratio for your design by comparing the waveform generated by
a NanoTime SPICE deck to an actual waveform from the netlist SPICE simulation. A mix
ratio of 0.5 is suitable for most conditions.
Controlling Runtime
The path tracing operation is the most time-consuming step in the NanoTime flow. During
path tracing, the tool breaks the design in discrete units, analyzes the timing behavior of the
individual units, and combines the units to determine the delays along specific paths. The
paths with the most critical timing are saved into the results database.
Many factors affect the overall runtime for a specific design. The usage of NanoTime
commands and options has a direct effect on runtime. In addition, certain design styles can
cause longer runtime.
This section describes some of the ways that you can control runtime. Keep in mind that
runtime and accuracy often present tradeoff decisions. You must consider your
requirements for both runtime and accuracy when setting up the analysis. See Controlling
Accuracy for more information about settings that affect accuracy.
1 1
X1 X2
During path tracing, NanoTime searches for paths through channel-connected blocks by
finding on-chains (devices in series that are connected to ground or Vdd) that drive an
output signal low or high. By default, the tool traces paths through every transistor in an
on-chain and through every on-chain at a CCB output.
Searching through duplicate on-chains adds runtime without providing much benefit
because parallel structures typically have similar delays.
You can use the –dont_search_thru_channel option of the mark_instance command to
block path searching through redundant on-chain arcs. This strategy is useful when you
know that certain on-chains are not relevant to the overall circuit timing. For example, the
logic state of an on-chain might be fixed if one or more transistor inputs are controlled by
set_case_analysis commands.
Figure 10-28 shows the result of using the following command on the example circuit:
mark_instance -dont_search_thru_channel X1
As a result, the timing arcs marked in green in Figure 10-28 are not included in path
searching, reducing runtime.
Figure 10-28 Manually Blocking Path Tracing
X1 X2
By default, NanoTime saves only the worst-case path from each startpoint to each endpoint.
You can choose to save more paths at a cost of increased runtime and memory usage. The
–keep_paths_within option of the trace_paths command allows you to specify a time
value (relative to the worst path) within which all paths are kept.
For example, if you use the following command, NanoTime keeps all paths that have a slack
within 0.2 time units of the worst path for each startpoint-endpoint pair:
trace_paths -keep_paths_within 0.2
Knowledge of your design is very important. For example, Figure 10-29 shows a
reconvergent circuit that has many possible paths from the inputs to the output. With
standard path pruning, NanoTime keeps only the most critical path through the circuit. If you
use the –keep_paths_within option, the tool keeps more paths. In most cases, the delays
through the alternate paths tend to be different enough from each other that the increase in
runtime is manageable, depending on the time value and the nature of the design.
However, Figure 10-30 shows a type of delay line circuit that poses a bigger problem. This
chain of inverters includes parallel pullup and pulldown devices in every stage. The delay
through a single stage is controlled by the number of pullup or pulldown devices that are
turned on (larger on-current leads to faster transition time).
By default, NanoTime creates a timing arc through every one of the parallel transistors,
resulting in many possible combinations for a timing path from input to output. The additional
runtime required to analyze these paths provides little or no accuracy benefit, because the
delays through the parallel paths are likely to be very nearly the same.
Figure 10-30 Duplicated Logic
A0 B0 AN BN
IN OUT
A0 B0 AN BN
It is impossible to find a time value for the –keep_paths_within option that keeps the total
number of paths to a reasonable number. Use the –ignore_keep_within option of the
mark_net command to mark all of the output nets of the inverter stages. In this case,
NanoTime analyzes the most critical path through the chain and prunes all other paths
regardless of the options used with the trace_paths and extract_model commands.
11-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
This command generates the SPICE deck for the most critical maximum path to the file
[Link]. If multiple spice paths result from the get_timing_paths command, a numerical
suffix is appended to the output file name. For example, if the command was specified with
-max_paths 3 instead of -max_paths 1, there would be three output SPICE decks: [Link],
out_00001.sp, and out_00002.sp.
The get_timing_paths command can specify paths using the path_id index number:
nt_shell> write_spice -output [Link] [get_timing_paths -path_id 18394]
The get_timing_paths command also has -rise, -fall, -from, -through, and -to
options, which allow you to specify specific paths from the path database. For example,
nt_shell> write_spice -output [Link] [get_timing_paths -max \
rise_from clk1 -fall_through [Link] -to out1]
• If the path includes a dynamic delay simulation stage, the resulting SPICE deck includes
the dynamic delay simulation stage, but there are cases that produce different delays
from those reported by NanoTime. For instance, if vectors are specified with a negative
offset, the write_spice command aligns that input with the trigger input.
If the answer to one of these questions explains the excessive delay, you can determine the
proper way to correct the result. Possible solutions include identifying a missing topology
marking or logic constraint and specifying a dynamic delay simulation stage to combine
multiple stages.
X1 X2 X3
Arc0 Subcircuit
The SPICE circuit for this path is shown as individual subcircuits for each stage of the path,
corresponding to the stages shown in the path report: a subcircuit from IN to IN, a subcircuit
from IN to INB, and so on. There are situations in which NanoTime combines two reported
stages into a single stage in the SPICE deck; this can occur with feedback or other situations
that require multiple stages to be simulated together for accurate simulation results.
Example 11-2 shows the netlist of the Arc0 subcircuit, which consists of the first stage from
the port IN to the transistor pins.
Example 11-2 Netlist of the Arc0 Subcircuit
.SUBCKT Path2_Arc0 IN@n1 IN@n3 IN@n2
* IN@n1 input conn_to_trigger
* IN@n3 output
* IN@n2 output conn_to_trigger
* Port IN IN@n1 PIN_IN
CIN@c1 IN@n1 0 0.286097FF
CIN@c2 IN@n2 0 4.37358FF
CIN@c3 IN@n3 0 2.64932FF
RIN@r1 IN@n1 IN@n2 161.021
RIN@r2 IN@n2 IN@n3 404.325
.IC V(IN@n1)=1.2
.IC V(IN@n2)=1.2
.ENDS Path2_Arc0
This initial stage is composed solely of parasitics, connecting the port IN@n1 to outputs
IN@n2 and IN@n3. (NanoTime names nets within a parasitic group with netname@nn. The
port name being used is IN@n1 because of RC reduction.) The comments within the Arc0
subcircuit indicate that IN@n1 is the trigger input, and the IN@n3 output is the trigger to the
next stage. As the path from IN falls, net IN@n3 is the output that drives the PMOS
transistor in the next stage. Initial condition statements are listed at the end of the subcircuit
statement to set the output nets to 1.2 V, the value of VDD, as the input transitions from high
to low.
The parasitics included in this netlist are derived from the RC reduction feature in
NanoTime. To preserve all of the parasitics in this file, turn off the RC reduction by setting
the value of the rc_reduction_max_net_delta_delay variable to 0.
Arc1 Subcircuit
The second subcircuit in this path, Arc1, exists between IN and INB and includes the
parasitics on INB. The netlist for Arc1 is shown in Example 11-3.
Example 11-3 Netlist of the Arc1 Subcircuit
.SUBCKT Path2_Arc1 IN@n3 IN@n2 INB@n1 INB@n2
* IN@n3 input
* IN@n2 input conn_to_trigger
* INB@n1 output
* INB@n2 output conn_to_trigger
MNX1_Mn0 INB@n3 IN@n3 Path2_Arc1_gnd Path2_Arc1_gnd nch W=4u L=0.13u
AS=1.08p
AD=1.08p PS=8.54u PD=8.54u NRS=0.069 NRD=0.045
MPX1_Mp0 Path2_Arc1_vdd IN@n2 INB@n4 Path2_Arc1_vdd pch W=6u L=0.13u
AS=1.62p
AD=1.62p PS=12.54u PD=12.54u NRS=0.069 NRD=0.045
CINB@c1 INB@n1 0 4.57716FF
CINB@c2 INB@n2 0 8.79222FF
CINB@c3 INB@n3 0 3.0413FF
CINB@c4 INB@n4 0 0.502325FF
RINB@r1 INB@n1 INB@n2 226.034
RINB@r2 INB@n2 INB@n3 395.338
RINB@r3 INB@n3 INB@n4 113.455
.IC V(IN@n2)=1.2
.IC V(INB@n2)=0
.IC V(INB@n3)=0
.IC V(INB@n4)=0
V1 Path2_Arc1_gnd 0 DC=0
V2 Path2_Arc1_vdd 0 DC=1.2
.ENDS Path2_Arc1
This subcircuit includes MNX1 and MPX1, two transistors that form the inverter, along with
the parasitics and initial conditions. Notice that, in addition to the trigger input IN@n2,
IN@n3 is also included as a subcircuit pin for the complete simulation of the inverter. The
last section in this subcircuit netlist contains the voltage settings for VDD and GND; they are
defined separately in each stage of the output as follows:
V1 Path2_Arc1_gnd 0 DC=0
V2 Path2_Arc1_vdd 0 DC=1.2
Top-Level Netlist
The top-level netlist, shown in Example 11-4, instantiates all the subcircuits that were
described previously.
Example 11-4 Top-Level Netlist
X0 IN@n1 IN@n3 IN@n2 Path2_Arc0
X1 IN@n3 IN@n2 INB@n1 INB@n2 Path2_Arc1
X2 INB@n1 INB@n2 OUTB@n4 OUTB@n3 Path2_Arc2
X3 OUT@n1 OUTB@n4 OUTB@n3 Path2_Arc3
The input stimulus follows after the TEMP statement. The input slope is based on the upper
and lower RC slew thresholds and the fall and rise values; the PWL statement indicates a
piecewise linear input that uses the slope extrapolated to a 100 percent transition. In this
case, the 0.08-ns slope is specified with the default 10-90 slew thresholds, which
extrapolates to a 0-100 slew of 1.2 ns.
The TRAN statement provides enough margin before the end time of the simulation to allow
the IN to OUT delay to complete its transition. The PRINT statement includes the signals
being measured. By default, three measurements are made: the path delay between the
midpoints of the input and output, the transition time of the input signal, and the transition
time of the output signal. For the path delay measurement, the VAL settings are one half of
the VDD value, or 0.6 V. For the transition measurements, the VAL settings are the upper
and lower RC slew thresholds and the fall and rise values used in the run, in this instance
10 percent to 90 percent, or 0.12 V to 1.08 V.
Advanced Features
The circuit in Figure 11-2 is used to demonstrate options of the write_spice command.
Figure 11-2 Circuit Example
A int0 int0b
selb X6 OUT2
IN1 X1 X2 X4
IN2
B Path1_Arc4
sel
X3 X5
in5b
IN5 X7 X1
OUT
in6b
IN6 X8
X9 (MUX2)
Path Selected
The following write_spice command generates the output SPICE deck of the circuit in
Figure 11-2:
nt_shell> write_spice -output [Link] [get_timing_paths -max \
-rise_from A -fall_through selb -to OUT]
Portions of the resulting SPICE deck are shown in subsequent sections to demonstrate how
inactive devices are included, as well as an example of a voltage-controlled voltage source.
* Off transistors
MPX1_Mp1 Path1_Arc1_vdd Path1_Arc1_vdd int0 Path1_Arc1_vdd pch W=6u
L=0.13u AS=1.62p AD=1.62p PS=12.54u PD=12.54u NRS=0.069 NRD=0.045
MPX1_Mp2 Path1_Arc1_vdd Path1_Arc1_vdd int0 Path1_Arc1_vdd pch W=6u
L=0.13u AS=1.62p AD=1.62p PS=12.54u PD=12.54u NRS=0.069 NRD=0.045
MNX5_Mn0 0 int0 0 Path1_Arc1_gnd nch W=2u L=0.13u AS=0.54p AD=0.54p
PS=4.54u PD=4.54u NRS=0.091 NRD=0.157
CX5_Mn0_miller_load int0 0 0.366441FF
MPX5_Mp0 Path1_Arc1_vdd int0 Path1_Arc1_vdd Path1_Arc1_vdd pch W=6u
L=0.13u AS=1.62p AD=1.62p PS=12.54u PD=12.54u NRS=0.069 NRD=0.045
CX5_Mp0_miller_load int0 0 0.796727FF
.IC V(A)=0
V1 IN1 0 DC=1.2
V2 IN2 0 DC=1.2
.IC V(X1_n1)=1.08929
.IC V(X1_n2)=1.08929
V3 Path1_Arc1_gnd 0 DC=0
.IC V(int0)=1.2
V4 Path1_Arc1_vdd 0 DC=1.2
.ENDS Path1_Arc1
Unlike the simple three-inverter circuit in Figure 11-1 where all transistors were included,
this subcircuit includes only active transistors and transistors with a load affecting the path
delay. For this three-input NAND, all NMOS transistors are included, with the other inputs
IN1 and IN2 set to the VDD of 1.2 to allow the rising signal A to cause the output to transition
to zero.
Only the PMOS transistor driven by input A is included as an active device; the other two
PMOS transistors are inactive and listed in the “Off transistors” section of the netlist:
* Off transistors
MPX1_Mp1 Path1_Arc1_vdd Path1_Arc1_vdd int0 Path1_Arc1_vdd pch W=6u
L=0.13u AS=1.62p AD=1.62p PS=12.54u PD=12.54u NRS=0.069 NRD=0.045
MPX1_Mp2 Path1_Arc1_vdd Path1_Arc1_vdd int0 Path1_Arc1_vdd pch W=6u
L=0.13u AS=1.62p AD=1.62p PS=12.54u PD=12.54u NRS=0.069 NRD=0.045
The gates of these inactive transistors are not driven by the actual inputs but by the VDD
supply, as they do not switch or provide current in the simulation of this arc.
Two inactive transistors that are driven by int0 in NOR gate X5 are also included in this
subcircuit:
MNX5_Mn0 0 int0 0 Path1_Arc1_gnd nch W=2u L=0.13u AS=0.54p AD=0.54p
PS=4.54u PD=4.54u NRS=0.091 NRD=0.157
CX5_Mn0_miller_load int0 0 0.366441FF
These transistors are included as simple load devices with the drain and source of each
connected to VDD or GND. An extra capacitor is included with each transistor; NanoTime
adds this extra capacitor to account for the Miller effect on these transistors. The Miller effect
is the effective change in capacitance between transistor terminals that occurs with a
change in voltage across those terminals.
If the timing analysis is run using the active Miller mode, which is enabled by setting the
sim_miller_use_active_load variable to true, these devices are included as active
transistors with the following statements:
* element X5_Mn0 is load
MNX5_Mn0 X5_Zn int0 Path1_Arc1_gnd Path1_Arc1_gnd nch W=2u L=0.13u
AS=0.54p AD=0.54p PS=4.54u PD=4.54u NRS=0.091 NRD=0.157
These active devices do not have Miller capacitors added to their outputs; instead, the active
transistors have the following loads:
.IC V(X5_Zn)=0
CX5_Zn X5_Zn 0 6.4FF
.IC V(X5_n1)=1.2
CX5_n1 X5_n1 0 6.4FF
Finally, in the voltage section of this arc, there are the initial condition settings for the internal
nodes of the NAND gate:
.IC V(X1_n1)=1.08929
.IC V(X1_n2)=1.08929
These voltages are set to a logical 1, but cannot reach the full value of VDD because of the
threshold drop of the NMOS transistors. You can change these calculated values to
increase or decrease pessimism by using the set_initial_condition_adjustment
command.
The transistors are the four transistors in MUX2 and the two driving inverters from inputs IN5
and IN6. When the selb signal switches, the transmission gate requires the sel signal to
switch in the opposite direction. The SPICE deck accomplishes this by including a
voltage-controlled voltage source:
E4 sel 0 selb Path1_Arc4_vdd -1.0
If the transmission gate inputs are separated by a simple inverter, the inverter is included in
the SPICE deck and the voltage-controlled voltage source is not necessary. However, since
the inversion is formed with more complex logic in this case, the voltage-controlled voltage
source is needed. The transmission gate is recognized by NanoTime because the
topo_tgate_mark_all_pairs variable is set to true by default.
This produces the SPICE deck file [Link], which begins with the following lines:
* Begin user SPICE header.
.lib './model.013' SS
* End user SPICE header.
* PATH 2
For example,
.subckt inv2 A Z
xMn0 Z A gnd gnd nch_mac W='dwn * 2' L=dl
xMp0 vdd A Z vdd pch_mac W='dwp * 2' L=dl
.ends
Each transistor can be annotated through a parasitic device parameter file (DPF) file with
parameters such as SA, SA1, and SB. NanoTime creates a transistor model for each unique
set of parameters it finds on a transistor. To generate a SPICE deck including these
transistor model cards, use the write_spice command with the insert_model_cards
option:
nt_shell> write_spice -output [Link] \
-insert_model_cards [get_timing_paths -max -max_paths 1]
A very large SPICE deck is generated when there is a large number of model cards.
However, there are cases which require the use of the -insert_model_cards option
instead of the -use_wrapper_subckt option:
• If parasitics are included in the macro model, the insert_model_cards option must be
used. In this case, the wrapper subcircuit parasitics flow should be enabled by setting the
link_enable_wrapper_subckt_parasitics variable to true.
This command produces a SPICE deck with instances, which uses the basic wrapper model
instead of transistors. A portion of this SPICE deck appears in Example 11-8.
Example 11-8 SPICE Deck Generated by the -use_wrapper_subckt Option
.SUBCKT Path2_Arc1 a[0] n1
* a[0] input conn_to_trigger
* n1 output conn_to_trigger
Xxi1_xmn0_main n1 a[0] Path2_Arc1_gnd Path2_Arc1_gnd nch_mac w=8e-07
l=4e-08
Xxi1_xmp0_main Path2_Arc1_vdd a[0] n1 Path2_Arc1_vdd pch_mac w=1.2e-06
l=4e-08
.IC V(a[0])=1.2
V1 Path2_Arc1_gnd 0 DC=0
.IC V(n1)=0
V2 Path2_Arc1_vdd 0 DC=1.2
.ENDS Path2_Arc1
The resulting SPICE deck contains the measure statements shown in Example 11-9.
Example 11-9 Measure Statements Added by the -measure_subckt_delays Option
* Path measurements.
.MEASURE TRAN path_delay TRIG v(IN@n1) VAL=0.6 CROSS=1 TARG v(OUT@n1)
VAL=0.6
CROSS=1
.MEASURE TRAN path_input_transition TRIG v(IN@n1) VAL=1.08 CROSS=1 TARG
v(IN@n1) VAL=0.12 CROSS=1
.MEASURE TRAN path_output_transition TRIG v(OUT@n1) VAL=0.12 CROSS=1 TARG
v(OUT@n1) VAL=1.08 CROSS=1
* Subckt measurements.
.MEASURE TRAN Path2_Arc0_delay TRIG v(IN@n1) VAL=0.6 CROSS=1 TARG
v(IN@n2)
VAL=0.6 CROSS=1
.MEASURE TRAN Path2_Arc1_delay TRIG v(IN@n2) VAL=0.6 CROSS=1 TARG
v(INB@n2)
VAL=0.6 CROSS=1
.MEASURE TRAN Path2_Arc2_delay TRIG v(INB@n2) VAL=0.6 CROSS=1 TARG
v(OUTB@n3)
VAL=0.6 CROSS=1
.MEASURE TRAN Path2_Arc3_delay TRIG v(OUTB@n3) VAL=0.6 CROSS=1 TARG
v(OUT@n1)
VAL=0.6 CROSS=1
The individual subcircuit measurements include Path2_Arc0 from IN@n1 to IN@n2 and
Path2_Arc1 from IN@n2 to INB@n2. For measurements of the transition times of the
individual arc outputs, use the following command:
nt_shell> write_spice -output [Link] -measure_subckt_transitions \
[get_timing_paths -max -max_paths 1]
The resulting SPICE deck contains the measure statements shown in Example 11-10.
Example 11-10 Measure Statements Added by the -measure_subckt_transitions Option
* Subckt measurements.
.MEASURE TRAN Path2_Arc0_transition TRIG v(IN@n2) VAL=1.08 CROSS=1 TARG
v(IN@n2) VAL=0.12 CROSS=1
.MEASURE TRAN Path2_Arc1_transition TRIG v(INB@n2) VAL=0.12 CROSS=1 TARG
v(INB@n2) VAL=1.08 CROSS=1
.MEASURE TRAN Path2_Arc2_transition TRIG v(OUTB@n3) VAL=1.08 CROSS=1 TARG
v(OUTB@n3) VAL=0.12 CROSS=1
.MEASURE TRAN Path2_Arc3_transition TRIG v(OUT@n1) VAL=0.12 CROSS=1 TARG
v(OUT@n1) VAL=1.08 CROSS=1
The transitions are measured on the arc outputs, IN@n2, INB@n2, OUTB@n3, and
OUT@n1.
data1n
data1 out1
data2n
data2 out2
data3n
data3 out3
This circuit has three sets of inverter pairs, with 5.1 fF capacitors coupled between data1n
and data2n and between data1n and data3n. In the path from data1 to out1, the data1n net
is a victim net while the data2n and data3n nets are aggressor nets. The relative input timing
has been set such that only the data2n net is a valid aggressor.
If signal integrity analysis is enabled, the write_spice command generates a SPICE deck
that includes the active aggressor inputs and capacitors by default. You can create a SPICE
deck without the aggressor information by using the -no_si_aggressors option of the
write_spice command.
The following command creates a SPICE deck that includes aggressor information for one
of the paths in Figure 11-3:
nt_shell> write_spice -output si_delay \
[get_timing_paths -max -from data1 -to out1]
The resulting SPICE deck lists the timing of each aggressor signal in two parameters, timing
and slew, in the “Alignment for SUBCKT” section of the SPICE deck, as shown in
Example 11-11.
The next section of the SPICE deck contains the netlist for the Path2_Arc1 subcircuit from
data1 to data1n, as shown in Example 11-12.
Example 11-12 Netlist for the Path2_Arc1 Subcircuit
.SUBCKT Path2_Arc1 data1 data1n@n1
* data1 input conn_to_trigger
* data1n@n1 output conn_to_trigger
MNX1_Mn0 data1n@n1 data1 Path2_Arc1_gnd Path2_Arc1_gnd nch W=3u L=0.13u
AS=0.81p AD=0.81p PS=6.54u PD=6.54u NRS=0.069 NRD=0.045
MPX1_Mp0 Path2_Arc1_vdd data1 data1n@n1 Path2_Arc1_vdd pch W=4u L=0.13u
AS=1.08p AD=1.08p PS=8.54u PD=8.54u NRS=0.069 NRD=0.045
* victim net data1n
Cdata1n@c1 data1n@n1 0 1.007FF
* victim net data1n aggressor net data2n
Cdata1n_data2n@c1 data1n_data2n@n1 0 1.007FF
* victim net data1n aggressor net data2n
Cdata1n_data2n@cc1 data1n@n1 data1n_data2n@n1 5.1FF
* victim net data1n aggressor net data2n
Vdata1n_data2n@v1 data1n_data2n@n1 0 PWL(0ns 1.2
slew_Path2_Arc1_data1n_data2n_in_ns 0 TD =
alignment_Path2_Arc1_data1n_data2n_in_ns )
* victim net data1n aggressor net data3n
Cdata1n_data3n@c1 data1n@n1 0 5.1FF
.IC V(data1)=1.2
.IC V(data1n@n1)=0
V1 Path2_Arc1_gnd 0 DC=0
V2 Path2_Arc1_vdd 0 DC=1.2
.ENDS Path2_Arc1
The capacitors are included with comment cards. Cdata1n@c1 and Cdata1n_data2n@c1
are the parasitic loading capacitors on the victim and aggressor nets. The coupling capacitor
is Cdata1n_data2n@cc1. The aggressor input is defined by Vdata1n_data2n@v1 and uses
the timing and slew parameters given in the “Alignment for SUBCKT” section.
Since the timing window of data3n does not overlap that of data1n, data3n is not an effective
aggressor of data1n, and the coupling capacitor Cdata1n_data3n@c1 is included as a load
capacitor to GND for data1n.
When using this SPICE deck to compare timing with HSPICE, you might need to adjust the
alignment numbers. The HSPICE delay for the victim net input might be different from the
NanoTime calculated delay, and the effect of the aggressor might be reduced unless the
timing is adjusted to align with the victim.
Using the circuit from Figure 11-3, the following command can be executed:
nt_shell> write_spice -output -si_noise above_high data1n
This SPICE deck contains a single subcircuit with the transistors connected to net data1n.
The capacitors are labeled with comment cards: victim net, victim net, and aggressor net.
There are also voltage waveforms for the aggressor signals, for example the data2n
aggressor:
* victim net data1n aggressor net data2n
Vdata1n_data2n data1n_data2n 0 PWL(0ns 0 0.0499405n 1.2 TD = 0.00499405n)
Because the input is held at a steady state, the piecewise linear timing points in the PWL
argument do not need adjustment.
Two measure statements are included:
* Noise measurements.
.MEAS TRAN X0.data1n@n1_max MAX V(X0.data1n@n1) FROM 0.0ns TO 0.149822ns
.MEAS TRAN X0.data1n@n1_noise_above_low PARAM='X0.data1n@n1_max'
These measure statements specify the measurement of the maximum voltage height of the
noise bump. The measurement is divided into two measures for the case when the noise
bump is from a nonzero supply. If the write_spice command had included the -si_noise
below_high option, the following measure statements would be included:
* Noise measurements.
.MEAS TRAN X0.data1n@n1_min MIN V(X0.data1n@n1) FROM 0.0ns TO 0.149822ns
.MEAS TRAN X0.data1n@n1_noise_below_high PARAM='1.2 - X0.data1n@n1_min'
The initial measure statement finds the minimum value of the voltage on net data1n, and the
second subtracts that from the 1.2-V VDD supply to get the height of the noise bump.
Note:
If the -si_noise_shape option of the write_spice command is used, a SPICE deck
that specifies a transient simulation with a time span sufficiently long to capture the entire
width of the simulated noise bump is created. Additional measure statements are
produced. These statements are needed to integrate the simulated noise bump and
obtain values for both the width and time-to-peak parameters of the noise bump.
The -si_noise_shape option allows a waveform file to be produced during simulation.
Additional measure statements needed for the width and time-to-peak parameters
appear as comments in the SPICE deck, and they can be placed into a separate
measurement file by using hspice -i waveform_file -meas measurement_file.
Currently the SPICE deck for injected noise has a single stage. The stimuli switch the
aggressors that are coupled to the victim net, and the trigger pin of the stage is quiet.
This SPICE deck is relevant only to the calculated injected noise and not to any
user-defined injected noise.
data4 out4n
out4
data1n out1n
data1 out1
data2n
data2 out2
data3n
data3 out3
When you perform signal integrity fanout noise analysis in addition to signal integrity noise
analysis, you can specify the inclusion of the fanout net in the SPICE deck. This is done by
using the -si_noise option and by specifying the original noise bump net in the
write_spice command.
To analyze the worst case noise bump on the noise victim net, data1n, you can use
above_low noise analysis with the -fanout option:
nt_shell> write_spice -output si_fanout -si_noise above_low \
-fanout data1n
The resulting SPICE deck, shown in Example 11-14, has two subcircuits. The first subcircuit
is for the data1n net as described previously in the initial signal integrity noise section. The
second subcircuit is for the fanout net, out1n, which was selected instead of net out4n
because it has a larger noise bump.
The input to this subcircuit is data1n@n1, the net specified by the write_spice command.
This subcircuit includes the two transistors of the inverter from data1n to out1n as well as the
load transistors on out1n, included as inactive transistors along with their Miller capacitors.
The SPICE fanout noise deck includes the following measure statements:
Example 11-15 Measure Statements for Signal Integrity Fanout Noise Analysis
* Noise measurements.
.MEAS TRAN X0.data1n@n1_max MAX V(X0.data1n@n1) FROM 0.0ns TO 0.191585ns
.MEAS TRAN X0.data1n@n1_noise_above_low PARAM='X0.data1n@n1_max'
.MEAS TRAN X1.out1n_min MIN V(X1.out1n) FROM 0.0ns TO 0.191585ns
.MEAS TRAN X1.out1n_noise_below_high PARAM='1.2 - X1.out1n_min'
In addition to the two measure statements for net data1n, there are also two similar measure
statements for the fanout net out1n. Notice that because net out1n is inverted from net
data1n, the type of noise analysis is below_high instead of above_low.
To get a SPICE fanout noise deck of a net other than the worst case net, you can add the
-fanout_net option to the write_spice command as follows:
nt_shell> write_spice -output si_fanout -si_noise above_low -fanout \
-fanout_net data1n
This command includes the NOR gate that is connected to out4n in the SPICE deck instead
of the inverter that is connected to out1n. The SPICE deck is shown in Example 11-16.
Note:
The SPICE deck for fanout noise currently has two stages. The first stage is the injected
noise stage and the second stage is the fanout noise stage. The trigger pin of the fanout
noise stage has an injected noise bump from the previous stage. Regardless of whether
the -si_noise_shape option is specified, the SPICE deck for fanout noise uses an
independent voltage source for its trigger when user-defined injected noise is present at
the trigger pin. The independent voltage source represents the user-defined injected
noise. If the -add_noise option of the set_input_noise command has been specified
at the trigger pin, a dependent voltage source (representing the simulated injected noise
bump) is also added in series with the independent voltage source. The dependent
voltage source replicates the simulated noise bump from the injected noise portion of the
SPICE deck.
Silicon-on-Insulator Transistors
Using the -soi_comments option adds information about the state of each
silicon-on-insulator (SOI) transistor in the output deck. An example is as follows:
nt_shell> write_spice -output [Link] -soi_comments \
[get_timing_paths max max_paths 1]
The resulting SPICE deck includes comments for each active transistor along with the initial
condition of the bulk supply. Comments are also included for each inactive transistor:
MNXaddsub_Xi2_Mn0 Xaddsub_subi2@n9 sub@n10 Path28216_Arc1_gnd
Path28216_Arc1_gnd bulk_Xaddsub_Xi2_Mn0 nch W=4u L=0.13u AS=0p AD=0p
PS=4u PD=4u NRS=0.069 NRD=0.045
* soi transistor: state=1r0 body_voltage_bound=upper rail_reference=2.5
supply=1.2 is_user_specified_parameter=false
device_type=floating_rail_tied
.IC V(bulk_Xaddsub_Xi2_Mn0)=0.384
* Off transistors
MNXaddsub_Xib10_Mn0 0 Xaddsub_subi2@n7 0 Path28216_Arc1_gnd
bulk_Xaddsub_Xib10_Mn0 nch W=4u L=0.13u AS=0p AD=0p PS=4u PD=4u NRS=0.069
NRD=0.045
* soi off transistor: state=0r0 body_voltage_bound=average
rail_reference=2.5 supply=1.2 is_user_defined_parameter=false
device_type=floating_rail_tied
.IC V(bulk_Xaddsub_Xib10_Mn0)=0.048
CXaddsub_Xib10_Mn0_miller_load Xaddsub_subi2@n7 0 0.631953FF
12-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
For special purposes, you can modify the model to customize it for the environment in which
it will be used. Table 12-1 lists some of the options available and provides links to further
information in this user guide.
This chapter and the next chapter cover many timing model topics. For additional
information about the options of the extract_model command, see the command man
page.
Timing representation Nonlinear delay model (X) Using Nonlinear Delay Timing Models
Composite current source Using Composite Current Source Timing
models Models
Creating CCS Timing Models
Table 12-2 lists some of the benefits and limitations of different types of timing models.
Table 12-2 Differences Between Extracted Timing Model Types
Nontransparent Smaller model file size (no MIL Might not capture the worst
and MOL structures) setup constraint
Captures the worst clock to out Might miss critical paths
delay (especially if any transparent
paths are critical paths)
Might have false violations
When signal integrity analysis is enabled for a context-independent model, infinite timing
windows are used from the input ports to the input boundary latches. For a
context-dependent model, the SI timing windows use the specified input arrival times.
NanoTime achieves input arrival independence by ignoring the set_input_delay
command on the data inputs and using instead a delay of 1000 ns for maximum delay paths
and 0 ns for minimum delay paths. Figure 12-1 illustrates the effect for a maximum delay
path through a transparent latch.
Figure 12-1 Effect of the extract_model -context_dependent Command
L1 (a) IN
IN
D Q L1/D
L1/Q
C
CLK
CLK
(b) IN
L1/D
1000 ns
L1/Q
CLK
Part (a) of the figure shows normal latch input timing. The signal at the pin D switches later
than the input signal IN by the amount of the user-specified input delay. When clock CLK
switches, the signal propagates from D to Q. During path tracing, the latch error recovery
feature allows NanoTime to continue path tracing even in the presence of a setup violation
by adjusting the data arrival time to the zero-slack value.
Part (b) of Figure 12-1 illustrates how the latch error recovery feature is used during model
creation to maximize transparency and create a model that is independent of the input
arrival time. For a maximum delay path, the tool inserts an input delay of 1000 ns. The arrival
time at the latch is adjusted to the zero-slack value. This represents the worst possible input
arrival time. The path search continues until the path endpoint or a nontransparent timing
element is encountered. The model paths report shows the amount of timing adjustment.
cell (cell1)
cell attributes
pin (“pin1”)
pin attributes
timing ( )
timing attributes
...
timing ( )
...
pin (“pin2”)
...
timing ( )
...
cell (cell2)
...
NanoTime generates a timing model even if timing violations exist or other problems
arise during path tracing. If a problem is found, the path ID is marked with an asterisk (*).
• The closing comment contains the name of the arc.
The name of a timing arc is formed from the startpoint pin name followed by the endpoint
pin name and a descriptive suffix. The default separator is the underscore character; use
the model_name_separator_char variable to specify a different separator character.
Table 12-3 lists some commonly encountered model name suffixes. A suffix might also
include a number if multiple arcs would otherwise have the same name.
pin(“cin”) {
direction : input ;
clock : true ;
max_transition “ 0.640000 ;
capacitance : 1.141963 ;
rise_capacitance_range (1.141963, 1.141963) ;
fall_capacitance_range (1.141963, 1.141963) ;
} /* End of pin cin */
The tlatch element appears in the model file under its D input pin. The edge_type : rising
statement indicates that the latch is active high, that is, it opens with a rising clock edge. The
tdisable flag is always set to false to enable evaluation of the tlatch.
One MIL is created for every unique combination of input port, clock port, and capture clock
domain. The clock domains are the internal phases derived from the input clock. A MIL is
used to represent the following:
• The setup and hold timing of the data input relative to each associated clock domain
• The phasing of the first capturing device in the path from the data input
One MOL is created for every unique combination of output port, launch clock domain, and
clock port. A MOL is used to represent the following:
• The minimum or maximum delays from each applicable clock input and edge
• The transparency window of the transparent path
• The phasing of the last capturing device in the path to the data output
IN D Q OUT
CLK CK
latch
At a high level of hierarchy (in other words, to a circuit that uses the model), a timing model
for this latch circuit must contain the following timing arcs:
• A delay arc from CLK rising to OUT
• Setup and hold constraint arcs from CLK falling to IN
• A combinational arc from IN to OUT, dependent on the state of CLK
The timing model does not contain these arcs directly. Instead, the model contains building
block timing arcs, based on the tlatch element, that can be combined to yield the desired
high-level timing paths. For example, Figure 12-4 shows the model input latch (MIL), the
model output latch (MOL), and the timing arcs that are included in the transparent model for
the circuit in Figure 12-3.
For hierarchical analysis, the CLK to OUT timing path is composed of model arcs 6 and 10.
The IN to OUT path is composed of model arcs 5, 2, 8, and 9.
Figure 12-4 Arcs in the [Link] Example File
2 9
3
10
6
Table 12-4 shows the names of the arcs in the model, which are based on the pins at the arc
startpoint and endpoint. The pins of a MIL or MOL do not correspond directly to a pin in the
design. Instead, NanoTime uses a standardized naming convention for these pins.
The name of a MIL pin begins with mil_c, mil_d, or mil_q (always lowercase). The name is
extended by adding the name of the input port connected to the MIL, the name and edge of
the clock used for timing checks, and the name of the clock port from which the clock
[Link] D pin of the MIL in Figure 12-4 is therefore named mil_d_IN_CLK_F_CLK
(assuming that the relevant edge of the clock is the falling edge).
The default separator is the underscore character; use the model_name_separator_char
variable to specify a different separator character.
Names of MOL pins are similar. They start with mol_c_mol_d, or mol_q and use the name
of the output port connected to the MOL.
Table 12-4 Arc Names in the [Link] Model
5 IN mil_d IN_mil_d_IN_CLK_F_CLK_una
Constraint Arcs
Setup and hold constraints are represented in the model by constraint arcs between the C
and D pins of a MIL or MOL. In the constraint arc tables (rise_constraint and
fall_constraint), index_1 is the constrained pin input slope and index_2 is the related
pin input slope.
The following example shows the beginning part of the setup constraint arc for the MIL. The
timing section for this arc appears in the section that defines the MIL D pin (the constrained
pin). The related pin is the MIL C pin.
timing () {
related_pin : "mil_c_IN_CLK_F_CLK" ;
timing_type : setup_falling ;
/* comment : reference path 8, checked path 13,
reference path 7, checked path 15; */
rise_constraint( f_dtrans_ctrans ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.080000, 0.160000, 0.320000");
values ("0.002835, -0.015773, -0.040040",\
"0.017094, -0.001515, -0.025782",\
"0.035973, 0.017364, -0.006903");
rise_constraint( f_dtrans_ctrans ){
...
} /* end of arc mil_c_IN_CLK_F_CLK_mil_d_IN_CLK_F_CLK_stupf*/
The following example shows the beginning part of the setup constraint for the MOL. A
timing check is not necessary for modeling the MOL, but some simulation tools require that
the model contain a timing check at each latch. The MOL setup and hold arcs are set to a
scalar value such that the MIL D pin setup and hold arc falls before the MOL D pin arc.
pin(“mol_d_OUT_CLK_R_CLK”) {
...
timing () {
related_pin : "mol_c_OUT_CLK_R_CLK" ;
timing_type : setup_falling ;
/* comment : mol c->d transparency end setup,
rise path 14, fall path 16; */
rise_constraint( scalar ){
values ( "- 0.378071");
}
fall_constraint( scalar ){
values ( "- 0.412058");
}
Delay Arcs
A delay arc includes four two-dimensional tables, representing the rise delay (labeled
cell_rise), the rise transition time (rise_transition), the fall delay (cell_fall), and the
fall transition time (fall_transition). The indexes of the four tables are identical; index_1
is the transition time of the input net and index_2 is the load (capacitance) of the output net.
For example, the model for the timing arc from the MOL D pin to the OUT port (arc 9 in
Figure 12-4) begins as follows:
pin(“OUT”) {
...
timing () {
related_pin : "mol_d_OUT_CLK_R_CLK" ;
timing_type : combinational ;
timing_sense : positive_unate ;
/* comment : mol d->out max launch arc, path 14 (delta),
path 16 (delta); */
cell_rise( f_itrans_ocap ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.061393, 0.111393, 0.211393");
values ( "-0.006496, 0.021207, 0.076998",\
"0.007764, 0.035466, 0.091257",\
"0.026644, 0.054346, 0.110137");
}
rise_transition( f_itrans_ocap ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.061393, 0.111393, 0.211393");
values ( "0.074208, 0.134301, 0.254921",\
"0.074208, 0.134301, 0.254921",\
"0.074208, 0.134301, 0.254921");
}
...
} /* end of arc mol_d_OUT_CLK_R_CLK_OUT_una*/
Figure 12-5 shows a circuit with multiple MILs on the input. A similar circuit could be drawn
with multiple MOLs driving the output.
Figure 12-5 Multiple Input Latch Circuit
IN D Q
L3
CK
latch
D Q D Q OUT
L2 L4
CK CK
latch latch
D Q
L1
CLK CK
latch
In Figure 12-5, pin IN has three transparent paths to OUT going through latches L1, L2, and
L3. Latches L1 and L2 are clocked by the same edge of CLK, so they are represented by a
single MIL with the worst case timing. Because L3 is clocked on the other edge of CLK, it
requires a separate MIL. The OUT pin requires only a single MOL.
Figure 12-6 shows the arcs in the transparent ETM for the circuit shown in Figure 12-5. As
before, zero delay arcs are shown as a dashed line.
Figure 12-6 Arc Diagram
mil_c_IN_CLK_F_CLK mol_c_OUT_CLK_R_CLK
CLK C C
tlatch tlatch
MIL
D Q
C
tlatch
mil_c_IN_CLK_R_CLK
The arcs for the two tlatch objects (mil_c_IN_CLK_F_CLK and mol_c_OUT_CLK_R_CLK)
are the same as those for the single latch case even though the paths (through L1, L2, and
L4 in Figure 12-5) go through two latches instead of one. The additional arcs correspond to
the additional tlatch, mil_c_IN_CLK_R_CLK. These arcs provide a setup constraint arc from
the other edge of CLK to IN with its C to D arc and a portion of a second transparent path
from IN to OUT with its Q to the MOL D arc.
are in place at the time. In addition, the tool can save and report many types of information
about intermediate nodes.
By contrast, when you use the extract_model command, you have already optimized the
setup and fixed most (if not all) timing violations. The goal of path tracing in this phase is to
create an accurate boundary timing model for use in hierarchical analysis in the NanoTime
or PrimeTime tool. Typically, the extract_model command must enable the timing model
to be used in design environments with varying operating conditions.
Path tracing for model extraction differs from standard path tracing in the following ways:
• The default NanoTime model maximizes transparency by ignoring the
set_input_delay command specifications on the data inputs and using instead a delay
of 1000 ns. This creates a context-independent timing model that is valid for any data
arrival time.
• The tool discards internal latch-to-latch paths. Path searching invoked by the
extract_model command is concerned only with data paths that begin or end at input
or output ports.
• Paths through transparent topologies are checked against the clock for the boundary
transparent timing topology (either the first transparent timing topology encountered
when the tool searches from an input or the last transparent timing topology encountered
when the tool searches to an output). The timing of the path is normalized to report the
check to the boundary latch clock such that if this check is met, the timing to the internal
latch is also met.
This is similar to what would be reported in the trace_paths report; however, the input
delay time is set to 1000 ns to force maximum transparency. If the delay had been set such
that it arrived at X2.lat1n before the clock transparency window, the trace paths report would
not have shown this path. Because of the 1000 ns specification, the extracted model would
still have reported the path. Also, the slack in the extracted [Link] file does not matter;
it can be positive or negative. The setup and hold arc delay calculations use the actual path
delays, modified by any user-specified margins. In this example, the total incremental delay
of 0.277 ns is the data delay that is used with the incremental clock delay to the latch to
determine the setup time.
Although register error recovery is indicated in path tracing reports, there might be
references to latch error recovery in specific instances. For example, you might see a
reference to a latch error recovery as shown in the following warning message:
MXTR-31 (warning) Applied LER delay adjustment of ...
Even though a register error recovery search is performed, the actual delay adjustment in
this case is done using latch error recovery because a transparent setup error occurred.
In1 D1 Q1 Out
ML SL ML SL
Xbuf3 * * Xbuf4 * *
X1 X2
Xbuf2
CLK Cliff
However, when you run the extract_model command, this internal path (highlighted in
Figure 12-7) is not captured in the extracted timing model. Only the setup and hold arcs
(CLK to IN1) and the clock output arcs (CLK to OUT) are captured in the model.
These paths can be verified using the trace_paths command. The model does not need to
check this type of path because the input and output conditions do not change the timing
result. The models created are only valid for the specified clock period. Changing the clock
period can cause this type of path to fail because a given model is valid only for the specified
clock waveforms.
you can see the setup check for IN2 to CLK1 in the .lib model created for this circuit.
Figure 12-8 Circuit With One Transparent Latch and One Nontransparent Latch
IN1
IN2 D Q D Q OUT1
CLK1 CK CK
latch1 latch2
CLK2
As shown in the following example, the checked path for the rising constraint is path 26 in
the .paths file, which shows the timing check to CLK2. Note the comment within the
constraint for this pin.
Example 12-2 Partial Trace Paths Report for Path 26
Path ID: 26
Startpoint: IN2 (in port)
Endpoint: X10.X6.Mn0.g
Path Type: max
Constraint: non-transparent setup (switch over from latch setup (transparent))
NanoTime derives the setup to CLK1 by adjusting the CLK2 setup. The tool calculates the
setup time to CLK2 rising edge by using the total incremental delay of 0.4207 ns for the input
delay minus the incremental CLK2 delay of 0.0975 ns for a setup time of 0.3232 ns to CLK2
rising edge. Next, the tool subtracts the time between the falling edge of CLK1 and the rising
edge of CLK2 (0.16 ns) to give a setup time for the model of 0.1232 ns to the CLK1 falling
edge. Checking back to [Link] for the IN2 pin for the third entry in second row of the report
(0.16 transition of input and data) shows the library value of 0.123225.
If the setup to CLK2 had been used in [Link] and the data arrived only 50 ns before the rising
edge of CLK2, the model would not have given an error, but the setup to CLK1 on latch1
would have failed. Using the adjusted setup time assures that the correct timing is checked
when the model is used. Note that the model is dependent on the specified relationship of
the clocks in the NanoTime run.
This example shows a path with negative slack at latch2. If the setup for latch2 had been
positive, the model would have saved the path and the setup in the model would have been
only to latch1. This occurs because meeting the latch1 setup time would have guaranteed
that the setup time to latch2 was met.
Now consider the case where latch1 is nontransparent and latch2 is transparent. Examine
the model delay to OUT1. In this case, if a path exists from CLK1 through latch1 and then
through latch2 to OUT1, the path is modeled as a delay arc from CLK2.
Here is the initial section of the .lib model for pin OUT1:
pin("OUT1") {
direction : output ;
max_capacitance : 0.200000 ;
min_capacitance : 0.000001
capacitance : 0.011393 ;
rise_capacitance_range (0.011393, 0.011393);
fall_capacitance_range (0.011393, 0.011393);
timing () {
related_pin : "CLK2" ;
timing_type : rising_edge ;
/* comment : clk->out for OUT1:CLK2:R:CLK2, path 17, path 18;*/
cell_rise( f_itrans_ocap ){
index_1 ( "0.080000, 0.120000, 0.160000, 0.200000");
index_2 ( "0.011394, 0.061393, 0.111393, 0.211393");
values ( "0.285852, 0.312389, 0.340068, 0.395869",\
"0.293819, 0.320357, 0.348035, 0.403836",\
"0.304927, 0.331465, 0.359143, 0.414944");
The following example shows a portion of the path tracing report for path 17 from the model
paths file.
Example 12-3 Partial Trace Paths Report for Path 17
Item: 5
Path ID: 17
Startpoint: CLK1 (in port)
Endpoint: OUT1 (out port)
Path Type: max
Constraint: set_output_delay check
The model output paths are checked to the last transparent topology in the path. Even
though the path is from CLK1, the modeled arc is specified from CLK2. The incremental
delay of the path is shown as 1.3008 ns, but NanoTime subtracts the difference between the
two clock opening edges, which is 1.0 ns. Therefore, the modeled delay time from CLK2 is
0.3008 ns.
• set_model_load_indexes
Similarly, the set_model_load_indexes command in the following example sets the output
load values to 0.2, 0.4, and 0.6 in the maximum-load model lookup tables for all outputs in
the design:
nt_shell> set_model_load_indexes -max {0.2 0.4 0.6} [all_outputs]
The specified ranges of values should reflect the actual expected ranges of transition times
and output loads where the model is used. At least three index values must be specified. If
you do not set the index values explicitly, the model generator uses the index values from
the model_default_input_transition_indexes and model_default_load_indexes
variables.
Note:
If signal integrity analysis is enabled, the output load index range should begin from a
value smaller than the minimum coupling capacitance and end at a value that is 3 times
the coupling capacitance expected for maximum loading.
Under some conditions, NanoTime uses the load index values of the existing CCS driver
model. If the -library_elements option is set to {nldm ccs_timing} in the
extract_model command, the design for which you are generating an extracted model
contains library cells, and a CCS-based library cell drives an output port of the design,
NanoTime ignores the load index values specified by the set_model_load_indexes
command and the model_default_load_indexes variable.
Library cells do not affect the input transition index values. NanoTime always uses the
values specified by the set_model_input_transition_indexes command or the
model_default_input_transition_indexes variable.
• The -keep_paths_within option keeps timing paths in the path database that have a
path delay within the specified time value of the worst path delay of each
startpoint-endpoint pair. By default, the value is set to 0.0, which keeps only the single
worst path per startpoint-endpoint pair. To keep more paths, specify a time value larger
than 0.0.
• The -npaths option of the extract_model command saves more paths per
startpoint-endpoint pair.
This command produces a Verilog file named latch_test.v in addition to the model files.
You can test how the model is used in the hierarchy by reading in the [Link] file and
specifying the Verilog file as the netlist:
set link_path " * latch_lib.db $link_path"
read_lib [Link]
set link_prefer_model_port { latch }
register_netlist -format spice {[Link]}
register_netlist -format verilog {latch_test.v}
link_design test_test
To remove MIL and MOL timing checks on the zero delay paths, you should also source the
SDC file that is created when you execute the extract_model command. This file contains
commands to prevent the tracing of unneeded arcs in the model. In the current example, the
unneeded arcs are the C to Q arcs (3) on the MIL and the unnecessary hold check on the
MOL constraint arc.
The SDC file should be sourced before you run the check_design command:
source [Link]
check_design
The arcs produced when using the ETM are dependent on the input arrival time. First,
consider the case when the signal at IN arrives after the transparency window. The following
statements cause port IN to switch 0.3 ns after the falling edge of CLK:
create_clock -period 4.0 CLK
set_input_delay -clock CLK -clock_fall 0.3 {IN}
Notice that the tlatch pins within the model become path points when the model is used in
the hierarchy. The first two paths are setups to the MIL, which have positive slack values of
almost a full period because the check is relative to the falling edge of the clock. The arrival
time occurs before the transparency window of the latch, so the path stops at this point. The
next two paths are from CLK to OUT.
Here are the details of the setup path for IN falling:
Startpoint: IN (in port)
Endpoint: core.mil_d_IN_CLK_F_CLK
Path Type: max
Constraint: model setup constraint arc: core (test_lib.test)
This table shows the setup to the MIL D input (the core.mil_d_IN_CLK_F_CLK entry) to be
3.633 ns, using .067 ns as the setup time from the MIL.
The report is different if the input IN is referenced to the rising edge of the clock and
sufficient delay is added to make the transition occur after the falling edge of the clock. You
can do this by using the following command:
set_input_delay -clock CLK 2.3 {IN}
The path report shows the same four paths. Note that the trace_latch_error_recovery
variable is set to false for this run. If you do not change the value from true (the default),
the timing is adjusted and you would also see the path to OUT in the report.
Path Path
Slack Delay Type Startpoint Endpoint
------ ------ ----- ---------- --------------------------
-0.3670 0.0000 D-L f IN f core.mil_d_IN_CLK_F_CLK
-0.3028 0.0000 D-L r IN r core.mil_d_IN_CLK_F_CLK
3.7647 0.2353 C-O r CLK f OUT
3.7761 0.2239 C-O r CLK r OUT
This result differs from the previous one in that the slack is negative for the arc from IN to the
MIL. Because IN is referenced to the rising edge of the clock, the data is expected to arrive
at the next falling edge of CLK.
Now consider the case when IN arrives during the latch transparency window. You get this
condition by specifying IN to begin 0.3 ns after the rising edge of CLK:
set_input_delay -clock CLK 0.3 {IN}
The output report for max paths now shows eight paths:
Path Path
Slack Delay Type Startpoint Endpoint
------ ------ ----- ---------- --------------------------
1.6330 0.0000 D-L f IN f core.mil_d_IN_CLK_F_CLK
1.6972 0.0000 D-L r IN r core.mil_d_IN_CLK_F_CLK
1.8358 0.2762 D-L f IN f core.mol_d_OUT_CLK_R_CLK
1.8570 0.2211 D-L r IN r core.mol_d_OUT_CLK_R_CLK
3.4642 0.2358 D-O f IN f OUT
3.5131 0.1869 D-O r IN r OUT
3.7647 0.2353 C-O r CLK f OUT
3.7761 0.2239 C-O r CLK r OUT
The first two paths are setups to the MIL, and the next two are setups to the MOL. The fifth
and sixth paths go from IN to OUT, and the final two paths go from CLK to OUT. Here is the
path report for IN falling to OUT falling:
Startpoint: IN (in port)
Endpoint: OUT (out port)
Path Type: max
Constraint: set_output_delay check
Note that the path shows the MIL and MOL checkpoints with the clock timing at those points,
including the delay from the input pin CLK to the MIL and MOL pins. Note also that the arc 4
delay from CLK to MIL C is included in the MIL clock pin:
cycle=1 clock=CLK high period=4.0000 open=0.1095 r close=2.0000 f
pin=core.mil_c_IN_CLK_F_CLK
The MOL clock includes the delay for the CLK to the MOL clock pin:
cycle=1 clock=CLK high period=4.0000 open=0.2516 r close=2.0000 f
pin=core.mol_c_OUT_CLK_R_CLK
13-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
HSPICE Recalibration
To produce timing models that meet HSPICE accuracy, specify the -hspice_timing option
of the extract_model command. You must have a NanoTime Ultra license to use this
feature. When this option is set, the tool first performs a conventional timing analysis, then
runs HSPICE simulations on the model paths to improve the accuracy of the calculated
delays.
NanoTime uses the write_spice command to generate the input for HSPICE simulation.
The methodology and limitations of the write_spice command also apply to HSPICE
recalibration. For more information, see Chapter 11, “Correlation with HSPICE.”
Limitations are as follows:
• Paths that go through other timing models are not included.
• Analysis options that require dynamic updates during or after simulation are not fully
covered. These analysis types include latch error recovery and delay and transition
coefficient multipliers. The affected paths are simulated with HSPICE, but the analysis
adjustments are not applied.
• Signal integrity analysis might not be accurate because the SPICE deck cannot properly
capture the alignment of aggressor nets to victim nets.
• Transparency windows are not updated.
• If either dynamic clock simulation or dynamic delay simulation is enabled, the delays
calculated during dynamic analysis are used for any paths or parts of paths that go
through the dynamic simulation region.
• Setup and hold calculations might be different from those obtained from standard cell
characterization tools. NanoTime uses the difference between two arrival edges
reaching the logic level threshold (typically 50 percent), but other tools might use more
complex calculations.
If you specify the -hspice_timing option, the model file provides an indication if NanoTime
does not use HSPICE simulation for some of the model paths. The tool marks each affected
path ID with a tilde character (~) in the comment line. For example, if path 26 contains a
timing model, it is not analyzed with HSPICE. In this case, the comment line appears as
follows:
/* comment : reference path 13 (11), checked path 26~ (25),
reference path 14 (12), checked path 28 (27); */
simulation files, and simulation results associated with that port. Each port directory also
contains all paths starting from that port and is indexed by the path_id. Figure 13-2 shows
the simulation directory structure.
Figure 13-2 HSPICE Simulation Directory Structure
nt_sim_data
(only if CCS noise model created)
hspice_timing ccsn_noise
C0000-1
in out
You can specify whether to keep the directories after the simulations by setting the
sim_file_cleanup variable to an appropriate value. Table 13-1 shows the available
settings.
Table 13-1 sim_file_cleanup Settings
Value Operation
The simulation results for each .DATA statement are stored in the .mt and .tr files.
The default of the model_ccs_characterization_driver_type variable applies during
the simulations. The default is pre_snpsdriver.
To deliver better performance and reduce runtime, use the evaluated model cards for the
HSPICE simulations rather than the original model files.
po po
min fall-to-rise arc
no no
max rise-to-fall arc
ng ng
min rise-to-fall arc
Merging Models
A block can have different operating modes, such as test mode and normal operating mode.
The timing requirements for a block can be quite different for different operating modes. In
these cases, you need to extract a separate model for each mode.
Instead of keeping and using multiple extracted models, you can optionally merge them into
a single model that has different timing arcs enabled for different operating modes. Then you
can use this single model and change its behavior by setting it into different modes.
The merge_models command merges multiple .db timing models into a single model. The
generated model has moded timing arcs such that, in any given mode, the static timing
behavior of the model is equivalent to one of the original models that was merged. The final
merged model is saved in the specified file. PrimeTime and Design Compiler recognize the
merged model with moded timing arcs for performing timing analysis.
You can only use the extract_model command to merge timing models generated by the
NanoTime tool.
Models without the when and sdf_cond statements can be merged with models that do
contain these statements. Note, however, that you must manually select the mode for a
merged model that does not contain logic conditions. You need to ensure that logic
conditions for the modes that are being merged are mutually exclusive.
If conditional statements are present in the models because of the use of the -when option
of the extract_model command, then each mode has a condition associated with it in the
modes group. Otherwise, only the modes with associated logic conditions have when
statements in the mode definition.
The Library Compiler tool requires that distinct conditional statements be used for maximum
and minimum delay arcs. Due to this requirement, the use of the -when option of the
extract_model command generates retain constructs to represent minimum delay arc
data as part of the maximum delay arcs in the model. If no maximum delay data exists, then
the minimum delay data is represented as a separate arc.
When CCS timing arc data is present in the models being merged, nonlinear delay model
(NLDM) data is used to determine which arcs can be merged. The output consists of both
NLDM and CCS data. The accuracy of the merged model is controlled by the -tolerance
and -single_mode options of the merge_models command.
Boundary Parasitics
You can handle boundary parasitics in two different ways: include their effects in the model
or write them into a separate parasitics file.
the library cell in .db (compiled) format and a command file in Synopsys Design Constraints
(SDC) format that applies the applicable timing exceptions, such as false paths and
multicycle paths, if any. The SDC file must be applied to the library cell when it is used at a
higher level of the design hierarchy.
Figure 13-4 shows the contents of a library cell model (everything inside the dashed line).
Figure 13-4 Contents of a Library Cell Model
ports
core cell
boundary parasitics
ports
core cell
boundary parasitics
To create a boundary cell timing model, follow this procedure (unrelated steps are not
included):
1. Read in design files and link the design.
2. Set the rc_reduction_exclude_boundary_nets variable to true to prevent the
boundary parasitics from being modified by the parasitic reduction operation.
Alternatively, you can set the rc_reduction_max_net_delta_delay variable to 0 to
prevent all parasitic reduction.
3. Read in the parasitic data.
4. Set the timing_save_wire_delay variable to true.
5. Execute the check_design command.
6. Execute the extract_model -extract_boundary_parasitics command.
7. (Optional) Add the -ignore_ports option if the ignored ports do not have parasitics.
8. (Optional) Add the -bus option to use bus naming in the generated Verilog output.
9. (Optional) Add the -enable_arc_segmentation option to preserve half-unate arcs.
Coupling capacitors between pins are preserved. Coupling capacitors into the model are
preserved as capacitors to ground.
Maximum and minimum delay arcs are placed on the NMOS transistor input and output pins
of a full-unate model when this option is used.
Noise no yes
Power no no
Figure 13-6 illustrates the structure of a CCS timing model. A CCS driver model uses a time-
and voltage-dependent current source. The CCS driver lookup table is indexed by the input
transition time and the output load capacitance, similar to a NLDM model. However, the
values in the CCS model lookup table represent the driver output current, which is used for
a more accurate timing analysis than the simple delay table.
In addition, the CCS model can include the time dimension, allowing a different
current-versus-time model to be used for each combination of input transition time and
output load capacitance.
Driver Receiver
model models
C 1, C 2
Reduced-order
network model
C 1, C 2
i(t)
C 1, C 2
v
t
C1 C2
The CCS timing receiver model uses two different capacitor values rather than a single
lumped capacitance. The first capacitance is used as the load up to the input delay
threshold. When the input waveform reaches this threshold, the load is dynamically adjusted
to the second capacitance value.
The generated CCS timing model is valid only for the single operating condition in effect at
the time of model extraction. For modeling of different worst-case operating conditions, it is
necessary to generate a separate model for each condition. Only input ports that have paths
starting from them are given receiver models in the generated timing model.
CCS model generation is limited when dynamic simulation is used. When dynamic clock
simulation is used, CCS receiver and driver models are not generated for the clock input
pins and clock output pins. When dynamic delay simulation is used on the boundary of the
model being extracted, CCS receiver and driver models are not generated for the input pins
and output pins driven by dynamic delay simulation regions.
NanoTime can read and use CCS timing models. For more information, see Using CCS
Timing Models.
• model_ccs_characterization_driver_type
The type of driver to be used at the cell inputs for characterization. It can be set to either
ramp (for a simple ramp) or snps_predriver (for the standard Synopsys predriver). The
default is snps_predriver.
• sim_snps_predriver_mix_ratio
The properties of the Synopsys predriver, which is a mixture of linear and exponential
behavior. A value of 0 produces an exponential waveform, while a value of 1 produces a
linear ramp.
The CCS noise information is stored on either a pin or a timing arc. It consists of
characterization data, which enables noise failure detection on cell inputs, calculation of
noise bumps on cell outputs, and noise propagation through the cell. NanoTime supports
pin-based CCS noise models.
Before generating CCS noise models, you must set the si_enable_noise_analysis
variable to true. To generate CCS noise models, use the -library_elements option of the
extract_model command and specify {nldm ccs_timing ccs_noise} as the list of
element types.
For example, the following command generates NLDM, CCS timing, and CCS noise
models:
nt_shell> extract_model -library_elements {nldm ccs_timing ccs_noise}
When you specify the ccs_noise element type, CCS noise models and CCS timing models
are always generated at the same time whether or not the effects of boundary parasitics are
included. The ccs_noise element type cannot be used alone; all three element types are
required.
If the design consists of transistors and small timing models, NanoTime does not generate
CCS noise models for the pins that are connected to the small timing models.
Context Characterization
Context characterization can be used to perform timing analysis of a lower-level subdesign
while observing the chip-level timing constraints. This is the general procedure:
1. Read the top-level design into NanoTime and apply the top-level timing constraints.
2. Characterize the timing context for the subdesign with the characterize_context
command.
3. Generate a timing constraint script in Synopsys Design Constraints (SDC) format with
the write_context command.
4. Read the subdesign into NanoTime.
5. Source the SDC script generated in step 3.
6. Analyze the timing of the subdesign.
information, input arrival times, output required times, timing exceptions, logic constraints,
and capacitive loads.
After the context of a subdesign has been characterized, you use the write_context
command to write the timing context information as a script in SDC format.
For example, the following command derives the timing-related context information for
instance I1:
nt_shell> characterize_context {I1}
After completion of context characterization, the following command writes the context
information to a Synopsys Design Constraints (SDC) file called [Link] in the current
directory:
nt_shell> write_context -derive_file_name {I1}
The -keep_paths_within option keeps timing paths in the path database that have a path
delay close to the worst path delay of each startpoint-endpoint pair. By default, the
-keep_paths_within option is set to 0.0, and NanoTime keeps only the single worst path
per startpoint-endpoint pair. To keep more paths, set the -keep_paths_within option to a
time value larger than 0.0, and set the -npaths option to a number larger than 1. This puts
more timing information in the path database but also increases the runtime and memory
usage. The -full_path_enumeration option is equivalent to the -keep_paths_within
option set to a very large time value.
The -pbsa option invokes path-based slack adjustment, which adjusts the calculated path
delays based on the lengths of the path segments traced in the timing check. To use this
option, you must have a NanoTime Ultra license. For more information, see Chapter 15,
“POCV and PBSA.”
The -debug_paths option writes a file to the working directory that lists the specific
worst-case timing paths in the design that are being used to generate the boundary
constraints. This information is useful for debugging purposes.
If you use the -derive_file_name option, you can also use the -prefix, -extension,
-script_directory, and -separator options. The -prefix option specifies the prefix for
the derived constraint file name. The -extension option specifies the extension for the
derived constraint file name. If no extension is specified, the extension is ntsh. The
-separator option specifies a single character to use as a hierarchical separator in
constructing the derived constraint file name generated for each instance. If this option is not
used, the default is the “at” sign (@). You cannot use the slash (/) or backslash (\) characters
as name separators. The -script_directory option specifies the directory in which the
constraint file is written. The default is the current directory.
14-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Dynamic clock simulation and dynamic delay simulation cannot be used to analyze
differential circuits. NanoTime issues a CMDS-110 error message at the mark_simulation
and check_design commands when a differential net pair is detected in the dynamic
simulation region. Use automatic skew analysis to obtain accurate skews and delays for
differential circuits.
div2 div4
D Q D Q
clkin
FF1 FF2
clkin
div2
div4
Even if only div4 is used as a clock and not div2, div2 still must be marked as a clock for
proper simulation of FF2. The output of each clock divider or multiplier must be declared to
be a clock.
The commands for proper operation of this divider are:
nt_shell> mark_clock_network -force_propagation div2
...
nt_shell> create_generated_clock -name div4 \
-source clkin -divide_by 4 FF2/MNQ/D
Instead of using the mark_clock_network command for div2, you could use another
create_generated_clock command.
Because div2 and div4 are marked or defined as clocks, the clock attribute is propagated
through the combinational logic so that the simulated clock network includes the inverters.
If the clock network contains latches along the control or reset paths that need to be toggled
to create the clock waveform, the latches also must be marked as clocks to be included in
the clock network. Any side input control logic must be set to enable the clock waveforms. If
a side input is a control signal that selects one of multiple operating frequencies, you must
use the set_case_analysis command to place the circuit into a state that selects one
operating frequency. The trace_paths command can use only one operating frequency.
Basic dynamic clock simulation produces one delay value for each path through the
simulation region. This value is used in all timing checks that involve the path through the
simulation region. However, if signal integrity analysis is enabled, both a minimum delay
clock path and a maximum delay clock path are generated.
If NanoTime cannot determine the correct logic state for a side input, it creates a waveform
to simulate both high and low logic levels at that input. The tool issues a DCS-001 warning
message whenever it generates a side input waveform.
If there are multiple side inputs, NanoTime generates waveforms to cover all possible
combinations of side input logic states. This might cause long runtimes or inaccurate results
from trying logically impossible side input combinations, so it is preferable to define the side
input state.
When you use case analysis to set the side input, dynamic clock simulation is enabled;
however, path tracing through the side input is disabled and the related timing checks are
disabled. To avoid these limitations, use the set_dcs_input command to set the side input
state. Dynamic clock simulation logic definition does not affect logic on other nets. The
syntax of the command is as follows:
set_dcs_input -logic value pin_list
The Boolean variable value can be 0 or 1. The pin_list argument must be a list of nets, pins,
or ports. To remove previously set DCS input logic settings, use the remove_dcs_input
command with pin_list as the only argument.
The dcs_input_logic_state attribute for a net contains the logic state 0 or 1 if it was set
by the set_dcs_input command; otherwise, it contains the value X.
During dynamic clock simulation, logic set by the set_dcs_input command takes
precedence over logic set by case analysis.
During dynamic clock simulation, if all of the load nets are active, the load capacitance is
very high and consequently the simulated delays are unrealistically long.
There are two ways to ensure the correct operation for this situation:
• Specify the shared pull-up or pull-down transistor by using the mark_instance
command with the -exclude_from_dcs option. The argument of the option is the name
of the transistor. You can cancel the assignment with the erase_instance command by
using the same option and argument.
NanoTime excludes the specified transistor, all other transistors in the same
channel-connected block, and its transitive fanout from dynamic clock simulation. For
this region, NanoTime employs the default delay calculation methods for path tracing.
If you choose this approach, you might also need to mark other clock gates or set
constraints to obtain correct analysis of parts of the circuit that are no longer part of the
clock simulation region.
• Terminate dynamic clock simulation at internal pins or nets by using the
mark_clock_network command with the -end_dcs option. The argument of the option
is the input to the channel-connected block which contains the shared transistor. You can
cancel the assignment with the erase_clock_network command by using the same
option and argument.
Self-Timed Circuits
A self-timed circuit uses a derivative of its own output signal to feed back in as an input. A
general example is shown in Figure 14-2. This design style might be used to turn off an
output signal some specific time after it was generated.
The self-timed signal input to the clock network is a side input of the dynamic clock
simulation region. The correct waveform for this signal can only be obtained from path
tracing, which occurs after the clock signal is acquired. Therefore you must perform a
second iteration of dynamic clock simulation to correctly model this feedback circuit.
Clock network
B
You must identify the clock network side input signal (signal B in Figure 14-2) by using the
set_dcs_input command with the -synchronized_data option. The argument to the
option is either a net name or a pin name; it must not be a clock net, but rather the input of
a channel-connected block that has a clock net output.
The workflow is as follows:
1. Perform the original dynamic clock simulation run and treat the timed signal (B) as a side
input with fixed logic.
2. Perform a partial path tracing operation from the self-timed circuit output (A) to the timed
signal (B) to find the arrival times for this signal.
To reduce runtime, only the logic considerations from the first iteration of signal integrity
analysis are used as input for the dynamic clock simulation. Subsequent iterations of signal
integrity analysis reuse the same delays.
To improve the accuracy at the cost of more runtime, you can elect to run the dynamic clock
simulation during every signal integrity iteration by following these steps:
• Set the timing_save_pin_arrival_and_transition variable to true.
This variable saves timing information inside the dynamic simulation region that is
needed to determine signal integrity timing windows.
• Set the dcs_enable_detailed_path_reporting variable to true.
This variable saves additional timing information inside the dynamic simulation region.
• Set the dcs_enable_si_analysis_first_iteration_only variable to false.
This variable, when set to false, runs the dynamic simulation during every signal
integrity iteration.
[Link] you set side inputs logic in Step 9, run the check_design command again to obtain the
corrected simulation.
11. Use the report_clock_arrivals command to verify that all necessary nodes have
been marked as clocks. The report lists the nodes that have been marked as clocks,
even though no timing analysis has been run yet.
[Link] the nodes are correctly marked, proceed to step 15.
[Link] some clock nets are not marked as clocks, mark them manually by using the
mark_clock_network command with the -force_propagation option.
An alternative approach is to create a generated clock on the clock net with the
create_generated_clock command.
[Link] there are nets incorrectly marked as clocks, stop clock propagation through them by
using the mark_clock_network command with the -stop_propagation or -end_dcs
options. In this case, execute a reset_design command and go back to step 5.
[Link] the trace_paths -clock_only command to performs dynamic clock
simulation and generate timing data for the entire clock tree.
When you execute the check_design command, NanoTime finds the smallest
channel-connected region in the design that includes the specified nets and sets up a
simulation of that unit.
NanoTime evaluates each marked net individually for the minimum simulation region that
can be built to simulate a delay arc through the net. The marked net might not be on the
boundary of the simulation region. If the net is inside a channel-connected region, it is not
visible as a timing point in the design.
The number of simulation regions might be less than the number of marked nets. The
minimum simulation region that includes a marked net might overlap other marked nets or
share a border with other simulation regions. NanoTime merges adjacent regions into a
single simulation unit. Regions that are not merged are simulated separately.
If a channel-connected region receives a signal and the signal complement through an
inverter, NanoTime adds the inverter to the region for better accuracy. An example of this
type of circuit is a transmission gate using ctr and ctr_bar signals to control the pass
transistors. If you do not want such circuitry added to the region, use the
-channel_expansion_only option of the mark_simulation command. In that case, only
the channel-connected paths containing the specified nets are included in the region.
Simulation regions cannot be chained together. A single mark_simulation command must
be used to identify all of the stages to be simulated together, even if a stage is as simple as
a single inverter.
By default, a region is limited to 10 inputs to prevent excessively long runtimes. To specify
a larger or smaller limit, use the -max_inputs option of the mark_simulation command.
You can get information about the simulation by using the report_simulation command:
nt_shell> report_simulation $mysim
Summary of Simulations
Num Num Num Num
Outputs Outputs Inputs Nets TX
------------------------------ ------- ------- ----- -----
{net1 net2 net3 net4} 4 3 7 20
{net5 net6 net7} 3 2 8 18
...
The report_simulation -verbose command provides the names of all of the nets and
transistors involved in the simulation, as well as the name of the vector file, if used.
nt_shell> report_simulation -verbose $mysim
Attribute Value
--------------- ----------------------------------------------
Type data
Output Nets {net1 net2 net3 net4}
Input Nets {net25 net28 net32}
Internal Nets {net120 net121 net122 ...}
Transistors {path1.Mn0 path1.Mp0 path2.Mn0 ...}
Spice Header
Control Header
Vectors /directory_abc/vector_file.vec
...
(additional similar sections)
...
The command can also be used to generate a SPICE deck or a vector template file by
redirecting the command output into a file. The -spice_deck option writes out the region as
a SPICE deck. The -vectors option writes out the region vectors. The -template option
writes out a vector-file template for the region, which you can edit.
Use the set_simulation_attributes command to changes the attributes of a simulation
object. For example, the following command sets the simulation runtime to 10,000
picoseconds and the vector file to [Link] for the simulation object mysim:
nt_shell> set_simulation_attributes -time 10000 -vectors [Link] $mysim
Signals:
IN_H iso_cpu IN_L
Vectors:
r 0 0
0 0 r
States:
out_H out_L
Initial conditions:
0.9 0
0 0.9
Options:
max min
n1 p4
vdda
v
p2 p3
in outb
A out
n2 n3
gnd
When using dynamic simulation on multivoltage designs, you should force consecutive
stages into the same simulation region so that the dynamic simulation region does not end
at any voltage domain boundaries. You can do this by adding a net from the stage before
the level shifter and a net from the level shifter into the same mark_simulation command,
as follows:
nt_shell> mark_simulation -net { in out outb }
You can use dynamic simulation to analyze a multivoltage design that includes virtual supply
or ground nets, such as the circuit in Figure 14-4.
To set up the virtual ground for this circuit, use the following command:
nt_shell> set_supply_net -virtual "vgnd"
You must also specify the correct state on the virtual supply enable device to ensure that the
transistor is always on:
nt_shell> set_case_analysis 1 "en"
nt_shell> mark_simulation -net "Z"
vdd2
Z
out
gnd
vdd1 vdd1
in
vgnd
en
gnd vdd1
vss
2. Read in and link the design, specify the topology, and run the check_topology
command in the usual manner.
3. Mark the regions that need to be simulated dynamically by using the mark_simulation
command. Run the check_design command.
4. Report or change the simulation setup using commands such as the following:
sizeof_collection [all_simulations]
set sim [get_simulation -input in]
report_simulation
report_simulation $sim
report_simulation $options $sim
set_simulation_attributes $sim
5. If necessary, generate simulation vector template files by using a script similar to the
following:
foreach_in_collection sim \
[all_simulations] {
set outnet [index_collection \
[get_attribute $sim output_nets] 0]
set name [get_attribute $outnet full_name]
report_simulation -template $sim > $[Link]
}
6. Edit the simulation vector template files to specify the desired conditions for simulation,
then apply the new files to the simulation region with the set_simulation_attributes
-vectors command:
set_simulation_attributes -vectors $[Link] $sim
7. Run path tracing to perform the simulations and complete the timing analysis.
8. Report the timing results with the report_paths command.
15-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Reconvergent clock path pessimism removal is part of PBSA analysis. Pessimism removal
is enabled by default, regardless of whether you use the PBSA scaling factors. Several
PBSA variables control how clock path pessimism works.
You can use POCV and PBSA analysis together or separately. Using either or both
techniques requires a NanoTime Ultra license.
2. Define the variation characteristics of NMOS and PMOS reference transistors with the
set_variation_parameters command and the -type nmos or -type pmos option.
Use the command as many times as needed to represent the device types in the design.
3. (Optional) Set the thresholds for matching transistor channel length and supply voltage
to the reference transistors with the tech_pocv_match_voltage_pct and
tech_pocv_match_length_pct variables.
6. (Optional) Define the variation characteristics of specific library cells with the
set_libcell_variation_parameters command.
7. Use the report_variation command to examine whether all devices in the design
have an assigned variation value and make corrections as needed.
8. (Optional) Set the number of standard deviations of variation to use in the analysis with
the timing_pocv_sigma and timing_pocv_sigma_min variables. Use a value of 3 or
more to be more conservative or less than 3 to be more aggressive.
9. (Optional) Include RC delays in the variation analysis by setting the
timing_pocv_gate_delay_only variable to false.
An alternative format includes the worst-case variation in the delay and constraint values
saved in the cell_rise, cell_fall, rise_constraint, and fall_constraint tables.
Separate variation parameters are not written into the model. You can specify this format by
setting the model_generate_pocv_lvf variable to false. (The default is true.)
DDS
mp1 mp2 X1 region
OUT
arc3 arc4
A
mn2
arc1
B
mn1
arc2
The nominal delay of each of the timing arcs is 10 ps. Table 15-1 lists the one-sigma
variation values set for each of the device types. Variation values are provided in the range
of 0.0 to 1.0, representing 0 to 100 percent. Assume that this is a maximum delay analysis,
which causes the nominal delay to increase.
Table 15-1 Variation Values for Path Variation Example
X1 libcell_37b 0.18
default 0.05
The modified arc and path delays are shown in Table 15-2. The individual object delays are
scaled by the number of standard deviations by using the timing_pocv_sigma variable,
whose default is 3. The series configuration of the two NMOS transistors is taken into
arc2 (3*0.1) *10 / sqrt (1.18) = 2.8 10 + 2.8 = 12.8 includes mn1 and mn2
in series
path1 2 2 2
sqrt (3.9 + 5.4 + 1.5 ) = 6.83 30 + 6.83 = 36.83 includes arc1, arc3,
arc4
path2 2 2 2
sqrt (2.8 + 5.4 + 1.5 ) = 6.26 30 + 6.26 = 36.26 includes arc2, arc3,
arc4
You define transistor variation by using the set_variation_parameters command with the
-type option set to either nmos or pmos. The variation provided in the command is the ratio
of delay variation to the nominal delay for that device type. The value is typically between
0.0 (no variation) and 0.4 (40 percent variation). The value represents one standard
deviation of variation. Path delay analysis uses three standard deviations of variation by
default, as specified by the timing_pocv_sigma and timing_pocv_sigma_min variables.
It is preferable to define transistor characteristics intentionally rather than relying on the
default specification. You must execute the command at least twice, once for NMOS
transistors and once for PMOS transistors. You can run it many times to specify different
characteristics for different transistor types or operating conditions. You must specify the
variation for one width of every unique combination of transistor length, voltage, and model
type. For FinFET transistors, you specify the number of fins instead of the width.
For transistors, the set_variation_parameters command includes options for the
following properties:
• Type (NMOS or PMOS)
• Channel length (in microns)
• Channel width (in microns) for standard transistors
• Number of fins for FinFET transistors
• Supply voltage
• Model name
• How to accommodate serial devices
• Whether to apply the variation to maximum or minimum delay analysis
• The variation value (one sigma change in delay as a percent of the nominal delay)
If a model name is provided, the variation applies only to that model. If a supply voltage is
provided, the variation applies only to transistors of the same type having the same supply
voltage. If a channel length is provided, the variation applies only to transistors of the same
type having the same channel length. You can control how closely supply voltages and
channel lengths must match by setting the tech_pocv_match_length_pct and
tech_pocv_match_voltage_pct variables. Variation values are scaled by either the width
or nfin parameter; therefore, it is only necessary to specify one width (or nfin value) for a
given model and voltage combination.
NanoTime calculates the amount of delay variation for each transistor in a path by
multiplying the original delay through that transistor by the variation for the transistor type.
The resulting delay variation value is also scaled by the transistor width (or number of fins),
the stack depth (if needed for that transistor), and the value of the timing_pocv_sigma and
timing_pocv_sigma_min variables.
d nominal N V
d mod = ----------------------------------------
S
where d is the delay, N is the number of standard deviations, V is the one-sigma device
variation, and S is the series factor.
When other device types are specified, the transistor parameter options of the
set_variation_parameters command are ignored.
In addition, you can choose whether to include wire delay in the variation calculation for an
arc. The timing_pocv_gate_delay_only variable is true by default, which means that
wire delay is not included in the analysis. If you set the variable to false, the delay for a
stage is computed by applying the variation value specified for the primary object in that
stage (a transistor, library cell, or dynamic simulation region) to the combined gate delay and
wire delay of the stage.
The first section of the report displays the user-defined variations. For example, an NMOS
transistor with length and width equal to 1 nm and a Vdd value of 1.8 V has one-sigma
variations of 10 percent (of nominal) for minimum delay analysis and 7 percent for maximum
delay analysis. Two of these transistors in series are treated as a single device with variation
equal to 1.18 transistors.
The second section of the report lists all transistors that match the user specifications. In this
case, 16 n-channel transistors match the reference transistor within the tolerances set by
the tech_pocv_match_length_pct and tech_pocv_match_voltage_pct. The default is 1
percent for these variables.
The third section lists all transistors that did not match any of the user definitions. Four
transistors in the design have a Vdd value of 5.0 V, but there are no transistor specifications
for this voltage. Therefore, NanoTime uses the variation value specified by the -type
default option of the set_variation_parameters command for these transistors.
ADJUSTMENT CALCULATIONS
Parameter Value
----------------------------- ----------------
timing_pocv_sigma 1.000
timing_pocv_sigma_min 0.900
timing_pocv_gate_delay_only false
common net ---
Nominal Common Path Delay 0.000
Nominal Data Path
Gate Delay 3.000
Wire Delay 0.000
Nominal Clock Path Delay
Gate Delay 2.000
Wire Delay 0.000
Data Path Variation -0.620
Clock Path Variation 0.224
Slack Variation -0.660
The path report contains the POCV delay adjustment in the “Adjust” column on the line
immediately preceding the data arrival time. The label “POCV adjustment” appears on the
same line.
You can optionally use the -variation option of the report_paths command to add a
column to the path report that displays the variation at each stage of a path.
17.000 17.000 C f
clk1 (inout)
17.000 0.000 0.000 C f
X1C1.MP1.g (inv)
18.000 1.000 0.300 C r
X2C1.MN1.g (inv)
19.000 1.000 0.400 C f
XL1.MN1.g (lat)
2.000 17.000 0.500 Total
19.000 0.000 setup time
19.000 0.000 clock uncertainty
19.000 data required time
------------------------------------------------------------------------
19.000 data required time
-15.561 data arrival time
------------------------------------------------------------------------
3.439 slack (MET)
The POCV adjustment is the statistical sum of the clock and data path variations. In this path
report, the value of 0.561 is calculated as the square root of the sum of the squares of the
data path variation (0.255) and the clock path variation (0.500).
The column labeled Var shows the variation value used for each stage. Stage variations are
combined statistically as the square root of the sum of the squares to obtain the variation
value for the complete path. Therefore the value in the Var column on a line labeled Total is
not an arithmetic sum like the other total values, but a statistical sum.
The reported arc delays are always the nominal arc delays, whether or not variation analysis
is enabled and whether or not the -variation option is used with the report_paths
command. All adjustments due to variation are combined into the single POCV adjustment
value. If you enable POCV analysis but run the report_paths command without the
-variation option, the variation column is not included but the POCV adjustment remains.
The adjustments are added to the original delay time to calculate the adjusted delay time
T adj , as follows:
T adj = T orig + T orig M T + L M L
where M T is the scaling factor for the delay time (also known as the delay scaling factor or
derating factor) and M L is the scaling factor for the number of levels (also known as the
uncertainty per level).
The M T factor increases or decreases the total delay of a path by a fixed multiplication
factor. For example, you can use it to make the original path tracing results more
conservative by increasing all path delays for maximum delay analysis and decreasing all
delays for minimum delay analysis.
The M L factor increases or decreases the total delay of a path by a fixed amount of time
per simulation level. Typically, you would use a positive value for maximum delay analysis
and a negative value for minimum delay analysis. However, this analysis tends to be too
pessimistic for increasing stage count because local variations in device characteristics
usually cancel each other (to some degree) from stage to stage.
To provide more flexibility, the level-based derating factor is available. It takes the number
of simulation levels into account by modifying the delay scaling factor M T . For example, you
can specify that the delay of a two-stage path should be increased by 10 percent, but that
the delay of a ten-stage path should be increased by only 8 percent.
If M TL is the level-based derating factor, the new delay scaling factor M Tnew is
M Tnew = M T + L M TL
NanoTime requires that M TL , when used for maximum delay analysis, is a negative value
to ensure that the overall percentage of delay scaling decreases with each additional stage.
You can also set a lower bound for the adjusted scaling factor by using the M floor
parameter. NanoTime adjusts the value of M Tnew as follows:
where max is a function that returns the largest value in the argument list. The value of
M Tnew cannot fall below the value of M floor· .
NanoTime expects the value of M floor to be greater than 0 but less than the value of M T .
If M floor is greater than M T , NanoTime sets M floor to M T , which effectively prevents any
level-based adjustments to M T .
Similarly, for minimum delay analysis, NanoTime requires M TL to be a positive value; the
overall percentage of delay scaling starts at a large negative value then becomes less
negative with each additional stage. You can set an upper bound for the adjusted scaling
factor by using the M ceiling value. NanoTime adjusts the value of M Tnew as follows:
where min is a function that returns the smallest value in the argument list. The value of
M Tnew cannot rise above the value of M ceiling . NanoTime expects the value of M ceiling to
be less than 0 but greater than the value of M T ; otherwise, the tool sets M ceiling to M T .
The final adjusted delay time is calculated as follows:
The following examples describe how to set the variables to adjust path delays.
To increase all delays in maximum analysis by 10 percent, set M T to 0.1 and keep the
M L and M TL factors set to 0 (the defaults), for the maximum delay analysis factors only.
Similarly, to decrease all delays for minimum delay analysis by 5 percent, set M T to
-0.05 and keep the M L and M TL factors set to 0, for the minimum delay analysis factors
only.
To increase delays for maximum delay analysis by 5 ps per stage, set M L to 5 and keep
the M T and M TL factors set to 0 (the defaults). To decrease delays by 3 ps per stage,
set M L to -3 and keep the M T and M TL factors set to 0 (the defaults).
percentage delay adjustment to be used for a one-stage path, decreased by the absolute
value of M TL .
For example, if M T = – 0.0525 and M TL = 0.0025 , NanoTime adjusts the delay of a
one-stage path by -5 percent, a two-stage path by -4.75 percent, a three-stage path by
-4.5 percent, and so on, until the adjustment reaches the maximum allowed value.
Apart from a limited amount of range checking, NanoTime does not check the values of
scaling factors.
For a single path, the original delay T orig (the delay calculated without path-based slack
adjustment) includes the cell delay TC and the wire delay TW :
T orig = TC + TW
TW adj = TW + TW M W
NanoTime adjusts the cell delay portion of the path delay as described in PBSA Adjustments
for a Single Path. The final adjusted path delay is the sum of the adjusted cell delay and the
adjusted wire delay:
Maximum delay analysis and minimum delay analysis use separate scale factors.
The wire delay scaling factor for maximum delay analysis is a number between 0 and 1. For
example, to increase the wire delay of a path by 10 percent, set the factor to 0.10.
The wire delay scaling factor for minimum delay analysis is a number between -1 and 0. For
example, to decrease the wire delay of a path by 10 percent, set the factor to -0.10.
D Q Combinational D Q
Logic
G G
B
Common point
to launch
device
C
Clock source to Common point
A
common point to capture
device
Common
CLK
Point
Generated
clock
Launch path analysis includes segments A, B, and D. Capture path analysis includes
segments A and C.
If any segment of type A, B, or C contains chained generated clocks, they are included in the
analysis. (Figure 15-2 shows a generated clock in segment A.) If dynamic clock simulation
is in use to simulate complex clock circuits, all clock paths are included in the analysis.
Based on the path segments in Figure 15-2, the data path includes segments A, B, and D.
The clock path includes segments A and C. For a setup check, NanoTime uses the fastest
clock path time (shortest delays through segments A and C) and slowest data arrival time
(longest delays through segments A, B, and D):
P is the clock period, in which capture occurs on the next clock edge after the launch event.
A min is the minimum delay for path segment A, A max is the maximum delay for path
segment A, and similar notation represents delays for path segments B, C, and D.
However, the delay through path segment A cannot equal both A min and A max at the same
time. The two delay values for segment A in the calculation of the setup delay must be
equal, regardless of whether path-based slack adjustment is enabled. Therefore the A min
and A max terms in the setup calculation cancel. For this reason, the variables for path
segment A have no effect on the analysis.
A hold check examines whether a data signal is stable long enough that it does not switch
too soon after being captured. The slack S hold is the amount of time by which the data
signal maintains its value after the clock edge (negative slack means the data signal
switches too soon):
For a hold check, NanoTime uses the slowest clock path time (longest delays through
segments A and C) and fastest data arrival time (shortest delays through segments A, B,
and D):
As with the setup check, the delay through path segment A cannot equal both A min and
A max at the same time. Therefore the two delay values for segment A in the calculation of
S hold must be equal and they cancel.
When path-based slack adjustment is enabled, NanoTime adjusts each of the path delays
according to the values of the pbsa_* global variables.
In addition, the pbsa_KUsetup and pbsa_KUhold variables act as scaling factors for the
clock uncertainty value during setup or hold checks. When path-based slack adjustment is
enabled, these variables are generally set to 0 to disable the use of global clock uncertainty
values.
For completeness, the same parameters exist for all four path segments. However, the
delay of segment A cancels in all setup and hold analysis. Therefore these parameters do
not affect the results.
Table 15-3 PBSA Variables for Path Segments
Path Wire delay factor Cell delay Cell delay Cell delay level-based
(M W ) factor ( M T ) uncertainty derating factor
per Level ( M TL )
( ML )
timing_pbsa_gate_delay_only false If the value is false, the cell delay scale factor
variables apply to the total path delay, including
both wire and cell delay. If the value is true,
separate scale factors apply to the wire and cell
delays.
example, if the -Amax_factor option is set to 0.05, then previous adjustments based on the
pbsa_KAmax and pbsa_KALmax variables are ignored. The scale factor options are as
follows:
-Amax_factor -Cmax_factor
-Amin_factor -Cmin_factor
-Bmax_factor -Dmax_factor
-Bmin_factor -Dmin_factor
These options specify the amount of additional scaling to add to the default path delay. The
path segment delay is scaled by a factor of (1+value), where the value can be positive or
negative. For example, a value of 0.05 scales the default path delay by a factor of 1.05. A
value of zero results in a scale factor of 1, which sets the delay to its default (calculated
without path-based slack adjustment). A value of -1 results in a scale factor of zero, which
sets the delay to zero. Values less than -1 are not permitted for the -Amin_factor,
-Bmin_factor, -Cmin_factor, or -Dmin_factor options.
CLK
clkp
nclkp bclkp gclkp
For path-based slack adjustment on differential nets, the -skew_min and -skew_max options
of the set_differential command increase pessimism for minimum and maximum delay
analysis.
net Y
CLK
en
The common point variables apply to clock gates the same as they do to other reconvergent
circuits, as follows:
• To allow the reconvergent net at the clock gate output (net Y) to be the common point,
set the pbsa_allow_reconvergent_common_net variable to true.
• To require matching switching directions at all common points (whether net X or net Y),
set the pbsa_same_common_switching_direction variable to true (the default is
false).
• To require matching switching directions only at a reconvergent common point (net Y),
set the pbsa_same_edge_reconvergence_only variable to true (the default is false)
and leave the pbsa_same_common_switching_direction variable set to false.
pbsa_allow_reconvergent_common false If the value is true, the common net is the last
_net point of divergence.
pbsa_same_common_switching false If the value is true, the common net must switch
_direction in the same direction for both launch and
capture paths.
In this example, for each startpoint-endpoint pair, the trace_paths command keeps all
paths that have a slack within 0.15 time units of the worst path, up to a maximum of four
paths per startpoint-endpoint pair.
After path tracing is complete, the slack values reported by the report_paths command
reflect the adjustments made by path-based slack adjustment. To see the adjustments, use
the report_paths command with one of the -path_type full, -path_type
full_clock, or -path_type full_clock_expanded options.
If the analysis involves differential circuits, the header of the path report includes the name
of the common net and its differential complement, as follows:
Startpoint: clk2 (in port)
Endpoint: Xbreg.Xreg50.X5.Mp0.G
Path Type: max
Constraint: latch setup
PBSA Common Net: b2clkp
PBSA Complement: b2clkn
...
To find out how an adjustment is calculated from the path segment characteristics and
pbsa_* global variables, use the report_pbsa_calculation command. Given a path
retrieved with the get_timing_paths command, the report_pbsa_calculation
command reports the variable values, the original delay and level depth of the path
segments, and the components of the slack adjustment calculations.
The report contains optional components that depend on settings of the PBSA variables. For
example, wire delay scale factors appear only if wire delay analysis is enabled. Common
point delay details are shown if appropriate for the common point variable settings.
In the following example, the get_timing_paths command creates a collection of paths
taken from the paths stored in the path database, based on specified criteria. The
report_pbsa_calculation command operates on this collection and displays slack
adjustment information about the retrieved path.
nt_shell> report_pbsa_calculation [get_timing_paths -max -max_paths 1]
ADJUSTMENT CALCULATIONS
Adjustment Value
------------ ---------
type setup
common mode 0.000
uncertainty 0.000
clock path 0.711
data path 45.684
total slack -44.973
The clock path adjustment in the report includes any common mode adjustments. The data
path adjustment includes clock uncertainty.
You can change the variable values and run the report_pbsa_calculation command
again to see the changes to the adjustment values. However, changing the variables does
not immediately affect the path database or the path reports generated by the
report_paths command. To update the path database and path reports, use the
reset_design -paths command, followed by the trace_paths -pbsa command.
16-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
0.25 micron
interconnect line
insulator layer
substrate (ground)
0.13 micron
Crosstalk can affect signal delays by changing the times at which signal transitions occur.
For example, consider the signal waveforms A, B, and C on three cross-coupled nets,
shown in Figure 16-2.
Figure 16-2 Transition Slowdown or Speedup Caused by Crosstalk
Because of capacitive cross-coupling, the transitions on nets A and C can affect the time at
which the transition occurs on net B. A rising-edge transition on net A at the time shown in
Figure 16-2 can cause the transition to occur later on net B, possibly contributing to a setup
violation for a path containing B. Similarly, a falling-edge transition on net C can cause the
transition to occur earlier on net B, possibly contributing to a hold violation for a path
containing B.
NanoTime determines the worst-case changes in delay values and uses this additional
information to calculate and report total slack values. It also reports the sources and
amounts of the worst crosstalk delays so that you can change the design or the layout to
reduce crosstalk effects at critical points.
NanoTime also determines the logic effects of crosstalk noise on steady-state nets.
Figure 16-3 shows a noise bump due to crosstalk on cross-coupled nets A and B. Net B
should be constant at logic 0, but the rising edge on net A causes a noise bump on net B,
which could cause an incorrect logic value to be propagated to the next gate in the path.
Figure 16-3 Noise Bump Due to Crosstalk
NanoTime takes all of the factors into account when it calculates crosstalk effects. To
reduce computation time, it ignores situations where the cross-coupling capacitors are too
small to have an effect and cases where the transition times on cross-coupled nets cannot
overlap.
Figure 16-4 illustrates the importance of timing considerations for calculating crosstalk
effects. The aggressor signal A has a range of possible arrival times, from early to late.
Figure 16-4 Effects of Crosstalk at Different Arrival Times
Early
arrival
A
Late
arrival
If the transition on A occurs at about the same time as the transition on B, it could cause the
transition on B to occur later, as shown in the figure, possibly contributing to a setup
violation. Noise bumps at other times might not affect timing, but they can potentially
propagate incorrect logic values.
NanoTime calculates the delta delay for each load pin of a net. If the aggressor partially
overlaps with the victim's timing window, the partial effect (smaller delta delay) is
considered.
Figure 16-5 shows how timing windows can overlap. In this example, victim V1 is coupled
with aggressor A1. The timing arrival windows are 2 ns to 6 ns for the aggressor, and 5 ns
to 9 ns for the victim. Because the victim timing window overlaps with the aggressor timing
window, NanoTime calculates the crosstalk delta delay due to this aggressor.
Figure 16-5 Victim-Aggressor Switching Time Alignment
A1
I1
O1
I2
O2
V1
2 ns 5 6 9 ns
When there are multiple aggressors in the design, NanoTime finds the combination of
aggressors that can produce the worst crosstalk effect and calculates the crosstalk delta
delay for that combination. An example of multiple aggressor timing is shown in Figure 16-6.
Figure 16-6 Non-Overlapping Aggressors
A1
A2
A3
In this example, the victim net V has three cross-coupled aggressors. Because aggressor
A1’s timing window does not overlap with the victim’s window, NanoTime considers only A2
and A3 in the analysis. A2 and A3 do not overlap with each other; therefore, they cannot
both affect the victim at the same time. NanoTime analyzes only the stronger of the two
aggressors and sets switching in the direction that increases pessimism.
If A2 and A3 overlap, as shown in Figure 16-7, and there is no inversion constraint between
them, then both A2 and A3 are analyzed to switch in the direction of increased pessimism.
Since the victim signal is rising in the overlapping timing window, the most pessimistic
directions for the two aggressors are falling transitions for maximum delay analysis.
(Conversely, the aggressors would rise for minimum delay analysis.)
Figure 16-7 Overlapping Aggressors With No Inversion Constraint
A1
A2
A3
If there is an inversion constraint between aggressors A2 and A3, they switch in opposite
directions, as shown in Figure 16-8. In this case, they exert a smaller total effect on the
victim net. You can choose whether NanoTime considers this relationship in crosstalk delay
analysis. If you enable aggressor logic pessimism reduction, and A2 is stronger than A3,
NanoTime selects the stronger aggressor A2 to switch in the most pessimistic (falling)
direction; the weaker aggressor A3 switches in the opposite (rising) direction. The effects of
the two aggressors partially cancel so that the combined effect is the least pessimistic of the
three scenarios.
Figure 16-8 Overlapping Aggressors With Inversion Constraint
A1
A2
A3
50% 50%
of Vdd of Vdd
0V 0V
• In scenario (c), the aggressor arrival time occurs after the victim arrival time, during the
second half of the victim transition, but the aggressor transition begins before the victim
arrival time. (The victim arrival time occurs within the overlap timing window.) NanoTime
includes this situation in SI delay analysis.
• In scenario (d), the aggressor arrival time occurs after the victim arrival time and the
aggressor transition begins after the victim arrival time. In other words, the victim arrival
time does not occur within the overlap timing window. Even though the aggressor and
victim transitions overlap, this situation is considered to have minimal SI delay impact
and NanoTime does not include it in SI delay analysis.
Figure 16-10 Victim and Aggressor Net Switching Scenarios
50% 50%
of Vdd of Vdd
0V 0V
timing timing
window window
If an aggressor net and a victim net switch at nearly the same time, small changes in the
design might cause the scenario to change from overlapping to non-overlapping or vice
versa, possibly leading to larger than expected changes in crosstalk effects. To avoid this
occurrence, you can add an optional overlap tolerance to expand all timing windows.
The following settings can affect the signal switching times and slews and therefore might
change the timing window during signal integrity analysis:
• Timing model parameters such as the slew_derate_from_library parameter and the
slew threshold parameters
• NanoTime variables such as the rc_slew_*, rc_output_threshold_*, and
rc_input_threshold_* variables
These commands, variables, and model parameters affect the slew of a signal transition or
the percentage of the supply voltage at which the switching time should be measured. For
more information, see Effects of Slew Thresholds on Model Use and the command and
variable man pages.
If these assumptions result in overly pessimistic results, you can force a dangling net to
become a valid path endpoint for path tracing by identifying it as an output port and adding
an output delay constraint.
Cross-Coupling Models
Figure 16-11 shows the physical layout for a small portion of an integrated circuit and a
detailed model of the circuit that includes cross-coupled capacitance. Each physical
interconnection in the design has some distributed resistance along the conductor and some
parasitic capacitance to the substrate (ground) and to adjacent nets. A parasitic extraction
tool divides each net into subnets and represents the distributed resistance and capacitance
as a set of discrete resistors and capacitors.
Figure 16-11 Detailed Model of Cross-Coupled Nets
Physical layout
A
B
C
Circuit model
Aggressor net A
Receiver 2
Victim net B
Receiver 1
Driver
Aggressor net C
A detailed model such as this provides a very accurate prediction of crosstalk effects in
simulation. For an actual integrated circuit, however, a model might have too many circuit
elements to process in a practical amount of time. Given a reasonably accurate (but
sufficiently simple) network of cross-coupled capacitors from an external tool, NanoTime
obtains accurate crosstalk analysis results in a reasonable amount of time.
To ensure a reasonable runtime, NanoTime performs filtering of cross-coupling capacitors
and aggressor nets to remove from consideration capacitors and aggressors that are too
small to have a significant effect. You control the filtering thresholds by setting variables.
Consider
logic constraints
Select or
reselect nets
Calculate
delays
No
Exit
criteria
met?
Yes
Done
The goal of the first iteration is to quickly obtain worst-case delay values so that NanoTime
can intelligently select the nets for the next analysis iteration. For the first iteration,
NanoTime uses a conservative model that does not consider transition timing windows. In
other words, the assumption is that every aggressor net can have a transition at the worst
possible time. However, the first iteration can take logic constraints into account, such as
previously set victim-to-aggressor logic constraints. NanoTime also infers some simple
inverting and noninverting logic from the design.
In the second and subsequent iterations, NanoTime considers the possible times that
transitions can occur and their directions (rising or falling), and removes from consideration
any crosstalk delay changes that can never occur, based on the separation in time between
the aggressor and victim transitions. The result is a more accurate, less pessimistic analysis
of worst-case effects.
After each path tracing iteration, NanoTime selects a new set of nets for analysis in the next
iteration, based on the results of the analysis just completed. The tool reselects the
aggressor-victim pairs that have overlapping arrival windows and a large enough coupling
capacitance to require calculation of a revised stage delay.
If an aggressor-victim pair is reselected for analysis, NanoTime resimulates the stage with
the coupled net to get a more accurate delay calculation. For pairs not reselected, the
previously calculated delay values are retained from the previous iteration. In each
path-tracing iteration, changes in calculated delays and arrival windows can cause a
different set of nets to be reselected, and can cause different paths to be reported as the
worst-case paths.
After each path-tracing iteration, NanoTime generates a convergence report showing the
iteration number, the number of nets evaluated for crosstalk, and the maximum change in
delay caused by crosstalk. It then determines whether it has performed enough iterations,
based on the exit criteria. If so, it exits from the path tracing loop. Otherwise, it continues with
the next path-tracing iteration.
By default, NanoTime exits from the loop upon completion of the third iteration, which
typically provides good results in a reasonable amount of runtime. However, you can specify
the exit criteria to iterate further and obtain more accurate results at the expense of
additional runtime. You can also request an additional path-tracing iteration at any time by
running the continue_trace command.
Signal integrity analysis can be used at the same time as other iterative analysis features,
such as timing-based multi-input switching analysis and differential skew analysis. If more
than one type of iterative analysis is enabled, NanoTime updates the results for all enabled
features during each path tracing iteration until all iteration exit criteria for the enabled
features are satisfied.
Note:
In rare cases, oscillations between iterations might result, especially when strong
aggressors are logically constrained to switch in a direction that removes pessimism.
You should always use the worst-case results for your analysis and choose iteration exit
criteria that produce the worst-case results.
Crosstalk noise
To calculate noise bumps caused by signal crosstalk, NanoTime considers the coupling
capacitance between the aggressor nets and the victim net, the arrival windows of
aggressor transitions, the drive characteristics of the aggressor nets, and the
steady-state resistance characteristics of the victim net. This calculation is similar to
what is done for crosstalk delay analysis, except that it uses the steady-state load
characteristics (not the driver characteristics) of the driver on the victim net.
Propagated noise
Propagated noise on a victim net is caused by noise at an input of the cell that is driving
the victim net. NanoTime calculates propagated noise at a cell output, given the noise
bump at the cell input and the load on the cell output.
User-defined noise
You can specify a noise bump explicitly on any pin or port in the design. User-defined
noise can either override or add to any existing crosstalk noise that NanoTime has
calculated. User-defined crosstalk noise that propagates forward might also affect the
amount of fanout noise; however, NanoTime does not explicitly support user-defined
fanout noise.
Noise effects can have many different forms, such as bumps, ripples, and random noise.
NanoTime concentrates on the four types of noise bumps typically caused by aggressor net
transitions: above low, below low, above high, and below high, as shown in Figure 16-13.
Figure 16-13 Noise Bump Types
VDD
Aggressor
Net
GND
Bump
above high
VDD
Bump
Victim above low
Net Bump
below high
GND
Bump
below low
Bumps between the two rail voltages (above low and below high) can cause logic failure if
they exceed the logic thresholds of the technology. Bumps outside of the rail voltages (below
low and above high) can forward-bias pass gates at the inputs of flip-flops and latches,
allowing incorrect values to be latched.
By default, NanoTime assumes a worst-case combination of aggressor and victim states
and computes an injected noise waveform on the victim node. The computed maximum
noise voltage level is then compared to the user-specified noise margins to determine
whether a noise violation has occurred on a given node.
2. If you are using a SPICE netlist with embedded parasitics, use the link_design
command with the -keep_capacitive_coupling option.
3. If you are reading parasitic data from an SPEF file:
❍ Set the parasitics_read_variation variable to true if you want to read and use
the minimum and maximum capacitance values in addition to the typical values. The
default is false, which enables reading only the typical values.
❍ Use the read_parasitics command with the -keep_capacitive_coupling
option.
4. If you are reading parasitic data from a DSPF file, use the read_parasitics command
with the -keep_capacitive_coupling option.
5. (Optional) Set the si_enable_aggressor_logic_pessimism_reduction variable to
true to reduce the pessimism of the calculation. This variable affects both delay and
noise calculations. In both cases, you can define additional logic constraints to further
reduce pessimism.
6. (Optional) Set variables to account for cross-capacitance variability.
For delay analysis, the additional steps are:
1. (Optional) Specify nets that are to be included or not included for analysis by using the
set_si_delay_analysis command.
2. Specify parameters that determine the accuracy and speed of the delay analysis effort,
such as the criteria for ending the iterations and whether or not to analyze all paths.
3. Execute the trace_paths command at least one time for a conservative analysis, or two
or more times to converge on more accurate crosstalk analysis results.
4. (Optional) Reselect nets for analysis and use the continue_trace command to run
additional path tracing iterations.
5. Generate reports to examine the crosstalk delay effects.
For noise analysis, the additional steps are:
1. (Optional) Specify nets that are to be included or not included for analysis by using the
set_si_noise_analysis command.
2. Specify noise margins and choose whether or not to include noise beyond the rails.
3. (Optional) Inject user-defined noise on a port or pin to supersede or add to the noise that
NanoTime calculates.
4. Execute the update_noise command after the trace_paths or extract_model
command.
5. Generate reports to understand noise sources and their impact on circuit elements.
Both variables default to 0.0, which means that NanoTime does not consider any
coupling capacitance variation. Both variables allow only positive values, and the
parasitics_coupling_cap_variation_min variable must be less than 1.0 to prevent
calculation of a negative capacitance.
The coupling_capacitors attribute is associated with a victim net and contains a list of the
coupling capacitors acting on the victim net. The coupling_capacitors_max and
coupling_capacitors_min attributes contain the values of those capacitors after
adjustment for variation.
The list of aggressor nets acting on a victim net is available in the effective_aggressors
attribute associated with that victim net. The effective_aggressors_coupling_cap
attribute associated with the victim net contains the coupling capacitances associated with
the effective aggressor nets. The effective_aggressors_coupling_cap_max and
effective_aggressors_coupling_cap_min attributes contain the values of the coupling
capacitances after adjustment for variation.
During delay analysis, NanoTime applies the coupling capacitance variations so that the
worst-case delay is pessimistic. During noise analysis, NanoTime applies the variations so
that the noise bump is maximized.
For maximum SI delay calculation,
• Maximum coupling capacitance is used for aggressors that switch in the opposite
direction from the victim.
• Minimum coupling capacitance is used for aggressors that switch in the same direction
as the victim.
• Maximum coupling capacitance is used for nonswitching and filtered aggressors.
For minimum SI delay calculation,
• Maximum coupling capacitance is used for aggressors that switch in the same direction
as the victim.
• Minimum coupling capacitance is used for aggressors that switch in the opposite
direction from the victim.
• Minimum coupling capacitance is used for nonswitching and filtered aggressors.
For SI noise calculation,
• Maximum coupling capacitance is used for all switching aggressors.
• Minimum coupling capacitance is used for nonswitching and filtered aggressors.
si_filter_total_aggr_xcap_to_gcap_ratio 0.0
si_aggressive_filtering_total false
si_filter_per_aggr_xcap_to_gcap_ratio 0.0
si_filter_per_aggr_to_average_aggr_xcap_ratio 0.0
si_aggressive_filtering_per_aggr false
• The total coupling capacitance between the aggressor and victim nets divided by the
average cross-coupled capacitance between the victim net and all of its aggressor nets
is less than the value of the si_filter_per_aggr_to_average_aggr_xcap_ratio
variable.
Table 16-2 lists the variables that affect the use of logic constraints in crosstalk analysis.
The first three variables in the table affect how NanoTime computes timing windows. The
si_timing_window_overlap_tolerance variable specifies a margin in user time units
where two timing windows are considered to be overlapping. In effect, half of this value is
added to the beginning and half to the end of a computed timing window. If some aggressors
do not have valid timing windows, the si_aggressor_transition_default_fall and
si_aggressor_transition_default_rise variables provide default transition times for
them; this can happen if all paths were not exercised during path tracing.
Table 16-2 Variables for Logic Constraints in Crosstalk Analysis
Variable Default
si_timing_window_overlap_tolerance 0.0
si_aggressor_transition_default_fall 0.05
si_aggressor_transition_default_rise 0.05
si_enable_first_iteration_pessimism_reduction true
si_enable_aggressor_logic_pessimism_reduction false
si_enable_noise_aggressor_windows_pessimism_reduction false
The last three variables in Table 16-2 affect how NanoTime uses logic constraints. The tool
considers only structurally inferred logic constraints between victims and aggressors.
User-defined logic constraints, such as those created with the set_logic_constraint
command, are honored only when applied among aggressors.
Consideration of the logic constraints among a set of aggressors can reduce crosstalk delay
pessimism in several ways. For example, mutual exclusion constraints specify that only a
subset of aggressors can switch while other aggressors are inactive. This results in reduced
pessimism because a smaller subset of switching aggressors produces a smaller delay
effect or noise bump on the victim. Conversely, inversion constraints specify that not all
aggressors can switch in the same direction. Aggressors that switch in the opposite direction
produce a smaller effect on the victim due to cancelation.
Enable the use of logic constraints between aggressors during signal integrity analysis by
setting the si_enable_aggressor_logic_pessimism_reduction variable to true. When
this variable is set to false (the default), NanoTime follows the more pessimistic
assumption that all aggressors switch in the same direction.
During the first iteration, no timing window information exists. Therefore, NanoTime
considers only the logic constraints during the first iteration. This feature is enabled by
default and it improves the accuracy of the first iteration at the cost of increased runtime. The
accuracy of later iterations is not affected. You can disable the feature by setting the
si_enable_first_iteration_pessimism_reduction variable to false, which might
improve the total runtime for cases where NanoTime requires multiple iterations.
When you use aggressor logic constraints, NanoTime uses the aggressor timing windows in
both delay and noise analysis.
Table 16-3 and Table 16-4 describe the options for crosstalk delay and noise analysis. In
these tables, var1, var2, and var3 represent the following NanoTime variables:
• Var1 is the si_enable_first_iteration_pessimism_reduction variable.
• Var2 is the si_enable_aggressor_logic_pessimism_reduction variable.
• Var3 is the si_enable_noise_aggressor_windows_pessimism_reduction variable.
Table 16-3 Crosstalk Delay Analysis Options
Yes, if var2 = true OR var3 = true Inversion only Yes, if var2 = true
The -one_hot and -one_off options for pessimism reduction are mutually exclusive.
Because a -one_hot logic constraint asserts that precisely one net in a constrained group
of nets is high at any time, it might also imply an inversion between a single switching
aggressor and some other aggressor. NanoTime does not consider additional pessimism
reduction that can be achieved from the cancelation resulting from an inversion implied by a
-one_hot logic constraint. Effectively, this means the -one_hot logic constraint among a set
of aggressors is treated no differently than the -at_most_one_hot logic constraint.
analysis might not satisfy all of the constraints and therefore might not achieve the maximum
possible pessimism reduction.
NanoTime does not consider optimizations that fully analyze the tradeoffs among
overlapping mutual exclusion constraints to determine a logically consistent subset of
switching aggressors that maximize the possible pessimism reduction.
For noise analysis, runtime is highly dependent on the number and size of aggressor logic
constraints. To trade off runtime versus the diminishing benefits of additional pessimism
reduction, NanoTime ignores the analysis of logic constraints involving some weaker noise
aggressors and considers such aggressors to switch independently.
2. If you are using a SPICE netlist with embedded parasitics, use the
-keep_capacitive_coupling option with the link_design command.
2. (Optional) Specify parameters that determine the accuracy and speed of the delay
analysis effort, such as the criteria for ending the iterations and whether or not to analyze
all paths, as discussed later in this section.
3. Execute the trace_paths command at least one time for a conservative analysis, or two
or more times to converge on more accurate crosstalk analysis results.
4. (Optional) Reselect nets for analysis and use the continue_trace command to run
additional path tracing iterations.
5. Generate reports to examine the crosstalk delay effects.
For subsequent delay calculation iterations, NanoTime reselects the aggressor-victim pairs
that have overlapping arrival windows and a large enough coupling capacitance to require
calculation of a revised stage delay. You can also have NanoTime reselect specific nets by
using the set_si_delay_analysis -reselect command.
The set_si_delay_analysis command lets you include or exclude nets for crosstalk
delay analysis in the following ways:
• Reselect specific nets in all subsequent iterations, even if they do not meet the usual
reselection criteria
• Set specific nets to use infinite arrival windows
• Exclude specific nets as aggressors
• Exclude specific nets as victims
• Exclude specific aggressor-victim relationships between net pairs
Table 16-5 lists the variables that affect net selection and reselection. See the man pages
for more information about these variables.
Table 16-5 Variables Affecting Net Selection in Crosstalk Delay Analysis
Variable Default
si_xtalk_reselect_delta_delay 0.0
si_xtalk_reselect_delta_delay_ratio 0.0
si_timing_window_overlap_tolerance 0.0
si_aggressor_transition_default_fall 0.05
si_aggressor_transition_default_rise 0.05
si_exclusion_cap_factor_max 1.0
si_exclusion_cap_factor_min 1.0
Net Reselection
NanoTime reselects any net that satisfies either or both of the following conditions:
• The change in stage delay (positive or negative) caused by crosstalk in the previous
iteration exceeds the amount specified by the si_xtalk_reselect_delta_delay
variable. For example, a setting of 5 causes a net to be reselected if its delay value
changes by 5 ps or more from the previous iteration.
• The change in stage delay (either positive or negative) caused by crosstalk analysis in
the previous iteration, when divided by the total stage delay, gives a ratio that exceeds
the amount specified by the si_xtalk_reselect_delta_delay_ratio variable. For
example, a setting of 0.95 causes a net to be reselected if its calculated stage delay is
less than or equal to 95 percent of its previous value.
Stage delay is the delay of a stage (one cell and its fanout net). Crosstalk analysis in the
previous iteration might have caused a change in the calculated worst-case delay: a
decrease in delay for a minimum analysis or an increase in delay for a maximum analysis.
If the amount of change is large enough, the net in that stage is reselected for further
analysis.
Typically, the change in calculated delay becomes smaller and smaller for successive
analysis iterations, as the analysis becomes more and more accurate. Reselecting nets
based on the amount of delay change is a way to ensure accurate results.
The set_si_delay_analysis command lets you reselect specific nets in all subsequent
iterations for crosstalk analysis, even if those nets do not meet the usual reselection criteria.
For example, you might want NanoTime to analyze reset signals (RESET1, RESET2, and
so on) for crosstalk effects in all analysis iterations, even though they might not meet the
usual reselection criteria. To ensure that these nets are reselected, enter the following:
nt_shell> set_si_delay_analysis -reselect [get_nets RESET*]
Note:
Forced reselection of nets might cause a significant increase in runtime.
To generate a report of the nets affected by the set_si_delay_analysis command, use
the report_si_delay_analysis command. To remove the effects of the
set_si_delay_analysis command, use the remove_si_delay_analysis command.
To exclude a specific net from consideration as a victim net, use the -exclude option with
the set_si_delay_analysis command. In the following example, the clock net CLK1 is
excluded. NanoTime does not consider net CLK1 to be a potential victim net for crosstalk
delay analysis, thereby reducing the analysis runtime. However, CLK1 can still be
considered as an aggressor net.
nt_shell> set_si_delay_analysis -exclude -victims [get_nets CLK1]
To exclude specific aggressor-victim net pair relationships, use the -exclude option with
both the -victims and -aggressors options. For example, you might know that the scan
clock signals (SCN_CLK_*) and clock network signals (CLK_NET_*) in your design do not
affect each other for timing. Eliminate these crosstalk effects from consideration as follows:
nt_shell> set_si_delay_analysis -exclude -aggressors \
[get_nets SCN_CLK_*] -victims [get_nets CLK_NET*]
The first of these two commands removes from consideration any SCN_CLK_* signal as an
aggressor to any CLK_NET* signal as a victim during crosstalk delay analysis. The second
command removes from consideration the aggressor-victim relationships of these signals in
the opposite direction. However, these signals can still be considered aggressors or victims
relative to signals not mentioned in the commands. For example, CLK_NET1 can still be
considered an aggressor to CLK_NET2 as a victim.
For example, if nets AGGR1 and VICT1 have a 4 pF coupling capacitor between them, the
following command excludes both nets from crosstalk analysis and adds a 4 pF capacitor to
ground from each of them:
nt_shell> set_si_delay_analysis -exclude -aggressors AGGR1 -victims VICT1
The next example demonstrates the use of different net-specific coupling factors for min and
max analysis. The original 4 pF coupling capacitor is replaced by two 4.8 pF grounded
capacitors (one on each net) during maximum delay analysis and two 3.2 pF grounded
capacitors (one on each net) during minimum delay analysis.
nt_shell> set_si_delay_analysis -exclude -aggressors AGGR1 \
-victims VICT1 -max -coupling_factor 1.2
nt_shell> set_si_delay_analysis -exclude -aggressors AGGR1 \
-victims VICT1 -min -coupling_factor 0.8
To exclude the net V from consideration as a victim for crosstalk, use the following
command. The excluded list for net V would be {A1 A2 A3}:
nt_shell> set_si_delay_analysis -exclude -victims V
Even though the exclusion on net V implies that A1 is excluded as an aggressor for net V,
you cannot use the remove_si_delay_analysis -aggressors command to remove the
exclusion between nets V and A1. This is because no exclusion was directly set on net A1.
Therefore, after the following command, the excluded list for net V is still {A1 A2 A3}:
nt_shell> remove_si_delay_analysis -aggressors A1
Warning: Cannot remove global separation or exclusion that
was not set on net(s) A1. (XTALK-107)
Similarly, even though the exclusion on net V implies that A2 is excluded as an aggressor
for V, this exclusion cannot be removed by using the victim-aggressor option because no
exclusion was directly set for the victim-aggressor pair V and A2. Therefore, after the
following command, the excluded list for net V would still be {A1 A2 A3}:
nt_shell> remove_si_delay_analysis -victims V -aggressors A2
Warning: Cannot remove global separation or exclusion that
was not set on net(s) V A2. (XTALK-107)
Only exclusions that were applied directly can be removed. If you issue the following
command, the effect of the set_si_delay_analysis -exclude -victims V command is
reversed, and the excluded list is empty:
nt_shell> remove_si_delay_analysis -victims V
updates the results for both of them during each path tracing iteration. Analysis stops when
all iteration exit criteria related to both types of analysis are satisfied.
The variables that control loop exit criteria are listed in Table 16-6. See the man pages for
more information about these variables.
Table 16-6 Crosstalk Delay Analysis Exit Criteria Variables
Variable Default
si_xtalk_exit_on_max_iteration_count 3
si_xtalk_exit_on_min_delta_delay 0.0
si_xtalk_exit_on_max_delta_delay 0.0
si_xtalk_exit_on_number_of_reevaluated_nets 0
si_xtalk_exit_on_reevaluated_nets_pct 0.0
si_xtalk_exit_on_coupled_reevaluated_nets_pct 0.0
No matter which exit criteria you specify, the loop is always terminated if no nets are
reselected for the next iteration. This condition can occur if no cross-coupled nets meet the
delta delay and slack reselection criteria.
In addition, NanoTime terminates the crosstalk analysis loop after performing an iteration
when any of the following conditions is true:
• The number of completed iterations equals the value of the
si_xtalk_exit_on_max_iteration_count variable. The default is 3.
• The percentage of reselected nets, compared to the total number of nets, is less than the
value of the si_xtalk_exit_on_reevaluated_nets_pct variable.
• The percentage of reselected nets, compared to the total number of cross-coupled nets,
is less than the value of the si_xtalk_exit_on_coupled_reevaluated_nets_pct
variable.
• All delta delays fall between the values of the si_xtalk_exit_on_max_delta_delay
and si_xtalk_exit_on_min_delta_delay variables.
Be sure to specify an appropriate set of exit criteria. For example, if you set a large
maximum iteration count without changing the other variables from their defaults, the
analysis run could be very long, with little or no gain in accuracy.
You can terminate an analysis in progress by pressing Ctrl+C one time. NanoTime
completes the current analysis iteration before exiting from the loop. Note that pressing
Ctrl+C multiple times causes an exit from NanoTime upon completion of the loop.
Iteration Count
The si_xtalk_exit_on_max_iteration_count variable sets the maximum iteration
count. To force a specific number of analysis iterations, set this variable without changing
any of the other variables. For example,
nt_shell> set si_xtalk_exit_on_max_iteration_count 4
If you also change some of the other exit criteria variables from their defaults, NanoTime
examines the results of each iteration to determine whether more iterations are needed. An
analysis of just one iteration is possible, depending on the design and the exit criteria.
By default, all of these variables are set to zero, causing them to be ignored. If you choose
to set these variables, you should also increase the maximum iteration count variable from
its default of 3.
Delta Delay
When crosstalk analysis causes only a small change in calculated delays, it is an indication
that the analysis is fairly accurate. You can terminate the analysis loop when the largest
changes in calculated delay among all nets analyzed is within a specified range. You specify
the thresholds separately for minimum (hold) delays and maximum (setup) delays.
NanoTime exits the analysis loop after completing the current iteration if the delta delay
value for the next iteration falls within the range defined by the
si_xtalk_exit_on_max_delta_delay and si_xtalk_exit_on_min_delta_delay
variables.
Both variables default to zero, which means that the range between them is zero and no
delays can meet the requirement. You must set at least one of the variables to a nonzero
value to use delta delay as an exit criterion. Specify the minimum delay threshold as a
negative value and the maximum delay threshold as a positive value, in library time units.
For example, to terminate the analysis loop when the delay change is between –1.0 and
+2.0 time units, use the following commands:
nt_shell> set si_xtalk_exit_on_min_delta_delay -1.0
nt_shell> set si_xtalk_exit_on_max_delta_delay 2.0
For a design that has deltas of {-3, 1.5, 1.7}, the value -3 falls outside the window (-1.0 to
2.0), so NanoTime does not exit the analysis loop. If in the next iteration the failing value
improves to 0.9, all deltas fall within the window and NanoTime terminates crosstalk
analysis.
************************************************
Report: si convergence
Design: ALU
Version: G-2012.06
Date: Tue Aug 14 [Link] 2012
************************************************
Convergence Criteria Value Limit status
-------------------- ---------- -------- ---------
number of nets 7463
number of coupled nets 256
number of effective nets 256
In this example, the only iteration exit criterion is the number of iterations. The default of 0.0
appears for the other limits if you do not explicitly set them.
The delta delay values are the changes in calculated minimum and maximum delays from
one iteration to the next. The minimum delta delay is always written as a negative value. For
example, if the minimum delay is -8.0 after the first iteration and -6.0 after the second
iteration, the minimum delta delay is displayed as -2.0 even though the value changed by
+2.0 units.
An example of a convergence report with delta delay exit criteria is shown here:
************************************************
Report: si convergence
Design: ALU
Version: G-2012.06
Date: Wed Sep 26 [Link] 2012
************************************************
Convergence Criteria Value Limit status
-------------------- ---------- -------- ---------
number of nets 7463
number of coupled nets 256
number of effective nets 256
current iteration 2 4
reevaluated nets 255 0
reevaluated nets pct 3.42 0.00
coupled reevaluated nets pct 99.61 0.00
delta delay met
max 0.5728 0.6000
min -0.3745 -0.3900
In this example, the analysis exits after the second iteration because the delta delay criteria
have been met: both the maximum and minimum delay values fall between the limits. You
set the limits with the si_xtalk_exit_on_max_delta_delay and
si_xtalk_exit_on_min_delta_delay variables.
************************************************
Report: si crosstalk delay sources
Design: ALU
Version: G-2012.06
Date: Wed Sep 12 [Link] 2012
************************************************
rising falling
coupling percent aggressor aggressor max delta min delta
cap of total trans trans delay delay Victim net aggressor net
-------- --------- --------- --------- --------- --------- ----------- ---------------
0.005 3.35 1.304 0.689 0.573 -0.374 SM9 SM59
0.005 3.07 0.336 0.370 0.573 -0.374 A[9] A[5]
0.005 2.80 0.531 0.283 0.546 -0.374 S[9] S[3]
...
To add a column that displays the percentage of the total crosstalk delay contributed by
each aggressor net, use the -aggressor_contributions option. To add columns that
display the maximum and minimum delta delays as percentages of the total stage delay, use
the -delta_delay_ratio option. To list the aggressors in order of decreasing maximum
delta delay ratio, use the -cost_type delta_delay_ratio option.
If the crosstalk analysis includes coupling capacitance variation, the coupling cap column
lists the range of capacitance values in the format [minimum capacitance, maximum
capacitance]. However, percentage calculations are based on the nominal (typical)
capacitance.
************************************************
Report: si nets
Design: ALU
Version: G-2012.06
Date: Mon Aug 20 [Link] 2012
************************************************
The following is an example of the resulting report. The values in the Xtalk Delta column
show the incremental change in arrival time due to crosstalk effects. The values in the Incr
column already include the calculated delta delay.
Startpoint: clk2 (in port)
Endpoint: Xbreg.Xreg50.X5.Mp0.G
Path Type: max
Constraint: latch setup
Xtalk
Path Incr Adjust Delta NT Point
------ -------- -------- -------- -- -- ------------------------------
1.500 1.500 C r clk2 (in)
1.630 0.130 0.000 C r [Link].Xi0.X0.Mn0.G (inv2)
1.702 0.072 0.000 C f [Link].Xi0.X1.Mp0.G (inv2)
1.857 0.154 0.000 C r [Link].Xb00.X0.Mn0.G (inv2)
1.934 0.077 0.000 C f [Link].Xb00.X1.Mp0.G (inv2)
2.112 0.178 0.000 C r [Link].Xla0.XP0.Mn0.G (Pterm)
2.334 0.222 0.000 N1 f [Link].Xla0.XP0.X0.X0.Mp0.G
...
6.918 0.290 0.000 r [Link].Xfa51.Mn3.G (fadd)
7.594 0.676 0.000 r [Link].Xfa51.X6.X0.Mn0.G (inv)
7.736 0.142 0.000 f [Link].Xfa51.X6.X1.Mp0.G (inv)
8.466 0.729 0.000 r Xlc51.X5.Mn0.G (inv3)
8.721 0.255 0.000 f Xls50.X5.Mp0.G (inv2)
9.385 0.664 0.269 r Xbreg.Xreg50.Mn4.G (muxflop)
9.682 0.297 0.000 L f Xbreg.Xreg50.X5.Mp0.G (inv2)
9.682 data arrival time
9.395 0.287 0.269 Total
See Chapter 17, “Object Attributes” for more information about specific attributes and
information about how to access these attributes from the Tcl shell.
2. If you are using a SPICE netlist with embedded parasitics, use the link_design
command with the -keep_capacitive_coupling option.
2. Specify noise margins and choose whether or not to include noise beyond the rails.
3. (Optional) Define global or local values for steady state resistances on library pins.
4. (Optional) Inject user-defined noise on a port or pin to supersede or add to the noise that
NanoTime calculates.
5. Execute the update_noise command after the trace_paths or extract_model
command in the NanoTime flow.
6. Generate reports to understand noise sources and their impact on circuit elements.
For fanout noise analysis, the additional steps are:
1. Specify noise margins and thresholds.
2. (Optional) Inject user-defined noise on a port or pin to supersede or add to the noise that
NanoTime calculates.
3. Execute the update_noise command after the trace_paths or extract_model
command in the NanoTime flow.
4. Generate reports to examine fanout noise results, such as noise pulse shape.
The update_noise command initiates the crosstalk noise analysis and the report_noise
command displays the results.
• Limits on the path transparency depth can affect the accuracy of timing windows on
downstream nets. Check the trace_transparency_depth_limit variable with respect
to your design.
• Timing windows within transparent loops might be incorrect if path tracing through those
loops is not enabled. By default, NanoTime does not search through transparent loops.
If your design contains transparent loops, set the trace_transparent_loop_checking
and trace_transparent_inverting_loops variables appropriately.
• If latch error recovery is disabled, timing windows downstream from the latch net might
be incorrectly limited. Check the trace_latch_error_recovery variable setting with
respect to your design.
• If you use the set_find_path command to limit path tracing, paths that are not
searched have infinite timing windows, which might lead to overly pessimistic results.
• If path tracing through precharge paths is disabled, timing windows on nets downstream
from a precharge net might be incorrectly limited. Check the settings of all of the
timing_precharge_* variables with respect to your design. Examples include the
timing_precharge_contention_recovery and
timing_precharge_min_latch_transparency variables.
The following conditions apply to the model extraction flow (executing the update_noise
command after the extract_model command):
• NanoTime creates context-independent models by default. Nets between the primary
inputs and the boundary input latches have infinite timing windows. Any net in a path
downstream from a boundary input latch has a maximum allowable timing window based
on transparency from any input arrival. The resulting noise analysis might be overly
pessimistic because of the large timing windows.
Alternatively, you can generate context-dependent timing models by using the
-context_dependent option. In this case, you must ensure that the input context has
enough margin to cover most of the environments in which the timing model could be
used. Use the set_input_delay command to set the conditions.
• If you create transparent models (using the -non_transparent option) or models with
ignored transparency (using the -ignore_input_to_output_transparency option),
the timing windows from the output boundary latches to the primary outputs might shrink.
Limiting the transparency depth (using the -latch_level option) can also reduce timing
windows downstream from the affected nets. The resulting noise analysis might be
overly optimistic because of the small timing windows.
• Ignoring paths from ports (using the -ignore_ports option) might remove or limit timing
windows on downstream nets.
• Including only specific paths in the model (using the -find_path_only option) produces
infinite timing windows on nets that are not searched.
Variable Default
si_timing_window_overlap_tolerance 0.0
si_aggressor_transition_default_fall 0.05
si_aggressor_transition_default_rise 0.05
si_exclusion_cap_factor_max 1.0
si_exclusion_cap_factor_min 1.0
VDD
peak
noise bump
triangular approximation
height
GND
time-to-peak
Choose the width to make the triangle model area equal the actual noise bump area.
Choose the time-to-peak ratio to make the area of the noise bump that occurs before the
peak voltage equal that of the actual noise.
Use the set_input_noise command with a list of affected ports or pins to define injected
noise. Specify the three geometry parameters of the triangular noise model by using the
-height, -width , and -time_to_peak_ratio options. In addition, you can limit the type
of noise with the appropriate combination of -above, -below, -high, and -low options.
If the -add_noise option is not present, user-defined injected noise overrides previously
calculated noise. If the -add_noise option is present, NanoTime aligns the peak of the
user-defined triangular injected noise with the peak of any injected noise that was previously
calculated.
Use the remove_input_noise command to remove user-defined injected noise.
lib_pin_steady_state_resistance_above_high
The holding resistance used for injected noise above the supply rail.
lib_pin_steady_state_resistance_below_low
The holding resistance used for injected noise below the ground rail.
lib_pin_steady_state_resistance_above_high
The holding resistance used for injected noise below the supply rail.
To override the global values and define resistances on specific library pins, use the
set_steady_state_resistance command. To remove a specific setting, use the
remove_steady_state_resistance command
All holding resistance values are in ohms. The steady_state_resistances attribute for a
library pin (associated with the lib_pin object class) contains all four resistances.
In all cases, the value is a positive delta voltage that is either added to the ground voltage or
subtracted from the supply voltage. Values of zero indicate that no noise is allowed and all
detected noise is in violation.
By default, NanoTime checks and reports only the below high and above low types of noise.
You can enable the checking and reporting of the other noise violations with the
set_noise_parameters -include_beyond_rails command.
To override the global noise margins and define noise margins on specific objects (pins,
ports and nets), use the set_noise_margin command.
In this example, the worst slack for above high noise is 0.0, which means that there are no
noise violations for this type of noise. The report does not list any pins for below low noise,
which means that no pins exhibit this type of noise.
You can include all of the pins with noise margin violations (i.e. having negative slack) by
using the -all_violators option. To report specific noise types, use the -above, -below,
-low, and -high options in combination. The -nworst N option displays the worst N values
of each type of noise.
If you want to report all noise values and not just those with violations, use the
-slack_lesser_than and -height_greater_than options to select pins based on the
noise values.
An expanded noise report is shown here:
nt_shell> report_noise
************************************************
Report: si noise values
Design: ALU
Version: G-2012.06
Date: Thu Sep 27 [Link] 2012
************************************************
Noise Types:
AH - Above High, noise above the supply rail
AL - Above Low, noise above the ground rail
BH - Below High, noise below the supply rail
BL - Below Low, noise below the ground rail
The -shape option adds two columns to the report: the noise bump width and time-to-peak
ratio. The values reported with the -shape option depend on how you used the
set_input_noise command.
• Without the -add_noise option, the values correspond to the user-defined injected
noise.
• With the -add_noise option, the values correspond to a new triangular model that is
fitted to a composite noise waveform consisting of user-defined noise and any other
injection noise that NanoTime might have calculated.
You can include an optional column of data containing estimates of the percentage of the
total noise height contributed by each individual aggressor net. To report the aggressor net
contributions, use the -aggressor_contributions option.
You can also include an optional column that displays the timing windows for each of the
individual noise aggressors by using the -aggressor_windows option.
An aggressor timing window description appears in one of the formats shown in Figure 16-8,
where min represents the smallest minimum delay arrival time, max represents the largest
maximum delay arrival time, clk is the name of the associated clock, and dir is R or F for the
transition direction of the clock reference edge.
Format Description
(min max) A timing window for a nonperiodic non-clock domain; both minimum and
maximum delay arrival times exist for this window
(INF INF) A timing window for a nonperiodic non-clock domain, but no arrival times
exist for this window
(min INF) A timing window for a nonperiodic non-clock domain; no maximum delay
arrival times exist for this window
(INF max) A timing window for a nonperiodic non-clock domain; no minimum delay
arrival times exist for this window
(min max clk dir) A timing window for a periodic clock domain; both minimum and
maximum delay arrival times exist for this window
(INF INF clk dir) A timing window for a periodic clock domain, but no arrival times exist for
this window
(min INF clk dir) A timing window for a periodic clock domain; no maximum delay arrival
times exist for this window
(INF max clk dir) A timing window for a periodic clock domain; no minimum delay arrival
times exist for this window
An example report with the -aggressor_windows option is shown here. A single aggressor
might have more than one timing window, in which case the report shows all of them in the
last column.
nt_shell> report_noise_violation_sources
...
coup pct of aggressor noise aggressor aggressor
cap total trans slack type Victim pin net window
----- ------ ---------- ------ ---- ------------------- --------- ------------------
0.005 2.80 0.283 (F) -0.949 BH Xareg.Xreg9.Mp4.G S[3] (2.475 5.740 clk2 R)
0.005 3.06 0.271 (F) -0.916 BH Xareg.Xreg22.Mp4.G S[6] (INF 3.992 clk1 R)
0.005 3.17 0.273 (F) -0.893 BH Xareg.Xreg0.Mp4.G S[0] (1.070 3.180 MCLK R)
0.005 2.83 0.382 (R) -0.458 AL [Link].Mn1.G B[44] (INF INF clk1 R)
...
See Chapter 17, “Object Attributes” for more information about specific attributes and for
information about how to access these attributes from the Tcl shell.
A user-defined injected noise bump, if present, contributes to the trigger for calculating
fanout noise and can therefore influence the amount of fanout noise. If you do not use the
-add_noise option of the set_input_noise command, the user-defined injected noise
bump is considered the trigger for fanout noise calculation. If you use the -add_noise
option, the aligned sum of both the user-defined and calculated injected noise bumps is
considered as the trigger for fanout noise calculation.
This section includes the following topics:
• Overview of Fanout Noise Analysis Procedure
• Setting Fanout Noise Thresholds
• Setting Fanout Noise Margins
• Reporting Fanout Noise Analysis
3. (Optional) Set thresholds to determine whether noise on the victim net should be
considered for fanout noise analysis.
4. Set global noise margins to test fanout noise levels.
5. (Optional) Set noise margins for fanout noise tests on specific pins or nets.
6. Execute the update_noise command.
7. Report the noise analysis by running the report_fanout_noise command or by
examining noise-related attributes on the fanout nets.
8. (Optional) Write a SPICE deck that includes injected and fanout noise.
In all cases, the threshold is a positive voltage value that is either added to the ground
voltage or subtracted from the supply voltage. The threshold defaults are zero, which means
that every noise peak is propagated forward for fanout analysis.
The following commands allow NanoTime to propagate only the noise bumps that are at
least 0.05 V above the ground rail or at least 0.07 V below the supply rail:
nt_shell> set si_fanout_noise_threshold_above_low 0.05
nt_shell> set si_fanout_noise_threshold_below_high 0.07
The following command sets a fanout noise threshold of 0.2 V for peaks above the ground
rail on pin Xxor2.NM1.g:
nt_shell> set_fanout_noise_threshold -above -low 0.2 Xxor2.MN1.g
Fanout noise does not consider noise outside of the rails. Only the -above -low and -below
-high combinations are valid for the set_fanout_noise_threshold command.
In both cases, the value is a positive voltage value that is a delta voltage which is either
added to the ground voltage or subtracted from the supply voltage. Values of zero indicate
that no noise is allowed and all detected noise is in violation.
The report_fanout_noise command reports the effect of noise waveforms that propagate
from pins that have noise, through the driven channel-connected region, then to the fanout
net. The original noise victim pin and the noise peaks are listed in the report. The fanout net
and propagated noise values are also listed by type.
An example of a fanout noise report is as follows:
report_fanout_noise -significant_digits 5 -nworst 2
****************************************
Report : si fanout noise values
Design : ALU
...
****************************************
Noise Types:
AL - Above Low, noise above the ground rail
BH - Below High, noise below the supply rail
The noise slacks displayed by the report_fanout_noise are based on the peak heights of
the fanout noise bumps.
Custom reporting is also available by accessing attributes of a net object. The following
attributes are related to fanout noise analysis:
si_fanout_noise_peak_above_low
si_fanout_noise_peak_below_high
si_fanout_noise_time_to_peak_above_low
si_fanout_noise_time_to_peak_below_high
si_fanout_noise_width_above_low
si_fanout_noise_width_below_high
See Chapter 17, “Object Attributes” for more information about fanout noise attributes and
information about how to access these attributes from the Tcl shell.
Tables organized by object class list the NanoTime attributes and descriptions.
17-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Using Attributes
Table 17-1lists the commands for working with attributes in NanoTime.
Table 17-1 Attribute Commands
Attributes Description
get_attribute Retrieves the value of one attribute associated with one object.
report_attribute Displays the values of all attributes associated with one or more
objects.
****************************************
Report : List of Attribute Definitions
...
****************************************
Properties:
A - Application-defined
U - User-defined
I - Importable from design/library (for user-defined)
****************************************
Report : Attribute
...
****************************************
The following command obtains multiple attributes, creates a collection, and iterates through
the collection:
foreach_in_collection snets [get_nets Sn*] {
set maxcap [get_attribute $snets \
total_capacitance_fall_max]
set netname [get_attribute $snets full_name]
echo "total cap. fall max of net $netname is $maxcap"
}
The command finds the nets named Sn*, gets the value of the maxcap attribute, and reports
the net names and corresponding maxcap values.
Even though the variables paths1 and paths2 contain some of the same objects, the
collections cannot be compared because they come from different contexts. To do such
comparisons, create one large collection containing all the objects of interest, and then
perform filtering or other manipulation on that collection.
Use the foreach_in_collection command to iterate among the paths in the collection.
The collection commands index_collection, copy_collection, add_to_collection,
and remove_from_collection are not applicable to timing path collections. You can use
the get_attribute command to obtain information about the paths.
One attribute of a timing path is the points collection. A point corresponds to a pin or port
along the path. See Table 17-21 on page 17-74 for supported attributes for points of a timing
path. Iterate through these points by using the foreach_in_collection command and
get the attributes on them by using the get_attribute command.
For more information, see the man pages for the foreach_in_collection and
get_timing_paths commands.
The following procedure prints out the startpoint name, endpoint name, and the slack of the
worst path in each path group.
proc custom_report_max_path_slack {} {
echo [format "%-20s %-50s %-20s" "From" "To" "Slack"]
echo
"----------------------------------------------------------------------"
foreach_in_collection path [get_timing_paths -max] {
set slack [get_attribute $path slack]
set startpoint [get_attribute $path startpoint]
set endpoint [get_attribute $path endpoint]
foreach_in_collection sp $startpoint {
foreach_in_collection obj [get_attribute $sp object] {
set spo [get_attribute $obj full_name]
}
}
foreach_in_collection ep $endpoint {
foreach_in_collection obj [get_attribute $ep object] {
set epo [get_attribute $obj full_name]
}
}
echo [format "%-20s %-50s %-20f" $spo $epo $slack]
}
}
nt_shell> custom_report_max_path_slack
From To Slack
---------------------------------------------------------
clk2 Xbreg.Xreg50.X5.Mp0.G -2.728385
sub Xbreg.Xreg50.X5.Mp0.G -2.528385
Use the foreach_in_collection command to iterate among the arcs in the collection.
You can use the get_attribute command to obtain information about the arcs. However,
you cannot copy, sort, or index the collection of arcs.
The following example shows a Tcl procedure to list the channel-connected switching nets
in all the arcs of a single path.
proc report_switching_nets_of_path { args } {
set results(-path_id) ""
parse_proc_arguments -args $args results
set anum 1
set item 0
foreach_in_collection tpath [get_timing_paths -path_id [split
$results(-path_id) ,]] {
echo "\n==========";
echo "Path ID [lindex [split $results(-path_id) ,] $item]";
echo "==========";
foreach_in_collection arc [get_attribute $tpath arcs] {
echo "Arc $anum channel-connected switching nets"
incr anum
foreach_in_collection snet [get_attribute $arc switching_nets] {
echo "\t[get_attribute $snet full_name]"
}
}
set anum 1
incr item
}
}
=============
Path ID 60966
=============
Arc 1 channel-connected switching nets
HOLDA
Arc 2 channel-connected switching nets
Xareg.hld13
Arc 3 channel-connected switching nets
Xareg.hld50
is_clock Boolean The value is true if the cell is part of the clock
network.
output_departure_time float Output arrival time with respect to the given launch
clock domain. The time is specified as following the
launch clock edge.
direction string The direction of a pin. The value can be in, out,
inout, or internal.
base_name string The name of the library topology element. For example,
for a user-defined topology named muxflop, the attribute
has the value of muxflop.
full_name string The full name of the library topology including the
topology library name. For example, for a user-defined
topology named muxflop residing in a topology library
named user_topo_lib, the attribute has the value of
user_topo_ [Link].
library_base_name string The name of the topology library. For example, for a
user-defined topology library named user_topo_lib, the
attribute has the value of user_topo_lib.
library_full_name string The full path of the topology library. For example, for a
user-defined topology library named user_topo_lib
residing at /USER/TOPODB/PATH, the attribute has the
value of /USER/TOPODB/PATH/user_topo_lib.
matched_count integer The total number of times that the queried library topology
element was matched in the source netlist.
search_enabled Boolean The value is true if the queried library topology element
has been enabled for search using the
set_search_enabled or create_lib_topology
–enable_search command.
is_pulse_end Boolean The value is true if the clock domain represents the end of
a pulse.
is_pulse_start Boolean The value is true if the clock domain represents the start
of a pulse.
reference_clock_domain collection The reference clock domain of the queried clock domain.
reference_edge_shift float The time shift from the reference clock domain to the
queried clock domain.
transition_direction string The switching direction of the clock that is part of the clock
domain. The value is either rising or falling.
base_name string The leaf name of a net. For example, the base
name of net i1/i1z1 is i1z1.
has_detailed_parasitics Boolean This attribute is true if any part of the net has
annotated detailed parasitics, even if only one
segment of a net is at different levels of the
hierarchy.
logic_check_is_disabled Boolean The value is true for the queried net if logic
checking is disabled for that net.
logic_state string The logic state value of the queried net. The
valid values are X, 1, and 0.
si_is_selected Boolean The value is true if the queried net has been
selected for signal integrity delay or noise
analysis.
ad float The junction area of the drain contact for the queried parasitic
transistor. The fingered transistor is considered a separate physical
device.
adej float For FinFET models; the drain junction area (square microns).
adeo float For FinFET models; the drain to substrate overlap area (square
microns).
as float The junction area of the source contact for the queried parasitic
transistor. The fingered transistor is considered a separate physical
device.
asej float For FinFET models; the source junction area (square microns).
aseo float For FinFET models; the source to substrate overlap area (square
microns).
cdsp float For FinFET models; the constant drain to source fringe capacitance.
cgdp float For FinFET models; the constant gate to drain fringe capacitance.
cgsp float For FinFET models; the constant gate to source fringe capacitance.
delvto float The threshold voltage shift parameter value for the queried fingered
or nonfingered parasitic device.
factuo string The Penn State Philips model zero-field mobility prefactor of the
parasitic device.
full_name string The complete name of the fingered or nonfingered parasitic device.
ids0mult float For FinFET models; the source-drain channel current multiplier.
length float The length of the queried fingered or nonfingered parasitic device.
lrsd float For FinFET models; the length of the source/drain region.
mulu0 float The low field mobility multiplier for the queried parasitic transistor.
nfin float For FinFET models; the number of fins per finger.
nrd float The number of drain squares parameter for the queried parasitic
transistor.
nrs float The number of source squares parameter parameter for the queried
parasitic transistor.
pd float The junction periphery of the drain contact for the queried parasitic
transistor.
pdeo float For FinFET models; the perimeter of the drain to substrate overlap
region through oxide.
ps float The junction periphery of the source contact for the queried parasitic
transistor.
pseo float For FinFET models; the perimeter of the source to substrate overlap
region through oxide.
sa1 through float The distance from the source/drain diffusion edge to the poly gate
sa10 edge on one side of the queried parasitic transistor. For an
irregularly shaped transistor, up to 10 SA parameters can be
assigned.
sb1 through float The distance from the source/drain diffusion edge to the poly gate
sb10 edge on one side of the queried parasitic transistor. For an
irregularly shaped transistor, up to 10 SB parameters can be
assigned.
sc float The distance to the single well edge for the parasitic transistor.
sca float The integral of the first distribution function for scattered well dopant
for the queried parasitic transistor.
scb float The integral of the second distribution function for scattered well
dopant for the queried parasitic transistor.
scc float The integral of the third distribution function for scattered well dopant
for the queried parasitic transistor.
stimod float The STI model selector parameter for the queried parasitic
transistor.
sw1 through float The distance from the source/drain diffusion edge to the other
sw10 source/drain diffusion edge for the queried parasitic transistor. For
an irregularly shaped transistor, up to 10 SW parameters can be
assigned.
tfin float For FinFET models, the thickness of an individual fin (microns).
width float The width of the queried fingered or nonfingered parasitic device.
xl float For FinFET models; the L offset for channel length due to mask or
etch effects.
annotated_delay_delta float The annotated delta delays for this arc (SI delta
delay adjustments, for example).
wire_delay float The delay from the driver pin on the cluster
(typically a transistor source/drain pin) to the
endpoint of the arc (typically a transistor gate
pin).
wire_delay_pin collection The driver pin from the cluster used to calculate
the wire delay.
driver_model_type_max_fall string The driver model type for the max fall
operating condition. The value is
advanced for CCS models or basic for
NLDM models.
driver_model_type_max_rise string The driver model type for the max rise
operating condition. The value is
advanced for CCS models or basic for
NLDM models.
driver_model_type_min_fall string The driver model type for the min fall
operating condition. The value is
advanced for CCS models or basic for
NLDM models.
driver_model_type_min_rise string The driver model type for the min rise
operating condition. The value is
advanced for CCS models or basic for
NLDM models.
receiver_model_type_min_fall string The receiver model type for the min fall
operating condition. The value is
advanced for CCS models or basic for
NLDM models.
delay float The total path delay. This is the sum of all
the incremental stage delays and the
adjustment delays as seen in the
report_paths command.
launch_cycle integer The launch clock cycle for the timing paths
that end at a constraint.
required float The required time value for the timing path.
Corresponds to the data required time of a
timing report.
adjustment float The timing adjustment value associated with the timing
point object.
arrival float The arrival time at the timing point. The total arrival time
at a timing point is the accumulated delay of all the
previous stages including input external delay.
object collection The object at this point in the timing path. This is the
timing graph endpoint for the stage. It is usually an
input or output port or the gate pin of a transistor. In a
cell-based design, it is a .lib cell pin.
rail_voltage float The rail voltage for the associated timing point object.
rise_fall string Status of the timing point. Values are: rise if the timing
point is a rising edge delay; fall if the timing point is a
falling edge delay. The following values occur only for
turnoff topologies: z_rise if the timing point is
transitioning from 0 to high Z; z_fall if the timing point
is transitioning from 1 to high Z; rise_from_z if the
timing point is rising from a high Z state; fall_from_z
if the timing point is falling from a high Z state.
transition float The transition time of the net associated with the timing
point object.
transition_full_swing float The full rail-to-rail transition time for the net associated
with the timing point object.
type string The node type associated with the timing point object.
For example, for an input port, the value is input.
vdd_value float The rail voltage for the associated timing point object.
wire_delay float The wire delay for the associated timing point object.
output string The output net name. Valid for clock gate,
mux, and inverter topologies.
A-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
The characters listed in Table A-1 have special meaning for Tcl.
Table A-1 Special Characters
Character Meaning
$ Dereferences a variable.
"" Denotes weak quoting. Nested commands and variable substitutions still occur.
; Ends a command.
# Begins a comment.
Table A-2 lists some common tasks and the system commands for performing them.
Table A-2 Common Tasks and Their System Commands
List the files specified, or list all files in the working directory if no ls directory_list
arguments are specified. Requires an sh program in your path.
Execute an operating system command. You should always use exec command
the exec command before using the sh command. This Tcl
built-in command has some limitations. For example, it doesn’t
perform any expansion. For more information, see the exec
man page.
Set the value of an environment variable. Any changes to setenv name value
environment variables apply only to the current NanoTime
process and to any child processes launched by the current
NanoTime process.
Generally, NanoTime implements all the Tcl built-in commands. However, NanoTime adds
semantics to some Tcl built-in commands and imposes restrictions on some elements of the
language. Here are the differences:
• The Tcl rename command is limited to procedures you have created.
• The Tcl load command is not supported.
• You cannot create a command called unknown.
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Tcl Syntax and NanoTime Commands A-3
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
• The auto-exec feature found in tclsh is not supported. However, autoload is supported.
• The Tcl source command has additional options -echo and -verbose, which are
nonstandard to Tcl.
• The history command has additional options -h and -r, nonstandard to Tcl, and the
form history n. For example, history 5 lists the last five commands.
• The NanoTime command processor accepts words with bus (array) notation (words that
have square brackets, such as abus[0]), so that Tcl does not try to execute the index as
a nested command.
You can nest a command within another command (also known as command substitution)
by enclosing the nested command within brackets [].
The following examples illustrate the use of the two methods to direct the output from a path
tracing report into a file named [Link].
• Using the redirection operators > and >>
❍ To create a new file [Link] and write a path tracing report into the file:
report_paths -nworst 3 > [Link]
The redirect command is more flexible than the UNIX redirection operators. The
UNIX-style redirect operators > and >> are not part of Tcl and cannot be used with built-in
commands. You must use the redirect command with built-in commands.
With the redirect command, you can redirect multiple commands or an entire script. This
simple example redirects multiple echo commands:
redirect [Link] {
echo -n "Hello"
echo "world"
}
The Tcl built-in command puts does not respond to redirection. Instead, use the NanoTime
command echo, which responds to redirection.
Command Aliases
You can use aliases to create short forms for the commands you commonly use. For
example, you could set up an alias to duplicate a command with a long string of options:
nt_shell> alias path_rpt2 "report_paths -max -nosplit -show_path_id"
NanoTime recognizes an alias only when it is the first word in the command line.
An alias definition takes effect immediately but lasts only until you exit the NanoTime
session. To save commonly used alias definitions, store them in the .synopsys_nt.setup file.
You cannot use an existing command name as an alias name; however, aliases can refer to
other aliases.
Tcl Scripts
You can use the source command to execute scripts in NanoTime. A script is a sequence
of NanoTime and Tcl commands in a text file. The script file can be in ASCII or
gzip-compressed format.
The syntax is
nt_shell> source [-echo] [-verbose] script_file_name
By default, the source command executes the specified script without showing the
commands or the system response to the commands. The -echo option causes each
command in the script to be displayed as it is executed. The -verbose option causes the
system response to each command to be displayed.
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Command Aliases A-5
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Lines in script files that begin with the pound sign (#) are comment lines . Inline comments
use a semicolon to end the command, followed by the pound sign to begin the comment. For
example,
# Set the new string
#
set newstr "New"; # This is a comment.
When you run a script, the source command is echoed to the command log file. By default,
each command in the script is also written to the log file. To disable command logging, set
the sh_source_logging variable to false. (The default is true.)
By default, when a syntax or semantic error occurs during execution of a command in a
script, NanoTime stops processing the script. There are two variables that you can use to
change the default behavior: sh_continue_on_error and sh_script_stop_severity.
To force NanoTime to continue processing the script no matter what, set
sh_continue_on_error to true. This setting is usually not desirable because the remainder
of the script might not perform as expected if a command fails.
To direct NanoTime to stop the script only when certain kinds of messages are issued, use
the sh_script_stop_severity variable, which is set to none by default. Set the variable
to E to make the script stop on any message with error severity. Set it to W to make the script
stop on any message with warning severity. The sh_script_stop_severity variable has
no effect if the sh_continue_on_error variable is set to true.
Command History
The history command lists the commands used in a nt_shell session. With no arguments,
the history command lists the last 20 commands that you entered.
The history command is complex and can generate several forms of output. For more
information, see the history command man page.
The syntax is as follows:
history [keep count] [-h] [-r] [number_of_entries]
To change the length of the history buffer, use the keep option. For example, this command
specifies a history of 50 commands:
nt_shell> history keep 50
To limit the history list to three commands and to display them in reverse order, enter
nt_shell> history -r 3
20 history info 3
19 link
18 current_design middle
You can also redirect the output of the history command to create a command script:
nt_shell> redirect my_script {history -h}
You can rerun and recall previously entered commands by using the exclamation point (!)
operator. Table A-3 lists the shortcuts you can use to rerun commands. Place these
shortcuts at the beginning of a command line. They cannot be part of a nested command or
a script.
Table A-3 Shortcuts for Rerunning Commands
To rerun Use
The most recent command that started with text (text must begin !text
with a letter or underscore and can contain numbers)
You can modify and rerun the previous command executed using the ^x^y format. This
recalls the last command, replaces all instances of x with y, and then executes the
command. This is different from many UNIX shells, which only replace the first instance of
x with y.
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Command History A-7
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Suppressing Messages
NanoTime provides commands for suppressing and redisplaying warning and informational
messages. You cannot suppress error messages.
Table A-4 summarizes the commands for controlling the output of warning and informational
messages. You can use these commands within a procedure (for example, to turn off
specific warnings). If you suppress a message n times, you must unsuppress the message
the same number of times to enable its output again. Use these commands carefully. For
more information, see the man pages.
Table A-4 Commands for Controlling Message Output
Variables
NanoTime uses two types of variables: application variables and user-defined variables.
Application variables have predefined names and are used to control the behavior of
NanoTime. User-defined variables can be created for a variety of purposes.
The set command specifies the value of a variable. NanoTime echoes the value:
nt_shell> set search_path ". /usr/synopsys/libraries"
. /usr/synopsys/libraries
nt_shell> set adir "/usr/local/lib"
/usr/local/lib
The dollar sign operator returns the value of a variable, which can then be used in another
command:
nt_shell> set my_path "$adir $search_path"
/usr/local/lib . /usr/synopsys/libraries
The printvar command lists variables. It takes as an argument a variable name, which
can include wildcard characters. You can use the -application or -user_defined options
to restrict the scope of the command.
For example, to list all variables that end in “path,” enter
nt_shell> printvar *path
...
library_path = ". ./../libs"
link_path = "*"
search_path = ". ./../designs"
sh_source_uses_search_path = "false"
sh_user_man_path = ""
By default, when you create a new variable by using the set command at the nt_shell
prompt, a message appears:
nt_shell> set link_patg “*”
The CMD-041 message tells you when you create a new variable, which helps you to notice
errors when you intend to set a system variable but type it incorrectly. The
sh_new_variable_message, sh_new_variable_message_in_proc, and
sh_new_variable_message_in_script variables specify when NanoTime issues
CMD-041 messages.
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Variables A-9
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
By default, the CMD-041 message is generated in interactive mode, but not during
execution of procedures or scripts (when you are unlikely to be looking for messages). To
enable generation of these messages during execution of procedures or scripts, set the
variables appropriately. Note that doing so can cause a significant increase in runtime. For
details, see the man pages for the variables.
Collections
NanoTime builds an internal database of the netlist and the attributes applied to the
database. This database consists of several classes of objects, such as designs, libraries,
ports, cells, nets, pins, and clocks. Most NanoTime commands operate on these objects.
A collection is a group of objects exported to the Tcl user interface. Collections have an
internal representation (the objects) and a string representation. The string representation is
generally used only for informational and error messages.
You can create collections of objects, then apply a set of commands to interact with those
collections. Collections can be homogeneous (contain objects of one type) or
heterogeneous (contain objects of many types).
The collection commands are divided into three categories:
• Commands that create collections of objects for use by another command
• Commands that manipulate collections
• Commands that query objects for you to view
You can use wildcards and filtering criteria to narrow the focus of a collection. You can store
collections in variables for use in setting attributes, or for performing custom reporting.
Creating Collections
The primary commands that create collections have the form get_* or all_*, where * is a
type of object such as nets or cells. To list the available commands, use the printvar
get_* or printvar all_* commands. For details, see the man pages for the individual
commands.
For example, the get_cells command creates a collection of cells in the design. Enter the
following command to find the cells that begin with the letter “o” and reference an FD2 library
cell:
nt_shell> get_cells "o*" -filter {ref_name == FD2}
{"o_reg1", "o_reg2", "o_reg3", "o_reg4"}
Although the output looks like a list, it is not a list. The output is only a display of the
get_cells command result. The collection is not saved in a variable or passed to another
command, so it is deleted after being displayed.
You can pass a collection to a command either directly or by using a variable. For example,
the following command creates a collection of pins, assigns it to the variable named pins,
then uses the variable to query the cells connected to those pins:
nt_shell> set pins [get_pins o*/CP]
{"o_reg1/CP", "o_reg2/CP"}
nt_shell> get_cells -of_objects $pins
{"o_reg1", "o_reg2"}
To view the contents of a collection, use the query_objects command. This command
searches for and displays objects in the NanoTime database. Do not use echo, puts, or
printvar, as doing so returns only the string representing the collection, a name that
serves as a pointer to the collection. The query_objects command does not have a
meaningful return value; it simply displays the objects found and returns the empty string.
You can control the format of the output with the query_objects_format variable. The
default is Legacy which returns a list of items enclosed in quotation marks and delimited with
commas. The alternative is Tcl which eliminates the quotation marks and commas. For
more information, see the query_objects and query_objects_format man pages.
When commands that create collections are issued from the command prompt, they
implicitly query the collection. You can control how many objects are displayed from the
collection by using the collection_result_display_limit variable.
The following commands demonstrate equivalent methods to display the same ports:
nt_shell> get_ports in*
{"in0", "in1", "in2"}
nt_shell> query_objects [get_ports in*]
{"in0", "in1", "in2"}
nt_shell> query_objects -class port in*
{"in0", "in1", "in2"}
The primary collection commands (get_cells, get_pins, and so on) can take arguments
which are collections of the same type. This feature is useful for writing procedures that can
take either a pattern or a collection as an argument. For example, you can use syntax such
as
get_cells [get_cells u1]
Each collection created by a command such as get_nets has its own context. You cannot
add to, remove from, or compare collections from different contexts such as different
designs, different libraries, or different sets of paths created by different get_timing_paths
commands. To compare objects, create one large collection containing all the objects of
interest, and then sort, filter, or manipulate the objects in that collection.
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Collections A-11
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
For example, the following commands create two different sets of paths that cannot be
compared:
nt_shell> set paths [get_timing_paths ...]
nt_shell> set more_paths [get_timing_paths ...]
Even if the two collections represent the same paths, they are different objects, so
comparing them reports a mismatch.
A collection is active only as long as it is referenced. Typically, a collection is referenced
when a variable is set to the result of a command that creates it, or when it is passed as an
argument to a command or a procedure. For example, if you save a collection of ports with
nt_shell> set myports [get_ports *]
then either of the following two commands deletes the collection referenced by the myports
variable:
nt_shell> unset myports
Collections are implicitly deleted when the parent of the objects within the collection is
deleted. For example, if a collection of ports is owned by a design, the collection is implicitly
deleted when the design that owns the ports is deleted. When a collection is implicitly
deleted, the variable that referenced the collection still holds a string representation of the
collection. However, because the collection is gone, this string value is not useful.
Given ports i0, i1, in0, and in1, notice the queries in this sequence of commands:
nt_shell> get_ports i*
{"i0", "i1", "in0", "in1"}
Commands that create explicit collections, such as get_cells, allow you to search in the
current instance or hierarchically by using the -hierarchical option. The rules for different
kinds of searches are as follows:
• Using a wildcard pattern alone matches leaf names in the current instance. For example,
get_cells i1*
• Using a wildcard pattern with the -hierarchical option matches leaf names at each
level of the hierarchy.
For example, to find all cells in the hierarchy with the leaf name containing n1:
prompt> get_cells *n1* -hierarchical
• When you search for a wildcard pattern that contains the hierarchy separator, NanoTime
breaks up the pattern around the hierarchy separator and matches each piece at
progressively deeper levels of the hierarchy. For example, to find the cells in i1 that
begin with i2, and then return a collection of cells in each i1/i2* that has a leaf name
of n1, enter
prompt> get_cells i1/i2*/n1
If an object you specify has a name that contains a backslash character (\) or any wildcard
characters (* or ? ), it is better to use the -exact option to find the object. Using the -exact
option makes the primary collection creation command (such as get_cells or get_ports)
consider the patterns argument to be a list of exact strings rather than a list of patterns with
wildcards. For example,
get_cells -exact [list {*cell*1}] ;# finds cell named *cell*1
get_cells -exact [list {a\b1}] ;# finds cell named a\b1
Wildcard matching uses the same logic as the Tcl “string match” command. Without
-exact , each wildcard match character needs to be backslash-escaped to be considered
exactly (not a wildcard). For example,
get_cells [list {\*cell\*1}]
get_cells [list {a\\b1}]
Remember that the patterns argument to the collection creation command is a list. If you do
not supply a well-formed list, additional backslashes are necessary to communicate these
special characters.
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Collections A-13
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Filtering Collections
You can filter collections by using the -filter option with the primary commands that
create collections, or you can use the filter_collection command.
Many commands that create collections accept a -filter option that specifies a filter
expression. A filter expression is a string composed of a series of logical expressions that
describe a set of constraints you want to place on a collection.
A subexpression of a filter expression is a comparison of an attribute name (such as area or
direction) with a value (such as 43 or input) by means of an operator (such as == or !=).
The following command gets the cells in U1 that have an area no greater than 12 or
reference a design (or library cell) named AN2P, AO2P, and so on. The command then
assigns the collection to the my_cells variable.
nt_shell> set my_cells [get_cells "U1/*" \
-filter {area <= 12 || ref_name =~ "A*P"}]
You can group logical expressions with parentheses to enforce order; otherwise, NanoTime
evaluates the expressions from left to right.
The filter language supports the following relational operators:
• == Equal
• != Not equal
• > Greater than
• < Less than
• >= Greater than or equal to
• <= Less than or equal to
• =~ Matches pattern
• !~ Does not match pattern
The filter language also supports the defined and undefined existence operators. An
existence operator determines whether an attribute is defined for an object. For example,
sense == setup_clk_rise and defined(sdf_cond)
The right side of a relation can consist of a string or a number. You do not need to enclose
strings in quotation marks. For example,
nt_shell> set iports [get_ports * -filter {direction == in}]
However, if an expression contains characters that are part of the filter language syntax, you
must use curly braces to enclose the expression and double quotation marks to enclose
string operands.
As shown in the following example, parentheses are part of the filter language, so they are
double quoted and the complete expression is grouped in curly braces:
nt_shell> set x [filter_collection $ports {full_name =~ "D(*)"}
Commands that provide a -filter option also provide a -regexp option to enable you to
change the filtering to full regular expressions. The filter_collection command also
provides a -regexp option to enable full regular expressions.
The pattern match filter operators =~ and !~ behave differently in different circumstances.
They do one of two types of pattern matching:
• Simple wildcard matching (the default)
• Full regular expression matching
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Collections A-15
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
If you derive several collections from one larger collection, using the filter_collection
command might be more efficient than using the -filter option, as shown in this series of
commands:
nt_shell> set acells [get_cells "*"]
{"u1", "u2", "u3", "u4"}
nt_shell> set ands [filter_collection $acells "ref_name =~ AN*"]
{"u1", "u2"}
nt_shell> set ors [filter_collection $acells "ref_name =~ OR*"]
{"u3", "u4"}
Optionally, the filter_collection command accepts the -regexp option, which changes
=~ and !~ to perform real regular expression matching.
In this example, set_input_delay first tries to find a port named out4, and if it is not
found, tries to find a pint named out4. The collection created by the get_pins command is
composed of pins by definition. The n*1 pattern is matched against ports. If there is no
match, it is matched against pins.
You can remove objects by using the filter_collection command or by filtering objects
when you initially create the collection. However, there are some tasks such as removing the
elements in one collection from another collection that you cannot accomplish with filtering.
Use the remove_from_collection and add_to_collection commands for this purpose.
The arguments to both commands are a collection and a specification of the objects that you
want to add or remove. The specification can be a list of names, wildcard strings, or other
collections.
The result of either command is a new collection, or an empty string if the operation results
in zero elements (in the case of the remove_from_collection command). The first
argument (the base collection) is a read-only argument.
The commands take the form
add_to_collection ABC XY_spec [-unique]
remove_from_collection ABC XY_spec
where:
• ABC is the base collection. The base collection is copied to the result collection, and
objects matching XY_spec are added to or removed from the new collection. The base
collection can be the empty collection.
• XY_spec is a list of named objects or collections to add or remove. The object class of
each element in this list must be the same as the base collection. If the name matches
an existing collection, the collection is used. Otherwise, NanoTime searches for the
objects in the database using the object class of the base collection.
• The -unique option eliminates duplicate objects from the resulting collection.
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Collections A-17
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
When the base collection argument is the empty collection, some special rules apply. If
XY_spec is not empty, at least one homogeneous collection must exist in the XY_spec list.
The first homogeneous collection in the XY_spec list becomes the base collection and sets
the object class for the function.
This command sets the ports variable for collection of all ports except for CLOCK:
nt_shell> set ports [remove_from_collection [get_ports "*"] CLOCK]
This command results in a collection of all cells in the design except those in the top level of
the hierarchy:
nt_shell> set lcells [remove_from_collection \
[get_cells * -hier] [get_cells *]]
• sizeof_collection
The sizeof_collection command returns the number of elements in a collection.
• compare_collections
The compare_collections command compares the contents of two collections, object
for object. You can specify that NanoTime compare the objects in order.
If the objects in both collections are the same, the result is 0 (like the result of string
compare). If the objects are different, the result is nonzero.
• copy_collection
The copy_collection command duplicates a collection, resulting in a new collection.
The base collection remains unchanged. The copy_collection command is an
efficient mechanism for duplicating an existing collection. However, copying a collection
and having multiple references to the same collection are significantly different.
If you create a collection and save a reference to it in variable c1, assigning the value of
c1 to another variable c2 creates a second reference to the same collection:
nt_shell> set c1 [get_cells "U1*"]
{"U1", "U10"}
nt_shell> set c2 $c1
{"U1", "U10"}
nt_shell> echo $c1 $c2
_sel3 _sel3
The previous commands do not copy the collection; only copy_collection creates a
new collection that is a duplicate of the original.
This command sequence shows the result of copying a collection:
nt_shell> set collection1 [get_cells "U1*"]
{"U1", "U10"}
nt_shell> set collection2 [copy_collection $collection1]
{"U1", "U10"}
nt_shell> compare_collections $collection1 $collection2
0
• index_collection
The index_collection command creates a collection of one object that is the nth
object in another collection. Objects in a collection are numbered 0 through n-1.
Although collections that result from commands such as get_cells are not really
ordered, each has a predictable, repeatable order. The same command executed n
times (for example, get_cells *) creates a collection of cells in the same order.
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Collections A-19
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Lists
Lists are an important part of Tcl; they are used to represent groups of objects. Tcl list
elements can consist of strings or other lists. Do not use commas to separate list items.
Table A-5 shows the Tcl commands you can use with lists.
Table A-5 Tcl Commands to Use With Lists
Command Task
lappend Creates a new list by appending elements to a list (modifies the original list).
lindex Returns a specific element from a list; this command returns the indexed element if it
is there, or an empty string if it is not there.
linsert Creates a new list by inserting elements into a list (it does not otherwise modify the list).
The entries "a b c d", {a b c d}, and [list a b c d] might work equally well. However,
the suggested method is more reliable.
If you are attempting to perform command or variable substitution, the form with braces does
not work. For example, if variable a is set to 5, these commands yield different results:
nt_shell> set b {c d $a [list $a z]}
c d $a [list $a z]
Enclosing a set of words within curly braces {},as in the first example, is called rigid quoting
because variable, command, and backslash substitutions do not occur.
Enclosing a set of words within quotation marks is called weak quoting because variable,
command, and backslash substitutions can still occur.
The NanoTime shell allows you to use bus syntax such as blk[0] even though square
brackets [] are part of the language. Although nt_shell can help in some cases, rigidly
quoting these strings, as in {blk[0]}, is always better.
In the following examples, the value of variable a is 5. Both commands are valid but have
different results.
nt_shell> set s "temp = data[$a]"
temp = data[5]
Mark individual special characters with the backslash (\) so that they are interpreted literally.
Note that the backslash character itself is very difficult to use from the user interface, so its
use in netlist objects is discouraged. (The number of times a backslash needs to be marked
depends on whether the option to which it is passed is a string or a list.)
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Lists A-21
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Flow Control
Flow control commands, such as the if, while, for, foreach, break, continue, and
switch commands, determine the execution order of other commands. You can use any
NanoTime command in a flow control command.
Tcl supports expressions. However, arithmetic operators are not included as part of the base
Tcl language syntax. Instead, use the expr command to evaluate expressions. The expr
command can also evaluate logical and relational expressions.
If you are comparing strings, use string compare $x $y rather than $x==$y.
Loops
The while command is similar to the same construct in the C programming language. The
while command has two arguments: an expression and a set of commands to perform
inside the loop.
This example uses the while command to print squared values from 0 to 10:
set p 0
while {$p <= 10} {
echo "$p squared is: [expr $p * $p]"; incr p
}
The for command is similar to the same construct in the C programming language. The
for command has four arguments: an initialization instruction, a loop termination
expression, an iteration instruction, and a set of loop commands.
This example shows how to write the while loop as a for loop:
for {set p 0} {$p <= 10} {incr p} {
echo "$p squared is: [expr $p * $p]"
}
The foreach command is similar to the same construct in the C shell. This command
iterates over the elements in a list. The foreach command has three arguments: an
iteration variable, a list, and a set of commands to perform inside the loop.
You cannot use foreach to iterate over a NanoTime collection; attempting to do so deletes
the collection.
This statement prints an array:
foreach el [lsort [array names a]] {
echo "a\($el\) = $a($el)"
}
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Flow Control A-23
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
This statement searches in the search path for several files, then reports whether the files
are directories:
foreach f [which {t1 t2 t3}] {
echo -n "File $f is "
if { [file isdirectory $f] == 0 } {
echo -n "NOT "
}
echo "a directory"
}
The break and continue commands terminate a loop before the termination condition is
reached, as follows:
• The break command causes the innermost loop to terminate.
• The continue command causes the current iteration of the innermost loop to terminate.
Procedures
To extend the Tcl command language, you can write reusable Tcl procedures. You can write
new commands that can use an unlimited number of arguments, and the arguments can
contain defaults. You can use a varying number of arguments.
This procedure prints the contents of an array:
proc array_print {arr} {
upvar $arr a
foreach el [lsort [array names a]] {
echo "$arr\($el\) = $a($el)"
}
}
NanoTime provides extensions to Tcl procedures that allow you to define the syntax of
arguments. With these features, you can write extensions to NanoTime that look like
commands, and you can parse the arguments to your procedure.
Keep in mind the following points about procedures:
• Procedures can use any supported NanoTime command or other procedure you define.
• Procedures can be recursive.
• Procedures can contain local variables and reference variables outside their scope.
• Arguments to procedures can be passed by value or by reference.
• arguments lists formal arguments for the procedure. Each list element specifies one
argument. (The arguments list can be empty.) Each argument specifier is also a list with
one or two fields. If there is one field in the specifier, it is the name of the argument. If
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Procedures A-25
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
there are two fields in the specifier, the first field is the argument name and the second
field is its default.
• body defines the procedure script.
To set up a default for an argument, make sure the argument is located in a sublist that
contains two elements: the name of the argument and the default.
The following procedure reads a favorite library by default, but reads a specific library if its
name is given:
proc read_lib_f {{lname [Link]}} {
read_db $lname
}
You can specify a varying number of arguments by using the args argument. You can
specify that at least some arguments must be passed into a procedure; you can then deal
with the remaining arguments as necessary.
For example, to report the square of at least one number, use
proc squares {num args} {
set nlist $num
append nlist ""
append nlist $args
foreach n $nlist {
echo "Square of $n is [expr $n*$n]"
}
}
proc_body proc_name
This example shows the output of the info body command for a simple procedure named
plus:
nt_shell> proc plus {a b} {return [expr $a + $b]}
nt_shell> info body plus
return [expr $a + $b]
nt_shell>
The info command with the args argument displays the names of the formal parameters
of a procedure.
The syntax is
info args proc_name
Appendix[Link]Tcl
Chapter TclCommand
CommandInterface
Interface
Procedures A-27
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
B-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
• Crossprobing Objects
• Shell Model Generation
• Hierarchical Analysis
• Exiting From the NanoTime Interface in Custom Designer
Appendix[Link]Galaxy
Chapter GalaxyCustom
CustomDesigner
DesignerUser
UserInterface
Interface
Starting NanoTime in Custom Designer B-3
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
4. NanoTime appears as one of the choices on the main menu bar as shown in Figure B-2.
Figure B-2 NanoTime in the Custom Designer Menu Bar
Appendix[Link]Galaxy
Chapter GalaxyCustom
CustomDesigner
DesignerUser
UserInterface
Interface
Initializing a NanoTime Run Directory B-5
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Generating a Netlist
Before running NanoTime from Custom Designer, you must first generate a netlist from the
interface. To create a netlist, perform the following steps:
1. In the design schematic, choose NanoTime > Inputs > Netlist > Run Netlister, as shown
in Figure B-4.
2. A netlist file named [Link] is created in the initialized run directory.
3. View the netlist by choosing NanoTime > Inputs > Netlist > Edit Netlist…
After the netlist is created, all functions in the NanoTime menu are enabled.
Figure B-4 Generating a Netlist in Custom Designer
Appendix[Link]Galaxy
Chapter GalaxyCustom
CustomDesigner
DesignerUser
UserInterface
Interface
Generating a Netlist B-7
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Editing Constraints
NanoTime needs input, output, and clock constraints for timing analysis. The Edit
Constraints dialog box (Figure B-5) provides an efficient way to create constraints and a
template file for NanoTime timing analysis.
Figure B-5 Edit NanoTime Constraints Dialog Box
You can edit the [Link] file to change or add constraints. This file is referenced from
the template command file.
Appendix[Link]Galaxy
Chapter GalaxyCustom
CustomDesigner
DesignerUser
UserInterface
Interface
Editing Design Properties B-9
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Running NanoTime
In Custom Designer, you can launch NanoTime in either the interactive or batch mode. In
the interactive mode, which is the default, the interactive dialog box guides you through each
phase of NanoTime. In the batch mode, NanoTime is launched in an xterm window as a
separate process.
To run NanoTime:
1. Open your design to be analyzed in NanoTime, and choose NanoTime > Run.
The Run NanoTime dialog box appears. (Figure B-7)
Figure B-7 Run NanoTime Dialog Box
The default setup file populates the dialog box during initialization. You can choose a
different setup file or edit the setup file by clicking Edit Setup File.
To add a command, click Add. To delete a command, click Delete. Each row in the table
should have one command. Otherwise, to list multiline commands, you should use the
backslash (\) continuation character or braces { }.
When you click Execute, NanoTime first sources the setup file. Next, the commands in the
table execute from top to bottom. If a command in the table successfully executes without
Appendix[Link]Galaxy
Chapter GalaxyCustom
CustomDesigner
DesignerUser
UserInterface
Interface
NanoTime Interactive Dialog Box B-11
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
an error, the command is shown in green text. If the command generates a warning, it is
highlighted in yellow. If the command generates an error, it is highlighted in red; NanoTime
then stops execution of the commands in the table. In that case, you should edit the
commands to eliminate the errors. If errors do not occur, the main command is executed
with the user-provided options.
If you click Cancel, the NanoTime shell exits.
For example,
create_cd_path_reports [get_timing_path -max -max_paths 10] [Link]
Path reports are displayed in the table. When you select a path from the table, the path is
highlighted in the Schematic Editor. Only one path can be highlighted at a time. To obtain
more information about the path, click Details.
Note:
The create_cd_path_report command is only available in within the NanoTime
interface to Custom Designer. It is not available in the standalone NanoTime tool.
Appendix[Link]Galaxy
Chapter GalaxyCustom
CustomDesigner
DesignerUser
UserInterface
Interface
Inspecting NanoTime Path Reports B-13
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
In addition to the default information displayed, you can see more information in the table by
selecting options under Show.
To annotate information to the Schematic Editor, select the options under Annotate. For
example, if Delay is selected, the incremental delay values are annotated in the Schematic
Editor.
When you click Crossprobe, the path is crossprobed between the Schematic Editor and the
extracted layout view.(See Figure B-11 and Figure B-12.) To crossprobe, parasitics should
be initialized beforehand.
Appendix[Link]Galaxy
Chapter GalaxyCustom
CustomDesigner
DesignerUser
UserInterface
Interface
Detailed Path Reports B-15
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Crossprobing Objects
Use the Cross Probe Objects dialog box to specify design objects such as nets, instances,
pins, and subcircuits to be probed. (Figure B-13)
Figure B-13 Cross Probe Objects Dialog Box
1. In the Netlist object name box, enter the name of the object to be probed.
2. If the object is hierarchical, in the Hierarchy separator box, enter the hierarchy separator.
3. Select the object type. Net, instance (transistors), and pin objects can be crossprobed
with extracted layout.
4. Click Probe to highlight the object in the Schematic Editor.
When the extracted layout view is opened and the object type is a net or a transistor
instance, then the StarRC view is crossprobed between the schematic view and the layout
view. Each crossprobed net is highlighted in a different color.
Choose Special Flows > Shell Model Generation to show the Generate Shell .lib dialog box
(Figure B-14). To create a shell model:
1. Confirm that the library, cell, and view information is correct.
2. In the Run directory box, browse to a run directory or use the default directory.
3. In the Spice model box, browse to a SPICE model file or use the default file.
4. In the Parasitic file box, browse to the boundary parasitic file from NanoTime model
generation if it is available.
5. Click OK.
The run directory is initialized, and NanoTime starts in interactive mode. If a shell model is
successfully generated, it is displayed in the Custom Designer Text Viewer. If a shell model
is not successfully generated, the NanoTime Interactive Run dialog box opens for
debugging.
Appendix[Link]Galaxy
Chapter GalaxyCustom
CustomDesigner
DesignerUser
UserInterface
Interface
Shell Model Generation B-17
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Hierarchical Analysis
The NanoTime interface in Custom Designer features hierarchical design analysis. The
purpose of hierarchical design analysis is to provide an easy and efficient way to set up
NanoTime by finding potential problems in the lowest level of the design as possible. Design
or setup problems found in the lower levels of the design can be easily understood and fixed.
In hierarchical analysis, designs are assigned levels according to the hierarchy distance
from leaf-level transistors. For example, an inverter with two transistors has a hierarchy level
of 1. A buffer with two inverters has a hierarchy level of 2. The hierarchical analysis starts at
level-1 designs and continues to higher-level designs. If errors such as unresolved transistor
direction are found in a design, the hierarchical analysis stops, and an Interactive Run dialog
box opens for you to debug the design. After resolving the problem or skipping debugging,
the hierarchical analysis continues to the next design.
To start hierarchical analysis:
1. Choose NanoTime > Special Flows > Hierarchical Analysis.
The NanoTime Hierarchical Analysis dialog box appears. (Figure B-15)
Figure B-15 NanoTime Hierarchical Analysis Dialog Box
Appendix[Link]Galaxy
Chapter GalaxyCustom
CustomDesigner
DesignerUser
UserInterface
Interface
Exiting From the NanoTime Interface in Custom Designer B-19
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
C-1
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
Appendix[Link]xample
Chapter [Link]
[Link]
ModelFile
File
Example [Link] Model File C-3
D-3
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
timing_type : rising_edge ;
/* comment : min mol c->out, path 12, path 11; */
cell_rise( f_itrans_ocap ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.061393, 0.111393, 0.211393");
values ( "0.000000, 0.027703, 0.083494",\
"0.000000, 0.027703, 0.083494",\
"0.000000, 0.027703, 0.083494");
}
rise_transition( f_itrans_ocap ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.061393, 0.111393, 0.211393");
values ( "0.074203, 0.134300, 0.254921",\
"0.074203, 0.134300, 0.254921",\
"0.074203, 0.134300, 0.254921");
}
cell_fall( f_itrans_ocap ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.061393, 0.111393, 0.211393");
values ( "0.001925, 0.020159, 0.057334",\
"0.001782, 0.020017, 0.057191",\
"0.001782, 0.020017, 0.057191");
}
fall_transition( f_itrans_ocap ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.061393, 0.111393, 0.211393");
values ( "0.046753, 0.080618, 0.151719",\
"0.046753, 0.080618, 0.151719",\
"0.046753, 0.080618, 0.151719");
}
} /* end of arc mol_c_OUT_CLK_R_CLK_OUT_redg_min*/
timing () {
related_pin : "mol_c_OUT_CLK_R_CLK" ;
timing_type : rising_edge ;
/* comment : max mol c->out, path 9, path 10; */
cell_rise( f_itrans_ocap ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.061393, 0.111393, 0.211393");
values ( "0.000000, 0.027703, 0.083494",\
"0.000000, 0.027703, 0.083494",\
"0.000000, 0.027703, 0.083494");
}
rise_transition( f_itrans_ocap ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.061393, 0.111393, 0.211393");
values ( "0.074203, 0.134300, 0.254921",\
"0.074203, 0.134300, 0.254921",\
"0.074203, 0.134300, 0.254921");
}
cell_fall( f_itrans_ocap ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.061393, 0.111393, 0.211393");
values ( "0.001925, 0.020159, 0.057334",\
Appendix[Link]xample
Chapter [Link]
[Link]
ModelFile
File
Example [Link] Model File C-5
D-5
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
}
timing () {
related_pin : "IN" ;
timing_type : combinational ;
timing_sense : positive_unate ;
/* comment : input->mil d; */
cell_rise( scalar ){
values ( "0.000000");
}
rise_transition( f_itrans_ocap ){
index_1 ( "0.000000, 1.000000");
index_2 ( "0.000000, 1.000000");
values ( "0.000000, 0.000000",\
"1.000000, 1.000000");
}
cell_fall( scalar ){
values ( "0.000000");
}
fall_transition( f_itrans_ocap ){
index_1 ( "0.000000, 1.000000");
index_2 ( "0.000000, 1.000000");
values ( "0.000000, 0.000000",\
"1.000000, 1.000000");
}
} /* end of arc IN_mil_d_IN_CLK_F_CLK_una*/
timing () {
related_pin : "mil_c_IN_CLK_F_CLK" ;
timing_type : setup_falling ;
/* comment : reference path 8, checked path 13,
reference path 7, checked path 15; */
rise_constraint( f_dtrans_ctrans ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.080000, 0.160000, 0.320000");
values ( "0.002835, -0.015773, -0.040040",\
"0.017094, -0.001515, -0.025782",\
"0.035973, 0.017364, -0.006903");
}
fall_constraint( f_dtrans_ctrans ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.080000, 0.160000, 0.320000");
values ( "0.067005, 0.048397, 0.024130",\
"0.085424, 0.066815, 0.042548",\
"0.109459, 0.090850, 0.066583");
}
} /* end of arc mil_c_IN_CLK_F_CLK_mil_d_IN_CLK_F_CLK_stupf*/
timing () {
related_pin : "mil_c_IN_CLK_F_CLK" ;
timing_type : hold_falling ;
/* comment : reference path 3, checked path 17,
reference path 4, checked path 18; */
rise_constraint( f_dtrans_ctrans ){
index_1 ( "0.080000, 0.160000, 0.320000");
index_2 ( "0.080000, 0.160000, 0.320000");
Appendix[Link]xample
Chapter [Link]
[Link]
ModelFile
File
Example [Link] Model File C-7
D-7
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
rise_transition( f_itrans_ocap ){
index_1 ( "0.000000, 1.000000");
index_2 ( "0.000000, 1.000000");
values ( "0.000000, 0.000000",\
"1.000000, 1.000000");
}
cell_fall( scalar ){
values ( "0.000000");
}
fall_transition( f_itrans_ocap ){
index_1 ( "0.000000, 1.000000");
index_2 ( "0.000000, 1.000000");
values ( "0.000000, 0.000000",\
"1.000000, 1.000000");
}
} /* end of arc mil_d_IN_CLK_F_CLK_mil_q_IN_CLK_F_CLK_una*/
timing () {
related_pin : "mil_c_IN_CLK_F_CLK" ;
timing_type : rising_edge ;
/* comment : mil c->q; */
cell_rise( scalar ){
values ( "0.000000");
}
rise_transition( f_itrans_ocap ){
index_1 ( "0.000000, 1.000000");
index_2 ( "0.000000, 1.000000");
values ( "0.000000, 0.000000",\
"1.000000, 1.000000");
}
cell_fall( scalar ){
values ( "0.000000");
}
fall_transition( f_itrans_ocap ){
index_1 ( "0.000000, 1.000000");
index_2 ( "0.000000, 1.000000");
values ( "0.000000, 0.000000",\
"1.000000, 1.000000");
}
} /* end of arc mil_c_IN_CLK_F_CLK_mil_q_IN_CLK_F_CLK_una*/
} /* end of pin mil_q_IN_CLK_F_CLK */
pin("mol_d_OUT_CLK_R_CLK") {
direction : internal ;
capacitance : 0.000000 ;
tlatch("mol_c_OUT_CLK_R_CLK") {
edge_type : rising;
tdisable : false;
}
timing () {
related_pin : "mol_c_OUT_CLK_R_CLK" ;
timing_type : setup_falling ;
/* comment : mol c->d transparency end setup,
rise path 14, fall path 16; */
rise_constraint( scalar ){
values ( "-0.378071");
}
fall_constraint( scalar ){
values ( "-0.412058");
}
} /* end of arc mol_c_OUT_CLK_R_CLK_mol_d_OUT_CLK_R_CLK_stupf*/
timing () {
related_pin : "mol_c_OUT_CLK_R_CLK" ;
timing_type : hold_falling ;
/* comment : mol c->d transparency end hold, rise path 6,
fall path 5; */
rise_constraint( scalar ){
values ( "0.104808");
}
fall_constraint( scalar ){
values ( "0.082601");
}
} /* end of arc
mol_c_OUT_CLK_R_CLK_mol_d_OUT_CLK_R_CLK_hldf_min*/
timing () {
related_pin : "mil_q_IN_CLK_F_CLK" ;
timing_type : combinational ;
timing_sense : positive_unate ;
/* comment : IN:CLK:F:CLK -> OUT:CLK:R:CLK connecting max
arc, path 14, path 16; */
cell_rise( scalar ){
values ( "0.221111");
}
rise_transition( f_itrans ){
index_1 ( "0.000000, 1.000000");
values ( "0.000000, 1.000000");
}
cell_fall( scalar ){
values ( "0.276249");
}
fall_transition( f_itrans ){
index_1 ( "0.000000, 1.000000");
values ( "0.000000, 1.000000");
}
} /* end of arc mil_q_IN_CLK_F_CLK_mol_d_OUT_CLK_R_CLK_una*/
} /* end of pin mol_d_OUT_CLK_R_CLK */
pin("mol_c_OUT_CLK_R_CLK") {
direction : internal ;
clock : true ;
capacitance : 0.000000 ;
timing () {
related_pin : "CLK" ;
timing_type : combinational ;
timing_sense : positive_unate ;
/* comment : mol clock feed; */
cell_rise( f_itrans ){
index_1 ( "0.080000, 0.160000, 0.320000");
values ( " 0.251649, 0.266813, 0.286140");
Appendix[Link]xample
Chapter [Link]
[Link]
ModelFile
File
Example [Link] Model File C-9
D-9
NanoTime
NanoTime User
User Guide
Guide Version K-2015.12
K-2015.12
}
rise_transition( f_itrans_ocap ){
index_1 ( "0.000000, 1.000000");
index_2 ( "0.000000, 1.000000");
values ( "0.000000, 0.000000",\
"1.000000, 1.000000");
}
cell_fall( scalar ){
values ( "0.000000");
}
fall_transition( f_itrans_ocap ){
index_1 ( "0.000000, 1.000000");
index_2 ( "0.000000, 1.000000");
values ( "0.000000, 0.000000",\
"1.000000, 1.000000");
}
} /* end of arc CLK_mol_c_OUT_CLK_R_CLK_una_min*/
} /* end of pin mol_c_OUT_CLK_R_CLK */
} /* end of cell */
} /* end of library */
arc
A set of timing constraints associated with a single path.
asynchronous
The lack of a timing relationship between two different clocks or signals (transitions can
occur at any time with respect to each other).
attribute
A string or value associated with an object in the design that carries some information
about that object. For example, the number_of_pins attribute attached to a cell
indicates the number of pins in the cell. You can find out the values of attributes by using
the get_attribute command.
back-annotation
The process of applying detailed parasitic data to a design, allowing a more accurate
timing analysis of the final circuit. The data comes from an external tool such as StarRC
after completion of layout.
BSIM3/BSIM4
The industry-standard MOSFET SPICE models used for circuit simulation and CMOS
technology development.
capture
The process of clocking data into a sequential element at a path endpoint, thus holding
the data launched by an earlier clock edge at the path startpoint.
case analysis
The analysis of a design using fixed logic values on specified input ports.
cell
A component within a circuit with known timing characteristics, which can be used as an
element in building a larger circuit for timing analysis.
GL-1
NanoTime User Guide Version K-2015.12
clock
A periodic signal that latches data into sequential elements. You define a signal to be a
clock and specify its timing characteristics by using the create_clock or
create_generated_clock command.
clock gating
The control of a clock signal by a combinational logic element such as a multiplexer or
AND gate, to either shut down the clock at selected times or to modify the clock pulse
characteristics.
clock propagation
The process of tracing clock signals from the clock input ports, through wires, buffers,
inverters, and clock-gating circuitry, to the clock input pins of sequential elements.
clock path
A timing path that starts at a clock input port or a defined point inside a circuit and ends
at a clock input pin of a sequential element.
clock latency
See latency.
clock skew
See skew.
closing edge
The edge of a clock signal that latches data into a sequential element and ends the
transparency of that element.
collection
A set of objects taken from the current design. For example, the set mylist
[get_clocks "CLK*"] command creates a collection of clocks and sets a variable
called mylist to the collection. Then you can use commands that operate on the
collection, such as remove_clock $mylist. You can also generate and operate on a
collection within a single command, such as remove_clock [get_clocks "CLK*"].
Glossary GL-2
NanoTime User Guide Version K-2015.12
combinational logic
A logic network that only contains elements that have no memory or internal state.
Combinational logic can contain AND, OR, XOR, and inverter elements, but cannot
contain flip-flops, latches, registers, or RAM.
common point
For a setup or hold timing check, the point in the design where the launch clock path
and capture clock path diverge from a common or shared segment.
conservative
An analysis type or technique that favors pessimism (rather than optimism) to ensure
detection of all violations.
constraint
A timing specification or requirement that applies to a path or a design. A timing
constraint limits the allowed range of time during which signals can arrive at a device
input or be valid at a device output.
context characterization
The process of using the characterize_context command to capture the timing
context of a subdesign. This process allows standalone timing analysis of the subdesign
in NanoTime. The timing context of an instance includes clock information, input arrival
times, output delay times, timing exceptions, design rules, propagated constants, input
drives, and capacitive loads.
context independent
Accurate in different contexts. This term refers to the usability, not behavior, of a timing
model. For example, a timing model created with the extract_model command is
context independent with respect to input data arrival time, input data transition time,
data output required time, and output load. The model can be used accurately in
different contexts because its behavior changes with the context in which it is used.
CPU time
The amount of time used by the central processing unit of the computer to accomplish a
task, as reported by the tool. This is a measure of computation resources required for
the task. CPU time is less than the actual elapsed time.
critical path
The path that has the largest violation (or the least timing slack) for a timing check.
current design
The loaded design currently considered to be the top-level design in a design hierarchy,
on which NanoTime commands operate. You can specify the current design with the
current_design command.
Chapter GL:
Glossary GL-3
NanoTime User Guide Version K-2015.12
current instance
The instance (hierarchical cell) in a design hierarchy on which instance-specific
commands operate by default. You can set the current instance with the
current_instance command, which works something like the cd command in UNIX.
data check
A timing check between two data signals, such as handshaking interface signals or
recovery and removal checks between preset and clear pins. The two signals being
checked are called the constrained and related signals. The related signal is the data
signal treated as the clock in the timing relationship. For example, a setup data check
verifies that the constrained signal is stable before the active edge of the related signal.
data path
A timing path that starts at a data launch point and ends at a data capture point. The
term path usually means a data path, although there are other types of paths such as
clock paths.
direct read
An implicit method of reading SPICE models into a NanoTime technology, invoked by
using a .lib statement and including SPICE transistor models in the SPICE netlist files.
DSPF
Detailed Standard Parasitic Format, a format used to store circuit parasitic information
for back-annotation.
endpoint
The place in a design where a timing path ends, where data gets captured by a clock
edge or where the data must be available at a specific time. An endpoint must be at a
sequential element or an output port.
Glossary GL-4
NanoTime User Guide Version K-2015.12
erasing
The process of removing annotations on the design that identify circuit structures
previously marked by the match_topology command or by commands such as
mark_inverter and mark_latch.
evaluate phase
In a domino precharge circuit, the latter part of the clock cycle during which the
precharge node is either discharged or not discharged, depending on the logic states of
the inputs to the circuit.
exception
See timing exception.
exclusive clocks
Two clocks that are never active at the same time (for example, because they are
multiplexed).
false path
A path that exists in a design that should not be analyzed for timing, such as a path
between two multiplexed blocks that are never enabled at the same time.
flip-flop
A stable, nontransparent memory structure that holds a logic 0 or logic 1, such as a
structure made of two NAND gates connected in a feedback configuration. The state of
the memory structure can change only on active clock edges.
gated clock
A clock signal that can be modified by logic within the design, such as a clock that can
be turned off to save power.
generated clock
A clock signal that is generated internally by the integrated circuit itself; a clock that
does not come directly from an external source. An example of a generated clock is a
divide-by-2 clock generated from the system clock, having half the frequency of the
system clock. You specify the characteristics of a generated clock by using the
create_generated_clock command.
hold constraint
A timing constraint that specifies how much time is necessary for data to be stable at the
input of a device after the clock edge that clocks the data into the device. This constraint
enforces a minimum delay on a timing path relative to a clock.
inout pin
A bidirectional pin of a cell; a pin that can operate as both an input and an output.
Chapter GL:
Glossary GL-5
NanoTime User Guide Version K-2015.12
input delay
A constraint that specifies the minimum or maximum amount of delay from a clock edge
to the arrival of a signal at a specified input port. NanoTime uses this information to
check for timing violations at the input port and in the transitive fanout from that input
port.
intellectual property
Information owned by one company that is licensed for use by another company. For
example, one company might offer a license to use a chip submodule such as a
microprocessor core in another company’s application-specific circuit. The owner of the
submodule design can provide the layout information, electrical specifications, and a
timing model to the other company, without revealing the submodule netlist.
intersection transparency
A setup and hold checking mode in which NanoTime uses same-cycle checking when
there is any amount of overlap between the transparency windows at the launch and
capture latches. In the absence of this mode, NanoTime uses same-cycle checking only
when the launch and capture edges occur at the same time.
latch
A memory structure that has two allowable stable states, 0 and 1. The term latch usually
implies a structure that is transparent while the gate input is asserted. In other words,
data passes through from the input to the output when the gate is open (when the gate
input is asserted), and the value is “frozen” when the gate is closed. The
inactive-to-active edge of the gate signal is called the opening edge. The
active-to-inactive edge of the gate signal is called the closing edge.
latency
The amount of time that a clock signal takes to be propagated from the clock source to a
specific point inside the design. The clock signal is “hidden” (latent) for this amount of
time.
launch
The process of clocking data out of a latch or flip-flop at the startpoint of a path,
releasing data that is captured by another clock edge at the endpoint of the path.
library
A database (.db file) containing timing models, read into NanoTime with the
read_library command.
Glossary GL-6
NanoTime User Guide Version K-2015.12
library cell
A timing model stored in a .db library file, which can be read into NanoTime and used in
place of a netlist to represent a lower-level block in a hierarchical analysis.
library topology
A set of files that describe the pattern or subcircuit name and the list of NanoTime
actions taken when the pattern or subcircuit is found. You can selectively enable or
disable each topology within a library by using the set_search_enabled and
remove_search_enabled commands.
linking
The process of resolving the hierarchy of a design, in which NanoTime builds a
complete hierarchical representation of the whole design and stores that design in
memory for analysis.
load
The amount of capacitance on a net that must be driven by the driver of the net when
there is a transition on the net.
logic constraint
A fixed logical relationship specified for a set of nets in the design, such as an inverse
relationship between two nets, or a “one-hot” relationship between a set of four nets
(exactly one of the four nets is true at any given time).
man page
A description of a command, variable, or message code displayed by using the man
command in NanoTime. For example, entering man create_clock at the nt_shell
prompt displays the man page for the create_clock command. This is similar to the
UNIX man command (derived from the word “manual”).
marking
The process of annotating a design to indicate the locations of circuit structures such as
inverters, multiplexers, latches, and domino precharge circuits. Marking can be done
automatically with the match_topology command or manually with commands such as
mark_inverter and mark_latch.
multicycle path
A path that is designed to take more than one clock cycle for the data to propagate from
the startpoint to the endpoint. For proper analysis, you need to define such a path as a
timing exception with the set_multicycle_path command.
N-domino circuit
A domino precharge circuit that has an NMOS evaluate stack and a precharge node that
is first charged and then conditionally discharged during the evaluate phase.
Chapter GL:
Glossary GL-7
NanoTime User Guide Version K-2015.12
net delay
The amount of delay from the driver of a net to a load connected to the net. This delay is
the result of parasitic capacitance of the wire connection between the driver and load.
netlist
A circuit description (nets, components, and connections) provided to NanoTime in the
form of data files. The most common formats are SPICE and Verilog with SPICE.
network latency
The amount of time a clock signal takes to propagate from the clock definition point in
the design to the clock input of a sequential element.
next-cycle checking
Setup and hold timing checks that are based on the assumption that the capture clock
edge occurs in the next clock cycle after the launch clock edge, rather than in the same
clock cycle.
NMOS transistor
A transistor that uses n-type silicon for the source and drain and p-type silicon for the
channel. A positive voltage on the gate induces an n-type conductive path through the
channel.
no-change constraint
The amount of time that a data signal must remain unchanged before, during, and after
a pulse of a control signal (for example, an address signal that must be stable during a
write pulse). The data signal must be stable for a specified setup time before the leading
edge of the control pulse, during the control pulse, and for a specified hold time after the
trailing edge of the control pulse.
nt_shell
The Tcl-based command-line environment of NanoTime that lets you enter commands,
run scripts, and view results.
opening edge
The edge of a clock signal that asserts a gate input of a level-sensitive latch. The latch is
transparent from the opening edge to the closing edge of the clock signal.
operating conditions
The process, voltage, and temperature conditions under which a circuit operates, which
affect the timing characteristics of the cells used in the design. The set_technology
command specifies the technologies (and their associated operating conditions) to use
for analysis.
Glossary GL-8
NanoTime User Guide Version K-2015.12
optimistic
An analysis type or technique with a known accuracy limitation, when the inaccuracy
might indicate that a circuit has more timing slack than the real circuit. As a result, a
violation in the real circuit might not be detected.
output delay
A constraint that specifies the minimum or maximum amount of delay from an output
port to the external sequential device that captures data from that output port. This
constraint establishes the times at which signals must be available at the output port to
meet the setup and hold requirements of the external circuit.
P-domino circuit
A domino predischarge circuit, which has a PMOS evaluate stack and a predischarge
node that is first discharged and then conditionally charged during the evaluate phase.
parasitic capacitance
Capacitance of a net due to the physical proximity between the net interconnections and
adjacent nets or the substrate; or due to the charge storage effects of p-n junctions in
the net.
parasitic resistance
Resistance of an interconnection or net due to the finite conductivity of the interconnect
material.
path
A point-to-point sequence through a design that starts at a register clock pin or an input
port, passes through any number of combinational logic elements and transparent
latches, and ends at a sequential element or output port.
path endpoint
See endpoint.
path startpoint
See startpoint.
path tracing
The process of calculating the delays along different paths in the design, performed by
the trace_paths command in NanoTime.
Chapter GL:
Glossary GL-9
NanoTime User Guide Version K-2015.12
PathMill
The previous-generation Synopsys tool for transistor-level static timing analysis; the
predecessor of NanoTime.
pattern matching
The process of identifying circuit structures within a design that match a given network
of interconnected transistors. This process is useful for identifying and marking
structures that cannot be recognized by other means.
PBSA
See path-based slack adjustment (PBSA).
pessimistic
An analysis type or technique with a known accuracy limitation, when the inaccuracy
might indicate that a circuit has less timing slack than the real circuit. As a result, a
violation might be reported that would not actually exist in the real circuit.
pin
An input or output of a cell or transistor in a design.
PMOS transistor
A transistor that uses p-type silicon for the source and drain and n-type silicon for the
channel. A negative voltage on the gate induces a p-type conductive path through the
channel.
port
An input or output of a design. You specify timing constraints for ports with the
set_input_delay and set_output_delay commands.
precharge circuit
A domino precharge circuit, or the part of such a circuit that charges a node to a high
voltage in preparation for the evaluate phase.
precharge phase
In a domino precharge circuit, the part of the clock cycle during which the precharge
node is charged in preparation for logical evaluation in the evaluate phase.
predischarge circuit
A circuit similar to a domino precharge circuit, except that the internal node is
discharged (rather than charged) in the earlier part of the clock cycle and is conditionally
charged (rather than discharged) during the evaluate phase of the clock cycle. Also
known as a P-domino circuit.
preferred models
In a hierarchical analysis, a list of timing models that are to be used in place of netlists to
represent lower-level blocks in the design hierarchy. The preferred models are specified
with variables such as link_prefer_model.
Glossary GL-10
NanoTime User Guide Version K-2015.12
PrimeTime
The Synopsys standalone, full-chip, gate-level static timing analysis tool. Like
NanoTime, it performs setup and hold checks on timing paths and reports the
worst-case slack values. However, it operates on gate-level rather than transistor-level
netlists, and it depends on library characterization of gates rather than simulation to
determine the circuit element delays.
procedure (Tcl)
A user-defined command created by the proc command in NanoTime. A procedure,
after it is defined, can be executed like an ordinary command. A procedure can take
arguments and can use local and externally defined variables.
pruning
A process during path tracing that removes from consideration the paths that are known
not to be the worst-case paths. This feature reduces runtime without losing information
about the worst-case paths.
pulse clock
A clock consisting of a sequence of pulses whose leading and trailing edges are both
triggered by the same source clock edge. The pulse width is determined by the
differences in delay from the clock source edge to the circuits that generate the leading
and trailing edges of the pulse.
RAM
A memory structure consisting of two equal-strength inverters feeding back into each
other. NanoTime terminates a path search when it reaches a RAM.
recovery constraint
The minimum amount of time required between an asynchronous control signal (such
as the asynchronous clear input of a flip-flop) going inactive and a subsequent active
clock edge. This is like a setup check for the active clock edge. If the active clock edge
occurs too soon after the asynchronous input goes inactive, the register data is
uncertain because the clocked input data might not be valid.
register
A memory structure consisting of a RAM structure driven from both sides, with an output
taken from only one side.
registry
A list of data files that NanoTime is using or intends to use. For example, the netlist
registry is a list of netlist files that have been specified with the register_netlist
command. NanoTime has a netlist registry (for netlist files), technology registry (for
technologies read implicitly from SPICE netlists or with read_spice_model), and a
library registry (for .db timing model libraries read with read_library).
Chapter GL:
Glossary GL-11
NanoTime User Guide Version K-2015.12
related signal
The data signal treated as a clock in a data-to-data timing check. The other signal being
checked is called the constrained signal.
removal constraint
The minimum amount of time required between a clock edge that occurs while an
asynchronous input is active and the subsequent removal of the asserted asynchronous
control signal. This is like a hold check for the removal of the asynchronous control
signal. If the asynchronous input signal goes inactive too soon after a clock edge, the
register data is uncertain because the clocked input data might be valid and conflict with
the asynchronous control signal.
same-cycle checking
Setup and hold timing checks that are based on the assumption that the capture clock
edge occurs in the same clock cycle as the launch clock edge, rather than in the next
clock cycle. This is the default checking mode in NanoTime.
script
A text file containing a sequence of nt_shell commands, which can be executed with the
source command.
SDC
Synopsys Design Constraints, a standard command-file format for specifying timing
constraints that can be shared between different tools such as Design Compiler,
PrimeTime, and NanoTime. An SDC-format file can be executed as a command script in
any of these tools.
segments A, B, C, D
The four path segments considered in a setup or hold check using path-based slack
adjustment (PBSA). Path segment A is the shared or common portion of the launch
clock path and capture clock path (if any), from the clock input port to the common point.
Segment B is the portion of the launch clock path from the common point to the clock pin
of the launching sequential element. Segment C is the portion of the capture clock path
from the common point to the clock pin of the capturing sequential element. Segment D
is the data path from the clock pin of the launching sequential element to the data input
pin of the capturing sequential element.
sequential logic
A logic network that contains elements that have memory or internal state, such as
flip-flops, latches, registers, or RAM.
setup constraint
A timing constraint that specifies how much time is necessary for data to be available at
the input of a device before the clock edge that clocks the data into the device. This
constraint enforces a maximum delay on a timing path relative to a clock.
Glossary GL-12
NanoTime User Guide Version K-2015.12
simulation
The process of determining the behavior of a circuit over a period of time in response to
a stimulus. NanoTime performs simulation of small circuit units in the design as a part of
path tracing with the trace_paths command.
simulation level
One channel-connected block used as a simulation unit for timing analysis. For
example, an inverter is typically considered one simulation unit or one level. An analysis
using path-based slack adjustment (PBSA) can adjust the slack based on the number of
simulation levels in the paths belonging to the timing check.
skew
The shift or variation from the nominal, expected time that a clock transition occurs; or
the difference in the amount of shift between two different points in a clock network.
slack
The amount of time by which a violation is avoided. For example, if a signal must reach
a cell input at no later than 8 ns and is determined to arrive at 5 ns, the slack is 3 ns. A
slack of 0 means that the timing constraint is just barely satisfied. A negative slack
indicates a timing violation.
slew
The amount of time it takes for a signal to change from low to high or from high to low;
also known as transition time.
source latency
The amount of time a clock signal takes to propagate from its ideal waveform origin
point to the clock definition point in the design.
SPEF
Standard Parasitic Exchange Format, a format used to store circuit parasitic information
for back-annotation. This format is defined by Open Verilog International (OVI).
SPICE
Simulation Program with Integrated Circuit Emphasis, a time-based simulation tool that
analyzes circuit operation at the level of transistors, capacitors, and resistors. Many
different forms of this simulator are available from different sources.
startpoint
The place in a design where a timing path starts, where data is launched by a clock
edge or where the data is expected to be available at a specific time. A startpoint must
be either the clock pin of a sequential element or an input port.
Chapter GL:
Glossary GL-13
NanoTime User Guide Version K-2015.12
full circuit simulation, static timing analysis is faster and more thorough, and does not
require test vectors. However, it does not check the functionality of the circuit.
synchronous
A timing relationship between two clocks or signals in which specific transitions occur at
the same time or have a phase relationship that stays fixed over time.
Tcl
Tool command language, a standard command scripting language on which the nt_shell
interface is based. You can use this language to write scripts for performing complex
tasks in NanoTime.
Tcl procedure
See procedure (Tcl).
technology
A set of SPICE transistor models read into NanoTime implicitly with the SPICE netlist or
explicitly with the read_spice_model command. NanoTime uses a technology for
SPICE simulation of the design. After it is read in, the set_technology command
specifies which technology to use for tracing minimum data paths, maximum data paths,
minimum clock paths, and maximum clock paths.
three-state
An output of a device that can be in any of three logical states: low (0), high (1), or the
high-impedance state (Z).
timing arc
See arc.
timing exception
A path-level exception to the default timing behavior assumed by NanoTime, such as a
false path or multicycle path. You must declare such exceptions for NanoTime to
correctly perform timing checks on those paths.
timing model
A model created by the extract_model command. A timing model represents the
timing characteristics of the block but does not contain any functional information. These
models are used in hierarchical timing analysis to simplify analysis of large designs.
topology
The arrangement or configuration of transistors and connections that form a structure,
or a structure that has been recognized by its configuration. NanoTime can recognize
structures (transfer gates, latches, registers, inverters, and so on) based on the topology
of the design.
Glossary GL-14
NanoTime User Guide Version K-2015.12
topology library
A directory containing a set of topology definitions. There are two default topology
libraries, called the common and global libraries. You can also create your own custom
libraries. You can selectively enable or disable each library so that NanoTime spends
time searching only for topologies expected to exist in the design.
topology recognition
The automated recognition of circuit structures such as inverters, multiplexers, latches,
and domino precharge circuits from the configuration of interconnected transistors. This
process is invoked by the match_topology command.
transfer gate
A circuit structure that either passes or blocks a signal based on the state of a control
signal or a pair of complementary control signals.
transition time
The amount of time it takes for a signal to change from low to high or from high to low;
also known as slew.
turnoff
A circuit structure consisting of two PMOS pullup transistors and two NMOS pulldown
transistors connected in series, with complementary enable signals at the respective
PMOS and NMOS transistor gates. NanoTime performs contention analysis at each
turnoff structure.
variable
A NanoTime parameter that can be set to a string, integer, or floating-point value that
affects the analysis. Variables can be set with the set command and reported with the
printvar command.
weak pullup
A transistor that is turned on and connected to the power supply voltage at one end.
NanoTime assumes that the transistor pulls up the net at the other end of the transistor
when there is nothing pulling the net down.
Chapter GL:
Glossary GL-15
NanoTime User Guide Version K-2015.12
Glossary GL-16