Professional Documents
Culture Documents
VC SpyGlass Lint UserGuide
VC SpyGlass Lint UserGuide
VC SpyGlass Lint UserGuide
User Guide
Version P-2019.06-SP2, December 2019
Copyright Notice and Proprietary Information
© 2019 Synopsys, Inc. All rights reserved. This Synopsys software and all associated documentation are proprietary to
Synopsys, Inc. and may only be used pursuant to the terms and conditions of a written license agreement with Synopsys,
Inc. All other use, reproduction, modification, or distribution of the Synopsys software or the associated documentation is
strictly prohibited.
Destination Control Statement
All technical data contained in this publication is subject to the export control laws of the United States of America. Disclosure
to nationals of other countries contrary to United States law is prohibited. It is the reader's responsibility to determine the
applicable regulations and to comply with them.
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH
REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Trademarks
Synopsys and certain Synopsys product names are trademarks of Synopsys, as set forth at
http://www.synopsys.com/company/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
VC Lint User Guide Contents
Contents
ChapterContents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .v
Chapter
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
v About this Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Contents of this Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Chapter 1
Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Invoking VC SpyGlass Lint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.1 VC SpyGlass Lint Use Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.2 SpyGlass Lint Use Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.3 VC SpyGlass Lint Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.4 General output files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Chapter 2
Migrating from SpyGlass Lint to VC SpyGlass Lint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1 Converting the .lib Files to the .db Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Reading the Project Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3 Reading Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4 Using Tags and Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5 Working with SGDC Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6 Working with Violation Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.7 Convert SpyGlass Waivers to VC SpyGlass Lint Waivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Chapter 3
Working with Methodologies and Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Development Phases and Methodologies: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.1 Development Levels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.2 Development phases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 RTL Handoff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3.1 RTL Handoff with block level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.2 RTL Handoff with SoC level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.4 Netlist Handoff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.4.1 Netlist Handoff on block level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.4.2 Netlist Handoff on SoC level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.5 Layout Handoff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.6 Understanding GuideWare Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Chapter 4
Using VC SpyGlass Lint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.1 Invoking VC SpyGlass Lint in Tcl Shell Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2 Sourcing a Tcl Script in VC SpyGlass Lint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3 Building a Design File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3.1 Building a Design Using Analyze and Elaborate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3.2 Building a Design With read_file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4 Using Built-in Tcl Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.5 Running Lint Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.6 Reporting Violations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.7 Language Check Early Shifting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.8 Multiprocessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.9 Using Waivers in VC SpyGlass Lint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.9.1 Native VC SpyGlass Lint Waivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Chapter 5
Using Tags in VC SpyGlass Lint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.1 About VC SpyGlass Lint tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2 Creating the Configuration File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.3 Configuring Tag Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.4 Using Black Boxes in VC SpyGlass Lint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Chapter 6
VC SpyGlass Lint Tcl Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.1 check_hdl_lib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Chapter 7
Getting Started with GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7.1 Invoking and Running Lint Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7.2 Summary View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.3 Analyzing the Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.4 Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.4.1 Creating a Filter for a Set of Violations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.4.2 Creating a Filter From a single Violation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.4.3 Creating an Exclusive Subsets for Filtered Violations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.5 Waivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.5.1 Using Multiple Waiver Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.5.2 Specifying the Waiver File While Creating Waivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.5.3 Removing Waivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.5.4 Editing Waivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.5.5 Creating Waivers Data View Spreadsheet and Information View . . . . . . . . . . . . . . . . . . . . . . . . 57
7.6 Pivot Tables to filter Violations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.6.1 Creating A Pivot Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.6.2 Results of a Pivot Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.6.3 Cross-probing from Pivot Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.6.4 Creating Multiple Pivot tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.7 Exporting Violation Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Introduction
This chapter provides an overview of VC SpyGlass Lint and includes the following sections:
❖ “About this Guide” on page 7
❖ “Contents of this Manual” on page 7
Section Description
Migrating from SpyGlass Lint to VC SpyGlass Provides information on migrating from SpyGlass Lint to VC
Lint SpyGlass Lint
Working with Methodology and Goals Provides information on using methodologies and goals
Using VC SpyGlass Lint Provides reference information for the built-in Tcl commands
implemented in VC SpyGlass Lint
Using tags in VC SpyGlass Lint Provides detailed procedures for how to configure and use the
prepackaged tags to check your HDL code
VC SpyGlass Lint Tcl Variables Explains the setup required to run VC SpyGlass Lint
Getting Started With GUI Describes using VC SpyGlass Lint in the GUI mode
1
Getting Started
The VC Static Platform provides comprehensive high-performance and high capacity static verification
solutions for functional verification. Formal and static functional verification solutions may be used very
early in the design process and do not require complex setups, testbenches. Formal property checking needs
properties or assertions to be developed by the user. Formal mathematical techniques are used to test
properties or assertions to ensure correct operations of RTL designs. Static checking techniques analyze
design intent and structures to check conformance to specified intent and behaviors.
VC SpyGlass Lint is based on native VC platform, which provides enhanced performance and capacity. The
efficient framework of VC SpyGlass Lint is low noise and provides enhanced consistency.
This chapter provides an overview of VC SpyGlass Lint and includes the following sections:
❖ “Introduction”
❖ “Features”
❖ “Invoking VC SpyGlass Lint”
1.1 Introduction
VC SpyGlass Lint is a system-to-netlist checker tool that comes with prepackaged tags to check Verilog or
SystemVerilog designs against various coding standards and design tags.
After you elaborate your design in the VC SpyGlass Lint environment, you can use the built-in Tcl shell and
a set of predefined procedures to run interactive queries on your design. With full support for Verilog 2001
and IEEE Std 1800-2005 SystemVerilog design constructs, combined with extensive RTL and netlist checks,
VC SpyGlass Lint can check your designs for errors that may cause problems in the downstream simulation,
synthesis, and equivalence checking flows.The best way to learn the tool is to test one of your designs with
the Checker and the prepackaged policies (sets of tags). The prepackaged tags are designed to meet the best
coding guidelines and practices followed in the industry.
VC SpyGlass Lint is a design checker tool that comes with a rich set of prepackaged tags to check Verilog
and SystemVerilog designs against various coding standards and design tags.
You use the Checker to designate Verilog or SystemVerilog input files that you want to compare against
coding tags that you select with the click of a mouse. The Checker analyzes your Verilog and SystemVerilog
source code against the selected tags and generates a report indicating which lines in the code violate the
tags. You can then:
❖ Open the report in the GUI and debug the reported violations.
There are two general types of checks VC SpyGlass Lint performs, as shown in the following table:
Table 1-1 Types of Rules
Structural Rules Checks performed on the hardware inferred by the tool (Rules running on Netlist)
Language Rules Checks performed on the HDL language construct (Rules running on RTL code)
1.2 Features
VC SpyGlass Lint provides the following capabilities:
❖ Improved total runtime and PEAK memory.
❖ Unified compilation.
❖ Management of large memories and does not require options to handle large memories during
synthesis.
❖ Word-level traversal and avoidance of bit level traversal (if needed).
❖ Consistent handling of clocks and resets.
❖ Multi-message and multi-line support.
❖ Tag-specific reports.
❖ Noise reduction using the allviol parameter.
❖ V2k language support.
❖ VHDL2008 support
❖ Complete IEEE 1800-2005 System Verilog design constructs.
❖ Saving and restoring elaborated design view.
2
Migrating from SpyGlass Lint to VC SpyGlass
Lint
VC SpyGlass Lint uses VC Static platform to compile/synthesize and elaborate the design netlist. It is
assumed that you have already converted all your SpyGlass library (.lib) files to VC Static database (.db)
format.
VC SpyGlass Lint translates SpyGlass waiver files, *.swl and *.awl files, to the VC SpyGlass Lint Tcl format
and applies it on the specified violations.
The following are the mandatory to migrate from SpyGlass Lint to VC SpyGlass Lint
❖ “Converting the .lib Files to the .db Files”
❖ “Reading the Project Files”
❖ “Reading Reports”
Also, the following topics provide additional information on using the VC SpyGlass Lint:
❖ “Using Tags and Parameters”
❖ “Working with SGDC Constraints”
❖ “Working with Violation Messages”
❖ “Convert SpyGlass Waivers to VC SpyGlass Lint Waivers,”
moresimple The report lists the details of the violation messages for each tag.
moresimple_turbo The report lists the details of the violation messages for each tag.
in the turbo mode.
Note that the report is generated only for the language rules.
When you specify the set_option turbo yes option in the SpyGlass
project file, VC SpyGlass Lint generates the moresimple_turbo.rpt.
waiver The report lists the waived messages and the respective count.
count The report lists the number of violation messages reported for each
tag.
summary The report displays a summary of message counts by each rule type
along with the severity class and rule short help.
stop_summary This report lists design units and files that are skipped from SpyGlass
checking in the current run.
no_msg_reporting The report displays a list of rules that did not report any violation or
_rules waived during SpyGlass run.
These reports are generated in the .rpt format, which is the default SpyGlass report format.
You can generate these reports using the report_lint TCL proc as shown below:
report_lint -report { <report_type> } -file report_hdl.txt -verbose -limit 0
Where, <report_type> can have one of the following values:
❖ all: Specifying this report generates both Spyglass moresimple.rpt, waiver.rpt, count.rpt, and
report_hdl.txt. The report_hdl.txt is the VC Static report
❖ sg_moresimple: Specifying this option generates only the moresimple.rpt report.
❖ sg_waiver: Specifying this option generates only the waiver.rpt report.
❖ sg_count: Specifying this option generates the count.rpt report.
❖ default: Specifying this option generates VC Static default report.
Also, the report_hdl.txt file is the VC Static report, which reports the same violation in the VC Static format.
To convert the above SpyGlass waiver file to the VC Static format, use the sg_read_waiver Tcl proc, as
shown below:
sg_read_waiver file waive.swl //VC Static Tcl procedure to read waivers
When you specify the sg_read_waiver command, the waive.swl file is converted to waive.tcl file with
the following contents:
waive_lint -tag FlopDataConstant -filter { VariableName =~ "test_unit/BM/cnt" AND
NodeName =~ "VSS" }
3
Working with Methodologies and Goals
GuideWare is the testing platform to check the functionality of various goals by running them on different
types of designs. The designer keeps modifying and adding goals until the desired coverage is achieved
from these goals.
This section explains the following topics:
❖ “Terminology”
❖ “Development Phases and Methodologies:”
❖ “RTL Handoff”
❖ “Layout Handoff”
❖ “Understanding GuideWare Goals”
❖ “Setting Up Methodology/Goals”
❖ “Running Custom Goals”
❖ “Invoking VC Spyglass Lint Using SpyGlass Project File”
3.1 Terminology
This section defines some commonly used terms that have a specific meaning in the VC SpyGlass
environment.
❖ Rule: In VC SpyGlass environment, a 'Rule' represents the atomic unit of RTL analysis and checking
performed by the VC SpyGlass software. Although a 'Rule' can be configured, it cannot be further
sub-divided to select what analysis is performed.
❖ Violation Message: A violation message (or simply a message) is unit of VC SpyGlass reporting.
When a VC SpyGlass 'rule' detects a design condition not consistent with the rule requirement, it
reports each such occurrence as a (violation) message. In addition to text message, such report
usually contains other supporting data, such as back-reference in RTL source code where such
problem originates, schematic highlight of the problem, detailed tables and graphs (as in power
activity over time), waveform for a formal 'witness' (such as a false path proven to be not a false
path), and so on.
❖ Parameter: In VC SpyGlass environment, a 'Parameter' is like an option to a rule that dictates the
rule behavior. Parameters are typically used to make the rule do specific or detailed analysis of the
RTL.
❖ Goal: A VC SpyGlass goal is a collection of relevant rules that are grouped together to perform a
specific task. In addition to the rule list, a goal may further configure the rule parameters and
redefine severity labels assigned to these rules. VC SpyGlass software release contains a useful set of
many widely applicable goals. However, a user may fine-tune existing goals or create new goals to
meet their specific design and workflow needs.
❖ methodology: A VC SpyGlass methodology is a set of relevant goals that are grouped together to
achieve a particular design goal. In addition to software, these sub-methodologies contain detailed
documentation to assist customer in understanding specific usage and debug nuances.
❖ Severity: A VC SpyGlass violation message is tagged with an attribute, called severity, which helps
to identify the criticality of reported message, within the context of a goal and sub-methodology
being run. VC SpyGlass supports four main severity classes: FATAL, ERROR, WARNING, and
INFO. A VC SpyGlass rule or goal can define a (severity) text label belonging to one of the above
classes, and attach it to a rule.
❖ Waivers: A VC SpyGlass 'waiver' is a method for user to review a rule (violation) message and flag a
specific occurrence (or set of occurrences) as acceptable in context of their design and workflow. This
is a very important mechanism to flag an apparently non-compliant design scenario as intended and
verified by actual design or verification engineer. In the SoC design workflow, the VC SpyGlass
waivers play a very significant role both in Block regressions and in Block handoff to SoC integration
and implementation teams.
❖ SGDC: SGDC is an abbreviation for 'VC SpyGlass Design Constraints', and is used to capture
additional designer intent of the block/SoC functionality which are not obvious at RTL/netlist.
SGDC is used for capturing a wide variety of design intent, related with clock domain crossing,
power, testability, etc.
❖
This field of use involves checks related to inter-block/inter-IP issues. In addition, it ensures that block
constraints are consistent with SoC constraints. In this field of use, this design phase recommends a four-
stage flows.
Since the hand-off process is typically iterative, it is not necessarily expected that all goals will be clean at
the first hand-off, but at least the issues will be known and can be communicated to the consumers
downstream.
netlist for scan and BIST insertion and power-related gating. This version of netlist is known as pre-layout
netlist by most of the design teams. The goals used
during this stage ensure that the original design intent is not adversely impacted during these
modifications. The goals and sub-methodologies recommended for this stage ensure the integrity of the
complete SoC-level netlist from ERC perspective.
block/rtl_handoff lint_rtl This is similar to block lint_rtl but applicable only for
netlist_handoff.
soc/rtl_handoff lint_rtl
• Basic connectivity issue in the design, such as floating
input, width mismatch, etc.
• simulation issues in the design, such as incomplete
sensitivity list, incorrect use of block/ non-blocking
assignments, potential functional errors and possible
simulation hang & simulation race cases.
• unsynthesizable constructs in the design and code that
can cause RTL vs. gate simulation mismatch.
• structural issues in design that affect the post-
implementation functionality or performance of the
design. Examples include multiple drivers, high fan-in
MUX, and synchronous/asynchronous use of resets.
These checks should be run after every
change in RTL code prior to code-check-in.
soc/netlist_handof lint_netlist This is similar to SoC lint_rtl but applicable only for
f netlist_handoff
soc/layout_handof lint_netlist This goal checks basic connectivity issues in the design,
f such as floating input and width mismatch. These checks
should be run after every change.
This goal performs netlist integrity checks such as
connectivity, simulation and structural issues.
This goal must be run when synthesis is complete and after
each major step in SoC implementation ,such as scan-
insertion, and power-gating.
The following table lists the supported methodologies in VC SpyGlass Lint and their corresponding goals:
Table 3-2 Goal/Methodology Setup Commands
Command Description
configure_lint_tag -enable -tag Enables the tag for the respective goal name.
<tag-name> [-goal <goal-
name>]
Command Description
check_lint [-goal <goal- Runs specific goal. If not specified, runs the default goal.
name>]
report_lint [-filter <goal- Reports results for a given goal. Without this option report_lint reports all
name>] available results from every goal which has been executed.
If check_lint command is used without configure_lint_tag command, the lint_rtl GuideWare goal, is
Note executed.
Alternatively, you can also specify the above commands directly on the vc_static_shell.
In addition, the sg_read_project command converts the conventional SpyGlass project file to VC Use model
Tcl and runs specified lint checks.
In addition to the above specified application variable, you can also use the following application variables
to improve the compatibility for the comparison script:
❖ language_check_hierarchy_format
❖ fullname_with_top
❖ hierarchy_delimiter
For more information on these application variables, see the VC SpyGlass Lint Migration Guide.
4
Using VC SpyGlass Lint
This section provides reference information for the built-in Tcl commands implemented in VC SpyGlass
Lint. You can use these Tcl commands to configure tags, manage projects, and control your VC SpyGlass
Lint Checker runs.
This section provides you the information on using Tcl Shell under the following topics:
❖ “Invoking VC SpyGlass Lint in Tcl Shell Mode”
❖ “Sourcing a Tcl Script in VC SpyGlass Lint”
❖ “Building a Design File”
❖ “Using Built-in Tcl Commands”
❖ “Running Lint Checks”
❖ “Reporting Violations”
❖ “Language Check Early Shifting”
❖ “Multiprocessing”
❖ “Using Waivers in VC SpyGlass Lint”
4.8 Multiprocessing
Use the Multiprocessing feature to reduce run time when language check is taking significant time in VC-
Spyglass lint.
The Multiprocessing feature splits the goal into multiple goals and finally merges all the results in the
default VC Spyglass Lint database.
Note that the Multiprocessing feature in language checks is supported only in VCUM.
To enable the Multiprocessing feature, use the following App Var:
set_app_var lint_enable_multi_process true
Also, to set the number of processes, specify the following App Var:
set_app_var lint_number_of_processes <num>
The following is the report file generated before applying the waiver:
5
Using Tags in VC SpyGlass Lint
This section provides detailed procedures for how to configure and use the prepackaged tags to check your
HDL code under the following topics:
❖ “About VC SpyGlass Lint tags”
❖ “Creating the Configuration File”
❖ “Configuring Tag Parameters”
❖ “Using Black Boxes in VC SpyGlass Lint”
❖ A user defined black box is created using the Tcl command set_blackbox. This needs to be done
before using the analyze/read_file commands.
For example, to black-box the module moduleA, use the following command:
set_blackbox -designs {moduleA}
read_file -format verilog -top top top.v
❖ An automatic black box is marked by the tool automatically. To see the designs marked as a black
box, use the following command:
vc_static_shell> get_blackbox -designs
VC SpyGlass Lint issues the following message for each black boxed module instance:
Note-[SM_BB_SKIP] Skipping blackboxed Module/Entity
In a design that contains one or more black boxes, the black boxes are elaborated with the following implicit
hardware:
❖ Each input port of a black box is connected inside the corresponding module entity to one input of
one implicit combinatorial gate (of undefined type).
❖ Each output port of a black box is driven inside the corresponding module by one output of one
implicit combinatorial gate (of undefined type).
❖ Each inout port of a black box has both characteristics above as an input and an output port.
VC SpyGlass Lint does not perform tag checking for black-boxed modules and all modules that are
instantiated in a black-boxed module.
6
VC SpyGlass Lint Tcl Variables
To use VC SpyGlass Lint, ensure that the environment is set up correctly. You need to set different
environment variables correctly to be able to perform specific tasks using VC SpyGlass Lint.
The check_hdl_lib environment variable in VC SpyGlass Lint enables you to perform tag checking on the
library files passed with -v and -y options. The default value of this variable is false.
6.1 check_hdl_lib
Command Line Example
set search_path "./"
set link_library " "
set synth_preserve_sequential true
set_app_var sync_reset_signal_threshold 0
set_app_var analyze_skip_translate_body true
set_app_var enable_verdi_debug true
set_app_var report_sibling_violation true
compress_hdl -enable
check_hdl_lib -all
check_lint
report_lint -file report_hdl.txt -verbose
quit
For more information on application variables, see Lint Commands section in the VC Static Platform
Command Reference Guide.
7
Getting Started with GUI
These commands bring up the VCst Activity View window as shown in Figure 7-1.
Click Check_Lint to perform Lint related checks. After the successful completion of Check_Lint, Verification
tree elements are displayed as shown in Figure 10-4.
After the successful completion of Check_Lint the activity tree is populated with the following:
❖ Lint tree element under Verification in the VC Static (VCst) tree.
❖ Error, warning and information tags are flagged.
❖ The number of violations for an error/warning/information is displayed in brackets.
❖ All error/warning/information tags are bucketed into the stages at which they were flagged
❖ The number of violations for each stage is flagged
In the flow explained above, tasks, such as setting up the design and performing Lint checks, are
accomplished after invoking the GUI. Alternatively, GUI can be invoked after performing design setup and
Lint checks in the batch mode by using relevant Tcl commands. GUI is populated with the results of already
performance checks.
When start_gui or view_activity commands are invoked, VC SpyGlass Lint internally launches Verdi
in the background for improved performance. To disable launching Verdi in the background, set the
following application variable, which has a default value of true, to false.
enable_verdi_background
Even though this application variable disables launching Verdi, all Verdi related data will be created by
VCst while running the design. To disable this process as well, set the following application variable, which
has a default value of true, to false.
enable_verdi_debug
This application variable takes precedence over the enable_verdi_background application variable.
4. Locators in the schematics are used to see the source and destination points of the domain crossing.
This helps you understand the violation better. Locators are enabled by default. Click the Add
Locator icon on data view Toolbar to disable locators.
5. To see the information view of a violation, select a violation in the VC Static (VCst) tree.
All the required information to understand the error is populated in the information view, as shown
in Figure 7-10.
7.4 Filters
Filters are useful in highlighting unknown clock domain crossing violations.
Filters are used to filter out violations from many violations that meet the criteria specified in the filter. This
helps you focus on a group of violations and resolve them quickly.
This section explains the following topics:
❖ “Creating a Filter for a Set of Violations”
❖ “Creating a Filter From a single Violation”
❖ “Creating an Exclusive Subsets for Filtered Violations”
Figure 7-14
You can create filters for an exclusive subset, Therefore, it is possible to create an exclusive subset inside an
existing exclusive subset.
7.5 Waivers
Waivers are useful in highlighting unknown clock domain crossing violations.
Waivers are used to waive off tags/violations related to known issues or issues that have already been
analyzed. By introducing waivers, you can keep track of the violations that are yet to be analyzed.
This section covers the following topics:
❖ Using Multiple Waiver Files
❖ Specifying the Waiver File While Creating Waivers
❖ Removing Waivers
❖ Editing Waivers
❖ Creating Waivers Data View Spreadsheet and Information View
The following popup menu appears when waiver files are already present, and one of them is
selected as 'default'.
As displayed, the popup menu shows the check mark corresponding to the current selected default
waiver file. To change the default waiver file, right click on the activity tree, click > Set Default Waiver
File, and select another file name. The check mark is updated to the selected file and the setting is
applied.
2. Click the Add waiver file option to add a waiver file.
The Enter/Choose a Waiver File Name dialog box appears.
You can choose an existing waiver file from the list of available waiver files. If you want to create a
new waiver file, type a new name (such as, new_waiver.tcl) in the File name box.
The Enter/Choose a Waiver File Name dialog box appears. See Step 2 for details.
7.5.1.2.1 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 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
Select the default waiver file name from the Waiver File list to change the default waiver file name. If any file
is not selected from the Waiver File list, waiver is added to the waiver file that is set as the default waiver
file.
The Waiver File list also shows Add waiver option. You can use the Add Waiver option to set additional file
directly without going to the activity tree right-click menu.
The following messages are reported if you have not set up any waiver file and try to add waivers in the UI:
❖ If you are using one-click waiver (Waive this Item), the Enter/Choose a Waiver File Name dialog box
appears to select a waiver file. Closing this dialog generates the following error message:
❖ 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 the corresponding 'Waiver File' drop-down list. If you continue to create waiver by
selecting the ADD Waiver option, the error message as shown in the following figure appears.
A dialog box appears showing all the existing loaded waiver files.
2. The Remove Waiver Files dialog box appears showing all the existing loaded waiver files as shown in
the following figure.
3. Select the check box corresponding to the file/files to be removed and click the Remove button to
remove waiver files.
When you click the Edit this Waiver option, the regular waiver setup page appears as shown in the following
figure. You can select fields from the table.
The fields are populated from the existing waiver file. The non-existing fields in the selected waiver are
disabled and have "*" as the Match value. You can specify the match value to waive specific message sets.
After editing, click the ADD Waiver option to overwrite the existing waiver file.
To create waivers, right-click on the data view spreadsheet to show the popup menu that has the Waive this
Item and the Create a Waiver items. You can start creating the waiver from either of the data view
spreadsheet or the links on the information view as highlighted in the above figure.
This command opens Configure Pivot Table dialog appears with the respective available Fields List as shown
in the following figure.
Check one or two fields to add them as Pivot rows and click the Add button corresponding to Rows list box.
Check another item from the Fields List and click the Add button corresponding to Columns list box to add it
as a Pivot column (not mandatory). Click the OK button to create the pivot table.
The first and Second column represents the two selected 'Row' fields (Only first column if one row field is
selected) and the values will be combination of rows. If 'Column' field is selected, the corresponding unique
values of that field will show as each additional column with violation message counts.
The last column shows the total counts of the row (If no column field selected, then it will be count of row
combinations)