SpyGlass MBISTMethodology GuideWare2.0 UserGuide PDF
SpyGlass MBISTMethodology GuideWare2.0 UserGuide PDF
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.
Third-Party Links
Any links to third-party websites included in this document are for your convenience
only. Synopsys does not endorse and is not responsible for such websites and their
practices, including privacy practices, availability, and content.
Synopsys, Inc.
690 E. Middlefield Road
Mountain View, CA 94043
www.synopsys.com
Report an Error
The SpyGlass Technical Publications team welcomes your feedback and suggestions on
this publication. Please provide specific feedback and, if possible, attach a snapshot.
Send your feedback to [email protected].
Contents
Preface..........................................................................................9
About This Book ...................................................................................... 9
Contents of This Book ........................................................................... 10
Typographical Conventions ................................................................... 11
v
Synopsys, Inc.
Inserting MBIST ..............................................................................38
Specifying the Location of Modified Design Files ...................................39
Verifying the Post-BIST Design ..............................................................39
Viewing the Modified Design ..............................................................39
Verifying the AND/OR/EXOR Logic Tree ...............................................39
Steps for Inserting MBIST into a Design................................................ 41
Creating a Vendor File ..........................................................................41
Defining Classes ..............................................................................41
Specifying Connections .....................................................................41
Disconnecting Existing Connections ....................................................48
Specifying Chain Connections ............................................................50
Combining Signals through Gates.......................................................51
Collecting Design Data and Preparing for MBIST Run ................................52
mb_report_instances........................................................................52
mb_report_instances –group_by_hierarchy .........................................54
mb_report_instances –dive_in ...........................................................56
Creating a User Data File ......................................................................58
Preparing the Setup .........................................................................58
Defining the Existing Instances ..........................................................64
Inserting/Replacing and Defining New Instances ..................................65
Removing the Existing Instances........................................................68
Establishing Custom Connections .......................................................68
Inserting MBIST: The mb_insert Tcl Command .....................................71
Specifying the Location of Modified Design Files ...................................73
Verifying the Post-BIST Design ..............................................................73
Viewing the Modified Design ..............................................................73
Verifying the AND/OR/EXOR Logic Tree ...............................................75
Verifying the Connectivity of Critical Paths...........................................76
Verifying the Connectivity of Critical Nodes to Ground or Power ..............78
Summary: Usage of the mb_assert* Commands ..................................78
Bottom-up Methodology ........................................................................ 80
The Bottom-up Flow .............................................................................80
Design Read for Bottom-up Flow ............................................................82
Abstract Classes ..................................................................................84
More on Abstract Classes ..................................................................85
Introducing Views ............................................................................87
Abstract Classes with auto_configure..................................................89
Implication of a View as Defined for an Abstract Class Object.................94
Shell Creation during Bottom-up Flow................................................... 100
Working with Gate-Level Designs for MBIST Insertion ........................ 102
vi
Synopsys, Inc.
TIPs and FAQs...........................................................................103
vii
Synopsys, Inc.
viii
Synopsys, Inc.
Preface
9
Synopsys, Inc.
Preface
Section Description
The Need for Automatic Insertion The need for automatic insertion of
of MBIST at an Early Stage of a MBIST at an early stage of a design
Design
10
Synopsys, Inc.
Preface
Typographical Conventions
Typographical Conventions
This document uses the following typographical conventions:
Syntax Description
[ ] (Square brackets) An optional entry
{ } (Curly braces) An entry that can be specified once or multiple
times
| (Vertical bar) A list of choices out of which you can choose
one
... (Horizontal Other options that you can specify
ellipsis)
11
Synopsys, Inc.
Preface
Typographical Conventions
12
Synopsys, Inc.
The Need for Automatic
Insertion of MBIST at an
Early Stage of a Design
Overview
The SpyGlass DFT MBIST product automates the insertion of Memory Built-
In Self-Test (MBIST) IP into a design at the RTL level. The product also
works at the gate level; however, working at the RTL level has many
advantages that are crucial in leading-edge SoC designs.
Inserting MBIST at the RTL level reduces the cost of functional verification
of the BIST structures. In addition, the synthesis optimization/early floor
planning considers the MBIST logic, resulting in much more predictable
quality of results and reduced iterations between the RTL-level and gate-
level implementations.
13
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Overview
The SpyGlass DFT MBIST product requires a clean design into SpyGlass.
Please refer to the SpyGlass Design Read Methodology document for
details. The flow is based on Tcl environment available for SpyGlass
operations and therefore the user is referred to the SpyGlass Tcl Shell
Interface User Guide for more details. The user is also referred to the
SpyGlass DFT MBIST Tcl Flow Reference Guide for the details of MBIST
specific commands.
Tool Versions
SpyGlass Version: Version N-2017.12-SP1
SpyGlass DFT MBIST Version: Version N-2017.12-SP1
GuideWare: 2017.12
References
SpyGlass Explorer User Guide
SpyGlass Explorer Reference Guide
SpyGlass Tcl Shell Interface User Guide
SpyGlass Design Read-In Methodology
SpyGlass GuideWare Reference Methodology User Guide
SpyGlass MBIST Tcl Flow Reference Guide
14
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
MBIST Overview
MBIST Overview
This section describes the basic goals for the MBIST insertion process,
various generic components, and restrictions imposed by the technology.
15
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
MBIST Overview
16
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
MBIST Overview
Final View
The SpyGlass DFT MBIST product works in guidance with the vendor’s
library, applies technology restrictions, and generates a BIST-inserted
design. A representative view of the post-BIST design is shown in the
following figure:
Note that in the above figure, the memories in the original RTL exist at
various levels of hierarchy. In addition, the other components are inserted
17
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
MBIST Overview
as part of MBIST insertion. Here, the designer selects the insertion level.
18
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
MBIST Overview
19
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Overview
The following figure illustrates the recommended flow to perform MBIST
insertion into a design by using the SpyGlass DFT MBIST product.
The SpyGlass DFT MBIST product provides an automated way to insert any
vendor-specific BIST components into the designer’s RTL. The SpyGlass
DFT MBIST product is not tied to any vendor house so that the designer
has the flexibility to work with any vendor of his choice.
20
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
This section gives a brief overview of each stage of SpyGlass DFT MBIST
insertion.
The SpyGlass DFT MBIST insertion is divided into the following stages:
Creating a Vendor File
Collecting Design Data and Preparing for MBIST Run
Creating a User Data File
Verifying the Post-BIST Design
The following two distinct steps are required before starting the MBIST
insertion process:
1. Vendor file creation by the vendor (one time effort), and
2. User file creation by the designer (once for each design)
Defining Classes
All the components relevant for MBIST (for example memories, controllers,
etc.) are classified in a few named ‘classes’. Then parent-child relationship
is established among various class members. A sample scheme of class
definition and their relationship is shown in the following diagram.
21
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Specifying Connections
Once we have defined ‘classes’ and their ‘children’ we are ready to specify
connections between them. An example of a ‘required’ connection in BIST-
inserted design is for the BIST controller to supply the ‘bist_start’ control
signal to the memory, as shown below:
22
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
In this scheme, both ‘CONTROLLER’ and ‘MEM’ have been defined as two
classes, MEM being the child of CONROLLER. The vendor data should
contain the necessary specification for such a connection. Moreover, as we
will see in a following section, the connection could be a ‘broadcast, or
‘parallel’ connection.
For specifying connections using the SpyGlass DFT MBIST product, see
Specifying Connections.
23
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
24
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
25
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
In this case, BISTCNTL and BIST should be defined as two classes with
BIST being the child of BISTCNTL. The vendor data specifies that the all the
signals connected to the ‘bbad’ pin of the BIST instances are combined
through an OR gate and the resultant signal drives the ‘bstatus’ pin of
BISTCNTL instance. Note, the vendor may also optionally specify the 2-
input gate to a specific cell from a technology library.
In summary, the vendor data
indicates class definitions for memories and controllers
indicates parent-child relationships among the classes
indicates permissible connections between the classes
indicates how chain connections are defined
indicates how signals produced by class objects can be combined
through generic/technology-specific ‘AND’/’OR’/’EXOR’ gates
We will describe more in detail about the specific instructions and
variations of these specifications in the section Steps for Inserting MBIST into
a Design.
Verification of the post-BIST design is critical to ensure the integrity of the
insertion and connection process. For example, for the above example, one
would like to check that the ‘bbad’ pins of the three BIST instances are
indeed connected to the ‘bstatus’ pin of the instance of BISTCNTL. Details
to accomplish verification will be presented in section XX.
For combining signals through gates using the SpyGlass DFT MBIST
product, see Combining Signals through Gates.
26
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
FIGURE 12. Collecting design data and preparing for MBIST run
For more information on how the SpyGlass DFT MBIST product can be used
to extract data to help the designer prepare for the MBIST insertion, see
27
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
28
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
For detailed information on creating a user data file using the SpyGlass DFT
MBIST product, see Creating a User Data File.
29
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
30
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
31
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
NOTE: The name of the modified top-level module is never changed. This is because at a
higher level of the design, the modified top-level module is continued to be referred
by the same name.
SpyGlass, however, maintains the uniqueness of any generated name. This
means that whenever there is a name clash, the name is ‘uniquified’. We
will find out more details of this user control steps in the “step-by-step”
section.
32
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Note, the user maintains a list of memories and their instance names (as
shown in col. 2 and 3 in the above table) in the design. The memory types
are typically defined as ‘classes’ in the vendor data. At this step, the user
maps the instances (with hierarchical names) to the pre-defined ‘classes’.
Such a table is not required by the SpyGlass DFT MBIST product. However,
it may be useful to facilitate supplying the correct directions to drive the
tool.
For defining the existing instances using the SpyGlass DFT MBIST product,
see Defining the Existing Instances.
33
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
34
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
The user must create a ‘class’ for the wrapper (class declaration for
memory is not needed here). The connection between the wrapper
instance and the controller instance will be governed by connection rules
specified in the vendor data file.
This process should also be able to accommodate the case where all the
ports of the memory do not have corresponding ‘substitute’ on the
wrapper. These memory ports are originally unconnected in the design.
One possibility is they are consumed by an internal scan chain inside the
wrapper, as shown in the following diagram. You will notice that the pin ‘Y’
of the memory is connected to an internal logic inside the wrapper and
does not have a corresponding pin map on the wrapper. See the ‘step-by-
step’ section for details of how this can be accomplished.
35
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
For inserting/replacing and defining new instances using the SpyGlass DFT
MBIST product, see Inserting/Replacing and Defining New Instances.
36
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
For removing the existing instances using the SpyGlass DFT MBIST
product, see Removing the Existing Instances.
37
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Inserting MBIST
This is the final step of MBIST insertion. With the vendor information file
and the user’s intention in the user data file, the tool generates the
modified description of the design by inserting the MBIST components and
making all the prescribed connections.
For inserting MBIST into the design using the SpyGlass DFT MBIST product,
see Inserting MBIST: The mb_insert Tcl Command.
38
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
39
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
40
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Defining Classes
Components are given a class definition with the command
‘mb_define_class’. This command is also used to describe parent-child
relationships.
The class hierarchy structure in our example can be specified as follows:
mb_define_class –class red_mem_type1
mb_define_class –class red_mem_type2
mb_define_class –class blue_mem
mb_define_class –class red_cntl –children {red_mem_type1
red_mem_type2}
mb_define_class –class blue_cntl –children blue_mem
Specifying Connections
Pin-to-pin connections can be established through the
‘mb_configure_connect_net’ command. Connections can be one-to-
one or one-to-many.
There are following types of connections:
41
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Broadcast connections
42
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
43
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
After BIST insertion, an instance of class CTRL has been inserted and
the above connections have been made. Q pin of M now drives the ‘dgr’
pin of CTRL and the ‘dgrs’ pin of CTRL drives the logic. This represents a
connection ‘through’ another class object.
This can be accomplished through the following command:
# Vendor
mb_define_class -class M
44
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
45
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
46
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
47
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
mb_configure_connect_net \
-to_class Q -to_pin func -disconnect
Case 2: Disconnect existing load and do not establish a new connection
to load
48
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
mb_configure_connect_net \
-from_class P -from_pin func -disconnect
Case 3: Disconnect existing driver and establish new connection to a
driver
mb_configure_connect_net \
-from_class P –from_pin X \
-to_class Q -to_pin func -broadcast
NOTE: In the case above the ‘-disconnect’ switch is not needed. SpyGlass automatically
disconnects the existing driver before establishing a ‘new’ driver.
Case 4: Disconnect load and establish new load
mb_configure_connect_net \
-from_class P -from_pin Y \
-to_class Q –to_pin F \
49
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
-broadcast -disconnect
50
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
This diagram shows three different classes of controllers (C1, C2, and C3)
that each produce a ‘bbad’ output status signal. An AND of these signals
and brought to the top-level port ‘G_bbad’ with the following command:
# Vendor:
mb_define_class –class C1
mb_define_class –class C2
mb_define_class –class C3
mb_define_class –class top –children {C1 C2 C3}
#
# Connect the 'bbad*' ports of the controllers
# through AND gate and bring the status signal to
# the top level port 'G_bbad'
mb_configure_connect_gate -type AND \
51
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
-from_class { C1 C2 C2 C2 C3} \
-from_pin { bbad bbad_1 bbad_2 bbad_3 bbad } \
-to_class top_class -to_pin G_bbad
Note, the above vendor configuration information simply dictates that the
permissible connections to one such gate are class objects of C1, C2, and
C3 only. In the design, however, the user will instantiate one or many
instances of such class objects.
User may prefer to use a specific library cell to combine signals. In that
case use the’-cell <cell type>’ option to specify the technology cell.
However, note that the description of the cell has to be supplied to
SpyGlass DFT MBIST product as part of design read and such a cell can
only be of type ‘AND’, ‘OR’ and ‘XOR’ functionality (the gate should have 2
inputs only). The above configuration indicating the connection to an AND
cell ‘AND02_4X’ from library can be specified through the modified
command:
mb_configure_connect_gate -type AND –cell AND02_4X \
-from_class { C1 C2 C2 C2 C3} \
-from_pin { bbad bbad_1 bbad_2 bbad_3 bbad } \
-to_class top_class -to_pin G_bbad
The above will result in insertion of a tree of the AND02_4X cells.
NOTE: Connections from ‘children’ classes feeding ‘parent’ class is the only direction
allowed. In case of an attempt to combine in an opposite direction will result in an
error message:
Error: Class <to class> is not a parent or grandparent of <from
class>
The reason for this restriction is that such specifications causes ambiguity
in selecting one of many target instances of a child class.
mb_report_instances
Run this Tcl command to create a report:
52
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
53
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
current_methodology $::SPYGLASS_HOME/Methodology/MBIST_DFT
current_goal mbist_dft
mb_report_instances –group_by_hierarchy
This scheme adopts a ‘depth_first_search’ strategy and reports as follows:
1. Search starts at the top level of hierarchy
2. Reports all the ‘matching’ instances at this level
3. Dives down a lower level of hierarchy
54
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
55
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
mb_report_instances –dive_in
Normally, mb_report_instances stops at the boundary of a ‘matched’
module and does not dive inside it to find instances of any other matching
modules. The ‘-dive_in’ switch allows the search to happen inside an
already ‘matched’ module instance.
The following shows a hierarchical design where the module ‘mem’ is
instantiated at various levels of hierarchies shown as highlighted.
The following command will produce the report shown below. Note that
“mem” inside module A is not reported.
56
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
FIGURE 33. The report generated for the above hierarchical design
57
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
FIGURE 34. The report generated for the above hierarchical design when –dive_in
option is used
58
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
59
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
The files ‘included’ in Verilog source code and files supplied through the
v command can be ‘compressed’ files. The files to be picked up from the
directories specified through the y command can also be compressed. In
that case, use the following option:
set_option libext {.v.gz}
If any of the design descriptions supplied through such compressed files
need to be modified by SpyGlass then the output of the modified file is
also generated as a compressed file.
Example:
read_file –type hdl block.v.gz
mb_set_prefix_n_suffix -file_suffix sg
After MBIST insertion in this file, the ‘modified’ file is generated as a
compressed file in the name:
block.v_sg.gz
Blackboxing
As mentioned earlier, some modules may be ‘unintentionally’
blackboxed. Review the following file and look for the violation
messages for the following rules:
<project_name>/mbist_dft/spyglass_reports/moresimple.rpt
You may like to understand the cause of these messages and like to fix
them to ensure a clean design read. However, if you are sure that there is
no memory inside these modules (and hence BIST insertion is not needed)
then you may ignore these messages.
ErrorAnalyzeBBox: This message indicates that the description of the
module has not been supplied. The remedy is to supply the HDL for the
module.
WarnAnalyzeBBox: This message indicates that either the module
description is ‘empty’ or the module is not synthesizable (while SpyGlass
can understand the port interface of such module, it cannot navigate
inside it).
Sometimes designers may be interested to blackbox parts of the design
descriptions, for example a few behavior descriptions of the memory
hierarchy. This may be accomplished by explicitly supplying the design
name:
set_option stop {A_block B_block C_block }
60
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
or using a wildcard:
set_option stop {"A*block" "B*block*"}
or using a regular expression:
set_option stop { m/^abc[A-Z]+$/ \
m/^DLYCLK[0-9]+_[0-9]+_A[TUV][HUX]0[0-9]/ }
It is recommended that you confirm that only the desired modules, and
nothing else, have been blackboxed. SpyGlass generates the following
report:
<project name>/mbist_dft/spyglass_reports/SpyGlass/
stop_summary.rpt
Review this file to find out the list of modules that have indeed been
blackboxed due to the user’s directive. The user-specified blackboxes are
also indicated by the InfoAnalyzeBBox messages in the file:
<project name>/mbist_dft/spyglass_reports/moresimple.rpt
Using Waivers
Sometimes one may like to ‘waive’ certain messages (generated by
SpyGlass DFT MBIST product) depending on nature of the design read.
Refer to the SpyGlass Explorer User Guide for more detailed information
about the ‘waiver’ mechanism.
An example of usage of waiver is provided in Appendix B: An Example of Using
Waivers.
61
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
:
// This is the instantiation of the encrypted IP.
// The instance will be blackboxed since no definition will
// be visible to SpyGlass
IP ip_inst(.A(w1), .B(w2), …);
:
endmodule
// vendor_string translate_off
// This encrypted file contains the description of IP
`include “core.vp”
// vendor_string translate_on
2. Use the following option during design read to SpyGlass:
set_option pragma vendor_string
Here vendor_string is any arbitrary string suitably chosen by the RTL
developer. Because of the ‘set_option’ directive, SpyGlass will not read the
content enclosed in between the pragmas. The advantage to this approach
is that the reference to the definition (of the encrypted IP) will be available
in the modified RTL (post-MBIST insertion) for other tools to use.
62
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
63
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
FILE SUFFIX
default_value = "" (null)
MODULE PREFIX
default value = "" (null)
WIRE PREFIX
default value = "Atrenta_wire_"
64
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
# User data: User is now ready to work with the design as per
# the guidelines set in the vendor file
# The following are the two instances of memory classes
#
mb_define_instance -instance I7 -class MEM0
mb_define_instance -instance I6 -class MEM1
#
# Now insert an instance of bist class (CONTROLLER_1) to
# control I7 and I6. This is permissible in accordance with
65
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
66
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
# Vendor data:
# The replacing module should belong to a ‘pre-defined’
# class. # So, define a suitable class
#
mb_define_class –class wrapper
#
# -- End vendor data
#
# User data:
# Replace i_mem1 with an instance of WRAPPER
mb_replace_instance -instance i_mem1 -cell WRAPPER \
-pin_map {A_W A Q_W Q}
mb_define_instance -instance i_mem1 -class wrapper
Note, there is no need to define a class for the ‘replaced’ object. Also, note
that after the replacement of the instance, the extra pins on the new block
are now available for connection to other (BIST) components.
In case there are extra pins on the memory that do not have a
corresponding pin map on the wrapper, then such pins can be ‘ignored’
during replacement with the following command:
mb_replace_instance -instance i_mem1 -cell WRAPPER \
pin_map {A_W A Q_W Q} -ignore_pin { Y }
The above may be the case where the memory internally drives a scan flop
67
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
and the scan flop connections are brought out through one or more pins on
the wrapper.
68
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
[-id <string>]
[-help]
For example, the following diagram represents a broadcast topology where
a scalar pin ‘x’ on the instance A must be connected to each of the pin ‘p’ of
the instances B, C, and D.
69
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
70
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
71
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
The following in the stdout indicates that the expanded commands have
been generated successfully without encountering any error from both the
vendor file and user file.
#Found 0 error(s) while processing Vendor MBIST configuration
data
#Found 0 error(s) while processing User MBIST configuration
data
72
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
73
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
current_methodology $::SPYGLASS_HOME/GuideWare/New_RTL
74
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
run_goal
save_project
75
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
# directory.
# We are going to verify a desired structure in that design.
read_file -type sourcelist prj_$design/mbist_dft/
spyglass_reports/rme/mbist-dft/atrenta_modified_rtl_files/
atrenta_generated_design.f \
set_option top $design
current_methodology $::SPYGLASS_HOME/Methodology/MBIST_DFT
current_goal mbist_dft
mb_reset_assertions
# -------------------------------------------
# Verify that the two source nodes are indeed connected to
# the destination node through a XOR tree
# -------------------------------------------
mb_assert_function -from {W31_1/INTWRAP/PARITY W31_2/
INTWRAP/PARITY} \
-to PARITYTREE_WRAP_FUSECNTL_BISTCNTL_ref1 \
-function_type XOR
mb_check_assertions
save_project
close_project
The result appears on the stdout:
RESULT: mb_assert checks PASSED
Look for Info messages from following rule(s) in
'prj_assert_fn_test/test/custom_dft_block_check/
spyglass_reports/moresimple.rpt':
'Soc_07_Info'
sg_shell>
76
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
mb_reset_assertions
mb_assert_path \
-from a\[2:0\] -to b\[2:0\] \
-path_type sensitizable -parallel -no_invert
mb_check_assertions
The confirmation appears on the stdout:
RESULT: mb_assert checks PASSED
Look for Info messages from following rule(s) in
'prj_test/test/custom_dft_block_check/spyglass_reports/
moresimple.rpt':
'Soc_02_Info'
sg_shell>
Ignore non-existent nodes during connectivity check (mb_check-
node_existence)
When a design is intended for reuse, it may be useful to ‘ignore’ user-
specified nodes that do not exist in the design (by default a FATAL error
message is reported if the node does not exist). This can be accomplished
with the user-specified option ‘mb_check-node_existence’.
Example:
mb_assert_path \
-from inst_A/inst_AA/O5 -to inst_B/inst_BB/I6 -parallel \
-path_type buffered
mb_check_node_existence off
77
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
mb_assert_path \
-from inst_A/inst_AA/O5 -to inst_B/inst_BB/I8 -parallel \
-path_type buffered
mb_check_node_existence on
mb_check_assertions
The validation status appears on the stdout as follows:
RESULT: mb_assert checks PASSED
Look for Info messages from following rule(s) in
'prj_check_fn_top/top/custom_dft_block_check/
spyglass_reports/moresimple.rpt':
'Soc_01_Info'
sg_shell>
78
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
mb_assert_value ....
mb_assert_path ....
mb_assert_path ....
mb_assert_value ....
mb_assert_function ...
# Stop ‘ignoring’ non-exitent nodes
mb_check_node_exitence on
mb_assert_function ...
79
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Bottom-up Methodology
Bottom-up Methodology
So far, we have described the basic concepts and some details of inserting
BIST components in a block level design. In this section, we will learn how
an already BIST-inserted block can be used as a component of a higher-
level block while the rest of the higher-level block is inserted with BIST
components.
80
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Bottom-up Methodology
Notice that additional test ports are added after the modification of the
design. The dotted lines represent future communication paths to
controllers at the SoC level (‘MC1’ with a dotted boundary represents a
master controller that will be inserted in the SoC).
2. Insert BIST for the rest of the SoC
This involves reading the modified design for block A along with the rest
of the SoC. Then, insert BIST in the rest of the SoC (for example
inserting LC2 and LC3 inside blocks B and C) while keeping the block A
(BISTed version) as ‘untouched’ and finally hook up the test ports of
block A to the rest of the design.
81
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Bottom-up Methodology
82
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Bottom-up Methodology
This file contains the entire description of the modified design. This file will
be inserted at higher levels.
In the following SoC design block ‘blockA0’ is BIST-inserted in a stand-
alone MBIST run.
The user data file created for processing this block (blockA0) is as follows:
##########################
# User data file for blockA0
##########################
set design blockA0
new_project prj_$design -force
83
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Bottom-up Methodology
Abstract Classes
An abstract class is defined in the vendor file. This is done to enable the
bottom-up flow through a process of ‘abstraction’. Once a block is BISTed
then usually this block is defined as an instance of a previously defined
abstract class. This will enable us to refer to the BISTed block in SoC in
future during a bottom up flow. In our previous example, we will have an
abstract class definition (say ‘ABS_A’) in the vendor file, as follows:
Vendor data:
mb_define_class -class ABS_A -children {ABS_A LC1} \
-abstract -auto_configure
Note, the switch ‘-abstract’ indicates that the class is an abstract class.
We will defer discussion about its ‘children’ and the other switch ‘-
auto_configure’ until later.
Once the block A is BISTed, then we will need to define the ‘top’ level of
the ‘modified block A’ as an instance of the abstract class ‘ABS_A’, as
follows:
User data (while working with block A)
mb_define_instance –top –class ABS_A –children <instance
of LC1>
Subsequently, it is also necessary that one defines an instance of
abstract class ABS_A to refer to the instance of modified block A at the
SoC level. Hence, the user data (while working with SoC) should reflect
this.
User data (while working with SoC)
mb_define_instance -instance <instance name of A in SoC> -
84
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Bottom-up Methodology
class ABS_A
85
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Bottom-up Methodology
# User File
mb_define_instance -instance m_A -class MEMORY
mb_define_instance -instance b -class ABS_BIST -view viewB
mb_insert_instance -instance bist_A -cell bist
mb_define_instance -instance bist_A -class BIST -children
{b -view viewB}
// Create an object of class ABS_BIST out of A
mb_define_instance -top -class ABS_BIST -view viewA -
children m_A
86
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Bottom-up Methodology
Introducing Views
‘View’ (as we have noticed in the previous example with the usage of
switch ‘-view’ in the ‘define_isntance’ command) facilitates associating
specific instances inside an abstract class object. This will further facilitate
referring to these instances from outside the abstract class object, at a
higher level in the SoC.
Let us once again refer to the previous example.
In Step 1, ‘viewB’ of the ABS_BIST class object refers to the instance of the
memory ‘m_B’.
In Step 2, this instance is referred to at level A. Notice, the BIST instance
‘bist_A’ associates with this instance (viewB) as its child as:
mb_define_instance -instance bist_A -class BIST -children {b
-view viewB}
Example of usage of ‘view’
Consider a block (blockA0) with three different memory wrappers. When
instantiated in higher levels, one or more BIST engines can be associated
with these wrappers. The ‘dotted’ lines and the box represent future
connections and new components.
The vendor data file would be as follows. Note the class relationship and
the definition of the abstract class ABS_BIST.
# vendor File
mb_define_class -class WRAP
mb_define_class -class BIST -children WRAP
mb_define_class -class ABS_BIST -abstract \
-children {ABS_BIST WRAP} -auto_configure
87
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Bottom-up Methodology
The designer creates an abstract class object at the level of blockA0. Note,
the three views are created for the three memory wrapper instances inside
this abstract class object.
# User File
mb_define_instance -instance w11_1 -class WRAP
mb_define_instance -instance w11_2 -class WRAP
mb_define_instance -instance w12_1 -class WRAP
mb_define_instance -top -class ABS_BIST -children w11_1 -view
v1
mb_define_instance -top -class ABS_BIST -children w11_2 -view
v2
mb_define_instance -top -class ABS_BIST -children w12_1 -view
v3
Now we are ready to use this modified block at the next level (while
inserting BIST for blockA1). At this step, the designer performs the
following tasks:
1. Instantiate, at a higher level, an abstract class object with several
‘views’,
2. Insert BIST components at this level
3. Associate instances from within the abstract class object to the newly
inserted BIST components.
88
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Bottom-up Methodology
Let us now consider a block containing an object of class Y. Insert BIST into
this block and define an abstract class for this modified block:
# Vendor data
mb_define_class –class ABS_X –children {ABS_X Y} \
–abstract –auto_configure
mb_auto_configure_abstract_classes -verbose
89
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Bottom-up Methodology
90
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Bottom-up Methodology
91
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Bottom-up Methodology
This block (blockA0) is now BIST-inserted per the user data shown below.
92
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Bottom-up Methodology
We will now insert an object of class X (an instance of module ‘BIST’) at the
level of ‘blockA1’. The connections to the various class objects are
93
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Bottom-up Methodology
automatically established by the tool. The ‘user data’ and the final
structure of the modified blockA1 will look as follows:
Notice that the desired connection between the object of class X (instX)
and object of class Y (blockA1.instY and inst_blockA1.blockA0.instY) have
been established between ports A (of the parent class object) and port B
(of the child class object).
94
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Bottom-up Methodology
To process this block, the designer defines the abstract class instance with
a single view for both the instances. Note the ‘mb_define_instance’ in the
user data file. The resultant structure is shown in the schematic. Notice
that only one additional port is created.
Contrast this scenario when the designer decides to create two views,
instead of a single view, for each of the instances of Y. Notice the user data
file with two views and the resultant modified blockA0 with two additional
ports instead of one, as follows:
95
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Bottom-up Methodology
The vendor data defines a daisy chain in this SoC with the
‘mb_configure_connect_chain’ command in the following vendor data file.
This command sets up a rule for establishing a daisy chain connection
among various class objects. The same vendor file will be used for the
entire bottom up flow:
96
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Bottom-up Methodology
97
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Bottom-up Methodology
The top level (blockA1) is processed next with the following user data file.
Notice, one view of the modified blockA0 is considered.
The following is the resultant structure for modified blockA1. Note the
chain configuration.
Contrast this when the designer decides to consider two (2) views for the
instances inside blockA0. The following is the result of the design
modification in the two stages of bottom-up flow. We use the same vendor
data as before.
98
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Bottom-up Methodology
You may note that two additional ports have been created for the two
possible chains in order to access two different views from outside this
block.
99
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
Bottom-up Methodology
100
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early
Bottom-up Methodology
101
Synopsys, Inc.
The Need for Automatic Insertion of MBIST at an Early Stage of a Design
102
Synopsys, Inc.
TIPs and FAQs
103
Synopsys, Inc.
TIPs and FAQs
Manual.
104
Synopsys, Inc.
TIPs and FAQs
105
Synopsys, Inc.
TIPs and FAQs
Q: How do I specify a list of arguments in the user data file with double
braces? For example, I am trying to supply an argument value map in the
‘mb_insert_instance’ command, as follows:
mb_insert_instance -instance I2 -cell WRAP_FUSECNTL_T09 \
-parameter_map {{NUM_BAYS 23 MEM_ADDR 10}}
Ans: The following are examples that will work (not the usage of double
braces):
-parameter_map {a 1}
-parameter_map {a 1 b 2}
-parameter_map {{a 1}}
-parameter_map {{a 1} {b 2}}
-parameter_map [list a 1 b 2]
The following usage will not work and error message will be generated:
-parameter_map {{a 1 b 2}}
-parameter_map {{{a 1 b 2}}} … or more braces
Appendix A describes the recommended use of braces in the Tcl file.
106
Synopsys, Inc.
TIPs and FAQs
.O(_o[DATA_BIT*(j+1)-1:DATA_BIT*j]),
.BWE(bwe));
end
endgenerate
This will result in SpyGlass DFT MBIST product finding the memories in the
following names:
“\MEM[0].inst “, “\MEM[1].inst “, “\MEM[2].inst “, etc.
The recommended way to use these names in the user data file is as
follows. Note, in order to preserve the space character (required character
due to the escape character ‘\’) or “ ”, mention one item in one list:
mb_define_instance -instance {sram1p/\MEM[0].inst } -class
1PMEM
mb_define_instance -instance {sram1p/\MEM[1].inst } -class
1PMEM
mb_define_instance -instance {sram1p/\MEM[2].inst } -class
1PMEM
mb_define_instance -instance {sram1p/\MEM[3].inst } -class
1PMEM
:
mb_insert_instance -instance sram1p/collar_2 -cell
collar_1p_2
mb_define_instance -instance sram1p/collar_2 -class
COLLAR_1P_2 \
-children { \
{sram1p/\MEM[2].inst } \
{sram1p/\MEM[3].inst } \
}
107
Synopsys, Inc.
TIPs and FAQs
The following SpyGlass-MBIST Tcl commands will help achieve this goal:
# On the input side
mb_configure_connect_net -from_class M -from_pin A \
-to_class CTRL -to_pin sys_A \
-parallel \
mb_configure_connect_net -from_class CTRL -from_pin mem_A \
-to_class M -to_pin A \
-parallel \
Q: We have some BIST engines (DRAM BIST, ROM BIST) that run-off of
the customer’s at-speed functional clock
Is there any way that we can have the tool connect the BIST input clock to
108
Synopsys, Inc.
TIPs and FAQs
the same functional clock and the associated memories? In other words,
the following are the objectives:
The customer connects their functional clock to the memory, and then
SpyGlass adds the BIST engine and we want SpyGlass to connect the
BIST input clock to the same net that is connected to the memory
functional clock pin.
If the BIST is shared/associated with multiple memories, then all the
memories would need to be connected to the same functional clock.
Ans: Use the ‘mb_configure_connect_net’ command with the ‘-
single_connection’ switch. The vendor file should look like:
# Vendor data
mb_define_class -class MEMORY
mb_define_class -class BST -children MEMORY
mb_configure_connect_net -from_class MEMORY -to_class BST \
-from_pin clk -to_pin func_clk \
-parallel –single_connection
Now consider a pre-BIST design with two memories with two dedicated
clocks and two memories that share the same clock. In the following
diagram, ‘mem_inst1’ and ‘mem_inst2’ are the two memory instances with
dedicated clocks. Memories ‘mem_inst3’ and ‘mem_inst4’ both share one
functional clock.
109
Synopsys, Inc.
TIPs and FAQs
The desired ‘modified’ structure is shown in the above diagram. Note that
the inserted BIST components are connected to the specific functional
clocks of the respective memories. The user data is shown below:
# User data
# This bist instance has one memory
mb_insert_instance -instance BIST_inst1 -cell bist
mb_define_instance -instance BIST_inst1 -class BST -children
mem_inst1
110
Synopsys, Inc.
TIPs and FAQs
111
Synopsys, Inc.
TIPs and FAQs
112
Synopsys, Inc.
TIPs and FAQs
Ans: There are two ways a user can use ‘sg_shell’ in a script.
sg_shell < test.tcl (re-direction)
(will always exit out, regardless of pass or fail).
- sg_shell -tcl test.tcl
(this is for a startup file scenario) so control would remain in sg_shell
until exit is provided explicitly.
In case some errors occur while processing the test.tcl file then the
processing is stopped and the remaining test.tcl file is not parsed.
Q: I notice that a module name has been changed (to reflect the user’s
preference). However, the name of the file containing the module has NOT
changed. To summarize, the user’s preference is:
mb_set_prefix_n_suffix
-module_prefix atrenta_MYTOP \
-file_prefix atrenta_MYTOP \
-file_suffix sg
The following file has been created with the content shown below. Notice
that the module name has changed, but the file name has not.
cd
prjdir/prj_MYTOP/mbist_dft/spyglass_reports/rme/mbist-dft/
atrenta_modified_rtl_files
more WRAPPER_SRAM2SFBM.v_sg fl- Note the file name
113
Synopsys, Inc.
TIPs and FAQs
The file name and module names must match in the pre-BIST RTL
The file must not contain more than one module
Also note, it is the user’s responsibility to make sure that appropriate
module and file prefixes are supplied so that the module and file names
match in the post-BIST RTL.
Q: How to avoid generating any ‘file_prefix’ for the modified output file
with the ‘mb_set_prefix_n_suffix’ command?
Ans: The Tcl command has no mechanism to prevent file name changes
(i.e. not add any file prefix). In other words, the following is not allowed:
mb_set_prefix_n_suffix -module_prefix atrenta_${design} \
-file_prefix “” \ fl Not allowed in Tcl
-file_suffix sg \
-wire_prefix atrenta_wire
Workaround is to read a SGDC file with the ‘rme_config’ command to
specify the intention:
rme_config [-module_prefix <string>] \
[-file_prefix <string>] \ <-“” is possible
[-file_suffix <string>] \
[-wire_prefix <string>]
Read this sgdc file in the user data file as follows:
read_file –type sgdc <sgdc file name>
In this case, you will not need to supply the ‘mb_set_prefix_n_suffix’
command.
(A more robust solution planned for future is to make provision of a
keyword ‘NO_PREFIX’ to be supplied as an argument of this Tcl command
(VI-67497))
114
Synopsys, Inc.
TIPs and FAQs
115
Synopsys, Inc.
TIPs and FAQs
mb_connect_net -broadcast \
-from inst_bist.BSTART \
-to {inst1.BEN inst2.BEN {inst_ram.\L1[2].inst .BEN} \
{inst_ram.\L1[1].inst .BEN} {inst_ram.\L1[0].inst
.BEN}}
116
Synopsys, Inc.
TIPs and FAQs
{top.tst_mbist_mode[1]} {top.tst_mbist_mode[2]}
{top.tst_mbist_mode[3]} \
-to {top.controller.mode_sel} -parallel
While running SpyGlass it reports a fatal error in the <top>.sgdc file
generated during the run.
Ans: You can use ‘list’command of Tcl to specify the multiple entries to an
option
puts $fileId2 "\n mb_connect_net -from [list [get_attribute
[get_ports -regexp {{.*\.tst_mbist_mode}}] full_name]] -to
{$main_controller_inst.mode_sel} -parallel"
This will result in
mb_connect_net -from {{top.tst_mbist_mode[0]}
{top.tst_mbist_mode[1]} {top.tst_mbist_mode[2]}
{top.tst_mbist_mode[3]}} -to {top.controller.mode_sel} -
parallel
117
Synopsys, Inc.
TIPs and FAQs
118
Synopsys, Inc.
Appendix A: Guidelines
of Using Braces in Tcl
Files Specified to the
SpyGlass DFT MBIST
Product
SpyGlass DFT MBIST product users have found that there are various ways
to use braces in the User data (Tcl) file for driving the MBIST insertion and
that Tcl is rather ‘ambiguous’ in interpreting a single value vs.
comprehensive lists. This puts unnecessary overhead and complication to
the automated scripts often used to generate the User data files.
This document is an effort towards standardizing the usage of braces and
describes the guidelines for use with SpyGlass DFT MBIST product.
Adhering to these guidelines will ensure that the users’ intention will be
unambiguously interpreted by SpyGlass DFT MBIST product.
The following discussion focuses on specifying hierarchical instances, nets,
and pin-names in SpyGlass TCL commands.
119
Synopsys, Inc.
Appendix A: Guidelines of Using Braces in Tcl Files Specified to the SpyGlass DFT MBIST Product
Guideline
For ease of scripting, user can always generate with a brace:
-option {value}
Guideline
For ease of scripting, user can always generate with a brace:
-option {{value1} {value2} {value3}}
120
Synopsys, Inc.
Appendix A: Guidelines of Using Braces in Tcl Files Speci-
Guideline
For ease of scripting, user can always generate with a brace:
-option {value}
Guideline
For ease of scripting, user can always generate with a brace:
-option {{value1} {value2} {value3}}
121
Synopsys, Inc.
Appendix A: Guidelines of Using Braces in Tcl Files Specified to the SpyGlass DFT MBIST Product
Example:
mb_insert_instance -instance {inst_name} -cell ABCD
mb_insert_instance -instance {inst_name} -cell ABCD \
-parameter_map {{param value}} => Note that
{param value} is a single object
mb_insert_instance -instance inst_name -cell PQR \
-parameter_map {{param1 value1} {param2 value2}}
mb_replace_instance
Syntax:
mb_replace_instance
-instance <single_value>
-cell <single_value>
Example:
mb_replace_instance -instance {inst_name} -cell ABCD
mb_define_instance
Syntax:
mb_define_instance
-instance <single_value>
-children <multiple_value>
-view <single_value>
-class <single_value>
122
Synopsys, Inc.
Appendix A: Guidelines of Using Braces in Tcl Files Speci-
Example:
mb_define_instance -instance {\L2[0].a0 } -class ABS_BIST
-view v1
mb_define_instance -instance I1.I2 -children {I3.I4 I5.I6}
mb_define_instance -instance {I1.I2} -children {I3.I4}
mb_define_instance -instance {I2.I5} -children {{\I7.I8 }
{I9.I2}}
mb_define_instance -instance {\I6.I7 .I8} -children {{I3
-view V1}} => Note that {I3 -view V1} is a single
object
mb_define_instance -instance {\I7.I8 } -children {{I3 -
view V1} {I4 -view V2}} -view V3
mb_define_instance -instance I1.I2 -children {{{\I7.I8
.I9} -view V1}} => Note the extra braces for escaped name
mb_define_instance -instance {I1.I2} -children {{{\I7.I8
.I9} -view V1} {{I2.I5} -view V3}}
mb_define_instance -instance b1_1 -class BIST -children
{{{\L2[0].a0 } -view v1} {{\L2[0].a0 } -view v2}
{{\L2[0].a0 } -view v3}}
mb_define_instance -instance b1_3 -class BIST -children
{{w12_3}}
mb_define_instance -top -class ABS_BCTL -children {{b1_1}
{b1_2} {b1_3}} -view v1
mb_define_instance -instance b_1 -class BIST -children
{{\MYRLMB[0].MYRLMB_inst .W_0.INTWRAP}}
mb_define_instance -instance b1_1 -class BIST -children
{{{a0.\L1[0].inst } -view v1}}
Note that there may be extra space characters. They are in general
acceptable:
mb_define_instance -instance a1 -class B -children { {A} }
mb_define_instance -top -class ABS_B -children { {A} } -
view v1
mb_define_instance -instance b1_1 -class BIST \
-children { { {a0.\L1[0].inst } -view v1} }
123
Synopsys, Inc.
Appendix A: Guidelines of Using Braces in Tcl Files Specified to the SpyGlass DFT MBIST Product
mb_remove_instance
Syntax:
mb_remove_instance
-instance <multiple_value>
-cell <multiple_value>
Example:
mb_remove_instance -instance {{*term*} {*I}} -cell {TERM}
mb_remove_instance -instance {{*term*}} -cell {{*TERM*}}
mb_connect_net
Syntax:
mb_connect_net
-from <multiple_value>
-to <multiple_value>
-through_in_pin <single_value>
-through_out_pin <single_value>
-select_enable <single_value>
Example:
mb_connect_net -from {a.pin b.pin} -to {c.pin d.pin}
mb_connect_net -from {{\a.c .b.pin[2]} {I1.pin}} \
-to_pin {{d.pin[1]} {d.pin[0]}}
mb_connect_net -from {a.pin} -through_in_pin{\b.c .d.pin}\
-through_out_pin {d.pin[1]}
124
Synopsys, Inc.
Appendix B: An Example
of Using Waivers
SpyGlass does not produce error messages for ‘stopped’ modules that a
user explicitly wants to blackbox and for which no definition is supplied.
The following methodology illustrates how the relevant messages can be
‘waived’.
Consider the following design hierarchy and the files containing their
descriptions:
Test (test.v)
|
--WRAP_1 (WRAP_1.v)
|
--WRAP_2 (no definition is specified)
You supply the following ‘stop’ options:
set_option stop WRAP_2
set_option stop XYZ
set_option stop ABC
set_option stop PQR
In addition, you have not supplied any definition of these ‘stop’ modules.
You will see one error message:
ErrorAnalyzeBBox ErrorAnalyzeBBox Error WRAP_1.v
5 10 Design Unit 'WRAP_2' has no definition; black-
125
Synopsys, Inc.
Appendix B: An Example of Using Waivers
126
Synopsys, Inc.
Appendix C: Working
with Generated Names
127
Synopsys, Inc.
Appendix C: Working with Generated Names
"\mylabel[5].inst "
"\mylabel[4].inst "
"\mylabel[3].inst "
"\mylabel[2].inst "
"\mylabel[1].inst "
"\mylabel[0].inst "
genvar j;
128
Synopsys, Inc.
Appendix C: Working with Generated Names
generate
for (j = 0; j < 2; j = j + 1) begin : label1
LVRAM inst_lvram (.CK(ck), .CE(_ce[j]), .WE(we),
.A(a[12-1:0]), .I(i),
.O(_o[16*(j+1)-1:16*j]),
.BWE(bwe));
end
endgenerate
endmodule
genvar j;
generate
for (j = 0; j < 3; j = j + 1) begin : label2
129
Synopsys, Inc.
Appendix C: Working with Generated Names
A Complete Example
A Complete Example
// File: top.v
module top (func);
input func;
// ---------------------------------------------------------
// Three memories are instantiated inside this 'ram' block.
// They produce names with escape characters
// ---------------------------------------------------------
ram inst_ram(.func(func));
// ---------------------------------------------------------
// Two more memories are instantiated at the top level.
// They produce 'simple' names
// ---------------------------------------------------------
MEM inst1 (.func(func), .BEN(1'b0));
MEM inst2 (.func(func), .BEN(1'b0));
endmodule
// File: ram.v
module ram(func);
input func;
// --------------------------------------------------------
// Three (3) memories are instantiated through this
'generate' block.
// Instance names are generated with 'escape' ('\') character
// --------------------------------------------------------
genvar j;
generate
for (j = 0; j < 3; j = j + 1) begin : L1
MEM inst (.func(func), .BEN(1'b0));
end
endgenerate
endmodule
// File: lib.v
// Contains the description of memories and the bist IPs
130
Synopsys, Inc.
Appendix C: Working with Generated Names
A Complete Example
endmodule
module bist(BSTART);
output BSTART;
endmodule
# File: vendor.data
mb_define_class -class WRAP
mb_define_class -class BIST -children WRAP
# File: top.tcl
# This is the user data to drive MBIST insertion in the
design
set design top
new_project prj_$design -force
mb_reset
source vendor.data
# ---------------------------------------------------------
131
Synopsys, Inc.
Appendix C: Working with Generated Names
A Complete Example
132
Synopsys, Inc.
Appendix D: An Example
of Shell View Created
during Bottom-up Flow
Design:
// File: rtl/A.v
module A(func);
input func;
memwrap inst_M1(.func(func), .bstart(1'b0));
memwrap inst_M2(.func(func), .bstart(1'b0));
P inst_P (.func(func));
endmodule
// File: rtl/P.v
module P(func);
input func;
endmodule
// File: rtl/top.v
module top(func);
input func;
A inst_A(.func(func));
memwrap inst_M(.func(func), .bstart(1'b0));
endmodule
133
Synopsys, Inc.
Appendix D: An Example of Shell View Created during Bottom-up Flow
Vendor data:
mb_define_class -class WRAP
mb_define_class -class BIST -children WRAP
mb_configure_connect_net -from_class BIST -from_pin bstart \
-to_class WRAP -to_pin bstart -bitwise_broadcast
User data:
# File: A.tcl
set design A
new_project prj_$design -force
set_option y {./rtl}
set_option libext { .v }
read_file -type hdl rtl/$design.v lib/lib.v
current_methodology $::SPYGLASS_HOME/Methodology/MBIST_DFT
current_goal mbist_dft -alltop
set_parameter mbist_top_level_name $design
set_parameter mbist_net_prefix w_
mb_reset
source lib/vendor.file
// File: top.tcl
set design top
134
Synopsys, Inc.
Appendix D: An Example of Shell View Created during
set_option y {./rtl}
set_option libext {.v}
set_option stop { A }
read_file -type hdl rtl/$design.v lib/lib.v
# -----------------------------------------------
# Read the ‘shell’ view for the lower block (‘A’)
# -----------------------------------------------
read_file -type sourcelist prj_A/mbist_dft/spyglass_reports/
rme/mbist-dft/atrenta_modified_rtl_files/
atrenta_generated_abstract_block.f
current_methodology $::SPYGLASS_HOME/Methodology/MBIST_DFT
current_goal mbist_dft -alltop
set_parameter mbist_top_level_name $design
set_parameter mbist_net_prefix w_
mb_reset
source lib/vendor.file
save_project
close_project
exit
135
Synopsys, Inc.
Appendix D: An Example of Shell View Created during Bottom-up Flow
Step 2:
sg_shell –tcl top.tcl
136
Synopsys, Inc.