BSDXG PDF
BSDXG PDF
BSDXG PDF
Boundary Scan
User Guide
Version O-2018.06, June 2018
Copyright Notice and Proprietary Information
©2018 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/Pages/Trademarks.aspx.
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.
Synopsys, Inc.
690 E. Middlefield Road
Mountain View, CA 94043
www.synopsys.com
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
1.Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
2.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
3.All advertising materials mentioning features or use of this software must display the following acknowledgement:
This product includes software developed by the University of California, Berkeley and its contributors.
4.Neither the name of the University nor the names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This software is not subject to any license of the American Telephone and Telegraph Company or of the Regents of
the University of California.
Permission is granted to anyone to use this software for any purpose on any computer system, and to alter it and
redistribute it freely, subject to the following restrictions:
1.The authors are not responsible for the consequences of use of this software, no matter how awful, even if they arise
from flaws in it.
2.The origin of this software must not be misrepresented, either by explicit claim or by omission. Since few users ever
read sources, credits must appear in the documentation.
3.Altered versions must be plainly marked as such, and must not be misrepresented as being the original software.
Since few users ever read sources, credits must appear in the documentation.
4.This notice may not be removed or altered.
v
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
Contents vi
DFTMAX™ Boundary Scan User Guide Version O-2018.06
Chapter 1: Contents
Contents vii
1-vii
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
set_bsd_configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-3
set_attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-4
set_bsd_ac_port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-4
define_dft_design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-4
set_bsd_instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-6
set_boundary_cell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-7
IEEE Std 1149.6 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-8
IEEE Std 1149.6 Preview Specifications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-12
IEEE Std 1149.6 Synthesis Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-12
BSDL Generation Specifications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-13
BSD Pattern Generation Specifications for IEEE Std 1149.6 . . . . . . . . . . . . . . . . . . 3-14
Limitations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-15
Example Scripts for an IEEE Std 1149.6 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-15
Contents viii
DFTMAX™ Boundary Scan User Guide Version O-2018.06
Chapter 1: Contents
Contents ix
1-ix
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
Example Script for Test Pattern Generation Using a Netlist and BDSL File . . . 5-26
Example Script for Test Pattern Generation From Only a BSDL File. . . . . . . . . 5-26
Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-27
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-27
Fault Grading BSD Patterns With TetraMAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-27
Formatting BSD Test Vectors in WGL_serial . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-27
Using BSD Test Vectors in TetraMAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-28
Simulating BSD Patterns With VCS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-29
Contents x
Preface
This preface includes the following sections:
• About This Guide
• Customer Support
xi
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
Audience
The primary readers of the DFTMAX Boundary Scan User Guide are ASIC design engineers
who implement boundary-scan logic and who are already familiar with the Design Compiler
tool.
A secondary audience is manufacturing engineers who develop tests for boards that include
these boundary-scan devices.
Related Publications
For additional information about the DFTMAX tool, see the documentation on the Synopsys
SolvNet® online support site at the following address:
https://solvnet.synopsys.com/DocsOnWeb
You might also want to see the documentation for the following related Synopsys products:
• Design Compiler®
• TetraMAX®
®
• VCS
These documents supply additional information:
• DFTMAX Boundary Scan Reference Manual
• Supplement to IEEE Std 1149.1b-1994, IEEE Standard Test Access Port and
Boundary-Scan Architecture
• IEEE Std 1149.1a-1993 Standard Test Access Port and Boundary-Scan Architecture
Preface
About This Guide xii
DFTMAX™ Boundary Scan User Guide Version O-2018.06
• IEEE Std 1149.1-2001 Standard Test Access Port and Boundary-Scan Architecture
• IEEE Std 1149.6-2003 Standard for Boundary-Scan Testing of Advanced Digital
Networks
Release Notes
Information about new features, changes, enhancements, known limitations, and resolved
Synopsys Technical Action Requests (STARs) is available in the DFTMAX Design-For-Test
Release Notes in SolvNet.
To see the DFTMAX Design-For-Test Release Notes,
1. Go to the Download Center on SolvNet located at the following address:
https://solvnet.synopsys.com/DownloadCenter
2. Select “DFT Compiler (Synthesis),” and then select a release in the list that appears.
Preface 1: Preface
Chapter
About This Guide 1-xiii
xiii
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
Preface
About This Guide xiv
DFTMAX™ Boundary Scan User Guide Version O-2018.06
Customer Support
Customer support is available through SolvNet online customer support and through
contacting the Synopsys Technical Support Center.
Accessing SolvNet
The SolvNet site includes a knowledge base of technical articles and answers to frequently
asked questions about Synopsys tools. The SolvNet site also gives you access to a wide
range of Synopsys online services including software downloads, documentation, and
technical support.
To access the SolvNet site, go to the following address:
https://solvnet.synopsys.com
If prompted, enter your user name and password. If you do not have a Synopsys user name
and password, follow the instructions to sign up for an account.
If you need help using the SolvNet site, click HELP in the top-right menu bar.
Preface 1: Preface
Chapter
Customer Support 1-xv
xv
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
Preface
Customer Support xvi
1
Introduction to DFTMAX Boundary Scan 1
This chapter introduces the DFTMAX boundary-scan design and verification flow.
This chapter includes the following sections:
• DFTMAX Boundary-Scan Features and Benefits
• Using the Boundary-Scan Design Flow
• Using the Boundary-Scan Verification Flow
1-1
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
The tool supports the following features for the IEEE Std 1149.6:
• Inserting boundary-scan components
• Verifying boundary-scan designs
• BSDL and pattern generation
The design resulting from verification can be synthesized with the core design, creating a
unified design. You can generate functional, leakage, and DC parametric test vectors for
your boundary-scan design. You can invoke DFTMAX boundary-scan commands from the
dc_shell command line or in the Design Vision command window.
The tool allows you to generate your boundary-scan design, specify boundary-scan
components and preview them before you synthesize the design. No separate synthesis of
boundary-scan components of BSD mode logic is required because synthesis occurs
automatically when you insert the boundary-scan logic.
The compliance checker ensures that your design complies with IEEE Std 1149.1 and
prepares your design for BSDL generation, functional testbench generation, and pattern
generation. In the process of ensuring design compliance, the compliance checker identifies
functional components of the design that violate the standard.
The BSDL generator provides an easy-to-read BSDL description that describes the
organization of the boundary-scan logic and specifies the implemented boundary-scan
instructions.
The tool provides the following features and benefits:
• Allows the synthesis of boundary scan design with the core design
• Reduces the need for extensive simulation to verify that the design conforms to IEEE Std
1149.1
• Provides an easy-to-use interface for verifying the boundary-scan logic in the Synopsys
environment
• Provides verification that supports any boundary-scan design; you can infer instructions,
check for compliance, and generate patterns and BSDL file for designs that already
incorporate boundary-scan logic and those that were not inserted by the tool and
complies with IEEE Std 1149.1
• Supports IEEE Std 1149.6 logic insertion and BSDL and test vectors for the logic
• Supports both synchronous and asynchronous boundary-scan implementations
• Supports user-defined test data registers and user-defined instructions
• Supports user-defined boundary-scan register cells and TAP controller
• Supports customizing the implementation of the boundary-scan register
• Supports user-defined soft macro pad cells
• Supports linkage ports for analog ports, power ports, ground ports, or ports driven by a
black-box cell
• Supports differential I/O pad cells
• Extracts boundary-scan information from designs that include an internal scan chain in
any of the scan styles supported by the DFTMAX tool
• Generates the BSDL output file in an easy-to-read and ready-to-use format
• Enables the generation of boundary-scan test vectors
The boundary-scan design flow with compliance checking in Figure 1-1 consists of the
following steps:
1. Read the design netlist (RTL or gates) and logic libraries.
❍ Define the interface for the core design.
❍ Define pad cells for all inputs, outputs, and bidirectional ports on the top level of the
design.
2. Set the boundary-scan design’s specifications.
❍ Enable the boundary-scan feature.
❍ Select the required IEEE Std - 1149.1 or 1149.6.
❍ Identify all boundary-scan test access ports and assign their attributes.
❍ Identify linkage ports.
❍ Specify the compliance-enable pattern.
❍ Define clock ports.
❍ Define the boundary-scan register configuration, and assign all boundary-scan
register instructions.
❍ Configure the device identification register and an optional user code capture value.
❍ Customize the boundary-scan register as needed.
❍ Select boundary-scan cells from default cell types or from your user-defined cell
types.
❍ (Optional) Read the pin map as a BSD specification.
3. Preview the boundary-scan circuitry.
4. Generate the boundary-scan circuitry.
5. Generate BSDL file, BSD functional, leakage, and DC parametric test vectors.
6. Write the BSD inserted gate-level netlist (optional).
7. Run the IEEE Std 1149.1 compliance checker.
8. Read the port-to-pin map file.
9. Generate BSDL file, BSD functional, leakage, and DC parametric test vectors.
Example 1-1 illustrates a standard design flow using the DFTMAX tool.
# All clocks must be defined so BC_4 cells are used for them
create_clock clk -period 100 -waveform [list 20 30]
Check
compliance Check IEEE Std 1149.1 compliance
The boundary-scan verification flow in Figure 1-2 consists of the following steps:
1. Read the boundary-scan design’s gate-level netlist and synthesis logic library.
2. Enable the boundary-scan feature.
3. Identify the test access ports that drive the IEEE Std 1149.1 test signals.
4. Identify linkage ports.
5. Set BSD compliance-enable patterns.
6. Define clock ports.
7. Specify implemented instructions.
For more information on the verification flow for your design, see Chapter 4, “Verifying the
Boundary-Scan Design.”
Example 1-2 illustrates a standard verification flow using the DFTMAX tool.
Example 1-2 Standard Boundary-Scan Verification Script
set company {Synopsys Inc}
set search_path {"." $search_path}
set target_library "class.db"
set synthetic_library {dw_foundation.sldb}
set link_library [concat "*" $target_library
$synthetic_library]
## BSD-inserted design
read_file -format verilog TOP_bsd.v
#read_file -format ddc TOP_xgbsd.ddc
link
current_design TOP
########################################################
## For BSDL full design package
read_pin_map pin_map1.txt
set_bsd_configuration -default_package my_package1
write_bsdl -naming_check BSDL -output TOP_xgpkg1.bsdl
########################################################
## For BSDL reduced package with No connect ports (NC)
read_pin_map pin_map2.txt
set_bsd_configuration -default_package my_package2
write_bsdl -naming_check BSDL -output TOP_xgpkg2.bsdl
2-1
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
Preview boundary-scan
Read pin
map
target_library – Usually the same as your link library, unless you are translating a design
between technologies.
link_library – The ASIC vendor libraries where your pad cells and core cells are initially
represented. You should also include your DesignWare library in this variable definition.
Note:
To learn more about library variables and search paths, see the Design Compiler
documentation.
The following commands illustrate this:
dc_shell> set search_path {. $search_path}
dc_shell> set target_library asic_vendor.db
dc_shell> set synthetic_library {dw_foundation.sldb}
dc_shell> set link_library [concat * $target_library $synthetic_library]
For more information on these boundary-scan cell types, see the “Boundary-Scan Cells”
section in Chapter 1, “Boundary-Scan Concepts for IEEE Std 1149.1,” in the DFTMAX
Boundary Scan Reference Manual.
By default, the tool uses these boundary-scan cell designs to implement the boundary-scan
register. Table 2-1 shows how the designs are selected.
Table 2-1 Default Boundary-Scan Register Designs by Port Type
To explicitly specify the boundary-scan register design for a particular port, use the
set_boundary_cell command. For example,
dc_shell> set_boundary_cell -class bsd -type BC_1 -ports DATA_OUT
To specify separate boundary-scan elements for the input, output, or control signals of a
complex pad cell, use the -function option. For example,
dc_shell> set_boundary_cell -class bsd -type BC_1 \
-function output -ports DATA_IO
dc_shell> set_boundary_cell -class bsd -type BC_1 \
-function control -ports DATA_IO
dc_shell> set_boundary_cell -class bsd -type BC_4 \
-function input -ports DATA_IO
For example,
dc_shell> set_bsd_linkage_port -port_list {DEBUG[1] DEBUG[0]}
To define clock signals for timing analysis, use the create_clock command. For example,
dc_shell> create_clock -period 4 -waveform {0 2} SYSTEM_CLK
dc_shell> create_clock -period 100 -waveform {45 55} TCK
Define functional and/or test clocks as needed for timing analysis of the design. For more
information about the create_clock command, see the Design Compiler User Guide.
To define clock signals for test insertion or analysis, use the set_dft_signal command.
For example,
dc_shell> set_dft_signal -view spec -type TCK -port TCK
dc_shell> set_dft_signal -view spec \
-type ScanClock -port SYSTEM_CLK -timing {45 55}
Timing waveform specifications are required for scan clocks but optional for TCK. The
default for TCK is a return-to-zero clock that rises at 45ns and falls at 55ns. To define a
different waveform, use the -timing option and provide the rising-edge and falling-edge
arrival times:
dc_shell> set_dft_signal -view spec -type TCK -port TCK -timing {40 60}
To define a return-to-one clock, provide the trailing rising-edge time followed by the leading
falling-edge time:
dc_shell> set_dft_signal -view spec -type TCK -port TCK -timing {55 45}
The default test period is 100ns. To change it, set the test_default_period variable:
dc_shell> set_app_var test_default_period 50
dc_shell> set_dft_signal -view spec -type TCK -port TCK -timing {20 30}
For information on additional timing attributes, such as strobe time and data delay attributes,
see Appendix B, “Setting Timing Attributes.”
Timing and test clock specifications are independent; timing clocks do not affect test
analysis and test clocks do not affect timing analysis. However, the tool uses an
observe-only boundary-scan cell for any port defined as either a timing clock or a test clock.
ac_init_clk high Signal common to all test receivers used to load the
hysteretic memory
ac_init_clk low Signal common to all test receivers used to load the
hysteretic memory with inverted polarity
capture_clk low BSR cell capture stage clock with inverted polarity
capture_en high BSR cell capture stage load enable for synchronous
style with inverted polarity
capture_en low BSR cell capture stage load enable for synchronous
style with inverted polarity
highz high Highz pin for the BSR cells within the pad and BC_7
mode_3
highz low Highz pin for the BSR cells within the pad with
inverted polarity and BC_7 mode 3
Table 2-2 Interface Signal Types That Support BSR Segment Pad Cells (Continued)
shift_dr low BSR cell serial data enable with inverted polarity
update_clk low BSR cell update stage clock with inverted polarity
update_en high BSR cell update stage load enable for synchronous
style
update_en low BSR cell update stage load enable for synchronous
style with inverted polarity
port high Port associated to pad, excluded for pad type hybrid
interface
A boundary-scan cell and a pad cell can be physically bound in a single design module to
form a BSR segment. The tool can automatically stitch this BSR segment to the top-level
BSR chain. Use the define_dft_design -params $bsr_segment$ parameter to describe
the BSR segment.
The syntax is
-params {$bsr_segment$ list string "bsr_spec1"\
"bsr_spec2"... $end_list$}
• pos: Identifies the position of the BSR cell within the pad cell BSR cell segment.
• bsr_type: Specifies the BSR cell type. Valid cells types are: BC_1, BC_2, BC_4, BC_7,
AC_1, AC_2, AC_SelX, AC_SelU.
• pi: Specifies the primary input of the BSR cell in the BSR segment. Since the primary
input of the boundary cell in a segment is internal, use the pin input of the pad cell as the
bsr_spec<n>. If no primary input exists in the BSR-segment design, specify “-” for this
value.
• po: Specifies the primary output of the BSR cell in the BSR segment. Since the primary
output of the boundary cell in a segment is internal, use the pin output of the pad cell as
the bsr_spec<n>. If no primary output exists in the BSR-segment design, specify “-” for
this value.
• safe_val/dis_rslt: For input and two-state output BSR cells, specifies the safe value
of the BSR cell. For tristate or bidirectional BSR cells, specifies the disable result of the
port when the associated control BSR cell is in safe state. Allowed values are 0 1 X Z.
• cntrl_bsr_pos: Specifies the position of the control BSR cell associated with this BSR
cell. If there is no control BSR cell, specify “-” for this value.
Note:
If the $bsr_segment$ parameter is not used for a BSR segment pad cell, the tool adds
BSR cells to the design for the pad cell during synthesis and the embedded BSR cells
are not included in the generated BSDL or patterns. An IEEE Std 1149.1 BSR segment
is validated only with the check_bsd command. However, an IEEE Std 1149.1 BSR
segment can be validated by simulation after the insert_dft patterns are generated.
The $bsr_segment$ parameter supports bus notation on pin names. The tool expands BSR
segments that use bus notations within their specifications. The order of expanded BSR
cells is the same as the order of specified BSR specifications.
The following example describes a 32-bit two-state output pad with embedded BSR cells.
define_dft_design ... -interface {data_in di h port po h...} \
-params { $bsr_segment$ list string \
"0 BC_1 di[0:31] po[0:31] X -" $end_list$}
The following example describes a 32-bit output pad with the first 16 bits supporting
two-state output ports and the next16 bits supporting tristate output ports with a single
control BSR cell.
si
BC_1
pi or po
BC_2 Core
so
Figure 2-3 and the following script show an input pad cell with an observe-only BSR cell.
define_dft_design -design_name in_pad2 -type PAD \
-interface {port pi h data_out po h si \
si h so so h capture_clk cclk h} \
-params {$pad_type$ string input $bsr_segment$ \
list string "0 BC_4 pi - X -" end_list$}
si
pi po
Core
BC_4
so
Figure 2-4 and the following script show an output pad cell.
define_dft_design -design_name out_pad1 -type PAD \
-interface {data_in pi h port po h si \
si h so so h capture_clk cclk h update_clk \
uclk h mode_out mode1 h} \
-params {$pad_type$ string output $bsr_segment$ \
list string "0 BC_1 pi po X -" $end_list$}
si
BC_1
or po
Core pi BC_2
so
Figure 2-5 and the following script show a tristate output pad cell with control and data
BSR cells.
define_dft_design -design_name out_pad2 -type PAD \
-interface {data_in pi h port po h enable en h si \
si h so so h capture_clk cclk h update_clk \
uclk h mode_out mode1 h} \
si
en BC_1
or
BC_2
Core
BC_1 po
pi or
BC_2
so
Figure 2-6 and the following script show a bidirectional pad cell with control and BC_7
BSR cells.
define_dft_design -design_name bidi_pad1 -type PAD \
-interface {data_in pi h data_out po2 h port po h \
enable en h si si h so so h capture_clk cclk \
h update_clk uclk h mode1_inout mode 1 h \
mode2_inout mode2 h}
-params {$pad_type$ string bidirectional \
$bsr_segment$ list string "0 BC_2 en po 1" \
"1 BC_7 pi po Z 0 -" $end_list$}
si
en BC_1
or
BC_2
Core
pi po
BC_7
po2
so
Figure 2-7 and the following script show a bidirectional pad cell with control and separate
input and output BSR cells.
define_dft_design -design_name bidi_pad2 -type PAD \
-interface {data_in pi h data_out po2 h port po h \
enable en h si si h so so h capture_clk cclk \
h update_clk uclk h mode_out mode1 h \
mode_in mode2 h}
-params {$pad_type$ string bidirectional \
$bsr_segment$ list string "0 BC_2 en po 1" \
"1 BC_1 pi po Z 0" "2 BC_2 po po2 X -" $end_list$}
Figure 2-7 Bidirectional Pad With Separate Input and Output BSR Cells
si
en BC_1
or
BC_2
BC_1
pi po
Core or
BC_2
po2 BC_1
or
BC_2
so
The following examples demonstrate complex BSR segment pad designs assumed to use
synchronous-style BSR cells.
Figure 2-8 and the following script show an input differential pad cell that has an
observe-only BSR cell for each leg of the pad to observe the test receiver and a
control-and-observe BSR cell.
define_dft_design -design_name diff_pad1 -type PAD \
-interface {port ppi h port_inverted npi h data_out \
po h si si h so so h capture_clk cclk h capture_en cen h \
update_clk uclk h update_en uen h mode_in mode2 h } \
-params {$pad_type$ string input $differential$ string \
true $bsr_segment$ list string "0 BC_4 ppi - X" \
"1 BC_2 ppi po X" "2 BC_4 npi - X -" $end_list$}
si
TR BC
ppi
BC po
Core
npi
TR BC
so
Figure 2-9 and the following script show a tristate output pad cell that has a control BSR cell
and AC BSR cells for data and ac/bc selection. Such pads are typically used in IEEE Std
1149.6 designs.
define_dft_design -design_name diff_pad2 -type PAD \
-interface {port ppo h port npo 1 data_in \
pi h enable en h si si h so so h capture_clk cclk h \
capture_en cen h update_clk uclk h update_en uen h \
mode_out mode1 h ac_test act h ac_mode acm h} \
-params {$pad_type$ string output \
$differential$ string true \
$bsr_segment$ list string "0 BC_2 en ppo 1" \
"1 AC_1 pi ppo Z 0" "2 AC_SelU - ppo X -" $end_list$}
Figure 2-9 Tristate Output Differential Pad Cell With AC BSR Cells
si
en
BC
ppo
pi
Core AC_1
npo
AC_
SELU
so
Figure 2-10 and the following script show a bidirectional differential pad cell that shows
multiple BSR cells.
define_dft_design -design_name diff_pad2 -type PAD \
-interface {port ppo h port npo 1 data_in \
pi h data_out po2 h enable en h si si h so so h \
capture_clk cclk h capture_en cen h update_clk uclk h \
update_en uen h mode_out mode1 h mode_in mode2 ac_test act \
h ac_mode acm h} \
-params {$pad_type$ string bidirectional \
$differential$ string true \
$bsr_segment$ list string "0 BC_2 en ppo 1" \
"1 AC_1 pi ppo Z 0" "2 AC_SelU - ppo X" \
"3 BC_4 npo - X" "4 BC_2 ppo po2 X" \
"5 BC_4 npo - X -" $end_list$}
en
BC
ppo
pi
AC
npo
AC_
SELU
Core
BC TR
po2
BC
BC TR
so
Figure 2-11 and the following two pad-design definition commands show a multibit
differential input pad cell block with BSR cells associated with each bit of the pad cell.
define_dft_design -design_name diff_pad3 -type PAD \
-interface {port ppi h port npi 1 data_out \
po h si si h so so h \
capture_clk cclk h capture_en cen h update_clk uclk h \
update_en uen h mode_in mode2 h} \
-params {$pad_type$ string input \
$differential$ string true \
$bsr_segment$ list string "0 BC_4 ppi[1:2]- X" \
"1 BC_2 pp1[1:2] po[1:2] X" "2 BC_4 npi[1:2] - X -" $end_list$}
si
TR BC
ppi[1]
po[1]
npi[1] BC
TR BC
Core
TR BC
ppi[2]
po[2]
npi[2] BC
TR BC
so
To define these pad designs, specify the hybrid pad type in the $bsr_segment$ parameters
list provided to the define_dft_design command. Also, to specify the multiple ports for
multibit differential pad type hybrids such as Peripheral Component Interconnect Express
(PCIe) and Serialize/Deserialize (SerDes) pads, specify the $diff_port_pairs$
parameter in the list. The port information specified for each $bsr_segment$ parameter is
used to identify the port associated to the BSRs in the $bsr_segment$ parameter
descriptions.
Note that because you are describing existing logic that is already implemented, you must
define the boundary-scan cells in the same order as they exist in the design.
Example 2-1 shows a script for a multiport $bsr_segment$ parameter that uses the hybrid
pad type with five ports associated to a BSR segment. Each port has its own BSR cell
attached to the pad with the respective $bsr_segment$ parameter specifications.
In this example, the -interface signals for the multiport specification include only the TAP
FSM signals that are to be hooked up automatically to the top level BSR chain. The -params
specification includes the pad type of hybrid, indicating that the design is a multiport BSR
segment, followed by the $bsr_segment$ parameter specification for each pad associated
to a port.
Example 2-1 Script for a Multiport With a 5-Pads $bsr_segment$
define_dft_design -design_name MY_BIP_DES -type PAD \
-interface {\
capture_clk capture_clk h \
capture_en capture_en h \
update_clk update_clk l \
update_en update_en h \
shift_dr shift_dr h \
si si h \
so so h \
mode1_inout mode1 h \
mode2_inout mode2 h \
mode_in mode_in h \
mode_out mode_out h \
}\
-params {$pad_type$ string hybrid \
$bsr_segment$ list string \
"0 BC_1 bip_addr_[2] bip_addr[2] X -" \
"1 BC_1 bip_addr_[1] bip_addr[1] X -" \
"2 BC_1 bip_addr_[0] bip_addr[0] X -" \
"3 BC_2 rstn rstn_ X -" \
"4 BC_1 oen dinout 1 -" \
"5 BC_7 data dinout Z 4" $end_list$ }
Example 2-2 shows a script for a 4-bit multibit PCIe differential pad with the respective BSR
segment attached to the differential SerDes of the pad. The -interface signals for the
multiport specification include only the TAP FSM signals that are to be hooked up
automatically to the top-level BSR chain. The -params specification includes the pad type
option hybrid, indicating that the design is a multibit BSR segment, followed by the
$bsr_segment$ parameter specification for each port bit. Note that the script uses -param
$diff_port_pairs$ to specify the ports associated to the SerDes differential pads of the
differential PCIe pad. Each bit of the multibit has its own BSR segment associated to the
differential port.
Example 2-2 Script for a 4-Bit Multibit Differential PCIe Bus Interface bsr_segment
## 4 bit PCIe DIFF_RX_TX bsr_segment
define_dft_design -type PAD \
-design_name DIFF_RX_TX_PCIe \
-interface { \
si tt_si H \
so tt_so H \
capture_clk tt_capture_clk H \
capture_en tt_capture_en H \
update_clk tt_update_clk H \
update_en tt_update_en H \
highz tt_highz H \
shift_dr tt_shift_dr H \
mode_out tt_mode_o H \
ac_init_clk tt_ac_init_clk H \
ac_mode tt_AC_Mode H \
ac_test tt_AC_test H } \
-params { $pad_type$ string hybrid $differential$ boolean true \
$diff_port_pairs$ list string \
"tt_diffrx_in_pos[0] tt_diffrx_in_neg[0]" \
"tt_diffrx_in_pos[1] tt_diffrx_in_neg[1]" \
"tt_diffrx_in_pos[2] tt_diffrx_in_neg[2]" \
"tt_diffrx_in_pos[3] tt_diffrx_in_neg[3]" \
"tt_difftx_out_pos[0] tt_difftx_out_neg[0]" \
"tt_difftx_out_pos[1] tt_difftx_out_neg[1]" \
"tt_difftx_out_pos[2] tt_difftx_out_neg[2]" \
"tt_difftx_out_pos[3] tt_difftx_out_neg[3]" \
$end_list$ \
$bsr_segment$ list string \
wire i_clk,i_tm,i_en,i_in0,i_in1,i_in2,o_en0,o_en1,
o_en2,o_out0,o_out1,o_out2;
IPAD U1 ( .A(trst_n),.Z() );
IPAD U2 ( .A(tdi),.Z() );
IPAD U3 ( .A(tms),.Z() );
TRIOPAD U4 ( .A(),.E(), .PAD(tdo) );
IPAD U5 ( .A(in0), .Z(i_in0) );
IPAD U6 ( .A(tck),.Z() );
//IPAD U7 ( .A(in1), .Z(i_in1) );
t_bc1 U7
UP_CORE U15
(i_clk,i_tm,i_en,i_in0,i_in1,i_in2,o_en0,o_en1,
o_en2,o_out0,o_out1,o_out2);
endmodule
======================================
## Module t_bc1.v
wire i_data_in;
=======================================
## Module t_bc2.v
wire i_data_in;
==========================================
## Module t_bc4.v
wire i_data_in;
-design_name t_bc4 \
-interface {port clk high \
data_out t_data_out high \
si t_si h \
so t_so h \
capture_clk t_capture_clk high \
capture_en t_capture_en low \
shift_dr t_shift_dr h} \
-params {$pad_type$ string input $bsr_segment$ list \
string "0 BC_4 t_in - X -" $end_list$}
0 EN
EN_bs_ctrl
1
0 DOUT
DOUT_bs_data
1
DATA
bs_mode_out DIN
DIN_bs_data
CLK
CLK
UIP
Normally, boundary-scan insertion makes its connections at the pad pins of the associated
port. To specify integrated boundary-scan functionality, the port-associated connections
must be hooked up to IP block pins instead. Use the set_boundary_cell -hookup_pin
command to define any input, output, or controls signals as needed for each port, along with
the corresponding hookup pins on the IP block:
# configure output MUX control and data for bidirectional port DATA
set_boundary_cell -class bsd -type MY_BC_1 -function output \
-ports DATA -hookup_pin UIP/DOUT_bs_data
set_boundary_cell -class bsd -type MY_BC_1 -function control \
-ports DATA -hookup_pin UIP/EN_bs_ctrl -name EN_bs_ctrl_cell
To maintain compliance, the IP block hookup pins should correspond to the original
port-association pins, without additional functional logic in the path.
Use the set_dft_signal command to connect the output mode signal, which places all
output boundary-scan cells into output mode:
# configure output BSR mode control signal
set_dft_signal -view spec -type bsd_mode_out \
-hookup_pin UIP/bs_mode_out -active_state 1
During boundary-scan insertion, the tool connects the boundary-scan signals as specified,
which incorporates the IP block into the boundary-scan register (BSR) insertion. Figure 2-13
shows the connections added to the IP block.
Figure 2-13 Boundary-Scan Connections to the IP Block
0 EN
EN_bs_ctrl
MY_BC_1 1
0 DOUT
DOUT_bs_data
MY_BC_1 1
DATA
bs_mode_out DIN
BSR_mode_inst
BC_4
BC_4 DIN_bs_data
CLK
CLK
UIP
You can use the -hookup_pin option of the set_boundary_cell command to define input
data, output data, and output control signal hookup pins for the following boundary scan cell
types: BC_1, BC_2, BC_4, BC_7. You can also use it to define the hookup pins for custom
boundary-scan cells defined with the set_boundary_cell command.
In the preceding example, the output data is generated and MUXed inside the IP block. The
custom boundary-scan cells, named MY_BC_1, do not contain an output MUX. You can also
use standard controllable cells, such as BC_1, with this feature. In this case, the output
MUXes inside the cell become redundant because the output MUXes in the IP block always
take precedence.
You can use the -type option of the set_dft_signal command to define mode control
hookup pins for the following mode signals:
• -type bsd_mode_in – Mode enable signal that enables inward-facing control for all
input boundary-scan cells
• -type bsd_mode_out – Mode enable signal that enables outward-facing control for all
output boundary-scan cells
• -type bsd_mode1_inout – Mode 1 enable signal for all BC_7 boundary-scan cells
• -type bsd_mode2_inout – Mode 2 enable signal for all BC_7 boundary-scan cells
Option Description
-port port_list Name of the design port driving the IEEE Std
1149.1 test signal.
Test signal names defined with the set_dft_signal command are listed in Table 2-4.
Table 2-4 Test Signal Names
Because the TRST signal is an active-low signal, it should be defined with the
-active_state 0 option.
Note:
Use the -view existing specification with the TAP port signals for a verification only
flow.
Note:
When TAP port signals are specified in existing_dft view, BSD preview/insertion exits
with a message that TAP ports are not found. BSD preview/insertion only looks at view
spec for TAP port signals and -hookup_pin is not supported for this view for TAP ports.
When -hookup_pin is specified for view spec for TAP ports, the specification is rejected
with an error message.
For more information about preview_dft, see “Previewing the Boundary-Scan Design” on
page 2-71.
Option Description
-port port_list Name of the IEEE Std 1149.1 test port signal.
[-default_package package_name]
[-instruction_encoding binary | one_hot]
[-ir_width instruction_register_width]
[-std ieee1149.1_1993 | ieee1149.1_2001 |ieee1149.6_2003]
[-style synchronous | asynchronous]
-asynchronous_ Sets the type of reset The value true (default) puts an
reset implemented in the TAP asynchronous reset in the TAP controller.
controller.
The value false puts no reset in the TAP
controller; you must provide a power-up
mechanism.
-check_pad_designs Specifies the kind of The value none causes all the pads in the
validation of the soft macro pad_design_list to be bypassed during
pads. preview_dft validation. Validation of all pads
is still done by the check_bsd command.
The value all (default) causes all pads in
the pad_design_list to be validated
including open_source and open_drain pad
types.
-default_package Sets the default package to package_name is the name of the package
be used. you provide.
-instruction_ Sets the implementation for The value binary causes the instruction
encoding the instruction register. register implementation to be binary.
The value one_hot causes the instruction
register implementation to be one-hot.
-std Specifies the IEEE Std By default, the tool runs in the
1149.X for the IEEE1149.1-2001 standard mode.
boundary-scan design flow. When set to -std ieee1149.6_2003, the
tool runs in the IEEE1149.1-2001 and the
IEEE1149.6-2003 standard modes.
When set to -std ieee1149.1_1993
ieee1149.6_2003, the tool runs in the
IEEE1149.1-1993 and the
IEEE1149.6-2003 standard modes.
-style Sets the TAP controller The value synchronous (default) causes
TCK routing synchronous TAP controller signals,
implementation. sync_capture_en, sync_update_dr, and
TCK to be connected to the boundary-scan
register cells.
The value asynchronous causes
asynchronous TAP controller signals,
clock_dr and update_dr to be connected to
the boundary-scan register cells.
Note:
The default package must be the package name defined in the port-to-pin mapping file
you use. Use the -default_package option to define the default package when you are
reading multiple packages into the design.
To select the boundary-scan configuration for the TAP controller in your design, you can use
the following command:
set_bsd_configuration -style synchronous \
-instruction_encoding binary -ir_width 4 \
-asynchronous_reset true -default_package my_package
The names of these hierarchical blocks contain the name of the current design. For a current
design named ChipLevel, the TAP controller and BSR chain are instantiated with the
following names:
dc_shell> get_cells *ChipLevel*
{ChipLevel_DW_tap_inst ChipLevel_BSR_top_inst}
You can specify alternative insertion locations for the TAP controller and BSR chain with the
set_dft_location command:
set_dft_location dft_hier_name -include test_logic_types
where test_logic_types is a list of one or more test logic types, and dft_hier_name is
the hierarchical location for the test logic to be inserted. The TAP logic type specifies the TAP
controller logic; the BSR logic type specifies the BSR chain. If a hierarchical block named
dft_hier_name does not exist, it is created during DFT insertion.
For example, to insert the TAP controller into the existing core logic block named U_CORE
and to insert the BSR chain into the existing I/O block named U_IO, use the following
commands:
dc_shell> set_dft_location -include {BSR} U_IO
Note that the specified boundary-scan logic types are still inserted as hierarchical blocks,
placed inside the specified hierarchical locations. You can use the ungroup command to
remove the additional lower level of hierarchy, if needed.
For more information on the set_dft_location command, see the “Specifying a Location
for DFT Logic Insertion” section in Chapter 5, “Advanced DFTMAX Compression
Techniques,” in the DFTMAX User Guide, and also see the man page.
• Initializing the TAP with asynchronous reset using a PUR cell and TRST
• Initializing the TAP with synchronous reset holding TMS to logic1 and at least 5 TCK
clock cycles
Implementing this command causes the tool to add the TRST port and to implement the
asynchronous reset for the TAP controller.
If you want to specify a PUR cell with a delay of 130 ns to the power-up reset of your TAP
controller, use the following command:
set_bsd_power_up_reset -cell_name POR_INST \
-reset_pin_name reset -active high -delay 130
The tool adds an inverter during synthesis when the PUR cell is set to -active high. For a
verification-only flow, confirm that the TAP controller trst_n pin gets pulsed with active low
upon PUR reset.
When using the set_bsd_power_up_reset command to reset the TAP controller, the BSD
patterns wait for the amount of time specified by the -delay option before starting the
boundary-scan simulation. For example, suppose the power-up reset is defined with a 2000
ns delay:
set_bsd_power_up_reset -cell_name my_por_inst \
-reset_pin_name pwruprst -active high -delay 2000
Then, with a 100 ns TCK clock period, the test patterns wait 2000 ns (20 TCK cycles) before
starting the simulation. This behavior is captured in the BSDL file as well as in the BSD STIL
patterns and the Verilog testbench.
For the STIL patterns, this delay is accomplished by adding a Loop statement just after the
first initialization pattern and before pattern 0, as shown in the following example:
Pattern "_BSD_block_" {
W "BSD_WFT";
C {
"all_inputs" = \r8 0;
"all_outputs" = XXX;
"all_bidirectionals" = Z;
}
Loop 20 { V {
"all_inputs" = NNNNNNNN;
"all_outputs" = XXX;
"all_bidirectionals" = X;
}
}
With this Loop statement added, the simulation waits the required 20 TCK cycles before
continuing the simulation.
Similarly, a waiting time is added to the Verilog testbench as follows:
initial begin
_failed = 0;
/* Initialization vectors. */
_bi=1'bZ;
assign _ck=1'b0;
assign _pi=7'bXXXXXXX;
#2000 ;
assign _e_po=3'bXXX;
assign _m_po=3'b111;
-> _check_po;
You can model the PUR reset pulse in the simulation library for a design without a TRST port
by using the power-up reset cell PUR_CELL (instance POR_INST) with an active high
RESET pin that is pulsed 150 ns after a delay of 850 ns, as shown in Example 2-5.
Example 2-5 PUR Simulation Model
module pur_cell (VDD, Z)
input VDD;
output Z;
reg Z;
initial begin
assign Z = 1’b0;
#850 assign Z = 1’b1;
#150 assign Z = 1’b0;
end
endmodule
You can specify a black-box cell for your PUR cell if it has the output reset pin defined
correctly. Although the tool does not use the function from the synthesis library for the
synchronous reset, the simulation library should describe the PUR reset function correctly,
as shown by the preceding commands. See Step 6, “Simulating BSD Patterns With VCS” on
page 5-29.
Because the power-up-reset behavior cannot be simulated in TetraMAX ATPG, the PUR
model relies on virtually disabling the power-up-reset and using the synchronous reset
protocol to initially reset the TAP controller.
For TetraMAX ATPG, the following PUR model and methodology is recommended for a
boundary-scan-inserted design:
• Use a different cell, PUR_tmax, as the power-up-reset cell in the TetraMAX flow. The
PUR_tmax cell has a simulation model in which the power-up-reset pin is tied
permanently to an inactive value, as shown in the following TetraMAX simulation model:
module PUR_tmax (VDD, RESET);
output RESET;
input VDD;
assign RESET = 1'b0;
endmodule // PUR_tmax
This change of the PUR reference cell can be done automatically within the synthesis
script by using the change_link command, as shown in the following example:
set_dont_touch [get_cells POR_INST]
insert_dft
write -format verilog -hierarchy -output DESIGN_bsd.v
change_link POR_INST pur/PUR_tmax
write -format verilog -hierarchy -output DESIGN_tmax.v
check_bsd -verbose
create_bsd_patterns
• Use the following TetraMAX command to specify a valid random state (0 or 1) on all state
elements:
set drc -initialize_dff_dlat random
Note that this DRC option applies to the TAP controller state elements as well.
• The synchronous reset sequence generated at the beginning of the external vectors
resets the TAP controller after the controller has been brought to a valid random state by
the preceding command.
Initializing the TAP With Asynchronous Reset Using PUR and TRST
The IEEE Std 1149.1 allows the use of both your TRST and Power-Up Reset (PUR) cell to
reset the TAP controller; the TRST cannot be used for system reset at any time. When using
the TRST pin and the PUR cell, you must specify both commands as described previously
in the chapter.
Figure 2-14 shows how the TAP initialization can be implemented.
Figure 2-14 Use of Power-Up Reset for System and Test Logic
Power-up
reset
generator
Reset for
system logic
System (active low)
reset pin &
(active low)
&
TRST * Reset for
TAP controller
(active low)
The device identification register’s least significant bit is always set to 1 by the tool and is not
configurable.
You can specify the device ID code by using the set_bsd_instruction command. For
example,
dc_shell> set_bsd_instruction IDCODE -code 0011 -register DEVICE_ID \
-capture_value {32'b00000000000000000000000000000011}
Use the -capture_value option to define the binary code that represents the device
identification register. This code contains 32 digits, ordered in the way previously described.
Use the -code option to specify the opcode. If omitted, the tool chooses an available
opcode.
Ensure that the least significant bit (LSB) of the capture value is set to 1; if you do not, you
see the following error:
Error: Invalid LSB for IDCODE capture value. (UIT-545)
Discarded bsd instruction specification.
0
When you get this error, change the last bit from 0 to 1.
The device identification register is not implemented until you specify the IDCODE
instruction. For more about specifying instruction registers, see “Implementing the IEEE Std
1149.1 Instructions” on page 2-46.
To instruct the tool to use the USERCODE instruction when inserting boundary scan, use
the -capture_value option with the set_bsd_instruction command. You can specify a
32-bit binary or hexadecimal value, design pins, or a mix of bits and design pins.
IDCODE is an IEEE Std 1149.1 optional instruction. The tool supports a flexible IDCODE
implementation, which allows you to implement IDCODE with a flexible opcode for the
instruction register (IR) and revise the identification code parameters after synthesis.
Example 2-6 Defining the Flexible IDCODE Instruction
set_bsd_instruction USERCODE -code {1110} \
-capture_value {4'h1, 16'b1111111110000000, 12'h2ab} \
-register DEVICE_ID
For example, specify binary or hexadecimal-bit patterns using the following sized-constant
Verilog syntax:
number of bits in the binary representation [b|h]’value
The DIR identification code bits are listed in the boundary-scan inserted netlist for
postprocessing of the DIR parameters.
You can include any valid and unreserved opcode for the IDCODE instruction with the
DW_tap_uc TAP controller. Use the opcode 0001 for the DW_tap IDCODE instruction.
For an example run script that implements USERCODE and flexible IDCODE within the tool,
see the section “Implementing USERCODE and Flexible IDCODE” on page 2-42. For
information on how to use a custom TAP controller with USERCODE and flexible IDCODE
instructions, see Appendix A, “Custom Boundary-Scan Design.”
The instructions signal type is mandatory for the access interface, while sample and
extest are optional.
The following example inserts a custom TAP controller with USERCODE and flexible
IDCODE instructions:
define_dft_design -type TAP_UC \
-interface { list tck tck H \
tdi tdi H \
tms tms H \
so so H \
tdo tdo H \
tdo_en tdo_en H \
trst_n trst_n H \
shift_dr shift_dr H \
sync_capture_en sync_capture_en H \
bypass_sel bypass_sel H \
sync_update_dr sync_update_dr H \
instructions instructions H \
device_id_sel device_id_sel H \
user_code_sel user_code_sel H \
user_code_val user_code_val H} \
-design_name my_tap_uc
set_bsd_instruction {IDCODE} -code {1001} \
-capture_value {32’b10000001000111010111000011110111}
set_bsd_instruction {USERCODE} -code {1100} -register DEVICE_ID \
-capture_value {32’b00011100111110000000010101010010}
The insert_dft command implements any specified opcode for the IDCODE instruction as
well as the specified capture values through the following TAP access signals:
device_id_sel
ver
ver_sel
part_num
part_num_sel
mnfr_id
mnfr_id_sel
Note:
The -high, -low, -sequential_high, -sequential_low, and -internal_scan options
are used to connect signals controlled by the TAP controller.
-input_clock_ Specifies the value that drives the clock signal going into PI (default)
condition the system when the instruction is active. If clocking the
TDR with bist_clk use PI, and for TCK use capture_clk. TCK
Puts the boundary scan register into transparent mode. NONE (default)
-clock_cycles List of clock port and integer pairs that specify the
clock_cycle_list minimum number of clock cycles on the specified clock
port required for the design to stay in the Run-Test/Idle
TAP controller state to ensure completion of the INTEST
or the RUNBIST instruction.
-signature pattern Specifies the state of the self-test status register after
execution of the RUNBIST instruction. The pattern
variable correlates to the <det pattern> argument defined
in section B.8.15 of the Supplement to IEEE Std 1149.1.
-excluded_bsr_ Specify conditioning of BSR cells excluded from the CLAMP - all
condition specified short BSR chain. BSR cells that
Note: The error, Invalid value %s specified for option are not part of
-excluded_bsr_condition, occurs when a value other the specified
than CLAMP or NONE is used with this option. BSR chain are
conditioned as
if CLAMP
instruction is
active.
You need not do anything to implement these mandatory instructions in their default form.
The following instructions can be optionally implemented:
• IDCODE
• USERCODE
• HIGHZ
• CLAMP
• INTEST
• RUNBIST
To implement optional instructions, specify the list of instructions to be implemented with the
set_bsd_instruction command. For example, the following command implements the
HIGHZ and CLAMP instructions:
dc_shell> set_bsd_instruction -view spec {HIGHZ CLAMP}
See section “USERCODE and Flexible IDCODE Support” on page 2-40 for information
about using the IDCODE and USERCODE instructions.
The options you use to set the INTEST instruction are shown in Table 2-8 on page 2-44.
Note:
INTEST instructions using BC_4 cells on input ports and BC_2 cells on output ports are
not supported by the IEEE Std 1149.1.
In the following example, the INTEST instruction specifies 5000 ns wait time at the RTI state
with PI driving the input and HIGHZ driving the output:
dc_shell> set_bsd_instruction INTEST -view spec \
-time 5000 \
-input_clock_condition PI -output_condition HIGHZ
Note:
You must select either the -time option for real-time specifications or the
-clock_cycles option for clock-cycles specification but not both.
For additional information on the INTEST instruction, see the DFTMAX Boundary Scan
Reference Manual.
The options you use to set the RUNBIST instruction are shown in Table 2-8 on page 2-44.
When the BIST test is complete, the resulting signature value is stored in a self-test status
register. The value specified with the -signature option is the expected value to be
captured in the self-test status register after a successful test. This expected signature value
is written to the output BSDL file so that board-level test software can generate test patterns.
If the BIST self-test status register is to be selected by the RUNBIST instruction, define it as
a user-defined test data register and specify it with the -register option. If the self-test
status register is accessed via other means, you can select any other valid register
specification for the RUNBIST instruction, such as BYPASS, with the -register option. For
more information on defining test data registers, see “Defining a User-Defined Test Data
Register” on page 2-50.
You must select either the -time option for real-time specifications or the -clock_cycles
option for clock-cycles specification but not both.
In the following example, the RUNBIST instruction specifies 5000 ns wait time at the
Test-Idle state with HIGHZ as the output condition:
set_bsd_instruction RUNBIST -time 5000 \
-register STATUS_UTDR \
-input_clock_condition PI \
-output_condition HIGHZ \
-signature 10101010
The BYPASS instruction uses an all-ones opcode for both the binary and one-hot encoding
styles.
You can also specify user-defined opcodes for each instruction using the -code option of the
set_bsd_instruction command:
dc_shell> set_bsd_instruction -view spec EXTEST -code {0010}
When using user-defined opcodes, you must configure each instruction with a separate
set_bsd_instruction command. All user-defined opcodes should have the same word
length. If you only specify user-defined opcodes for some instructions, the tool chooses the
opcodes for the remaining instructions.
You can use the preview_dft command to see the final opcode assignments for the
implemented instructions. For more information, see “Previewing the Boundary-Scan
Design” on page 2-71.
The test_setup block in the SPF loads the instruction opcode into the instruction register.
The SPF can be generated as soon as the insert_dft or the check_bsd command is
completed.
If you use the -bsd_init_data option to define an initialization value for the instruction, the
test protocol also loads the value into the associated test data register after loading the
instruction:
dc_shell> set_bsd_instruction MY_INST \
-register MY_UTDR_REG -bsd_init_data 00010 ...
You can read the test_setup section of this instruction SPF into a top-level DFT insertion run
that is performed after boundary-scan insertion. For example,
dc_shell> set_dft_configuration -scan enable
...
dc_shell> read_test_protocol -section test_setup CONFIG_PADS.spf
dc_shell> dft_drc
For more information on reading custom test setup procedures, see “Defining an
Initialization Protocol” in Chapter 5, “Pre-Scan Test Design Rule Checking,” in the DFTMAX
Design-For-Test User Guide.
You can specify leaf pins or hierarchical pins as the interface pins. The tool uses these pins
to connect the register between TDI and TDO so that it can shift data when selected. To
invert the sense of a signal, use the -active_state 0 option of the set_dft_signal
command.
You can also define additional types of pins for user-defined test data registers, as described
in Table 2-9.
Table 2-9 Supported DFT Signal Types for User-Defined Test Data Registers
bsd_shift_en Specifies the register access pin to be hooked up to the TAP shift_dr
pin when the instruction to select the register is active.
inst_enable Specifies the register access pin to be held active when the instruction
that selects the register is active.
bist_enable Specifies the register access pin to be hooked to TCK when the
instruction that selects the register is active and TAP is in
Run-Test-Idle (RTI) state. This signal is also used in core integration.
where:
• register_name is a unique name that is not shared with another register.
• pin_list contains all interface pins (excluding global reset pins), as previously defined
with the set_dft_signal command.
• length is the scan length of the register.
Normally, when a boundary-scan clock or control signal is connected to a hookup pin using
the set_dft_signal command, the signal is directly connected to the specified hookup pin.
However, when you include a hookup pin in the pin list passed to the -hookup option of the
set_scan_path command, the tool gates the signal to be active only when the
corresponding instruction is loaded.
Note:
If you are defining a boundary-scan reset signal for the register, always omit the
bsd_reset signal pin in the hookup pin list provided to the set_scan_path command.
For more information, see “Configuring a Test Data Register Reset Signal” on page 2-54.
During boundary-scan insertion, the UTDR cell of the specified pins can be empty,
unmapped, or black-box; its content is not checked. After the design is mapped, you must
ensure that the UTDR cell is modeled by a complete functional netlist before checking its
function with the check_bsd command.
If you do not know the length of the test data register, you can specify a dummy value for the
-exact_length option. Then, use the check_bsd -verbose command to analyze the
register and report the correct length. Rerun with the correct length specified for the
-exact_length option so that the BSD patterns are correctly generated.
Example 2-7 shows the definition of a 10-bit user-defined test data register named
DEBUG_reg.
Example 2-7 Defining a User-Defined Test Data Register
set_dft_signal -view spec -type tdi \
-hookup_pin BIST/WRAPPER_0/debug_in
set_dft_signal -view spec -type tdo \
-hookup_pin BIST/WRAPPER_0/debug_out
set_dft_signal -view spec -type bsd_shift_en \
-hookup_pin BIST/WRAPPER_0/debug_en
set_dft_signal -view spec -type capture_clk \
-hookup_pin BIST/WRAPPER_0/clk
set_dft_signal -view spec -type bsd_reset -active_state 0 \
-hookup_pin BIST/WRAPPER_0/debug_reset
After the UTDR is defined, you can define user-defined instructions that reference it, as
described in “Defining a User-Defined Instruction” on page 2-55.
If, when using a UTDR, you get the TEST-437 error message, you must validate it to make
sure it shifts properly. You can test shifting using the dft_drc command in the DFTMAX tool.
For information on validating shift operation, see the DFTMAX documentation.
Global Reset
To implement a global reset, define the UTDR reset pin as a bsd_reset signal using the
set_dft_signal command. Do not include the UTDR reset pin in the hookup pin list
provided to the set_scan_path command. For example,
dc_shell> set_dft_signal -view spec -type bsd_reset \
-hookup_pin REG/RSTN -active_state 0
The tool implements a global reset by connecting the Test-Logic-Reset state signal to the
specified hookup pin, accounting for the pin’s active state, as shown in Figure 2-15.
Figure 2-15 Global Reset Connection to Active-Low UTDR Reset Pin
REG
1'b1 RSTN
Boundary-scan
insertion
TAP controller
REG
Test-Logic-Reset RSTN
System Reset
A system reset is a functional reset connection that exists in the design prior to
boundary-scan insertion. The tool does not make any modifications to system reset logic
during boundary-scan insertion, as shown in Figure 2-16.
Figure 2-16 Existing System Reset Connection to Active-Low UTDR Reset Pin
Boundary-scan
insertion
If you do not use a system reset, tie the UTDR reset pin to its inactive value prior to
boundary-scan insertion.
Boundary-scan
insertion
Functional system
reset logic REG
RSTN
TAP controller
Test-Logic-Reset
In Example 2-8, a user-defined instruction named DEBUG is defined that references the
DEBUG_reg register previously defined in Example 2-7.
Example 2-8 set_bsd_instruction Command
set_bsd_instruction DEBUG -code 1010 \
-register DEBUG_REG \
-input_clock_condition TCK \
-output_condition BSR
By default, the UTDRs for private instructions do not appear in the BSDL file. In addition,
private instructions are not included in the boundary-scan patterns. To include private
instruction UTDRs in BSDL generation and to include private instructions in pattern
generation, set the test_bsd_make_private_instructions_public variable to true.
Example 2-9 creates BSDL and pattern files for internal and external use, where the internal
files contain additional information about the private instructions.
This instruction implements a user-defined instruction UDI_HIGHZ with the same behavior as
the HIGHZ instruction to the I/O ring.
Note:
You must specify the signal types and pin paths before you run the insert_dft
command, as the connections are made during DFT insertion.
In Example 2-10, all sixteen TAP FSM state signals are hooked up to hierarchy pins named
CORE/state_name using the set_dft_signal command.
Example 2-10 Asserting Design Pins by TAP FSM State
set_dft_configuration -bsd enable -scan disable
set_dft_signal -view spec -type bsd_test_logic_reset -hookup_pin CORE/reset
set_dft_signal -view spec -type bsd_run_test_idle -hookup_pin CORE/run_test_idle
set_dft_signal -view spec -type bsd_select_dr_scan -hookup_pin CORE/select_dr_scan
set_dft_signal -view spec -type bsd_capture_dr -hookup_pin CORE/capture_dr
set_dft_signal -view spec -type bsd_shift_dr -hookup_pin CORE/shift_dr
set_dft_signal -view spec -type bsd_exit1_dr -hookup_pin CORE/exit1_dr
set_dft_signal -view spec -type bsd_pause_dr -hookup_pin CORE/pause_dr
set_dft_signal -view spec -type bsd_exit2_dr -hookup_pin CORE/exit2_dr
set_dft_signal -view spec -type bsd_update_dr -hookup_pin CORE/update_dr
set_dft_signal -view spec -type bsd_select_ir_scan -hookup_pin CORE/select_ir_scan
set_dft_signal -view spec -type bsd_capture_ir -hookup_pin CORE/capture_ir
set_dft_signal -view spec -type bsd_shift_ir -hookup_pin CORE/shift_ir
set_dft_signal -view spec -type bsd_exit1_ir -hookup_pin CORE/exit1_ir
set_dft_signal -view spec -type bsd_pause_ir -hookup_pin CORE/pause_ir
set_dft_signal -view spec -type bsd_exit2_ir -hookup_pin CORE/exit2_ir
set_dft_signal -view spec -type bsd_update_ir -hookup_pin CORE/update_ir
...
insert_dft
Figure 2-18 Combinational Assertion Logic for Active-High Hierarchical Design Pin
UCONFIG UCONFIG
EN EN
CONF
Original design logic
Logic after DFT insertion
set_bsd_instruction CONF -view spec -high UCONFIG/EN
The combinational decode logic can produce a glitch when the instruction register changes
value. Use the -high and -low options when a decode glitch cannot be captured because
only the following pin types exist at the design pin or in its fanout:
• A synchronous data pin of a flip-flop clocked by TCK
• A synchronous data pin of a flip-flop clocked synchronously to TCK
• A synchronous data pin of a flip-flop that is not clocked when TCK is active
TCK
Use the -sequential_high and -sequential_low options when a decode glitch could be
captured because any of the following pin types exist at the design pin or in its fanout:
• An asynchronous set or reset pin
• An edge-triggered or level-sensitive clock pin
• A synchronous data pin of a flip-flop clocked asynchronously to TCK
• A pad control signal that affects the outward electrical behavior of the device
All assertions change value on the falling edge of TCK that updates the instruction register,
which occurs as the TAP controller exits the Update-IR state. A single instruction can assert
multiple pins, and multiple instructions can assert the same pin. For more information on
assertion logic, see SolvNet article 039263, “What Is the Difference Between the -high, -low,
-sequential_high, and -sequential_low Options?”
Assertion logic is added to the existing signal connection. The original design logic before
BSD insertion should drive the design pins as is required for operation when a specified
instruction is not active. If a pin signal should be inactive when a specified instruction is not
active, tie active-high pins to logic 0 and active-low pins to logic 1.
Note:
If you specify the -sequential_high or -sequential_low option for any pin, then any
-high and -low pin assertions (for all instructions) also become registered.
Implementing Scan-Through-TAP
The scan-through-TAP (STT) capability in the tool allows you to daisy chain the scan chains
with the BSR chain to become a single chain between TDI and TDO. This results in saving
scan-in, scan-out, and scan-enable pins. You implement scan-through-TAP using the IEEE
Std 1149.1 user-defined instruction, which selects the scan chains between TDI and TDO.
Using scan-through-TAP, you can automate the process of
• Specifying the scan-through-TAP register containing multiple scan-chains and
boundary-scan registers
• Daisy-chaining the specified scan chains or the BSRs in the scan-through-TAP register
• Synthesizing the circuitry to control the scan-chain operation by IEEE Std 1149.1
instruction
• Generating a STIL procedure file for TetraMAX ATPG
Figure 2-20 shows the scan-through-TAP flow through the DFTMAX tool to TetraMAX
ATPG.
Design
database in Protocol generation
memory
Compliance check
STIL procedure file
(preamble and postamble)
for scan-through-TAP
TetraMAX Simulation
library
Fault coverage
ATPG
reports
By using the scan-through-TAP flow provided in this section, you can specify the
scan-through-TAP register, specify the necessary instructions, implement
scan-through-TAP, and generate the appropriate protocol file.
been connected in the register. Use the reserved keywords BSR_SI nd BSR_SO to specify
the boundary-scan register (BSR) serial input and output. Use the reserved keyword
STT_REG to specify the scan chain’s scan in and scan out pins.
The following commands construct the scan-through-TAP register shown in Figure 2-21.
set_dft_signal -view spec -type tdi \
-hookup_pin core/si1 \
set_dft_signal -view spec -type tdo \
-hookup_pin core/so1 \
set_dft_signal -view spec -type tdi \
-hookup_pin core/si2 \
set_dft_signal -view spec -type tdo \
-hookup_pin core/s02 \
set_dft_signal -view spec -type bsd_shift_en \
-hookup_pin core/se \
set_dft_signal -view spec -type capture_clk \
-hookup_pin core/clk \
set_scan_path STT_REG -class bsd -view spec \
-hookup {BSR_SI BSR_SO core/si1 core/so1 core/si2 \
core/so2 core/se core/clk} -exact_length 50
set_bsd_instruction STT -register STT_REG -code 1101
Boundary-scan register
CORE
so1
Scan chain 1
si1
so2
Scan chain 2
si2
BSR_SO
TDI BSR_SI TDO
Note:
Multiplexers are added to the scan input ports for functional mode.
After you specify the scan-through-TAP register and instruction, insert_dft synthesizes
the logic for both synchronous and asynchronous implementation. When you run
preview_dft, it treats and reports the scan-through-TAP instruction as it would any other
user-defined instruction and the STT_REG as any other user test data register (TDR).
The insert_dft command needs only the scan register interface to create the necessary
logic. You can add your scan chains either before or after you run insert_dft, but you must
insert them before running check_bsd. The tool connects the asynchronous reset pins in the
same manner as it would for other TDRs.
For more details about scan insertion methodology, see the DFTMAX Design-For-Test User
Guide.
The max_fanout is an integer that specifies the number of cells driven by a single BSR cell.
Note:
Select an optimum max_fanout number of controlled BSR cells for the tristate function
of the bus to prevent ground bouncing on tristate output buses. For more information on
ground bounce issues, see the DFTMAX Boundary Scan Reference Manual.
MUXs as appropriate to support Short-BSR-Chain and the decoded logic to connect the
Short-BSR-Chain one at a time in between TDI and TDO. The default is the full BSR chain.
This capability enables you to select a few BSR cells from the full BSR chain and preload
values without the need to clock the full BSR chain, saving clock cycles for any ASIC.
As shown in Figure 2-22, the TDI port of the design is connected to all the Short-BSR-Chain
TDI inputs. The TDO output port of the design has a MUX selector controlled by the TAP
instruction enable to connect one BSR chain at a time between TDI and TDO.
Figure 2-22 Multiple BSR Chains
M
Short BSR Chain1 U so
X
tdi
Mode Logic
instr_enable
Figure 2-23 shows the reconfigurable MUXs added to the full BSR chain to form the
individual short BSR chains in between TDI and TDO. The default BSR chain is the full BSR
chain with all the six BSR cells, whereas the short BSR chain1 contains only BSR cells 2, 3,
and 4, and the short BSR chain2 contains only BSR cells 4, 5, and 6.
Mode Logic
The tool allows the specification of BSR cells for a short BSR chain. The short BSR chain is
constructed only from the specified BSR cells. The order of BSR cells in the short BSR chain
matches the order in the specification. If a BSR cell of an embedded BSR in PAD
(bsr_segment) is part of a short BSR chain, all other embedded BSR cells of the pad are
also included in the short BSR chain.
The set_bsd_instruction command accepts the association of short BSR chains with
user specified instructions, using the -register and -excluded_bsr_condition options.
-excluded_bsr_condition Specify conditioning of BSR CLAMP - all BSR cells that are not
CLAMP | NONE cells excluded from the part of the specified BSR chain
specified short BSR chain. are conditioned as if CLAMP
instruction is active.
NONE - all BSR cells that are not
part of the specified BSR chain
are kept transparent while the
user instruction is active.
The following set_bsd_instruction command options cannot be used when the TDR is a
short BSR chain:
• -input_clock_condition
• -output_condition
• -internal_scan
If these options are used when the TDR is a short BSR chain, the following error message
is displayed:
Error: Invalid option '%s' specified with the specified TDR.
The -excluded_bsr_condition option cannot be used with an instruction that does not
use short BSR chain as TDR. If it is used, the following error message is displayed:
Error: Invalid option '%s' specified with the specified TDR.
When a specified short BSR chain is not associated with any user instructions, the following
warning message is displayed:
Warning: Ignoring short BSR chain '%s'.
Because the short BSR chain is not used in any instruction, it is not implemented.
Similarly the mode pins output BC_1 or BC_2 BSR cells or mode1 pin of BC_7 cells are
connected to (EXTEST | <short_bsr_instr_en1> | <short_bsr_instr_en2> ...).
The tool allows multiple user instructions that use short BSR chains as TDR.
# Default BSR chain - all other BSR cells (tri1, bidi1) will be
# added to the full BSR chain
set_scan_path -class bsd boundary -ordered_elements {in1 out1}
Mandatory:
Register Length
-------- ------
BYPASS 1
BOUNDARY 6
Optional:
Register Length
-------- ------
DEVICE_ID 32
Number of instructions : 9
index port pin(s) package pin function type impl ccell disval rslt
----- ---- ------ ----------- -------- ---- ---- ----- ------ ----
5 clk U10/Z P1 clock BC_4 DW_BC_4 - - -
4 in0 U100/Z P7 observe_only BC_4 DW_BC_4 - - -
3 * U200/E' - control BC_2 DW_BC_2 - - -
2 out0 U200/A P8 output3 BC_1 DW_BC_1 3 1 Z
1 * U300/E' - control BC_2 DW_BC_2 - - -
0 out1 U300/A P9 output3 BC_1 DW_BC_1 1 1 Z
When you finish setting all of your boundary-scan specifications, you can generate the
boundary-scan design. You do this by using the insert_dft command.
When you issue this command, the tool generates the boundary-scan design, synthesizes
it, and outputs a status message as shown in Example 2-14. When insert_dft is
completed successfully, it returns a value of 1.
Example 2-14 insert_dft Command Output
Validating data propagation functionality for all instances of pad design
pad_io_sstl...
Validating data propagation functionality for all instances of pad design pad_in...
pad_in...
Validating data propagation functionality for all instances of pad design
pad_out_lvttl...
Validating tristate functionality for all instances of pad design
pad_io_sstl...
Validating tristate functionality for all instances of pad design
pad_out_lvttl...
Validating input side data propagation functionality for all instances of
pad design pad_io_sst1...
Generating the TAP
Setting local link library 'dw01.sldb dw04.sldb' on design
'DW_tap_uc_width4_id1_idcode_opcode2_version14_part155_man_num292_sync_model'
Loading db file '/remote/srm317/clientstore/A2007.12_rel_sp/snps/
synopsys-d/libraries/syn/dw01.sldb'
Loading db file '/remote/srm317/clientstore/A2007.12_rel_sp/snps/synopsys-d/libraries/
syn/dw04.sldb'
Allocating blocks in
'DW_tap_uc_width4_id1_idcode_opcode2_version14_part155_man_num292_sync_mode1'
Building model 'DW01_MUX'
Building model 'DW01_mmux_width2'
Building model 'DW01_mmux_width3'
Building model 'DW01_mmux_width4'
The insert_dft command inserts IEEE Std 1149.1 and 1149.6 compliant boundary-scan
circuitry by using DesignWare components. During synthesis, it maps all boundary-scan
logic inserted by the command.
For information on Inserting Boundary Scan components for IEEE Std 1149.6-2003, see
Chapter 3, “Inserting Boundary-Scan Components for IEEE Std 1149.6-2003.”
As discussed in previous sections, the following design requirements must be fulfilled:
• All pads on design ports must be present and functional, unless the ports are specified
as linkage bits.
• All mandatory TAP ports must be specified.
If pads or TAP ports are missing, or if TAP functionality is not present, errors are generated
and the command terminates without completion. If pads are missing, they must be
specified as linkage bits.
This can occur if the tool must connect to pads inside a dont_touch hierarchical cell, or if a
set_dft_location command specifies to insert TAP controller or BSR logic inside a
dont_touch hierarchical cell.
You must first generate a gate-level netlist of your design. However, you do not need to
generate the netlist to continue with verification of the boundary-scan design, which is
covered in Chapter 4, “Verifying the Boundary-Scan Design.”
You can write a gate-level netlist in VHDL, .ddc, or Verilog formats. The following example
writes out a Verilog netlist with the IEEE Std 1149.1 logic.
# this is required for gate-level netlist generation
change_names -rules verilog | vhdl -hierarchy
Design Requirements
Your RTL design can be in either of the following Design Compiler approved formats:
• Verilog
• VHDL
You can use a Verilog or VHDL gate-level netlist, but it should be in Synopsys database
format (.db or .ddc) to preserve the attributes used during boundary-scan synthesis. If you
do use a gate-level netlist, you need not synthesize the core.
trst*
tck
test_si o1 o1
test_si
Core Design
test_se test_se test_so test_so
i1 i1 o2 o2
. . . .
. . . .
. . . .
in in on on
2. The top-level design must have I/O pad cells for all functional ports. The pad cells must
be linked to the core design pins. There must be a one-to-one correspondence to
top-level ports and core pins.
Note:
The pads for test access port (TAP) signals should be connected only on the port side
of the design, not on the core side of the design. If connected to the core side, the tool
breaks these connections as the pads must be dedicated pads as specified by IEEE
Std 1149.1.
3. The design might or might not have scan chains inserted, but all scan ports must be
defined. Each scan port at the core level must have a corresponding pad cell and port on
the top level, regardless of whether scan has been inserted.
To save execution time in subsequent dc_shell sessions, you can save the design in .ddc
format using the following command:
dc_shell> write -format ddc -hierarchy -output my_design.ddc
For more information about these commands, see the Design Compiler documentation.
An example of a portion of the library cell, in which these attributes are defined, is shown in
Example 2-15.
pin(A) {
direction : input;
capacitance : 1;
is_pad : true;
hysteresis : true;
input_voltage : CMOS_SCHMITT;
...
}
You should make sure that each pad cell of your design has these two attributes set
appropriately. If these attributes are missing on the pad cell, you can set them explicitly by
using the set_attribute command as in the following example:
dc_shell> set_attribute [find lib_cell lsi_10k/IBUF1] \
pad_cell true -type boolean
dc_shell> set_attribute [find lib_pin lsi_10k/IBUF1/A] \
is_pad true -type boolean
The following example shows how to set pad cell attributes for internal pull-up:
dc_shell> set_attribute IOLIB_65_FT_M6_LL_65A/BT4TARP_FT_65/Z \
driver_type 0 -type short
Specify the complementary_pin attribute to get the correct check_bsd and BSDL
generation. In the absence of correct attribute settings, check_bsd incorrectly infers the
differential ports. If you use the pad design specification then check_bsd infers the
differential port correctly.
Example 2-16 shows a differential I/O pad with the complementary_pin attribute set to pin
PADN for pin PAD.
If the complementary_pin attribute is missing on the differential pad cell, you can set it
explicitly by using the set_attribute command as shown in Example 2-17.
Example 2-17 Setting the complementary_pin Attribute
dc_shell> set_attribute \
[get_lib_cell lib_name/cell_name] \
differential_cell true -type boolean
See the Library Compiler documentation for more information on defining differential I/O pad
cells. For more information on understanding differential I/O pad cells, see the DFTMAX
Boundary Scan Reference Manual.
You provide the Verilog structural models for the pads. All instances must be supported by
the logic library (no black boxes). The pad design model or the library cell must be loaded in
the Design Compiler database.
To specify a complex pad, first identify the soft macro pad or the liberty pad models to be
used. You can then associate the pad cell signals with the pad design pins using the
define_dft_design command, as follows:
define_dft_design -design_name design_name -type PAD
[-interface access_list] [-params param_list]
Table 2-11 describes the options of the define_dft_design command used to specify pad
designs.
Table 2-11 The define_dft_design Command Options
-type Specifies the PAD cell design. PAD - Specifies a PAD cell design
TAP - Specifies a custom TAP design
equivalent to DW_tap interface
TAP_UC - Specifies a custom TAP
design equivalent to DW_tap_uc
interface
pin_polarity:
h - active high polarity
l - active low polarity
-params param Specifies the parameter for the pad input – If the input option is defined,
cell design, as follows: the signal_type defined by the -access
$pad_type$ string - type of pad cell option is expected to be data_out.
open_drain_output – If the
open_drain_output option is defined,
the signal_type defined by the -access
option is expected to be enable.
open_source_output – If the
open_source_output option is defined,
the signal_type defined by the -access
option is expected to be enable.
open_drain_bidirectional – Expects
enable and data_out.
open_source_bidirectional – Expects
enable and data_out.
Note:
When setting the $differential$ parameter for differential pad designs, you must
specify both ports with pin polarity high and low. For all other nondifferential pad designs,
you need to specify port only.
When setting pad design specifications to characterize the functionality of a differential pad
port using the pad design command define_dft_design -interface, you must specify h
for the noninverted port and l for the inverted port of the differential pad connected to the
design ports, as show in Example 2-18.
Example 2-18 Setting Pad Design Specifications to Characterize Differential Pad Functionality
dc_shell> define_dft_design -design_name BUF_BIDI \
-type PAD \
-interface {data_out out h data_in in h enable en 1 \
port out h port out_n l} \
-params {$pad_type$ string bidirectional \
$differential$ string true}
Assume a design called my_output_buffer_inverted is used as a pad cell. This design has
an input pin A, an output pin Z, and other input and output pins. Example 2-19 shows the
command options to use to characterize the pad cell.
Example 2-19 Characterizing a Pad Cell
dc_shell> define_dft_design \
-design_name my_output_buffer_inverted -type PAD \
-interface {data_in A 1ow port IO high} \
-params {$pad_type$ string output}
Always specify the access on the opposite side of the pad. For example, data_out access
belongs on input pads, and data_in access belongs on output, tristate_output, or
bidirectional pads.
The polarity of the enable port on bidirectional and tristate output pads should be set to
transparent mode or high impedance mode, the value of which depends on whether your
pad is active-high or active-low.
When setting pad design specifications to characterize the functionality of a complex pad
design using define_dft_design -interface, you must always specify the output port of
the complex pad connected to the design port. Example 2-20 shows the command options
to use to specify the port.
Example 2-20 Specifying the Output Port of a Complex Pad
dc_shell> define_dft_design -design_name BUF_TRI -type PAD \
-interface {data_out ZI h data_in A h \
enable EN h port IO h} \
-params {$pad_type$ string bidirectional}
open_drain_bidirectional. The open source pad goes to high impedance Z when its function
is evaluated to logic 0 (0/Z). This pad is designed without the pull-down transistor. The open
drain pad goes to high impedance Z when its function is evaluated to 1 (1/Z). This pad is
designed without the pull-up transistor.
Note:
If you are validating soft macro pads or library pad cells with a pad design, you must
constrain compliance-enable ports using set_bsd_compliance or pad designs
command options high and low for the TAP to these compliance-enable ports. You can
alternately provide the functional constraints of the pads in the design before running the
preview_dft command, as shown in Example 2-21.
enable EN
data_in A
port I/O
Tristate buffer
data_out I
Input buffer
Use a unique design for the receiver cells of the port, so the tool knows which cell is used as
the receiver for the positive and the negative.
Example 2-22 shows the UI model in which IEEE_1149_6_1V8 is used as a receiver cell for
both positive and negative legs of the port. IEEE_1149_6_1V8_TR_N is a wrapper around
IEEE_1149_6_1V8 that differentiates between the RX positive and negative models.
Example 2-22 UI Model for Using the Test Receivers
## RX for the positive leg
define_dft_design -design_name IEEE_1149_6_1V8 \
-type PAD \
-interface { port D h receiver_p TR h ac_init_clk IC h ac_init_data_p
ID h ac_mode AC h } \
-params {$pad_type$ string input $lp_time$ float 5.0 $hp_time$ float
15.0}
## RX for the negative leg
define_dft_design -design_name IEEE_1149_6_1V8_TR_N \
-type PAD \
-interface { port D h receiver_n TR h ac_init_clk IC h ac_init_data_n
ID h ac_mode AC h } \
-params {$pad_type$ string input}
## differential driver
define_dft_design -design_name LVDSREC1G25_1V8_STAG -type PAD \
-params {$pad_type$ string input $differential$ string true
$lib_cell$ string true } \
-interface {data_out DS h port VIA h port VIB l low EN h }
If the test receiver (RX) and the differential driver are in the same model, then only one pad
design command is required for the pad and the two test receiver (RX) components.
Example 2-23 is a script where the test receiver (RX) and the differential driver are in the
same model.
Example 2-23 INPUT DIFF_RX_HYST Pad With Test Receiver and Hysteresis Model
## INPUT DIFF_RX_HYST pad with Test Receiver and Hysteresis model
define_dft_design -design_name DIFF_RX_HYST \
-type PAD \
-interface { port t4_diffrx_in_pos h \
port t4_diffrx_in_neg l \
receiver_p t4_diffrx_out_pos h \
receiver_n t4_diffrx_out_neg h \
data_out t4_diffrx_out h \
ac_init_clk t4_init_clk h \
ac_init_data_p t4_init_data_p h \
ac_init_data_n t4_init_data_n h \
ac_mode t4_AC_Mode h } \
-params { $pad_type$ string input $hp_time$ float 15.0 \
$differential$ string true}
Use the set_boundary_cell -function command to define pin functions. You can specify
the following types:
• input
• input_inverted
• output
• output_inverted
• bidir
• bidir_inverted
• control
• observe
• receiver_p
• receiver_n
• ac_select
• none
The tool inserts BSR cells at pin sites with the access signal type observe. The -function
option of the set_boundary_cell command defines the BSR cell implementation. If the
BSR cell identifier represents a BSR cell of type not equal to BC_4, then a warning occurs
and the default BSR cell type BC_4 is used.
The -function option does not support specifying different BC_4 implementations for
different observe pins at a port pad. However, use the pad design command interface
observe to specify different observe pins at a port pad.
The syntax for specifying an observe BSR cell for complex soft macro pads with the
set_boundary_cell command is
set_boundary_cell
-type BC_4
-function observe
-ports port_name
-class bsd
The following example applied to the pad design in Figure 2-26 on page 2-90 results in the
boundary scan design shown in Figure 2-27 on page 2-91.
EN_1
DPI
DNI
D Neg
BC_2_FAST DNO
BIDI_N
AND EN_2
BC_2_FAST EN_3
BC_2 DF_1
DPI
BC_4_SLOW
DNI
BC_4_SLOW
Preview BSD supports independent differential legs for pad design validation. During
synthesis, BSR cells can be inserted on both independent differential legs.
For differential output pads one data_in pin is required with the associated positive port of
the differential pad. Compliance checking treats the differential legs independently on the
output side.
The following example applied to the pad design in Figure 2-28 on page 2-92 results in the
boundary scan design shown in Figure 2-29 on page 2-93.
EN_1
EN_2
Logic
EN_3
EN_4
DO IO
PO Logic
PI
DI
Figure 2-29 BSD for Pad Cell With Multiple Enable Pins
EN_2
DW_B42
EN_3
EN_4
DW_BC2 DO IO
PAD
PO
PI
DW_BC2 DI
You can set the enable, data_out, and data_in pins with the define_dft_design command.
In addition, you can insert observe-only BSR cells on any unused enable pins with the
observe access signal type.
You can also drive some or all of the enable pins with logic 0/1 values.
endmodule
The interface pins of the two pad cells within the block can be defined at the block boundary
using two define_dft_design commands. However, by default the tool accepts these
specifications as-is. The following incorrect specifications, which incorrectly swap IO1 and
IO2, are not flagged:
define_dft_design -design_name pad_block \
-type PAD \
-interface { \
data_in in1 h data_out out1 h enable en1 l \
port IO2 h } \
-params { \
$pad_type$ string bidirectional \
$lib_cell$ string false }
define_dft_design -design_name pad_block \
-type PAD \
-interface { \
data_in in2 h data_out out2 h enable en2 l \
port IO1 h } \
-params { \
$pad_type$ string bidirectional \
$lib_cell$ string false}
You can catch such errors by using the -validate option of the define_dft_design
command. When this option is set to true, the define_dft_design command performs the
following validation:
• Make a list of all specified interface pins that are output or inout ports of the netlist design
specified by the -design_name option.
• For each output or inout port, verify that the port has a topological connection to at least
one netlist input port listed in the -interface specification.
The topological check is a simple connectivity check only; it traces through upstream
combinational and sequential cells without analyzing cell functionality or design constants. If
the check fails, the define_dft_design command issues an error:
Error: Specified port 'IO2' is not connected to other specified ports.
Discarded dft design specification.
0
The -validate true option is considered only for soft-macro (design netlist)
representations; it is ignored for black box or library cell representations.
The default of the -validate option is false so that DFT design specifications that rely on
port inference do not cause validation failures.
Introduction
Figure 2-30 shows the inputs and outputs of the RTL generation flow. In this flow, the tool
generates the following:
• A complete Verilog RTL file for an IEEE Std 1149.1 or 1149.6 implementation, which
includes the TAP controller, the boundary-scan chain, the instruction register decode
block, and their connectivity to the I/O pads and core logic
• The Boundary Scan Description Language (BSDL) file, generated using the pin map file
• The test patterns in STIL format
• The Verilog testbench
See “Input RTL for the Pad I/O Ring and Core Logic” on page 2-98 for information on
how the core logic should be represented.
2. Enable boundary-scan insertion along with the RTL generation flow:
dc_shell> set_dft_configuration -scan disable -bsd enable
dc_shell> set_bsd_configuration -rtl enable
3. Configure the boundary-scan design in the usual way. This includes one or more of the
following steps:
❍ Select the required IEEE Std 1149.1 or 1149.6.
❍ Identify the boundary-scan TAP (test access ports) using the set_dft_signal
command.
❍ Identify any linkage ports using the set_bsd_linkage_port command.
❍ Specify the compliance-enable pattern.
❍ Define clock ports using the set_dft_signal command.
❍ Define the boundary-scan register configuration, and assign all boundary-scan
register instructions.
❍ Configure the device identification register and its capture value.
❍ Select boundary-scan cells from the default cell types.
4. Preview the boundary-scan logic:
dc_shell> preview_dft -bsd all
6. Generate the BSDL file and the functional, leakage, and DC parametric test vectors.
dc_shell> write_bsdl -output TOP_bsd.bsdl
In the RTL generation flow, do not use the write command to write netlist
representations of the design.
By default, the write_bsd_rtl command writes the I/O pads, core logic instantiation, the
TAP controller, and the boundary-scan chain to a single RTL file. You can optionally create
separate RTL files for the TAP controller and boundary-scan chain logic by using the -tap
and -bsr options of the write_bsd_rtl command, respectively. For more information, see
the man page.
Input RTL for the Pad I/O Ring and Core Logic
The input RTL must define a top-level module that contains the following:
• I/O pad ring
The I/O pads can be represented by library cells or a soft macro. Advanced I/O pads can
be represented by black-box models, but note that all I/Os are required for compliance
simulation.
• Core logic instance
The core logic can be represented as described in the following sections:
❍ “Representing Core Logic With a Black-Box Module” on page 2-100
❍ “Representing Core Logic With a Full RTL or Netlist Module” on page 2-100
• Pad connections to ports
• Pad connections to core instance
The input RTL must be an interconnect-only design with pad cells; it cannot contain any
additional RTL logic.
The tool uses the top-level port types in the input RTL to determine how the boundary-scan
register is constructed. The default boundary-scan cell types are described in “Using
Predefined Boundary-Scan Registers” on page 2-5.
Figure 2-32 and Example 2-26 show a Verilog top-level module that contains an I/O pad ring
along with a core logic instance. Ports TDI, TDO, TMS, TCK, and TRST_N are TAP ports.
Figure 2-32 Input RTL Design Structure
TOP
IN1 OUT1
CORE
INOUT
OUT2
TDI TDO
TMS
TCK
TRSTN
endmodule
endmodule
You must remove the black-box core design from memory before running the
write_bsd_rtl command. Otherwise, the output RTL will contain an empty core module
that conflicts with the RTL core model used for simulation.
However, you must still remove the core design from memory before running the
write_bsd_rtl command. If you do not, the core is written out as an unmapped GTECH
netlist, which should not be used for synthesis or simulation.
CORE
INOUT
OUT2
TDI TDO
TMS
TCK
TRSTN
The output RTL design contains the TAP controller block and the BSR (boundary-scan
register) block:
• The DW_tap instance is the RTL component for the TAP controller. This component
includes the following test data registers:
❍ TAP FSM state machine register
❍ Instruction register
❍ BYPASS register, if needed
❍ DEVICE ID register, if needed
• The BSR_top instance describes the boundary-scan register (BSR) chain, which
contains all the boundary-scan cells for all ports in the design. The boundary-scan cells
are RTL components of the BSR chain.
The boundary-scan register chain is created by connecting the boundary-scan cells to form
a chain from TDI to TDO.
To read in the boundary-scan RTL files for synthesis, you must use the analyze and
elaborate commands, which support parameter-based elaboration:
# needed if no WORK directory was previously defined
file mkdir ./WORK
define_design_lib WORK -path ./WORK
The read_verilog command does not support parameter-based elaboration. If you use it
to read in the boundary-scan RTL, you will see errors during link:
dc_shell> link
...
Information: Building the design 'DFT_TAPFSM' instantiated from design
'ChipLevel_DW_tap_uc_width4_id0_idcode_opcode1_version0_part0_man_num0_
sync_mode1' with
the parameters "sync_mode=1,fsm_width=16". (HDL-193)
Warning: Cannot find the design 'DFT_TAPFSM' in the library 'WORK'.
(LBR-1)
Information: Building the design 'DFT_INSTRREG1' instantiated from design
'ChipLevel_DW_tap_uc_width4_id0_idcode_opcode1_version0_part0_man_num0_
sync_mode1' with
the parameters "width=4". (HDL-193)
Warning: Cannot find the design 'DFT_INSTRREG1' in the library 'WORK'.
(LBR-1)
...
Warning: Unable to resolve reference 'DFT_TAPFSM' in 'ChipLevel_DW_
tap_uc_width4_id0_idcode_opcode1_version0_part0_man_num0_sync_mode1'.
(LINK-5)
Warning: Unable to resolve reference 'DFT_INSTRREG1' in 'ChipLevel_DW_
tap_uc_width4_id0_idcode_opcode1_version0_part0_man_num0_sync_mode1'.
(LINK-5)
0
See Also
• SolvNet article 2447760, “Performing check_bsd Validation of Boundary-Scan Logic in
the RTL Generation Flow” for details on validating the RTL design
current_design TOP
set_dft_configuration -scan disable -bsd enable
set_bsd_configuration -std ieee1149.1_2001
current_design TOP
set_dft_configuration -scan disable -bsd enable
set_bsd_configuration -std ieee1149.1_2001
# Remove full RTL core design (the tool cannot write out the
# design RTL in its original form)
remove_design -hierarchy {core}
Limitations
Note the following requirements and limitations of the RTL generation flow:
• User-provided RTL logic is not supported at the top level.
• Compliance checking using the check_bsd command is not supported. Verify the
resulting RTL boundary-scan design as described in “Verifying the RTL Boundary-Scan
Design” on page 2-103.
• Only Verilog RTL can be written out by the write_bsd_rtl command. The write
command is not supported.
• Custom TAP controllers, custom BSRs, and user-defined test data registers are
supported if they are defined as black-box references, that is, as empty modules.
3-1
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
• Limitations
• Example Scripts for an IEEE Std 1149.6 Design
link_library
To synthesize the IEEE Std 1149.6 TAP controller and associated logic, you must include the
dft_jtag.sldb DesignWare Foundation library in the synthetic library list defined with the
synthetic_library variable. This is in addition to the dw_foundation.sldb DesignWare
Foundation library, which supports IEEE Std 1149.1. For example,
set synthetic_library {dw_foundation.sldb dft_jtag.sldb}
set link_library [concat * $target_library pads.db $synthetic_library]
set_bsd_configuration
The -std option of the command set_bsd_configuration supports the IEEE Std 1149.6
logic in BSD synthesis.
The syntax is
set_bsd_configuration -std { ieee1149.6_2003 }
set_attribute
Usage of the set_attribute command for IEEE Std 1149.6 is similar to the usage of the
command for IEEE Std 1149.1. See “Reading HDL Source Files With Differential I/O Pad
Cells” on page 2-79.
set_bsd_ac_port
The -port option of the set_bsd_ac_port command captures the AC port specification.
The syntax is as follows:
set_bsd_ac_port -port_list list_of_ac_ports
where list_of_ac_ports specifies the ports for which IEEE Std 1149.6 BSR cells need to
be synthesized, as shown in Example 3-1.
Note:
This command has to be specified before the set_boundary_cell command for AC
port.
For differential ports, you must specify only positive ports. An error is issued if the specified
ports include input ports. If this command is not specified, IEEE Std 1149.6 BSR cells are not
added to the design.
Example 3-1 Setting the AC Port Specification
## identify dot6 ports
set_bsd_ac_port -port_list { out0 out1 diff_out_pos}
define_dft_design
The lp_time and hp_time options of the define_dft_design command enable you to
specify low pass and high pass time constants. The receiver_p, receiver_n,
ac_init_data_p, and ac_init_data_n options of this command enable you to specify the
signal types.
The syntax of this command for IEEE Std 1149.6 is as follows:
define_dft_design
-type PAD
-interface {..[receiver_p pin_name h]
[receiver_n pin_name h]
[ac_init_data_p pin_name h]
[ac_init_data_n pin_name h]
[ac_init_clk pin_name h]
[ac_mode pin_name h]}
Option Description
lp_time Specifies the low pass time constant for the pad test receiver
hp_time Specifies the high pass time constant for the pad test receiver
on_chip Specifies that the pad test receiver had an on chip AC coupling
receiver_p Specifies the core side pins of the positive and negative test
receiver_n receivers of the pad
The values specified by lp_time, hp_time, and on_chip are used only for BSDL
generation. The value of the time_float option should be a positive, nonzero real number
in units of nanoseconds.
For test receivers of nondifferential input and bidirectional ports, the receiver_p and
ac_init_data_p signal types should be used. A BC BSR cell is inserted for the
receiver_p and the receiver_n pins of a pad cell.
Note:
Set the ac_init_data_n and receiver_n pins to h for active high sense pins.
The define_dft_design command supports user-specified BSR cell designs of the
following IEEE Std 1149.6 BSR (AC) types.
• AC_1
• AC_2
• AC_7
• AC_SELX
• AC_SELU
Note:
For differential pad design, you need to always specify both the positive and negative
ports for accuracy in the preview_dft and insert_dft commands and in the BSD file.
Example 3-2 shows the define_dft_design command with test receiver and hysteresis.
Example 3-2 Specifying a Test Receiver and Hysteresis Model
## INPUT DIFF_RX_HYST pad with Test Receiver and Hysteresis model
define_dft_design -design_name DIFF_RX_HYST \
-type PAD \
-interface { \
port t4_diffrx_in_pos h \
port t4_diffrx_in_neg l \
receiver_p t4_diffrx_out_pos h \
receiver_n t4_diffrx_out_neg h \
data_out t4_diffrx_out h \
ac_init_clk t4_init_clk h \
ac_init_data_p t4_init_data_p h \
ac_init_data_n t4_init_data_n h \
ac_mode t4_AC_Mode h } \
-params { \
$pad_type$ string input \
$differential$ string true }
set_bsd_instruction
The set_bsd_instruction command supports IEEE Std 1149.6 instructions
EXTEST_PULSE and EXTEST_TRAIN with the -time option.
The syntax is as follows:
set_bsd_instruction [EXTEST_PULSE | EXTEST_TRAIN]
-time time_float
-clock_cycles clock_cycles
set_boundary_cell
The set_boundary_cell command supports the alternating current (AC) or the direct
current (DC) cell specification and the BSR cell specification for test receiver pins.
The syntax is as follows:
set_boundary_cell
[-class bsd]
[-type cell_type]
[-function ac_select ]
[-ports port_list]
[-name name]
[-share true | false]
[-function receiver_p]
[-function receiver_n ]
[-design design_name]
Option Description
-function ac_select The function type ac_select specifies that the BSR cell of
type cell_type is used as AC/DC selector cell for the
specified AC ports.
Option Description
-function receiver_p These function types specify that the BSR cell of type
-function receiver_n cell_type is added for test receiver pins of the specified
ports.
Valid BSR cell types for these function types include:
BC_1
BC_2
BC_4
None
If cell_type is none, then the BSR cell is not added for the
port function.
Note:
You always need to specify the -function option for the set_boundary_cell
command.
Example 3-4 shows you how to specify the AC function for the boundary cell pins.
Example 3-4 Specifying the Test Receiver Pin AC Function for Boundary Cells
##BSDL - all ports in AC section
set_boundary_cell -class bsd \
-type AC_SELU \
-function ac_select \
-ports {out0 out1 diff_out_pos} \
-name SELU_1 \
-share true
OUT1
IN1
IN2
OUT2
TR OUT_DIFF1_P
IN3
OUT_DIFF1_M
TR
IN_DIFF1_P OUT_DIFF2_P
S
IN_DIFF1_M Y OUT_DIFF2_M
TR S
T OUT_DIFF3_P
IN_DIFF2_P
E
M OUT_DIFF3_M
IN_DIFF2_M
TR L BIDI_DIFF1_P
O
TR
G
IN_DIFF3_P BIDI_DIFF1_M
I TR
C
IN_DIFF3_M
TR
TR
TR
IN_DIFF4_P BIDI_DIFF2_P
IN_DIFF4_M BIDI_DIFF2_M
TR TR
TR
TDI
TCK
TMS TDO
TRST
C 0 TR
BC_4
TDI
TCK
TMS TDO
TAP plus MODE LOGIC
TRST
Figure 3-3 exhibits the control logic added in the mode block for the IEEE Std 1149.6
implementation.
Figure 3-3 Control Logic Added for IEEE 1149.6 Implementation
EXTEST_PULSE Train/Pulse
EXTEST_TRAIN
RunTestIdle
AC Test Signal
AC_SELX AC Mode Signal T
Train/Pulse
OR
EXTEST_PULSE 0
AC_SELU
EXTEST_TRAIN 1
ac_mode mode logic ac_test mode logic
EXTEST
Capture-DR
TCK
TMS TCK
AC Init Clock
EXTEST_PULSE
EXTEST_TRAIN
TCK
EXIT1_DR
EXIT2_DR
SO
ac_init_data_p
TR BSR
receiver_p
SI
ac_init_clk SO
BSR (Optional)
SI
Pad with test receiver
SO
TR BSR
receiver_n
ac_init_data_n SI
• Preview report shows AC BSR cells along with DC BSR cells if they are inserted for the
design. The position of AC selector (AC_SELU, AC_SELX) cells are also shown in
preview report.
• Preview report shows EXTEST_PULSE, EXTEST_TRAIN instructions if they are
architected for the design.
• The tool synthesizes ac_mode logic as shown in Figure 3-3 to connect ac_mode pins of
AC BSR cells and test receiver pads if IEEE Std 1149.6 support is enabled.
• The tool synthesizes ac_test logic as shown in Figure 3-3 to connect ac_test pins of AC
BSR cells if IEEE Std 1149.6 support is enabled.
• The tool synthesizes ac_init_clk logic as shown in Figure 3-3 to connect ac_init_clk pins
of all test receiver pads if IEEE Std 1149.6 support is enabled.
• The tool hooks up ac_init_data_p, ac_init_data_n pins of a pad as shown in Figure 3-3
on page 3-11.
• BSDL generation adds the following attributes to BSDL for designs with IEEE Std 1149.6
logic.
attribute AIO_COMPONENT_CONFORMANCE of <entity>: entity
is "STD_1149_6_2003
• The following BSDL attributes are optionally generated for IEEE Std 1149.6 design AC
ports. The AC or DC cell numbers are automatically computed, and hp_time and
lp_time are captured from user specification. They are as follows:
• The following attribute string is added to the BSDL file for all output or bidirectional AC
ports.
attribute AIO_Pin_Behavior of <entity> : entity is
"<ac_ports> [: AC_Select=<cell_num>];"
• The following attribute string is added to the BSDL file for input and bidirectional AC ports
with test receivers that do not have low pass filter and require external AC coupling.
attribute AIO_Pin_Behavior of <entity> : entity is
"<ac_pins> : hp_time=<time>;"
• The following attribute string is added to the BSDL file for input and bidirectional AC ports
with test receivers that have low pass filter and that are also on the chip driver.
attribute AIO_Pin_Behavior of <entity> : entity is
"<ac_pins> : lp_time=<time1> hp_time=<time2> On_Chip;
• The following BSDL attributes are optionally generated for EXTEST_PULSE and
EXTEST_TRAIN instructions. The information shown in these attribute strings is
captured from user specifications.
• The following attribute string is added to the BSDL file for EXTEST_PULSE instruction to
show minimum wait time in run-test and the idle states in units of full TCK cycles of TCK:
attribute AIO_EXTEST_Pulse_Execution of <entity> : entity
is "Wait_Duration TCK <min_num_TCK_cycles>";
• The following attribute string is added to the BSDL file for EXTEST_PULSE instruction to
show the minimum wait time in run-test and idle states in units of real time.
attribute AIO_EXTEST_Pulse_Execution of <entity> : entity
is "Wait_Duration <min_time>";
• The following attribute string is added to the BSDL file for EXTEST_TRAIN instruction to
show minimum wait time in run-test and idle states in units of full cycles of TCK.
attribute AIO_EXTEST_Train_Execution of <entity> : entity
is "train <min_num_TCK_cycles>";
• The following attribute string is added to the BSDL file for EXTEST_PULSE instruction to
show maximum wait time in run-test and idle states in units of real time.
attribute AIO_EXTEST_Train_Execution of <entity> : entity
is "train <min_num_TCK_cycles>, maximum_time <time>";
Limitations
The limitations associated with IEEE Std 1149.6 are as follows:
• There is no compliance checker for validating the IEEE Std 1149.6 logic.
• There is no support for AC_8, AC_9, and AC_10 BSR cell support.
• Generation of RX/TX loopback patterns is not supported.
# Specify AC ports
set_bsd_ac_port -port_list { OUT2 OUT_DIFF1 OUT_DIFF2 OUT_DIFF3 \
BIDI_DIFF1 BIDI_DIFF2 }
insert_dft
# Generate BSDL
write_bsdl -output M1_bsdl
Mandatory:
Register Length
BYPASS 1 BOUNDARY 31
Number of instructions : 6
index port pin(s) package pin function type impl ccell disval rslt
30 IN_DIFF4_M ID4/TRM P22 observe_only BC_4 DW_BC_4 - -
29 IN_DIFF4_P ID4/TRP P21 observe_only BC_4 DW_BC_4 - -
28 IN_DIFF3_M ID3/TRM P20 observe_only BC_4 DW_BC_4 - -
27 IN_DIFF3_P ID3/DO P19 input BC_2 DW_BC_2 - -
26 IN_DIFF3_P ID3/TRP P19 observe_only BC_4 DW_BC_4 - -
25 IN_DIFF2_M ID2/TRM P18 observe_only BC_4 DW_BC_4 - -
24 IN_DIFF2_P ID2/DO P17 input BC_2 DW_BC_2 - -
23 IN_DIFF1_P ID1/DO P15 input BC_2 DW_BC_2 - -
22 IN3 I3/TR P14 observe_only BC_4 DW_BC_4 - -
21 IN3 I3/DO P14 input BC_2 DW_BC_2 - -
20 IN2 I2/DO P13 input BC_2 DW_BC_2 - -
19 IN1 I1/DO P12 input BC_2 DW_BC_2 - -
18 OUT1 O1/DI P11 output2 BC_1 DW_BC_1 - -
17 * O2/EN - control BC_1 DW_BC_1 - -
16 OUT2 O2/DI P10 output3 AC_2 DFT_AC_2 17 0 Z
15 * - - internal AC_SELU DFT_AC_SELU - -
14 OUT_DIFF1_P OD1/DI P8 output2 AC_1 DFT_AC_1 15 -
13 OUT_DIFF2_P OD2/DPI P7 observe_only BC_4 DW_BC_4 - -
Example 3-7 BSDL Report Generated by Example 3-1, Setting the AC Port Specification
*********************************************************************
BSDL file for design M1
*********************************************************************
entity M1 is
port (
TCK : in bit;
TDI : in bit;
TMS : in bit;
TRST : in bit;
IN1 : in bit;
IN2 : in bit;
IN3 : in bit;
IN_DIFF1_P : in bit; IN_DIFF1_M : in bit; IN_DIFF2_P : in
bit; IN_DIFF2_M : in bit; IN_DIFF3_P : in bit; IN_DIFF3_M :
in bit; IN_DIFF4_P : in bit; IN_DIFF4_M : in bit; TDO : out
bit; OUT1 : out bit; OUT2 : out bit; OUT_DIFF1_P: out bit;
OUT_DIFF1_M: out bit; OUT_DIFF2_P: out bit;
OUT_DIFF2_P: out bit;
OUT_DIFF3_P: out bit;
OUT_DIFF3_M: out bit;
BIDI_DIFF1_P: inout bit;
BIDI_DIFF1_M: inout bit
BIDI_DIFF2_P: inout bit;
BIDI_DIFF2_M: inout bit );
"STD_1149_1_1993";
#This section specifies the pin map for each port. This
information is --extracted from the port-to-pin map file
that was read in using the --"read_pin_map" command
#This section specifies the TAP ports. For the TAP TCK port,
the parameters in the brackets are:
First Field : Maximum TCK frequency.
Second Field: Allowable states TCK may be stopped in
Example 3-8 Script for Design With Test Receiver and Hysteresis Model
set search_path [list ./ ./libs ./rtl $search_path]
set target_library [list class.db lsi_10k.db diff_io.db]
set synthetic_library [list dw_foundation.sldb dft_jtag.sldb]
set link_library [concat "*" $target_library $synthetic_library]
current_design M1
set_dont_touch U*
set_dont_touch IBUF2
#check_design
set_bsd_configuration -style synchronous \
-instruction_encoding one_hot -ir_width 4 \
-asynchronous_reset true -control_cell_max_fanout 3 \
-std { ieee1149.6_2003 } -check_pad_designs all
read_pin_map pin_map.txt
set_bsd_configuration -default_package my_package
ac_mode t_AC_Mode h \
ac_init_clk t_ac_init_clk h \
port t_diffrx_in_pos h port t_diffrx_in_neg l \
data_out t_diffrx_out h shift_dr t_shift_dr h \
capture_en t_capture_en h capture_clk t_capture_clk h \
si t_sih so t_soh} \
-params { \
$pad_type$ string input \
$differential$ string true \
$bsr_segment$ list string \
"0 BC_4 t_diffrx_in_pos -X -" "1 BC_4 t_diffrx_in_pos -X -" \
"2 BC_4 t_diffrx_in_neg -X -" $end_list$}
#INPUT DIFF_RX_HYST
define_dft_design -design_name DIFF_RX_HYST -type PAD \
-params { \
$pad_type$ string input \
$differential$ string true } \
-interface { \
port t4_diffrx_in_pos h \
port t4_diffrx_in_neg l
receiver_p t4_diffrx_out_pos h \
receiver_n t4_diffrx_out_neg h \
data_out t4_diffrx_out h \
ac_init_clk t4_init_clk h \
ac_init_data_p t4_init_data_p h \
ac_init_data_n t4_init_data_n h
ac_mode t4_AC_Mode h }
# note: ac_init_data_n & receiver_n are h for active-high sense
# optional instructions
set_bsd_instruction [list IDCODE] -code [list 1110] \
-capture_value {32'b00000000000010011011001001001001} \
-register DEVICE_ID
#Ports in ac sel
set_boundary_cell -class bsd -type AC_SELU \
-function ac_select -ports { out0 out1 diff_out_pos} \
-name SELU_1 -share true
preview_dft -bsd all
insert_dft
#check_design
#Case TCK
set_app_var test_default_period 50
set_app_var test_bsd_default_strobe 45
set_app_var test_bsd_default_bidir_delay 5
set_app_var test_bsd_default_delay 5
# instructions
set_bsd_instruction [list IDCODE] -code [list 0000] \
-capture_value {32'b00000000000010011011001001001001} \
-register DEVICE_ID
#Order BSRs
set_scan_path boundary -class bsd \
-ordered_elements [list clk clk1 diff_in_pos \
diff_out2_pos SELX_1 diff_out_pos SELU_1 CTL_1]
Example 3-10 Bidirectional Ports Not Using BC_7 and BC_2 BSR Cells
# The set_boundary_cell -type none option is supported, but
# use linkage to omit BSR insertion for the entire bidirectional port.
set_boundary_cell -class bsd -type AC_1 -ports { bidi } \
-function output
set_boundary_cell -class bsd -type BC_4 -ports { bidi }\
-function input
set_boundary_cell -class bsd -type BC_1 \
-function control -ports bidi -name CTL_1 -share false
4-1
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
Specify implemented
instructions
Check
compliance Check IEEE Std 1149.1 compliance
For more information about the read command, see the Design Compiler documentation.
If you have a timing requirement for the test clock (TCK), specify the -timing option.
Option Description
-type Specifies the type of IEEE Std 1149.1 test signal you are
signal_type defining. Table 4-2 shows the valid signal type of
keywords.
-port Name of the design port with the IEEE Std 1149.1 signal
port_list type.
-timing rise Specifies the rise and fall times for the test clock.
fall
Port signals defined with the set_dft_signal command include those listed in Table 4-2.
Table 4-2 Port Signals Defined With the set_dft_signal Command
Signal Description
The set_dft_signal command identifies IEEE Std 1149.1 test signals by placing an
attribute on the specified port. The attribute value is the same as the signal type keyword.
The following example shows the set_dft_signal command with the -view
existing_dft option:
set_dft_signal -view existing_dft -type tck -port TAP_TCK \
-timing [list 45 55]
-view
View to remove specification from.
port
Name of the IEEE Std 1149.1 test signal port.
For more information on setting linkage ports, see “Identifying Linkage Ports” on page 2-6.
Compliance-Enable Patterns
The set_bsd_compliance command is used to set logical conditions and a
compliance_enable attribute at input ports that enable the functionality of an IEEE Std
1149.1 boundary-scan design. The logical conditions are used by check_bsd (the command
that checks the IEEE 1149.1 rules compliance), create_bsd_patterns, and write_bsdl
commands.
If your design contains one or more compliance-enable ports, you must define the
compliance-enable pattern using the set_bsd_compliance command. The patterns
generated from successive runs of set_bsd_compliance are appended to the previous set
of patterns generated using this command.
The syntax of the command is
set_bsd_compliance -name pattern_name
-pattern {port1 bit_value1 [port2 bit_value2 ...]}
If a pattern name is reused, that pattern definition overwrites the earlier pattern definition of
the same name.
Note:
The tool does not support multiple compliance patterns on a pin where the same pin is
changing states for an initialization sequence.
The command has the options shown in Table 4-3.
Table 4-3 set_bsd_compliance Command Options
Option Description
A TN
B EN
BSR BSR
BSR
Ports A and B drive TN. TN must be driven to logic 1 if the logic from the boundary-scan
register is to propagate through the logic.
Consequently, you must define ports A and B as compliance-enable ports, and you must
drive values on each of the ports so that TN achieves the appropriate value.
You can use any of the following commands to define a compliance-enable pattern that
defines port A and port B and drives TN to a logic 1:
set_bsd_compliance -name P1 -pattern {A 1 B 0}
or
set_bsd_compliance -name P1 -pattern {A 0 B 1}
or
set_bsd_compliance -name P1 -pattern {A 1}
set_bsd_compliance -name P2 -pattern {B 0}
Note:
Do not place a boundary-scan register on a compliance-enable port; doing so violates
IEEE Std 1149.1. By default, the tool to all ports is defined as compliance-enable ports.
When defining the compliance-enable values in your design, do not use
set_dft_signal -port -active_state in place of set_bsd_compliance to define
the compliance-enable pattern.
The compliance enable signal must be a dedicated signal for boundary-scan compliance
(check_bsd). It is OK to use a bidirectional pad, but for the design port definition, the
compliance enable signals must be defined as input to pass check_bsd. This ensures
that the compliance enable signal is not shared with system signals resulting in an IEEE
Std 1149.1 violation, and the place and route tools can optimize this port with this
definition.
As check_bsd goes through the design, it reports on its progress through messages printed
to the screen. These messages tell you what is checked and inform you of any violations
that occur.
The check_bsd command verifies IEEE Std 1149.1 compliance of
• The TAP controller
• The instruction register
• The bypass register
• The boundary-scan register
• Other test data registers, if they exist
• Input and output ports, to see if they are controllable or observable
• Inferred instructions, to see if they select the correct register and trigger the correct
behavior
At the end of the report is a summary of the kinds of violations you have, how many
elements are concerned, and reference to the IEEE Std 1149.1 rules being violated.
If you use the -verbose option, check_bsd provides you with the complete list of
• TAP controller states
• Instructions
• Instruction opcodes
• Test data registers (A flush test is performed during extraction of the test data registers
by shifting 0011 through the test data register.)
• BSR cells (Their structure is extracted from your design by the compliance checker.)
Note:
If you want the tool to automatically extract your design instruction’s opcode, use
check_bsd -infer_instructions true. If you want to specify the opcode manually,
use check_bsd -infer_instructions false (the default).
Option Description
-effort Specifies the amount of effort the tool exerts when extracting the
effort_level boundary-scan instructions for a design that has a large instruction
register.
Option Description
low Use low effort for designs with the one-hot encoding scheme. If
your design does not have one-hot encoding, use medium or high
effort. The tool uses heuristics to extract boundary-scan
instructions.
medium This is the default effort value. The tool uses heuristics and limited
sequential search to extract boundary-scan instructions.
high The tool uses heuristics and full sequential search to extract
boundary-scan instructions.
Run the check_bsd -infer_instructions false (the default) command to specify the
BSD instructions manually. When you set this option to true, the tool extracts the
instructions automatically.
Note:
To eliminate TEST-819 violations, indicate in your pad model that the input has a pull-up
resistor. In the library description of your pad cell, add the following line in the declaration
for the pin connected to the input port:
driver_type: pull_up;
For more information about the driver_type attribute, see the Library Compiler
documentation.
The following example downgrades the severity of TEST-893 and TEST-813 from error to
warning:
set_message_severity -names {TEST-893 TEST-813} w
Use the set_boundary_cell_io command as follows to guide the tool when the TEST-893,
TEST-894, or TEST-891 error occurs:
set_boundary_cell_io -type boundary
-access in_pi | in_po | out_pi | out_po
-cell bsr_cell_shift_flop
Option Description
in_pi Specifies the port associated with the input PI BSR cell
out_pi Specifies the PI path of the BSR cell for OUTPUT or CONTROL BSR cell
out_po Specifies the port associated with the BSR cell PO for OUTPUT or
CONTROL BSR cell
For example:
set_boundary_cell_io -type boundary \
-access {out_pi U11/U1/Z out_po q2scan/inst1/inst6/U1/Z} \
-cell q2bscan/inst1/inst4/q_reg
You can change the severity status only for the messages listed in Table 4-6. Do not attempt
to downgrade or upgrade any other messages; the following message appears if you do:
message_name cannot be down/up gradable
Use the set_tap_elements command as follows to when the TEST-816 and TEST-813
error occurs:
set_tap_elements -state_cells {list_of_tap_state_elements 1 ...2 ...3
...4 n_tap_state_element}
Example 4-1 shows you how a TAP FSM designed with four registers is specified.
Example 4-1 A TAP Finite-State-Machine (FSM) Designed With Four Registers
set_tap_elements -state_cells { \
tap/simple/tap_state_reg[0] \
tap/simple/tap_state_reg[1] \
tap/simple/tap_state_reg[2] \
tap/simple/tap_state_reg[3] }
TEST-813 - TAP controller state E Specify the TAP states with set_tap_elements.
flops have been found, which is
an insufficient number of state
flops.
TEST-816 - TRST does not reset E Specify the TAP states with set_tap_elements.
TAP controller asynchronously. Use synchronous reset for all purposes.
TRST specification ignored.
TEST-843 - Logic cannot exist E The controlling/disabling value of cells for which
between boundary scan cell %s TEST-843 occurred might be incorrect in the
and design port %s. BSDL file. An annotation appears in the BSDL file
when TEST-843 downgraded.
TEST-877 - The output pin of the W Only applicable to BSR cells with PI and PO
boundary scan register cell %s is (BC_1 through BC_7).
not being driven by the input pin
during the instruction %s with
opcode %s.
TEST-891 - Not able to locate E Returns the BSR cell type (output or control). This
the parallel output for the error only occurs with input and control BSR cells.
boundary scan register cell %s.
TEST-893 and TEST-894 - Not W This message occurs while checking PIs for
able to locate the parallel input output and controlling BSR cells. The tool returns
for the boundary scan register TEST-894 for only output BSR cells and
cell %s. TEST-893 for only controlling BSR cells.
When using the boundary-scan design flow, the easiest way to reduce your test case is to
select a one-port-per-pad reference in your design for BSR insertion and assign a linkage bit
to the other ports. If the core logic is too big, then remove them as shown in the previous
steps.
Write your netlist in Verilog format to assist in tracing problems, or use Design Vision
schematics. To write out your netlist in Verilog format, use the following command:
change_names -rules verilog -hierarchy
write -hierarchy -format verilog -output design.v
Use the following guidelines for issues with pads failing preview_dft validation:
• Review your pad reference datasheet.
• Review the liberty pad cell or soft macro pad cell for syntax issues.
• Review the constraints applied in the netlist to the instance of the pad reference.
• Review the way the pad functionality is reduced from bidirectional to INPUT or OUTPUT.
• Review the way extra enables and data pins are constraints blocking the pad validation.
• Review the pad design command specifications for correct BSR assignments.
• Review the active state for pad design specifications and any instruction enables.
• set_tap_elements
• set_message_severity
If you insert BSD manually, the check_bsd command requires an EXTEST binary code. If
you don’t specify an EXTEST code, the check_bsd command issues the following error
message:
Error: EXTEST opcode not specified...
The EXTEST opcode is not mandatory if the -std option of the set_bsd_configuration
command is set to IEEE Std 1149.1_1993
After you know what the problems are in your design, find the location of the problem in your
source file and fix it. First locate the functional pad and pin attributes.
Here are some suggestions on how to debug pad issues:
• For .lib format without pad attributes, see “Reading the HDL Source Files” on page 2-78.
• The .lib model might be incorrect or incomplete. See the Library Compiler
documentation.
• Design Compiler synthesis optimized the pads. Use set_dont_touch for all .lib pad cells
before the insert_dft command.
• The pad pin functions are not compiled by the Design Compiler or Library Compiler tools
and the pad becomes a black box.
• The pad might have hierarchy that is not mapped to gates.
• If the .lib cell does not exist in the read libraries, use the following commands in dc_shell:
report_cell <instance>
report_attribute find (lib_pin, ‘<library>/<reference>/*’)
• If it is a black box, then turn off the pad validation for insertion. (But remember that it must
be functional for verification.)
• IDDQ structures and PU/PD are not constrained for boundary-scan compliance: the test
MUX enables are not in the correct mode, and the IDDQ structures and PU/PD are not
controlled by the TAP.
• The TAP port pads are linkage bit.
• If you are using soft macro cells with the pad design command, make sure they are
boundary-scan compliant as well.
• TAP ports pads must be dedicated ports and not shared.
For the verification flow, most of the these guidelines apply, but all pads must be functional;
black boxes and unmapped logic are not allowed.
There are no special checks for pads in IEEE Std1149.1 and IEEE Std 1149.6 applications.
If the design has IEEE Std 1149.6 cells, the pad are validated during an IEEE Std 1149.1
compliance check. However, the IEEE Std 1149.6 cells are checked only for IEEE Std
1149.1 compliance.
Note:
bsr-segments that are embedded BSR in pads are validated only during an IEEE Std
1149.1 compliance check.
Then find any problematic pins or buffer I/O pads in the Verilog netlist.
After you locate and debug the problems found in your design, save the source file.
The value argument specifies the assumed 1 or 0 value on the specified pins, and the
pin_list argument specifies the pin names of the pad enables, net enables, and MUX
enables, including the UTDR registers.
The hierarchical path to the pin should be specified for pins in subblocks of the current
design.
The check_bsd command takes into account the conditions you define with the
set_test_assume command.
The set_test_assume command has no impact on BSD patterns or BSDL files. The
command is ignored during BSD pattern generation or BSDL file generation.
Using the set_test_assume command allows you to apply alternative values to a design
net, which can aid in passing a compliance check or pad validation. However, this might then
require postprocessing of the netlist, using the correct values in the set_test_assume
command for the final netlist checks with check_bsd simulation and pad validation.
The procedure must be run after a successful check_bsd -verbose command, and it
accepts the output from that command as input. Run the procedure as follows:
# insert boundary-scan logic
insert_dft
The resulting SDC file constrains only the boundary-chain logic inside the chip-level design.
It applies false paths to all non-boundary-scan input and output ports, and it does not create
any clocks except TCK.
The SDC file does not constrain the external environment of the chip-level design. You must
still specify the operating conditions and I/O drive and load characteristics.
2. Report the worst minimum delay path in your TCK path group:
prompt> report_timing -group tck -delay_type min -path_type short
If you do not know the TCK clock group name, use the report_path_group command
to find it. The timing report should show a violating clock-gating path similar to the
following:
Startpoint: ChipLevel_DW_tap_inst/U2/U3_0
(rising edge-triggered flip-flop clocked by tck')
Endpoint: ChipLevel_BSR_top_inst/ChipLevel_BSR_mode_inst/*cell*747
(gating element for clock tck')
Path Group: tck
Path Type: min
...
Point Incr Path
---------------------------------------------------------------------
clock tck' (rise edge) 55.00 55.00
clock network delay (ideal) 0.00 55.00
ChipLevel_DW_tap_inst/U2/U3_0/CP (FD2) 0.00 55.00 r
ChipLevel_DW_tap_inst/U2/U3_0/QN (FD2) 1.93 56.93 f
...
ChipLevel_BSR_top_inst/ChipLevel_BSR_mode_inst/*cell*747/B (AN2I)
0.96 57.89 f
data arrival time 57.89
This path is not a real violation, as the clock signal being gated is not active until several
cycles after the enable signal stabilizes.
3. Interactively apply a minimum delay (hold) false path exception to the violating
clock-gating path endpoint (highlighted in the preceding example report):
prompt> set_false_path -hold -to \
ChipLevel_BSR_top_inst/ChipLevel_BSR_mode_inst/*cell*747/B
4. Repeat the report_timing command from step 2 to verify that the clock-gating violation
is no longer reported.
5. Add the set_false_path exception to the end of your boundary-scan SDC file.
Limitations
Note the following limitations of SDC file generation for boundary-scan logic:
• You must provide the TAP port names; they are not obtained from the design data or
compliance check report.
• The boundary-scan logic must be inserted at the top level of the design, which is the
default. You cannot use the set_dft_location to place the boundary-scan logic in
another location.
• For asynchronous boundary-scan designs, you must manually apply a false-path
exception to a clock-gating path.
• IEEE Std 1149.6 logic is not supported (because the check_bsd command does not
support it).
• No exceptions are generated for user-defined test data registers.
5-1
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
This command creates test patterns according to the specified options, storing them in
memory to be written out by a subsequent write_test command.
The -type option specifies a list of one or more pattern types to be created. The pattern
types are described in Table 5-1. If no type is specified, the default is all.
Table 5-1 Pattern Type Choices for the -type Option
tap_controller Generates patterns to test the TAP controller finite state machine.
reset Generates patterns to test the reset behavior in the TAP controller.
Table 5-1 Pattern Type Choices for the -type Option (Continued)
functional Includes all patterns types needed to test the logic function of the
boundary-scan logic. It includes the following types:
tap_controller, reset, bsr, tdr, ac_input_pulse, ac_input_train,
ac_output_pulse, ac_output_train
dc_parametric Includes the BSR and leakage patterns types, which are used to test I/O
voltage and current levels, respectively. It includes the following types:
bsr, leakage
The -effort option controls how much effort is used when the tool analyzes the logic to
determine what boundary-scan instructions exist. For more information, see the man page.
If compliance checking has not been performed, the create_bsd_patterns command
invokes the compliance checker before creating patterns. If a boundary-scan design is
noncompliant, the command does not generate any functional vectors. You can downgrade
some errors to warnings and then write the patterns or use the user guidance. For more
information, see “Downgrading Errors To Warning Status” on page 4-11.
The dc_parametric pattern type allows you to check I/O voltage and current levels using
the SAMPLE, PRELOAD, and EXTEST instructions. The BSR patterns allow you to check
DC design characteristics such as input threshold voltage Vil/Vih or current Iil/Iih and the
output threshold voltage Vol/Voh or current Iol/Ioh. Use the bsd_max_in_switching_limit
and bsd_max_out_switching_limit variables to control how many inputs and outputs can
be allowed to switch simultaneously. For additional information on DC parametrics, see the
DFTMAX Boundary Scan Reference Manual. For more information on setting input/output
switching limits, see the DFTMAX Boundary Scan Reference Manual.
The following command creates all test pattern types:
dc_shell> create_bsd_patterns
The following command creates only the reset and tdr pattern types:
dc_shell> create_bsd_patterns -type {reset tdr}
Use the -format option to specify the output format. Valid format arguments are
• stil – Generates a STIL file (.stil) that contains test patterns. You can use the
stil2verilog utility to create a Verilog testbench for the patterns. This testbench format
allows you to simulate the exact patterns used on the tester. For more information, see
“Using MAX Testbench” in TetraMAX Help.
• wgl_serial – Generates a WGL file (.wgl) that contains test patterns in serial WGL
format.
• verilog – Generates a single Verilog testbench file (.v) that applies and simulates the
test patterns; the patterns are contained in the Verilog file. This testbench file contains
comments that are useful for debugging.
By default, the write_test command names the output files after the name of the current
design. You can use the -output option to specify a different base name for output file
names. Do not include the file extension; the tool automatically adds the appropriate file
extension for each file type.
Example 5-2 shows a script for writing out boundary-scan test patterns to STIL.
Example 5-2 Generating STIL Using the DFTMAX Tool
# setting up
set search_path [concat ./ $search_path]
set target_library "asic_vendor.ddc"
set synthetic_library {dw_foundation.sldb}
set link_library [concat "*" $target_library $synthetic_library]
/remote/release/synthesis/A-2007.12/sparcOS5/syn/ltran/stil2wgl:
processing the unnamed PatternExec block
// STIL2WGL Version A-2007.12-LS
// Copyright (c) 2002-2006 by Synopsys, Inc.
// ALL RIGHTS RESERVED
//
STIL-parse(top_wgl_tb.wgl.stil): ... STIL version 1.0 ( Design P2001.01)
...
STIL-parse(top_wgl_tb.wgl.stil): ... Building test model ...
STIL-parse(top_wgl_tb.wgl.stil): ... Signals ...
STIL-parse(top_wgl_tb.wgl.stil): ... SignalGroups ...
STIL-parse(top_wgl_tb.wgl.stil): ... Timing ...
STIL-parse(top_wgl_tb.wgl.stil): ... PatternBurst "_BSD_burst_" ...
STIL-parse(top_wgl_tb.wgl.stil): ... PatternExec ...
STIL-parse(top_wgl_tb.wgl.stil): ... Pattern block "_BSD_block_" ...
stil2wgl: End of STIL data; WGL generation complete
1
The resulting test program contains a test_setup procedure that initializes the
configuration UTDRs to their defined initialization values. In addition, the flush test for
each configuration UTDR scans in the initialization pattern after the flush-test pattern so
that the value is not disturbed when the flush test exits through the Update-DR state.
4. Write the test program in STIL and/or WGL format using the write_test command:
write_test -format stil -output BS_TEST
write_test -format wgl_serial -output BS_TEST
3. When you create the test program with the create_bsd_patterns command,
incorporate this test_setup procedure into the test program by using the
-bsd_test_setup option:
create_bsd_patterns -bsd_test_setup enable
The resulting test program contains the test_setup procedure that you created.
4. Write the test program in STIL and/or WGL format using the write_test command:
write_test -format stil -output BS_TEST
write_test -format wgl_serial -output BS_TEST
create_bsd_patterns \
-setup_instructions {CONFIG_PADS} \
-jtag_reset disable
In this case, the tool creates a test_setup procedure that asserts the boundary-scan
reset signal before loading the specified configuration registers, but it suppresses all
subsequent boundary-scan reset signals in the test program.
• For configuration registers initialized using a custom test_setup procedure, specify the
-jtag_reset disable option along with the -bsd_test_setup option:
read_test_protocol -section test_setup bsd_test_setup.spf
create_bsd_patterns \
-bsd_test_setup enable \
-jtag_reset disable
In this case, you supply a custom test_setup procedure that is responsible for asserting
boundary-scan reset and initializing the configuration registers. The tool suppresses all
subsequent boundary-scan reset signals in the test program.
The -type option of the create_bsd_patterns command specifies the type of patterns to
generate. If the tap_controller or reset type is specified, the -jtag_reset disable
option is ignored because the boundary-scan reset signal must be asserted during these
tests. If the all type is specified, the tap_controller and reset tests are omitted from the
test program.
The -jtag_reset disable option can only be used together with either the
-setup_instructions or the -bsd_test_setup option.
Limitations
Note the following requirements and limitations for initializing configuration registers:
• For both initialization methods, you must write your test program in STIL and/or WGL
formats; test programs written in Verilog format do not contain the custom initialization
procedure.
• The two initialization methods are mutually exclusive; you cannot use both at the same
time.
When the create_bsd_patterns command is run, it adds the specified number of dead
cycles before output measurement. TCK will not pulse during these dead cycles. The default
is 0 (zero), which does not insert any dead cycles.
Argument Description
You might want to choose one package from the various packages for your design. You can
optimize port ordering if you specify a pin map file before synthesis. The ordering can’t be
changed after synthesis. For example, if you have a ceramic package, you might use the
following command:
read_pin_map ceramic_port_to_pin_map.txt
The following sections discuss the way the tool uses the port-to-pin mapping file and explain
how to create one. For more information on linkage, bus, and unbused ports, see the
DFTMAX Boundary Scan Reference Manual.
You can use the read_pin_map command to read in multiple packages. For more
information, see “Generating BSDL and BSD Patterns for Multiple Packages” on page 5-16.
The ordering of entries relative to one another in the port-to-pin mapping file determines the
ordering of the logical ports to physical pins. However, the specific pin numbers denoted in
the port-to-pin mapping file are placeholders only and do not map to actual package pin
numbers.
Use only one package type for each pin mapping file.
List elements in the port-to-pin mapping file first by logical port name and then by physical
pin number.
PORT = port_name, PIN = pin_number;
For example, if you want to connect the port RESETN to package pin P5, you would enter
the following information into your pin mapping file:
PORT = RESETN, PIN = P5;
Invoke this command immediately after running the insert_dft command or the
check_bsd command (for 1149.1 only). Invoking other commands could invalidate the BSL
design data from which the BSDL and test patterns are generated.
Option Description
-output Defines the file name for the output BSDL file. The file name
file_name can use either an absolute or relative path name. You must
specify the full file name when using the -output option. The
tool does not append a default suffix.
Option Description
Option Description
-naming_check VHDL Specifies checks for both VHDL and BSDL reserved
words. The tool generates warning messages for
names that use either VHDL or BSDL reserved
words. This is the default naming_check value.
-naming_check BSDL Specifies checks for BSDL reserved words only. The
tool generates warning messages for names that use
the BSDL reserved words. The tool writes VHDL
reserved words to the BSDL file without warnings.
If you want to write a BSDL file and do a naming check on that file, use the following
command:
write_bsdl -naming_check BSDL -output filename.bsdl
Note:
The -naming_check options are mutually exclusive. Running the command with a
different -naming_check option overwrites the previous value.
Note:
If a boundary-scan design is noncompliant, the write_bsdl command does not
generate any BSDL file.
See Chapter 4, “Verifying the Boundary-Scan Design,” for more information.
Package pin map file full_pins.map Package pin map file reduced_pins.map
PACKAGE = my_package1; PACKAGE = my_package2;
PORT = clk, PIN = P1; PORT = clk, PIN = P1;
PORT = vdd, PIN = P11; PORT = vdd, PIN = P11;
PORT = vss, PIN = P12; PORT = vss, PIN = P12;
PORT = EN, PIN = P2; --PORT = EN, PIN = P2;
PORT = tck, PIN = P3; PORT = tck, PIN = P3;
PORT = vdd, PIN = P13; PORT = vdd, PIN = P13;
PORT = vss, PIN = P14; PORT = vss, PIN = P14;
PORT = tms, PIN = P4; PORT = tms, PIN = P4;
PORT = tdi, PIN = P5; PORT = tdi, PIN = P5;
PORT = trst_n, PIN = P6; PORT = trst_n, PIN = P6;
PORT = vdd, PIN = P15; PORT = vdd, PIN = P15;
PORT = vss, PIN = P16; PORT = vss, PIN = P16;
PORT = in1, PIN = P7; PORT = in1, PIN = P7;
PORT = out2, PIN = P8; PORT = out2, PIN = P8;
PORT = out1, PIN = P9; PORT = out1, PIN = P9;
PORT = tdo, PIN = P10; PORT = tdo, PIN = P10;
To generate a BSDL file in which the non-wire-bound ports are characterized as no-connect
ports or linkage ports in the BSDL file, or to generate patterns for a package that has
no-connect ports, do the following:
1. Use the read_pin_map command to read in the full package pin map file that wire bonds
all ports of the design. This ensures a full set of boundary-scan cells.
For example, suppose design M1 has two package configurations. Package M1_large_pkg
bonds out all the ports in the design. Package M1_small_pkg contains no-connect ports in2,
out2, and inout2. Both of these packages have unused pins in3, out3, and inout3. The
following script fragment shows boundary scan insertion for package M1_large_pkg. The
script then runs compliance checking on the BSD-inserted design and outputs a BSDL file
and pattern file. Next, the script reads in package M1_small_pkg and generates its BSDL
and pattern files.
Example 5-5 Multiple Packages
# Read the package that bonds out all the ports in the design
read_pin_map M1_large.pinmap
insert_dft
check_bsd -verbose
The BSDL output annotates which ports are no-connect ports. For example, the following
fragment for package M1_small_pkg declares all the ports in the design that are no-connect
ports.
port (
...
trst_n : in bit:
inout1 : inout bit;
tdo : out bit;
EN : linkage bit; -- NC port
in1 : linkage bit; -- NC port
in3 : linkage bit;
inout2 : linkage bit; -- NC port
inout3 : linkage bit;
out1 : linkage bit; -- NC port
out2 : linkage bit; -- NC port
out3 : linkage bit
);
BSR cells connected to no-connect ports are described as internal BSR cells in the BSDL
file. Merged BSR cells have duplicate entries in the BSDL with the same cell number. If a
merged BSR cell is associated with only one no-connect port, the corresponding cell entry
does not appear in the BSDL file. If both ports associated with a merged BSR cell are
no-connect ports, the cell is described as an internal BSR cell.
When a merged BSR cell also controls multiple ports and all its associated ports are
no-connect ports, the BSR cell is described as an internal cell in the BSDL. When the input
port associated with this BSR cell is a no-connect port, its cell entry is removed. If all the
ports controlled by the BSR cells are no-connect ports, the cell entry for the control BSR cell
is removed.
The following BSDL output fragment for package M1_small_pkg describes the BSR cells. In
this example, BSR cells 7, 2, and 0 are exclusively connected to NC ports.
-- num cell port function safe [ccell disval reslt]
7 (BC2, *, internal. X), &
6 (BC1, in2, input. X), &
5 (BC2, clk, input, X), &
4 (BC1, *, control, 0), &
3 (BC1, in3, input, X), &
2 (BC1, *, internal, X), &
1 (BC7, inout1, bidir, X), 4, 0, Z) &
0 (BC7, *, internal, X), &
Detailed information on merged BSR cells can be found in section B.11.1.3, Merged Cells,
pages 187-188, of the IEEE Std 1149.1-2001. Note in particular, BSR cell #9, which is a
feed-through signal, and Figure B.9 on page 188, as well as the last paragraph describing
the BSR cell #9 in this figure.
Figure 5-1 shows the flow for generating BSDL and test patterns after BSD insertion.
Figure 5-1 Generating BSDL and Test Pattern Flow
Generate Generate
BSD patterns BSDL file
Generate gate-
level netlist
Example 5-6 Generating BSDL and Test Pattern After BSD Insertion
read_file -format verilog des.v
current_design DESIGN
# BSD Insertion
insert_dft
read_pin_map pin_map.txt
# BSDL generation
write_bsdl
create_bsd_patterns
• Limitations
• Example Script for Test Pattern Generation Using a Netlist and BDSL File
• Example Script for Test Pattern Generation From Only a BSDL File
• Limitations
• References
No Is black-box or
complete netlist
provided?
read_bsdl <bsdl_file_name>
read_file <netlist>
No Yes
The default for the add_linkage_as_design_port option is false, which will disregard all
the linkage ports during the testbench construction when only the BSDL file is read.
If a netlist is not read in, then the linkage ports can be treated using either of the following
two methods:
• If you set the add_linkage_as_design_port option to true, the linkage ports are listed
as design ports in the testbench.
• If you set the add_linkage_as_design_port option to false, the linkage ports are not
listed as design ports in the testbench.
Note:
NC ports are treated the same way as linkage ports.
The DFTMAX tool supports the following BSDL instructions in the BSDL file when reading
in the file using the read_bsdl command:
• EXTEST
• BYPASS
• SAMPLE
• PRELOAD
• CLAMP
• HIGHZ
• IDCODE
• USERCODE
• EXTEST_PULSE
• EXTEST_TRAIN
• INTEST
• RUNBIST
• User-defined instructions
The tool supports the following cell types when reading the BSDL file with the read_bsdl
command:
• BC_0
• BC_1
• BC_2
• BC_4
• BC_7
• AC_1
• AC_2
• AC_7
• AC_SelX
• AC_SelU
• Missing punctuation
• Misspelled keywords
• Missing opcodes
• Missing IR capture value
• VHDL and Verilog naming conventions
The following semantic error checks are performed on a BSDL file that is read using the
read_bsdl command:
If the tool encounters an error during the syntax or the semantic errors check, it generates
an error report and exits.
Some of the reported errors are
• Missing BSDL input file.
To remedy this error, make sure that the BSDL file is available in the search path and
rerun the test.
• Missing I/O netlist.
To remedy this error, make sure that the netlist with I/O information is available in the
search path and rerun the test.
Example Script for Test Pattern Generation From Only a BSDL File
The following script shows you how to generate test patterns from a BSDL file only:
set search_path [list "." ./lib $search_path]
set synthetic_library [list standard.sldb dw_foundation.sldb]
set target_library [list class.db]
Limitations
• The following boundary-scan register cell types are not supported: BC_3, BC_5, BC_6,
BC_8, BC_9, BC_10, AC_8, AC_9, and AC_10.
• Not all constructs of the BSDL syntax are supported. For example, user supplied
packages are not supported by the BSDL reader.
• The BC_1, BC_2, and BC_4 boundary-scan register cells support the INTERNAL
function.
• The read_pin_map command does not override the ordering or pin mapping
associations contained in the input BSDL file; it is intended for use in the BSD insertion
flow.
• The check_bsd command is not supported.
References
• 1149.1-1993 IEEE standard test access port and boundary-scan architecture.
• 1149.1-2001 IEEE standard test access port and boundary-scan architecture.
• 1149.6-2003 IEEE Standard for Boundary-Scan Testing of Advanced Digital Networks.
Then write the design netlist in Verilog using the following command:
write -hierarchy -format verilog -output bsd_design_filename.v
When the variable is false, X is used in the WFT, as shown in the following:
"all_bidirectionals" {T{'Ons'X;'40ns'T;}}
"all_bidirectionals" {X{'Ons'X}}
"all_bidirectionals" {H{'Ons'X;'40ns'H;}}
"all_bidirectionals" {L{'Ons'X;'40ns'L;}}
In the TetraMAX environment, you read in libraries and the design netlist, and then compile
using the following commands:
set_messages -log ./f_tmax.log -r
read_netlist ./lib_sim/vlib/*.v
read_netlist ./netlist/f_bsd.v
run_build_model demo
Next, run design rule checking (DRC), set the pattern’s source, and simulate, using the
following commands:
add_clocks 0 TCK
add_pi_constraints 1 TRST
run_drc
set_patterns -external ./pat/f_wgl_tb.wgl
Finally, add all the faults and run fault simulation by using the following commands:
add_faults -all
run_fault_sim -seq
report_summaries
This testbench format contains comments that are useful for debugging.
• Using the stil test format:
dc_shell> write_test -format stil -output patterns
Then, run the stil2verilog command at the system shell prompt to create a Verilog
testbench:
% stil2verilog patterns.stil my_testbench
This testbench format allows you to simulate the exact patterns used on the tester. For
more information, see “Using MAX Testbench” in TetraMAX Help.
For VCS simulation of this Verilog testbench, you read and compile the design netlist,
testbench, and Verilog simulation libraries. To run an interactive simulation, use the following
command:
vcs -RI\
+acc+2 -notice \
+delay_mode_zero \
+nospecify \
+notimingcheck \
+udpsched \
+vcs+lic+wait \
-timescale=1ns/10ps \
-v ./LIB/*.v \
./chip.v \
./my_testbench.v \
-l ./simv.log \
-o simv
If the simulation library is in the same directory where the design and testbench are located,
this command is correct. Otherwise, use the -y or -v command argument if the simulation
library is located in another directory appropriately. For details, see the VCS User Guide.
The following techniques ensure the best and consistent results:
1. Delete compiled directories from previous simulations (that is, csrc and *.daidir).
2. Simulate and debug the chain test pattern as early as possible. This is a very important
first step in making sure the rest of the BSD patterns work correctly.
If you separate patterns, be sure to include reset sequences to initialize the TAP
controller.
3. Minimize the use of VCS switches. Avoid using any VCS optimization switches such as
+rad+, +acc+, +2state, or +vcsd, because the accuracy of results can vary with netlist
revisions (incremental netlist updates).
4. If simulating with VCS 6.0, use the undocumented +nogateperf option to prevent global
optimization on clock signals.
Note:
The switch option +gateperf is on by default. This is an optimization switch for better
runtime performance with gate-level netlists. It is the default because it improves
simulation time by 7x. Always turn this switch off using +nogateperf.
5. Check with the ASIC vendor documentation and library provider for special requirements
on when not to use back-annotated timing in a zero delay, unit delay, or functional delay
simulation.
6. When not using both asynchronous TRST or power-up reset, add the following initial
block to the Verilog testbench. Without asynchronous TRST and power-up reset, the
TAP FSM does not initialize and simulation fails. Adding the initial block prevents
simulation failure.
initial begin
#290
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[15] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[14] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[13] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[12] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[11] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[10] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[9] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[8] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[7] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[6] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[5] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[4] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[3] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[2] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[1] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[0] .Q ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[15] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[14] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[13] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[12] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[11] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[10] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[9] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[8] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[7] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[6] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[5] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[4] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[3] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[2] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[1] .QN ;
release TOP_inst.TOP_DW_tap_inst.\U1/current_state_reg[0] .QN ;
end
If simulation yields a mismatch, consider the following tips to determine the possible cause:
• Test vectors from the tool should be simulated with zero delay. When using the VCS
simulator to simulate BSD generated vectors, use the +delay_mode_zero option during
compile time. Also, use this option when simulating vectors generated with BSD-inserted
gate level netlist and gate delays.
• Simulation models should match the functionality of the synthesis library models in the
.lib files. Differences in these two libraries can result in a simulation mismatch. Determine
which simulation cell causes the simulation mismatch and verify that the basic
functionality of this cell is the same in both libraries.
• Verify that the correct I/O pad constraints are applied to enable or disable pad pull-ups
and pad pull-downs, or to the MUX selected signals in the pad cell.
• Changes made to the netlist as postprocessing can affect the simulation results if BSD
patterns are not regenerated.
• Check the correct environment setting for your Verilog simulator; the root path might be
specified incorrectly.
• If your design was inserted with the DFTMAX tool, make sure all the pad issues were
resolved during preview_dft and check_bsd before writing the patterns for simulation.
When using VCS simulation to debug simulation mismatches, the first step is to set up a
good configuration file for the simulator to display the instruction bus so that you know what
instruction is active, and the TAP FSM bus, so that you know what TAP state you are in when
debugging the boundary-scan logic. Then you can display ports failing the simulation and
can trace back to pad cell signals to see where you are losing your simulated patterns.
A-1
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
If a default BSR cell was not defined implicitly or explicitly, the tool uses the equivalent
DesignWare cell of that type as the default cell.
For example, you might want to use your own custom design to replace the DesignWare
foundation library element BC_1 that is normally inserted into the boundary-scan design.
You would do this with a command similar to that shown in Example A-1.
Example A-1 define_dft_design Example
dc_shell> define_dft_design -type BC_1 \
-interface [list si TDI H data_in DI H shift_dr SHIFTDR H \
capture_clk CL CLKDR H update_clk UPDATEDR H \
mode MODE_1 H data_out DO H so TDO H] \
-design_name user_bsr_bc1
The DFTMAX tool supports multiple implementations of the default DesignWare BSR cells
of the same type for boundary-scan synthesis. You can use DesignWare cells at multiple
ports or a mix of DesignWare and custom BSR cells.
For example, you might want to use the DesignWare foundation element BC_1 along with
the element BC_2. You would do this with commands similar to those shown in
Example A-2. A flow using custom BSR cells is show in Example A-3.
Example A-2 define_dft_design Example
dc_shell> define_dft_design -design_name BC_1_SLOW -type BC_1 \
-interface {capture_clk my_capture_clk h \
update_clk my_update_clk h \
data_in my_data_in h \
data_out my_data_out h \
shift_dr my_shift_dr h \
si my_si h \
so my_so h \
mode my_mode h}
The ports not on the list use the BSRs from the DesignWare foundation.
AppendixA:A:Custom
Chapter CustomBoundary-Scan
Boundary-ScanDesign
Design
Defining Custom Boundary-Scan Components A-3
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
where design_name is the name of the custom TAP controller design that replaces the
DesignWare Foundation library TAP controller.
The pin interface of the custom TAP controller design, defined with the -interface option,
must match that of the DesignWare Foundation TAP controller. Depending on your pin
interface, you might need to set the bsd_use_old_tap variable as follows:
• When using a custom TAP equivalent to a DW_tap_uc access interface, leave the
bsd_use_old_tap variable at its default of false and use -type TAP_UC option.
• When using a custom TAP equivalent to a DW_tap access interface, set the
bsd_use_old_tap variable to true and use the -type TAP option.
Example A-4 shows the definition of a custom TAP controller design that has an interface
matching the DW_tap_uc component.
Example A-4 define_dft_design Command Example for Synchronous Custom TAP Controller
# defining Custom TAP controller
define_dft_design -type TAP_UC \
-interface [ list tck tck H \
tdi tdi H \
tms tms H \
so so H \
tdo tdo H \
tdo_en tdo_en H \
trst_n trst_n H \
shift_dr shift_dr H \
sync_capture_en sync_capture_en H \
bypass_sel bypass_sel H \
sync_update_dr sync_update_dr H \
instructions instructions H] \
-design_name my_tap_uc
The tool uses the instruction bus output from the custom TAP design for all instruction
decode logic created by boundary-scan insertion. No existing instruction decode logic is
reused.
See the DFTMAX Boundary Scan Reference Manual for additional information on the TAP
access pin semantics.
AppendixA:A:Custom
Chapter CustomBoundary-Scan
Boundary-ScanDesign
Design
Customizing the Boundary-Scan Register A-5
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
-ports port_list Specifies the list of ports for There is no default for this
which the configuration option. Either the -ports
applies. option or the -core option is
required.
-name bcell_name Specifies the name of the There is no default for this
boundary cell. option.
The name of the boundary
cell is mandatory if the
-share option is set to true.
Example A-5 shows a boundary-scan control register, control, of type BC_1, controlling the
tristate output ports out0, out1, and out2.
Example A-5 Using the set_boundary_cell Command
dc_shell> set_boundary_cell
-class bsd -type BC_1 \
-function control \
-ports {port1 port2} \
-name CTRL1 \
-share false
AppendixA:A:Custom
Chapter CustomBoundary-Scan
Boundary-ScanDesign
Design
Customizing the Boundary-Scan Register A-7
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
output_inverted|bidir_inverted|receiver_p|
receiver_n|ac_select]
[-ports port_name]
Note:
The recommended way to avoid inserting a BSR cell on the port is to use the
set_bsd_linkage_port command instead of the set_boundary_cell -type none
command. See “Inserting Boundary-Scan Components” in Chapter 2”.
The following example uses the set_boundary_cell command to assign the BC1
boundary-scan cell to input and output ports.
dc_shell> set_boundary_cell -class bsd -type BC_1 \
-function input -ports {out in in1 in2}
dc_shell> set_boundary_cell -class bsd -type BC_1 \
-function output -ports {out out1}
If you do not specify your control cells with the set_boundary_cell command, they are
placed, by default, next to data cells. The following example orders the cells with the scan
chain named “boundary.”
Example A-6
set_scan_path -class bsd boundary \
-ordered_elements {list en clk in2 in1 CTRL1 out0 out1 out2}
If you want to specify the position of your boundary-scan register control cells, first define the
control cells by using the set_boundary_cell command. The identifier you assign to the
cells with this command allows you to use the set_scan_path command to specify the
sequence. For more information on ordering with set_scan_path, see the DFTMAX
Boundary Scan Reference Manual.
AppendixA:A:Custom
Chapter CustomBoundary-Scan
Boundary-ScanDesign
Design
Ordering the Boundary-Scan Register With the set_scan_path Command A-9
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
B-1
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
bsd_default_delay test_bsd_default_delay 0
bsd_default_bidir_delay test_bsd_default_bidir_delay 0
bsd_default_strobe test_bsd_default_strobe 95
bsd_default_strobe_width test_bsd_default_strobe_width 0
For boundary-scan designs, use a strobe-after-clock-edge, and set the timing values
described in Example B-1.
If you intend to use a strobe-after-clock protocol, the timing attributes shown in Example B-1
appear in the inferred test protocol for the multiplexed flip-flop design example:
Example B-1 Timing Attributes for a Strobe-After-Clock Design
set_app_var test_default_period 100
set_app_var test_bsd_default_strobe 95
set_app_var test_bsd_default_strobe_width 0
set_app_var test_bsd_default_delay 0
set_app_var test_bsd_default_bidir_delay 0
Table B-2 lists the test timing attributes along with the keyword used and the definition of the
attribute. The value of these attributes must be a positive real number. The time unit is
nanoseconds (ns).
Table B-2 Test Timing Attributes
test_default_period
The test_default_period variable defines the default (in ns) for the period for compliance
checking. The period value must be a positive real number.
AppendixB:B:Setting
Chapter SettingTiming
TimingAttributes
Attributes
Setting Global Timing Attributes B-3
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
For example,
dc_shell> set_app_var test_default_period 100.0
test_bsd_default_delay
The test_bsd_default_delay variable defines the default (in ns) for the input delay for
compliance checking. The delay value must be a nonnegative real number less than the
strobe value (see the default timing in Figure B-1 on page B-6).
The syntax for setting the variable is
set_app_var test_bsd_default_delay delay
For example,
dc_shell> set_app_var test_bsd_default_delay 0.0
test_bsd_default_bidir_delay
The test_default_bidir_delay variable defines the default (in ns) for the bidirectional
delay for compliance checking. The bidir_delay must be a positive real number less than the
strobe value and can be less than, greater than, or equal to the delay value (see the default
timing in Figure B-1 on page B-6).
The syntax for setting the variable is
set_app_var test_bsd_default_bidir_delay bidir_delay
For example,
dc_shell> set_app_var test_bsd_default_bidir_delay 0.0
test_bsd_default_strobe
The test_bsd_default_strobe variable defines the default (in ns) for the strobe for
compliance checking. The strobe value must be a positive real number less than the period
value and greater than the test_default_delay value (see the default timing in Figure B-1
on page B-6).
The syntax for setting the variable is
set_app_var test_bsd_default_strobe strobe
For example,
dc_shell> set_app_var test_bsd_default_strobe 95.0
test_bsd_default_strobe_width
The test_bsd_default_strobe_width variable defines the default (in ns) for the strobe
width for compliance checking. The strobe width value must be a positive real number. The
strobe value plus the strobe width value must be less than or equal to the period value (see
the default timing in Figure B-1 on page B-6).
The syntax for setting the variable is
set_app_var test_bsd_default_strobe_width strobe_width
For example,
dc_shell> set_app_var test_bsd_default_strobe_width 5.0
AppendixB:B:Setting
Chapter SettingTiming
TimingAttributes
Attributes
Inferring Timing Attributes B-5
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
command. Timing attribute values ensure the accuracy of the rule checking process. They
also provide important information that makes the test protocol file a complete test program
template.
The timing diagram in Figure B-1 shows the effect of these timing attributes on vector
formatting.
Figure B-1 Effect of Timing Attributes on Vector Formatting
Period
Delay = 0
Bidirectional delay = 0
Strobe
Strobe width
• Bidirectional timing
By default, the tool applies data to all bidirectional ports in input mode 0 ns after the start
of the parallel measure cycle. In any cycle where a bidirectional port changes from input
mode to output mode, the tool releases data from the bidirectional port 0 ns after the start
of the cycle. If your semiconductor vendor requires different bidirectional timing, specify
the required bidirectional delay using the test_bsd_default_bidir_delay variable.
The risks associated with incorrect specification of the bidirectional delay time include:
❍ Test design rule violations
❍ Bus contention
❍ Simulation mismatches
Minimize these risks by carefully specifying the bidirectional
delay time.
The tool uses the bidirectional delay time as
❍ The data application time for bidirectional ports in input mode during the parallel
measure cycle (and during scan in for bidirectional ports used as scan input or
scan-enable signal)
❍ The data release time for bidirectional ports in input mode during cycles in which the
bidirectional port changes from input mode to output mode
The tool performs relative timing checks during test design rule checking. The following
requirements must be met:
❍ The bidirectional delay time must be less than the strobe time.
If you change the strobe time from the default, confirm that the bidirectional delay
value meets this requirement.
❍ If the bidirectional port drives sequential logic, the bidirectional delay time must be
equal to or greater than the active edge of the clock.
• Output strobe timing
By default, the tool compares data at all output ports 95 ns after the start of the cycle. If
your semiconductor vendor requires different strobe timing, specify the strobe time using
the test_bsd_default_strobe variable.
AppendixB:B:Setting
Chapter SettingTiming
TimingAttributes
Attributes
Default Test Timing Information B-7
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
The tool determines the polarity of the first edge (rise or fall) so the first clock edge
triggers a majority of cells on a clock. The timing arcs in the logic library specify each
cell’s trigger polarity. The polarity of the second edge is the opposite of the polarity of the
first edge (if the first edge is rising, the second edge is falling; if the first edge is falling,
the second edge is rising).
Use the following command to specify clock waveforms if your semiconductor vendor’s
requirements differ from the default timing:
set_dft_signal -view view_type -type TCK -port TCK -timing edge_list
The -timing option specifies the pair of leading and trailing edge times within the TCK
clock period. The TCK clock period is defined by the test_default_period variable.
For example,
set_dft_signal -view existing_dft -type TCK -port pad_tck \
-timing { 45 55 }
Edge-triggered
1 45.0 60.0
1. Auxiliary-clock LSSD scan style only. In this scan style, the system clock is not used, the
edge-triggered test clock (IH) is used for capture, and the scan-A master clock and scan-B slave clock are
used for scan shift.
Note:
The polarity (rise or fall) of the first edge is determined from the logic library timing
description for the sequential cells. The dft_drc command selects the polarity of the first
edge so that the majority of the cells are triggered off the first edge. The polarity of the
second edge is determined by the polarity of the first edge. For example, if the first edge
is rising, the second edge is falling.
AppendixB:B:Setting
Chapter SettingTiming
TimingAttributes
Attributes
set_dft_signal Default Clock Timing B-9
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06
• test_clock_fall_time
To verify the values of these timing attributes for all clock ports, use the report_attribute
-port command.
Note:
The set_dft_signal command has a period associated with it. That period has to be
identical to the test_default_period value. If you change the value of one, you must
be sure to check the value of the other.
0 45 55 100 ns
The dft_drc command automatically infers this clock timing, because the design contains
an edge-triggered, active rising clock (see Table B-4 on page B-9). You can explicitly specify
this clock waveform using the following set_dft_signal command:
dc_shell> set_dft_signal -view existing_dft -type CLK \
-timing {45.0 55.0}
If a return-to-one clock is required instead of the default clock, you can use the following
set_dft_signal command:
dc_shell> set_dft_signal -view existing_dft -type CLK \
-timing {55.0 45.0}
0 45 55 100 ns
AppendixB:B:Setting
Chapter SettingTiming
TimingAttributes
Attributes
set_dft_signal Default Clock Timing B-11
DFTMAX™
DFTMAX™ Boundary
Boundary Scan
Scan User
User Guide
Guide O-2018.06
Version O-2018.06