VC LP Ug
VC LP Ug
VC LP
User Guide
Version S-2021.09-SP1, December 2021
Copyright Notice and Proprietary Information
2021 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 http://www.synopsys.com/
company/legal/trademarks-brands.html.
All other product or company names may be trademarks of their respective owners.
Free and Open-Source Software Licensing Notices
If applicable, Free and Open-Source Software (FOSS) licensing notices are available in the product installation.
Third-Party Links
Any links to third-party websites included in this document are for your convenience only. Synopsys does not endorse
and is not responsible for such websites and their practices, including privacy practices, availability, and content.
www.synopsys.com
Synopsys Statement on Inclusivity and Diversity
Synopsys is committed to creating an inclusive environment where every employee, customer, and partner feels
welcomed. We are reviewing and removing exclusionary language from our products and supporting customer-facing
collateral. Our effort also includes internal initiatives to remove biased language from our engineering and working
environment, including terms that are embedded in our software and IPs. At the same time, we are working to ensure
that our web content and software applications are usable to people of varying abilities. You may still find examples of
non-inclusive language in our software or documentation as our IPs implement industry-standard specifications that
are currently under review to remove exclusionary language.
VC LP User Guide Contents
1Contents
Chapter 1Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Chapter 1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1 Verification Compiler Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 VC Static and Formal Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 VC LP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.1 Key Features of VC LP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.2 VC LP Low Power Checks Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Chapter 2
Getting Started With VC LP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1 Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Setting Up VC LP Design Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.1 Setting The VC_STATIC_HOME Environment Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.2 Changing the VC Static Session Name and Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.3 Updating the vc_static_shell Setup File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.4 Updating Application Variable Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.5 Configuring Message Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.6 Running Electrical Sign off Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Chapter 3
Reading and Building Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1 Reading the Liberty Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.1 The search_path and link_library Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.2 Tcl Commands to Append Missing Liberty Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2 Reading the Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.1 Application Variables that Impact Reading a Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.2 Reading RTL Designs Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.3 Reading Netlist Designs Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.4 Support for Reporting Message Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.5 Migrating Designs from Other Synopsys Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.2.6 Support for MULTI_PORT_MEM Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Chapter 4
Debugging VC LP Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.1 Understanding VC LP Violation Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.1.1 Message IDs and Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.1.2 Compressing Violations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
4.2 Smart Grouping of Violations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
4.2.1 Scenarios of Smart Grouping Violations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
4.2.2 Use Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
4.2.3 Supported Application Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
4.2.4 Violations Introduced for This Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
4.2.5 Viewing the RCA Results Dashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
4.2.6 Viewing Smart Grouping of Violations in GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
4.2.7 Tag Coverage Supported . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
4.2.8 Limitations on The Smart Grouping of Violation Feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
4.3 Debugging using Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
4.3.1 Reporting Violations with report_violations -app LP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4.3.2 Viewing User-defined Object Names in Violation Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
4.3.3 Filtering Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
4.3.4 Operations on Tag Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
4.3.5 Custom Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4.3.6 Waiving Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
4.4 Tcl Query Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
4.4.1 Design Query Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
4.4.2 Low Power Query Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
4.5 Debugging Using GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
4.5.1 Handling Memory in Netlist flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
4.5.2 Using Verdi for Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
4.5.3 Support for NLDM Based nSchema Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
4.5.4 Using Verdi Power Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
4.5.5 Opening Multiple nSchema Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
4.5.6 Using the Locator Function in Verdi Schematic Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
4.5.7 Colorize by Root Supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
4.5.8 Support for Consistent Name Resolution in VC Static and Verdi . . . . . . . . . . . . . . . . . . . . . . . 223
4.5.9 Using VC Static Native GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
4.5.10 Using VC Static Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Chapter 5
Handling Special LP Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
5.1 Special VC LP features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
5.1.1 Signal Corruption Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
5.1.2 Bias Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
5.1.3 Support for Bias Checks for Flipwell Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
5.1.4 Support for Self Bias Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
5.1.5 Analog Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Chapter 6
Using VC LP in Various Design and Verification Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
6.1 Hierarchical Verification Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
6.1.1 Black Box or Stub Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
6.1.2 ETM Based UPF Hierarchical Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
6.1.3 Common Parser Level Limitations for Black box and ETM flow . . . . . . . . . . . . . . . . . . . . . . . . 569
6.2 Golden UPF Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
6.2.1 Supplement UPF File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
6.2.2 Name Mapping File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
6.2.3 Use Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
6.2.4 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
6.3 Support for Static Abstraction Model Based Hierarchical Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
6.3.1 Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
6.3.2 Use Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
6.3.3 New SAM Abstraction (Lightweight SAM) Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
6.3.4 Enhancements to Stub and Black box Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
6.3.5 Macro Cells with Internal Isolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
6.3.6 PSW Port Punching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
6.3.7 Debug diagnostics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
6.3.8 Parser Messages, Tcl Commands and Application Variables Introduced . . . . . . . . . . . . . . . . . 580
6.3.9 Support to Retain Control Sources Driving Primary Outputs of a SAM Boundary . . . . . . . . 585
6.3.10 Support for Comparing Architectural Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
6.3.11 Support for SAM with NPS Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
6.3.12 Support for Single Run SAM Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
6.3.13 Support for OnTheFly SAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
1
Introduction
This chapter provides an introduction to Verification Compiler Platform, VC Static Platform and VC LP.
The chapter is organized into the following sections:
❖ “Verification Compiler Platform”
❖ “VC Static and Formal Platform”
❖ “VC LP”
Synopsys' VC Static and Formal verification solution combines the best-in-class technologies for improved
ease-of-use, accuracy, and performance. It also provides with low violation noise and excellent debug
capabilities. This solution enables designers and verification engineers to quickly and easily find and fix
bugs in RTL before simulation; thus reducing the time needed before software bring-up, hardware
emulation, and prototyping.
VC Formal verification offers property checking that consists of mathematical techniques to test properties
or assertions to ensure the correct functionality of RTL designs. RTL is further verified for functionality and
policy compliance. Model checking technique exhaustively and automatically checks whether a model
adheres to a given specification and verifies correct properties of finite-state systems. For more information,
see the VC Formal Verification User Guide.
1.3 VC LP
VC LP is a multi-voltage, static low power rule checker that allows engineers to rapidly verify designs that
use voltage control based techniques for power management. VC LP is part of the Synospys Eclypse Flow.
VC LP also helps in pipe-cleaning the power intent of the design that is captured in IEEE 1801 Unified
Power Format (UPF) before such intent is used as a golden reference for implementation and other
verification tools. Further, VC LP verifies the implemented power-intent later in the design flow.
VC LP is integrated with Verdi to provide designers and verification engineers access to the combined
power of low power specific debug features and use Verdi's de facto industry-standard workflow, interface
and powerful debug capabilities.
❖ At RTL-level, the VC LP UPF checks help in identifying power intent issues early in the design life-
cycle and enable you to arrive at a clean UPF before starting the design flow. The VC LP UPF checks
ensure that the UPF is complete and the design conforms to all the isolation and level shifter rules
for all power-modes.
For example, the VC LP UPF checks help in power intent validation by identifying missing or
redundant ISO/LS policies as illustrated in Figure 1-2.
❖ At Netlist level, the VC LP UPF and functional (architectural) checks ensure that the netlist is
consistent with UPF in structure and function. The UPF checks ensure the design instances are
consistent with UPF. The architectural checks ensure that the implemented design is functionally
correct. There might be cases where the design is structurally correct but functionally incorrect. The
VC LP architectural checks identify these low power functional issues even though the implemented
design might be structurally correct. The VC LP UPF and Structural checks also help in identifying
implementation issues by verifying if the low power cells (ISO/LS/RET) inserted in the design is
consistent with the UPF and the library. The other VC LP functional checks include Analog checks,
Inout checks, Bias checks, Diode checks and so on.
❖ The VC LP Power Ground checks help validate the power network implementation by verifying if
the Power/Ground pin connectivity in the post-layout design is consistent with UPF and cell library.
2
Getting Started With VC LP
This section describes how you can get started with VC LP. This section assumes you have a licensed copy
of the software and have it installed on your system.
This chapter is organized into the following sections:
❖ “Prerequisites”
❖ “Setting Up VC LP Design Environment”
2.1 Prerequisites
VC LP takes in an RTL (Verilog, VHDL, SVD), netlist (Verilog) or post-layout netlist of the design. It reads
the Liberty DB file for resolving, elaborating the design, recognizing special cells and annotating power
connections. It accepts the power intent specified in the UPF.
As an output, VC LP creates a log file, an error and warnings report for all violations related to low power
static rule checks. VC LP provides a Tcl infrastructure that helps in debugging these violations. You can also
use the VC LP GUI to debug your design violations.
UPF Requirements
VC LP supports the industry-standard UPF IEEE 1801 subset that is used to capture low power design
requirements. UPF is a standard set of Tcl commands used to specify the power intent of the design. Using
UPF commands, you can specify the supply network, switches, isolation, retention, and other aspects
pertinent to the power management of the design. This single set of commands can be used for verification,
analysis, and implementation of the design.
For more details on the list of supported UPF commands, see section “Supported LP Checks”.
Design Requirements
VC LP supports RTL (Verilog, VHDL, MX, SVD) and PG netlists (Verilog).
Liberty Requirements
VC LP requires industry standard liberty files (compiled .db files) for gate level netlists (with or without PG
routing). Low power cells in the design need to have specific library attributes as recommended for
Synopsys Eclypse Flow.
debug options:
[-echo] Echo the environment but do not invoke the
executable.
Use Model
Using vc_static_shell in batch mode
%vc_static_shell -f vcst.tcl -batch -o vcst_screen.log
Using vc_static_shell in interactive mode
%vc_static_shell -f vcst.tcl -o vcst_screen.log
Note
When you use the -batch option, VC LP automatically quits the shell even when quit is not explicitly
specified in the vcst.tcl file or when an unexpected error occurs and the full run is not complete. This is
useful for regression runs.
custom scripts) that must be loaded each time you invoke the vc_static_shell. The key components of
the .synopsys_vcst.setup file are the name mappings in the design libraries and the variable assignments.
When you invoke VC Static, VC LP looks for the .synopsys_vcst.setup files in the following three
directories in the following order:
1. Master Setup Directory
The .synopsys_vcst.setup file in the $VC_STATIC_HOME/bin directory contains default
settings for the entire installation. If this file exists, VC LP reads it first.
2. User Home Directory
VC LP reads the setup file in your home directory second, if present. The settings in this file take
precedence over the conflicting settings in the .synopsys_vcst.setup file in the master setup
directory, and carry over the rest.
3. User Run Directory
VC LP reads the setup file in your design directory last. The settings in this file take precedence over
the conflicting settings in the .synopsys_vcst.setup file in the master setup directory, and the
.synopsys_vcst.setup file in your home directory, and will carry over the rest. You can use this
file to customize the environment for a particular design.
Table 2-1 The .synopsys_vcst.setup Files
.synopsys_vcst.setup User home directory Contains your preferences for the VC LP working
environment.
Note
If you want to prevent VC LP from reading setup files, you can use the -no_init command line switch.
allow_upf_lrm_extension = "false"
analyze_skip_translate_body = "true"
annotate_iso_in_corr_control_state = "false"
...
....
....
.....
Example 2
%vc_static_shell> report_app_var *diode*
Variable Value Type Default Constraints
----------------------- --------- ------- ---------- -----------------------
vdd_type_diode_cell_name string
vdd_vss_type_diode_cell_name string
vss_type_diode_cell_name string
Example 3
%vc_static_shell> report_app_var upf_buffer_list -verbose
Variable Value Type Default Constraints
----------------------- --------- ------- ---------- -----------------------
upf_buffer_list string
# list of user specified buffers
For more information on the available application variables and their functions, the man pages of the
application variables.
You can change the default behavior of VC LP by changing the default settings of the application variables.
You can use the set_app_var command to change the setting of an application variable. The following
example shows how to set a variable to true
%vc_static_shell>set_app_var lp_ack_port_from_strategy true
Note
Configuring the low power checks for a given design/run is one of the most important review that must be
done by the design engineer. Disabling an LP check/tag using the configure_tag -app LP command
does not necessarily improve the VC LP run time.
Syntax
%vc_static_shell> configure_tag -app LP
Usage: configure_tag -app LP # Displays and configures low power violation tags
[-tag <tag list>] (Defines the tag(s) operated on)
[-stage <stage list>] (Apply tag alternations to the entire group(s):
Values: all, design, pg, upf)
[-enable] (Enables the tag(s))
[-disable] (Disables the tag(s))
[-severity <error|warning|info>]
(Sets the tag(s) severity level:
Values: all, error, info, warning)
[-clear] (Restores all tags to their original state)
[-tcl] (Displays changes to the low power tag set in a TCL format
suitable for replay)
[-regexp] (Allows regexp expressions in the tag list (default glob-
style))
[-all] (Displays all messages, even with default enable and
severity status)
[-verbose] (Displays additional details for each message)
[-goal <goal name>] (Defer effect until goal is checked)
Use Models
To enable all tags in VC LP, use the following command:
%vc_static_shell> configure_tag -app LP -tag * -enable
Other possible use models
%vc_static_shell> configure_tag -app LP –tag/-stage <tag/stage list> –disable/-enable
%vc_static_shell> configure_tag -app LP –tag/-stage <tag/stage list> –severity
<error|warning|info>
%vc_static_shell> configure_tag -app LP –regexp –tag <tag list> –disable/-enable
%vc_static_shell> configure_tag -app LP –regexp –tag <tag list> –severity
<error|warning|info>
%vc_static_shell> configure_tag -app LP –clear
%vc_static_shell> configure_tag -app LP –tcl
%vc_static_shell> configure_tag -app LP
%vc_static_shell> configure_tag -app LP -enable -tag
%vc_static_shell> configure_tag -app LP -all -verbose > all_tags.rpt
The following example shows VC LP reports of a design before and after configuration of certain
tags/checks.
The following is the output without the use of the configure_tag -app LP command:
%vc_static_shell>report_violations -app LP
-------------------------------------------------------
Tree Summary
-------------------------------------------------------
Severity Stage Tag Count
-------- ----- --------------------- -----
error UPF LS_STRATEGY_MISSING 5
error Design ISO_INST_MISSING 2
error Design ISO_STRATEGY_MISSING 2
-------- ----- --------------------- -----
Total 9
The following is the output after the use of the configure_tag -app LP command:
Violation : LP:8
SupplyPort
PortName : VDD
PortType : UPF
Instance : top
Cell : top
Goal : g1
3
Reading and Building Design
Before performing various analysis operations on the design, you must first read and build the design. You
can then later analyze, debug and resolve any potential problems.
The high level flow for a LP design check has the following steps.
❖ “Reading the Liberty Files”
❖ “Reading the Design”
❖ “Checking Successfully Built Design”
❖ “Reading Power Intent”
❖ “Analyzing Compiler Messages”
❖ “Running VC LP Checks”
❖ “Checking Reports”
❖ “Saving and Restoring Sessions Using save_session and -restore”
❖ “Saving and Restoring Sessions Using CR Technology”
❖ “Support for Auto-Saving and Auto-Restarting Sessions”
❖ “Support for Comparing Results Of Two VC LP Sessions”
❖ “Handling Encryption”
❖ “Extracting Test Cases Automatically”
❖ “In-design integration of ICC2 and VC LP”
❖ Specify all the paths where the library files, design or UPF files must to be searched. The paths may
be absolute or relative to the directory in which VC LP is invoked.
❖ If multiple paths are present, they should be provided as space separated values within double
quotes.
❖ The search_path variable supports environment variables.
❖ The search_path variable does not support Wildcards characters.
The link_library application variable specifies a list of .db library files to be searched when a cell
instantiation is to be resolved.
%vc_static_shell> set_app_var link_library <list of.db files>
❖ Specify all the library files that are required to be read.
❖ Only Liberty .db files (not .lib files) will be read into the tool.
❖ If multiple .db files are present, they should be provided as space separated values within double
quotes.
❖ The link_library variable does not support environment variables.
Example
%vc_static_shell> set_app_var set search_path “. path1 path2 …"
%vc_static_shell> set_app_var set link_library “lib1 lib2 … libN"
set_pg_pin_model SW* \
-pg_pin_name { VDD VDDG VSS } \
-pg_pin_type {internal_power primary_power primary_ground} \
-pg_voltage_name {VDD VDDG VSS}
set_pin_model SW* \
-pins {SLEEP SLEEPOUT} \
-related_power_pin VDDG \
-related_ground_pin VSS
Syntax
%vc_static_shell> elaborate -help
Usage: elaborate # Elaborate the design, which is analyzed using analyze command
[-work <library_name>] (Specifies the library name to which work is to be
mapped)
[-library <library_name>]
(Specifies the library name to which work is to be
mapped)
[-architecture <arch_name>]
(Specifies the name of the architecture)
[-parameters <param_list>]
(Specifies a list of design parameters enclosed in
quotes)
[-file_parameters <file_list>]
(Specifies a list of files that contain parameter
specifications)
[-vcs <vcs_cmd>] (VCS Command line for elaborating design)
[-sva] (Process SVA/PSL during compilation using 2009 semantics)
[-sva2005] (Process SVA/PSL during compilation using 2005 semantics)
[-v2kconfig <configuration-name>]
(Specifies the v2k configuration)
[-buildTop <dut name>] (Specifies the DUT down from which synthesis model is
generated)
[-cov <metric_type>] (Enables coverage instrumentation during compilation)
[-llk <llk_type>] (Creates livelock goals during compilation)
[-aep <aep_type>] (Enables AEP extraction during compilation)
[-inject_fault <fault_type>]
(Injects behavioral faults in the design for doing sign-
off with formal)
[-j <number_of_processes>]
(Specifies the number of processes to use for parallel
compilation:
Value >= 1)
design_name (Specifies the name of the design to build)
Note
(1) If there is one design top, it must not be passed using vcs arguments, that is, elaborate –vcs
{designtop}. It must be passed as follows: elaborate designtop
(2) For a model with several top modules (in following example: “dut_top” and “tb_top”), you must pass
the arguments as follows: elaborate dut_top -vcs "tb_top"
❖ read_verilog: Reads in one or more design or library files in Verilog format.
Syntax
%vc_static_shell> read_verilog -help
Usage: read_verilog # Read one or more verilog files
[-netlist] (Use structural Verilog netlist reader)
[-rtl] (Use RTL Verilog)
file_names (Files to read)
❖ read_vhdl: Reads in one or more designs or library files in VHDL format.
Syntax
%vc_static_shell> read_vhdl -help
Usage: read_vhdl # Read one or more vhdl files
[-netlist] (Use structural VHDL netlist reader)
file_names (Files to read)
❖ read_sverilog: Reads in one or more design or library files in SystemVerilog format.
Syntax
%vc_static_shell> read_sverilog -help
Usage: read_sverilog # Read one or more systemverilog files
[-netlist] (Use structural Verilog netlist reader)
[-rtl] (Use RTL Systemverilog)
file_names (Files to read)
For more details on each of these commands, refer to the VC Static Platform Command Reference Guide.
❖ You cannot use the -netlist option for encrypted netlist files.
❖ You can use *.Gzip file as an input to the analyze command, but not the *.tar file
3.2.2.6 Elaborating Design Files and Config Files Parsed to Logical Library
If the design top (say: sctop) is parsed to logical library sc_top_li, and if the V2K config (say: m0_design) is
parsed to logical library sc_cfg_lib, then use the following command to elaborate a design:
elaborate sctop -work sc_cfg_lib -v2kconfig m0_design -vcs {...
TB
/------DUT
/ /------CPU
/ /--------RCG
/------DRIVER
Usage of buildTop:
For RTL:
Note
For the example above, VC Static considers only the files under the CPU hierarchy. The UPF hierarchy
must also be as per the CPU hierarchy as it is considered as the design top with the -buildTop option.
Note
It is recommended that you clean up the vcst_rtdb database for successive VC LP runs.
[-comment <comment>]
(Waiver comment)
[-delete <name(s)>]
(Delete waiver)
[-delete_all] (Delete all waivers)
[-tcl] (Display the waivers in TCL command format)
[-force] (Create a container for waive_read append operations)
[-tag <tag>] (Waive violations based on tag)
[-id <tag>] (Waive violations based on IDs)
-family <family> (Waive violations based on family:
Values: upf, design, sdc)
[-severity <list>] (Waive violations based on severity:
Values: all, error, info, warning)
[-filter <expression>] (Waive violations based on expression)
[-regexp] (Indicates filter expression type to be regular expression
(default glob-style))
[-nocase] (Filter expressions ignore case when matching string
values)
Example
❖ waive_read -family design -delete Design_info
❖ waive_read -add UPF_FILE_PARSING_1 -tag UPF_FILE_PARSING -family UPF -comment
"GUPF parsing complete...."
Example 1
Compiling MX designs into physical libraries
Note
You must manually create a directory structure called synopsys_sim.setup in VCS; however, VC LP
creates these directories automatically.
The encrypted source files written in Verilog/VHDL. These are synthesizable and can be used within
Synopsys applications. These parts may be hierarchical and use other encrypted DW subparts. To use these
parts in the VC Static flow, all of the parts referenced by a DW part must be analyzed prior to elaboration.
Supporting DW components in the VC Static platform is a two step approach.
❖ Pre-analyze the DW library as part of the VC Static installation. This is done once per customer site.
❖ Compile designs with DW using the pre-analyzed library.
analyze 100.v
Such a file list can slow down the design read time in VC Static. However, under a mode, the tool
can automatically combine them into fewer actual analysis operations, thereby improving design
read times. To enable this, set the enable_opt_analyze application variable before any
analyze/read_file command.
%vc_static_shell> set_app_var enable_opt_analyze true
2. If you have machines with multiple cores, VC Static can make use of them to boost the design read
times. This feature is called parallel SIMON and is applicable to RTL design reads only.
The option -j <NUM_PROCESS> can be used with the read_file or elaborate commands to
specify the number of processes to use for parallel compilation in an RTL flow.
Use Model:
analyze top.v
elaborate top –j <NUM_PROCESS>
Note
To enable multi-threading feature for read_file stage, the VT-VC-BETA license should be checked out.
Ideal value of NUM_PROCESS (value of j):
The value of j should be less than the number of cores available on the machine. Any value that is
greater than the number of cores available degrades the performance. Through experiment and
regression benchmarks data, it is found that the value of 4 or 8 (provided such number of cores is
available on machine) is ideal for j for most of the benchmarks. You must use a multi-core machine
to run parallel compilations in the RTL flow. If you are not using a multi-core machine, then you
must not use the -j option, as it degrades the performance.
3.3.1.1 Checking Two Libraries Models for the Same cell with Different Attributes
When there are two libraries models for the same cell with different attributes, VC LP picks only one cell
attributes for elaboration and linking, however, you may expect the other cell with different attributes is
picked. As the cell names are same but attributes are different, which cell is chosen for linking can impact
electrical checks. Therefore, report_cell_classification is improved to report inconsistencies when
there are multiple libraries defined for the same cell. However, it is recommended that you provide only
one liberty model per cell.
The report_cell_classification Tcl command reports deviation for cases when there are two
libraries/DBs (with different file names) containing the same cell with different attributes.
Currently, the report_cell_classification command reports deviation if one of the following attributes
is different:
❖ voltage_map value
❖ related_power_pin
❖ related_ground_pin
❖ input_voltage_range
❖ output_voltage_range
❖ Number of Logic Pins
❖ Number of PG Pins
❖ Different Pin Names
❖ Function attribute, with missing related_power_pin and/or related_ground_pin
If a lib pin has 'function' attribute, with missing related_power_pin and/or related_ground_pin
attributes, the issue will be captured under "report_cell_classification" tcl command output and
"LIB_PINATTR_MISSING" LP rule. These will be triggered even when 'is_unconnected' attribute
present at the lib pin.
Example
Consider the following two cells defined in two libraries. These cells have different attributes in the
libraries.
DB1
===
cell(MY_CELL) {
......
pin(A) {
related_power_pin : VDD;
related_ground_pin : VSS;
....
}
.....
}
DB2
===
cell(MY_CELL) {
......
pin(A) {
related_power_pin : VDD1;
related_ground_pin : VSS;
....
}
.....
}
The following is output of the report_cell_classification command:
====================
Cell Name Cell Type Deviation Reason
----------- ---------------- ---------- -------------------------------- ---
MY_CELL standard_cell true DB1/MY_CELL DB2/MY_CELL
pin A: related_power_pin VDD pin A: related_power_pin VDD1
3.3.2 Identifying Black boxes, Empty Modules and Modules Without Definitions
VC LP is equipped to identify empty modules, black boxes, modules that do not have a definition and those
that do not qualify the synthesis stage using the report_link Tcl command.
The output of the report_link command includes module names, which contains simulation definitions
and liberty definitions. However, the port name, port width and port direction specified in an instance
connection does not match with ports specified in a liberty definition. In this case, the liberty definition is
discarded and the simulation definition is used in those instances. When the –sim_match option is
specified, the output of the report_link command includes all modules that have a simulation and liberty
definition included.
Syntax
%vc_static_shell> report_link -help
Usage: report_link # Report status of the design build using Simon/VNR
[-sim_match] (Includes library cells where a simulation model is given)
Use Model
%vc_static_shell> report_link
Module Instances Reason
------ ---------- ------
Module1 3 SimPort*, Synthesis
Module2 1 SimDirection*
Module3 17 Empty
Reasons for
S.No report_link Description
2 Synthesis Any part of the module is left out due to non-synth constructs or
unsupported constructs, even if the majority of the module is
synthesized successfully.
The entire circuit is black-boxed due to tool support or if the module
is detected as simulation memory.
8 DirtyData* Module definition is picked after doing dirty data handling for some
of its instances in the design.
9 SimMatch* Both liberty and simulation definition appear; the liberty definition
has been kept because the port list, directions and widths match
exactly for some of its instances.
10 Unresolved There is no definition for the module among any of the Simulation
definition or liberty files.
Note
STAR (*) marked on report_link reason indicates this reason is instance specific and you need to look into
the warning or error messages to know instance specific details.
----------------------------------------------------------
GUI/Filter support is not yet available for this feature; it is planned to be provided in a future release.
Note
The VC_LP_MT_NT license would be checked-out during the execution of read_upf -j option.
Notes:
❖ If you are in the golden UPF flow (RTL level UPF being used for netlist/PG netlist designs), the
design transformation information should be provided in a supplemental UPF file (using the
read_upf -supplemental command). For more information on the golden UPF flow, see section
“Golden UPF Flow”.
❖ VC LP does not allow UPF to be read in without successful design read.
❖ The load_upf and read_upf command can be used interchangeably.
❖ UPF must be read in the form of a file. VC LP does not allow UPF Tcl commands such as
create_power_domain directly on the vc_static_shell.
1
%vc_static_shell> check_lp -stage upf // User can also remove UPF after
check_lp
1
%vc_static_shell>report_violations -app LP
1
%vc_static_shell> remove_upf
1
%vc_static_shell> read_upf top.upf
1
%vc_static_shell>check_lp -stage upf //Now checks done based on Modified UPF
1
Note
Currently, the expanded UPF file is not recommended to be used as the golden UPF file for a design. The
expanded UPF file is provided as a debug methodology.
To save the UPF file with all the wild cards expanded, use the enable_lp_dump_debug_reports
dump_decompile_upf command.
%vc_static_shell> enable_lp_dump_debug_reports dump_decompile_upf
Example
❖ The following is an example UPF command with wild card characters:
create_power_domain PD1 -elements {A*}
create_supply_port VDD
create_supply_port VDD1
create_supply_port VDD2
create_supply_net VDD
create_supply_net VDD1
create_supply_net VDD2
The support for boolean UPF expressions are enhanced to align all the Synopsys tools under a common
specifications for boolean expressions support.
❖ upfdatamodel
Example
❖ There is an isolation requirement and a level shifter requirement from domain PD1 to top depending
on the supply states of their primary supplies.
Consider the following UPF:
top --> primary supply (VDD1)
PD1 --> primary supply (VDD)
create_pst stble -supplies {VDD VDD1 VSS}
add_pst_state PD1off -pst stble -state {OFF ON_0_9A ON}
add_pst_state PD1diff -pst stble -state {ON_0_9 ON_1 ON}
Use the analyze_domain_crossings tcl command to get a report of the ISO and LS requirements:
Source Sink Isolation? LevelShifter?
------ ---- ---------- -------------
PD1 top Yes LH
top PD1 No HL
Message Description
MODEL_NOT_FOUND_WARN When the < model name> specified with command option
'set_design_attributes -models' cannot be resolved
Message Description
Unavailable elements Plato ignores the create_power_switch Pixl2 evaluates the create_power_swich
specified in command at the 1st error. Plato gives command further, and errors out for other
create_power_switch - UPF_OBJECTS_NOT_FOUND errors fault such as referring to the unavailable
control_port option for the UPF commands which refer to the port in -on_state
supply ports of the ignored psw strategy. (UPF_PSW_EXPR_CONTROL_PORT).
Violation debug fields for Either one of the equivalent supplies may Supply defined first will be reported in the
equivalent net/supply set be reported in the debug fields debug fields
Note
This feature is available with Beta Support under the VC-LP-ULTRA license. For more information on this
feature, contact [email protected]
Note
For the BBOX scoped UPF, this feature will not work.
Note
For more details on these violations, refer to the man pages.
Violation tags related to isolation strategy
❖ DIFF_ISO_CLAMP
❖ DIFF_ISO_ELEMENT
❖ DIFF_ISO_GROUND
❖ DIFF_ISO_MAP
❖ DIFF_ISO_LOCATION
❖ DIFF_ISO_NOISO
❖ DIFF_ISO_MISSING
❖ DIFF_ISO_POWER
❖ DIFF_ISO_SINK
❖ DIFF_ISO_SOURCE
❖ DIFF_ISO_SENSE
❖ DIFF_ISO_APPLIES
❖ DIFF_ISO_SIGNAL
Violation tags related to level-shifter strategy
❖ DIFF_LS_ELEMENT
❖ DIFF_LS_FORCE
❖ DIFF_LS_LOCATION
❖ DIFF_LS_NOSHIFT
❖ DIFF_LS_MISSING
❖ DIFF_LS_RULE
❖ DIFF_LS_THRESHOLD
❖ DIFF_LS_MAP
Violation tags related to power-switch strategy
❖ DIFF_PSW_ACK
❖ DIFF_PSW_CONTROL
❖ DIFF_PSW_INPUT
❖ DIFF_PSW_MAP
❖ DIFF_PSW_MISSING
❖ DIFF_PSW_OFFSTATE
❖ DIFF_PSW_ONSTATE
❖ DIFF_PSW_OUTPUT
❖ DIFF_PSW_DOMAIN
❖ DIFF_PSW_ONSTATEEXPR
❖ DIFF_PSW_ONPARTSTATEEXPR
❖ DIFF_PSW_ERRSTATE
❖ DIFF_PSW_ERRSTATEEXPR
❖ DIFF_PSW_OFFSTATEEXPR
❖ DIFF_PSW_ACKEXPR
Violation tags related to retention strategy
❖ DIFF_RET_ELEMENT
❖ DIFF_RET_GROUND
❖ DIFF_RET_MAP
❖ DIFF_RET_NORET
❖ DIFF_RET_MISSING
❖ DIFF_RET_POWER
❖ DIFF_RET_PRIMARY
❖ DIFF_RET_RESTORE
❖ DIFF_RET_SAVE
❖ DIFF_RET_DOMAIN
❖ DIFF_RET_SAVESENSE
❖ DIFF_RET_RESTORESENSE
Violation tags related to SUPPLY_SET
❖ DIFF_SET_MISSING
❖ DIFF_SET_GROUND
❖ DIFF_SET_POWER
❖ DIFF_SET_NWELL
❖ DIFF_SET_PWELL
Violations related to SPA_SRSN
❖ DIFF_SPA_MISSING
❖ DIFF_SPA_DRIVER
❖ DIFF_SPA_RECEIVER
❖ DIFF_SRSN_MISSING
❖ DIFF_SRSN_POWER
❖ DIFF_SRSN_GROUND
Violations related to PST
❖ DIFF_PST_MISSING
❖ DIFF_PST_STATE
❖ DIFF_PST_SUPPLY
❖ DIFF_SUPPLY_STATE
❖ DIFF_SUPPLYSTATE_ATTR
Other violation tags
❖ DIFF_DOMAIN_ELEMENT
❖ DIFF_DOMAIN_MISSING
❖ DIFF_DOMAIN_EXCLUDE
❖ DIFF_NET_MISSING
❖ DIFF_PORT_MISSING
❖ DIFF_CSN_MISSING
❖ DIFF_SYSTEM_STATE
Limitations
Currently, VC LP is not reporting the DIFF_LS_DOMAIN, DIFF_RET_DOMAIN and DIFF_CSN_MISSING
violations.
Note
In the DIUC flow, the hierarchical design references are always assumed valid. Violations for invalid design
references are not reported. The debug commands that refer to design objects are not supported in the
DIUC flow.
Use Model
The DIUC flow can be enabled using the -no_design switch in the read_upf/load_upf Tcl command.
Syntax
read_upf <upf name> -no design
TCL_OPT_ATLEAST_ONE_OF TCL_OPT_ATMOST_ONE_OF
TCL_OPT_ATTR_UNSUPPORTED TCL_OPT_DEPENDS
TCL_OPT_EMPTY TCL_OPT_EMPTY_LIST
TCL_OPT_EXACTLY_ONE_OF TCL_OPT_IMPROPER_ARGS
TCL_OPT_INVALIDONEOF TCL_OPT_NOT_TOGETHER
TCL_OPT_NYI TCL_OPT_TOGETHER
TCL_OPT_VAL_UNSUPPORTED UPF_ATTR_BIAS_SUPPLIES_CREATED
UPF_ATTR_MULTIPLE UPF_ATTR_OBJECT_NOT_FOUND
UPF_CMD_IGNORED UPF_EXPR_INTERVAL_FUNCTION
UPF_EXPR_NEGATIVE_NUMBER UPF_EXPR_SYNTAX_ERROR
UPF_FILE_NOT_FOUND UPF_FILE_NOT_SPECIFIED
UPF_FILE_PARSING UPF_GROUP_ALREADY_DEFINED
UPF_GROUP_NO_UPDATE UPF_GROUP_STATE_OPTION_NOT_ALLOWED
UPF_GROUP_STATE_UPDATE_LEGAL UPF_GROUP_UPDATE_FIRST_USE
UPF_INVALID_HIERARCHICAL_REFERENCE UPF_INVALID_ID
UPF_ISOLATION_APPLIESTO_SPECIFIED UPF_ISOLATION_LOCATION_SPECIFIED
UPF_ISOLATION_SENSE_SIZE_MISMATCH UPF_LIST_SYNTAX_ERROR
UPF_LOGIC_PORT_ALREADY_CONNECTED UPF_LOGIC_PORT_CONNECTION_OVERRIDE
UPF_PARTIAL_ON_UNSUPPORTED_TOOL UPF_PD_DEFINED
UPF_PD_EXTRA_SUPPLIES_VALUE UPF_PD_PRIMARY_SET
UPF_PD_STRATEGY_ALREADY_DEFINED UPF_PD_STRATEGY_NOT_DEFINED
UPF_PD_UPDATE_NOT_DEFINED UPF_PST_DUPLICATE_STATE
UPF_PST_DUPLICATE_SUPPLY UPF_PST_STATE_DEFINED
UPF_PST_STATE_INVALID_VALUES UPF_PST_STATE_NOT_FOUND
UPF_PSW_EXPR_CONTROL_PORT UPF_PSW_INPUT_OUTPUT_SAME_CONNECTI
ON
UPF_PSW_PORT_NOT_FOUND UPF_PSW_STATE_DEFINED
UPF_EQUIVALENT_FUNC_ONLY_STATES_CONFLICT UPF_SET_EQUIVALENT_PSW_SUPPLY_PORTS
UPF_SET_EQUIVALENT_SUPPLY_DOMAIN_DEPENDENT UPF_SET_EQUIVALENT_SUPPLY_FUNC_MISM
ATCH
UPF_SET_EQUIVALENT_SUPPLY_TYPE_MISMATCH UPF_SNET_ALREADY_DEFINED
UPF_SNET_INCORRECT_REUSE UPF_SNET_REUSE_RESOLUTION
UPF_SNF_ALREADY_ASSOCIATED UPF_SPORT_STATE_INVALID_VALUE
UPF_SPORT_STATE_OFF UPF_SSET_ALREADY_ASSOCIATED
UPF_SSET_ALREADY_DEFINED UPF_SSET_ASSOCIATION_LOOP
UPF_SSET_FUNCTION_ASSOCIATED UPF_SSET_FUNCTION_MISMATCH
UPF_SSET_FUNCTION_NOT_FOUND UPF_SSET_INCORRECT_UPDATE
UPF_SSET_INVALID_ASSOCIATION UPF_SSET_INVALID_SELF_ASSOCIATION
UPF_SSET_STATE_INVALID_UPDATE UPF_SSET_STATE_NO_UPDATE
UPF_SSET_STATE_NORMAL_UPDATE UPF_SSET_STATE_UPDATE
UPF_SSET_STATE_UPDATE_LEGAL UPF_SSET_STATE_VALUES_INVALID
UPF_SSET_UPDATE_FIRST_USE UPF_STATE_NOT_DEFINED_ERROR
UPF_STRATEGY_SIGNAL_SPECIFIED UPF_SUPPLY_PORT_ALREADY_CONNECTED
UPF_SUPPLY_PORT_IMPLICIT_CONNECTION UPF_SUPPLY_PORT_NO_LOWCONN
UPF_SUPPLY_PORT_UNCONNECTED UPF_SUPPLY_STATE_ALIAS
UPF_SUPPLY_STATE_TYPE_MISMATCH UPF_SUPPLY_STATE_VALUE_MISMATCH
UPF_SUPPLY_STATE_VALUES_INVALID UPF_SV_KEYWORD_AS_ID
UPF_TIME_INVALID_UNIT UPF_UPF_KEYWORD_AS_ID
UPF_VALUE_NOT_SPECIFIED UPF_VCT_NOT_FOUND
TCL_OPTION_NOVALUE TCL_OPTVAL_LESSVALUES
UPF_OBJECT_NOT_FOUND TCL_OPVAL_LISTLENGTH
TCL_OPTION_UNKNOWN TCL_COMMAND_UNKNOWN
TCL_OPTION_MANDATORY UPF_GROUP_STATE_NO_UPDATE
UPF_ATTR_TOO_FEW_PORTS UPF_SUPPLY_PORT_NO_HIGHCONN
Table 3-6 lists the VC LP checks that are supported in the DIUC flow.
Table 3-6 Supported VC LP Tags in DIUC Flow
3.4.9.2 Limitations
❖ In the DIUC flow, the old save restore support is not available. The checkpoint restart support is
available.
❖ none (default): When set to none, no relinking is performed, and the default behavior continues.
❖ voltage_range: When set to voltage_range, VC LP link the cells with
voltage_range,input_voltage_range and output_voltage_range attribute, usually the LS
cells.
❖ all: When set to all, VC LP links all cells considering their voltage_map values.
3.4.10.4 Limitations
Difference between cell definition should be only in voltage values {volt_map, input/output voltage range),
The other differences are not honored. The cell name should be the same.
In terms of VC LP commands, the check_lp -stage upf, check_lp -stage {upf design} check_lp -
stage {upf design pg} commands correspond to these three stages.
It is important to run both check_lp -stage upf and check_lp -stage design commands at the post-
synthesis stage. Skipping the check_lp -stage upf command will not miss any errors, but it may be hard
to discover that a certain problem can be best fixed by changing the UPF. For the same reason, it is
important to run the check_lp -stage upf, check_lp -stage design and check_lp -stage pg
commands at the post-route stage.
3.6.1 VC LP Database
Note
Exception Crossovers (CSN/SRSN/PG/infer_domian) are additionally generated.
Use the following application variable to specify the instances within which VC LP does not need to build
crossovers.
%vc_static_shell>set_app_var ignore_intra_instance_xover {instance1 instance2}
where tile1 and tile2 are the instances from which the crossover generation must start.
❖ The instance list must be separated by a space.
❖ The instance name must be a full hierarchical name *without* top.
❖ The instance name must not contain wild card characters.
Example
For the example design as shown in the following figure, if the following application variable is set, VC LP
reports the crossovers from inst_A to inst_B, and not the crossovers within inst_A and inst_B.
States
State : top_pst/vvdd_off
NOTE
The following notes also apply to supply net resolution:
❖ DUT top level ports have precense for exception supplies (SRSN or SPA). If the absence of exception
supply connections in UPF, VC LP by default relates them to the domain supply of the top domain
❖ Typically hierarchical ports do not have any supplies associated. For example, SRSN on a
hierarchical port is ignored for any electrical checks perspective, but can be used for UPF consistency
checks.
❖ The power and ground precedence orders are computed separately. For example, suppose a
standard cell has connect_supply_net specified only for power. Then, for ground, resolved net
computation will fall back to the primary supply of the parent domain.
❖ If a physical net is connected to a supply pin, this does not guarantee it as resolved supply. Only
physical nets which have a corresponding supply net declared in UPF and used in the power state
table are considered as supply nets.
❖ For UPF connect_supply_net and strategy supplies, the supply net must be present in the power
state table to become an effective resolved supply.
❖ The default resolved supply will be the parent domain’s primary supply. However, if these supplies
are not present in the UPF power state table, an error is produced and the design will not be
processed.
Note
If you do not want to treat SRSN specified at lib cell pins as the override to all other supplies at a given
node, then set the variable enable_dc_srsn = false.
VC LP uses SRSN at the lib cell pin as the ultimate resolved supply for all its analysis of the overriding PG
connectivity, RPP+CSN (related_supply_pin+connect_supply_net), strategy supplies or domain
supplies if one or more of these are available at a given node. The eventual resolved SRSN supply is used for
protection analysis, device to strategy association and all other checks.
❖ Heuristic based: VC LP gives weightage to a match among various attributes of the strategy and cell
(output supply, input supply, control pin and acknowledge pin in that order) and based on
weightage VC LP associates the cell to the right strategy. This is the default mode and heuristics
based.
For complex designs having multiple power domains and power switch strategies and several thousands of
power switch cells, one or more of the above directives may have been used for strategy for matching cells.
If you find that a power switch strategy is incorrectly associated with a cell, and there by leading to false
violations in VC LP, the following debug aid can help understand what directive was used by tool for such
association.
VC LP can dump a new debug file containing details of the power switch association results. You must set
the following command in the script
%vc_static_shell> enable_lp_dump_debug_reports dump_crossover
And look into file vcst_rtdb/.internal/lp/powerSwitchAssociation.rpt.
Here is an example file snippet:
------> Pin: a/VDD policy: pa match: input_supply VDDIA
------> Pin: a/VDDSW policy: pa match: output_supply VDDOA
---> Instance: a policy: pa reason: by_weight
========================================
---> Instance: snps_pa_snps policy: pa reason: iccname
========================================
------> Pin: snps_pb_snp/VDD policy: pb match: input_supply VDDIB
------> Pin: snps_pb_snp/VDDSW policy: pa match: output_supply VDDOA
---> Instance: snps_pb_snp policy: pa reason: by_weight
The === separates one power switch instance from the next. Each associated instance has one summary line
with "--->" and one of three reasons/directives:
1. iccname: It means that user directive "set_app_var use_icc_switch_names true" (not the default) has
been used and the power switch instance is associated to strategy based on this directive
2. bind: It means that user directive "bind_switch_policy" has been used and the pattern matched a
strategy instance name.
3. by_weight: It means a match was made by matching at least one powe switch instance pin against a
strategy attributes, and the strategy with the highest weight was selected.
In this case there will be at least one line like "------> Pin" immediately before, where either the
input_supply, output_supply or control pin matches.
If you study the third instance in the above example carefully, you will notice it matches one policy for
input_supply, but a different policy for output_supply. Since output_supply has higher weight, the instance
is associated with the output_supply strategy. In this case, there will be a PSW_INPUT_CONN error.
NOTES
❖ The enable_lp_dump_debug_reports dump_crossover command dumps a lot of debug
information apart from above file. It can slowdown the run and the vcst_rtdb size may increase
depending upon the design complexity and size.
❖ The above file is only a debugging aid and should not be used for performance analysis and so on.
you can contact [email protected] if you still need further help with your design
analysis.
set_scope ua
add_port_state VDD3 -state "H3 1.2" -state "L3 1.1"
add_port_state VDD4 -state "H4 1.2" -state "Z4 off"
create_pst ua_pst -supplies "VDD3 VDD4 VSS"
add_pst_state t0 -pst ua_pst -state "H3 H4 ZV"
add_pst_state t1 -pst ua_pst -state "L3 Z4 ZV"
set_scope /
connect_supply_net VDD1 -ports ua/VDD3
Example command lines and results:
%vc_static_shell> report_system_pst -summary
Supplies: 3 Port states: 6 Potential system states: 8 Actual system states: 2
%vc_static_shell> report_system_pst
VDD1,VDD2,ua/VDD4
1.2,*,1.2
Use the analyze_pst_chain command to find any chain of supplies where source VD is off and
sink VH is on for example circuit as shown below:
Long hierarchical names are abbreviated for the table
Merging power state tables for TOP design is a complex procedure. During this process, several
voltage values can be dropped, several states can be invalidated and unexpected interactions can be
exposed. Designers can use VC LP and follow the debug methodology proposed in this articled to
analyze system power state tables.
❖ Adding All Off State in PST for Accuracy
Consider the case where an IP designer did not write an "all off" state for the IP; but in the SOC, there
is a power state where the IP supplies are all off.
VC LP reported the PST_VOLTAGE_DROPPED (Error) violation, as the OFF state is not present in
child instance.
VC LP add always 'OFF' state in PST. This support can be enabled using the
enable_pst_add_all_off application variable. By default, this application variable is set false.
When enable_pst_add_all_off is set to true, VC LP generates OFF state for each power net
present in PST and the PST_VOLTAGE_DROPPED violation is not reported.
In this example, VXAON and VYAON are always ON. Assume that, VXAON is present in the PST
and VYAON is not present in the PST. Under this application variable, VC LP generates OFF state
for VXAON and VC LP reports ISO_INST_MISSING violation with following internal generated
state pst_name/__SNPS_GENERATED_STATE__ALL_OFF__.
When any violation which is generated due to internal generated OFF state, VC LP reports
pst_name/__SNPS_GENERATED_STATE__ALL_OFF__ state in the violation report.
The analyze_add_all_off Tcl Command
Use the analyze_add_all_off Tcl command to get a report of the PST names and supply net names
where the off state is added.
Syntax
%vc_static_shell> analyze_add_all_off -help
Usage: analyze_add_all_off # analyzes where all-off PST would be added
[-upf] (Write output in UPF syntax)
The following is an example output when the analyze_add_all_off command is executed.
Feature enabled: true
Invalid state count: 1
Tables where an off-state will be added:
CORE1/pst1
CORE2/pst1
pst1
Supplies where an off-state will be added:
VDD
VDD1
VDD2
Limitation:
✦ OFF state is not generated for create_power_state_group.
✦ It may create OFF state for the ground nets as well.
✦ OFF state is not generated when add_port_state and add_power_state are defined in the same
PST.
✦ This support is not available in Verdi.
❖ -powerstatetable: Runs all checks related to PST allowed for the selected stage(s).
❖ -signalcorruption: Runs all checks related to signal corruption (also known as architecture
checks) allowed for the selected stage(s).
The following are the family_options applicable to the PG stage:
❖ powerground: Only checks the power network in the design to ensure that it is consistent with
respect to the UPF specification. For example, if the UPF connect_supply_net connection does not
match with the actual PG connection in the design.
Use Model 3
%vc_static_shell>check_lp –stage pg –family diode
%vc_static_shell>check_lp –stage pg –family bias
%vc_static_shell>check_lp –stage pg
❖ -force: If setup checks find any error violations, by default, other stages are not run. If you choose
the –force option, other stages chosen will also be run.
❖ -include_info: Displays message with severity INFO.
Use Model 4
To enable multi-threading in check_lp stage, use the -j <number_of_threads> option. By default, multi-
threading is enabled with j=4.
%vc_static_shell> check_lp -stage (design/upf/pg) -j <number_of_threads>
If the MT license is not available run continues with serial flow with following warning.
[Warning] LIC_CHECKOUT_FAIL_WARN: Unable to checkout license for VCLP Multi-Threading Feature. Run
will continue in serial mode.
Note
To enable multi-threading feature for check_lp and infer_source stage, the VC-LP-MT-NT license
should be checked out.
For example, check_lp -stage all -j 10 requires one VC-LP-MT-NT and one VC-STATIC-LP
licenses.
Syntax Errors
If there are any syntax errors reported by the tool on the UPF files, use the remove_upf command to remove
the checked UPF, correct the reported issues and source the corrected UPF using the read_upf command.
Use the check_lp -stage upf command to recheck the UPF database. For more details on how to use the
remove_upf command, see section “The remove_upf Command”.
The –stage option is mandatory for the check_lp command. If you do not provide this option, the
following error is reported:
%vc_static_shell> check_lp
[ERROR]: -stage option is required. To check an RTL design, use -stage upf.
To check a netlist design, use -stage {upf design}. To check a PG routed design, use -stage {upf design pg}.
If you give a non-overlapping choice of stage and family, the following error is reported:
%vc_static_shell > check_lp -stage upf -family diode
[ERROR]: -stage and -family options do not overlap. There are no checks with both the given stages and given families.
Please check your options.
If you provide duplicate options, the following warning message is reported:
...
...
...
...
Syntax
%vc_static_shell> merge_database -help
# Merges report database from a saved run into the current run
[-session <session name>]
(Name of saved session to merge messages from)
The session name refers to the session saved from a previously completed run with save_session.
Example
Consider the following two run scripts.
run1.tcl
##load design and upf##
check_lp -stage pg
save_session -session run1
report_violations -app LP # note "a"
run2.tcl
##load design and upf##
check_lp -stage design
report_violations -app LP # note "b"
merge_database -session run1
report_violations -app LP # note "c"
At note "a", some number of violations are reported and at note “b”, new violations are reported. When you
run the merge_datebase command before note “c”, the report_violations -app LP command reports a
union of both sets of violations. All the duplicate violations appear only once.
The following is the output from run1, before merging:
-----------------------------------------------------------
Tree Summary
-----------------------------------------------------------
Severity Stage Tag Count
-------- ----- ------------------------------- -----
error PG PG_DOMAIN_CONN 1
error PG PG_PIN_UNCONN 66
error PG PG_STRATEGY_CONN 2
-------- ----- ------------------------------- -----
Total 69
The following is the output from run2, after merging.
-----------------------------------------------------------
Tree Summary
-----------------------------------------------------------
Severity Stage Tag Count
-------- ----- ------------------------------- -----
error Design ISO_CONTROL_CONN 1
error Design ISO_CONTROL_INVERT 1
error Design ISO_BUFINV_STATE 6
error Design ISO_INPUT_STATE 5
error Design ISO_OUTPUT_STATE 2
warning Design ISO_DATA_BLOCKED 1
warning Design ISO_DATA_UNCONN 4
warning Design ISO_INST_NOCROSS 5
3.6.3.1 Limitations
❖ The merge_database command does not retain waived violations from the saved database. The
merged database will lose any waivers applied for violations in the individual saved database.
❖ The merge_database command does not support merging of VC Formal report databases. This
command gives an error when the fml_mode_on application variable is set to true.
3.6.3.2.2 Example
The following is an example of a database in the previous run:
Severity Stage Tag Count
-------- ----- -------------------------- -----
error UPF ISO_STRATEGY_CTRL_UNCONN 3
error UPF ISO_SUPPLY_UNAVAIL 2
error UPF UPF_BIAS_MISSING 6
error UPF UPF_STRATEGY_RESOLVE 9
error Design ISO_INST_MISSING 8
warning UPF ISO_MAP_MISSING 3
warning UPF ISO_STRATEGY_MULTIPLE 2
warning UPF ISO_STRATNODE_UNDRIVEN 4
warning UPF PSW_SUPPLY_UNAVAIL 2
warning UPF UPF_PORT_UNCONSTRAINED 1
warning UPF UPF_POWER_DIFF 36
warning Design DESIGN_POWER_DIFF 36
warning Design ISO_STRATEGY_UNUSED 11
-------- ----- -------------------------- -----
Total 123
The following is an example of a new database in the current run:
Severity Stage Tag Count
-------- ----- -------------------------- -----
error UPF ISO_STRATEGY_CTRL_UNCONN 3
error UPF ISO_SUPPLY_UNAVAIL 2
error UPF UPF_BIAS_MISSING 6
error UPF UPF_STRATEGY_RESOLVE 9
error PG PSW_ACK_UNDRIVEN 1
error PG PSW_STRATEGY_UNUSED 1
warning UPF ISO_MAP_MISSING 3
warning UPF ISO_STRATEGY_MULTIPLE 2
warning UPF ISO_STRATNODE_UNDRIVEN 4
warning UPF PSW_SUPPLY_UNAVAIL 2
warning UPF UPF_PORT_UNCONSTRAINED 1
warning UPF UPF_POWER_DIFF 36
warning PG PG_SUPPLY_NONET 5
warning PG PG_SUPPLY_NOPORT 4
-------- ----- -------------------------- -----
Total 79
The following is the output when you use diff_database -waive command:
Severity Stage Tag Count Waived
-------- ----- -------------------------- ----- ----------
error UPF ISO_STRATEGY_CTRL_UNCONN 0 3
error UPF ISO_SUPPLY_UNAVAIL 0 2
error UPF UPF_BIAS_MISSING 0 6
error UPF UPF_STRATEGY_RESOLVE 0 9
error PG PSW_ACK_UNDRIVEN 1 0
error PG PSW_STRATEGY_UNUSED 1 0
warning UPF ISO_MAP_MISSING 0 3
warning UPF ISO_STRATEGY_MULTIPLE 0 2
warning UPF ISO_STRATNODE_UNDRIVEN 0 4
warning UPF PSW_SUPPLY_UNAVAIL 0 2
❖ If the module or instance having LS, ISO or ELS cell, it is not marked as a black box.
❖ If the module of the instances to be black boxed are uniquely instantiated, that is, that instance is the
single instance of the module. In such cases, the module itself is black boxed.
3.6.4.1 Limitation
❖ For PG_NETLIST design, make sure corresponding CSN/SRSN is present in the UPF for PG
connections. In the absence of any UPF constraints, this feature might not work properly.
Note
For more information on these tags, refer to the man page in the vc_static_shell.
Another benefit comes from the ability to fork a session for exploring several different scenarios. In this
model, you can load your design, save the session, make copies of the session, and then for each variation,
restore a copy and continue with your tests. VC LP does not automatically save the session when you quit.
When you quit from the vc_static_shell, the current session results is not automatically saved. If you
wish to save the session setup and run data, use save_session command.
%vc_static_shell> save_session
The information from run is then saved under vcst_rtdb in the current working directory. The following
message is printed on the screen.
[Info] SAVING_SESSION: Saving session (vcst_rtdb).
[Info] SAVE_I_FACET: 'FV' saved.
[Info] SAVE_I_FACET: 'design' saved.
The restore option works in conjunction with the –session command line option. When you use the –
session command line option, the restore options apply to this session rather than the default vcst_rtdb
session directory. Essentially, this creates unique multiple sessions and reloads them whenever you want.
After restoring the VC LP session, you can use view_activity, view_schematic, report_violations -
app LP, waive_lp, compress_lp and design related query commands.
With –session <session_name> option
VC LP creates <session_name>_rtdb.
%vc_static_shell –session temp
%vc_static_shell>set search_path “.”
%vc_static_shell>set link_library “temp.db”
%vc_static_shell> read_file -format verilog -top top -netlist “design.v”
%vc_static_shell>read_upf “temp.upf”
%vc_static_shell>check_lp -stage upf/design/pg
%vc_static_shell>report_violations -app LP –verbose –file report_lp.txt
%vc_static_shell>quit
[Info] DESIGN_SAVED: Design has been successfully saved.
%vc_static_shell –restore –session temp
❖ logs/db_link.log
❖ logs/db_new_ports.log
❖ logs/vcst_command.log
❖ reports/check_architecture_coverage.txt
❖ logs/covMerge.rpt
read_upf top.upf
checkpoint_session -session SessionReadUPF
3.10.2.2.2 Limitation
❖ Checkpoint and restart feature is supported in the no_ui mode with the following limitations:
✦ The time taken for checkpoint_session is more as it includes the times taken by LZ4
compression, dumping of process image, and tarring of the vcst_cpdb.
✦ The RAM and SWAP of the machine on which the checkpoint_session and restart_session
is running on must be greater than twice the peak memory size of the SVI for the test case.
3.10.3.1 RESTORE_SESSION_FAILED_BUILD_MISMATCH
Restart can only successfully happen if the invoking binary is exactly identical to the check pointing binary.
In cases when these two are not exactly identical, the RESTORE_SESSION_FAILED_BUILD_MISMATCH
error is reported. This can happen when checkpoint build and restart build are different in following
criteria:
❖ Opt and debug build
❖ 32 and 64 bit
3.10.3.2 RESTORE_SESSION_FAILED_RUN_ARGUMENT_MISMATCH
Restart session cannot happen successfully if the following run-time option is different between the
checkpoint run and the restart run.
❖ ui and no_ui run
Note
The compare_vclp_db command required the VC-STATIC-LP-DEBUG license.
❖ The default value of limit will be 0, meaning that the current behavior will be preserved. If the
given limit is an unsupported like a negative number, an error message is reported.
ID : LIMIT_INVALID_FOR_THRESHOLD
CODE ID : LIMIT_INVALID_FOR_THRESHOLD
Severity: Error
Primary : Limit value -2 specified by the user is invalid for lp_violation_threshold
command
Secondary : Please provide 0 or a positive integer as the limit value for thresholding a
tag
❖ Applying thresholds to tags might make violations of certain kind disappear from the
report_violations -app LP output. The following message is reported issued whenever a
violation of a kind is suppressed due to the application of a threshold.
ID : TAG_THRESHOLDED,
CODE_ID : TAG_THRESHOLDED,
Severity : Warning,
Primary : "Tag %s has been thresholded with a limit of %d and will be missing on the
violation reports generated by the tool",
Secondary : "Please avoid using the command lp_violation_threshold or set back the
threshold limit to 0 if you wish to prevent this from happening"
3.13.4.2.2 Find
If GUI queries for design elements is within the encrypted part of a design, that design element is retrieved
only if it’s name matches exactly. Otherwise it is not retrieved.
If an element from an encrypted zone is displayed because its name matches exactly, you will not be
allowed to expand further to include more elements from an encrypted zone.
The test case capture capability (also known as ATE (Automatic Test-case Extraction)) provides a simple
and convenient method of extracting, bundling and delivering a test case to the Synopsys support engineers
for debugging or testing a case. By using this capability, you are freed from worrying about tasks like which
files to include or exclude from the test case, how to bundle the files, how to ensure that the problem is
reproducible.
To clone a design:
1. Set the SNPS_VCS_ATE_COLLECT environment variable to the <capture_directory_path>.
2. Run the design with LP.
3. Go to the cloned design directory.
cd <clone-dir>
4. Run the source ate_collect.csh script.
An ATE directory is created in the <clone_dir>. All the TCL files that are included the directory
where the collect was run (including its subdirectories) is collected in the ATE directory.
5. Copy if there are any other required files like the reports, logs, and so on, into the <clone-dir>,
package the ATE directory <clone_dir> into a tar file, and send the compressed directory to
Synopsys.
The Synopsys support engineer, at the Synopsys site, after obtaining the ATE archive, can recompile the
ATE directory.
To recompile the cloned design:
1. Unpacks the ATE archive to a new directory <ate_directory>.
2. Go to the <ate_directory>.
3. Sets the
4. SNPS_VCS_ATE_BUILD environment variable to point to the <ate_directory>.
5. Run the design with VC LP normally using the same VC LP setup file.
3.14.1 Limitations
1. There may be issues when the extracted design contains environment variables, Tcl variables in the
VC LP setup or UPF.
2. There may be some unnecessary errors reported while running ATE flow (This does not impact the
results).
3. Empty directories can be seen in the cloned directory.
4. There may be issues while extracting SDC files which are specified with the read_sdc command.
5. The cloned design is not usable with synopsys_sim.setup, this file must removed before running the
cloned design.
6. There may be issues in ATE flow when Tcl files are sourced in UPF.
Note
This method supports full flat verification in the VC LP tool. To perform top-only verification, you must
manually edit the template Tcl file.
the check_vclp_design command. The argument for this option is a list of golden UPF file paths
(full paths) enclosed in double quotation marks. You can optionally use the -
write_verilog_options option with the check_vclp_design command to specify any of the
options available with the write_verilog command. Similarly, you can use the -
save_upf_options option to specify any of the options available with the save_upf command. You
must use both of these options together. If specified, these options take precedence over the default
behavior. The default behavior of the -write_verilog_options option is equivalent to the
following command:
write_verilog -exclude {leaf_module_declarations corner_cells \ cover_cells
end_cap_cells filler_cells pad_spacer_cells \ physical_only_cells} -hierarchy
all
The default behavior of the -save_upf_options option is equivalent to the following command
save_upf -exclude {corner_cells cover_cells end_cap_cells filler_cells
\pad_spacer_cells physical_only_cells}
Note
Currently this feature triggers a full run of VC LP when you execute the check_vclp_design command.
This flow will be enhanced to do incremental VC LP analysis in future with very fast turnaround.
4
Debugging VC LP Reports
BackupGroundMethod Ba
ckup ground net resolution method
There are seven key terms which relate to points along a crossover segment. The following diagram shows
the relationship between these points.
Error PG LS_INGND_CONN 50
You should review the UPF messages first. Often, a problem with the UPF may also result in a number of
design or PG messages. For example, if an isolation strategy is missing from the UPF on a crossing where
isolation is needed, then an ISO_STRATEGY_MISSING UPF message will appear. For electrical correctness, an
ISO_INST_MISSING design message will appear for each crossing. Solving the ISO_STRATEGY_MISSING
message, and then re-synthesizing, will solve the ISO_INST_MISSING problem as well.
Once the UPF messages are fixed, it may be worthwhile to re-run the tool to update the message counts. For
a large design, this may not be practical. The second step is to review the design messages. For a post-route
design, the power and ground connectivity messages should be reviewed first.
The next two sections provides more details on the message organization and the report_violations -
app LP command to investigate the messages efficiently.
automatically. For waivers, the difference is that a group which is waived is assumed to not be an error;
however, with grouping, all of the grouped items are real violations.
❖ STRATEGY_PORTS
Combines strategy messages on different ports, where the tag is the same, and the source and sink
supplies are the same. This happens generally where a single strategy is missing, and it affects a
number of ports with the same domain crossing.
❖ STRATEGY_UNUSED
Combines two messages with the same source and sink, where one is a UPF level message such as
isolation strategy unused and the other is a design level message such as isolation instance
redundant. If you fix the strategy message and resynthesize, the design message is solved.
❖ ISORET_CONN
Combines messages where a control signal is connected incorrectly, and the intended net and actual
net are the same.
❖ INTERNAL_CELL
Internal isolation not needed messages on the same cell type. For a memory, it is common to have
internal isolation which may not be used. This would result in one message for each pin of each
instance, which can be grouped to show one message for each unique cell type.
❖ CROSSOVER_NOSTATE
Combines UPF_CROSSOVER_NOSTATE messages where the UPF supply is the same
❖ RET_NO_STRATEGY
Combines messages where a retention register is found in a domain, but there is no retention
strategy for the domain.
❖ MAP_WRONG
Combines messages where a strategy has a map command, but the design instance does not match,
and the cell type is the same.
❖ PSW_CONN
Combines messages where a control or ack signal is connected incorrectly for a power switch cell,
and the intended net and actual net are not same.
❖ PSW_WRONG
Combines messages where a power switch instance, has the wrong function of its control signal, and
the cell type is the same.
❖ ISOLATION
Combines messages where isolation has a constant error and the strategy is the same.
❖ CORR_SOURCE
Combines signal corruption messages where the corrupting instance list and sink are the same.
❖ PG_DOMAIN
Combines messages where one UPF domain’s supply net must be connected to a number of instance
supply pins, but the same wrong net is found instead.
❖ PG_STRATEGY
Combines messages where one UPF strategy’s supply net must be connected to a number of instance
supply pins, but the same wrong net is found instead.
❖ PG_BIAS
Combines messages where the same pair of bias nets is discovered by multiple instances.
❖ PG_CSN
Combines messages where one UPF connect_supply_net should be connected to a number of
instance supply pins, but the same wrong net is found instead.
Syntax
%vc_static_shell> compress_lp -help
Usage: compress_lp # Compresses low power violations covered by a representative
violation
[-enable <list>] (enable compression type:
Values: BUS_INST, BUS_PORT, CORR_SOURCE,
CROSSOVER_NOSTATE, FANOUT,
INTERNAL_CELL, ISOLATION, ISORET_CONN,
MAP_WRONG, PG_BIAS, PG_CSN, PG_DOMAIN,
PG_STRATEGY, PSW_CONN, PSW_WRONG,
RET_NO_STRATEGY, STRATEGY_INST,
STRATEGY_PORTS, STRATEGY_UNUSED)
[-disable <list>] (disable compression type:
Values: BUS_INST, BUS_PORT, CORR_SOURCE,
CROSSOVER_NOSTATE, FANOUT,
INTERNAL_CELL, ISOLATION, ISORET_CONN,
MAP_WRONG, PG_BIAS, PG_CSN, PG_DOMAIN,
PG_STRATEGY, PSW_CONN, PSW_WRONG,
RET_NO_STRATEGY, STRATEGY_INST,
STRATEGY_PORTS, STRATEGY_UNUSED)
[-enable_all] (enables all compression types)
[-disable_all] (disables all compression types))
Use Model
Messages will be compressed when you run compress_lp. If you wish to enable/disable compression types,
use following command which can be either used interactively or through a Tcl script:
%vc_static_shell> compress_lp
[-enable_all] (enables all compression types)
[-disable_all] (disables all compression types)
[-enable <list>] (enable compression type)
[-disable <list>] (disable compression type)
Here, <list> parameters takes the values BUS, FANOUT. For example, the following command disables the
FANOUT compression type:
%vc_static_shell> compress_lp –disable FANOUT
If you want to see messages that are suppressed, you must specify the following additional option to the
report_violations -app LP command to see all messages, including the compressed messages:
%vc_static_shell>report_violations -app LP –include_compressed
Example
Consider the following example. When you specify the report_violations -app LP command, the tool
displays the violations without compression.
%vc_static_shell> report_violations -app LP -list
The following are the two violations.
--------------------------------------------------------
Management Summary
--------------------------------------------------------
Stage Family Errors Warnings Infos
----- ----------- -------- -------- --------
Design Isolation 2 0 0
----- ----------- -------- -------- --------
Total 2 0 0
--------------------------------------------------------
Tree Summary
--------------------------------------------------------
Severity Stage Tag Count
-------- ----- ------------------ -----
error Design ISO_CONTROL_CONN 2
-------- ----- ------------------ -----
Total 2
--------------------------------------------------------
ISO_CONTROL_CONN (2 errors/0 waived)
--------------------------------------------------------
1. Strategy top/d_a/s_a isolation control signal iso does not match isolation
instance i__0__ connection pin ISO
2. Strategy top/d_a/s_a isolation control signal iso does not match isolation
instance i__1__ connection pin ISO
--------------------------------------------------------
Tree Summary
--------------------------------------------------------
Severity Stage Tag Count Compressed
-------- ----- ------------------ ----- ----------
error Design ISO_CONTROL_CONN 1 1
-------- ----- ------------------ ----- ----------
Total 1 1
--------------------------------------------------------
ISO_CONTROL_CONN (1 error/0 waived/1 compressed)
--------------------------------------------------------
Strategy top/d_a/s_a isolation control signal iso does not match isolation instance i__0__ connection
pin ISO.
Now, consider the message that is compressed and the reason for the compression:
%vc_static_shell> report_violations -app LP -verbose -include_compressed
The messages may contain the following fields that tell you the technique used for compressing a message.
The tool also indicates the representative message number of the group.
Compression
Type : BUS
Master : LP:1
The behavior of the subsegment_optimization_type application variable depends on the setting of the
existing enable_domain_boundary_list application variable.
Table 4-3 Behavior of subsegment_optimization_type and enable_domain_boundary_list
subsegment_optimization enable_domain_
_type boundary_list Behavior
default This will be the default value of the app-var and will preserve
the current behavior.
boundary TRUE Similarity of all elements listed in the Domain Boundary List
is considered for caching and comparison of the violation.
The following warning message is reported when the application variables set inconsistently:
ID: IIM_SUBSEG_OPT_VARIABLE_INCONSISTENT
Severity: Warning
Primary: Inconsistent application variable setting.
Secondary: Value "domain" for subsegment_optimization_type application variable
should be used with enable_domain_boundary_list application variable set to false and
the value "boundary" should be used with enable_domain_boundary_list application
variable set to true. Optimization will be performed in "default" value mode due to
inconsistency.
Figure 4-5 PST Merging and PG consistency Issues Effecting Electrical Checks
Due to PST merging issues in the design, the PST_VOLTAGE_DROPPED violation is reported and as
voltage is dropped, this can cause ISO_STRATEGY_REDUND. Here, the PST_VOLTAGE_DROPPED is the
root cause violation for ISO_STRATEGY_REDUND.
Similarly, if PG and CSN connections are not matching, then PG_CSN_CONN violation is reported. In VC
LP, the PG connection has highest precedence so ISO_INST_MISSING is reported. In this case, the
PG_CSN_CONN violation is the root cause violation for ISO_INST_MISSING.
After enabling this feature, VC LP report smart clusters DEBUG_LP_RCA violation capturing CauseViol as
PST_VOLTAGE_DROPPED/PG_CSN_CONN, and EffectViol as
ISO_STRATEGY_REDUND/ISO_INST_MISSING. This helps in quickly identifying the problem.
Figure 4-6 Incorrect Library Setup Related Issues Impacting Electrical Violations
Here, the root cause is, library cell used for the level shifter cell's
input_voltage_range/output_voltage_range does match with level shifter source/sink supply voltage
values, which can result into LS_INST_RANGEI/O violations.
Here, root cause is library cell setup is incorrect. VC LP reports a smart cluster, DEBUG_LP_RCA saying,
CauseViol as DEBUG_SETUP_LIBCELL and EffectViol as LS_INST_RANGEI/O violations.
In the tag file (example, tag_list.lst), each tag should be specified in a new line.
If the tag file is empty, VC LP will fall back to the original behavior to do RCA on all the tags.
Example
enable_rca_cluster -app LP -tag_list order.lst
Note
When execute_rootcause_analysis is invoked after restoring the session, the following error is
reported.
vc_static_shell> execute_rootcause_analysis -app {lp} -limit 0
[Error] : Command cannot be executed as root cause analysis is not supported in restored session for -app
lp
❖ DEBUG_DESIGN_FEEDTHROUGH
❖ DEBUG_EXCEPTIONRAIL_CONN
❖ DEBUG_ISO_CONST
❖ DEBUG_ISO_DROPPED
❖ DEBUG_ISO_EXCLUDE
❖ DEBUG_ISO_HETERO
❖ DEBUG_ISO_MISSING
❖ DEBUG_ISO_NEEDED
❖ DEBUG_ISO_OPTION
❖ DEBUG_ISO_PAD
❖ DEBUG_ISO_REDUND
❖ DEBUG_ISO_SETUP
❖ DEBUG_ISO_UNUSED
❖ DEBUG_LS_CONST
❖ DEBUG_LS_EXCLUDE
❖ DEBUG_LS_FORCE
❖ DEBUG_LS_HETERO
❖ DEBUG_LS_MISSING
❖ DEBUG_LS_NEEDED
❖ DEBUG_LS_OPTION
❖ DEBUG_LS_PAD
❖ DEBUG_LS_REDUND
❖ DEBUG_LS_SETUP
❖ DEBUG_LS_UNUSED
❖ DEBUG_MAP_WRONG
❖ DEBUG_PG_CONN
❖ DEBUG_PST_STATE
❖ DEBUG_SETUP_ANALOG
❖ DEBUG_SETUP_BBOX
❖ DEBUG_SETUP_CLAMP
❖ DEBUG_SETUP_CONSTANT
❖ DEBUG_SETUP_HANGING
❖ DEBUG_SETUP_INOUT
❖ DEBUG_SETUP_LIBCELL
❖ DEBUG_SETUP_PAD
❖ DEBUG_SETUP_SUPPLY
❖ DEBUG_SPARE_CELL
❖ DEBUG_SUPPLY_OFF
❖ DEBUG_SUPPLY_ON
❖ DEBUG_SUPPLY_SHORT
❖ DEBUG_RET_NOSTRAT
❖ DEBUG_RET_MISSING
❖ DEBUG_SUPPLY_UNUSED
❖ DEBUG_UPF_CSN
❖ DESIGN_SUPPLY_RANGE
❖ DESIGN_SUPPLY_SHORT
Example
Tcl:
check_lp -stage <Stages>
execute_rootcause_analysis -app lp -dashboard #Performs RCA
An effect violation may have multiple root cause violation, by default, all the cluster information for an
effect violation will be generated. To limit report generation for each effect violation, use the -
dashboard_limit option along with the -dashboard in the execute_rootcause_analysis.
To generate a maximum of five cluster reports per effect violation, use the following command:
❖ execute_rootcause_analysis -app lp -dashboard -dashboard_limit 5
❖ Figure 4-9 shows the detailed cluster view of the DEBUG_LP_RCA violation with the cause/effect
violations to DEBUG_LP_RCA.
ISO_STRATCLAMP_MISMATCH PG_CSN_CONN
ISO_STRATEGY_ANALOG PG_DATA_SUPPLY
ISO_STRATEGY_INTERNAL PG_DIODE_CONN
ISO_STRATEGY_MISSING PG_DOMAIN_CONN
ISO_STRATEGY_NOISO PG_MACRO_TIE
ISO_STRATEGY_OK PG_PIN_UNCONN
Syntax
%vc_static_shell> report_violations -app LP -help
Usage: report_violations -app LP # Reports low power check information
[-no_summary] (Suppresses summary information)
[-list] (List all messages in simple form)
[-verbose] (List all messages in detail form)
[-limit <count>] (Limit the number of output records per tag)
--------------------------------------------------------
Tree Summary
--------------------------------------------------------
Severity Stage Tag Count
-------- ----- -------------------- -----
error UPF ISO_CONTROL_STATE 1
error UPF ISO_STRATEGY_MISSING 2
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
❖ Here is an example of the usage of the -all_tags option. If a check is run and there were no
violations found, the report_violations -app LP -all_tags command prints a zero into the
summary as follows:
---------------------------------------------
Tree Summary
---------------------------------------------
Severity Stage Tag Count
-------- ----- --------------------- -----
error UPF ISO_STRATEGY_MISSING 0
error UPF ISO_STRATEGY_REDUND 2
error PG PG_DOMAIN_CONN 1
error PG PG_PIN_UNCONN 66
error PG PG_STRATEGY_CONN 2
error PG PG_CSN_CONN 0
-------- ----- ---------------------------
Total 72
❖ Reports can also be generated in a colon based format using the report_violations -app LP
command as follows:
set xsltfile $env(VC_STATIC_HOME)/auxx/monet/schemas/lpColon.xslt
%vc_static_shell>report_violations -app LP -file foo -verbose -xslt $xsltfile
Example:
Tag : LS_INST_MISSING
Description : Level shifter required on crossing from [Source] to [Sink], but level
shifter missing
Violation : LP:24
PstRuleValue : HL_TYPE
Source:PinName : i_core1/inv0/Z
SegmentSourceDomain : PD_CORE
Sink : i_core1/std_buf/A
SegmentSinkDomain : PD_CORE
LogicSource:PinName : A
LogicSink : Y
DomainSource : A
DomainSink : Y
SourceInfo:PowerNet:NetName : VDDtop
SourceInfo:PowerNet:NetType : Design/UPF
SourceInfo:PowerMethod : FROM_PG_NETLIST
SourceInfo:GroundNet:NetName : VSStop
SourceInfo:GroundNet:NetType : Design/UPF
SourceInfo:GroundMethod : FROM_PG_NETLIST
SinkInfo:PowerNet:NetName : VDDsw
SinkInfo:PowerNet:NetType : Design/UPF
SinkInfo:PowerMethod : FROM_PG_NETLIST
SinkInfo:GroundNet:NetName : VSStop
SinkInfo:GroundNet:NetType : Design/UPF
SinkInfo:GroundMethod : FROM_UPF_POWER_DOMAIN
❖ In verbose report output (report_violations -app LP -verbose), the severity is not available in
the violation fields by default. Specify the -display_severity option to get the severity information for
each violation.
Example
report_violations -app LP -tag ISO_STRATEGY_MISSING -verbose -display_severity
---------------------------------------------------
Tag : ISO_STRATEGY_MISSING
Description : Isolation required on crossing from [Source] to [Sink], but
strategy missing
Severity : error
--------------------------------------------------
❖ Use the add_markers option to have BEGIN_LP:<ID> and END_LP:<ID> markers for easy
delineation in verbose mode.
Example
report_violations -app LP -tag ISO_STRATEGY_MISSING -verbose -add_markers
----------------------------------------------------------------------
BEGIN_LP:9
Tag : ISO_STRATEGY_MISSING
Description : Isolation required on crossing from [Source] to [Sink], but
strategy missing
.....
Type : STRATEGY_INST
Count : 1
END_LP:9
----------------------------------------------------------------------
❖ By default, the report_violations -app LP -verbose output of VC LP did not flag waiver file
name. When a waiver file is specified in the manage_waiver_file command along with the
absolute path as follows:
manage_waiver_file -add
/remote/arch_proj/testcases/pv_dbs/malitha/e_libs/nishadi/waive.tcl
The output of the report_violations -app LP command is as follows:
report_violations -app LP -verbose [-include_waived]/ [-only_waived]
Tag :ISO_STRATEGY_MISSING
Description : Isolation required on crossing from [Source] to [Sink], but
strategy missing
….
Waiver
Name : ISO_STRATEGY_MISSING_10
Filename : /remote/archproj/
testcases/pv_dbs/malitha/e_libs/nishadi/waive.tcl
To get only the name out of the absolute path given for the manage_waiver_file command, the -
skip_full_path_for_waiver_file option is introduced. When this option is specified, the output
of the report_violations -app LP command reports the waiver file name as follows:
report_violations -app LP -verbose [-include_waived]/ [-only_waived] -
skip_full_path_for_waiver_file
Tag : ISO_STRATEGY_MISSING
Description : Isolation required on crossing from [Source] to [Sink], but
strategy missing
….
Waiver
Name : ISO_STRATEGY_MISSING_10
Filename : waive.tcl
The -skip_full_path_for_waiver_file option can be used along with waive_lp command,
such that the absolute path is dropped, and just the bare waive file name is reported.
waive_lp - skip_full_path_for_waiver_file
Waiver : ISO_STRATEGY_MISSING_10
Filename : waive.tcl
Violations : 1
Select
Tag : ISO_STRATEGY_MISSING
❖ Consider the following Tcl file:
define_compression -tag ISO_STRATEGY_UNUSED -field DomainSource -name ISO
compress_violations -enable ISO
-----------------------------------------------------------------------------
Tree Summary
-----------------------------------------------------------------------------
Severity Stage Tag Count Compressed
-------- ----- ------------------------------------------ ----- ----------
warning Design ISO_STRATEGY_UNUSED 3 3
-------- ----- ------------------------------------------ ----- ----------
Total 3 3
The -display_compressed option in the report_violations command supports wild card
characters.
report_lp -display_compressed IS*
Note
Other segments in the violation report (especially in the report_violations -app LP file) may contain internal
names.
Example
Consider the design as illustrated in Figure 4-11.
Currently, the PG_DATA_TIED violation reported for the example in Figure 4-11 is as follows:
When the enable_nearest_user_defined_obj application variable is set to true, the violation is reported
as follows:
This means,
❖ Tags which are not crossover based are not supported under this application variable. Example:
DESIGN_FORK, user-defined tags, CORR_CONTROL_STATE
❖ Tags which are validated before crossover path reduction are not supported under this
enhancement. Example: ISO_STRATEGY_IGNORED, LS_STRATEGY_IGNORED
❖ Tags can report internal (tool generated) names under segment sink. Example: LS_INST_REDUND,
LS_INST_RANGE, LS_INST_MISSING, LS_STRATEGY_MISSING, ISO_STRATEGY_REDUND,
LS_STRATEGY_REDUND
❖ Tags can have driver nodes with internal names. Example: ISO_SINK_STATE,
ISO_BUFINV_STATE, ISO_ELSINPUT_STATE
❖ Tags can have load nodes with internal names. Example: UPF_CROSSOVER_NOSTATE
❖ Tag can report internal names for segment source. Example: LS_NOINST_OK
Note
In the future releases, the enable_reporting_rtl_names_lp will be replaced by
enable_nearest_user_defined_obj. Currently, you must set the
enable_reporting_rtl_names_lp application variable to false, when the
enable_nearest_user_defined_obj application variable is set to true.
For more details on the enable_reporting_rtl_names_lp application variable, see the man page of
enable_reporting_rtl_names_lp.
❖ get_tags: Returns tag names. If a single tag name is given as an argument, then it prints the same
tag name. If used with a wild-card character it expands the wild-card character to a list of matching
tags. It lists the tag/tags independently of the violations/tags present in the current run of the report
database. It does not accept a list of tags, but wild-card characters are accepted.
For example:
%vc_static_shell> get_tags ISO_*_MISSING
ISO_INST_MISSING ISO_STRATEGY_MISSING
❖ get_tag_info: Accepts a single tag at a time and lists the information about the tag. It does not
accept a list of tags or wild-card characters. It runs independent of the violations/tags present in
current run of report database.
For example:
%vc_static_shell> get_tag_info ISO_INST_REDUND
LP warning Design Isolation enabled 0
❖ get_tag_fields: Lists all the fields for a particular tag. It does not accept wild-card characters and
list of tags. It lists the tag fields independent of the violations/tags present in current run of the
report database.
For example:
%vc_static_shell> get_tag_fields LS_STRATEGY_MISSING
{Msg ID} Tag PstRuleValue Source SegmentSourceDomain Sink SegmentSinkDomain
LogicSource LogicSink LogicSinkUnconnected DomainSource DomainSink
DomainBoundaryList SourceInfo SinkInfo
❖ get_violation_tags: Returns ordered list of tags for the violations present in the report database.
This command requires no arguments.
For example:
%vc_static_shell> get_violation_tags
LS_INST_MISSING LS_OUTPWR_CONN PG_BIAS_INSUFFICIENT PG_CSN_CONN PG_DOMAIN_SETUP
❖ rename_tag: Takes a single tag and replaces its name with the new alias. This command should be
used BEFORE the check* commands. It does not accept a list of tags or wild-card characters.
For example:
%vc_static_shell>rename_tag ISO_INST_NOSTRAT NO_POLICY_ISO_FOR_DEVICE
❖ disable_tag_field: Disables tag fields and prevents them from getting printed in the report. This
command should be used only AFTER check* commands. It does not accept a list of tags or list of
fields or wild-card characters.
For example:
%vc_static_shell> disable_tag_field ISO_CONTROL_CONN SourceInfo
❖ reorder_tag_field: In order to generate a report where Info fields appear just after the design
element fields, reorder_tag_fields command can be used to change the order of the fields
reported. This command does not accept wild-card characters and list of tags. It lists the tag fields
independent of the violations/tags present in the current run of the report database.
For example:
%vc_static_shell> set order [get_tag_fields ISO_INST_MISSING]
domain Domain
domainsink DomainSink
domainsource DomainSource
logicsink LogicSink
logicsource LogicSource
strategy Strategy
upfsupply UpfSupply
Note
If this switch is used for one or more consecutive add_lp_violation commands, you MUST use the
add_lp_violation –save command before any other command that interacts with the reports (for
example, report_violations -app LP, waive_lp, define_lp_violation,
remove_lp_violation and so on). By default, without this switch, the violation instance is saved to the
database.
❖ -save
Enforces database save for all previously inserted violation instances. It is redundant if used with a
successful add_lp_violation –tag command; because even without this switch, database save
takes place to save all previously inserted non-committed data. The add_lp_violation –save
command enforces database save for all previously issued insert operations. The recommended
steps for faster add_lp_violation operation are as follows:
a. Use one or more add_lp_violation –tag … -field … … -nosave [you can use a loop of
remove_lp_violation commands in your Tcl script]
b. After step a is performed, use add_lp_violation –save command [outside the loop].
❖ -nocover
This is an optional switch. By default, the tool checks whether Option-Fields can populate values for
all Displayable Fields defined for the built-in/user defined tag. If not, an ERROR is issued. Under
-nocover, this check is skipped.
Example
add_lp_violation -tag MY_VIOLATION -fields {DomainSink=CORE2/in1
DomainSource=CORE1/out1 LogicSink=CORE2/and_i1/A LogicSource=CORE1/ff_i1/Q Domain=TOP
Sink=CORE2/buf_i1/A Source=CORE1/buf_i1/Z Instance=CORE1/ff_i1 CellPin=CORE1/ff_i1/Q
UPFSupply=PD2.primary.power Strategy=PD1/iso1 PowerStateTable=top_pst State=top_pst/s1
VoltageValue={1.0 1.2}}
Tag : MY_VIOLATION
Description : This is my [Source] and [Sink] violation
Violation : LP:3
DomainSource : CORE1/out1
DomainSink : CORE2/in1
LogicSource
PinName : CORE1/ff_i1/Q
LogicSink : CORE2/and_i1/A
Domain : TOP
Source
PinName : CORE1/buf_i1/Z
Sink : CORE2/buf_i1/A
Instance : CORE1/ff_i1
CellPin : Q
Cell : DMFD2
CellType : StandardCell
SourceInfo
PowerNet
NetName : VDD1
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
SinkInfo
PowerNet
NetName : PD2.primary.power
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : PD2.primary.ground
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
DesignNet
NetName : CORE1/w1
NetType : Design
UPFSupply : PD2.primary.power
Strategy : PD1/iso1
PowerStateTable : top_pst
State : top_pst/s1
VoltageValue : 1.0 1.2
Syntax
vc_static_shell> define_lp_violation -help
Usage: define_lp_violation # adds definition of a violation tag to the LP database
schema
[-tag <name>] (Tag name)
[-stage <stage>] (Stage:
Values: design, pg, upf)
[-family <family>] (Family:
Values: analog, aob, bias,
compatibility, designconsistency,
designfeedthrough, designfork, diode,
isolation, levelshifter, powerground,
powerstatetable, powerswitch, retention,
signalcorruption, upfconsistency)
[-severity <error|warning|info>]
(Severity level:
Values: error, info, warning)
[-description <description>]
(Textual description of the violation)
[-dynamic_help <dynamic help>]
(Help message with dynamic field value)
[-fields <name name>] (Field names)
[-nosave] (Skip saving added violation definition to disk)
[-save] (Save all added violation definition(s) to disk)
Options
❖ -tag <name>
If a built-in tag name is given, an error message is shown. Built-in tags cannot be redefined. If a user-
defined tag name is given, then:
✦ If no instances of the same exist, redefinition occurs and an INFO message is shown informing
you that redefinition has taken place.
OR
✦ An error message is shown prompting you to remove violations first. The given TagName is
treated case insensitive. The report shown in all capital letters.
❖ -stage <stage>
The stage name can be either of DESIGN | PG | UPF. The StageName is treated case insensitive.
❖ -family <family>
The family name can be one of the following:
✦ DESIGNFEEDTHROUGH,
✦ DESIGNFORK
✦ ISOLATION
✦ LEVELSHIFTER
✦ POWERGROUND
✦ POWERSTATETABLE
✦ POWERSWITCH
✦ RETENTION
✦ SIGNALCORRUPTION
✦ UPFCONSISTENCY
The value is case insensitive.
❖ -severity <error|warning|info>
SeverityValue can be either of ERROR | WARNING | INFO type. The given SeverityValue is
treated case insensitive.
❖ -description
Description can be any user specified string.
Note
If this switch is used for one or more consecutive define_lp_violation command, you MUST use the
define_lp_violation –save command before any other command that interacts with reports (for
example report_violations -app LP / waive_lp /add_lp_violation /
remove_lp_violation etc.) is used. By default, without this switch, the violation definition is saved in
the database.
❖ -save
Enforces database save for all previously inserted violation definitions. It is redundant if used with a
successful define_lp_violation –tag command; because even without this switch, the
database save takes place to save all previously inserted non-saved data. The command
define_lp_violation –save enforces database save for all previously issued insert operations.
The recommended steps for faster define_lp_violation operation are:
a. Use one or more define_lp_violation –tag … -field … … -nosave.
b. After Step 1 is done, use the define_lp_violation –save command.
Example
define_lp_violation -tag MY_VIOLATION -stage Design -family Isolation -severity Warning
-description Description -dynamic_help "This is my :source: and :sink: violation" -
fields {DomainSink DomainSource LogicSink LogicSource Domain Sink Source Instance
CellPin Cell CellType SourceInfo SinkInfo DesignNet UPFSupply Strategy PinPGType
PowerStateTable State VoltageValue}
Note
This command can be used only after UPF reading is successful.
Syntax
%vc_static_shell> remove_lp_violation -help
Usage: remove_lp_violation # removes violations from the LP database
[-tag <name>] (Remove violations based on Tag name)
[-id <id>] (Remove violations based on IDs)
[-nosave] (Skip updating removed violation in disk)
[-save] (Update all removed violation(s) in disk)
Options
❖ -tag <name>
The tag name can be a built-in tag, or a user-defined tag previously defined using the
define_lp_violation command. The tag name is treated case insensitive. Multiple tag names
can be given, separated by a space. Supports the use of wildcards for a tag name.
❖ -id <id>
Can be any existing violation’s ID. Multiple Ids can be given, separated by space.
❖ -nosave
Skips saving the change for a removed violation instance to the database immediately. This achieves
faster operation.
Note
If this switch is used for one or more consecutive remove_lp_violation command, you MUST use the
remove_lp_violation –save command before any other command that interacts with reports (for
example report_violations -app LP / waive_lp / define_lp_violation /
add_lp_violation etc.) is used. By default, without this switch, the removal of violation instance is
saved to database.
❖ -save
Enforces database save for all previously removed violation instances. It is redundant if used with a
successful remove_lp_violation –tag … command; because even without this switch, database
save takes place to save all previously removed non-saved data. The remove_lp_violation –
save command enforces database save for all previously issued remove operations. The
recommended steps for faster remove_lp_violation operation are:
a. Use one or more remove_lp_violation –id … –nosave [you can use a loop of
remove_lp_violation commands in your Tcl script]
b. After Step 1 is complete, use the remove_lp_violation –save command [outside the loop].
Example
remove_lp_violation -tag MY_VIOLATION
–add mode
%vc_static_shell> waive_lp –add <name> [-comment <string>] [-force] [-tag <tags>] [-
severity <severities>] [-id <ids>] [-stage <stages>] [-family <families>] [-filter
<expression>] [-regexp] [-nocase]
This command mode adds the named waiver to a waiver table and marks those violations selected by the
filter options. All options after –comment are exactly as they appear in the report_violations -app LP
command. These filter options may be simply cut-and-pasted from the report_violations -app LP
command. It is important to note that the set of waived violations may be larger than the set of
report_violations -app LP displayed violations. This is because report_violations -app LP does not
(by default) display those violations already waived while the waive_lp command applies the newly
created waiver to all violations filtered by these command line options.
-append mode
%vc_static_shell> waive_lp –append <name> [-force][-tag <tags>] [-severity
<severities>] [-id <ids>] [-stage <stages>] [-family <families>] [-filter <expression>]
[-regexp] [-nocase]
This command mode adds additional filter options to the named (existing) waiver. This mode does more
than keeping you under the waiver limit. It allows you to group whole collections of violations not easily
filtered by a single set of filter criteria under the same named waiver. For instance, you may wish to have a
single waiver named waived, the set of violations best described by a collection of filter statements. Without
this mode you will have to create artificial categorizations (waived1, wavied2, etc) simply to describe what
is logically a single category.
-delete_all mode
%vc_static_shell> waive_lp –delete_all
Removes all waivers from the waiver table and the low power application repository.
-delete mode
%vc_static_shell> waive_lp –delete <name>
Removes the named waiver from the waiver table and resets the previously selected waivers from the low
power application repository.
List mode
%vc_static_shell> waive_lp [-tcl]
The waive_lp command with no options, displays all currently assigned waivers in a tabular format. With
the –tcl option waivers are displayed with a syntax fully compatible with the waive_lp –add mode. This
allows for the capture and replay of the current set of waivers in subsequent design sessions.
You can arbitrarily enable or disable this application variable during the same run, unless you do not see
any difference in results; that is, the same output should come from the report_violations -app LP -
filter command, and the same number of violations should be waived by the waive_lp -filter
command. The only difference you should see is the change in the runtime.
When you migrate the waiver from block level to Top level, and if the Top design contains two instances of
block ma: y/b1 and z/b2, then the following waivers are generated at the Top level.
%vc_static_shell>waive_lp -add w1_ma_0 -filter instance==y/b1/x/u1
%vc_static_shell>waive_lp -add w1_ma_1 -filter instance==z/b2/x/u1
The Suffixes _ma_0, _ma_1 are added to make the filter unique between instances when the waivers are
migrated from different blocks.
Example 2: Block Waivers with Filters on Cell Objects
If the waive_lp command contains filters like filter cell or filter any tag, then when you migrate these block
level waivers to Top level, the waivers added at the Top level are such that the filter options are attached to
the required block, and not any other block. Most of the violations have either an instance or a StrategyNode
field to bind the scope, therefore the instance or a StrategyNode is added in the Top level waiver after
migration.
Consider an example where block ma contains following waiver:
%vc_static_shell>waive_lp -add w1 -filter cell==MY_DFF
When you migrate the waivers to the Top level, the waiver waives all violations containing the
cell==MY_DFF for all the instances of the block ma at the Top level.
%vc_static_shell>waive_lp -add w1_ma_0 -filter {(cell==MY_DIFF) && (Instance=~y/b1/*)
|| (StrategyNode=~y/b1/*)) }
If the tags do not contain the instance or a StrategyNode field, then when you migrate such waivers to the
Top level, you get the following warning message:
[Warning] WAIVER_MIGRATION_ANCHOR: Waiver tag has no anchor field Waiving by tag alone is not
possible for this tag since it has no instance specific fields.
The waivers cannot be prevented from operating on all blocks of the design.
Example 3: Block Waivers with Filters on Port Objects
Consider the following waiver applied at the block level (the block in the figure above):
%vc_static_shell>waive_lp -add w1 -filter LogicSink=~P*
The port P2 is the logicsink at the block level. However, at the Top level the LogicSink can change as per the
design. Therefore, when you migrate the waiver to the Top level, the waiver applied at the Top level is as
follows:
%vc_static_shell>waive_lp -add w1_ma_0 -filter LogicSink=~y/b1/I1/P*
If the block level waiver waives the tags using any of the primary ports, the following message is reported:
[Warning] WAIVER_MIGRATION_PRIMARY: Primary port reference in waiver w1: LogicSink=~P*
The waiver terms of the block’s primary inputs may no longer operate as expected. The waiver is migrated
but it should be manually verified.
Example 4: Block Waivers with Filters on Supply Objects
If the waive_lp command contains the -filter option which is a supply object at the block level, then when
you migrate the waivers to the Top level, the supply name for the block level may change at the Top level.
Therefore, you get a warning message and you should manually check if the waivers are migrated correctly.
If there are not migrated correctly, the you must change the supply name in the Top level waiver for proper
execution.
Consider the following waiver written at the block level:
4.3.6.3.4 Limitations
❖ The migrate_waivers command only updates the waive_lp command of block level tcl file. It puts
the other lines as it is in the top level .tcl file. Even the source other than the waive.tcl inside block.tcl
is also just copied. If those waivers are also required to be migrated, then you must migrate them
separately.
❖ You can not use all escape characters in an instance name because the migrate_waivers command
has constraints for the instance. The waiver names are constrained to the following character set: [a-
zA-Z0-9_][a-zA-Z0-9_$-]*.
❖ The -module switch is not supported in the migrate_waivers command for VHDL design.
The command looks at all the waivers and violations in the current run, which you should set up before
executing the command.
The command takes a filename as its input, where the output must be written.
The command has the -verbose option which causes a much larger output file to be written. By default, a
short comment is written for each assertion with a single violation ID and waiver name. If you use the -
verbose option, the entire list of violation ID's and waivers are written. This can be large, however, it is
helpful for debugging.
Example
Suppose you have the following violations and a waiver applied on the violation. (Only the relevant fields
of the violation are shown.)
ISO_STRATEGY_MISSING
ViolationID LP:72
StrategyNode b1/p1
SourceInfo
PowerNet
NetName vdda
SinkInfo
PowerNet
NetName vdd
Waiver w1
ISO_STRATEGY_MISSING
ViolationID LP:73
StrategyNode b1/p2
SourceInfo
PowerNet
NetName vdda
SinkInfo
PowerNet
NetName vdd
Waiver w1
vcst_shell> waive_lp -add w1 -tag ISO_STRATEGY_MISSING
-filter {sourceinfo:powernet:netname==vdda}
Then you use the following command:
%vc_static_shell> analyze_waiver_correctness foo.sva
VC static generates the following file as output.
import UPF::*;
module generated_assertions;
// Variable declarations for supplies
UPF::supply_net_type local_vdd;
UPF::supply_net_type local_vdda;
initial begin
$upf_mirror_state ("vdd", local_vdd);
$upf_mirror_state ("vdda", local_vdda);
end
// Assertions
// Violations: 1, first is 1; Waivers: 1, first is w1
awc_1 : assert #0 (!((local_vdd.voltage != 0) &&
(local_vdda.voltage == 0)));
endmodule
module bind_file;
bind top generated_assertions generated_assertion_inst (.*);
endmodule
The upf_mirror_state command is a (new) proprietary command in VCS. This is required to link, or
mirror, a UPF supply to a simulation variable which can be used in an assertion.
4.3.6.4.3 Limitations
❖ The analyze_waiver_correctness command generates assertions only for power nets and not for
ground nets.
❖ The analyze_waiver_correctness command is available as an LCA feature. Please contact
[email protected] before using this command.
❖ get_pins
❖ get_ports
❖ link
❖ read_verilog
❖ read_sverilog
❖ read_vhdl
❖ report_blackbox
❖ report_trace_paths
❖ set_app_var
❖ set_always_on_cell
❖ set_blackbox
❖ set_isolation_cell
❖ set_level_shifter_cell
❖ set_power_switch_cell
❖ set_retention_cell
❖ set_message_severity
❖ set_pin_model
❖ set_pg_pin_model
For more information on each of the Design query commands, see the VC Static Command Reference Guide.
For commands that have both switches, the -regexp and -exact options are mutually exclusive. You can
specify only one of these options.
False (default) Search in the given hierarchy. Search through hierarchical boundaries,
Stops at hierarchical boundaries. scope boundaries and terminal boundary.
Note
When the upf_terminal_boundary_transitive application variable is set to true, VC LP does not
query the objects on the terminal boundary.
Examples
Consider the following example
BlockA has a port in1. BlockA is a terminal boundary. Design top also has a port in1.
❖ When the upf_terminal_boundary_transitive application variable is set to true, and the
following command is executed at the top scope:
[-of_objects <strategy/cell>]
(Specifies strategy (ISO, LS, RET) or cell)
[<patterns>] (List of power domain name patterns)
Use Models
%vc_static_shell> get_power_domains
{"ChipTop/GENPP", "ChipTop/GPRS", "ChipTop/INST", "ChipTop/MULT", "ChipTop/TOP"}
4.4.2.1.2 report_power_domain
This command reports about the specified power domain.This command describes the details of a given
power domain. By default, it reports the following:
❖ Name
❖ Design instances which belong to this power domain
❖ Primary supply set for this domain
❖ Isolation supply set for this domain
❖ Retention supply set for this domain
Syntax
%vc_static_shell> report_power_domain -help
Usage: report_power_domain # Reports specific power domains
[-name] (Reports power domain name)
[-elements] (Reports elements)
[-strategy] (Reports strategy name)
[-supply_net] (Reports supply net name)
[-primary_supply] (Reports primary supply set)
[-isolation_supply] (Reports isolation supply set)
[-retention_supply] (Reports retention supply set)
[<power_domain>] (List of power domain name patterns or collections)
Use Model
%vc_static_shell> report_power_domain [get_power_domains -name INST*]
Power Domain : INST
Full Name : INST
Current Scope :
Elements : InstDecode
Level Shifter strategies :
Isolation strategies : P__iso_0, P__iso_1, inst_iso_in, inst_iso_in_reset,
inst_iso_out
Retention strategies : inst_ret
Power Switch strategies :
Supply Nets : VDD, VDDI, VSS
Use Model
%vc_static_shell> get_isolation_strategies
{"ChipTop/GENPP/mult_iso_in", "ChipTop/GENPP/mult_iso_in_isoen",
"ChipTop/GPRS/a_iso_2","ChipTop/GPRS/a_iso_3", "ChipTop/GPRS/gprs_iso_in",
"ChipTop/GPRS/gprs_iso_in_reset", "ChipTop/GPRS/gprs_iso_out", "ChipTop/INST/a_iso_0",
"ChipTop/INST/a_iso_1", "ChipTop/INST/inst_iso_in", "ChipTop/INST/inst_iso_in_reset",
"ChipTop/INST/inst_iso_out", "ChipTop/MULT/mult_iso_out"}
To retrieve all isolation strategies which that use the supply set SS_TOP
%vc_static_shell> get_isolation_strategies –supply SS_TOP
{“iso_pd1,iso_pd2”}
4.4.2.2.2 report_isolation_strategy
This command reports about the specified isolation strategies.
This command describes the details of a given isolation strategy. By default, it will report all the
components of this strategy. User can ask to report only specific components.
Syntax
%vc_static_shell> report_isolation_strategy -help
Usage: report_isolation_strategy # Reports specific isolation strategies
[-name] (Reports isolation strategy name)
[-domain] (Reports power domain)
[-elements] (Reports elements)
By default, it reports all information about the isolation strategy. If any specific option is specified, then it
prints only the relevant information.
If the isolation is defined with -no_isolation, remove some fields: power/ground, clamp, diff supply only,
location, sense, and keep other fields. Put -no_isolation within bracket after strategy name.
Use Model
❖ %vc_static_shell> report_isolation_strategy \
[get_isolation_strategies -name *mult_iso_out*]
Isolation strategy : mult_iso_in
Full Name : GENPP/mult_iso_in
Power Domain : GENPP
Power Supply Net : VDD
Ground Supply Net : VSS
Elements :
Source Supply Set :
Sink Supply Set :
Clamp Value : 1
Applies To : inputs
Diff Supply Only : 0
Isolation Signal : mult_iso_in
Location : self
Isolation Sense : high
vc_static_shell> report_isolation_strategy \
[get_isolation_strategies -name *mult_iso_out*] -signal
Isolation strategy : mult_iso_in
Isolation Signal : mult_iso_in
❖ The report_isolation_strategy -map_cells command reports the cell_names written in the
UPF map strategy itself. The cells are not validated before printing out the result. The output of this
command is the content of the map strategy as it is.
Example
Consider the following UPF:
map_isolation_cell ISO_and_module -domain TOP -lib_cells {ISOLO ISOHI ISO_INV}
The following Tcl command:
report_isolation_strategy TOP/ISO_and_module -map_cells
reports the following output:
Enabled : false
Use Models
%vc_static_shell> get_power_switch_strategies
{"ChipTop/gprs_sw", "ChipTop/inst_sw", "ChipTop/mult_sw"}
To retrieve all power switch strategies that have the error state defined
%vc_static_shell> get_power_switch_strategies -filter {has_error_state == true}
{“psw_top, psw_pd1,”}
4.4.2.3.2 report_power_switch
This command reports information about the supplied power switch object.
This command reports the details of the power switch specified in the argument. You can provide a single
power switch or a collection of power switches. You can also choose to report on specific components of
power switch. Reports details of this power switch. If no option is given, by default it reports the
❖ Name
❖ Current scope
❖ Switch power domain
❖ Input port net and voltage
❖ Output net and voltage
If any option is specified, it reports only those items. If only -verbose is given, all aspects of the power
switch are reported.
Syntax
%vc_static_shell> report_power_switch -help
Usage: report_power_switch # Reports specific power switches
[-name] (Reports power switch name)
[-input_supply_port] (Reports input supply port)
[-output_supply_port] (Reports output supply port)
[-control_port] (Reports control port)
[-on_state] (Reports on state)
[-on_partial_state] (Reports on partial state)
[-off_state] (Reports off state)
[-error_state] (Reports error state)
[-supply_set] (Reports power switch supply set)
[-domain] (Reports power domain)
[-ack_port] (Reports acknowledge port)
[-ack_delay] (Reports acknowledge delay)
[-verbose] (Reports verbose)
[<power_switch>] (List of the power switch name patterns or collections)
Use Model
%vc_static_shell> report_power_switch *inst*
Power Switch : inst_sw
Full Name : inst_sw
Current Scope :
Power Domain : TOP
Input Port Net : VDDI
Output Port Net : VDDIS
Control Port : inst_on
On State : { state2001 in !(inst_on) }
Off State :
Error State :
Partial On State :
Ack Port :
Ack Delay :
Use Model
%vc_static_shell> get_retention_strategy
{"ChipTop/GENPP", "ChipTop/GPRS", "ChipTop/INST", "ChipTop/MULT", "ChipTop/TOP"}
To retrieve all retention strategies that use the supply set SS_TOP
%vc_static_shell> get_retention_strategies –supply SS_TOP
{“ret_pd1,ret_pd2”}
4.4.2.4.2 report_retention_strategy
This command reports details of the supplied retention strategy. This command reports the details of the
retention strategy specified in the argument. You can provide a single retention strategy or a collection of
retention strategies. You can also choose to report on specific components of the retention strategy.
Report details of the retention strategy. By default, it reports the following:
❖ Domain
❖ Elements
❖ exclude_elements (if any)
❖ Retention power
❖ Retention ground
❖ Retention supply set
❖ Save signal
❖ Restore signal
❖ Save condition
❖ Restore condition
❖ Instances
❖ -transitive (if specified).
If any option is specified, then the command prints only the relevant values.
Syntax
vc_static_shell> report_retention_strategy -help
Usage: report_retention_strategy # Reports spcific retention strategies
[-name] (Reports retention strategy name)
[-domain] (Reports power domain)
[-elements] (Reports elements)
[-ret_power] (Reports power supply net)
[-ret_ground] (Reports ground supply net)
[-retention_supply] (Reports retention supply set)
[-save] (Reports save logic net)
[-restore] (Reports restore logic net)
[-save_condition] (Reports save condition)
[-restore_condition] (Reports restore condition)
[-retention_condition] (Reports retention condition)
[<retention_strategy>] (List of retention strategy name patterns or collections)
Use Model
%vc_static_shell> report_retention_strategy
Retention strategy : gprs_ret
Full Name : GPRS/gprs_ret
Power Domain : GPRS
Save Signal : gprs_save(high)
Restore Signal : gprs_nrestore(low)
Power Supply Net : VDDG
Ground Supply Net : VSS
Elements :
Retention Supply Set : ChipTop/GPRS.gprs_ret.supply
VDDG VSS
Save Condition :
Restore Condition :
Retention Condition :
------------------------------------------------------
Retention strategy : inst_ret
Full Name : INST/inst_ret
Power Domain : INST
Save Signal : inst_save(high)
Restore Signal : inst_nrestore(low)
Power Supply Net : VDDI
Ground Supply Net : VSS
Elements :
Retention Supply Set : ChipTop/INST.inst_ret.supply
VDDI VSS
Save Condition :
Restore Condition :
Retention Condition :
%vc_static_shell> report_retention_strategy \
[get_retention_strategies -name *gprs*]
Retention strategy : gprs_ret
Full Name : GPRS/gprs_ret
Power Domain : GPRS
Save Signal : gprs_save(high)
Restore Signal : gprs_nrestore(low)
Power Supply Net : VDDG
Ground Supply Net : VSS
Elements :
Retention Supply Set : ChipTop/GPRS.gprs_ret.supply
VDDG VSS
Save Condition :
Restore Condition :
Retention Condition :
vc_static_shell> report_retention_strategy *inst* -domain
Retention strategy : inst_ret
Power Domain : INST
❖ Combined Mode: This is the default mode when the user does not specify any mode. In this mode,
physical connectivity is given higher precedence compared to UPF connectivity. But where physical
connectivity is missing, it uses UPF connectivity to traverse. Hence, in a fully PG connected design,
this mode is equivalent to netlist only mode. And in a design which has no PG connectivity, this
mode is equivalent to UPF only mode.
Syntax
%vc_static_shell> get_root_supply_net -help
Usage: get_root_supply_net # Returns a collection of root supply nets for specific
design pins/ports or UPF supply ports or crossover node
[-power] (Returns root power supply net)
[-ground] (Returns root ground supply net)
[-upf] (Bases on UPF information)
[-netlist] (Bases on PG connectivity)
[-quiet] (Suppresses all messages. Syntax error messages are not
suppressed)
[-nocase] (Case insensitive)
<pin> (List of design pin names or collections)
Use Models
%vc_static_shell> get_root_supply_net [get_pins \
ChipTop_U_decompressor_ScanCompression_mode/dout[43] ]
{"ChipTop/VDD"}
%vc_static_shell> get_root_supply_net [get_pins \
ChipTop_U_decompressor_ScanCompression_mode/dout[43]] -netlist
{"ChipTop/VDD"}
%vc_static_shell> get_root_supply_net [get_pins \
ChipTop_U_decompressor_ScanCompression_mode/dout[43] ] -ground
{"ChipTop/VSS"}
4.4.2.5.2 get_root_supply_path
The get_root_supply_path Tcl command takes the UPF supply net as an argument, and returns the
collection of the entire path stack of supply net/ports up to root supply net (state source).
Syntax
get_root_supply_path <upf-supply-net-name>
Usage: get_root_supply_path will return collection of upf root supply net (state
source) and all intermediate upf supply nets and ports in the path.
Example Output
get_root_supply_path inst1/VDD
{“VDD”, “VDD”, “inst1/VDD”, “inst1/VDD”}
4.4.2.5.3 get_related_supply_pin
This command returns the related supply pin for a logic pin of a leaf level cell, using property set in the
database.
This command returns the related power pin of a logic pin on a cell. It is useful for cells which have multiple
power rails such as dual-rail always-on buffer or multi-rail macro such as memory modules.
This command can only be applied to leaf level cell pins and returns supply pins in a collection.
Syntax
%vc_static_shell> get_related_supply_pin -help
This query can be asked on a pin of an instance of library cell ( library DB). It returns the power or ground
pin (depending on if –power or –ground is specified, default option is -power), based on the DB cell
attribute.This query can be asked on a pin of an instance of the library cell (library DB). It returns the power
or ground pin (depending on if –power or –ground is specified, default option is -power), based on the DB
cell attribute.
Use Model
%vc_static_shell> get_related_supply_pin U153/ZN
{"U153/VDD"}
%vc_static_shell> get_related_supply_pin U153/ZN -ground
{"U153/VSS"}
%vc_static_shell> get_related_supply_pin [get_pins U230/ZN]
{"U230/VDD"}
4.4.2.5.4 get_upf_connection
The query command returns the UPF supply net that drives a given pin or port of a design. It returns a
supply net that is an immediate connection and not root supply connection.
Syntax
vc_static_shell> get_upf_connection -help
Usage: get_upf_connection # Returns immediate connection of specified type
-type connection_type (Specifies connection type:
Values: csn, spa, srsn)
[-power] (Specifies power supply net)
[-ground] (Specifies ground supply net)
[-pwell] (Specifies pwell supply net)
[-nwell] (Specifies nwell supply net)
[-driver] (Specifies driver supply net)
[-receiver] (Specifies receiver supply net)
[-repeater] (Specifies repeater supply net)
[-literal] (Specifies literal supply net)
[-quiet] (Suppresses all messages.)
<pin|port> (pin or port name patterns or collections)
Examples
%vc_static_shell> get_upf_connection ISO_TOP/VDD -type csn -power
{"VDD_SW_ISO"}
vc_static_shell> get_upf_connection ISO_TOP/VSS -type csn -ground{"VSS"}
4.4.2.6.2 report_pst
This command prints out the specified PST and all the states in a tabular manner.
This command prints the details of the specified PST in a tabular manner. Each row is a state in the PST with
the values of the supply nets of that PST. Reports the PST state table in tabular format. Each row is a state in
the PST. The columns are the supply nets. The values in each cell of the table are the port states of the supply
ports/nets that are a part of this PST.
Syntax
%vc_static_shell> report_pst -help
Usage: report_pst # Reports specific power state tables
[<pst>] (List of power state table name patterns or collections)
Use Model
%vc_static_shell> report_pst
PST Name : chiptop_pst
Full Name : chiptop_pst
VDD| VDDI| VDDIS| VDDG| VDDGS| VDDM| VDDMS|
chiptop_pst/s0: HV| HV| HV| HV| HV| HV| HV|
chiptop_pst/s01: HV| HV| OFF| HV| HV| HV| HV|
chiptop_pst/s02: HV| HV| HV| HV| OFF| HV| HV|
chiptop_pst/s03: HV| HV| HV| HV| HV| HV| OFF|
chiptop_pst/s1: HV| LV| LV| LV| LV| HV| HV|
chiptop_pst/s11: HV| LV| OFF| LV| LV| HV| HV|
chiptop_pst/s12: HV| LV| LV| LV| OFF| HV| HV|
chiptop_pst/s13: HV| LV| LV| LV| LV| HV| OFF|
-------------------------------------------------------
4.4.2.6.3 get_pst_states
Returns the PST states in the specified PST.
This command returns a collection of PST states, from the specified PSTs. If no PST is specified, then it
searches for all available PSTs. You can further query on the PST states described in subsequent commands.
Syntax
%vc_static_shell> get_pst_states -help
Usage: get_pst_states # Returns a collection of states (rows in PST) in the specific
PST
[-of_objects <state_table>]
(Specifies state table name patterns or collections)
Use Model
%vc_static_shell> get_pst_states -pst [get_pst -name chiptop*]
{"s13", "s01", "s02", "s11", "s0", "s03", "s12", "s1"}
4.4.2.6.4 report_pst_state
Reports specific PST states. This command returns specific states defined in PSTs. You can further query on
the states to get information about the valid/invalid states of each PST.
Syntax
%vc_static_shell> report_pst_state -help
Usage: report_pst_state # Reports specific PST states
[-only_invalid] (Include only invalid PST states)
[-only_valid] (Include only valid PST states)
[<pst_state>] (List of PST state name patterns or collections)
Use Model
set_scope /
………
create_pst top_pst -supplies {VDD_TOP VSS_TOP}
add_pst_state s1 -pst top_pst -state {TOP_V12 gon}
add_pst_state s2 -pst top_pst -state {TOP_V10 gon}
set_scope BLOCK_A
………
create_pst block_a_pst -supplies {VDD1 VSS1}
add_pst_state s1 -pst block_a_pst -state {BLKA_V12 gon}
add_pst_state s2 -pst block_a_pst -state {BLKA_V08 gon}
set_scope /
Note: *_V12 represents 1.2V, *_V10 represents 1.0V, *_V08 represents 0.8V
%vc_static_shell> report_pst_state -only_invalid
PST State : s2
Full Name : BLOCK_A/block_a_pst/s2
VDD_TOP| VSS_TOP|
BLOCK_A/block_a_pst/s2: BLKA_V08| gon|
-------------------------------------------------
PST State : s2
Full Name : top_pst/s2
VDD_TOP| VSS_TOP|
top_pst/s2: TOP_V10| gon|
---------------------------------------------------
%vc_static_shell> report_pst_state -only_valid
PST State : s1
Full Name : BLOCK_A/block_a_pst/s1
VDD_TOP| VSS_TOP|
BLOCK_A/block_a_pst/s1: BLKA_V12| gon|
----------------------------------------------------
PST State : s1
Full Name : top_pst/s1
VDD_TOP| VSS_TOP|
top_pst/s1: TOP_V12| gon|
%vc_static_shell>report_pst_state BLOCK_A/block_a_pst/s1
PST State : s1
Full Name : BLOCK_A/block_a_pst/s1
VDD_TOP| VSS_TOP|
BLOCK_A/block_a_pst/s1: BLKA_V12| gon|
-----------------------------------------------------
4.4.2.6.5 get_num_merged_pst_states
This command returns the number of states from the merged PST. This command returns the number of
unique PST states after all individual PSTs are merged into one PST. This command can be used after
read_upf is successfully completed.
Syntax
%vc_static_shell> get_num_merged_pst_state -help
Usage: get_num_merged_pst_states # Returns number of states in merged PST
[-exclude] (Exclude supplies which are not used in any PST)
[-limit <double>] (Stop counting after this many states)
Use Model
set_scope /
……..
create_pst top_pst-supplies {VDD_TOP VSS_TOP}
add_pst_state s1 -pst top_pst-state {TOP_V12 gon}
add_pst_state s2 -pst top_pst-state {TOP_V10 gon}
add_pst_state s3 -pst top_pst-state {TOP_V08 gon}
set_scope BLOCK_A
……..
create_pst block_a_pst -supplies {VDD1 VSS1}
add_pst_state s1 -pst block_a_pst -state {BLKA_V12 gon}
add_pst_state s2 -pst block_a_pst -state {BLKA_V08 gon}
set_scope /
connect_supply_net VDD_TOP -ports { VDD_TOP BLOCK_A/VDD1 }
Note: *_V12 represents 1.2V, *_V10 represents 1.0V, *_V08 represents 0.8V
During read_upf, VC LP merges the three PSTs mentioned in the example and the merged PST has all the
possible cross combinations of these three PSTs.
The get_num_merged_pst_states command returns total num of states in merged PST.
In above example, get_num_merged_pst_states returns 6.
%vc_static_shell> read_upf merged_states.upf
%vc_static_shell> get_num_merged_pst_states
6
4.4.2.6.6 report_system_pst
In designs with a large number of power state tables, it is difficult for you to predict the resulting system
power states. However, VC LP provides a command, report_system_pst, which provides several ways to
display the system power state table.
Syntax
vc_static_shell> report_system_pst -help
Usage: report_system_pst # reports system power state table for all or some supplies
[-summary] (Show only a summary of the table size)
[-supplies <supplies>] (List of supply net name patterns or collections)
[-tables <tables>] (List of power state table name patterns or collections)
[-format <format>] (Format, default comma separated values:
Values: csv, html, upf)
[-symbolic] (Show state names instead of voltage values)
[-exclude] (Exclude supplies which are not used in any PST)
[-include] (Include "uninteresting" supplies with one port state)
[-loop] (Test every potential state (can be slow))
[-limit <double>] (Stop counting after this many states)
[-transient] (Include transient power states)
[-force] (Force computation of potentially huge output
Use Model
The following is a simple example of a design with two power state tables. This is not a full UPF file but just
an illustration to convey the idea.
create_power_domaind_top -include_scope
create_supply_net VDD1
add_port_state VDD1 -state "H1 1.2"
create_supply_net VDD2
add_port_state VDD2 -state "H2 1.2" -state "Z2 off"
create_supply_net VDD3
add_port_state VDD3 -state "H3 1.2" -state "L3 1.1"
create_supply_net VDD4
add_port_state VDD4 -state "H4 1.2" -state "Z4 off"
The following are several examples of the complete command lines and outputs:
%vc_static_shell>report_system_pst -summary
Supplies: 3 Port states: 7
Potential system states: 8 Actual system states: 4
%vc_static_shell>report_system_pst
VDD1,VDD2,ua/VDD3,ua/VDD4
1.2,1.2,1.2,1.2
1.2,1.2,1.1,off
1.2,off,1.2,1.2
1.2,off,1.1,off
To avoid this error message, consider requesting fewer supplies, or using other debug commands.
To print anyway, add -force to the command.
❖ vc_static_shell> report_system_pst -loop
[Error] PST_LOOP_COUNT: The output you requested would take some time to generate because the -loop
option requires iterating 4.24e+37 potential states.
To avoid this error message, consider not using -loop, or request for fewer supplies, or use other
debug commands.
❖ If you do not want to receive these error messages, and print the output anyway, use the -force
option.
If you use the -force option, neither of the messages will be reported, and VC LP performs the huge
computation. For small designs, the report_system_pst behavior is consistent with the previous
behaviors.
Note
You cannot change the threshold. For the STATE message, the threshold above which the message
appears is 1e8 (one hundred million). For the LOOP message, the threshold above which the message
appears will be 1e10 (ten billion).
Don’t-Care Operator
Character: “*”
Example: If a design has 20 independent switchable power supplies, there are 2^20 (a million) actual system
power states. However, using the don’t-care operator, only one line is printed by report_system_pst
command containing a don’t-care character for each supply.
Partial Don’t-Care Operator
Character: “?”
Example: If a supply has four power states and two always appear together in the PSTs, they will be
represented as partial dont-care operators.
Note
The –loop option returns all system power states which is slower but more precise.
Note
Use the –summary option first, which prints the potential state count. If this is more than 1e9 (billions), the
runtime may be too long.
4.4.2.6.7 get_equiv_power_ports
Given a power net, returns all the equivalent power nets (as per PG connectivity) and/or UPF specification.
Syntax
%vc_static_shell> get_equiv_power_ports -help
Usage: get_equiv_power_ports # Returns a collector of supply ports or nets which are
equivalent to the specific supply net
[-upf] (Bases on UPF information)
[-netlist] (Bases on PG connectivity)
[-quiet] (Suppresses all messages. Syntax error messages are not
suppressed)
<supply_net> (Specifies supply net name patterns or collections)
4.4.2.6.8 get_crossovers
Crossover/Protection/Retention/Isolation Get collection of crossovers, as specified.
Syntax
%vc_static_shell> get_crossovers -help
Usage: get_crossovers # Returns a collection of specific crossovers
[-source <power_domain>]
(Specifies source power domain)
[-dest <power_domain>] (Specifies destination power domain)
[-from_signal <net_or_pin>]
(Specifies start signal)
[-to_signal <net_or_pin>]
(Specifies end signal)
[-through_signal <net_or_pin>]
(Specifies present signal)
[-filter <expression>] (Filter collection with 'expression')
[-quiet] (Suppresses all messages. Syntax error messages are not
suppressed)
Use Model
To retrieve all crossovers in the design with an un-driven source
%vc_static_shell> get_crossovers -filter {source_type == undriven}
{"undriven CORE4/in1 CORE4/dff1/D"}
To retrieve all crossovers whose driver is un-driven and load is unused
%vc_static_shell> get_crossovers -filter {source_type == undriven || sink_type ==
unused}
{"CORE3/dff1/Q CORE3/out1 unused", "undriven CORE4/in1 CORE4/dff1/D"}
To retrieve all crossovers that starts from top-level ports
%vc_static_shell> get_crossovers -filter {source_type == port}
{"in1 CORE1/in1 CORE1/dff1/D", "clk CORE1/clk CORE1/dff1/CP“}
4.4.2.6.9 get_crossover_info
Returns the source signal, destination signal, source domain, destination domain, iso/ls strategies and
iso/ls devices present on a crossover.
Syntax
%vc_static_shell> get_crossover_info -help
Usage: get_crossover_info # Returns specific power cross-over information
[-src] (Returns source signal information)
[-src_domain] (Returns source domain information)
[-dest] (Returns destination signal information)
[-dest_domain] (Returns destination domain information)
[-boundary] (Returns the domain boundary)
[-device] (Returns device information)
[-strategy] (Returns strategy information)
[-type type] (Specifies device or strategy type:
Values: iso, ls)
[-quiet] (Suppresses all messages. Syntax error messages are not
suppressed)
crossover (Specifies crossover objects)
Use Model
#Get crossover object
set xover1 [sort_collection [get_crossovers -from_signal top.i_core.u4.Z] full_name]
{"i_core.u4.Z i_core.Z1 out1"}
#<crossover> is required
get_crossover_info -src_domain
Error: Required argument 'crossover' was not found (CMD-007)
#By default, it returns all crossover nodes from the given crossover object. It is the
same as “get_crossover_node <crossover>” command.
get_crossover_info $xover1
{"i_core.u4.Z", "i_core.Z1", "out1"}
{"TOP"}
4.4.2.6.10 get_level_shifter_strategies
Gets a collection of level shifter strategies which matches the specification.
Syntax
%vc_static_shell> get_level_shifter_strategies -help
Usage: get_level_shifter_strategies # Returns a collection of specific level shifter
strategies
[-regexp] (Patterns are regular expressions)
[-exact] (Specifies exactly matching)
[-nocase] (Regexp matches case-insensitive)
[-domain <power_domain>]
(Specifies power domain)
[-of_objects <power_domain/cell/pin/port>]
(Specifies power_domain, cell, pin or port)
[-filter <expression>] (Filter collection with 'expression')
[-quiet] (Suppresses all messages. Syntax error messages are not
suppressed)
[<patterns>] (List of level shifter strategy name patterns)
Use Model
To retrieve level shifter strategy that survive on the pin CORE1/in1
%vc_static_shell> get_level_shifter_strategies –of_objects CORE1/in1
{“ls_pd1”}
To retrieve level shifter strategy associated to the level shifter instance ls_inst
%vc_static_shell> get_level_shifter_strategies –of_objects ls_inst
{“ls_top”}
To retrieve all level shifter strategies that has the rule high_to_low
%vc_static_shell> get_level_shifter_strategies -filter {rule == high_to_low}
{“ls_top, ls_pd1,ls_pd2”}
4.4.2.6.11 get_supply_states
Returns a collection of supply states for the specified supply net.
Syntax
%vc_static_shell> get_supply_states -help
Usage: get_supply_states # Returns a collection of supply states
[-of_objects <supply_port/supply_net/pst_state>]
(Specifies supply port, supply net or pst state)
[-filter <expression>] (Filter collection with 'expression')
[-quiet] (Suppresses all messages. Syntax error messages are not
suppressed)
[<net_port_state>] (Specifies supply state name patterns or collections)
Use Model
To retrieve the supply states for port VSS,VTOP
%vc_static_shell> get_supply_states -of_objects VSS
{"HV"}
get_supply_states -of_objects VTOP
{"HV", "OFF"}
4.4.2.6.12 get_supply_rail_order
Returns true if supply_net1 is strictly more ON that supply_net2, else returns false. Returns all possible
combinations of supply sets of these pair of supply nets. The command get_supply_net_combinations is
based on the original PSTs defined in the .upf files. It means, it reports the pairs in one PST only.
It is not based on the merged PST. If two supply nets are defined in different PSTs in the .upf files, no result
is returned.
Syntax
%vc_static_shell> get_supply_rail_order -help
Usage: get_supply_rail_order # Returns true if there is a state where supply_net1 is
ON and supply_net2 is OFF
[-state] (Return a state name causing the condition, if any)
<supply_net1> (Specifies supply net name patterns or collections)
<supply_net2> (Specifies supply net name patterns or collections)
4.4.2.6.13 analyze_power_state_exists
This command returns true/false if a particular combination of supply port states is legal in the system
power state table. It enables a power architect to ensure that the key high level system power states are not
deleted due to a design or tool bug.
This command can be run any time after read_upf. However, there are many types of power state table
inconsistencies and errors that are checked by check_lp -stage upf –pst –consistency. In particular,
invalid combinations of port states on a supply can result in violations such as PST_VOLTAGE_DROPPED
or PST_VOLTAGE_UNUSED. Severe problems can result in PST_STATE_ZERO.
This command is not intended to duplicate all these existing checks. So, it is recommended that you run
check_lp -stage upf –pst –consistency and fix any resulting violations before running the
analyze_power_state_exists command.
Syntax
%vc_static_shell> analyze_power_state_exists -help
Usage: analyze_power_state_exists # Check if legal state exists in merged PST
[-quiet] (Suppresses all messages)
<supply>=<port_state> ...
(Specify the list of supply and state pair.
<supply> = fully qualified path name of a supply name.
<port-state> = Legal port-state for that supply, considering the supply connection in
UPF.)
Error Messages
❖ If any field of the command is not of the form a=b then a syntax error will be issued for each
incorrect field of the command.
❖ If any objects specified in the command do not exist, then an error will be issued for each object that
does not exist.
❖ If a port state exists, but not for the supply where it is used, then an error is issued for each such port
state. For example, if supply A is the only supply for which port state B is defined, and the field C=B
is given, then the port state does not exist for that supply.
❖ If any errors are issued as a result of these checks, then the command returns false without
performing any power state table check.
Use Model
The top level of the design has three UPF supply ports, VA, VB, VC and corresponding supply nets. A
design instance u has three supply ports VD, VE, VF and corresponding supply nets. The UPF connects VA
to u/VD, VB to u/VE, and VC to u/VF. The following three power state tables are defined. The
corresponding add_port_state commands are not shown to save space.
create_pst t1 -supplies {VA VB}
add_pst_state s11 -pst t1 -state {HV HV}
add_pst_state s12 -pst t1 -state {HV OFF}
add_pst_state s13 -pst t1 -state {OFF HV}
create_pst t2 -supplies {VB VC}
add_pst_state s21 -pst t2 -state {HV HV}
add_pst_state s22 -pst t2 -state {OFF OFF}
set_scope u
create_pst t3 -supplies {VD VE VF}
add_pst_state s31 -pst t2 -state {HV HV HV}
add_pst_state s32 -pst t2 -state {HV OFF HV}
add_pst_state s33 -pst t2 -state {OFF HV HV}
State s32 is invalid because t2 does not contain a state with VB off and VC on. This is shown in the output of
report_pst –only_invalid.
The following transcript shows the result of several executions of the new command in VC LP.
%vc_static_shell> analyze_power_state_exists VA=Error: port state not spec ified for
supply_net VA 0
%vc_static_shell> analyze_power_state_exists VA=HV foo=HV Warning: No supply_net
objects matched 'foo' (SEL-004) 0
%vc_static_shell> analyze_power_state_exists VA=HV VB=foo Warning: No net_port_state
objects matched 'foo' (SEL-004)0
%vc_static_shell> analyze_power_state_exists VA=HV VB=HV1
%vc_static_shell> analyze_power_state_exists u/VD=HV VB=HV1
%vc_static_shell> analyze_power_state_exists VB=OFF VC=HV0
%vc_static_shell> analyze_power_state_exists u/VD=HV u/VE=OFF u/VF=HV0
Syntax
%vc_static_shell> get_supply_sets -help
Usage: get_supply_sets # Returns a collection of specific supply sets
[-regexp] (Patterns are regular expressions)
[-nocase] (Regexp matches case-insensitive)
[-of_objects <power_domain/supply_net>]
(Specifies power_domain or supply net)
[-quiet] (Suppresses all messages. Syntax error messages are not
suppressed)
[<patterns>] (List of supply set name patterns)
Examples
To retrieve the supply set associated with net VDD
%vc_static_shell> get_supply_sets -of_objects VDD
{"TOP.primary"}
4.4.2.7.2 get_supply_nets
Returns a collection of UPF supply nets that match the specified criteria.
Syntax
%vc_static_shell> get_supply_nets -help
Usage: get_supply_nets # Returns a collection of specific supply nets
[-regexp] (Patterns are regular expressions)
[-nocase] (Regexp matches case-insensitive)
[-of_objects
<power_domain/supply_set/supply_port/state_table/pst_state/net_port_state>]
(Specifies power_domain, supply_set, supply_port,
state_table, pst_state or net_port_state)
[-filter <expression>] (Filter collection with 'expression')
[-quiet] (Suppresses all messages. Syntax error messages are not
suppressed)
[-root] (Returns root supply nets)
[-include_unused] (Includes supply nets unused in any state table)
[<patterns>] (List of supply net name patterns)
Use Model
To retrieve the supply net associated with the supply set CORE1_ss
%vc_static_shell> get_supply_nets -of_objects CORE1_ss
{"VSS", "VDD_CORE_1"}
To retrieve the supply net connected with the port VDD_CORE_1
4.4.2.7.3 get_connected_supply_net
Returns the supply nets from which a path can be traced to the logic pin given in the command, without
having to go through any gates; hierarchy boundaries may be crossed while tracing.
Syntax
%vc_static_shell> get_connected_supply_net -help
Usage: get_connected_supply_net # Returns a collection of the connected supply net of
given data pin
[-quiet] (Suppresses all messages. Syntax error messages are not
suppressed)
<pin> (List of design pin names or collections)
Use Model
VDD_TOP --------> dff_1/D
%vc_static_shell> get_connected_supply_net dff_1/D
{"VDD_TOP"}
To retrieve a supply net in a design where the supply net is directly connected to the logical pin
%vc_static_shell> get_connected_supply_net dff_1/D
{"VDD_TOP"}
If the supply net is connected to the logical pin through the domain boundary
%vc_static_shell> get_connected_supply_net i_core_1/dff_1/D
{"VDD_TOP"}
4.4.2.7.4 get_supply_ports
Returns a collection of UPF supply ports that match the specified criteria.
Syntax
%vc_static_shell> get_supply_ports -help
Usage: get_supply_ports # Returns a collection of specific supply ports
[-regexp] (Patterns are regular expressions)
[-nocase] (Regexp matches are case-insensitive)
[-of_objects <supply_net>]
(Specifies connected supply_net)
[-filter <expression>] (Filter collection with 'expression')
[-quiet] (Suppresses all messages. Syntax error messages are not
suppressed)
[<patterns>] (List of supply port name patterns)
Use Model
For example, to get the supply port connected with net VDD
%vc_static_shell> get_supply_ports -of_objects VDD {“VDD"}
4.4.2.7.5 all_isolation_cells
Returns a collection of the existing isolation cells in the design. The enabled level shifters also work as
isolation cells, but the type of cell is not returned by this command.
Syntax
%vc_static_shell> all_isolation_cells -help
Usage: all_isolation_cells # Returns a collection of all isolation cells
4.4.2.7.7 all_macro_cells
Returns a collection of macro cells in the design.
Syntax
%vc_static_shell> all_macro_cells -help
Usage: all_macro_cells # Returns a collection of all macro cells
4.4.2.7.8 get_crossover_nodes
Returns a collection of crossover_nodes for the given objects.
Syntax
%vc_static_shell> get_crossover_nodes -help
Usage: get_crossover_nodes # Returns a collection of xover nodes created for the
given name
[-filter <expression>] (Filters in those objects whose attribute matches with
<expression>)
[-quiet] (Suppresses all messages. Syntax error messages are not
suppressed)
<obj> (Gives a name or an object (pin/port/net or crossover) to
create the crossover node)
A name string, a collection of design pins, ports or nets, or a collection of type <crossover> returned by
command get_crossovers.
4.4.2.7.9 get_root_supply_object
The get_root_supply_object Tcl command is introduced.
Syntax
get_root_supply_object [<pin>]
[-power]
[-ground]
[-upf]
[-netlist]
[- <nocase>]
[-quiet]
This command retrieves a collection of root supply objects for specific design pins/ports or UPF supply
ports. This command behaves same as the get_root_supply_net command except for the following specific
case:
For a db cell internal PG pin without a pg connection, the get_root_supply_object command returns the
internal pg pin as it is the root supply object. However, the get_root_supply_net command returns a
warning as no root supply net is recognized.
❖ Destination domain
❖ List of instances and nets in the crossover with protection devices annotated.
If any option is specified, only those specific items are printed.
Syntax
%vc_static_shell> report_crossover -help
Usage: report_crossover # Reports specific crossovers
[-source] (Reports source power domain)
[-dest] (Reports destination power domain)
[-domain_boundary] (Reports the domain boundary)
[-device] (Reports the device)
[-instances] (Reports the instances)
[-strategy] (Reports the strategy)
[-type device_type] (Specifies device type:
Values: iso, ls)
[<crossover>] (Specifies crossover collections)
4.4.2.8.2 report_level_shifter_strategy
Reports the details of the level shifter strategy. By default, the following items are printed:
❖ Name
❖ Domain
❖ Source domain
❖ Sink domain
❖ Level shifter rule
❖ Location
❖ Threshold (if any)
❖ Input supply
❖ Output supply
❖ Instances
❖ Elements
❖ If no_shift is specified
❖ If force_shift is specified
❖ applies_to
❖ Transitive
If the strategy is defined with -no_shift, removes two fields: location and rule, and keep other fields. Put –
no_shift within bracket after strategy name.
If specific options are specified, then print only those values.
Syntax
%vc_static_shell> report_level_shifter_strategy -help
Usage: report_level_shifter_strategy # Reports specific level shifter strategies
[-name] (Reports level shifter strategy name)
[-domain] (Reports power domain)
[-rule] (Reports rule type)
4.4.2.8.3 report_supply_set
Reports details of the supply set. By defaults, it prints the name, all the functions specified for this supply
set, and the reference ground.
If specific option is specified, then prints only relevant information.
Syntax
%vc_static_shell> report_supply_set -help
Usage: report_supply_set # Reports specific supply sets
[-power] (Reports power net)
[-ground] (Reports ground net)
[-name] (Reports supply set name)
[-pwell] (Reports pwell)
[-nwell] (Reports nwell)
[-deeppwell] (Reports deep pwell)
[-deepnwell] (Reports deep nwell)
[-reference_ground] (Reports reference ground)
[<supply_set>] (List of supply set name patterns or collections)
4.4.2.8.4 report_mv_library_cells
Reports power management cells used in the design.
Reports details of the supply port. By default, the following items are printed:
❖ Name
❖ Current scope
❖ Direction
❖ Connected supply net
❖ Supply state names
Syntax
%vc_static_shell> report_mv_library_cells -help
Usage: report_mv_library_cells # Reports all power management cells from the
libraries
[-level_shifters] (Reports all level shifters from the libraries)
[-isolation_cells] (Reports all isolation cells from the libraries)
[-retention_cells] (Reports all retention cells from the libraries)
[-switch_cells] (Reports all supply switch cells from the libraries)
[-always_on_cells] (Reports all always on cells from the libraries)
[-cell_name <db_cell_name>]
(Specifies cell name)
[-verbose] (Reports details)
Use Model
%vc_static_shell> report_mv_library_cells
Signal Pin Attributes:
lse - level shifter enable pin
isoe - isolation cell enable pin
scmr - standard cell main rail
Cell Attributes:
ao - always on
ls - level shifter
iso - isolation cell
switch_cg - switch
ret - retention
---------------------------------------------------
4.4.2.8.5 report_supply_net
Reports details of the supply net. By default, the following items are printed:
❖ Name
❖ Current scope
❖ Operating voltage
❖ Supply states
❖ Power domain
Syntax
%vc_static_shell> report_supply_net -help
Usage: report_supply_net # Reports specific supply nets
[<supply_net>] (List of supply net name patterns or collections)
Use Model
%vc_static_shell> report_supply_net
Supply Net : GENPP.default_isolation.ground
Current Scope :
Operating Voltage : -- Best Case -- -- Worst Case --
- U - - U -
Supply States : No supply states defined for the net
Power Domain :
-------------------------------------------------------
To Domain : TOP
Related Power Supply Net : top/VDD_CORE_1
Power Net Resolution Method : FROM_UPF_POWER_DOMAIN
Related Ground Supply Net : top/VSS
Ground Net Resolution Method : FROM_UPF_POWER_DOMAIN
Isolation Policy : INT_ISO_CORE_SINK_B
Is Heterogenous Fanout : true
❖ The following command returns different properties like direction, power/ground information of
the design pin.
%vc_static_shell> report_properties -pin ISO_TOP/B
The following is the sample output for this example:
Basic
Type : pin
Name : ISO_TOP/B
Direction : input
UPF
Related Power Pin : VDD
Related Ground Pin : VSS
Related Power Supply Net : top/VDD_SW_ISO
Power Net Resolution Method : FROM_UPF_CSN
Related Ground Supply Net : top/VSS
Ground Net Resolution Method : FROM_UPF_CSN
Power Domain : TOP
Is Heterogenous Fanout : false
❖ The following command returns the direction, power/ground information of the design net.
%vc_static_shell> report_properties -net wire1
The following is the sample output for this example:
Basic
Type : net
Name : wire1
UPF
Power Domain : TOP
In addition to the new natively-integrated debug capabilities, VC Static platform offers many improvements
to core features, performance, capacity, and stability.
By default, the enable_verdi_debug application variable is set to true. When this application variable is set
to true, VC Static uses Verdi for debug and Verdi uses the KDB generated by VCS to import the design
information for debugging. This reduces the complexity of dual compilation (Verdi Vericom/vhdlcom and
VC Static Simon), and improves the overall performance (CPU Time/Memory).
The following is the sample output after debug in Verdi is completed.
Command Line Message Output:
---------------------------------------------------------------------------
Info: Simon call complete
Info: Exiting after Simon Analysis
Info: Simon VCS Finished
Top Level Modules:
top
TimeScale is 1 ns / 1 ns
Verdi KDB elaboration done and the database successfully generated: 0 error(s), 0
warning(s)
The enable_verdi_debug variable must be set before any analyze, elaborate, read_file commands.
❖ In the RTL flow, when the enable_verdi_debug application variable is set to true, VCS is used to
generate the elaborated KDB.
❖ In the netlist flow, by default, the KDB generation and compilation happens in parallel, thus
improving the Verdi design import performance. If you set the following application variable to
false, parallel KDB generation and compilation is disabled and performance of the design import
might be affected.
%vc_static_shell> set_app_var enable_verdi_netlist_kdb false
To open the VC Static Native GUI, set the enable_verdi_debug application variable to false.
%vc_static_shell> set_app_var enable_verdi_debug false
After the VCS compiler job is done, the KDB is generated and you can load design in Verdi.
Or user can use Verdi toolbar icon to show module schematic for active scope in Instance tree, or use RMB
menu of Source view to show flattened schematic for selected signal in Source view. The Instance tree and
Source view are part of Verdi nTrace component.
Note
UPF Schematic is still based on Verdi's own database.
❖ You can hide and unhide unused module ports and pins as shown in Figure 4-28.
❖ You can view the partially visible nets whose connection is not complete in current view, and when
you double-click on the partial net, the net’s connectivity is expanded.
Turn-on or turn-off the display of the power state/mode table see section Power State/Mode
frame. Table Frame
View the Flatten Power Domain/Hierarchical Power Domain see section Power Domain Tree
tabs Frame
Turn-on or turn-off the display of the full power scope name in see section Full Scope Name
the Power Domain Tree, Power Mode Table, and Power State
Table frames
Open a Scope Lists form where scopes to report the power see section Report Impacted
impacted signals can be specified Signals by Scope
Open the Check Power Sequence form where the power rules See section Check Power
to be checked may be selected and the check results may be Sequence
reviewed
Open the List HDL Signals form where all HDL signals used in See section List HDL Signals
the CPF/UPF files are listed
View all the currently loaded power domains and the specify See section Highlight Power
colors for each power domain. Domain
View the Power Map frame displaying a schematic view of See section Power Map and Partial
power aware objects Power Map Frames
You can download the Verdi® and Siloti® Command Reference Guide from SolvnetPlus.
❖ If you click schematic of each node, then a new Verdi-nSchema window is opened.
❖ If you click Add to Schematic of each node, the current active flatten window is opened. The last
nSchema window you clicks on is the active window, the active window appears in the window
title. If there is no flatten window or the active one is not flatten window, then a new window
appears.
4.5.6.1 Adding a Locator from VC Static Activity View Menu Entry to nSchema Window
You can a add locator from VC Static Activity View menu entry to nSchema window in the following ways:
1. Click Add locator when the new schematic window is open as shown in Figure 4-33:
2. Add a locator using the Locate in Schematic option from the from VC Static Activity View menu
entry as shown in Figure 4-34
Verdi-nSchema always add a locator to the current active flatten window. If the current flatten
window does not contain the object or there is no any flatten window, then Verdi pops-up the
following message:
✦ Failed to find any available nSchema window, please open new schematic window for this object first.
✦ Failed to find any object in current active nSchema window, please open schematic window for this object
first.
3. You can add locator for any primitive instance/instance port in nSchema window for selected object
from the Schematic-> Add Locator… menu as shown in Figure 4-35 or from the RMB (Right Mouse
Button) menu Add Locator… as shown in Figure 4-36.
Note
This is enabled when you select a object in the current window. The menu opens the Add Locator Form
window, you can set the locator name in this form.
You can DnD (Drag and drop) the design object and power design object from this property
window to Verdi's other components for further debugging as shown in Figure 4-44.
Figure 4-44 . DnD (Drag and drop) the Power Strategy to Verdi-nPowerManager
In the following example, three buffers are connected back-to-back with different power supply and all the
three buffer reside in TOP domain. The first buffer is connected with TOP domain power supply
(VDD_TOP), the second buffer is powered by PD1 power supply (VDD_CORE1) and third buffer is
powered by PD2 (VDD_CORE_2).
Design File Snippet:
//top module
MY_BUF buf_top (.A(in1), .Z(w1), .VDD(VDD1), .VSS(VSS) );
core1 CORE1 ( .clk(clk), .reset(reset), .in1(w1), .out1(w2), .VDD1(VDD1), .VSS(VSS) );
core3 CORE3 ( .in1(w2), .in2(in2), .out3(out), .VDD1(VDD1), .VDD3(VDD3), .VSS(VSS) );
Figure 4-47 shows the schematic where cells are colorized by Root Supply:
Perform the following in the Verdi GUI mode to colorize cells by root supply:
1. In the Verdi GUI, click Tools > Preferences.
2. In the left box, select to the Power Aware > Color/View option.
3. Select Power Net, and in the Highlight Options box, select Root Supply from the Highlight by
drop-down menu.
4. Click Apply.
By default, Highlight by Power Domain is selected.
❖ You can also copy the full path of the object in Verdi style or DC style, using the RMB menu options
in the nSchema window, nTrace context menu on hier. tree, and the source code viewer.
✦ Copy as Verdi Style Full Path
✦ Copy as DC Style Full Path
❖ You can also copy the full path of the object in Verdi style or DC style, from the nTrace context menu
on Hierarchy tree, and the source code viewer.
✦ Copy as Verdi Style Full Path
❖ When you drag nSchema and nTrace in the Drop Text box, the DND_VCST_STRING string is
wrapped in the Drop Text box.
Note
Always use “.” as gen-blk delimiter, since this name is used to DnD to Verdi and other components. If it is
changed while drawing, there will be performance overhead.
❖ If you have changed the name of an object in VC Static using the change_name command, the
nSchema shows the updated name. This is supported only in the Find in Current Scope… form. The
content listed in the Find in Current Scope… form shows the changed name, and you can type the
changed name into the Find box to search.
Note
This is not currently supported in the Find Signal/Instance/Instport… form.
checks, viewing, debugging the violations, and finally categorizing the violations. It is also the primary
springboard for linking to the other debug views like the source, UPF and schematic viewer.
The view is organized much like a modern web application with a tight focused context-specific activity
flow. The view is divided into two or three panes with the left most pane showing the current activity which
drives the other panes.
The upper pane as shown in Figure 4-48, if present, is a table view pane used to show results or to allow
data entry depending on the current selected activity.
Information, instructions/help along with debug links are presented in the Info pane shown at lower right
in Figure 4-48. Again, the contents are sensitive to the current selected activity.
The top left of the view provides the Activity Path control which allows you to step forward and backward
in the history of selected activities. An absolute path is also given to directly jump to one of the ancestor
activities.
This can also be achieved by clicking on the i icon in the lower left of the status bar.
Syntax
%vc_static_shell> view_actvity -help
Usage: view_activity # Show the Activity 'Hybrid' View
[-vid <id>] (show given verification result message ID.)
If there are no existing waiver files, the pop-up menu appears as shown in the following screen.
The popup appears as follows when waiver files are already present, and one of them is selected as
'default'.
As displayed, the popup menu shows the 'tick mark' corresponding to the current selected default
waiver file. To change the default waiver file, select Menu > Set Default Waiver File and select on
another file name. The 'tick mark' is updated to the selected file, and the setting is applied.
2. If no waiver files are present, click the Add waiver file option to add waiver file.
The Enter/Choose a Waiver File Name dialog box appears.
You can choose an existing waiver file from the list of available wavier files. If you want to create a
new file, type a new name (Ex: my_file1.tcl) in the 'File name' box.
The Set this as Default Waiver File and Include selected Waiver File content options are selected
by default.
✦ The Set this as Default Waiver File option sets the selected file as default waiver file.
✦ The Include selected Waiver File content option includes the pre-existing content of the selected
waiver file, and processes the commands. When you unselect this option, the content of the file is
erased, and re-written with the new waivers added to that file.
Note
Unselecting both above check boxes will serve no purpose, and it ignores the selected file. You should
have unchecked the Include selected waiver file content option when adding empty file or creating a
new file.
The Enter/Choose a Waiver File Name dialog box appears. See Step 2 for more details.
4.5.9.5.3 Setting Waiver Files and Default Waiver File using Tcl Commands
Use the manage_waiver_file command to manage file based waivers. This command enables you to add
waiver files while performing VC LP runs.
Syntax
%vc_static_shell> manage_waiver_file -help
Usage: manage_waiver_file # Read waivers from a file
-add (Add waiver file)
<file_name> (Waiver file name)
Note
An error is issued if the file does not exist or is not readable.
You must set the default_waiver_file application variable to set a file as the default waiver file.
Example
Adding the following commands in the Tcl script adds three files, and sets new1.tcl as default waiver file.
manage_waiver_file -add waiver2.tcl
manage_waiver_file -add waiver4.tcl
manage_waiver_file -add new1.tcl
set_app_var default_waiver_file new1.tcl
You must select the default waiver file name from the Waiver File list to change the current set default
waiver file name. If any file is not selected from the Waiver File, then waiver is added to the waiver file set
as the default waiver file, however, you can click the drop-down list, and can set it to a different listed file.
The Waiver File list also shows Add waiver file option, which can be used to set additional file directly
without going to the main menu.
The following messages are reported if you have not setup any waiver file, and try to add waivers in the UI
❖ If you are using one click waiver (Waive this Item), the following error pops up to set the default
waiver file.
❖ If you are using the two-click waiver creation (example, 'Create a waiver'), or when you create a
filter and then generate a waiver based on that filter, the waiver setup page comes up without any
waiver files in corresponding 'Waiver File' drop-down list. If you continue to create waiver by
selecting the ADD Waiver link, the error message as shown in the following figure appears.
Note
When you add the waiver file using above methods except unselecting "Include selected Waiver File
content", the waivers contained in the file are added to the database with the file name details.
The waiver file management is applied only to waivers added, changed, or deleted in the view_activity
GUI. The save and restore flow works with no requirement to repeat any commands.
Limitations:
❖ The opened message count on GUI is not reduced, when you use the manage_waiver_file Tcl
command.
When you click the Edit this Waiver option, the regular waiver creation screen (where user can select fields)
appears as shown in the following figure.
The fields are populated from the existing waiver file. The non-existing fields in the selected waiver will be
disabled, and have "*" as the Match value. You can specify Match value to waive particular message sets.
After editing, you can click ADD Waiver option, the existing waiver file is overwritten. The Waiver file is
also populated from the existing waiver.
Specify the tag and field names, and use the -enable or -disable options to enable or disable tags.
configure_waiver_filter_field -tag ISO_INST_MISSING -field {Source:PinName} -enable
All the fields must include subfields till leaf level as below:
configure_waiver_filter_field -tag ISO_INST_MISSING -field
{SourceInfo:PowerNet:NetName} -enable
configure_waiver_filter_field -tag ISO_INST_MISSING -field
{SourceInfo:PowerNet:NetName} -enable
configure_waiver_filter_field -tag ISO_INST_MISSING -field {SinkInfo:GroundNet:NetName}
-disable
configure_waiver_filter_field -tag PG_SUPPLY_NOPORT -field {SupplyPort:PortName} -
enable
You can only see the enabled fields for each tag in waiver window.
❖ Continue clicking or press Enter to search the result in another line. Click to go back to the
previously searched result.
Note
If the plus character (+) is the prefix of a string, the string following the + character with the whole pattern is
recognized as a key word of the inclusion string.
❖ To get the historical typed-in commands, use the up "↑" and down "↓" keys in the command entry.
For more details on how to use the Verdi Smart Log, see section Smart Log Tutorial in the Verdi® User Guide
and Tutorial.
5
Handling Special LP Scenarios
❖ Clock Enable
The control signals fall into the following broad categories:
❖ Explicitly user specified
❖ Auto inferred
5.1.1.1 Specifying the List of Global Signals on Which Signal Corruption Checks must be
Performed
❖ Explicitly User Specified Roots
You explicitly specify the root of the design on which signal corruption checks must be performed
using the create_source command.
Syntax
vc_static_shell> create_source -help
Usage: create_source # create sources
-type <str> (source type:
Values: clock, clock_enable,
finegrain_switch_enable, iso_enable,
power_switch_enable, reset, restore,
save, scan_enable, scan_enable_enable,
sdc_clock)
-signal <list> (signal list)
Use Model
Creating a top module input as a clock type root.
[-multiply_by <multiply_factor>]
(Specifies frequency multiplication factor
(integer))
[-duty_cycle <high_pulse_percentage>]
(Specifies duty cycle (of high pulse width), if
frequency multiplication is used)
[-edges <edge_list>] (Specifies a list of positive integers that
represents the edges from the source clock that are to form the edges of the
generated clock)
[-edge_shift <edge_shift_list>]
(Specifies a list of floating-point numbers
that represents the amount of shift, in library time units, that the specified
edges are to undergo to yield the final generated clock waveform)
[-invert] (Inverts the generated clock signal)
[-preinvert] (Creates a generated clock based on the
inverted clock signal)
[-add] (Add new options to the original clock)
[-combinational] (Combinational signal)
[-comment <string>] (Specifies comment)
[-pll_output <output_pin>]
(Specifies the output pin of the PLL which
is connected to the feedback pin)
[-pll_feedback <feedback_pin>]
(Specifies the feedback pain of the PLL)
[-master_clock <clock_name>]
(Specifies master clock)
collection_of_objects (Collection of objects)
If you have an SDC (industry standard Synopsys design constraints file) for the design, the same can
be supplied to VC LP using the read_sdc command:
%vc_static_shell> read_sdc
From the SDC file, VC LP reads only the following commands. The rest of all SDC file is just parsed
and ignored.
%vc_static_shell> create_clock
%vc_static_shell>create_generated_clock
%vc_static_shell> set_false_path
%vc_static_shell> set_clock_uncertainty
%vc_static_shell> create_clock_group
Note
If the read_sdc file has complex Tcl query commands ( get_cells) used in create_clock and so on, it
slows down the tool’s performance.
❖ Automatically Infer Global Signals
VC LP automatically infers certain types of signal sources. It automatically infers sources for low
power control signals, including isolation enable signal, power switch enable signal, and retention
register control signals. In addition, you may perform guided inference of clock, reset, clock enable
and scan enable signals.
To perform auto inference, use the infer_source command.
The infer_source command extracts the roots and dumps them into multiple Tcl files consisting of
the create_source commands in vcst_rtdb/reports directory. You can then have the flexibility of
editing and sourcing the file.
Note
This support is limited to macro cells which qualifies as an buffer or inverter.
By default, the macro_bufinv_as_stdcells application variable is set to false.
❖ You can infer sources in a multi-threaded mode for all the types of signals (clock, clock_enable,
finegrain_switch_enable, iso_enable, power_switch_enable, reset, restore, save,
scan_enable, scan_enable_enable, sdc_clock).
Use the infer_source -j <num_thread> option to infer sources parallel.
Example
infer_source -j 8
In the multi-threaded mode, the performance in terms of the run time is improved as compared to
the serial run.
Note
You must set the lp_enable_constant_propagation application variable to true in serial flow to
match the QOR.
Note
A rerun of the infer_source command with the same type overwrites existing files.
output_port ZN
This indicates that when tracing clocks, a temporary timing arc must be used to trace between the indicated
input and output ports of the module. In case the library has macros or other complex cells with no function
definition, this command can be used to bridge the gap when inferring sources.
Note
The tracing constraints specified for the signal type switch_enable are applied for power_switch_enable as
well as finegrain_switch_enable.
Use the create_trace_constraint command for the following cases:
1. Applying constraint on module.
create_trace_constraint -trace_through \
signal_type clock -module BBOX -input_port I \
output_port ZN
In this case, constraint is applied in all the black box module instances.
2. Applying constraint on specific instance.
create_trace_constraint -trace_through \
signal_type clock -instance BBOX_inst -input_port I \
output_port ZN
In this case, the constraint is applied only to the BBOX_inst instance.
3. To halt tracing
create_trace_constraint –halt_at \
signal_type clock -module BBOX -input_port I
In this case, back-tracing stops at I, input of a black box module.
Note
The annotate_iso_in_corr_control_state application variable support is a custom feature
available with beta support.
✦ CORR_CONTROL_STATE_WITHISO
The signal passes through corrupting objects, but also passes through an isolation cell which
guards the corrupting objects.
✦ CORR_CONTROL_STATE_NOISO
The signal passes through corrupting objects, but there is no isolation cell to guard the
corrupting objects.
Note
It is recommend to always use the check_lp -stage design -j <num-threads> command with -
family signalcorruption.
Note
You must set the lp_enable_constant_propagation application variable to true in serial
flow to match the QOR.
-------
Total number of roots : 2799
Total number of pins : 9031671
Total number of pins covered: 9031671
Here,
❖ The total number of roots indicate the total number of roots created using either user specification or
automatic inferring.
❖ Total number of pins indicate the number of design cells that have this type of attributes on a pin.
❖ Total number of pins covered indicate the number of pins covered by the roots created.
The following is an example output of the parsing messages indicating the progress that the check is
ongoing, not hanging.
check_lp -stage design
[Info] SIG_CORR_CHECK_RUN: Running Signal corruption checks for '4' 'Clock' roots ...
Doing signal corruption check for 4 clock roots...
Doing signal corruption check for clock "Root:TST_tclk"..
clock reached / path traced = 428/448
Doing signal corruption check for clock "Root:cg_gbl_sclk"..
clock reached / path traced = 39/500
clock reached / path traced = 39/1000
clock reached / path traced = 39/1500
clock reached / path traced = 39/2000
clock reached / path traced = 39/2500
clock reached / path traced = 39/3000
clock reached / path traced = 39/3500
clock reached / path traced = 39/4000
clock reached / path traced = 39/4500
clock reached / path traced = 39/5000
clock reached / path traced = 39/5500
clock reached / path traced = 39/6000
clock reached / path traced = 189/6500
clock reached / path traced = 689/7000
clock reached / path traced = 1189/7500
clock reached / path traced = 1689/8000
clock reached / path traced = 1751/8126
In liberty, extra supply pins are defined with pg_type : [pn]well. Each normal supply pin is annotated with
related_bias_pin.
For example:
cell (AND2) {
pg_pin (VDD) {
pg_type : primary_power;
related_bias_pin : "VNW";
}
pg_pin (VNW) {
pg_type : nwell;
}
pg_pin (VSS) {
pg_type : primary_ground;
related_bias_pin : "VPW";
}
pg_pin (VPW) {
pg_type : pwell;
}
}
you to describe the same using the set_back_bias command. The set_back_bias specification is defined
on a per-domain basis. It describes how bias pins are expected to be connected in the PG netlist. The
set_back_bias commands can also be used to define domain level bias specification.
Syntax
%vc_static_shell> set_back_bias -help
Usage: set_back_bias # Sets back bias nets for a Power Domain
-domain <domain> (Specify the domain to which the bias net should get
associated)
-type <type> (Specify the pg type of the bias pin to which the supply
net will get associated: nwell or pwell:
Values: nwell, pwell)
-net <net list> (specify the supply net defined in UPF that connect to
bias pg pin)
Use Model 1:
set_back_bias -domain TOP -type pwell -net VPW
set_back_bias -domain TOP -type nwell -net VNW
The above example means that for any cell in the power domain TOP, any pin with 'pwell' description
should be connected to the supply Net VPW at the design top level and any pin with 'nwell' description
should be connected to the supply Net VNW at the design top level.
Use Model 2:
The following is an example of the set_back_bias command used for the hierarchical domains.
set_back_bias -domain CORE1/PD1 -type pwell -net CORE1/VPW
set_back_bias -domain CORE1/PD1 -type nwell -net CORE1/VNW
The above example means that for any cell in the hierarchical power domain CORE1/PD1, any pin with
'pwell' description should be connected to the supply Net CORE1/VNW at the design level and any pin
with 'nwell' description should be connected to the supply Net CORE1/VNW at the design level.
Use Model 3:
The following is an example of the set_back_bias command used for multiple supply nets.
set_back_bias -domain TOP -type pwell -net “VPW VPW_BACK”
set_back_bias -domain TOP -type nwell -net “VNW VNW_BACK”
The above example means that for any cell in the power domain TOP, any pin with 'pwell' description
should be connected to the supply Net VPW or VPW_BACK at the design top level and any pin with 'nwell'
description should be connected to the supply Net VNW or VNW_BACK at the design top level.
The connect_supply_net command can also be used to define cell/instance level bias specification.
This violation is flagged when the primary_power or primary_ground supply of the domain is ON,
but the related bias pins supply of the domain is OFF in a given PST state.
Example
In the following example, the primary_power VDD works at 1.2V and related_bias_pin VNW is
OFF. The primary_ground VSS works at 0.0V and related_bias_pin VPW is OFF.
create_supply_set SS_TOP –function {power VDD} –function {ground VSS} –function {nwell
VNW} –function {pwell VPW}
create_power_domain TOP –supply {primary SS_TOP}
create_psttop_pst –supplies {VDD VSS VNW VPW}
add_pst_state s1 –pst top_pst –state {VDD_12 VSS_00 VNW_OFF VPW_00}
add_pst_state s2 –pst top_pst –state {VDD_12 VSS_00 VNW_12 VPW_OFF}
❖ PST_BIAS_INSUFFICIENT (error): Bias net [UPFSupply] voltage insufficient relative to supply net
for domain [Domain]
This violation is flagged when related_bias_pin supply voltage of the domain is insufficient
compared to the primary_power or primary_ground supply voltage of the domain in given PST
state.
Example
In the following example, the primary_power VDD works at 1.2V and related_bias_pin VNW
works at 1.1V. The primary_ground VSS works at 0.0V and related_bias_pin VPW works at 0.1V.
create_supply_set SS_TOP –function {power VDD} –function {ground VSS}
create_power_domain TOP –supply {primary SS_TOP}
connect_supply_net VNW –ports ff_i1/VNW
connect_supply_netVPW –ports ff_i1/VPW
create_psttop_pst –supplies {VDD VSS VNW VPW}
add_pst_state s1 –pst top_pst –state {VDD_12 VSS_00 VNW_11 VPW_00}
add_pst_state s2 –pst top_pst –state {VDD_12 VSS_00 VNW_12 VPW_01}
❖ PST_BIASON_STATE (warning): Supply net off, but bias net [UPFSupply] on for domain [Domain]
This violation is flagged when primary_power or primary_ground supply of the domain is OFF but
the related bias pins supply of the domain is ON in given PST state.
Example
In the following example, the primary_power VDD is OFF and related_bias_pin VNW works at
1.2V. The primary_ground VSS is OFF and related_bias_pin VPW works at 0.0V.
create_supply_set SS_TOP –function {power VDD} –function {ground VSS} –function {nwell
VNW} –function {pwell VPW}
create_power_domain TOP –supply {primary SS_TOP}
create_psttop_pst –supplies {VDD VSS VNW VPW}
add_pst_state s1 –pst top_pst –state {VDD_OFF VSS_00 VNW_12 VPW_00}
add_pst_state s2 –pst top_pst –state {VDD_12 VSS_OFF VNW_12 VPW_00}
❖ PST_BIAS_EXCESS (warning): Bias net [UPFSupply] voltage excess relative to supply net for
domain [Domain]
This violation is flagged when related_bias_pin supply voltage of the domain exceeds compared
to the primary_power or primary_ground supply voltage of the domain in given PST state.
Example
In the following example, the primary_power VDD works at 1.2V and related_bias_pin VNW
works at 1.3V. The primary_ground VSS works at 0.1V and related_bias_pin VPW works at 0.0V.
create_supply_set SS_TOP –function {power VDD} –function {ground VSS}
And the following is the corresponding design file snippet, where the cell has both the nwell pins
defined for the same PG pin:
AOB_CELL aob_i1 (.VDD(VDD),.VSS(VSS),.VNW(VNW1),.VNW1(VNW1),.VPW(VPW),.VPW1(VPW));
❖ PG_BIAS_SHORT (error): Bias net DesignNet shorted by non-insulated pin CellPin on Instance
(Cell)
In a standard cell design, the wells connect by abutment. If the bias pin for a cell is insulated, then its
well does not connect by abutment. However, if an uninsulated bias pin is connected to a different
supply, this creates a short between the supply and the main bias supply through the well abutment.
This violation indicates that the bias pin is not insulated, and it causes a short from its connected
supply to the main bias supply of the domain. This cause the design to function improperly, or not
function at all.
Example:
In the following liberty snippet the same net is connected to VDD1 and VDD2.
set_domain_supply_net PD1 -primary_power_net VDD1 -primary_ground_net VSS
set_back_bias -domain PD1 -type nwell -net VDD1
connect_supply_net VDD2 -ports {u1/VNW}
❖ PG_BIAS_NOSTATE (error): Supply is used in a discovered bias pair, but has no portstates
This violation is flagged when supply nets discovered as bias pairs from the PG design does not
have any port states defined in the UPF. All further Bias checks cannot happen without port states.
In some PG designs, there may be a large number of instances with a particular discovered bias pair;
each such instance will be flagged.
This violation is disabled by default. You can enable it using the configure_tag -app LP -tag
PST_BIAS_NOSTATE -enable command.
Example
Consider the following design:
module core1 (clk, in1, out1, VDD1, VSS, VNW);
input clk, in1, out1, VDD1, VSS, VNW;
output out1;
endmodule
❖ PG_BIASOFF_STATE (error): Bias net [DesignNet] off, but supply net [UPFSupply] on for instance
[Instance]
This violation is flagged when primary_power or primary_ground supply of the instance is ON but
the related bias pins supply of the instance is OFF in given PST state.
Example
In the following example, the primary_power VDD works at 1.2V and related_bias_pin VNW is
OFF. The primary_ground VSS works at 0.0V and related_bias_pin VPW is OFF.
create_supply_set SS_TOP –function {power VDD} –function {ground VSS} –function {nwell
VNW} –function {pwell VPW}
create_power_domain TOP –supply {primary SS_TOP}
create_psttop_pst –supplies {VDD VSS VNW VPW}
add_pst_state s1 –pst top_pst –state {VDD_12 VSS_00 VNW_OFF VPW_00}
add_pst_state s2 –pst top_pst –state {VDD_12 VSS_00 VNW_12 VPW_OFF}
The default behavior of PG_BIASOFF_STATE for protection cells (ISO/LS/ELS) is that VC LP
checks the supply states for RPP/RGP of output pin and its related bias pin. It does not consider the
supply for input pin.
When lp_protection_input_bias is set true, for protection cells, VC LP checks the supply states
for RPP/RGP of input pin and its related bias pin. If input supply is ON and bias supply is OFF,
PG_BIASOFF_STATE is reported.
❖ PG_BIAS_INSUFFICIENT (error): Discovered bias net [DesignNet] voltage insufficient relative to
supply [UPFSupply] for instance [Instance]
This violation is flagged when related_bias_pin supply voltage of the instance is insufficient
compared to the primary_power or primary_ground supply voltage of the instance in given PST
state.
Example
In the following example, the primary_power VDD works at 1.2V and related_bias_pin VNW works
at 1.1V. The primary_ground VSS works at 0.0V and related_bias_pin VPW works at 0.1V.
create_supply_set SS_TOP –function {power VDD} –function {ground VSS}
create_power_domain TOP –supply {primary SS_TOP}
connect_supply_net VNW –ports ff_i1/VNW
pg_type : primary_power
related_bias_pin : "VNW";
}
pg_pin(VSS) {
voltage_name : VSS;
pg_type : primary_ground;
related_bias_pin : "VPW";
}
pg_pin(VPW) {
voltage_name : VSS;
pg_type : pwell;
physical_connection : device_layer;
tied_to : VSS
}
pg_pin(VNW) {
voltage_name : VDD;
pg_type : nwell;
physical_connection : device_layer;
tied_to : VDD
}
Figure 5-6 shows an example LibCell Diagram in which the bias pin (VNW ) is internally physically
tied to power supply (VDD).
Standard_cell.lib
In following example domain primary bias net is overridden by create_supply_net.
cell (cellA) {
pg_pin(VNW) {
pg_ype : nwell;
….
}
pg_pin(VPW) {
pg_type : pwell;
….
} …
}
create_supply_set SS_PD1 -function {power VDD1} -function {ground VSS} -function {nwell
VDD1} -function {pwell VSS1}
create_power_domain PD1 -supply {primary SS_PD1}
connect_supply_net VDDN -ports {CORE1/cellA/VNW}
connect_supply_net VSSP -ports {CORE1/cellA/VPW}
❖ UPF_PORT_PSWOUT:
The UPF_PORT_PSWOUT is reported in scenarios where explicitly created UPF supply port with
direction in is connected to the output supply of the power switch strategy on the same scope using
connect_supply_net.
This is a UPF stage tag disabled by default.
Tag : UPF_PORT_PSWOUT
Description : Direction of supply port [SupplyPort] connected to power switch [Strategy]
output supply [UPFSupply] in the same UPF scope is not out
Violation : LP:2
SupplyPort
PortName : VDD2
PortType : UPF
Strategy : PSW_PD1
UPFSupply : PSW_PD1/VOUT
5.1.2.6 PG Checking
The command check_lp -stage pg checks all the PG connections including bias connections. If the
domain has bias nets defined in UPF, check that the instances in the domain have the correct connections. If
the instances have bias pins but there is no bias net defined in the UPF, the check will assume some implicit
connections. The nwell connection should go to the primary power net for the domain, and the pwell
connection should go to the primary ground net for the domain. The PG_DOMAIN_CONN check is applied
using the nets mentioned above. The standard checks for PG_PIN_UNCONN, PG_PIN_TIED,
PG_CSN_CONN are applied to bias pins on all cell types. The PinType field in the message shows pwell or
nwell.
When the design has a large number of incorrect PG connections, then VC LP reports existing violation
PG_DOMAIN_SETUP and skips other checks. In such cases, if you want to ignore this message, and force
VC LP to perform checks, then set the enable_pg_setup_stop application variable to true.
When the design has large number of incorrect PG connections, then VC LP reports existing violation
PG_DOMAIN_SETUP and skips other checks. In such cases, if you want to ignore this message, and force
VC LP to perform checks, -force should be set with check_lp command. If you disable
PG_DOMAIN_SETUP, then -force is not required in check_lp command to perform checks.
Similarly, for PG_BBOX_SETUP violation, if you disable PG_BBOX_SETUP, then -force is not required in
the check_lp command to perform VC LP checks.
5.1.2.7 Limitation
VC LP reports violations only for the PG pins where the related_bias_pins are defined. VC LP does not
report violations for logic pins where related_bias_pin is defined.
Note
The Macro/PAD cells are not considered for self bias checks.
❖ If a list of pins is specified using the upf_selfbiascellpin_list application variable, then self bias
checks are performed for the specified pins only. However, in this list, you can specify backup
power/ground pins as well. The self bias checks are then performed on those backup
power/ground pins. The cell pins must be specified in <lib_name> / <cell_name> / <pin_name>
format.
Example
set_app_var upf_selfbiascellpin_list {bias/INV_SELF/VDD bias/INV_SELF/VSS}
Where:
✦ bias is the name of library
✦ INV_SELF is the name of cell
To perform analog checks, use the -analog switch in the check_lp -stage design command.
If this switch is specified, analog checks are performed on the design. Analog checks are run by default if the
check* commands are run without any switches. When the -analog switch is specified in the check_lp -
stage design command, the following features are enabled:
❖ Analog net check (reports ANALOG_NET_INCORRECT violation)
✦ For all nets in design
✦ Checks if all the DB cell pins are connected to the net.
✦ If any pin is marked as is_analog, then the net is marked analog net.
✦ If an analog net is mapped with a digital net, VC LP reports the ANALOG_NET_INCORRECT
violation.
✦ For the example scenario as shown in Figure 5-8, multiple digital pins are connected to a single
analog pin (is_analog true ). By default, VC LP reports two ANALOG_NET_INCORRECT for
this case. When the compress_analog_incorrect_violations application variable is set to
true, VC LP reports only one ANALOG_NET_INCORRECT violation for such cases with
SuppressCount 1 debug field.
The compress_analog_incorrect_violations application variable is enhanced to compress
ANALOG_NET_INCORRECT violation based on digital pins as well. The
compress_analog_incorrect_violations application variable can take the following options:
✧ analog: Compress based on analog pins. Report one violation per analog pin.
✧ digital: Compress based on digital pins. Report one violation per digital pin.
✧ true: same as analog, for backward compatibility.
✧ false (default): no compression
The compression considers the ReasonCode debug field for compression. One violation is kept
uncompressed for each analog pin for each reason code.
In the following example, the source power net (VDD1) is OFF, while the sink power net (VDD2)
is ON, and both the source and sink has the is_analog:true attribute.
Consider the following crossover:
CORE1/and_i1/Z (VDD1, VSS1) --> CORE2/ff_i1/D (VDD2, VSS2)
UPF Snippet
add_port_state VDD1 -state {VDD_10 1.0} -state {VDD_12 1.2} -state {VDD_OFF
off}
add_port_state VDD2 -state {VDD_10 1.0} -state {VDD_12 1.2} -state {VDD_OFF
off}
add_port_state VSS -state {VSS_00 0.0} -state {VSS_OFF off}
add_port_state VSS1 -state {VSS_00 0.0} -state {VSS_OFF off}
add_port_state VSS2 -state {VSS_00 0.0} -state {VSS_OFF off}
create_pst top_pst -supplies { VDD1 VDD2 VSS VSS1 VSS2}
add_pst_state s0 -pst top_pst -state { VDD_12 VDD_12 VSS_00 VSS_00
VSS_00}
add_pst_state s2 -pst top_pst -state { VDD_OFF VDD_10 VSS_00 VSS_00
VSS_00}
The following is the violation snippet reported:
Tag : ANALOG_STATE_UNSAFE
Description : Analog driver pin [AnalogPin] is off when analog
receiver pin [CellPin] is on for states [States]
Violation : LP:1
AnalogPin : CORE1/and_i1/Z
CellPin : CORE2/ff_i1/D
States
State : top_pst/s2
SourceInfo
PowerNet
NetName : VDD1
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS1
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
SinkInfo
PowerNet
NetName : VDD2
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS2
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
✦ ANALOG_VOLTAGE_UNSAFE
The ANALOG_VOLTAGE_UNSAFE violation is reported if there is a PST state where the source
and sink are working on different supply voltages in an analog to analog crossover.
Example
In the following example, the source power net (VDD1) is working on 1.2V, while sink power net
(VDD2) is working on 1.0V, both the source and sink has the is_analog:true attribute.
Consider the following crossover:
❖ When this application variable is set to pst, VC LP performs crossover related checks for analog
crossovers and reports violations as follows:
✦ If an ISO strategy is present on the ANALOG crossover, VC LP reports the
ISO_STRATEGY_ANALOG violation.
This violation is reported at the check_lp -stage UPF stage with severity error. This violation is
enabled by default.
✦ If an LS strategy is present on the ANALOG crossover, then VC LP reports the
LS_STRATEGY_ANALOG violation.
This violation is reported at the check_lp -stage UPF stage with severity warning. This
violation is enabled by default.
Case 3: Domain’s Primary and CELL’s SCMR pin are connected electrically, but not hierarchically
VC LP issues the DESIGN_PIN_SCMR violation with debug field ReasonCode:
ELECTRIC_CONN_HIER_UNCONN for the following scenario.
As shown in Figure 5-12, the Supply net BOT/VVDD does not drive any cell within BOT directly. It
indirectly drives BOT/CELL/VDD pg pin (SCMR). Here the domain’s Primary and CELL’s SCMR pin are
connected electrically, but not hierarchically The DESIGN_PIN_SCMR check can be enabled for this
scenario using the enable_contained_scmr_flow application variable.
%vc_static_shell> set_app_var enable_contained_scmr_flow true
By default, this application variable is set to false.
Figure 5-12 Domain’s Primary and CELL’s SCMR pin are connected
In addition, VC LP performs UPF consistency checks between RPP+CSN and SRSN supplies for a given lib
pin
❖ If SRSN is defined on the output pin of a lib cell, then related power supply should be more on than
SRSN. If this rule is violated then the consistency check issues the error UPF_LEAFSRSN_STATE.
❖ If SRSN is defined on input pin of a lib cell, then SRSN should be more on than the related power
supply. If this rule is violated then consistency check issues the error UPF_LEAFSRSN_STATE.
❖ If SRSN is specified on an inout pin of lib cell, the pin is considered to be both an input and output
pin one at a time and hence both of above consistency checks are performed.
❖ If there is a voltage level mismatch between SRSN supply and related power supply then
consistency check issues the error UPF_LEAFSRSN_VOLTAGE.
Advanced rail order checks extends the rail order checks to buffers and inverters. Advanced rail order
checks are electrical checks caused by incorrect supply connectivity for all the cells that are introduced
during low power implementation, that is, for buffers, inverters, LS, ISO, ELS cells on a crossover path.
Typically these cells are not present at the RTL stage and are introduced by implementation tools during
synthesis. So, for example, if a wrong choice of buffer supply connectivity results in an electrical violation,
VC LP reports is as buffer rail order violation (ISO_* checks).
There are four types of advanced rail order checks based on their electrical and functional impact. This
classification is based on the 'type of cell' whose supply connection has caused electrical and/or functional
issues. The classification helps uses in debug and root causing design issues.
❖ ISO_*_STATE (electrically correct, functionally incorrect (data lost))
When you set enable_enhanced_pivot_flow application variable to true, VC LP computes the pivot ISO
cell in the following way.
1. Start from logic sink, VC LP starts traversing backwards on the crossover path towards the logic
source.
2. When a pivot ISO gate is not found:
a. Find the first gate which can go OFF when sink is ON, and this is reported as the corrupter gate.
✧ In Figure 5-15, it is Logic Src.
✧ If none found, then there is no pivot ISO cell.
b. Find the first ISO cell right of the corrupter gate (towards the sink).
✧ If the ISO cell is found, VC LP denotes that as the pivot ISO cell (in Figure 5-15, it is ISO cell 1)
Note: An ISO cell can be corrupter gate as well, based on isolation supply.
c. If no such ISO cell found, then go to step 2, and traverse further towards Logic Source.
For the pivot ISO strategy, VC LP performs a similar computation, but VC LP finds the ISO strategy instead
of the ISO cell. While computing pivot ISO strategy, the ISO supply of other strategies must be considered
as corrupter. For example, in Figure 5-15, if the Strategy 1 supply can go OFF when the sink is ON, then
Strategy 2 becomes pivot strategy.
To avoid this, use the following command after the design and UPF are read but you must do it before
performing the checks.
Syntax
%vc_static_shell> set_clone -help
Usage: set_clone # specify cloned ports/pins with respect to original control signal
defined in upf
-upf <str> (upf signal name)
-instance <str> (instance (db or hdl) name)
[-port <str>] (port name of cloned ports)
[-pin <str>] (pin names of cloned instances)
Examples:
set_clone –upf <isoEnSignal> -instance ff -pin Q|-port A1
For the example scenario illustrated in Figure 5-16, you must add the following:
For clone ports CtrlGen/A1, CtrlGen/A3 and CtrlGen/A3 or clone pins Ctrlgen/Flop_A21/Q, Ctrlgen/Flop_A22/Q
and Ctrlgen/Flop_A23/Q
Before you clone the ports, you must read the design. Once the design is read, use the set_clone command.
After the cloning is done, you can perform UPF and design related checks using the check_lp -stage upf
and check_lp -stage design commands.
The following is the syntax for reading the design:
read_file -format verilog -top top -netlist "<testcase.v>" -verilog
read_upf <tetscase.upf>
Note
Signal corruption checks happen between cloned signals (CtrlGen/A1 CtrlGen/A2 CtrlGen/A3) and
isolation cells enable pin.
To find out the original root, trace constraints for Flop_A1 must be considered as the actual driver for
enables:
create_trace_constraint –trace_through –instance Ctrlgen/Flop_A21 \
-input_port D –output_port Q –signal_type iso_enable
create_trace_constraint –trace_through –instance Ctrlgen/Flop_A21 \
-input_port D –output_port Q –signal_type iso_enable
create_trace_constraint –trace_through –instance Ctrlgen/Flop_A23 \
-input_port D –output_port Q –signal_type iso_enable
Note
For backward compatibility, true (equivalent to option both)/false values are also valid options. If any other
option is provided the following error message on console will come: OPTION_NOT_VALID
If the handle_hanging_crossover variables is set to be both/true:
❖ VC LP computes the reduced logic source or reduced logic sink for the hanging nets.
✦ Any path based isolation policy that is beyond these newly computed logic source/sink gets
applied according to the following rules:
✧ If the isolation strategy has –sink and is placed beyond the reduced logic sink, it will be
dropped.
✧ If the isolation strategy has –source and is placed beyond the reduced logic source, it will be
dropped.
✧ If the isolation strategy has –diff_supply_only and is placed beyond the reduced logic
source/sink to which it has to compare the supply difference, the strategy will be dropped.
✦ VC LP checks the applicability of any other isolation strategies with respect to the newly
computed reduced logic source/sink.
A reduced logic source/sink of a hanging logic source/sink is the closest logic (buffer/inverter) from the
hanging logic source/sink as shown in Figure 5-17 and Figure 5-18.
Without handle_hanging_crossover
variable With handle_hanging_crossover variable
Figure 5-20 Isolation strategy and Isolation cell present on hanging path
Table 5-2 Isolation strategy and Isolation cell present on hanging path
Without handle_hanging_crossover
variable With handle_hanging_crossover variable
In this case, the logic source (output of the glue logic present in the PD1 domain) and reduced sink are
(input of an isolation cell present in the TOP domain) supplied by SS_ISO supply.
❖ UPF Policy missing/redundancy related checks are NOT be done based on protection cells. UPF
policy missing/redundancy is done based on the buffers/inverters only.
❖ Design electrical checks are done based on the protection cells.
The check_lp -stage upf command is executed by considering the logic source is the output of the glue
logic present in the PD1 domain and the reduced sink is the input of the buffer present in the TOP domain
and are supplied by the SS_TOP supply.
The check_lp -stage design command is executed by considering that the logic source is the output of
the glue logic present in the PD1 domain and reduced sink is the input of the isolation cell present in the
TOP domain but are supplied by SS_ISO.
Table 5-3 Reduced Sink is an Isolation Cell
Note
Similar to this case, checks happen based on the reduced source when logic source is hanging. Refer to
Case6 for more details.
TOP domain. The reduced source is the output of the buffer present in the TOP domain and the logic sink is
the input of the glue logic present in the PD2 domain.
Table 5-4 Source is Hanging and Isolation Strategy/Cell are Present on Path
Figure 5-24 Source is Hanging and Isolation Strategy/Cell are Present on Path
ISO_* tags
All rail order checks (gray cloud violations) are affected by the handle_hanging_crossover variable.
The ISO_* tags typically depends on the PST states of the logical source/sink. As
handle_hanging_crossover variable changes the logical source/sink of a crossover path, all ISO_*
tags are affected.
Impacted tags:
❖ All ISO_*_STATE tags
❖ LS_BUFINV_VOLTAGE
❖ LS_INPUT_VOLTAGE
❖ All ISO_*_FUNC tags
❖ All ISO_*_WASTE tags
❖ RAIL_MULTI_* tag
Example
In the Figure 5-25, consider that Hang_N belongs to a power domain which has power VDD_blue. The
ground net is same (VSS) for this example. If the tcl variable (handle_hanging_crossover) is not
enabled, then you get LS_BUFINV_VOLTAGE message. If the Tcl variable is enabled, the reduced logic sink
becomes the buffer (buf_1) and no ISO* violation is issued if the parking checks are not enabled.
By default, VC LP does not generate crossovers for the mentioned path, and hence the
ISO_STRATEGY_MISSING/ISO_INST_MISSING violations is not reported.
When the generate_upf_ctrl_signal_crossover application variable is set to true, VC LP generates the
crossover, and reports the ISO_STRATEGY_MISSING/ISO_INST_MISSING violations for the same. The
hanging net (CORE1/ackout in this case) resolves the supply from the PSW strategy (input_supply). The
handle_hanging_crossover application variable does not shorten this crossover when the
generate_upf_ctrl_signal_crossover application variable is set to true.
5.1.9.2 Tags that do not get Affected by the handle_hanging_crossover Application Variable
The following are the non-crossover tags that are not affected when the handle_hanging_crossover
variable is enabled:
❖ All non-crossover based isolation instance checks:
✦ ISO_INST_CLAMPED
✦ ISO_INST_TRANSPARENT
✦ ISO_CONTROL_GLITCH
✦ ISO_OUTPUT_UNCONN
✦ ISO_DATA_CONSTANT
✦ ISO_ENABLE_UNCONN
✦ ISO_DATA_UNCONN
✦ ISO_ENABLE_EXPR
✦ ISO_ENABLE_MISSING
❖ All non-crossover based level shifter instance checks:
✦ LS_INPUT_TIEHI
✦ LS_INPUT_TIELO
✦ LS_OUTPUT_UNCONN
✦ LS_INPUT_UNCONN
❖ All RET_* tags
❖ All PSW_* tags
This feature only supports the following reasons for which the Xovers are dropped:
❖ Reasons caused because of handle_hanging_crossover Application variable
✦ . Hanging Source/Sink or Both
✧ Xover path segments dropped (not entire path) due to a hanging source/sink
✧ Entire Xover path is dropped due to a hanging sink
✧ Entire Xover path is dropped due to a hanging source
❖ Reasons caused because of handle_hanging_crossover Application variables
✦ Unconnected driver and no AON/Protection cell/op pin found on path
❖ Reasons caused because of handle_hanging_crossover Application variables
✦ Unconnected load/sink node
❖ Reasons not affected by Application variables
✦ Root node is the sink node
✦ No power domain boundary/AON cell/Protection Device/SRSN/SPA Encountered during the
path traversal
✦ Invalid same domain Xover
✦ Sink node is a pin of a Diode or Physical-only cell
Example 1
In Figure 5-30, the TOP domain input port In1 is connected to Cell1 input pin, which is also in the TOP
domain. VC LP ignores this Xover due to the same domain Xover.
The details reported in the IgnoredXoverPaths.rpt file for this scenario is as follows:
----------------------------------------
REASON: Invalid same domain Xover
XOVER PATH: Dropped SourceNode: In1 Dropped SinkNode: Cell1/A
Example 2
In Figure 5-31, the LogicSource is the output of the glue logic present in PD1 domain and the reduced sink is
output of the buffer present in the TOP domain. Xover is reported as the buffer output to PD2 domain input
is dropped.
Figure 5-31 Example for Xover Dropped due to Hanging Source/Sink or Both
The details reported in the IgnoredXoverPaths.rpt file for this scenario is as follows:
----------------------------------------
REASON: Hanging Source/Sink or Both, Tcl var: handle_hanging_crossover,
ignore_unconnected_driver, ignore_unconnected_load
INFO: ignore_unconnected_load is turned ON by tool whenever handle_handing_crossover is
ON
LIST OF XOVER PATHS WITH SEGMENTS DROPPED DUE TO HANGING SOURCE/SINK OR BOTH
XOVER PATH: SourceNode: i_core1/out1 Reduced SinkNode: buf/Z Dropped SinkNode:
i_core2/in
Use Model
set_hardmacro_enable isolation -elements {list_of_elements} \ -isolation_signal
<signal_name> \ -isolation_sense <high/low>
Options:
❖ -elements {list_of_elements}: Mandatory option, to specify the boundary ports, to which
the signal and polarity information applies. Wild-card is not supported. User has to specify the full
hierarchical design name.
❖ -isolation_signal <signal_name>: Mandatory option, to specify isolation enable signal
name.
❖ -isolation_sense <sense_value>: Mandatory option, takes high or low as values.
When the command is executed, error checking performed. If an element does not exist, or if an invalid
isolation_sense is given, an error is issued and the command is rejected. If the net named in
isolation_signal does not exist, no error is generated at this stage. However, all of the elements
associated with the incorrect connection and the ISO_CONTROL_CONN message are generated during the
check design stage.
Example
Here is an example liberty, design diagram and Tcl script which generates several errors.
cell (ISOMAC) {
pin(da) { direction : output; isolation_enable_condition: ea; }
pin(db) { direction : output; isolation_enable_condition: !eb; }
pin(dc1) { direction : output; isolation_enable_condition: ec; }
pin(dc2) { direction : output; isolation_enable_condition: ec; }
}
set_hardmacro_isolation –elements u1/u2/da \
–isolation_signal u1/na –isolation_sense high
set_hardmacro_isolation –elements u1/u2/db \
–isolation_signal pb –isolation_sense high
set s {u1/u2/dc1 u1/u2/dc2}
set_hardmacro_isolation –elements $s \
–isolation_signal pc –isolation_sense high
Comparing these three items, you can see the following two errors:
❖ In the second line of the Tcl, macro pin db is associated with macro enable pin eb and the polarity is
given as high. However in the liberty, pin eb is active low (the function is !eb). This results in an
incorrect polarity ISO_CONTROL_INVERT message.
❖ In the last line of the Tcl, macro pin dc1 and dc2 are associated with macro enable pin ec and the
connected net is intended to be pc. However, in the design the pin is actually connected to pd. This
results in an incorrect ISO_CONTROL_CONN connection message.
❖ The fact that pc does not exist in the design is not an error; the third line shows the use of a Tcl
variable to give a list.
The following error messages appear in the output of the report_violations -app LP command:
Tag : ISO_CONTROL_INVERT
Description : Strategy [Strategy] isolation control
signal [UPFNet] is opposite polarity from
isolation instance [Instance]: [SenseMismatch] UPFNet
UPFNet
NetName : pb
NetType : Design
Instance : u1/u2
Cell : ISOMAC
SenseMismatch
MisSenseDesign : LOW
MisSenseUpf : HIGH
StrategyNode : u1/u2/db
Tag : ISO_CONTROL_CONN
Description : Strategy [Strategy] isolation control signal
[UPFNet] does not match isolation instance
[Instance] connection pin [CellPin] UPFNet
UPFNet
NetName : pc
NetType : UPF
Instance : u1/u2
Cell : ISOMAC
CellPin : ec
DesignNet
NetName : pd
NetType : Design
StrategyNode : u1/u2/dc1
Source
PinName : pd
SegmentSourceDomain : d_top
Sink : u1/u2/ec
SegmentSinkDomain : d_top
SourceInfo
PowerNet ...
SinkInfo
PowerNet ...
5.1.10.1.3 Limitations
Architectural checks and ISO_CONTROL_GLITCH are not supported for hard macro isolation enable pin.
Macro input pins with internal LS of single-rail (over-driven) type has this attribute defined. Moreover, the
presence of this attribute in a macro input pin (which also has input_voltage_range defined) implies
that the pin is internally level shifted by a single-rail LS. Just the attribute presence is used as a marker to
know that the type of the internal LS is single-rail.
PSW_ACKFUNCTION_WRONG
This tag is reported when the design expression of the specified ack port/net does not match the ack port
boolean expression specified in UPF.
❖ Severity: Error
❖ Message: The ack_port Boolean expression of the power switch strategy [Strategy] is implemented
incorrectly at the acknowledge net [DesignNet]
❖ Fields:
✦ Strategy: <Strategy Name>
PSW_ACKFUNCTION_OK
This tag is reported when the design expression of the specified ack port/net matches with the ack port
boolean expression specified in the UPF.
❖ Severity: Info (generated when the check_lp -stage pg -include_info option is specified)
❖ Message: The ack_port Boolean expression of the power switch strategy [Strategy] is implemented
correctly at the acknowledge net [DesignNet]
❖ Fields:
✦ Strategy: <Strategy Name>
✦ DesignNet: <AckPort Name>
✦ StratAckExpr: <Boolean expression in policy>
✦ DesignExpression: <Boolean expression in design>
PSW_ACKFUNCTION_UNDETERMINABLE
This tag is reported when the design expression of the specified ack port/net cannot be verified. You cannot
determine if implementation matches or not with the specification in UPF.
❖ Severity: Warning
❖ Message: The ack_port Boolean expression of the power switch strategy [Strategy] cannot be verified
❖ Fields:
✦ Strategy: <Strategy Name>
✦ DesignNet: <AckPort Name>
✦ StratAckExpr: <Boolean expression in policy>
✦ DesignExpression: <Boolean expression in design>
✦ CounterExample: <Boolean expression for counter example>
PSW_ACKFUNCTION_CONT
This tag is reported in cases where the design expression of the specified ack port/net contains the ack port
boolean expression specified in UPF.
❖ Severity: Warning
❖ Message: The implemented Boolean expression at the acknowledge net [DesignNet] of the power
switch strategy [Strategy] contains the Boolean expression specified for the ack_port
❖ Fields:
✦ Strategy: <Strategy Name>
✦ DesignNet: <AckPort Name>
✦ StratAckExpr: <Boolean expression in policy>
PSW_FUNC_MULTI_DRIVEN_NET
This message is issued if multi-driven nets are found during the ack function check. As a static tool, VC LP
cannot resolve the symbol on a multi-driven net, therefore, it creates a new symbol upon issuing this
message. All the power switch instances in the fan-out path will have extra symbols in their design
expression due to this multi-driven net and hence those switches are likely to have
PSW_ACKFUNCTION_WRONG violations. This is a soft error.
PSSTRAT_UNCONN_ACKPORT
This message is issued if there is no driving net attached to the design object specified as an ack net or, no
immediate driver (could be an hierarchical boundary object) to drive the net attached to the design object
specified as the ack net. This is a soft error.
PSSTRAT_NOACKPORT_FUNCTION
This message is issued if there is no boolean function specified to the ack_port of the policy, and the OnState
boolean expression is assumed for ack port functional check. This is only a warning.
PSSTRAT_SLICE_ACKNET
The design object specified as an ack net in the strategy cannot be a multi-bit slice of a vector. In such cases,
the ack port functional check cannot be done. This is a soft error.
5.1.11.1.3 Examples
According to UPF specification, the logic value at an ack net ACK should be true whenever the control
signal EN assumes the logic value of false, and false when EN assumes the logic value of true.So, in the
design there should be an inversion in path of the ack and control net. As illustrated in Figure 5-32, the
design expression of ACK is EN which does not match with the UPF specified expression !EN. Hence,
PSW_ACKFUNCTION_WRONG is reported for the ack net ACK.
According to UPF specification, the logic value at the ack net ACK should be true whenever the control
signal EN assumes the logic value of false, and false when EN assumes the logic value of true.So, in the
design there should be inversion in path of the ack and control net. As illustrated in Figure 5-33, the boolean
expression of the ack net works out to be !EN which matches with the UPF specified expression !EN. Hence
PSW_ACKFUNCTION_OK is reported for the ack net ACK.
According to the UPF specification, the logic value at an ack net ACK should be true whenever the control
signal EN assumes the logic value of false, and false when EN assumes the logic value of true. So, in the
design there should be inversion in the path of the ack and control net. As illustrated in Figure 5-34, the
boolean expression of the ack net works out to be EN and IN1. In this case, the polarity of ack net cannot be
determined. Hence, PSW_ACKFUNCTION_UNDETERMINABLE is reported for the ack net ACK.
According to UPF specification, the logic value at an ack net ACK should be true whenever the control
signals EN1 and EN2 assume the logic value of true, and false when either EN1 or EN2 control ports assume
the logic value of false. As illustrated in Figure 5-35, the boolean expression of the ack net ACK works out to
be EN1. In this case, the design expression of the ack net contains the UPF specified expression EN1 and
EN2. Hence, PSW_ACKFUNCTION_CONT is reported for the ack net ACK.
Note
Currently the only simple expressions of ack ports are supported.
VC LP introduces new swapping checks that checks for swapped connections on the control or
acknowledge chain in this design and generates connectivity errors if they are present. These checks are
described in detail in the subsequent sections:
By default, the policy association algorithm in VC LP, looks for reachability of enable and ack signals to
power switch instances. Only if enable and ack are reachable, the policy is considered as a candidate for full
match.
UPFNets
UPFNet
NetName : A/ack_new
NetType : Design/UPF
UPFNet
NetName : A/en_2[3]
NetType : Design/UPF
UPFNet
NetName : A/en_2[4]
NetType : Design/UPF
Instance : A/sw_1
CellPin : ACK[7]
DesignNets
DesignNet
NetName : A/N_0[7]
NetType : Design
UnusedPolicyPorts
PortName : ACK5
To configure this kind of topology, the set_psw_turn_net Tcl command is introduced. When this
command is specified, VC LP considers the PSW switch as mother-daughter PSW strategy.
Syntax
%vc_static_shell> set_psw_turn_net -help
Usage: set_psw_turn_net # Sets PSW turn net in case of Mother-Daughter PSW
Configuration
-strategy <strategy> (Target power switch strategy)
-net <net> (Target power switch turn net)
Example
Note
The lp_enable_constant_propagation application variable internally sets a few other application
variables; const_aware_traversal to true (default false),
disable_verilog_supply_constant_analysis false (default true), and
disable_design_constant_analysis to false (default true). It is recommended that you do not set
these application variable to conflicting values, as it might affect the desired behavior.
When the lp_enable_constant_propagation application variable is set to true, while performing some
of the checks, VC LP traverses through combination logic cells, multiplexers, and so on, which has a
resolved output logic. The impact of the traversal is reflected in the following checks:
❖ ISO_CONTROL_GLITCH
❖ ISO_CONTROL_RESET
❖ ISO_DATA_BLOCKED
❖ ISO_DATA_CONSTANT
❖ ISO_INST_CLAMPED
❖ ISO_INST_TRANSPARENT
❖ LS_INPUT_TIEHI
❖ LS_INPUT_TIELO
❖ PSW_CONTROL_TIEHI
❖ PSW_CONTROL_TIELO
❖ PSW_INST_BUF
❖ RET_INPUT_TIEHI
❖ RET_INPUT_TIELO
❖ ISO_STRATEGY_CTRL_CONST
❖ PSW_STRATEGY_CTRL_CONST
❖ RET_CONTROL_CONST
Note
VC LP has introduced the lp_iso_reset_constant application variable. This application enables
checking of constant value propagation through sequential element. By default, this application variable is
set to false, and the ISO_CONTROL_RESET and ISO_INST_TRANSPARENT violations are moved under
the lp_iso_reset_constant application variable. By default (lp_iso_reset_constant set to false),
the ISO_INST_TRANSPARENT violation will not be reported if the constant value is an output of a flop.
Similarly, the ISO_CONTROL_RESET is not reported by default.
Example
For the schematic as shown in Figure 5-40, the ISO control connection is recognized as below.
Constant 0 -> mux output (mux select is tied to 0) -> AND gate input -> And gate output (Other AND gate input is
tied to 1) -> inverter input -> inverter output -> ISO Enable signal
Hence, ISO_INST_TRANSPARENT is reported.
-----------------------------------------------------------------------------
ISO_INST_TRANSPARENT (1 error/0 waived)
-----------------------------------------------------------------------------
Tag : ISO_INST_TRANSPARENT
Description : Isolation instance [Instance] ([Cell]) is transparent as the
enable pin [CellPin] [ReasonCode]
Violation : LP:16
Instance : iso
Cell : ISOANDLO
CellPin : ISO
ReasonCode : TIED_TO_CONSTANT
TieType : TIE_HIGH (because of the inverter)
When the set_app_var lp_xovercmd_virtual_node true is set, the following is the output:
5.1.13.3.1 Limitation
VC LP does not consider the location fanout and automatic attributes while predicting LS cells.
5.1.14.1 Examples
❖ ISO_MAP_TYPE
✦ If pure isolation cell is required for an isolation strategy, but only ELS in the UPF map cells. For
this case, the reasonCode debug field is with value PURE_NONE.
Tag : ISO_MAP_TYPE
❖ For fanout1, PD1 -> PDTop -> PD2, it has isolation strategy defined.
❖ For fanout2, PD1 -> PD3, it requests ls cells, and with level shifter strategy defined.
❖ If the locations are fanout/parent/self, or one location is with automatic, the tool considers an ELS
cell will be placed. So ELS_NONE/ELS_MISSING will be checked for the map_iso command
❖ If the location does not match, different cells (iso and ls) could be inserted into different paths
separately, no need of ELS. And pure isolation/ls cell is expected.
Note
The VC-LP-PREDICTIVE-NT and VC-LP-ULTRA licenses required for enable the application variable
The psw_en control signal is passing though a domain boundary where an isolation strategy is specified.
This anticipates an isolation cell to be placed at the boundary, which causes the control signal to be clamped
to a constant value when isolation is enabled. With the lp_enable_virtual_protection application
variable is set to true, the architectural check is done considering the predicted isolation cell.
The CORR_CONTROL_ISO violation is reported with the debug field IsoIsVirtual : TRUE to indicate that
the isolation cell is a predicted one.
Note
The support is available for all control signals.
The psw_en control signal is passing though a domain boundary where an isolation strategy is specified,
which has an isolation supply with a relatively off state compared to the sink. This anticipates an isolation
cell to be placed at the boundary later which causes corruption due to its supply rails going off in relation to
the sink.
With the lp_enable_virtual_protection is set to true, the architectural check is done considering this
predicted isolation cell with relatively off supply.
The CORR_CONTROL_STATE violation is reported with the debug field IsoStrategies, StrategySupplyInfo
that points to the predicted corruption source.
The support is available for all control signals. Behavior with hanging upf control signals
For the UPF control signals (iso_enable, psw control, save, restore), which are not reaching the expected
control pins or are hanging, these architectural checks are not done by default.
The architectural checks are done if the lp_enable_arch_check_hanging_signals application variable is
set to true in such cases.
The predictive support is enabled in such scenarios when the lp_enable_arch_check_hanging_signals
and lp_enable_virtual_protection application variables are set to true
The same checks can be done in RTL mode with isolation strategies defined predicting isolation cells that
will be implemented in future.
For this predictive check, the ISO virtual node (the ISO policy associated node) is considered equally as an
ISO cell which computes the pivot node, and impacts these checks.
Use model
The gray cloud FUNC checks in predictive flow are supported under the lp_enable_virtual_protection
application variable set to true. The following violations are impacted in this flow:
❖ ISO_BUFINV_STATE/FUNC
❖ ISO_LSINPUT_STATE/FUNC
❖ ISO_ELSINPUT_STATE/FUNC
❖ ISO_INPUT_STATE/FUNC
❖ ISO_OUTPUT_STATE/FUNC
❖ ISO_LSOUTPUT_STATE/FUNC
❖ ISO_ELSOUTPUT_STATE/FUNC
❖ ISO_SINK_STATE
Note
The VC-LP-PREDICTIVE-NT and VC-LP-ULTRA licenses required for enable the application variable.
[Warning] CONFIG_PWRGND_PIN_UNAVAIL: The top level ports '<Port list>', specified through
'configure_power_pin_rule' and/or 'configure_ground_pin_rule' app vars, cannot be found in the design
Please specify correct top level port names
Note
When these checks are enabled, there can be potential run time increase because of the large number of
DESIGN_*_DIFF checks that are performed.
❖ These checks are strictly based on supply net only and not based on PST. These checks are for the
immediate driver/load and not for global source/sink.
❖ If a driver and a load are working on power switch input and output port respectively or vice-versa,
then the DESIGN_*_DIFF violation is not reported.
❖ If the load/sink has attribute is_esd_protected set to true, then the violation DESIGN_*_DIFF is
not reported.
❖ If the load/sink is a diode cell, then the DESIGN_*_DIFF violation is not reported.
5.1.18.1 DESIGN_POWER_DIFF
This violation is reported if on a given crossover path two consecutive nodes are working on a different
power net.
5.1.18.2 DESIGN_GROUND_DIFF
The DESIGN_GROUND_DIFF is reported if on a given crossover path two consecutive nodes are working
on a different ground net.
❖ If only the power net matches with the CDM cell pin power net, then the DESIGN_GROUND_DIFF
violation is reported.
❖ If only the ground net matches with the CDM cell pin ground net, then the DESIGN_POWER_DIFF
violation is reported.
❖ If none of the rail matches with the CDM cell pin nets, then both the DESIGN_GROUND_DIFF and
DESIGN_POWER_DIFF violations are reported.
VC LP considers a cell pin as CDM pin, if it is has the is_esd_protected pin level attribute set to true.
Example
Consider the following fanout scenario:
ua/out (VDD1, VSS1) --> CDM/in (VDD2, VSS2, is_esd_protected: true)
|-> uc/in1 (VDD2, VSS2)
|-> ud/in1 (VDD2, VSS3)
|-> ue/in1 (VDD3, VSS2)
|-> uf/in1 (VDD3, VSS3)
VC LP reports following violations for the example scenario:
❖ The DESIGN_GROUND_DIFF violation is reported for ud/in1.
❖ The DESIGN_POWER_DIFF violation is reported for ue/in1.
❖ The DESIGN_POWER_DIFF and DESIGN_GROUND_DIFF violations are reported for uf/in1.
❖ No DESIGN_*_DIFF violations are reported for CDM/in.
❖ No DESIGN_*_DIFF violations are reported for uc/in1.
Limitation
In above example, consider if supplies VDD2 and VDD3 are related through PSW strategy/cell such that
one is input supply of PSW and another is output supply of PSW, then ideally VC LP should not report
DESIGN_POWER_DIFF violations for any of the fanout path, however, VC LP reports the
DESIGN_POWER_DIFF violation for such scenarios. The same limitation is applicable for the
DESIGN_GROUND_DIFF violation.
5.1.18.4 Limitation
Consider the following multi-driver scenario:
macro_C/Y (VDDC/VSSC) ---|
macro_D/Y (VDDD/VSSD) ---|--> macro_E/A (VDDE/VSSE)
The PG_DIODE_EXCESS violation is reported when the diode instance supply is more than the supply of
the driver of the diode pin.
Similarly, if the liberty cell has attribute has_pass_gate or is_pass_gate such cell is considered as pass
transistor. If the supply of transistor cell is more than the supply of the driver of the pass transistor pin, then
the PG_PASSTRAN_EXCESS violation is reported.
Note
This support is available under VC-STATIC-BETA license.
Tag : ISO_DEVICE_STATE
Description : Missing or insufficient isolation at crossing from source [PinName]
to pin [CellPin] of cell [Instance] ([Cell])
Violation : LP:2
PinName : CORE1/and_i1/Z
CellPin : CORE2/and_i1/A
States
State : top_pst/s2
❖ LS_DEVICE_STATE
Tag : LS_DEVICE_STATE
Description : Unprotected voltage difference at crossing from source [PinName] to
pin [CellPin] of cell [Instance] ([Cell])
Violation : LP:6
PinName : CORE1/and_i1/Z
CellPin : CORE2/and_i1/A
States
State : top_pst/s2
❖ UPF_DEVICE_STATE
Tag : UPF_DEVICE_STATE
Description : Supply Difference found from source [PinName] to pin [CellPin] of
cell [Instance] ([Cell]) but [UPFSupply] driving pin has no states defined.
Violation : LP:143
PinName : in1
CellPin : CORE1/and_i1/A
UPFSupply : VDD1
❖ DCC_PIN_CONST
Tag : DCC_PIN_CONST
Description : Pin [CellPin] of cell [Instance] ([Cell]) is driven by constant.
Violation : LP:24
CellPin : A
Instance : and_i1
Cell : DMAN2
5.1.22.2 Example
In the UPF+RTL, consider two power domains are defined, each with their own power switch strategy as
shown in the following figure:
If you want PD1 and PD2 to be implemented in the same voltage area, sharing the same domain primary
and the same power switches. You can provide the following new UPF attribute:
set_design_attributes -elements . -attribute {shared_voltage_area{{PD1 PD2}}}
Where:
❖ The first list element PD1 is a master domain
❖ PD2 and any other domains in the list are slave domains
❖ Slaves are implemented using the master domain primary
❖ Slave power switch strategies are ignored, except any PSW ack is driven by the master ack.
The resulting PG netlist after applying the attributes is as follows:
❖ If the first domain is invalid, the attribute cannot be applied, the following error message is reported,
and the entire list is discarded:
FIRST_DOMAIN_INVALID
[Error] First domain in shared_voltage_area invalid
Example
set_design_attributes -attribute {shared_voltage_area {{da db} {dc dd}}}
In this example, suppose da is an invalid domian, but db, dc, dd are valid domains. Then no sharing
happens for db, but sharing still may apply for dc, dd.
❖ If the second or the latter domain is invalid, the attribute is still applied to all the domains that are
valid, and the following error message is reported:
SHARED_DOMAIN_INVALID
[Warning] Shared domain in shared_voltage_area invalid.
Example
set_design_attributes -attribute {shared_voltage_area {{da db dc}}}
Suppose db is invalid, but da, dc is valid, then sharing still may apply for da (as the master) and dc
(as the only slave)
The SHARED_DOMAIN_INVALID and FIRST_DOMAIN_INVALID parser message are reported
in the following scenarios:
✦ Domain is undefined
✦ Domain with zero PSW strategies
✦ Domain with more than one PSW strategies
✦ Domain has PSW strategy which contains more than one input supplies
✦ Domain has PSW strategy which contains more than one control ports
❖ If a list of lists is not specified, the following warning message is reported:
SHARED_AREA_LIST_FORMAT
[Warning] Attribute shared_voltage_area expects list of lists
Example
set_design_attributes -attribute {shared_voltage_area {da db}}
A list of lists is required, not a simple list.
❖ If the domain specified in the shared_voltage_area is already shared, the following warning
message is reported:
SHARED_DOMAIN_SHARED
[Warning] Shared domain in shared_voltage_area is already shared
Example
set_design_attributes -attribute {shared_voltage_area {{da db} {dc db dd}}}
A slave is assigned to one master, and later assigned to a second master. The assignment to the
second master is ignored. It is equivalent to {da db} {dc dd}.
❖ If a master domain is specified twice with all the slave domain combined, the following warning
message is reported:
COMPAT_SHARED_DOMAIN
[Warning] Not all tools allow reuse of a shared domain
Example
set_design_attributes . -attribute {shared_voltage_area {{da db} {da dc}}}
One master is given twice, with different slave lists. All the slaves are combined and is equivalent to
a single list {da db dc}.
❖ If the supply in the shared voltage area is not completely shared, the following warning message is
reported:
SHARED_DOMAIN_UNSHARED
[Warning] Supply in shared_voltage_area is not completely shared
Example
set_domain_supply_net db1 -primary_power db
set_domain_supply_net db2 -primary_power db
set_design_attributes -attribute {shared_voltage_area {{da db1 dc}}
Reimplementing the primary of db1 using the primary of da involves splitting the supply net db to
preserve the primary of db2. The incompletely shared domain is ignored. It is equivalent to the list
{da dc}.
Strategy : s2
UPFSupply : VDDX
Strategy : s1
Supplies
UPFSupply : VDDY
PstEquiv : True
Tag : PSW_OUTPUT_SHARED
Description : Power switch strategies [PswStrategies] are shared with an
incompatible output supply [UPFSupply] of strategy [Strategy]
PswStrategies
Strategy : s2
UPFSupply : VSW1
Strategy : s1
Supplies
UPFSupply : VSW2
PstEquiv : False
5.1.22.4.5 Examples
Example 1
Consider the following design:
Example 2
Consider the following UPF snippet
set_domain_supply_net PD1 -primary_power VDD1_I
set_domain_supply_net PD2 -primary_power VDD2_I
❖ PSW_OUTPUT_SHARED
❖ PSW_CONTROL_SHARED
5.1.22.5 Tcl Commands for Querying Shared Domains and Power Switch Strategies
You can use the get_attribute [get_power_switch_strategies <strategy_name>] shared_domain
command to find the parent strategy. If the specified strategy is a parent, then the command return NULL.
If strategy is a child, the command reports its parent domain. The same command works for power
domains.
Example
Consider the following UPF, where PSW1 output supply is PD1 primary, and PSW2 output supply is PD2
primary.
set_design_attributes -elements . -attribute shared_voltage_area {{ PD1 PD2}}
The following is the output of the Tcl Command:
❖ get_attribute [get_power_switch_strategies PSW1 ] shared_domain
Result: NULL
❖ get_attribute [get_power_switch_strategies PSW2 ] shared_domain
Result: PSW1
5.1.22.6 Limitations on Support for Multiple Power Domains in a Single Voltage Area
The support for multiple power domains in a single voltage area feature has the following limitations:
❖ The set_design_attribute shared_voltage_area UPF command is not dumped in the correct
format in the expanded_tokens.upf file. Hence, it is unable to read back the dumped UPF.
❖ Multi-input supply PSW strategies are not supported.
❖ Multi-control port PSW strategies are not supported.
❖ Domains with more than two power switch strategies is not supported.
❖ The set_design_attribute shared_voltage_area attribute is unable to share two power
switches when their outputs are electrically equivalent.
Example UPF
set_design_attributes -elements .-attribute {shared_voltage_area {{PD1 PD2}}}
SOC and IP designers would agree upon. After reconciliation, SOC voltage values propagate to
block level block level power state table will be updated internally.
5.1.23.2 Examples
5.1.23.2.1 Example 1
set_app_var lp_volt_recon_method voltage
set_variation -tolerance 0.2
set_design_attributes -models {u1 u2} -attribute upf_reconcile_boundary
"reconcile_voltages"
In this case, U1/V1 is outside the threshold (-0.3V difference when moving from block to top) and
U1/U2/V2 is outside the threshold (+0.3V when moving from block to top).
In the final result, U1/U2/V1 will be reconciled to 1.0 but U1/V1 will be kept at 1.3, resulting in all port
states of V1 canceling out.
Similarly, U1/V2 will be reconciled to 1.1 but U1/U2/V2 will be kept at 0.8.
For V3, both U1/V3 and U1/U2/V3 will be reconciled to 1.2 with no conflict.
5.1.23.3 Example 2
Setup
set_app_var lp_volt_recon_method voltage
set_variation -supply v1 -tolerance 0.2
set_variation -supply v2 -tolerance 0.2
set_design_attributes -models {U1} -attribute upf_reconcile_boundary
"reconcile_voltages"
Let's take block/V1 (1.3v) voltage. Both top level V1 values (1.1 and 1.2) are inside the threshold. Therefore
block/V1 is substituted by both 1.1v and 1.2v
Same as that all the voltages are substituted (shown in the diagram)
Expanded block PST will have four different states.
5.1.23.4 Example 3
Setup
set_app_var lp_volt_recon_method voltage
set_variation -supply v1 -tolerance 0.2
Behavior
Let's take block/V1 (1.2v) voltage. Both top level V1 values (1.1 and 1.0) are inside the threshold. But top
level 0.9v is outside the threshold. Therefore top V1 is not propagated to block.
Same as that V2 is not propagated to block too.
Since no threshold value is set for vss supply (Default is taken as 0) it top vss not propagate to block.
5.1.23.9 Limitations
❖ Unique port state names required.
❖ Voltage reconciliation support is not available for add_power_state -supply/-group
VC LP has introduced checks to identify issues in test circuits (AND and OR gates placement and power
states are correct). These checks do not use PSW strategy information. You should provide the PSW chain
information using the following command.
Syntax
lp_psw_andor # check and/or logic on PSW outputs
-input <net> (Trace from this input control net)
[-and <net>] (Expected AND output)
[-or <net>] (Expected OR output)
[-fringe <depth>] (Allowed fringe depth)
[-prequal <ports>] (Prequalified primary input list)
[-verbose] (Print derived test nodes)
Consider the following example:
5.1.24.1 report_pst_andor
This command reports all PSW instances which were not traveled by any lp_psw_andor command.
If all endpoints (DesignNets) (T1, T2, T3, …) of each PSW chain are not connected to the output wire
mentioned in the lp_psw_andor command, or if the logic between endpoints and output logic wire
is not matched with given logic in the lp_psw_andor command, then this violation is reported for
each individual lp_psw_andor command which fails.
Tag : PSW_ANDOR_EXPR
Description : Power switch and/or chain from [DriverNode] to [ReceiverNode]
does not have required logic function
DriverNode : i
ReceiverNode : oo
DesignNets
DesignNet
NetName : u7/i9/i9/i9/w8
NetType : Design
DesignNet …
❖ PSW_ANDOR_STATE
If there exists a power state where the driver is on, and any of the set of gates is off, then this
violation is reported once per instance in the tree with insufficient power.
Tag : PSW_ANDOR_STATE
Description : Power switch and/or chain instance [Instance] is off,
when driver [DriverNode] is on
Instance : ua/n1
DriverNode : i
InstanceInfo
PowerNet
NetName : vdda
DriverInfo
PowerNet
NetName : vdd
ReceiverNode: ua/o
States
State : t/s2
❖ But these nets can be connected intentionally by the user because there are pre-qualified in another
chain.
❖ Provide these pre-qualified inputs as below
lp_psw_andor
-and
-input PMU/P1
-prequal {list_of_prequalified_design_nets (separate by space)}
Example
❖ Consider the following design.
❖ If the check is staring from P2 (Inner hierarchy) then P3 will not be the part of the PSW chain but it is
connected to the test circuit.
❖ But when check stars from P1, then check will be a pass.
❖ So when the check starts from P2, P3 should be prequalified net.
❖ Therefore, if you provide P3 in the prequel list, then the test will be pass and no violations reported.
5.1.24.4 Limitation
This check is not supported for fine-grain power switches.
users rely on the simulation to verify these connections. With this new support, RAM controls can be
specified using Tcl commands. VC LP introduces checks to control connectivity and reachability.
Use Model
RAM control signal connectivity can be specified for RAM cells where is_memory_cell: true attribute is
applied, using the define_ram_controls Tcl command. This command should be added after read_upf
stage and before executing any check_lp command.
Note
This feature is under VT-VC-BETA license. VT-VC-BETA checks out at define_ram_controls.
Syntax
vc_static_shell> define_ram_controls -domain domain name [-elements cell list] -ctrl
{{pin {signal_list}}* } [-ctrl_supplies {{pin supply_name}* }] [-quiet] RAM control
strategy name
Where:
❖ -domain <domain_of_RAM_cells>: Specify the domain name for which the ram control applies
❖ -ctrl {{RAM_CELL_PIN connected_signal_name }}: The pins of RAM cells for which the
connectivity should be checked with the respect to specified valid signals. Inverting signal for CRL
pins allowed (eg: -ctrl { {CEN ~cen} } ).
❖ [-elements] {RAM_CELL*}: RAM cell instance names that are to be checked. Wild card support is
available.
❖ [-ctrl_supplies] {{RAM_CELL_PIN supply_vdd}}: UPF supply to override the supply of RAM
control pins.*
*Options within [] are not mandatory
Example
define_ram_controls RAM_PD1 -domain PD1 \
-elements {RAM1 RAM2 RAM3*} \
-ctrl {{SLEEP_EN ram_sleep_en} {RET_EN {ram_ret_en_0 ram_ret_en_1}} } \
-ctrl_supplies {{SLEEP_EN VDD_1} {RET_EN VDD_2}}
-----------------------------------------------------------------------------
RAM_CTRL_CONN (1 error/0 waived)
-----------------------------------------------------------------------------
Tag : RAM_CTRL_CONN
Description : RAM control signal does not match RAM instance [Instance]
connection pin [CellPin]
Violation : LP:1
Instance : u_SRAM_0
CellPin : CEN
SignalDesignList
SignalName : cen
❖ RAM_CTRL_UNCONN
This violation is reported if the RAM instance control pin is unconnected. This tag is enabled by
default.
Example
For the following unconnected pin, this violation will be flagged.
define_ram_controls RAM_PD1 -domain PD_1\
-ctrl {SLEEP_EN bbox/sleep }
❖ RAM_CTRL_COMBO:
This violation is reported if the RAM control signal passes through non-buffer logic.
This tag is enabled by default.
Example
For following connection with combo logic, this violation will be flagged.
define_ram_controls RAM_PD1 -domain PD_3 \
-elements {RAM*} \
-ctrl {RET_EN bbox/ret_en }
❖ RAM_CTRL_INVERT:
This violation is reported if the RAM control signal has opposite polarity from RAM instance pin,
odd number of inverters exist in the path. This tag is enabled by default.
Example
In the following example, the inverted output is connected to Ram cell pin
define_ram_controls RAM_PD1 -domain PD_1 \
-elements {RAM*} \
-ctrl {RET_EN bbox/ret_en }
❖ RAM_CTRL_RESET
This violation is reported if the driver of RAM Instance pin <CellPin> has no reset. This tag is
disabled by default.
Example
In following figure, if the root has no reset pin, this violation is reported.
❖ RAM_CTRL_GLITCH
This violation is reported if the RAM instance pin <CellPin> is not driven by a state signal, output of
a flip-flop, latch or a top-level port. This tag is disabled by default.
Example
In the above scenario if the root driver is not a state signal, output of a flip-flop, latch or a top-level
port this violation flags.
❖ RAM_CTRL_STATE (error)
This violation is reported for an instance where a RAM instance pin (CellPin) supply ON, but its
driver signal (DesignSignal) supply is OFF. That is, when the -ctrl_supplies option is specified in
the define_ram_controls command with the RAM control pin supply ON and ctrl signal driver's
supply OFF.
This tag is disabled by default. To enable it, use configure_tag -app LP RAM_CTRL_STATE -
enable command.
Example
define_ram_controls ctrl1 -element {u_SRAM_1} -domain PD_top -ctrl {{CEN cen}} -
ctrl_supplies {{CEN Vdd_1} {CEN VSS} }
The following is an example snippet of the violation report:
-----------------------------------------------------------------------------
RAM_CTRL_STATE (1 error/0 waived)
-----------------------------------------------------------------------------
Tag : RAM_CTRL_STATE
Description : RAM instance [Instance] pin [CellPin] supply ON but its driver signal
[DesignSignal] supply is OFF
Violation : LP:1
Instance : u_SRAM_1
CellPin : CEN
DesignSignal
SignalName : cen
ControlInfo
PowerNet
NetName : Vdd_1
NetType : UPF
PowerMethod : FROM_RAM_CTRL
GroundNet
NetName : VSS
NetType : Design/UPF
GroundMethod : FROM_PG_NETLIST
DriverInfo
PowerNet
NetName : Vdd_top
NetType : Design/UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : Design/UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
States
State : top_pst/ALL_OFF
❖ RAM_CTRL_VOLT (error)
This violation is reported when a RAM instance pin (CellPin) supply voltage is different from the
signal (DesignSignal) in the control signal path. This violation is disabled by default. To enable it,
use configure_tag -app LP RAM_CTRL_VOLT -enable command.
Example
define_ram_controls ctrl1 -element {u_SRAM_1} -domain PD_top -ctrl {{CEN cen}} -
ctrl_supplies {{CEN Vdd_1} {CEN VSS} }
The following is an example snippet of the violation report:
-----------------------------------------------------------------------------
RAM_CTRL_VOLT (1 error/0 waived)
-----------------------------------------------------------------------------
Tag : RAM_CTRL_VOLT
Description : RAM instance [Instance] pin [CellPin] supply voltage is different
from
signal[DesignSignal] in control signal path
Violation : LP:2
Instance : u_SRAM_1
CellPin : CEN
DesignSignal
SignalName : cen
ControlInfo
PowerNet
NetName : Vdd_1
NetType : UPF
PowerMethod: FROM_RAM_CTRL
GroundNet
NetName : VSS
NetType : Design/UPF
GroundMethod : FROM_PG_NETLIST
DriverInfo
PowerNet
NetName : Vdd_top
NetType : Design/UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : Design/UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
States
State : top_pst/TOP_ON
Note
If SSF is read after UPF is read, VC LP reports an error message and does not load SSF.
Safety Practices
❖ Safety registers should not be used as retention register because registers with no clock can flip value
when in retention state.
❖ Similarly, for safety related registers, saving power by clock-gating exposes those registers to longer
time with no clock, increases chance of flipping value because of SEU (Single Event Upset).
Therefore, the following new checks were introduced in VC LP to report such incorrect usages of redundant
registers in retention command.
❖ RET_ELEMENT_SAFETY: This violation is reported at the UPF stage when any register which is
referred in UPF retention strategy and specified as safety register.
❖ RET_ELEMENT_FAILSAFE: This violation is reported at the UPF stage when any register referred
in UPF retention strategy, and as part of fail-safe FSM.
These tags are disabled by default.To enable it, use the configure_lp_tag -enable command.
Example
[Warning] NOR_ISO_UNLOADED: Nor iso cell is unconnected at the output
Nor Iso cell u_RD/u_PRPL/NORISO2/ISO is unconnected at the output, no sink forwarding will be done
Users are recommended to set the application variable "load_for_nor_iso_without_crossover" to true if NOR style
isolation cells are implemented in the design.
Use Model
set_design_attributes -elements <scope_of_the_domain> -attribute iso_nor
{domain1.startegy1 domain2.startegy2}
Example
set_isolation NOR_ISO -domain PD_TOP -isolation_supply_set SS_VVDD_SOC -elements
{dout[0]} -clamp_value 0
set_isolation_control NOR_ISO -domain PD_TOP -isolation_signal isolate -
isolation_sense high -location self
set_design_attributes -elements . -attribute iso_nor { PD_TOP.NOR_ISO }
When you use this feature, ensure that you adhere to the following rules:
❖ The -elements option is mandatory and you can specify only one scope in it.
Example:
set_design_attributes -elements { . m0 } -attribute iso_nor { PD_TOP.ISO_NOR }
set_design_attributes -attribute iso_nor { PD_TOP.ISO_NOR }
❖ You can specify more than one attribute value separated by space.
Example:
Previously, the PG_STRATEGY_CONN is reported when the design instance supply net does not match
with supply net defined in UPF strategy. An exception is added while reporting the
PG_STRATEGY_CONN violation for the NOR Isolation cell. For NOR-style isolation cells, this violation is
reported only for the ground pin. This is because NOR isolation is always placed in the switched domain
and it takes supply of the switched domain. For NOR-style isolation cells, the PG_STRATEGY_CONN
violation is reported only when the design instance's ground supply net does not match with ground net
defined in UPF strategy.
Consider the following example, where you specify the always on power, but DC performs an optimization
to use NOR-style instead.
set_isolation ... -isolation_power_net VDD_always_on
VC LP checks that the NOR style isolation is electrically correct, even though the connected power net does
not match with what is specified in the UPF. Therefore, the PG_STRATEGY_CONN is not reported for
power pin of NOR isolation even though the instance supply net does not match with supply net defined in
UPF strategy.
5.2.1.6 Limitations
❖ Parking checks are not supported.
floating when the cell is on. Therefore, the liberty model for this cell requires that the
alive_during_power_up attribute is set to false.
If several such gates appear as primary outputs of a macro, it can be represented as follows:
❖ This rail order check will trigger the violation, if there is a case where *all* of the
related_power_pins of the enable inputs are off, and the sink is on.
ISO_MULTINOR_STATE (Error, Design, Enabled by Default)
Description: Sink supply on, but supplies of nor style macro output off
5.2.4 Differential LS
VC LP supports Differential Level Shifter (DLS) in a design. The following are the characteristics of a DLS:
❖ It does not need multiple voltage supplies for shifting, unlike a traditional Level Shifter
❖ It has two logical inputs acting as a differential input stage. One of the inputs is always inverted (in
the example inFigure 5-55, A and BB are the two inputs, and BB is inverted).
The advantage of adding the differential level shifter cells in a design is that it allows for easier power
planning.
The following is an example of a DLS cell:
After synthesis, a DLS cell is inserted in the netlist as shown in Figure 5-57. This is an example of the first
RTL netlist. The ports SUB_A/bar1 and SUB_B/bar1 are created during synthesis to add a path for the
inverted signal.
✦ Power/Ground ports
The driver root of the DLS input pins are VDD/VSS, which drives inverse value.
If the design violates the prerequisite conditions from design connectivity point of view, the
following warning messages are reported as part of the SETUP violations.
DLS_SETUP_ROOT Incorrect connection has been created between DLS node and its' both the
identified roots. The connection issue is indicated by the reason code.
REASON_CODE list:
• DLS_ROOT_DIFF: DLS node has two different drivers
• ROOT_POLARITY_SAME: Both the path from root to DLS node have same
polarity
• FLOP_DRIVER_SUP_DIFF: Roots are output pin of flops, but having
different supplies
• ROOT_CONST_SUPDIFF: Roots are literal constants but supplies are
different
DLS_SETUP_PATH Path connecting DLS node to one of its drivers has setup issue. The
connection issue is indicated by the reason code.
REASON_CODE list:
• NON_BUF_NODE - > The path contains a non buf/inv node
• INTR_SUP_DIFF -> The intermediate node has different supply
DLS_SETUP_NOBOUNDARY Path connecting DLS node to its driver is not crossing any power domain
boundary.
DLS_SETUP_PG Related power pin or related ground pin connection of complementary and
master complementary pins of the DLS cell are not same.
}
bundle (Q) {
members("Q0", "Q1");
pin (Q0) {
...
}
pin (Q1) {
}
❖ RET_CLAMP_LEAKAGE
If the AOB cell’s (Highlighted with Red) power/ground net is less ON compared to Zero pin
retention flop’s backup power/ground net, then VC LP reports the RET_CLAMP_LEAKAGE
violation. The severity of this violation is error.
❖ RET_CLAMP_MISSING
From the Zero pin Retention Clock and Reset pin, VC LP does a back trace and if Clamp cells are not
found on the path, then VC LP reports RET_CLAMP_MISSING violation.
❖ RET_CLAMP_INVERT
If any inverter cell gets placed between NOR-style isolation cell and Zero pin Retention flop’s
clock/reset pin, then VC LP reports the RET_CLAMP_INVERT violation. The severity of this
violation is Error.
VC LP does not give RET_CLAMP_INVERT violation, when even number of inverters are used in
between clamp cell and zero pin retention’s clk/reset pins.
In the example in Figure 5-68, the clamp cells are reversed means clamp 1 to CP pin and clamp 0 to
NRST pin of ZPR. and if even number of inverters are used, then RET_CLAMP_INVERT violation is
reported. However, if odd number of inverters are inserted, VC LP does not report
RET_CLAMP_INVERT violation.
5.2.8 Diodes
VC LP identifies a cell a diode if:
❖ LibCell has user_function_class :: ANTENNA attribute and antenna_diode_type attribute
mentioned with any of these values - power_and_ground, power, ground
❖ LibCell has user_function_class :: DIODE attribute and antenna_diode_type attribute mentioned
with any of these values - power_and_ground, power, ground
❖ LibCell has antenna_diode_type attribute in the Liberty library
❖ LibCell has does not contain the user_function_class :: ANTENNA or user_function_class :: DIODE
attribute, however, the following variables are set:
✦ set_app_var vss_type_diode_cell_name <cell_name>
✦ set_app_var vdd_type_diode_cell_name <cell_name>
✦ set_app_var vdd_vss_type_diode_cell_name <cell_name>
VC LP reports the DIODE_CHECK_IGNORE warning message, if diode checks are ignored. This warning is
reported after executing any the following commands:
%vc_static_shell>check_lp -stage pg
%vc_static_shell>check_lp -stage pg -family diode
%vc_static_shell>check_lp -stage pg -force
%vc_static_shell>check_lp -stage pg -include_info
Warning Example:
[Warning] DIODE_CHECK_IGNORE: Checks for diode cell have been skipped.
The diode cell antenna/ANTENNA_RVT_LOCAL is used in the design but does not have any of the
vdd_type_diode_cell_name, vss_type_diode_cell_name and vdd_vss_type_diode_cell_name attributes.
DIODE_CHECK_IGNORE warning is reported in the following scenarios:
❖ LibCell has user_function_class :: ANTENNA attribute but no antenna_diode_type attribute is
mentioned in the Liberty library
❖ LibCell has user_function_class :: DIODE attribute but no antenna_diode_type attribute is
mentioned in the Liberty library
Application Variables
❖ To set the cell as a vss type diode, use the following application variable:
%vc_static_shell>set_app_var vss_type_diode_cell_name <cell_name>
❖ To set the cell as a vdd type diode, use the following application variable
%vc_static_shell>set_app_var vdd_type_diode_cell_name <cell_name>
❖ To set the cell as a vdd_vss type diode, use the following application variable
%vc_static_shell>set_app_var vdd_vss_type_diode_cell_name <cell_name>
Use Model
vc_static_shell> reference_toplevel_isolation_signal -help
Usage: reference_toplevel_isolation_signal # specify the name of the correct
isolation enable signal at SoC level, and the correct supply of the driver of isolation
data pin
-name <str> (top level iso enable name)
-supply <str> (correct supply of the driver of isolation data pin)
VC LP has also introduced the following violation tags to check the connectivity of the block level
isolation_signal to the top level and the driver supply of the strategy node/data pin of the isolation cell.
❖ ISO_STRATEGY_REFERENCE
When a strategy has a defined -isolation_signal, that does not match with the signal specified in
the reference_toplevel_isolation_signal command, the ISO_STRATEGY_REFERENCE
violation is reported.
❖ ISO_INST_REFERENCE
When an isolation cell has an enable signal that does not match with the signal specified in the
reference_toplevel_isolation_signal command, the ISO_INST_REFERENCE violation is
reported.
❖ ISO_STRATEGY_SUPPLY
When -isolation_signal matches with a given isolation signal in the
reference_toplevel_isolation_signal command, but the driver supply of the strategy node
does not match with the supply specified in the reference_toplevel_isolation_signal
command, then the ISO_STRATEGY_SUPPLY violation is reported.
❖ ISO_INST_SUPPLY
When the -isolation_signal of an ISO cell matches with the isolation signal specified in the
reference_toplevel_isolation_signal command but the driver supply of the data pin of the
isolation signal does not match with the supply specified in the tcl command, then the
ISO_INST_SUPPLY violation is reported.
The severity of these tags is error and by default these tags are disabled. Use the configure_tag -app LP
command to enable the tags.
Strategy : CORE1/PD1/iso1
UPFNet
NetName : iso_block_1
NetType : Design/UPF
DesignNets
DesignNet
NetName : iso_top_2
NetType : Design
ISO_INST_REFERENCE Violation Example
Tag : ISO_INST_REFERENCE
Description : Signal [DesignNets] reaching isolation enable pin [CellPin] of
isolation cell [Cell] is not defined as a reference top level
isolation signal
Violation : LP:2
DesignNets
DesignNet
NetName : iso_top_2
NetType : Design
Instance : CORE1/iso_i1
Cell : DMISAN2
CellPin : B
5.2.10 Support for Local Bias For Isolation and Retention Cells
Electrical continuity requires that all logic elements in the same power domain share the same bias supplies.
Previously, in the Synopsys UPF bias flow, you had supply a UPF which satisfies the following condition:
The bias components of a supply set specified for an isolation/retention strategy must be the same as those of the
primary supply of domain in which the power management cell is to be inserted; else, the design compiler issues an
error otherwise and halts compile.
Previously, to meet this condition, you had to provide a dedicated supply set using the back up
power/ground supply, and the local bias had to be assembled for an isolation/retention strategy. This is an
extra overhead when porting existing non-bias UPFs to the bias flow. At worst, adding such a supply set
might not even be possible.
All supply sets were created with four supply functions (power, ground, nwell, and pwell). In many cases,
the supply sets actually share the same nwell and pwell supplies (for example, the primary and isolation
supplies in the same power domain must have the same bias), yet you had to perform the extra overhead of
connecting/associating the bias functions of these supply sets to the same supply net.
Figure 5-71 shows an example of how it can be impossible to specify an isolation supply set to satisfy the
bias continuity requirement. In this example, power domain BOT has two root cells, one nested in the power
domain TOP, and the other in the power domain MID. Suppose the primary bias of TOP and MID are
different, then it is impossible to specify an isolation supply set iso_ss for the location -parent strategy iso1
which satisfies the bias continuity requirement of both TOP and MID.
❖ SS2 is a two-function supply set, as its bias functions has not been referenced anywhere.
❖ SS3 is a four-function supply set, as its bias functions are explicitly resolved.
❖ SS4 is a four-function supply set, as one of its bias functions is explicitly referenced in a
connect_supply_net command.
This support is enabled by default. You can set the use_local_bias_for_isolation application variable
to false to disable this support.
Note
ISO1 uses TOP.primary and isolation cell is placed in parent domain of PD1 (which is again TOP). Hence
local bias is same as the bias supplies in isolation supply set, but the parser message is reported for ISO1.
bus("CTL_CLK") {
bus_type : "blah"
direction : input;
is_pad : true ;
related_power_pin : VIO;
related_ground_pin : VSS;
pin(CTL_CLK[0]) {
related_power_pin : VDD
related_ground_pin : VSS;
}
pin(CTL_CLK[1]) {
related_power_pin : VDD;
related_ground_pin : VSS;
}
}
VC LP supports is_pad attribute on bus bit when the ignore_pad_cell_xovers application variable is set
to false. By default, this application variable is set to false.
When the ignore_pad_cell_xovers application variable is set to true:
❖ VC LP automatically detects crossovers between *logic pins* (that have is_pad: true attribute)
directly driving or receiving top level ports and exclude them from doing ISO/LS checks.
❖ VC LP does not perform ISO/LS design checks for the path whose LogicSrc is top/input and
LogicSink is PAD input (is_pad true) and vice-versa.
Note
This is true, when the PAD cell is a global source or global sink. The crossover generation should not pass
through a PAD cell. You can disable this feature by setting the assign_port_supply_from_padpin
application variable to false.
❖ Case 1: When the pad cell is directly connected to the Top port.
In the design Top, the ports are directly driving and receiving pad pins, VC LP overrides the Top
port supply as PAD supply, and no ISO/LS/RAIL checks are performed on this crossover.
When the SPA/SRSN is defined on the Top port, but it is different than PAD pin, VC LP overrides
the Top port supply as the VDD_PAD supply and reports the UPF_PORT_SUPPLY violation, and no
ISO/LS/RAIL checks are performed on these crossovers.
❖ Case 3 : Isolation/Level Shifter Strategy is defined on the Top port to pad pin path
If the isolation and level shifter strategy is defined in the path of the Top port and PAD pin, VC LP
reports ISO_STRATEGY_PAD and LS_STRATEGY_PAD. VC LP overrides the Top port supply as
the PAD pin supply. All crossover based checks are performed considering the new supply. The
LS/ISO_INST_MISSING violations are not reported on this path.
❖ Case 4 : BUF/INV/Protection cell is driving pad pin
If buffers/inverters or ISO-LS cells are present in the path of the Top port and the PAD pin, VC LP
does not override the Top port supply with the pad-pin supply, and reports UPF_PAD_INTERNAL,
LS_INST_PAD, and ISO_INST_PAD violations. All checks on this path are performed considering
the actual supply.
❖ Case 5 : Top port connected to pad pin and standard cell.
If the same Top port is directly connected to is_pad true and is_pad false pins, then VC LP
reports the UPF_PAD_MIXTURE violation. VC LP does not perform checks on Top port to is_pad
true path. On Top port to is_pad false path, VC LP performs checks considering the new supply.
VC LP reports the UPF_PAD_MIXTURE violation for each possible combination when non-pad cells
are connected to pad cells combinations without any optimization.
❖ Case 6 : Top port connected to pad pins having different supplies.
If the same Top port is directly connected to is_pad true pins having different supply, then VC LP
reports the UPF_PAD_SUPPLY violation. VC LP does not override the Top port supply. VC LP
performs checks on the Top port to is_pad true path.
❖ Case 7 : Pad cell is directly connected to Top PG Port
In design Top, the PG ports directly driving and receiving pad pins. VC LP reports the
UPF_PORT_PAD violation for this issue. VC LP does not override the supply of the Top ports. No
ISO/LS/RAIL checks are performed on this crossover.
assign_port_supply_from_padpin
Scenario false assign_port_supply_from_padpin true
5.2.12.2.2 ISO_MAP_MISMATCH
The ISO_MAP_MISMATCH violation is enhanced to report violation when the strategy has no enable, but
the cell has, or vice-versa.
Example 2
create_supply_net V_VIRT
connect_supply_net V_VIRT -ports {U1/VDDSW U2/VDDSW}
### or ###
set_equivalent -function_only -nets {U1/VDDSW U2/VDDSW}
Consider the following lib Cell:
cell (i1) {
pg_pin (VDDSW) {
pg_function : "v1";
switch_function : "SW_EN"; …
cell (i2) {
pg_pin (VDDSW) {
pg_function : "v1";
switch_function : "SW_EN" …
If the VDDSW pin of an instance of i1 and the VDDSW pin of an instance of i2 are connected by a virtual net,
then the following four traces will be checked.
❖ i1/SW_EN connected to i2/SW_EN
❖ i1/V1 is connected to i2/V1
If the connection of the enable signal in switch function and input supply are not in consistency,
PSW_CONTROL_TRACE will be reported.
When isolation cell is clamping, PSW is on state (Transparent). That is not the correct behavior.
When isolation cell is clamping, retention cell in save state. That is not the correct behavior. ISO
clamp should not activate the retention cell states.
In case of RTL, VC LP starts in the fan-in from the policyAssocNode and based on the set/reset values, the
violations are reported.
Note
If there is an associated ISO cell for the policy, the RTL based check is ignored.
The library modelling is similar to a latch cell, with enable pin as iso_enable and cell is with
is_isolation_cell true. With set/reset triggered, the output is set to 1/0 regardless of the iso enable
sense.
ISO latch with async reset: iso_sense low and rst sense low
ISO latch with async set: iso_sense low and set sense low
ISO_ASYNC_PHASE Isolation async signal is the same for multiple isolation strategies
while their phases are different
ISO_ASYNC_STATE Isolation strategy supply on, but async set/reset supply off
Design checks:
ISO_ASYNC_UNDRIVEN Isolation latch cell set/reset pin does not have any
driver
In addition to this, tool will support all the checks similar to other control nets. Connectivity checks,
architectural checks and so on.
Example
Note
The default upf version is considered to be upf 1.0.
Examples
❖ disallow_upf_command create_supply_set
Consider the following UPF:
create_supply_set SS\
-function {power VDD}
If the command specified in the disallow_upf_command is used in the upf, the following error
message will be reported.
[Error] UPF_LINT_VIOLATED: Lint constraint is violated
Command 'create_supply_set' is disallowed for any upf version.
❖ disallow_upf_command create_supply_set -upf_version 2.0
Consider the following UPF:
upf_version 2.0
create_supply_set SS\
-function {power VDD}
top.upf
----------------------
upf_version 2.1
..
..
load_upf upf_3_0.upf
upf_3_0.upf
--------------------------
upf_version 3.0
..
..
Here in the child upf, upf version is set as 3.0. It is loaded in the parent upf with version 1.0
Since the constraint is given as disallow_load_upf_version -parent {1.0 2.1} -child 3.0 restricting version 3.0
inside 2.1, following parser error is flagged
upf_3_0.upf:1: [Error] UPF_LINT_UPF_VERSION_DISALLOWED: Disallowed upf version with lint constraint
The upf version '3.0' is disallowed in block when parent upf version is '2.1'.
Please specify a version which does not violate the lint constraints specified.
Note
The default value for severity is ERROR. You can change the severity of the parser message depending on
the requirement.
❖ VC LP ignores the disallow_upf_option for any other option specified in a UPF command, when
there is allow_upf_option specified for options in the same UPF command.
Example
Consider the following UPF snippet
upf_version 3.0
create_power_domain pd_always_on -exclude_elements {par_inst1}
allow/disallow command
allow_upf_option create_power_domain elements
allow_upf_option create_power_domain supply
allow_upf_option create_power_domain update
disallow_upf_option create_power_domain exclude_elements -upf_version 2.0
The following error messages are reported:
top.upf:2: [Error] UPF_LINT_VIOLATED: Lint constraint is violated Option '-exclude_elements' of command
'create_power_domain' is disallowed for any upf version. Please change related command/option/option value.
top.upf:12: [Error] UPF_LINT_VIOLATED: Lint constraint is violated Option '-primary_power_net' of command
'set_domain_supply_net' is disallowed for any upf version. Please change related command/option/option value.
In the example,
❖ For the same command (create_power_domain), the allow_upf_option takes precedence over the
disallow_upf_option command.
❖ The allow_upf_option command are already mentioned for the create_power_domain command,
and only options -elements/-supply/-update are allowed, therefore, for any other options of
create_power_domain, the [Error] UPF_LINT_VIOLATED is reported.
❖ If there is no allow_upf_option command for create_power_domain, VC LP checks the
disallow_upf_option create_power_domain exclude_elements -upf_version 2.0, and the
[Error] UPF_LINT_VIOLATED_UPF_VERSION is reported.
❖ Granularity based filter: [-elements option containing Port > Instance > Domain]
Strategies written by specifying ports in the –elements of the strategy has higher priority than the
strategies written by specifying the instance name in the –elements option. Strategies that do not
have –elements option has the least precedence.
❖ no_isolation based filter: [-no_isolation > (no -no_isolation)]
Strategies written with –no_isolation gets higher priority over the strategies that do not have it.
❖ The source/sink option based filter: [(both –source and –sink) > (exactly one of the –source or –sink) > (neither
–source nor -sink)]
Strategies having both the –source and -sink option gets higher priority over which is having
exactly one that is, either –source or –sink. Strategies which are not having any of the option –
source/-sink gets the least precedence.
The following strategies are written in the decreasing order in which they apply on boundary port
CORE1/out1. The number against each strategy indicates its precedence level.
11) set_isolation iso_15 -domain PD1 -elements {CORE1} -no_isolation -source SS_PD1 -sink
SS_PD2
12) set_isolation iso_16 -domain PD1 -elements {CORE1} -no_isolation -source SS_PD1 -
diff_supply_only true
12) set_isolation iso_17 -domain PD1 -elements {CORE1} -no_isolation -sink SS_PD2 -
diff_supply_only true
13) set_isolation iso_18 -domain PD1 -elements {CORE1} -no_isolation -source SS_PD1
13) set_isolation iso_19 -domain PD1 -elements {CORE1} -no_isolation -sink SS_PD2
After applying the precedence rules, if there exists multiple strategies with the same precedence level on
particular boundary port, the UPF_STRATEGY_RESOLVE violation is reported. Consider a case, if only two
strategies iso_2 and iso_3 mentioned above are present in UPF, then VC LP reports the
UPF_STRATEGY_RESOLVE violation as follows:
Tag : UPF_STRATEGY_RESOLVE
Description : Multiple resolved strategies found at [StrategyNode], only
strategy [Strategy] will be kept
Violation : LP:1
StrategyNode : CORE1/out1
Strategy : PD1/iso_2
IgnoredStrategies
Strategy : PD1/iso_3
Notes:
❖ Isolation strategy is having argument -applies_to, which can have values: inputs, outputs or both.
The -applies_to option does not play any role in the isolation precedence. It only helps to filter out
ports whether strategy has to be applied on inputs or outputs or both. The following two strategy
have the same precedence and VC LP reports the UPF_STRATEGY_RESOLVE violation:
set_isolation iso_1 -domain PD1 -elements {CORE1/out1}
set_isolation iso_2 -domain PD1 -elements {CORE1/out1} applies_to outputs
❖ Other flags like -location, -isolation_supply_set, and so on that are supported for the isolation
strategy do not play a role in isolation precedence.
module core1(in1,save1,restore1,out1,out2);
assign w1 = out1;
DMFD2 ff_1 (.D(in1),.Q(out1));
DMFD2 ff_2 (.D(w1),.Q(out2));
endmodule
module core2(in1,save1,restore1,out1);
DMFD2 ff_i21 (.D(in1),.Q(out1));
endmodule
And the following UPF snippet.
create_power_domain TOP
create_power_domain PD1 -elements {CORE1}
create_power_domain PD2 -elements {CORE2}
You can enable this support for the whole design using the following command at the top scope:
set_design_attributes -elements { . } -attribute lower_domain_boundary true
This feature is enabled for all the domains scoped at and below the top scope. Once enabled at the top most
scope, the feature is enabled for the entire design.
Any isolation policy that applies to the input pins/ports of the domain also applies to the output
pins/ports of the root cells of the domains nested inside it. Any isolation policy that applies to
the output pins/port of the domain also applies to the input pins/ports of the root cells of
domains nested inside it.
✦ Case 2: Isolation policy with –elements
Isolation policies that specifically choose the pins to which they are applied do not change. They
continue to apply to the pins/ports in the -elements option of the policy definition. However, the
policies refer to the pins on the lower boundary of the domain in their -elements option. This will
enables you to target an isolation policy specifically to the lower boundary.
✦ Case 3: Multiple isolation policies on the same boundary pin for back-to-back isolation cells
This case enables you to specify isolation policies such that two isolation cells can be inserted on
the same power domain boundary pin. One of these cells will be inserted in the power domain
and the other will be inserted in its surrounding domain.
❖ Level Shifter Policy Association
The level-shifter policy association is same as the isolation policy association.
❖ Crossover Creation
For crossover tree creation, if the lower_boundary_domain is used, then for every intermediate
boundary node, two policy_assoc nodes are created; one for loconn and one for hiconn.
As shown in Figure 5-76, for intermediate boundary ports, two policy association crossover nodes
are created, one for hiconn and another for loconn.
set_design_attributes in UPF. Using this attribute, verification tools can cross check and verify if the
block implementation level assumptions of boundary conditions are over constrained or under constrained
or at mismatch with the SoC level considerations.
When this attribute is set to true on an instance, the boundary ports of this instance become terminal points
for any global net. Any hierarchical instance which has this attribute, is expected to be integrated into a
bigger design.
Use Model
create_power_domain PDA -include_scope
set_design_attribute -elements {.} -attribute terminal_boundary true
The default value is false. It can be specified on any hierarchical instance which is a power domain
boundary.
The following checks are introduced for the terminal_boundary option:
❖ A driver/receiver_supply attribute or set_related_supply_net on the primary input/output
of a block is required where the terminal_boundary attribute is specified, else the
TERMINALBDRY_PORT_UNCONSTRAINED message is issued for the read_upf command and
the rest of checks are skipped.
❖ Based on the driver/receiver_supply, the constraints path is either marked as Overconstrained
or Underconstrained.
✦ Overconstrained: Consider the following example:
Note
Similarly, the UPF_SPADRIVER_STATE violation is reported for the SPA -driver_supply constraint.
The UPF_SPASUPPLY_VOLTAGE Violation Example
Tag : UPF_SPASUPPLY_VOLTAGE
Description : Voltage difference between supply of actual driver/receiver
and constrained supply for SPA constraint on [ConstraintNode]
Violation : LP:1
ConstraintNode : P
ReceiverNode : blk2/I1/A
ConstraintInfo
PowerNet
NetName : Vblk1b
NetType : UPF
PowerMethod : FROM_UPF_RECEIVER_SUPPLY
ReceiverInfo
PowerNet NetName : Vtop
NetType : Design/UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
TerminalBdry : true
Internal : True
UPFCommand
Command : set_port_attributes
FileName : constraint.upf
LineNumber : 2
❖ Strategy association checks are handled differently on terminal boundary nodes. Consider the
following example:
The -traverse_macros option allows the find_objects command to descend and traverse all hierarchies
without stopping at any boundary marked as UPF_is_soft_macro or terminal_boundary using the
set_design_attribute command. Even with this option, the traversal will stop at standard cells and hard
macro boundaries. If the -traverse_macros option is specified, then -transitive TRUE is implicitly
specified. This traverse_macros command only supports the -object_type model/inst option.
❖ If the -traverse_macros option is specified with -object type other than model or inst, the
UPF_FIND_OBJECTS_TRAVERSE_MACROS_INVALID_OBJECT_TYPE parser warning is
reported, and the traverse_macros option is ignored.
Example
find_objects . -pattern in1 -object_type port -traverse_macros
[Warning] UPF_FIND_OBJECTS_TRAVERSE_MACROS_INVALID_OBJECT_TYPE: Invalid object
type for -traverse_macros option
Option -traverse_macros can be specified only with '-object_type model/inst' in command 'find_objects'. The
option will be ignored.
'-traverse_macros' can be specified only with '-object_type model/inst'.
❖ When -traverse_macros option is specified without -object_type
UPF_FIND_OBJECTS_TRAVERSE_MACROS_DEFAULT parser warning message is reported. VC
LP continues to return the default types outside macros, but only objects of type 'instance' inside
macros will be returned.
Example
find_objects . -pattern * -traverse_macros
[Warning] UPF_FIND_OBJECTS_TRAVERSE_MACROS_DEFAULT: Only return some objects when -
object_type isn't specified
By default, instances, named processes, logic ports, and nets are returned when -object_type is not specified.
When -traverse_macros is specified, tool continues to return the default types outside macros, but returns only
objects of type 'instance' inside macros.
Example:
Design:
module top(in);
input in ;
BUF u_BUF(.DiffClkIn0_H(in));
endmodule
UPF:
create_power_domain PD_P1 -elements { u_BUF}
In this example, BUF is leaf cell (without function).
VC LP allows this leaf cell to be used with the create_power_domain PD_P1 -elements command.
5.3.17 Support for Leaf Cell Pins in the -control_port Switch of Power Switch Strategy
VC LP has introduced the allow_pins_in_psw_control_port application variable for supporting leaf cell
pins in the -control_port switch of power switch strategy.
By default, the allow_pins_in_psw_control_port application variable is set to false, and VC LP reports
error message when leaf cell pins are used in the -control_port switch of a power switch strategy.
Example
Consider the following UPF snippet:
create_power_switch SW_PD_P1 \
-domain PD_P1 \
-input_supply_port {vin VDD} \
-output_supply_port {vout VDDINT_P1} \
-control_port {sleep {u_pd_inv/ZN}}
The following error message is reported for this example when the allow_pins_in_psw_control_port
application variable is set to false:
test.upf:40: [Error] UPF_OBJECT_NOT_FOUND_ERROR: Object not found
Object 'u_pd_inv/ZN' of type 'Net' specified with command option 'create_power_switch -control_port' could not be
resolved. Resolved Path 'Instance /u_pd_inv(INVD1HVT:test.v:5)'. Unresolved Path 'ZN'.
Please specify a valid object.
When the allow_pins_in_psw_control_port application variable is set to true, VC LP does not report an
error when a leaf cell's pin is mentioned in the -control_port switch of power switch strategy.
If you have intentionally used the -force_shift option in strategy, then you can ignore this
violation, else correct the strategy.
The LS_STRATEGY_FORCE violation is enabled by default. The severity of this violation is Warning.
❖ LS_INST_FORCE
As shown in the example in Figure 5-82, the level shifter instance is not required on the crossover
from source to sink, based on the supply states defined in the pst. However, in the UPF, level shifter
strategy is written with the -force_shift option. Also, a corresponding level shifter cell is present.
The LS_INST_FORCE violation is reported for such cases.
set_level_shifter ls_V1_out -domain PD_V1 -force_shift -location parent -applies_to
outputs -rule both
If you have intentionally used the -force_shift option in strategy, then you can ignore this
violation, else correct the strategy.
The LS_INST_FORCE violation is enabled by default. The severity of this violation is Warning.
Note
This feature is a custom feature and is controlled by additional variables. For more details on this support,
contact [email protected]. This is a LCA feature.
As shown in Figure 5-83, if the library pin has the related_power_pin, the pg_type of power pin must
have internal_power and its direction must be internal. The voltage_map written for the above
mentioned power pin must be considered for a crossing.
Figure 5-83 shows that there is a crossing between pin out1 of instance CORE1 and pin in1 of instance
CORE2. Both pins are at same voltage domain (as per UPF) and level shifter requirement is none. As per
voltage_map written at out1, the level shifter requirement is low_to_high. The LS_STRATEGY_MISSING is
reported for this scenario when the enable_voltage_map_ls_analysis application variables is set to
true.
Note
If connect_supply_net (CSN) is already written on the pin, it gets the priority over voltage_map. CSN
is already annotated on pins.
When the voltage_map attribute is considered for the level shifter checks,the VoltageValueMap debug field
is added for the level shifter violations.
Tag : LS_STRATEGY_MISSING
Description : Level shifter required on crossing from [Source] to [Sink], but
no strategy defined
Violation : LP:4
Source
PinName : CORE1/macro_vol_map_i1/Z
Sink : CORE2/and_i1/A
PstRuleValue : LH_TYPE
SegmentSourceDomain : PD1
SegmentSinkDomain : PD2
LogicSource
PinName : CORE1/macro_vol_map_i1/Z
LogicSink : CORE2/and_i1/A
DomainSource : CORE1/out2
DomainSink : CORE2/in1
SourceInfo
PowerNet
NetName : VDD1
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
VoltageValueMap : 1
SinkInfo
PowerNet
NetName : VDD2
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
The following violations are affected by the voltage_map library attribute:
❖ UPF_CROSSOVER_NOSTATE
❖ LS_INST_REDUND
❖ LS_INST_OPTIMIZE
❖ LS_INPUT_VOLTAGE
❖ LS_OUTPUT_VOLTAGE
❖ LS_INST_NOSTRAT
❖ LS_INST_OK
❖ LS_NOTHRESH_OK
❖ LS_INST_MISSING
❖ LS_INST_INCORRECT
❖ LS_STRATEGY_INCORRECT
❖ LS_STRATEGY_MISSING
❖ LS_STRATEGY_REDUND
❖ LS_NOSTRAT_OK
VC LP reports the following violations if the name specified in the -name_suffix and -name_prefix
options does not match with the associated instance. The severity of these violations is Warning and is
enabled by default. VC LP reports this violation when instance and strategy are associated to each other.
❖ ISO_INST_PREFIX: This violation is reported when the isolation instance name does not match with
the name_prefix option of the isolation strategy.
Example
Consider the following UPF snippet:
set_isolation iso1 -domain PD1 -applies_to outputs -isolation_supply_set TOP.primary -
clamp_value 0 -name_prefix lp_ -name_suffix _iso -isolation_signal iso_en -
isolation_sense low -clamp_value 0 -location parent
Consider the design as shown in Figure 5-84.
❖ LS_INST_SUFFIX: This violation is reported when the level shifter instance name does not match
with the name_suffix option of the level shifter strategy.
Consider the following UPF snippet:
set_level_shifter ls1 -domain PD1 applies_to outputs -rule low_to_high -name_prefix lp_
-name_suffix _lslh -location parent
Consider the design as shown in Figure 5-87.
As shown in Figure 5-88, as both supplies are at 1.5V, by default, VC LP does not report any warning or
error messages as this is the desired design behavior. However, you may have to insert special cells such as
diode buffers (for ESD protection), or same-voltage level shifter cells. VC LP reports violation for such
scenarios if the following application variable is set to true.
%vc_static_shell> enable_reporting_pst_equivalent_crossovers
By default, the enable_reporting_pst_equivalent_crossovers application variable is set to false.
When the enable_reporting_pst_equivalent_crossovers application variable is set to true, VC LP
checks if there is crossing between source and sink nodes which are PST equivalent, but are supplied by
physically different rails. VC LP reports the following violations.
The violations have the severity warning and are reported at check_lp -stage design.
❖ LS_SAMEVOLTXING_PWRGND
This violation reported when the source and sink are PST equivalent but, the power and ground rail
of the source and sink are physically different.
Tag : LS_SAMEVOLTXING_PWRGND
Description : Power and ground supplies for [Source] and [Sink] are at same
voltage but physical different
Violation : LP:1
Source
PinName : CORE2/xor_i1/Z
Sink : out1
SegmentSourceDomain : PD2
SegmentSinkDomain : TOP
LogicSource
PinName : CORE2/xor_i1/Z
LogicSink : out1
DomainSource : CORE2/out1
DomainSink : out1
SourceInfo
PowerNet
NetName : VDD2
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS2
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
SinkInfo
PowerNet
NetName : VDD
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
❖ LS_SAMEVOLTXING_PWR
This violation reported when the source and sink are pst equivalent but, only the power rails are
physically different.
Tag : LS_SAMEVOLTXING_PWR
Description : Power supplies for [Source] and [Sink] are at same voltage but
physical different
Violation : LP:3
Source
PinName : CORE2/xor_i1/Z
Sink : out1
SegmentSourceDomain : PD2
SegmentSinkDomain : TOP
LogicSource
PinName : CORE2/xor_i1/Z
LogicSink : out1
DomainSource : CORE2/out1
DomainSink : out1
SourceInfo
PowerNet
NetName : VDD2
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
SinkInfo
PowerNet
NetName : VDD
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
❖ LS_SAMEVOLTXING_GND
This violation reported when the source and sink are pst equivalent but, only the ground rails are
physically different.
Tag Description
Tag : LS_SAMEVOLTXING_GND
Description : Ground supplies for [Source] and [Sink] are at same voltage but
physical different
Violation : LP:3
Source
PinName : CORE2/xor_i1/Z
Sink : out1
SegmentSourceDomain : PD2
SegmentSinkDomain : TOP
LogicSource
PinName : CORE2/xor_i1/Z
LogicSink : out1
DomainSource : CORE2/out1
DomainSink : out1
SourceInfo
PowerNet
NetName : VDD
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS2
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
SinkInfo
PowerNet
NetName : VDD
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
The following figure illustrates the overdrive and underdrive modeling on a library cell's signal pin.
Counter Example
VDD = 1.0 v; Vod = 0.2 v ; Vud = 0.3 v
Legal voltage range of the driver = (1.0 -0.3): (1.0 + 0.2) = 0.7: 1.2
The following are the characteristics of the max_input_delta_overdrive_high and
max_input_delta_underdrive_high attributes:
❖ These attributes take only floating values.
❖ The default value of this attribute is 0.0.
❖ Negative values are not supported for this attribute.
❖ The new attributes are checked only on input or inout pins.
❖ These new attributes do not impact the crossover generation or policy to cells association.
❖ You can define the new attributes only on power switch cells, level shifters, macros, and pad cells.
❖ If these attributes are present on any other type of cells, then VC LP does not flag any warning or
error for these scenarios.
❖ VC LP considers root_supply_net of the load, based on the precedence (SRSN > PG > CSN >
Strategy, > Domain).
❖ VC LP reads the new attributes and modify the checking of all tags where voltage violations are
reported.
❖ Triplet support is available on both, none, and correlated supplies.
❖ No new checks are added for the new attributes.
Use model
❖ In the example in Figure 5-92, if the driver Supply (PST wise) which is driving the ENB input pin is
lower than the input_signal_level, then the DESIGN_VOLTAGE_LEVEL violation is reported.
Therefore, the LS_INST_MISSING check is ignored. The DESIGN_VOLTAGE_LEVEL violation
disabled by default.
Tag Description:
Tag : DESIGN_VOLTAGE_LEVEL
Description : Enable pin with higher input_signal_level driven by immediate
source which is at low voltage
Violation : LP:5
LogicSource
PinName : psw_ctrl
LogicSink : psw_i2/ENB
SourceInfo
PowerNet
NetName : vddout
NetType : Design/UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : Design/UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
VoltageValueMap : 1.3
SinkInfo
PowerNet
NetName : vddin
NetType : Design/UPF
PowerMethod : FROM_PG_NETLIST
GroundNet
NetName : VSS
NetType : Design/UPF
GroundMethod : FROM_PG_NETLIST
InputSignalLevel : 1.4
States
State : pst1/s1
❖ In the example in Figure 5-92, if the driver Supply (PST wise) which is driving ENB input pin is
higher than or equal to input_signal_level, then it is a valid design scenario. Therefore,
previously the LS_INST_MISSING violation was ignored, and there is no violation reported on the
same crossover.
Note
VC LP issues TCL_INV_ATTR warning message for unknown attributes defined in set_port_attributes and
set_design_attributes commands. Same message is issued for each and every ports,models and
elements.
Example
set_port_attributes -ports {mod1/cell0/D cell1/CP } -attribute unknown true
<File_name>:<Line_Number>: [Warning] TCL_INV_ATTR: Invalid Attribute specified
Invalid Attribute 'unknown' specified in command 'set_port_attributes'. Attribute will be ignored.
Please refer to the 'User Guide' for supported attributes.
receiver_supply -port > receiver_supply -element > set_related_supply_net > related supply as domain's primary
Note
The supply net resolution for level shifter checks does not consider the iso_source or iso_sink attribute.
Unlike SRSN, these set port attributes on the libCell pin is ignored for supply net resolution.
5.3.23.2 Limitation
VC LP does not support the iso_source and iso_sink attributes for inout ports.
SPA -ports <port list> Error No Error (Filter out ports from
-applies_to < > set_port_attributes -ports { clk_A } - the port list)
applies_to outputs -driver_supply my_A -
receiver_supply my_A
[Error] TCL_OPT_DEPENDS: Incorrect
command options
'-applies_to' requires that '-elements'
must be specified in command
'set_port_attributes'.
Use Model
set_port_attributes -is_analog -ports <ports>
Example
Consider the following diagram. All the cell ports of the instance analog cell are analog ports. The cell
connections are with top level ports.
Note
Currently tool supports both top level and hierarchical level ports in the -ports option. Hierarchical level
ports support will be removed in a future patch release. False ANALOG_PIN_INCORRECT violations are
reported for SPA -is_analog for top level in-out ports. The ANALOG_PIN_INCORRECT violation is
disabled by default.
If during optimization, the purple_logic is removed, then post optimization VC LP associates strategy iso2
with the cell iso_i1 which might not be user intent.
If you specify the isolation cell instance name as snps_PD1__iso1_snps, then VC LP associates strategy iso1
even in the absence of the purple_logic.
For such cases, you can use the set_port_attribute resolved_iso_strategy command to specify the
isolation strategy association. The UPF command ensures the strategy iso1 gets associated with the
boundary port CORE1/out1.
set_port_attributes –ports CORE1/out1 –attribute resolved_iso_strategy PD1__iso1
If you do not want to associate any strategy with a particular boundary port, then attribute value can be
specified as snps_none.
set_port_attributes –ports CORE1/out1 –attribute resolved_iso_strategy snps_none
5.3.28.3 Examples
For the example in Figure 5-95, if you do not specify the set_port_attributes -feedthrough attributes,
VC LP reports ISO_STRATEGY_MISSING and ISO_INST_MISSING from and_i1/Z to MACRO/X.
Tag : ISO_STRATEGY_MISSING
Description : Isolation required on crossing from [Source] to [Sink], but
strategy missing
Violation : LP:1
Source
PinName : and_i1/Z
SegmentSourceDomain : TOP
Sink : MACRO/X
SegmentSinkDomain : PD1
LogicSource
PinName : and_i1/Z
LogicSink : MACRO/X
If you specify the following upf command,
set_port_attributes -feedthrough -model M -ports {X Y} // M is macro cell name
then VC LP reports ISO_STRATEGY_MISSING and ISO_INST_MISSING from and_i1/Z to and_i2/A.
Tag : ISO_STRATEGY_MISSING
Description : Isolation required on crossing from [Source] to [Sink], but
strategy missing
Violation : LP:1
Source
PinName : and_i1/Z
SegmentSourceDomain : TOP
Sink : and_i2/A
SegmentSinkDomain : TOP
LogicSource
PinName : and_i1/Z
LogicSink : and_i2/A
For the example in Figure 5-96, if you do not specify the set_port_attributes -unconnected attributes,
VC LP reports ISO_INST_MISSING and ISO_STRATEGY_MISSING with LogicSource: and_i1/Z and
LogicSink : MACRO/X.
Tag : ISO_STRATEGY_MISSING
Description : Isolation required on crossing from [Source] to [Sink], but
strategy missing
Violation : LP:1
Source
PinName : and_i1/Z
SegmentSourceDomain : TOP
Sink : MACRO/X
SegmentSinkDomain : PD1
LogicSource
PinName : and_i1/Z
LogicSink : MACRO/X
If you specify the following UPF command, and if the handle_hanging_crossover is set to false
set_port_attributes -unconnected -model M -ports {X} // M is macro cell name
set_app_var handle_hanging_crossover false
then VC LP reports ISO_STRATEGY_MISSING and ISO_INST_MISSING with LogicSource : and_i1/Z, and
LogicSink : MACRO/X with LogicSinkUnconnected : True
Tag : ISO_STRATEGY_MISSING
Description : Isolation required on crossing from [Source] to [Sink], but
strategy missing
Violation : LP:1
Source
PinName : and_i1/Z
Sink : MACRO/X
SegmentSourceDomain : TOP
SegmentSinkDomain : PD1
LogicSource
PinName : and_i1/Z
LogicSink : MACRO/X
LogicSinkUnconnected : True
-------------
If you specify the following upf command, and if the handle_hanging_crossover is set to true,
set_port_attributes -unconnected -model M -ports {X} // M is macro cell name
set_app_var handle_hanging_crossover true
then VC LP does not report ISO_*_MISSING violation for this crossover as MACRO/X is dropped from the
crossover.
5.3.29 Support for Feedthrough/Unconnected SPA Attribute Block Level Consistency Check
Currently, for SPA function attribute (buffered/inverted feed through), unconnected and feed through, you
can only specify black box, macro pad, and libcell using the -model option. The TOP module is not allowed,
it throws a warning and attributes are not retained. During block level validation, the specified models at
the -model at top level will become the TOP module. Therefore, during block level validation, the TOP
module should be allowed to be specified for -model option for SPA for the mentioned attributes to be
applied to TOP module. Starting with this release, the attributes feed through, function, unconnected with
model TOP will be read on block level flat run and if attributes are not matching design scenarios and the
following violations are reported.
The following new warning violations are introduced for these scenarios.
❖ UPF_SPA_NODRIVER: TOP level output port does not have a driver and without -unconnected
specification.
❖ UPF_SPA_NOLOAD: TOP level input port does not have a load and without -unconnected
specification.
❖ UPF_SPA_NOFEED: Wired feed through without UPF SPA -feedthrough specification.
Tag : UPF_SPA_NOLOAD
Description : Top port [TopLevelPort] has no load. Please model it using
set_port_attributes -unconnected
Violation : LP:5
TopLevelPort : save
Tag : UPF_SPA_NOFUNC
Description : Top port [TopLevelPortList] form powered feedthrough
[FeedthroughType]. Please model it using set_port_attributes -attribute function
Violation : LP:7
TopLevelPortList
TopLevelPort : in1
TopLevelPort : out1
FeedthroughType : Buffer
Limitations.
❖ UPF_FEEDTHRU_MODEL_TYPE_INVALID and UPF_INVALIDMODEL parser errors will be
flagged when top module is specified in SPA -model. They can be downgraded to warning from
below commands.
configure_read_tag -family upf -tag UPF_FEEDTHRU_MODEL_TYPE_INVALID -severity warning
configure_read_tag -family upf -tag UPF_INVALIDMODEL -severity warning
Note
This feature has Backward compatibility. So user can use both style
Limitations
The Pixl2 parser does not support this feature. Only the Plato parser is supports this feature.
5.3.32 Support for -update option for -source and -sink option in set_isolation command
VC LP supports the -update option for the -source and -sink option in the set_isolation command.
Example
set_isolation ISO1 -domain PD_SUB -elements {uSUB1/in1} -isolation_signal iso_en -
isolation_sense low -clamp_value 1
set_isolation ISO1 -domain PD_SUB -source PD_DUT.primary -sink PD_SUB.primary -update
Since this not supported by all SNPS tools, a parser message is introduced to notify the user.
[Info] UPF_ISOLATION_SOURCE_SINK_UPDATED: unset source/sink filter of isolation updated
Unset 'source' filter of isolation strategy: 'ISO1' has been updated.
This feature might not be supported across all tools of Synopsys.
In addition, if you update the previously defined source sink values, the following error message is
reported:
[Error] UPF_ISOLATION_SOURCE_SINK_UPDATE_INVALID: source/sink filter of isolation cannot be updated
The '<source/sink>' filter of isolation strategy: '<ISO strategy>' has already been set with a different value in <UPF
file>.
Cannot update source/sink filter if already set in a previous set_isolation command.
5.3.33.1 Example
Consider the example as shown in Figure 5-97.
Note
Without this feature, you had to define two ISO strategies so as to have different clamp value for ports,
using the SPA -clamp_value option, you need to define only one isolation strategy with different SPA -
clamp_value.
The following the UPF defined for the example in Figure 5-97, where different clamp_value is defined for
SPA.
set_isolation iso1 -domain PD1 -location self -applies_to output
set_port_attributes -elements {h1} -applies_to outputs -clamp_value 0
set_port_attributes -ports {h1/out24} -clamp_value 1
The following is the result of the ISO Strategy:
In the following example, VC LP honors SPA on all the port list of current scope except in1.
set_port_attributes -ports {*} -exclude_ports {in1} -driver_supply SS1
If the entire object list of -exclude_elements/-exclude_ports is not present in design, then VC LP
reports the following error message:
[Error] UPF_OBJECTS_NOT_FOUND: No valid objects in list
Object List specified with command option 'set_port_attributes -exclude_ports' resolved to an empty list.
If some of the object in -exclude_elements/-exclude_ports list are invalid, then VC LP reports the
following warning message:
[Warning] UPF_OBJECT_NOT_FOUND_WARN: Object not found
Object of type 'Port | Pin' specified with command option 'set_port_attributes -exclude_ports' could not be resolved.
✦ Hierarchical pin
✦ Macro input pin
✦ Primary output port
❖ When the supply set or net specified is a reference only supply.
❖ When the supply set/net is not available for use within the scope of the set of power domains
containing the set of ports to be attributed.
❖ When a port that is part of a bus is attributed with -literal_supply, but attributed values are not
same for every port of the bus.
Considerations of the supply for the literal_supply Option
❖ No Policy or only LS policies between literal constant and immediate sink: If no policies or only
LS policies are there between the constant and the sink, the supply of the literal constant node is
considered same as the literal_supply.
❖ Single ISO policy between literal constant and immediate sink: If the clamp value of the isolation
policy present on the path between constant and the sink matches with the constant value, the
supply of the literal constant node is considered as the literal_supply.
❖ Multiple ISO policies between literal constant and immediate sink: If the clamp value of all the
isolation policies present on the path between constant and the sink matches with the constant value,
the supply of the literal constant node is considered as literal_supply.
❖ Multiple literal_supply attributed for same design path: If multiple supplies are attributed for the
same path, the nearest attributed supply to the literal constant is considered as literal_supply.
GroundMethod : FROM_UPF_POWER_DOMAIN
LiteralInfo
PowerNet
NetName : VDD_LIT
NetType : UPF
PowerMethod : FROM_UPF_LITERAL_SUPPLY
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_LITERAL_SUPPLY
States
State : pst1/s2
UPFCommand
Command : set_port_attributes
FileName : top.upf
Note
The literal_constant_to_sink_internal application variable is set along with the
literal_constant_to_sink or literal_constant_to_sink_all application variables.
Example 1
set_port_attributes -literal_supply {MID_PD.primary} -ports {MID/BOT/M2/in2}
Literal supply is considered as MID_PD.primary.
Example 2
set_port_attributes -literal_supply {MID_PD.primary} -ports {MID/in}
set_port_attributes -literal_supply {TOP_PD.primary} -ports {MID/BOT/M1/in1}
Here, the MID_PD.primary is considered as literal supply, as Mid/in is the nearest attributed node to the
literal constant.
These violations belong to UPF Stage, with severity warning and belong to the Family UpfConsistency. These
violations are enabled by default.
5.3.36.1.1 UPF_SPAINOUT_STATE
If there is a PST state where -driver_supply is OFF and -receiver_supply is ON or vice versa, then VC
LP reports the UPF_SPAINOUT_STATE violation.
Tag : UPF_SPAINOUT_STATE
Description : Isolation needed between SPA driver supply and receiver supply for SPA
constraint on [ConstraintNode]
ConstraintNode : inout1[2]
DriverInfo
PowerNet
NetName : VDD_SPA_DRIVER
NetType : UPF
PowerMethod : FROM_UPF_DRIVER_SUPPLY
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_DRIVER_SUPPLY
ReceiverInfo
PowerNet
NetName : VDD
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
UPFCommand
Command : set_port_attributes
FileName : spa_driver_on_inout_vector_port.upf
LineNumber : 35
5.3.36.1.2 UPF_SPAINOUT_VOLTAGE
If there is a PST state where -driver_supply and -receiver_supply are working on different voltages,
then VC LP reports the UPF_SPAINOUT_VOLTAGE violation.
Tag : UPF_SPAINOUT_VOLTAGE
Description : Voltage difference between SPA driver supply and receiver supply for
SPA constraint on [ConstraintNode]
Violation : LP:2
ConstraintNode : inout1[2]
DriverInfo
PowerNet
NetName : VDD_SPA_DRIVER
NetType : UPF
PowerMethod : FROM_UPF_DRIVER_SUPPLY
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_DRIVER_SUPPLY
ReceiverInfo
PowerNet
NetName : VDD
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
UPFCommand
Command : set_port_attributes
FileName : spa_driver_on_inout_vector_port.upf
LineNumber : 35
Note
This does not mean all the elements are retained by just specifying them in the
retention_element_list of set_retention_elements command. You must write the retention
strategy in order to retain it.
Figure 5-100 depicts an example scenario where rule 1 (a) is violated, and hence the following error message
is reported:
[Error] RET_ELEM_MIXED: Retetion element list has both retained and non retained elements
Retention element list RET_LIST_1 has both retained and non retained elements, please refer to dump file for
details:./vcst_rtdb/lpdb/debug_reports/RET_ELEM_MIX.rpt.
The RET_ELEM_MIXED violation dumps details of retained and non-retained elements into a separate file
for users to check.
The details in the dump file: set_retention_elements list name, all the elements in the list, retained elements
with retention strategy info and non-retained elements:
Figure 5-102 depicts an example scenario where rule 1 (b) is violated, and hence the following error message
is reported:
[Error] RET_ELEM_DOMAIN_EXTENT: Elements retained in domain extent
Object u1/R2 of RET_LIST_1 is not retained whereas some objects of domain PD2 are retained
❖ PG_STRATEGY_CONN
Currently, the PG_STRATEGY CONN violation is reported for isolation and retention strategies
when there is a mismatch in the supply specified in the strategy and the supply connected to
primary/backup pg pins in design.
The PG_STRATEGY_CONN is also reported when the supply referred in -supply_set option of
create_power_switch command does not match with the supply connected to pg pins in the
design.
create_power_state_group G4
add_power_state -group G4 -state S2 \
{-logic_expr {(G3 == S9) && (SS3 == P3)}}
create_power_state_group G5
add_power_state -group G5 -state S1 \
{-logic_expr {(pst1 == s1) && (G1 == s1)&& (SS4 == P4)} }
Note the term G3 == S9. This means that group G4 is in power state S2 when group G3 is in power state S9,
plus some other conditions. This expression enables you to make top level constraining power states.
Normally, a constraining top level power state table must repeat all the values of the individual supply nets.
However, now the top level power state group can refer to the state names of the lower level tables instead,
which is more compact and readable.
The shorthand method takes the default supply set of that domain. However, using shorthand syntax can
sometimes create ambiguity.
Consider the following example:
create_supply_set primary …
add_power_state -domain TOP_Domain … -logic_expr {primary==s11}
In the second line, there is an ambiguity of whether the reference is to the standalone supply set with the
name "primary", or to the shorthand reference to the primary supply set of TOP_Domain. To avoid this
ambiguity, use the dot slash notation.
add_power_state -domain TOP_Domain… -logic_expr {./primary==s11}
Therefore, the example without './ ' refers primary supply set of TOP_Domain, and the example with the ./
notation refers standalone supply set.
create_power_state_group Group
add_power_state -group Group -state S1 {-logic_expr {(TOP == TOP_ON ) && (PD1 == PD1_ON
)}}
top.upf:4: [Error] UPF_STATE_NOT_DEFINED_ERROR: State not defined on objectState 'ON' not defined on
object 'TOP.primary' specified in 'add_power_state -logic_expr'. Please add the state on the specified object or provide
a correct name of state.
Starting with this release, the above example is a valid UPF and no error message is reported.
Notes
❖ VC LP requires the predefined ON and OFF states to be fully defined before any action commands
are performed.
❖ VC LP issues an error at read_upf stage when predefined ON and OFF states are not fully defined
using supply expressions in the UPF.
❖ If you redefine these predefined states after referring (as in the above example), you should use -
update option with the add_power_state command. Else, an error message is reported.
❖ If you redefine these predefined states before referring, the -update option in the add_power_state
command is optional. VC LP supports both ways, with -update or without -update.
❖ These predefined state names ON and OFF are case sensitive.
create_power_domain PD1
add_power_state -domain PD1 \
-state HV \
{-logic_expr {PD1.primary == ON && default.retention == ON}}
create_power_state_group TOP_G
add_power_state TOP_G -group -state ALL_ON \
{-logic_expr {top_ss == ON && core1_ss == ON } }
Note
You cannot create any two supply sets, domains or groups with the same name. For example, if a supply
set named X exists, and the add_power_state -domain X is executed, the command fails because there is
no domain with that name.
5.3.41.12 Example
This section contains three complete, small implementations using the same reference design. The first
implementation shows the old way using power state tables. The second implementation is compliant with
the 3.0 LRM, including all the supply set definitions.
The top level constraining power state information gives the valid system states:
❖ If PD_A is in RUN, PD_B can only be in RUN or IDLE
❖ If PD_A is in IDLE, PD_B can only be in IDLE
❖ If PD_A is in DOZE, PD_B can only be in DOZE
add_power_state -supply SA \
-state ON {-supply_expr {(power == {FULL_ON 1.2}) && \
(ground == {FULL_ON 0.0})}} \
-state OFF {-supply_expr {(power == OFF) && (ground == OFF)}}
add_power_state -supply SB \
-state ON {-supply_expr {(power == {FULL_ON 1.2}) && \
(ground == {FULL_ON 0.0})}} \
-state OFF {-supply_expr {(power == OFF) && (ground == OFF)}}
create_power_state_group GTOP
add_power_state -group GTOP \
-state run_run {-logic_expr {GA==run && GB==run}} \
-state run_idle {-logic_expr {GA==run && GB==idle}} \
-state idle_idle {-logic_expr {GA==idle && GB==idle}} \
-state doze_doze {-logic_expr {GA==doze && GB==doze}}
5.3.41.13 Notes
❖ Creating a group using create_power_state_group is a must before using it in the
add_power_state command.
❖ There are two ways of adding a state in a group, supply_set, supply_set_handle:
✦ Either specify all the states in one add_power_state command:
✧ create_power_state_group top_G
✧ add_power_state -group top_G -state ON_12 {-logic_expr {....}} \
-state ON_10 {-logic_expr {....}} -state OFF {-logic_expr {....}}
✦ Or specify different states in different add_power_state command. In this case, -update will be
required for each successive add_power_state command, that is:
✧ create_power_state_group top_G
✧ add_power_state -group top_G -state ON_12 {-logic_expr {....}}
✧ add_power_state -group top_G -state ON_10 {-logic_expr {....}} -update
✧ add_power_state -group top_G -state OFF {-logic_expr {....}} -update
5.3.41.14 Limitations
❖ Existing PST checks like PST_STATE_MULTIPLE, PST_STATE_INVALID,
PST_VOLATEGE_DROPPED, PST_VOLTAGE_UNUSED, PST_BIAS_PATH,
PST_SUPPLY_MULTIPLE and so on are not reported for this enhanced add_power_state support.
❖ Query command analyze_invalid_power_state is not supported for this feature.
Example
vc_static_shell> get_power_groups
{"core1_core2_G", "top_G"}
Example
vc_static_shell> report_group_state -only_valid top_G/all?12
The state name used in the add_power_state command is a property of the supply set, and not that of the
functional nets. So, the expected behavior is that the second add_power_state command should not result
in an error. In other words, state ON should be allowed on SS2.
Note
Actual internal state names may differ than listed below. This is for illustration purpose only.
STATE \
FUNCTION SS1.power SS1.ground
STATE \
FUNCTION SS2.power SS2.ground
The system PST is created by merging the mini-PSTs. In other words, the system PST has four states (cross-
product of SS1's mini-PST having 2 states and SS2's mini-PST having 2 states). As the two supply sets are
unconnected, all the four states of the system PST is valid. The system PST is as described Table 5-8.
Table 5-8 Result after merging the mini-PSTs
add_power_state SS1 \
-state ON1 {-supply_expr {power == {FULL_ON 1.0} && ground == {OFF}}}
add_power_state SS1 \
add_power_state SS2 \
-state ON3 {-supply_expr {power == {FULL_ON 2.0} && ground == {OFF}}}
add_power_state SS2 \
-state ON4 {-supply_expr {power == {FULL_ON 3.0} && ground == {OFF}}}
The mini-PSTs created for SS1 and SS2 are the same as listed in example 1. The system PST is created by
merging the mini-PSTs. But in this example, the two supply sets share the power net. Given this, Table 5-10
shows how the PST looks like after merging the mini-PSTs (see the Comments column to understand what
happens to each of the system states). The voltages of each of the states are listed within square brackets for
easier understanding of the final result.
Table 5-10 Result after merging the mini-PSTs
SYSTEM_STATE_1 ON1 [1.0, OFF] ON3 [2.0, OFF] Will be dropped because of
conflicting voltages for the
shared power net
SYSTEM_STATE_2 ON1 [1.0, OFF] ON4 [3.0, OFF] Will be dropped because of
conflicting voltages for the
shared power net
SYSTEM_STATE_3 ON2 [2.0, OFF] ON3 [2.0, OFF] Valid state, as the shared
power net is at the same
voltage 2.0 for both ON2 and
ON3
SYSTEM_STATE_4 ON2 [2.0, OFF] ON4 [3.0, OFF] Will be dropped because of
conflicting voltages for the
shared power net
So, the system PST has only one valid state as shown in Table 5-11.
Table 5-11 System PST
add_power_state SS1 \
-state ON1 {-supply_expr {power == {FULL_ON 1.0} && ground == {OFF}}}
add_power_state SS1 \
-state ON2 {-supply_expr {power == {FULL_ON 2.0} \
&& ground == {FULL_ON 0.0}}}
add_power_state SS1 \
Note
The TCL variable, if set to true, will have the highest precedence over design attribute
"enable_state_propagation_in_add_power_state" setting(s) in the design. Default value is false.
Note
If the upf_enable_state_propagation_in_add_power_state application variable is set to false (by default),
then new semantics is considered for entire design as long as it does not have
enable_state_propagation_in_add_power_state design attribute. If the design attribute is also set, then VC
LP gives priority to it.
enable_state_propagation_in_a
Features \ dd_power_state = TRUE (old enable_state_propagation_in_add_power_state =
Semantics semantics) FALSE (new semantics)
Boolean operators Are not allowed in supply_expr of Are allowed in supply_expr of add_power_state.
(&&) add_power_state.
State name Supply set state names will be Supply set state names will not be propagated to the
propagation propagated to the supply nets. functional nets. Internal state names will be created for the
functional nets.
Interpreting power Mini-PSTs are not created. Supply Mini-PSTs are created for the supply set states.
states set states are considered as port
states.
Referring to the The propagated state names can The supply set states can be referred only in GROUPs.
states be used in
create_pst/add_pst_state
commands.
Using create_pst Is allowed. The propagated supply Is allowed. However, the states that can be referred in the
set state names can be referred in PST are the ones added through the add_port_state
the PST. command.
enable_state_propagation_in_a
Features \ dd_power_state = TRUE (old enable_state_propagation_in_add_power_state =
Semantics semantics) FALSE (new semantics)
❖ You can declare electrical equivalence only on supplies which originate, and are connected, outside
of the design. Scenarios such as
✦ Supplies driven by a single top-level input port, that is, connection exists outside the design.
✦ Output PG pins of a macro, black box design (that is, connection exists inside the cell), or pad
cell.
❖ For electrical equivalence, this applies both to declared equivalence (with set_equivalent) and
direct connection between the supplies (with connect_supply_net). So, if supply A is directly
connected to supply B, and supply B is declared equivalent to supply C, then supply A is also
electrically equivalent to supply C.
❖ Functional-only equivalence is also transitive. If supply A is function-only equivalent to supply B,
and supply B is function-only equivalent to supply C, then supply A is also function-only equivalent
to supply C.
❖ Finally, functional-only equivalence is transitive across electrically equivalent supplies as well. That
is, if supply A is electrically equivalent to supply B, and supply B is function-only equivalent to
supply C, then supply A is also function-only equivalent to supply C.
{"VDD2"}
direction : "output";
power_down_function : "!VDD + VSS";
}
…
}
The power_down_function for an output pin may contain additional PG pins, other than the ones specified
as RPP and RGP.
Example
cell(Buffer_Type_LH_Level_shifter) {
is_level_shifter : true;
level_shifter_type : LH ;
pg_pin(VDD1) {
voltage_name : VDD1;
pg_type : primary_power;
std_cell_main_rail : true;
}
pg_pin(VDD2) {
voltage_name : VDD2;
pg_type : primary_power;
}
pg_pin(VSS) {
voltage_name : VSS;
pg_type : primary_ground;
}
pin(A) {
direction : input;
related_power_pin : VDD1;
related_ground_pin : VSS;
input_voltage_range ( 0.7 , 0.9);
}
pin(Z) {
direction : output;
related_power_pin : VDD2;
related_ground_pin : VSS;
function : "A";
power_down_function : "!VDD1 + !VDD2 + VSS";
output_voltage_range (1.1 , 1.3);
}
}
If the value of the power_down_function is 1, it means that the pin output is powered down.
To calculate the value of the power_down_function expression, power pin with value OFF is assumed to be
0 and ground pin that is OFF is assumed to be 1.
This violation is reported for cases where the power_down_function of an output pin becomes 1
when the immediate load supply is ON.
CORR_POWERDOWN_STATE (1 error/0 waived)
-----------------------------------------------------------------------------
Tag : CORR_POWERDOWN_STATE
Description : Signal from [Instance] to [ViolationSink] corrupted due to power
down function [PowerDownFunction].
Violation : LP:4
Instance : buf
PowerDownFunction : !VDD + VSS + !VDDAON
Cell : INTOBUF
CellPin : Z
SourceInfo
PowerNet
NetName : VDD1
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
SinkInfo
PowerNet
NetName : VDD3
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
States
State : pst1/R4
ViolationSink : SUB_A/buf2/I
IsIsolated : true
❖ CORR_POWERDOWN_FUNC
VC LP analyzes the complete LogicSource'LogicSink path for the ON - ON quadrant, and flag the
driver of an ISO cell, which might be a buf/inv/LS/ISO or LogicSource itself, gets PDF=1. This
violation is reported when an instance which is driving an isolation cell is becoming OFF because of
the power down function.
A sample violation will look like:-
Tag : CORR_POWERDOWN_FUNC
Description : Instance [Instance] Pin [CellPin] which is driving an isolation
cell is becoming OFF due to power down function [PowerDownFunction]
Violation : LP:19
Instance : u_pad_ana
CellPin : C
PowerDownFunction : !VDD+!VDDPST+VSS+VSSPST
LogicSink : i_aon_snk0/reg_pad_reg/D
Cell : PDDW04DGZ_H_G
LogicSource
PinName : u_pad_ana/C
DomainSource : u_pad_ana/C
DomainSink : i_aon_snk0/pad_in
SourceInfo
PowerNet
NetName : VDD_ANA
NetType : UPF
PowerMethod : FROM_UPF_CSN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_CSN
SinkInfo
PowerNet
NetName : VDD_AON
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : VSS
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
States
State : TOPLEVEL_PST/AON_on
To remove this inconsistency, you had to create dummy net in the UPF as shown in the figure below which
removes the inconsistency.
VC LP automatically generates internal power state tables based on the pg_function and
switch_function which eliminates the painful process of manually applying the port states and power
states.
To enable this support, set the enable_pst_from_pg_function application variable to true.
When you set the enable_pst_from_pg_function application variable to true,VC LP automatically
generates internal power state tables based on the pg_function.
The following is example of cell description with the important portions of the cell's liberty model.
VC LP generates following PST based on the pg_function for the internal switch.
Note
If you explicitly define the PST and set_app_var enable_pst_from_pg_funtion true, VC LP
considers the user-defined PST and checks happens based on user-defined PST, and not the
automatically created PST which VC LP generates.
❖ %vc_static_shell> analyze_pg_function
The following is an example of the text format reported:
Table 1
UpfNet : VDD
State : ON
State : OFF (off)
Enable : I_0_N_2
Constant : 0
PowerSwitches
InternalPin : psw_1/TVDD (generated)
❖ LS_SUPPLY_UNAVAIL
This violation is reported when there is a level shifter strategy and for a particular strategy node, the
source or sink supply is not available at -location specified in the strategy.
Consider the following UPF is defined for the example shown Figure 5-112, where the UPF supply
VDD is not defined for the power domain element CORE1.
create_supply_set SS_TOP –function {power VDD} –function {ground VSS}
create_supply_set SS1 –function {power VDD1} –function {ground VSS}
❖ UPF_REPEATER_UNAVAIL
The -repeater_supply attribute is a domain dependent supply, therefore for the domain port on
which the -repeater_supply is provided, if the -repeater_supply attribute is not available, then
UPF_REPEATER_UNAVAIL is reported.
Consider the following UPF is defined for the example shown in Figure 5-113, where the repeater
supply VDD is not defined for the power domain element CORE1.
create_supply_set SS_TOP –function {power VDD} –function {ground VSS}
create_supply_set SS1 –function {power VDD1} –function {ground VSS}
Create_supply_set SS_dummy
5.3.47.2 Limitation
VC LP should report an error parser message when hierarchical supply_sets/supply_set_handles are
used in the -available_supplies option of a create_power_domain command. However, VC LP does
not report any parser error message, and continues to compile the UPF.
Note
If you proceed despite the parser error, with the all_golden_upf_error_proceed application variable,
then the UPF_SUPPLY_RESOLUTION violation is reported.
For Example:
create_supply_net VDD -resolve strong
create_supply_net VDD -resolve parallel -reuse
This violation is reported when the same net has different resolution functions which are in different
scope, and they both are connected using connect_supply_net.
-----------------------------------------------------------------------------
UPF_SUPPLY_RESOLUTION (1 error/0 waived)
-----------------------------------------------------------------------------
Tag : UPF_SUPPLY_RESOLUTION
Description : Supply net [UPFSupply] resolution inconsistent related to its
drivers/connected nets with resolutions
Violation : LP:1
UPFSupply : VDDA_switched
DriverList
PortName : psw/VDDV
ResolutionList
Resolution : parallel
The UPF_SUPPLY_RESOLUTION violation is reported when multiple supply drivers are driving the same
supply net without resolution. You can provide an extended list of valid supply drivers using the
lp_macro_list application variable. This application variable can take the following values:
none, Cell name, *, false
❖ When the application variable is set to false, VC LP follows the default behavior.
❖ When the application variable is set to value: "*" (asterix), all the macro cells are considered as valid
drivers.
❖ When the application variable is set to "none", the following pins/ports are considered as valid
drivers.
❖ When the application variable is set to Cell name ("DMMACRO1 DMMACRO2"), in addition to the
"none" behavior, the following macro cell pins are considered.
backup_power/ground inout,output
internal_power/ground inout,output
Wild cards are supported when the variable is set to cell name. You can use the command in the
following methods.
set_app_var lp_macro_list {LNMACRO*}
set macro_list [get_lib_cells */LNMACRO]
append_to_collection macro_list [get_lib_cells */NLNMACRO_?]
set_app_var lp_macro_list $macro_list
[-elements element_list ]
[-exclude_elements exclude_list]
[-model model_name]
[-domain domain_name]
[-transitive [<TRUE | FALSE>]]
Where:
❖ The default value of -transitive is TRUE.
❖ The -type option is a mandatory option, and can take one of real, integer, seq, comb, port, process
arguments.
❖ The -elements, -exclude_elements, -model and -domain options accept any value.
VC LP parses and ignores the sim_corruption_control commands with the following info message:
[Info] UPF_COMMAND_IGNORED: Upf command ignored
The command 'sim_corruption_control' will be ignored.
VC LP performs the following syntax checks on the sim_corruption_control command.
❖ If the command does not have valid set of options, VC LP reports the TCL_OPTION_UNKNOWN
error message.
Example
sim_corruption_control -direction in -type port
FileName:LineNumber: [Error] TCL_OPTION_UNKNOWN: Option not known 'Unknown option '-
direction''
FileName:LineNumber: [Error] TCL_OPTION_EXTRA: Extra positional option specified 'Extra positional
option 'in''
❖ The -type option is mandatory, if the -type option is not specified, the following error message is
reported:
FileName:LineNumber: [Error] TCL_OPTION_MANDATORY: Mandatory option not found 'Required
argument '-type' was not found'
❖ If the command options do not have valid arguments, VC LP reports the
TCL_OPTVAL_INVALIDONEOF error message.
Example
✦ sim_corruption_control -type user_given
FileName:LineNumber: [Error] TCL_OPTVAL_INVALIDONEOF: Invalid one-of value specified 'Value
'user_given' for option '-type' is not valid. Specify one of: real, integer, seq, comb, port, process'
✦ sim_corruption_control -transitive user_given -type port
FileName:LineNumber: [Error] TCL_OPTVAL_INVALIDONEOF: Invalid one-of value specified 'Value
'user_given' for option '-transitive' is not valid. Specify one of: TRUE, FALSE'
[-exclude_elements exclude_list]
[-domain domain_name]
[-model model_name]
[-controlling_domain domain | -control_expr boolean_expression]
[-type <reset | suspend | kill>]
[-transitive [<TRUE | FALSE>]]
Where:
❖ The default value of -transitive is TRUE.
❖ All options are optional options.
❖ The -elements, -exclude_elements, -model, -domain, -controlling_domain and -
control_expr options accept any value.
VC LP parses and ignores the sim_assertion_control commands with following info message:
* Ignored with an info message
[Info] UPF_COMMAND_IGNORED: Upf command ignored
The command 'sim_assertion_control' will be ignored.
VC LP performs the following syntax checks on the sim_assertion_control command.
❖ If the command does not have valid set of options, VC LP reports the TCL_OPTION_UNKNOWN
error message.
Example
sim_assertion_control -direction in
FileName:LineNumber: [Error] TCL_OPTION_UNKNOWN: Option not known 'Unknown option '-
direction''
FileName:LineNumber: [Error] TCL_OPTION_EXTRA: Extra positional option specified 'Extra positional
option 'in''
❖ If the command options do not have valid arguments, VC LP reports the
TCL_OPTVAL_INVALIDONEOF error message.
Example
✦ sim_assertion_control -type unknown
FileName:LineNumber: [Error] TCL_OPTVAL_INVALIDONEOF: Invalid one-of value specified 'Value
'user_given' for option '-type' is not valid. Specify one of: reset, suspend, kill'
✦ sim_assertion_control -transitive user_given
FileName:LineNumber: [Error] TCL_OPTVAL_INVALIDONEOF: Invalid one-of value specified 'Value
'user_given' for option '-transitive' is not valid. Specify one of: TRUE, FALSE'
❖ If you specify both the -controlling_domain and -control_expr option, the
TCL_OPT_ATMOST_ONE_OF error message is reported.
sim_assertion_control -model modA -controlling_domain PD1 -control_expr {
(interval(clk_dyn posedge negedge) >= 100ns) }
FileName:LineNumber: [Error] TCL_OPT_ATMOST_ONE_OF: Incorrect command options
It is not legal to specify more than one of '(-controlling_domain, -control_expr)' in command
'sim_assertion_control'.
These checks are added to make VC LP compatible with the Synopsys implementation tools. In the
Synopsys implementation tools, error messages are reported when the scoped level supply net/supply set
is not available in the Top scope UPF, but they are used in the UPF commands.
In Synopsys implementation tools, the supply set must be available in the same scope or upper scope in
which the UPF command domain is created.
For designs where Synopsys implementation tools are not used, this message may be safely ignored. When
this message appears, the tool accepts and uses the supply set definition, but you need to change the UPF
before running Synopsys implementation tools.
5.3.56.1 COMPAT_SUPPLYNET_SCOPE
The COMPAT_SUPPLYNET_SCOPE violation is reported when the supply net is not available in the same
scope or upper scope in which the UPF power domain is created.
As shown Figure 5-114, the supply net VDD_CORE is created/available in the scope CORE. This Supply net
is not available in TOP scope. However, the supply net is used in TOP scope (set_domain_supply_net
/create_supply_set). Therefore, VC LP reports the COMPAT_SUPPLYNET_SCOPE violation.
5.3.56.2 COMPAT_SUPPLYSET_SCOPE
The COMPAT_SUPPLYSET_SCOPE violation is reported when the supply set is not available in the same
scope or upper scope in which supply set or the UPF power domain is created.
If the scope level supply set is used in the following commands and supply set is not available, VC LP
reports the COMAPT_SUPPLYSET_SCOPE violation.
❖ create_power_domain – supply, available_supplies
❖ set_retention – retention_supply_set
❖ set_isolation – isolation_supply_set
❖ set_level_shifter – input_supply_set, output_supply_set
As shown Figure 5-115, the supply set SS_CORE is created/available in the scope CORE. This supply set is
not available in TOP (PD_TOP) scope. However, this supply set is used in TOP scope command (for
5.3.57 Support for Syntax and Semantics Checks for VCT commands
When a supply net in UPF is connected to a HDL port which is not of supply_net_type* (SV struct or VHDL
record), a value conversion must be performed. When the HDL port drives the supply net, the HDL data
type value must be converted to UPF supply net type. When the supply net drives the HDL port, the value
of the UPF Supply Net must be converted to a value of the HDL data type of the HDL port. VCT is a value
conversion table that converts a value in HDL (verilog or VHDL) to a value in UPF or a value in UPF to a
value in HDL.
The following two commands can be used to create the conversion table
❖ create_upf2hdl_vct
This command defines a VCT for the supply_net_type.state value when that value is propagated
from a UPF supply net into a logic port defined in an HDL. It provides a 1:1 conversion for each
possible combination of the partially on and on/off states.
Syntax
create_upf2hdl_vct vct_name -hdl_type {<vhdl | sv> [typename]} -table {{from_value
to_value}*}
❖ create_hdl2upf_vct
This command defines a VCT from an HDL logic type to the state type of the supply net value (see
Annex B) when that value is propagated from HDL port to a UPF supply net. It provides a
conversion for each possible logic value that the HDL port can have.
Syntax
create_hdl2upf_vct vct_name -hdl_type {<vhdl | sv> [typename]} -table {{from_value
to_value}*}
Prior to this release, VC LP was just parsing and ignoring the above two VCT commands. VC LP performs
syntax checks, and reports the following parsing messages:
❖ UPF_VCT_NAME_NOT_UNIQUE
❖ UPF_MISMATCH_VCT_HDL_TYPE
❖ UPF_INVALID_VCT_HDL_TYPE
❖ TCL_OPT_INVALID_LIST
❖ UPF_INVALID_VCT_SUPPLY_STATE
❖ UPF_INVALID_VCT_HDL_VALUE
❖ UPF_INVALID_VCT_TABLE
❖ UPF_INVALID_ID
Examples
❖ create_upf2hdl_vct UPF_GNDZERO2SV_LOGIC -hdl_type {sv reg} -table {{OFF 0}
{FULL_ON 1} {PARTIAL_ON Z}}
Parser Message
test.upf:47: [Error] UPF_VCT_NAME_NOT_UNIQUE: VCT name is not unique
'UPF_GNDZERO2SV_LOGIC' is already used as vct name in UPF or a default vct.
Vct names must be unique in the global design scope.
❖ create_hdl2upf_vct stdlogic2upf_vss1 -hdl_type {sv Logic} -table {{0 FULL_ON} {H
OFF} {Z PARTIAL_ON}}
Parser Message
test.upf.upf:48: [Error] UPF_MISMATCH_VCT_HDL_TYPE: Hdl type is mismatch
'sv' is used with '-hdl_type' option of create_hdl2upf_vct, but the table value is H.
The table is defined for vhdl supply states but -hdl_type is sv.
❖ create_hdl2upf_vct stdlogic2upf_vss2 -hdl_type {svv Logic} -table {{1 FULL_ON} {0
OFF} {Z PARTIAL_ON}}
Parser Message
test.upf.upf:49: [Error] UPF_INVALID_VCT_HDL_TYPE: Incorrect Hdl type is specified
'svv' is used with '-hdl_type' option of create_hdl2upf_vct.
Valid hdl types with -hdl_type option are 'sv' and 'vhdl'.
❖ create_hdl2upf_vct stdlogic2upf_vss3 -hdl_type {sv Logic} -table {{FULL_ON} {0
OFF} {Z PARTIAL_ON}}
Parser Message
test.upf.upf:50: [Error] TCL_OPT_INVALID_LIST: Invalid string list value specified
Invalid string list '{FULL_ON}' specified with command option 'create_hdl2upf_vct -table'.
Please specify a valid string value.
❖ create_hdl2upf_vct stdlogic2upf_vss4 -hdl_type {sv Logic} -table {{1 FULL_ONN} {0
OFF} {Z PARTIAL_ON}}
Parser Message
test.upf:51: [Error] UPF_INVALID_VCT_SUPPLY_STATE: Invalid upf Supply State is specified
FULL_ONN is not a correct upf supply state.
The upf Supply State used with '-table' option of create_hdl2upf_vct is not valid.
❖ create_hdl2upf_vct stdlogic2upf_vss5 -hdl_type {sv Logic} -table {{0 FULL_ON} {1
OFF} {P PARTIAL_ON}}
Parser Message
test.upf:52: [Error] UPF_INVALID_VCT_HDL_VALUE: Invalid Hdl value is given
The hdl value P used with '-table' option of create_hdl2upf_vct is not valid.
Please provide a valid hdl value.
❖ create_hdl2upf_vct stdlogic2upf_vss6 -hdl_type {sv Logic} -table {{0 FULL_ON} {0
OFF} {Z PARTIAL_ON}}
Parser Message
test.upf:53: [Error] UPF_INVALID_VCT_TABLE: Incorrect VCT Table has been defined
Multiple entries found for value '0' in '-table' option of create_hdl2upf_vct.
Please provide a correct mapping.
❖ create_hdl2upf_vct 18 -hdl_type {sv logic} -table {{0 OFF} {1 FULL_ON} {X
PARTIAL_ON} {Z UNDETERMINED}}
Parser Message
test.upf:65: [Error] UPF_INVALID_ID: Invalid UPF Identifier
Identifier '18' in command 'create_hdl2upf_vct' is not properly named. As per UPF, the first character of an
identifier must be an alphabet. All other characters of a name shall be alphanumeric or the underscore character
(_).
Please specify a valid UPF Identifier.
5.3.57.1 Limitations:
❖ VC LP is not considering type name mentioned in -hdl_type switch for parsing checks.
✦ create_upf2hdl_vct vct_name -hdl_type {<vhdl | sv> [typename]} -table
{{from_value to_value}*}
✦ VC LP is not reporting errors for the following commands:
✧ create_hdl2upf_vct vct_1 -hdl_type {vhdl bit} -table {{0 OFF} {1 FULL_ON}
{X PARTIAL_ON} {Z UNDETERMINED}}
✧ create_hdl2upf_vct vct_12 -hdl_type {vhdl bt} -table {{0 OFF} {1 FULL_ON}
{X PARTIAL_ON} {Z UNDETERMINED}}
❖ VC LP is not checking hdl_type values.
✦ For example, bit data type is a two state value, but here X and Z hdl values are given, and VC LP
does not report error message for these hdl values. (Only 0 and 1 hdl values are supported)
create_hdl2upf_vct vct_12 -hdl_type {vhdl Bit} -table {{0 OFF} {1
FULL_ON} {X PARTIAL_ON} {Z UNDETERMINED}}
❖ Design attribute feature does not work with vct UPF commands.
❖ PG pin port direction interface does not work when it drives a supply net or is driven by a supply
net.
❖ The connect-supply_net -vct UPF command is not supported.
5.3.58 Support for Name Space Conflict between UPF and Design Logic Net/Port
The create_logic_port/create_logic_net commands may introduce conflicts if the design objects with
the same names are already present in the netlist.
Before synthesis, the logic port/net mentioned in the UPF does not exist in the RTL design. During
synthesis, the tool instruments the logic ports/nets as per these commands. As these names exist in the
instrumented gate level netlist, using the original UPF on the gate level netlist must not result in any error,
and the run must proceed with analysis.
VCLP reports a warning message in such cases and enable reapplication of the same UPF after synthesis.
VC LP reports the UPF_OBJECT_FOUND_WARN warning message:
❖ When create_logic_port is used with an existing design port
❖ When create_logic_net is used with an existing design net
VC LP silently accepts and does not report any warning message:
❖ When create_supply_port is used with existing design port
❖ When create_supply_net is used with existing design net
5.3.58.1 Example
Consider the following design:
module top (in1, in2, iso_en, clk, reset, out1, out2);
input in1, in2, iso_en, clk, reset;
output out1, out2;
endmodule
And The following UPF snippet:t
create_logic_port iso_en
create_logic_net iso_en
The following parser warning messages are reported for this example:
❖ case1.upf:13: [Warning] UPF_OBJECT_FOUND_WARN: Object already exists
Object 'iso_en' of type 'Port' is already present at case1.v,1. Cannot create UpfLogicPort with the same name
in command 'create_logic_port'.
Please specify a name which is not already created.
❖ case1.upf:13: [Warning] UPF_CMD_IGNORED: Ignoring erroneous command
Ignoring command 'create_logic_port' since it has errors.
Please correct the errors by looking at the log.
❖ case1.upf:14: [Warning] UPF_OBJECT_FOUND_WARN: Object already exists
Object 'iso_en' of type 'Net' is already present at case1.v,1. Cannot create UpfLogicNet with the same name in
command 'create_logic_net'.
Please specify a name which is not already created.
❖ case1.upf:14: [Warning] UPF_CMD_IGNORED: Ignoring erroneous command
Ignoring command 'create_logic_net' since it has errors.
Please correct the errors by looking at the log.
path during infer_source. With attribute is_on_clock_path, VC LP detects cells (like MUX & logic gates),
blackbox feedthrough cells, macro feedthrough cells, lib cells, protection cells (ISO/LS/ELS) and so on in
the clock paths. Using this attribute, you can write Tcl scripts to find all the cells that are on the clock path.
Example
The following Tcl script lists all the cells on the clock paths:
set gc [get_cells -hier *]
foreach i_gc $gc {
puts [get_attribute $i_gc "is_on_clock_path"]
Impact on existing support
The report_protection_cells_on_clock_path application variable provides a similar support but only
for low power protection cells. It is recommended to use the new attribute is_on_clock_path instead of
the report_protection_cells_on_clock_path application variable. Hence, the following message is
reported when the application variable report_protection_cells_on_clock_path is set to true.
<message>
Info: LP_CMD_DEPRECATED
The same PG pin can be used as 'related_power_pin' for one signal pin, and used as 'related_ground_pin'
for another signal pin.
Relative PG pin is only in macro cells, from leafcell derived cell level boolean attribute
'use_same_pin_for_power_and_ground' for cell using 'relative' PG pin. VC LP queries the attribute to check
if 'relative' PG pin is added in the cell. In UPF, both power supply net and ground supply net can have
positive voltage value. However, in a supply set, voltage of power must be higher than voltage of ground.
A net will be marked as relative signal net if at least one pin on the net connected with relative signal pin.
The net here is a flat net concept that it can cross hierarchical ports.
Relative supply nets or sets can only be used in the following UPF commands:
❖ create_supply_net
❖ connect_supply_net
❖ create_supply_set
❖ create_power_domain
❖ set_domain_supply_net
❖ set_port_attributes -driver_supply/receiver_supply
❖ set_related_supply_net
❖ add_port_state
❖ add_power_state
❖ associate_supply_set
✦ Level shifter strategy uses relative supply as source and sink supply.
✦ Repeater strategy uses relative supply as repeater supply, source and sink supply.
✦ create_power_switch uses relative supply for -input_supply_port/-output_supply_port and -
supply_set
✦ Retention strategy uses relative supply as retention supply.
5.3.61.3 Example
In the following example, in the supply set SS__VDD_PHY__VSS , VSS acts as ground and in the
SS__VDD_NEG__VSS, VSS acts as power. Therefore, VSS acts as relative power- ground net, since this net is
connected to I0/VL port, where the cell has derived use_same_pin_for_power_and_ground boolean
attribute.
create_supply_port VDD_PHY -direction in
create_supply_port VDD_NEG -direction in
create_supply_port VSS -direction in
create_supply_net VDD_PHY -resolve parallel
create_supply_net VDD_NEG -resolve parallel
create_supply_net VSS -resolve parallel
create_supply_set SS__VDD_PHY__VSS \
-function { power VDD_PHY } \
create_supply_set SS__VDD_NEG__VSS \
-function { ground VSS }
create_power_domain PD_TOP \
-include_scope \
-supply { primary SS__VDD_PHY__VSS }
-supply { extra_supplies_1 SS_VDD_NEG_VSS }
Note
The UPF_STRATEGY_RESOLVE violation with severity error is reported, if the precedence rules identify
multiple strategies that apply to the same port.
Note
The literal_constant_to_sink_internal application variable is set along with the
literal_constant_to_sink or literal_constant_to_sink_all application variables.
Dual rail ELS LS strategy input supply ISO strategy supply ISO strategy supply
(RPP, RGP of
output and enable
are same)
Top.upf: Error -
set_level_shifter ls2 -domain TOP -location other [UPF_STRATEGY_LOCATION_PWR_TOP_PAREN
T]
.Top.upf: Warning -
set_level_shifter ls2 -domain TOP -location other - [UPF_STRATEGY_LOCATION_PWR_TOP_PAREN
applies_to_boundary both T_WARN]
Top.upf: Error -
create_power_domain PD -elements {leaf} [UPF_STRATEGY_LOCATION_LOWER_BOUNDAR
set_level_shifter ls3 -domain PD -location other - Y_LEAF]
applies_to_boundary lower
Top.upf: Warning -
create_power_domain PD -elements {leaf} [UPF_STRATEGY_LOCATION_LOWER_BOUNDAR
set_level_shifter ls3 -domain PD -location other - Y_LEAF_WARN]
applies_to_boundary both
Macro.upf: Error -
set_design_attributes -models . -is_soft_macro TRUE [UPF_STRATEGY_MACRO_WRONG_LOCATION]
create_power_domain PD_MODEL1 -elements {.}
set_level_shifter ls -domain PD_MODEL1 -location
other -applies_to upper
Macro.upf: Error -
set_design_attributes -models . -is_soft_macro TRUE [UPF_STRATEGY_MACRO_WRONG_LOCATION]
create_power_domain PD_MODEL1 -elements {.}
set_level_shifter ls -domain PD_MODEL1 -location
other -applies_to both
Top.upf: Error -
create_power_domain TOP [UPF_STRATEGY_MACRO_WRONG_LOCATION]
create_power_domain PD1 -elements {macro_inst}
set_design_attributes -models macro -is_soft_macro
TRUE
set_level_shifter ls -domain TOP -location other -
applies_to_boundary lower
Top.upf: Error -
create_power_domain TOP [UPF_STRATEGY_MACRO_WRONG_LOCATION]
create_power_domain PD1 -elements {macro_inst}
set_design_attributes -models macro -is_soft_macro
TRUE
set_level_shifter ls -domain TOP -location other -
applies_to_boundary both
❖ Level shifters can be placed in the child domain for the lower boundary port.
Example
create_power_domain PDT
create_power_domain PDM -element {MID}
create_power_domain PDB -elemnet {MID/BOT}
set_level_shifter LS1 -domain PDM -applies_to_boundary both -applies_to both -location
other
Strategy LS1 would be insert as follows:
Tag : UPF_SUPPLY_EQUAL
Description : Voltage value difference between Power Net and Ground Net listed
under supply information [SupplyInfo] is zero.
SupplyInfo
PowerNet
NetName: VDD
NetType : Design/UPF
PowerMethod : FROM_UPF_POLICY
GroundNet
NetName : VSS
NetType : Design/UPF
GroundMethod : FROM_UPF_POLICY
SupplySet : SS
States
State : my_pst/R1
❖ UPF_SUPPLY_INSUFFICIENT (Error)
This violation is reported if based on the power states defined in the power intent for the supplies
associated with a supply set, there is a power state in which the power supply voltage is lower than
the ground supply voltage. Or, for uncorrelated triplet usage, the power min voltage is lower than
ground max voltage.
Example UPF extract
The ground supply voltage value of supply set SS is higher than power supply voltage
add_port_state VDD -state {ON 1.0}
add_port_state VSS -state {ON 1.2}
create_supply_set SS-function {power VDD} -function {ground VSS}
create_pst my_pst -supplies {VDD VSS}
add_pst_state R1 -pst my_pst -state {ON ON}
The following is an example of the violation reported:
Tag : UPF_SUPPLY_INSUFFICIENT
Description : Voltage value difference between Power Net and Ground Net listed
under supply information [SupplyInfo] is negative i.e. voltage value of Power Net is
lower than that of Ground Net.
SupplyInfo
PowerNet
NetName: VDD
NetType : Design/UPF
PowerMethod : FROM_UPF_POLICY
GroundNet
NetName : VSS
NetType : Design/UPF
GroundMethod : FROM_UPF_POLICY
SupplySet : SS
States
State : my_pst/R1
Notes:
❖ Supply sets explicitly declared in power intent and supply pairs that can be discovered resolving
connect_supply_net and set_related_supply_net commands using only the power intent are
considered as supply pairs for checks in UPF stage.
❖ If both UPF checks are disabled, all supply pairs found in PG stage will be considered as supply
pairs for PG stage violations instead of only the supply pairs discovered due to connections on
instances.
Violation:
-----------------------------------------------------------------------------
UPF_SIMSTATE_INCONSISTENT (1 errors/0 waived)
-----------------------------------------------------------------------------
Tag : UPF_SIMSTATE_INCONSISTENT
Description : Power state simstate of supply [UPFSupply] in set
[SupplySet] is inconsistent
Violation : LP:1
UPFSupply : VT1
SupplySet : ST1
PowerStateName : ST1/V1
Simstate : NORMAL
PowerStateInfoList
PowerStateInfo
UPFSupply : inst1/VB1
SupplySet : inst1/SB1
PowerStateName : inst1/SB1/V1
Simstate : CORRUPT
5.3.68 Support for Duplicate Port State Name with Different Voltages
VC LP allows users to define multiple ON states of the same name and different voltages on connected
objects. This feature is necessary when an IP's UPF which has port states defined is the same as the port
states defined in a different IP's UPF. Without the feature, the you should edit the IP's UPF to resolve ON
state conflicts.
An example of the ON states between the UPF in Top and the UPF in MID (IP) is shown in the figure. VC LP
no longer reports an error in such cases.
VC LP honors the following priority order when resolving the root supply for macro input pin:
(HighCon) SPA -receiver_supply > (HighCon) set_related_supply_net (SRSN) > Related Power Pin (RPP)
Limitations
[Warning] UPF_PORT_NOT_ON_BOUNDARY is reported when SPA is defined on Macro pin which is not
in a power domain boundary. This warning will be removed in the future releases.
5.3.71.2 When Both HighCon and LowCon UPF Constraints are Defined (SPA/SRSN)
VC LP honors the following priority order when resolving root supply for macro input pin
(HighCon) SPA > (HighCon) SRSN > Related Power Pin (RPP)
Example
❖ Macro/in1 root supply is resolved from the related power/ground supplies (RPP/RGP) of the
database.
❖ VC LP ignores the LowCon SPA/SRSN for root supply resolution.
Example 1
Root supply of Macro/in1 is resolved from (HighCon) SPA -receiver. The UPF_SPADRIVER_STATE is
reported for HighCon SPA -driver_supply when PST has state where SPA driver supply is on, but supply of
actual driver is off.
Example 2
Root supply of Macro/in1 is resolved from (HighCon) SRSN. The UPF_SPADRIVER_STATE is reported for
LowCon SPA -driver_supply when PST has a state where SPA driver supply is on, but supply of actual
driver is off.
Example 3:
A similar conflict would occur on a connected net group between two different IPs. In such cases, you can
redefine the port states at top scope for the required voltages on the required supply object. VC LP reports
an UPF parser error if there are no any port states defined for such supply objects at top scope.
Note
The add_pst_state command refers to supply states and port states. Support is available for port states
defined by add_port_state or add_supply_state.
Note
VC LP ignores the logic pins mentioned in the attribute value.
The ISO_ANALOG_ALLOW violation is reported.
The following is an example snippet of the ISO_ANALOG_ALLOW violation.
Tag : ISO_ANALOG_ALLOW
Description: Macro input isolation [CellPin] is transparent when enable supplies are
on, but source is off
CellPin: I
Instance: mac1
Cell: SINGLE_PG_MAC
DriverNode: modof/andgate/Z
SourceInfo
…
SinkInfo
…
Supplies
UPFSupply: VDDC2
States
State: pst/s1
The ISO_ENABLE_PGEXPR violation relies on the liberty attribute
isolation_enable_condition_allow_pg_pin. In isolation_enable_condition_allow_pg_pin liberty
attribute value, each supply pin must be negative unate. It must only appear in active low form. If these
values contain supplies with the active high form then, the ISO_ENABLE_PGEXPR violation is reported for
each supply.
Example
isolation_enable_condition_allow_pg_pin : !VDD1 & VDD2;
In the above example, VC LP reports ISO_ENABLE_PGEXPR violation for VDD2.
Tag: ISO_ENABLE_PGEXPR
Description: Active high supply [CellPin] ([Cell]) in isolation condition allowing pg
pin is not permitted
Violation: LP:2
CellPin: VDD2
Cell: SINGLE_PG_MAC
IsolationCondition: !VDD1 & VDD2
This also work for complex values such as !(V1 & I) because converted to the sum of products, the result is
"!V1 | !I".
Limitations
The liberty attribute equation must have supply pins only in active low form and only joined with OR
statements.
NetType : Design
StrategyNode : i2c/Z
Source
PinName : u2/uc/Q
SourceInfo
PowerNet
NetName : v2
NetType : UPF
PowerMethod : FROM_UPF_POWER_DOMAIN
GroundNet
NetName : vss
NetType : UPF
GroundMethod : FROM_UPF_POWER_DOMAIN
Strategy : d2/s2ac
SenseMismatch
MisSenseDesign : UNKNOWN
MisSenseUpf : HIGH
If the new attributes are not specified, VC LP assumes they are the same as the related_power_pin
Example for allow and partial block checks on macro outputs
Consider the following example design:
Given the supply of the isolation_data_power_pin (Vidpp) and a lp_signal_supply constraint on the
enable E, VC LP can perform an “allow” check on the path
Isolation_enable_condition of PO must be a single pin (E in this example); this pin may have direction internal
and does not need to be connected to a net in the design. The Real block check is not possible, since VC LP
does not get the logic source supply; VC LP can approximate use Vidpp, but false positives are possible.
Example for allow and “partial block” checks on macro inputs
Consider the following figure
6
Using VC LP in Various Design and
Verification Flows
This section describes how VC LP can be used in different hierarchal verification flow.
❖ “Hierarchical Verification Flows”
❖ “Golden UPF Flow”
❖ “Support for Static Abstraction Model Based Hierarchical Flow”
[Info] SM_EMPTY_SKIP: Marking empty Module/Entity as blackbox and warning [Warning] SM_BB_LIST:
Blackbox module list.
You can control the automatic black-boxing of the unresolved modules using the
autobb_unresolved_modules application variable. By default, the autobb_unresolved_modules variable
is set to true.
❖ When autobb_unresolved_modules are set to false, an instance that is unresolved is reported as an
error message (Error-[SM_URMI] Unresolved module instance in design) and the elaboration fails.
❖ When the autobb_unresolved_modules are set to true, the unresolved modules are considered as
black boxes and is reported as a warning message ([Warning] SM_UM_LIST Unresolved module list).
Alternatively, use the report_link command to get a report of the black-boxes and unresolved modules.
Examples
Location parent policy at black box top scope is also allowed from TOP scope
Location parent policy at black box top scope is also allowed from TOP scope.
6.1.1.7.2 PG checks
All the supply port of black box is considered as PG ports. All the PG checks are applicable on cells will be
applicable to these ports of black box as well.
For any violation that are issued related to any black box pins, VC LP reports the debug field
BlackBoxScope : True.
Example
Tag : PG_CSN_CONN
Description : UPF connect_supply_net [UPFSupply] does not match design supply net
[DesignNet] on pin [CellPin] of [CellType] instance [Instance] ([Cell])
UPFSupply : VDD1
DesignNet
NetName : VDDTOp
NetType : Design/UPF
CellPin : VDD
Instance : i_BlackBox
Cell : BlackBox
BlackBoxScope : True
Note
These consistency checks are not performed when SRSN is applied.
Example 1
For the example in Figure 6-4, the driver and receiver supply consistency checks details are provided in
Table 6-1 and Table 6-2.
Table 6-1 Driver Supply Consistency Checks
Note
When the lp_limit_spacheck application variable is set to true, the UPF_SPA_HIER violation is not
reported, as the UPF_SPA_HIER violation checks if the SPA is set on a hierarchical ports whose instance
is neither TOP, nor power_domain elements, nor power_scope instances.
6.1.1.10 Enhanced Black Box Flow (Attributes Dumping, Saving and Retrieving)
To perform relevant and correct checks at the top level, specific design characteristics need to be captured
from block level runs and use them at the top level. These design characteristics of the blocks (which are
black boxed at top level) are captured using set_port_attributes and dumped as attributes which can
then be used for top-level runs. These attributes could be specified by the user or tool can generate it from
block level analysis.
Constant Attributes:
This attribute captures the list of black box ports that are driven by constants (logic-const/tie-high/tie-
low/supply0/supply1)
Syntax
set_port_attribute -model <bbox_name> -ports {<bbox_port_name>}
-attribute SNPS_BLK_MODEL_TIED_VALUE {<1/0>}
-attribute SNPS_BLK_MODEL_TIED_NAME {hier_name_of_const}
Use Model
set_port_attributes -model core1 -ports {out1} \
-attribute SNPS_BLK_MODEL_TIED_VALUE {0} \
-attribute SNPS_BLK_MODEL_TIED_NAME {top/blackbox/LOGIC1}
Unconnected Attributes:
This attribute captures a list of ports of a black box model that are not connected to any internal logic. If such
a port is an input port, it means there is no logic within the model driven by the port; if such a port is an
output port, it means there is no logic within the model driving the port.
Syntax
set_port_attribute -model <bbox_name> -ports {<bbox_port_name>}
-attribute SNPS_BLK_MODEL_UNCONNECTED {<1/0>}
-attribute SNPS_BLK_MODEL_UNCONNECTED_NAME {hier_name}
Example
set_port_attributes -model bbox_top -ports {out2} \
-attribute SNPS_BLK_MODEL_UNCONNECTED {true} \
Saving Attributes
The write_bbox_data_model command saves the constant attributes (logic-const, tie-high, tielow, supply0,
supply1), unconnected attributes, isolation enable attributes from the block level run.
The write_bbox_data_model also saves the SPA -feedthrough attributes from primary inputs to primary
outputs in the blackbox flow. The -feedthrough attributes saved from a block level run, can be used in the
top level run. The -feedthrough is saved only when there is no logic between top input port and top output
port.
You can write black box port attributes during block level run using the following command.
%vc_static_shell> write_bbox_data_model [-path <directory_name>]
Where, -path is optional;
❖ If specified, a directory will be created with this name
❖ If not specified, a directory will be created with name $(design_top)_bbox_model in current working
area.
❖ It will dump the attributes in a file called bboxAttribute.upf and saves into the specified directory or
in $(design_top)_bbox_model in the current working area.
You must explicitly mention above command to write out these attributes to text files. You can also edit
these files to add/remove/update specific attributes.
For the feedthrough paths shown in the example in Figure 6-6, the write_bbox_data_model saves the
following SPA in bboxAttribute.upf.
set_port_attributes -feedthrough -model Blackbox -ports {in1 out1}
Note
It is your responsibility to load this file in top.upf for top level runs.
❖ By default, the get_blackbox command returns all the black box cells in the design.
❖ If -designs is specified, the get_blackbox command returns the user defined black box designs.
❖ The automatic means tool black box. For example, the module is empty or the module is unresolved.
The automatic black box doesn't include the user black box.
Use Model
%vc_static_shell>get_blackbox
{"chipCore_aop/pd_aop", "chipCore_aop/pd_dft_aop"}
6.1.1.14 Limitations
❖ The set_blackbox command is not allowed after design read.
❖ RTL (SIMON) Vs Tcl (VNR) flow differs for unresolved and stub models.
❖ Extracting attributes and propagating them across hierarchical black box (black box inside a black
box) is not supported.
❖ The map_isolation/level_shifter commands are ignored even though location parent policies
are not ignored.
❖ The unconnected attribute dumping is not happening properly for input ports.
❖ VC LP adds BB_CELL_ as prefix with Cell name (module name) of black box instance.
❖ The escape name in black box instance name is not treated as Blackbox_instance.
❖ Wildcard with "?" in "set_blackbox -cells" command gives an error.
❖ For Mx Design, hierarchical instance name is not supported in "set_blackbox -cells " " ".
❖ For Instance designed using generate block, Instance is not treated as black_box with "set_blackbox -
cells".
The following are the UPF requirements for an accurate (safe) hierarchical verification methodology:
❖ The external boundary constraints that impact the functionality of the level being verified must be
specified.
❖ These constraints must be visible and validated when verifying the parent level or the child level
set_port_attribute -driver_supply/-receiver_supply
or
set_related_supply_net for ports
In an LP design, these constraints must include the relationship between logic ports and their related
supplies. The ETM liberty model models this information and the associated UPF for the block has
additional information about these constraints such as power state table (PST).
When a block level ETM UPF is loaded for the scope of ETM or hard macro for doing top level verification,
VC LP:
❖ Automatically ignores block UPF constructs that are 'inside the scope of ETM' with a warning
message
Example: nested scope, load_upf inside ETM upf
❖ Preserves the UPF constructs of the block UPF which are at the scope of ETM boundary. These will
be used for top level verification.
Example: support ports, supply nets, switches, PST
With the preserved ETM UPF, VC LP does necessary checks for top-only verification by performing the
following checks:
❖ Driver/receiver Supply consistency checks at ETM logic boundary ports/pins
❖ PG pin consistency checks for the ETM pg_pins
❖ Crossover and other signoff checks for the ETM logic boundary ports/pins
Examples
set_scope myetm
By default, when multiple connect_supply_net are set on one library cell pg pin, VC LP would take the first
CSN, ignore the later ones, and report UPF_SUPPLY_PORT_ALREADY_CONNECTED on the ignored
CSN at read_upf parsing stage.
When the lp_allow_pg_pin_reconnection set to true, VC LP would take the last CSN, ignore the
previous ones, and report UPF_CONNECT_SUPPLY_NET_OVERWRITE on the ignored CSN at read_upf
parsing stage.
set_port_attributes -elements {.} -applies_to { inputs | outputs | both } does not apply
SPA on inout ports
Example
set inout_port_list [find_objects . -pattern * -object_type port -direction inout ]
set_port_attributes -ports $inout_port_list -driver_supply <supply_set1> -
receiver_supply <supply_set1>
These commands apply set_port_attribute driver/receiver supply on top level ports with inout
direction.
If SRSN on the top level inout port is specified, it overrides the default domain supply on the inout port. The
SRSN supply will be used for all protection and electrical checks on crossovers starting or ending at the
inout port of the DUT top.
It is a known DC compatibility issue that when a top level inout port has SPA or SRSN and it is honored, VC
LP uses the overriding SRSN/SPA supply for path based policy association, whereas DC does not.
The set_related_supply_net command is honored if the objects are specified at the top-most ETM scope.
Else, it is ignored.
The set_port_attributes -related_power/related_ground_port command is read, and a warning
message is reported, if these attributes are provided.
The -elements option supports ports and instances of a design. You can specify macros, hierarchical cells,
black boxes and pads in the -elements option.
To control filtering based on the -applies_to and -elements options, set the set_app_var
upf_isols_allow_instances_in_elements and the set_app_var
upf_iso_filter_elements_with_applies_to application variables to ENABLE.
6.1.2.15 Messages
❖ [Warning] UPF_SUPPLY_PORT_DIR_MISMATCH: Supply Port direction mismatch.
6.1.2.16 Limitations
Missing consistency checks between ETM.db and ETM.upf
❖ PG port direction mismatch checks.
❖ VC LP does not do voltage_map based consistency checks for the ETM liberty model and
corresponding UPF's port states for supply ports.
❖ Presence of internal_power and switch_function in ETM.db for corresponding
create_power_switch in ETM.upf.
6.1.3 Common Parser Level Limitations for Black box and ETM flow
The following UPF commands written above/at blackbox scope,
❖ For a list containing only elements which are inside bbox/ETM scope written above/at blackbox
scope, the [Warning] UPF_EMPTY_OBJ_LIST_BBOX is not reported.
❖ When referring designed objects which are inside bbox/ETM scope, from "at" bbox/ETM scope, the
[Warning] UPF_WITHIN_BBOX_ACCESS_WARN is not reported.
❖ For a list containing elements which are inside bbox/ETM scope and non bbox elements which are
not available written above/at blackbox scope, the [Warning] UPF_EMPTY_OBJ_LIST_MIXED is not
reported.
List of commands
❖ set_design_attributes -elements
❖ set_isolation -exclude_elements
❖ set_isolation -isolation_signal
❖ set_isolation -isolation_supply_set
❖ set_level_shifter -exclude_elements
❖ set_port_attributes -elements
❖ set_port_attributes -exclude_elements
❖ set_port_attributes -ports
❖ set_port_attributes -exclude_ports
❖ set_related_supply_net -object_list
❖ set_repeater -exclude_elements
❖ Pixl2/Plato messaging differences
❖ Reason: the empty list checks are not added for these commands to preserve cross tool compatibility.
The golden UPF flow maintains and uses the same, original golden UPF file throughout the flow. The DC
and ICC tools write power intent changes into a separate supplemental UPF file. Additionally, in some
cases, the DC or ICC may generate a name mapping file containing renaming rules.
VC LP uses a combination of the golden UPF file, the supplemental UPF file, and the name mapping file (if
it is generated) instead of a single UPF’ or UPF’’ file.
The golden UPF flow offers the following advantages:
❖ The golden UPF file remains unchanged throughout the flow, which keeps the form, structure,
comment lines, and wild-card naming used in the UPF file as originally written.
❖ You can use tool-specific conditional statements to perform different tasks in different tools. Such
statements are lost in the traditional UPF-prime flow.
❖ Changes to the power intent are easily tracked in the supplemental UPF file.
❖ You can optionally use the Verilog netlist to store all PG connectivity information, making
connect_supply_net commands unnecessary in the UPF files. This significantly simplifies and
reduces the overall size of the UPF files.
By default, the golden UPF flow is enabled in VC LP.
Figure 6-12 shows how the golden UPF file, supplemental UPF files, name mapping files, and Verilog
netlists with PG connectivity information are used by VC LP and other tools in the golden UPF flow.
For the golden UPF flow, the Synopsys Galaxy platform recommends generating a PG netlist, that is, all PG
connections exist within the netlist. Hence, the generated supplemental UPF file should be concise and only
contain information regarding the -no_isolation policies and the create_power_domain - update
command.
Therefore, it is expected that the netlist is either fully PG netlist connections in the design or is completely a
non-PG netlist (that is, all PG connections are in the supplemental UPF consisting of the
connect_supply_net commands). The golden UPF flow does not allow a partial mix of both.
# cleanup
unset hier_1
unset hier_2
6.2.4 Limitations
❖ The following are the limitations with the Golden UPF (GUPF) feature/flow support:
✦ synopsys upf_name_map pragma is not supported.
//synopsys upf_name_map design_name "verilog_file_name.nmf"
❖ The following is the limitation with the VC Static tool features when the GUPF flow is enabled:
✦ The all_upf_error application variable is not supported.
This variable is used when the UPF and/or the design is dirty. VC LP reports all UPF error at
once by using this application variable.
❖ The following UPF parser syntax checks are not yet added to the Golden UPF flow:
✦ [Error] UPF_MULT_DRV: Multiple driver cannot be added
✦ [Warning] UPF_SRSN_PDBP: SRSN on hierarchical boundary port.
✦ [Warning] UPF_LNSPEC: Location not specified. Please specify one of 'self/parent/automatic' as location
❖ The golden_upf_report_missing_objects application variable is not supported.
This variable enables the reporting of missing (unmapped) objects during UPF parsing. Design
Compiler (DC) supports this variable.
However, since the VC LP verification solution always reports on missing objects during UPF
parsing, there is no support for this variable.
benefits of using this flow (Top + SAM) includes less memory usage, improved run time, and focused
violations related to the top level integration.
Note
This feature is an LCA feature. Please contact [email protected] for more details on this feature.
6.3.1 Prerequisites
The following are the prerequisites for using the SAM feature.
❖ The VC-LP-ULTRA license key must be checked-out to create SAM models.
❖ The SAM flow is supported for netlist and RTL designs. You can have a Verilog netlist or a pg-
netlist.
Note
The SAM support documented below is for NETLIST and PGNETLIST designs. Support for RTL designs is
documented separately in section “New SAM Abstraction (Lightweight SAM) Model”,
❖ The same UPF design can be used at any stage of the run. You need not modify the UPF for the SAM
flow.
❖ If a PSW chain is available inside the abstraction boundary, a power switch strategy to match the
PSW chain must be present at the hierarchical UPF of the module. Else, the PSW chain is broken at
the nearest PSW cell in the SAM scope.
Example
There is a PSW chain inside the SAM boundary. Only the PSW instances connected to the SAM
boundary ports are retained. The other elements in the chain gets abstracted out. The following path
is retained:
✦ SAM input port -> PSW1_EN
✦ PSW5_ACK -> SAM output port
This will result in noise in the violations. For example, the PSW_CONTROL_CONN violation is
reported on the highlighted path.
Figure 6-15 Writing Abstract SAM Models for 3-layer Hierarchy Design
mark_lp_abstraction
write_verilog_abstract_model -file module_abs.v
❖ If the -path option is specified, the abstracted design is saved in the following file:
<path_name>/<Top_module_name>/verilog/<Top_module_name>_SNPS_VCSTATIC_INM_abstract.v
❖ If the -file option is specified, the abstracted design is saved in the specified file in the option.
Note
In netlist, mark_lp_abstraction is not mandatory, You can use check_lp for marking.
Notes
❖ The set_abstract_model command is used to specify the abstracted blocks. This helps VC LP parser
to deduce the SAM module scopes, and to ignore missing objects related issues created due to
abstraction.
❖ By default, UPF parser messages related to abstraction modules are suppressed to improve the
performance. To enable these messages, set the lp_disable_quietabs_in_read_upf application
variable to true.
❖ Only debugging purposes, VC LP dumps the abstracted design in near matching Verilog format.
write_abstract_model -debug_verilog
module core2_abs_top(in1,
in2,
VDD,
VSS);
input in1;
input in2;
input VDD;
input VSS;
VC LP shell output Design is not read as a netlist. But [Warning] DESIGN_READ_NOT_NETLIST: Design was
abstraction is attempted. not read in using the -netlist switch. Verilog netlist will not
be written out for the abstracted module
VC LP shell output Setting Verilog abstract model after [Error] COM_OPT015: set_abstract_model should be
reading UPF. used before design is loaded.
VC LP shell output Specifying a SAM module not [Warning] SAM_MODEL_NOT_FOUND: SAM Model not
available in the design and reading found.
the UPF SAM Model 'UNAVAIL_MODULE' specified not found in
design.
Please specify a valid model name for SAM.
VC LP shell output Specifying a SAM module not [Warning] SAM_MODEL_NOT_FOUND: SAM Model not
available in the design and reading found.
the UPF. SAM Model 'UNAVAIL_MODULE' specified not found in
design.
Please specify a valid model name for SAM.
Default
Application Variable Value Description
Default
Application Variable Value Description
6.3.9 Support to Retain Control Sources Driving Primary Outputs of a SAM Boundary
You can retain control sources driving primary outputs of a SAM boundary. You are advised to specify such
ports using one of the below methods.
❖ For priority 1: partial matched violations, for priority 2/ priority 3: debug field matching is not
considered.
❖ Implementation violations can partially match with multiple reference violations
The following new files are saved:
❖ OneToOne_Primary1DebugField_Partial_Matching.rpt
❖ OneToOne_Primary1DebugField_Partial_Matching.csv
❖ OneToMany_Primary1DebugField_Partial_Matching.csv
You should specify the partial matching candidate tags as follows:
configure_tag_updated.xml snippet
<Tag name="ISO_INST_MISSING">
<Priority value="0">
….
….
<Object>Source</Object>
<Object>Sink</Object>
</Priority>
<Priority value="1" partial="1">
<Object>LogicSink</Object>
<Object>LogicSource</Object>
</Priority>
</Tag>
Limitations
Currently this support has limitations. The fix do not properly categorize the multi-match.
It is recommended to use only up-to two Priority 1 debug fields for the partial matching as the initial
requirement was to support partial matching of LogicSource/LogicSink. Providing more partial matching
debug fields may impact on performance.
Note
The SAM architectural checks support has limitations in support and gaps in testing which is planned to be
addressed in the coming releases.
In the abstracted block, VDD2 is fully internal supply. In other words, it is not connected to any object
driving the SAM boundary or a strategy supply related to SAM boundary. Hence, it can be identified as
non-peripheral supply (NPS).
VDD1 and VDD3 supplies are driving cells which connected to the top, those can be identified as peripheral
supplies (PS).
6.3.11.3 Limitations:
❖ The add_power_state -group support is not available for NPS.
start_onthefly_distributed_run
exit
Notes
❖ All the application variables and tag configurations set in the setup file will be available in the block
level runs and also readback run
❖ The number of machines provided in the set_host_option should be more or equal to no expected
SAM modules. Otherwise, more than one SAM gen job will be posted on one machine and runs will
be executed in parallel.
❖ If the number of candidate module for SAM generation is "n", then the total n+1 license will be
consumed.
❖ Current sessions cannot be accessed and GUI, and TCL debug is not possible in the current session.
❖ All Block level runs and readback run is saved, and the you can restore the sessions in the run
location
Limitations
❖ TCL commands except for application variable and tag configurations are ignored (ex, infra_source)
❖ Only load_upf command is treated for identification of SAM module (set_scope is not supported)
❖ load_upf with different upf file for multiple instances of the same module is not acceptable
❖ Multi-layer SAM generation is not supported (If a design has multiple UPFs with a hierarchal
structure, then the block which most close to the top level will consider as SAM boundary)
❖ Cannot control the On The Fly SAM run
❖ Not supported for SAM-NPS and SAM++ flows
❖ Report and waiver files path cannot be provided from the user, reports are defined at the pre-
decided path.