DFTXG 2
DFTXG 2
DFTXG 2
Compression
User Guide
Version H-2013.03-SP4, September 2013
Copyright Notice and Proprietary Information
© 2013 Synopsys, Inc. All rights reserved. This software and documentation contain confidential and proprietary information that is
the property of Synopsys, Inc. The software and documentation are furnished under a license agreement and may be used or
copied only in accordance with the terms of the license agreement. No part of the software and documentation may be reproduced,
transmitted, or translated, in any form or by any means, electronic, mechanical, manual, optical, or otherwise, without prior written
permission of Synopsys, Inc., or as expressly provided by the license agreement.
Destination Control Statement
All technical data contained in this publication is subject to the export control laws of the United States of America.
Disclosure to nationals of other countries contrary to United States law is prohibited. It is the reader's responsibility to
determine the applicable regulations and to comply with them.
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH
REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Trademarks
Synopsys and certain Synopsys product names are trademarks of Synopsys, as set forth at
http://www.synopsys.com/Company/Pages/Trademarks.aspx.
All other product or company names may be trademarks of their respective owners.
Third-Party Links
Any links to third-party websites included in this document are for your convenience only. Synopsys does not endorse
and is not responsible for such websites and their practices, including privacy practices, availability, and content.
Synopsys, Inc.
700 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.
1. Introduction
Introduction to the DFTMAX Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-2
The Adaptive Scan Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-2
Decompressor Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4
Compressor Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-4
Adaptive Scan Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-5
Design Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-5
Pin Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-5
Multicore Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6
Limitations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-8
Current Limitations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-8
Limitations Associated With Adaptive Scan Technology . . . . . . . . . . . . . . . . . . 1-9
Limitations Associated With Hierarchical Adaptive Scan Synthesis . . . . . . . . . 1-9
v
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
Contents vi
DFTMAX™ Compression User Guide Version H-2013.03-SP4
Chapter 2: Contents
Contents 2-vii
vii
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
Contents viii
DFTMAX™ Compression User Guide Version H-2013.03-SP4
Chapter 2: Contents
Contents 2-ix
ix
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
Contents x
DFTMAX™ Compression User Guide Version H-2013.03-SP4
Chapter 2: Contents
Contents 2-xi
xi
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
TEST-1093 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-91
TEST-1094 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-91
TEST-1095 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-91
TEST-1096 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-91
TEST-1097 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-91
Contents xii
Preface
This preface includes the following sections:
• About This Guide
• Customer Support
xiii
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
Audience
This user guide is intended for ASIC design engineers who have some experience with
testability concepts and strategies and for test and design-for-test engineers who want to
understand how certain test automation concepts and practices relate to the DFTMAX tool.
Related Publications
For additional information about the DFT Compiler 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:
• DFT Compiler
• Design Compiler®
• BSD Compiler
• TetraMAX®
• PrimeTime®
Release Notes
Information about new features, enhancements, changes, known limitations, and resolved
Synopsys Technical Action Requests (STARs) is available in the DFT Compiler Release
Notes on the SolvNet site.
To see the DFT Compiler Release Notes,
1. Go to the SolvNet Download Center located at the following address:
https://solvnet.synopsys.com/DownloadCenter
2. Select DFT Compiler, and then select a release in the list that appears.
Preface
About This Guide xiv
DFTMAX™ Compression User Guide Version H-2013.03-SP4
Conventions
The following conventions are used in Synopsys documentation.
Convention Description
Preface 1: Preface
Chapter
About This Guide 1-xv
xv
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
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
Customer Support xvi
1
Introduction 1
DFTMAX compression provides synthesis-based adaptive scan technology to lower the cost
of testing complex designs, particularly when fabricated with advanced process
technologies. These deep-submicron (DSM) designs can have subtle manufacturing defects
that are only detected by applying DSM tests, such as at-speed and bridging tests, in
addition to stuck-at tests. The extra patterns needed to achieve high test quality for these
designs can increase both the test time and the test data, resulting in higher test costs.
DFTMAX compression reduces these costs by delivering a significant test data and test time
reduction with very low silicon area overhead. The DFTMAX tool uniquely enables adaptive
scan compression in Design Compiler synthesis and adaptive scan pattern generation in
TetraMAX ATPG.
The following sections introduce you to the DFTMAX tool:
• Introduction to the DFTMAX Tool
• The Adaptive Scan Architecture
• Adaptive Scan Requirements
• Multicore Processing
• Limitations
1-1
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
Chapter 1: Introduction
Introduction to the DFTMAX Tool 1-2
DFTMAX™ Compression User Guide Version H-2013.03-SP4
Adaptive scan technology provides the following key benefits and features:
• A significant test time and test data reduction compared to standard scan
• Similar ease-of-use as standard scan
• Concurrent optimization of area, power, timing, physical constraints, and test constraints
through a synthesis-based implementation
• Pin-limited test optimizations
• Unknown logic value (X) handling
• Flexible scan channel configurations to support multisite testing and wafer-level burn-in
'HFRPSUHVVRU
&RPSUHVVHGVFDQFKDLQV &RGHF
VKRUWHUOHQJWK KDVYHU\VPDOO
UHGXFHVWHVWWLPH DUHDRYHUKHDG
&RPSUHVVRU
&RPSUHVVHGVFDQGDWDRXW
Adaptive scan technology divides standard scan chains into a larger number of shorter
chains, called compressed scan chains, which reduces tester time. The decompressor
controls the flow of scan data into the scan chains. The compressor reduces the captured
data from the larger number of compressed scan chains so that it can be observed through
the scan-out ports. The combination of the decompressor and compressor wrapped around
the scan chains is called the codec, which is short for compressor-decompressor.
The adaptive scan technology codec significantly reduces the amount of test data needed
to comprehensively test the chip. In turn, this lowers automatic test equipment (ATE)
memory requirements and allows additional deep submicron (DSM) test patterns.
Chapter 1: Introduction
The Adaptive Scan Architecture 1-3
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
Decompressor Operation
Figure 1-2 shows a decompressor logic structure example. The decompressor outputs are
driven by different combinations of scan-in data pins, either directly or through MUXs. One
or more scan-in data pins, called load-mode pins, are dedicated to the MUX select signals.
Figure 1-2 Decompressor Logic Structure Example for 4-to-8 Decompressor
6FDQLQSLQV
/RDGPRGHSLQV 5HJXODUVFDQLQGDWDSLQV
This logic structure takes advantage of the fact that not every scan cell must be uniquely
controllable in every pattern. Typically, only a sparse set of scan cells are required to be
controlled in a pattern. In each shift clock cycle, ATPG can choose load-mode and scan data
values that steer these required values into the compressed scan chains.
Some designs might have complex logic that requires more scan cells to be controlled in
each pattern. As the decompressor input width increases, the number of load-mode and
scan-in data pins increases to provide additional controllability at the decompressor outputs.
The decompressor output width is equal to the number of compressed scan chains. As the
compressed chain count increases, more data steering logic configurations are needed. If
the compressed chain count is increased too high, the data steering configurations must
repeat, which can reduce the ability of ATPG to steer data into the compressed chains.
Compressor Operation
Figure 1-3 shows a compressor logic structure example. The compressor outputs are driven
by different combinations of compressed scan chains, combined using XOR logic. An
incorrect data value (fault) from a compressed scan chain results in a specific signature of
incorrect values at the compressor outputs.
Chapter 1: Introduction
The Adaptive Scan Architecture 1-4
DFTMAX™ Compression User Guide Version H-2013.03-SP4
The compressor input width is equal to the number of compressed scan chains. As the
compressed chain count increases, more XOR configurations are needed. If the chain count
is increased too high, the XOR configurations (and therefore the compressed chain
signatures) must repeat, which can impact the diagnosability of the design.
As the compressor output width increases, the number of fault signatures observed at each
output port decreases. This can improve the diagnosability of the design, especially when
multiple faults must be simultaneously diagnosed.
Design Requirements
Designs that use adaptive scan are generally scan-replaced, that is, test-ready. The
supported DFTMAX flows include top-down and bottom-up methodologies, but you can also
start from the RTL if you can successfully run the compile -scan command to bring your
design into a test-ready state.
Pin Requirements
Adaptive scan technology reuses the scan ports and scan-enable signals that were used in
regular scan mode in DFT Compiler. Only one additional test-mode port is required to
differentiate between scan compression mode and internal scan mode.
Chapter 1: Introduction
Adaptive Scan Requirements 1-5
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
If you already have a test-mode port in your design, you can define it and specify the hookup
point by using the following command:
set_dft_signal -type TestMode -hookup_pin
If you do not have a test-mode port, the insert_dft command automatically creates one
for you. Note that you cannot use the same test-mode port for the on-chip clocking (OCC),
AutoFix, or scan compression mode. If you want to associate a particular test-mode port
with the OCC or AutoFix test-mode port, you can do so by using the -control_signal
option of the set_autofix_configuration command to control the order of the specified
TestMode pins.
Using DFTMAX compression with the default X-masking capabilities allows a single scan-in
pin and scan-out pin to be used for accessing the compressed scan chains in compressed
scan mode. You can define the minimal number of access pins for compressed scan mode
with the following command:
set_scan_compression_configuration -xtolerance default \
-inputs 1 -outputs 1
When using DFTMAX compression with the high X-tolerance capability, a minimum of two
scan-in pins and one scan-out pin are supported. You can define the minimal number of
access pins in compressed scan mode with high X-tolerance enabled by using the following
command:
set_scan_compression_configuration -xtolerance high \
-inputs 2 -outputs 1
Multicore Processing
DFT Compiler supports multicore processing. To enable this feature, run the following
command:
set_host_options -max_cores maximum_number_of_cores
The maximum_number_of_cores value, which specifies the number of cores for threading,
should be a positive integer that is 2 or greater.
You must specify the number of cores the tool can use before running the insert_dft
command.
The maximum_number_of_cores setting is persistent throughout a given Design Compiler
shell session. Therefore, if you specified this setting during an initial compile stage and did
not quit the session, the same setting remains in effect during the DFT insertion stage.
The setting is not saved into a .ddc file. If you quit the session before DFT insertion and then
start a new shell, DFT insertion will use the tool’s default settings.
Chapter 1: Introduction
Multicore Processing 1-6
DFTMAX™ Compression User Guide Version H-2013.03-SP4
If you request more cores than are available, the insert_dft command proceeds, using the
number of cores that actually are available.
Use the remove_host_options command to revert to the tool defaults.
License Usage
For multicore processing, one DFT Compiler/DFTMAX license supports up to two cores,
that is, one license is required for every two cores.
The tool checks out licenses per the specifications defined in the set_host_options
command.
If you do not have access to a sufficient number of licenses, the insert_dft command
issues a (SEC-50) error similar to the following:
Error: All ‘Test-Compression-Synthesis’ licenses are in use (SEC-50)
The current users of this feature are:
designer at runhost, started on Thursday 5/7 at 15:52
The following examples show commands that are common in a DFT flow, along with the
number of required licenses for the multicore operation of each command:
• compile_ultra -scan -congestion command with power constraints, using 4 cores
❍ 2 DC Expert
❍ 2 DC Ultra
❍ 2 DFT Compiler
❍ 2 Power Compiler
❍ 2 DesignWare
❍ 2 DC-Extension
• insert_dft command with compression and no congestion, using 4 cores
❍ 2 DFT Compiler
❍ 2 DFTMAX
• insert_dft command with compression and congestion, using 4 cores
❍ 2 DFT Compiler
❍ 2 DFTMAX
❍ 2 DC Expert
❍ 2 DC Ultra
Chapter 1: Introduction
Multicore Processing 1-7
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
❍ 2 DC-Extension
• insert_dft command with sequential compression and congestion, using 4 cores
❍ 2 DFT Compiler
❍ 2 DFTMAX
❍ 2 DFTMAX Ultra
❍ 2 DC Expert
❍ 2 DC Ultra
Consistent with the compile_ultra command, licenses are not automatically released until
the end of the Design Compiler shell session or until you explicitly issue the
remove_license command.
If you request more licenses than are available per licensing scheme, the insert_dft
command stops and issues an error message similar to the following:
Error: All 'Test-Compression-Synthesis' licenses are in use. (SEC-50)
The current users of this feature are: designer at runhost, started on
Thursday 5/7 at 15:52
Limitations
This section covers current limitations and known issues associated with adaptive scan
technology.
Current Limitations
The following features are currently not supported:
• You cannot use the existing scan flow to insert compression logic into a design that
already has standard scan chains at the top level.
• You cannot use the set_scan_path command, unless it is used with a multiple
test-mode specification.
Chapter 1: Introduction
Limitations 1-8
DFTMAX™ Compression User Guide Version H-2013.03-SP4
Chapter 1: Introduction
Limitations 1-9
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
Chapter 1: Introduction
Limitations 1-10
2
Using Adaptive Scan Technology 2
If you are currently implementing standard scan logic, you can insert adaptive scan
compression into your design by using a single additional command. Typically, no other
changes to your design are required.
This chapter describes the processes associated with using adaptive scan technology. It
includes the following subsections:
• Top-Down Flat Compressed Scan Flow
• Top-Down Flat Compressed Scan Flow With Partitions
• Scan Compression and Multiple Test Modes
• Scan Compression and OCC Controllers
• Specifying a Different Scan Pin Count for Compressed Scan Mode
• Adding Compressed Chain Lock-Up Latches
• Applying Low-Power Gating to the Output Compressor
• Forcing a Compressor With Full Diagnostic Capabilities
• Excluding Scan Chains From Scan Compression
• Performing Congestion Optimization on Compressed Scan Designs
• Using AutoFix With Scan Compression
• Running TetraMAX ATPG on Compressed Scan Designs
2-1
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
create_test_protocol
dft_drc
preview_dft
insert_dft
To insert compressed scan logic in your design, use the -scan_compression option of the
set_dft_configuration command. This is the only required command to enable
compressed scan insertion.
dc_shell> set_dft_configuration -scan_compression enable
When scan compression is enabled, the insert_dft command inserts compressed scan
logic into the design and defines the following two test modes:
• Compressed scan mode
This mode configures the scan elements as short chains driven by decompressors. The
default name for this test mode is ScanCompression_mode.
These test modes are created automatically during compressed scan insertion. You do not
need to use the -test_mode option in your scripts to create or name them. Figure 2-1 shows
the scan structures for the two test modes created by Example 2-1.
Figure 2-1 Standard Scan and Compressed Scan Modes
6WDQGDUGVFDQPRGH &RPSUHVVHGVFDQPRGH
6FDQLQV 6FDQLQV
WR
WHVWBPRGH WHVWBPRGH
WR
6FDQRXWV 6FDQRXWV
At least one test-mode signal is required to select between standard scan mode and
compressed scan mode. If a TestMode signal has been defined with the set_dft_signal
command, it is used for mode selection. If no test-mode signals have been defined, a
test-mode port is created and used. Test-mode encodings are created that map the
test-mode signal values to each scan mode.
Note:
For more information on working with multiple test modes in DFT Compiler, including
information on specifying test-mode encodings, see the “Multiple Test Modes” section in
the DFT Compiler Scan User Guide.
A compressed scan mode is always associated with a corresponding standard scan mode.
The standard scan mode associated with a compressed scan mode is known as its base
mode. The base mode controls aspects of scan configuration that are common to both
modes, such as scan port definitions, scan signal hookup pin definitions, and top-level test
access structures.
The set_scan_configuration command configures aspects of the standard scan mode,
while the set_scan_compression_configuration command configures aspects of the
compressed scan mode. In Example 2-1 on page 2-2, three standard scan chains and eight
compressed scan chains are created.
You can use any of these options to directly or indirectly specify the scan compression ratio
for your design. If none of these options are specified, a minimum compression value of 10
is used. The maximum compressed chain count is 32000.
If you use the high X-tolerance codec architecture, the X-masking architecture places an
additional upper limit, as a function of the scan-in and scan-out pin count, on the maximum
number of compressed scan chains to ensure 100 percent X-tolerance. For more
information, see “High X-Tolerance Scan Compression” on page 4-2.
After the standard scan and compressed scan modes have been configured, you can use
the preview_dft command to see the scan architecture and test-mode signal details before
scan insertion is performed, as shown in Example 2-2.
Example 2-2 Output From the preview_dft Command for a Compressed Scan Configuration
****************************************
Current mode: Internal_scan
****************************************
Number of chains: 3
Scan methodology: full_scan
Scan style: multiplexed_flip_flop
Clock domain: mix_clocks
****************************************
Current mode: ScanCompression_mode
****************************************
Number of chains: 8
Scan methodology: full_scan
Scan style: multiplexed_flip_flop
Clock domain: no_mix
(...omitted...)
================================
Test Mode Controller Information
================================
During scan insertion, the insert_dft command creates and instantiates two scan
compression designs: one for the compressor and one for the decompressor. By default, the
insert_dft command instantiates these blocks at the top level of the current design.
However, for a top-down flat run, you might want to insert the codec logic into a core-level
hierarchical block. For information on inserting the codec logic within a hierarchical instance,
see “Specifying a Location for DFT Logic Insertion” on page 5-2.
After compressed scan is inserted, you can use the report_scan_path command to see
details of the scan chains in the standard scan and compressed scan modes:
dc_shell> report_scan_path -test_mode all
Write out test protocols for both test modes using the write_test_protocol -test_mode
command:
dc_shell> write_test_protocol -output scan.spf \
-test_mode Internal_scan
dc_shell> write_test_protocol -output scancompress.spf \
-test_mode ScanCompression_mode
After you have the netlist and protocol files, you can generate patterns in the TetraMAX tool.
Compressed scan insertion has the following requirements:
• Compressed scan requires a preclock strobe. You should ensure that the
test_default_strobe variable is set so that the strobe occurs before the active edges
of the test clock waveforms. The default DFT Compiler test timing values meet this
requirement.
• Compressed scan insertion requires an HDL-Compiler license.
If the entire design does not fit into memory, a bottom-up hierarchical flow must be used.
The DFTMAX tool provides bottom-up hierarchical flows to reduce both routing congestion
and the number of isolation cells added to designs with multiple power domains. These flows
require you to perform bottom-up DFT insertion, which in turn requires block-level DFT
constraints, DRC checks, and well-defined hierarchical boundaries. For more information on
these bottom-up hierarchical flows, see Chapter 3, “Hierarchical Adaptive Scan Synthesis.
However, some designs cannot use a bottom-up hierarchical flow. Constraints might not be
available at block-level boundaries, or the available design hierarchy boundaries might not
provide the desired mapping of codec blocks to design logic. For these designs, you can use
the top-down flat partition flow.
A partition is a portion of the design, defined from the top level, that is assigned to its own
codec. A partition definition can be defined as a set of clock domains, design references,
hierarchical cells, or sequential leaf cells. Although partitions are usually defined along
physical or logical hierarchical boundaries, it is not a requirement. You can specify separate
codec configurations for each partition, and all codecs are inserted at the same time during
top-level DFT insertion. This top-down flat partition flow provides the same multiple codec
flexibility as the bottom-up flows, but without the need for multiple runs.
• report_dft_partition
• remove_dft_partition
You can use the define_dft_partition command to define a partition. The most
commonly used options are:
define_dft_partition
partition_name
[-include list_of_cells_or_references]
[-clocks list_of_clocks]
You must provide a unique name for each partition definition. This name is used to reference
the partition when providing codec information, as well as to identify the partition in
subsequent DFT reports.
A partition can be defined as a set of cells or design references with the -include option.
Leaf cells can be specified, although only sequential cells are relevant to the partition
definition. Design references are converted to the set of all hierarchical instances of those
designs. A particular cell or design reference can exist in only one partition definition. In
Example 2-3, two partitions are defined using hierarchical cells, and a third partition is
defined using a design reference.
Example 2-3 Defining Three Partitions Using Cells and References
define_dft_partition P1 -include [get_cells {U_SMALL_BLK1 U_SMALL_BLK2}]
define_dft_partition P2 -include [get_cells {U_BIG_BLK}]
define_dft_partition P3 -include [get_references {my_ip_design}]
A partition can also be defined to include one or more clock domains with the -clocks
option. The partition includes all flip-flops clocked by the specified clocks. In Example 2-4,
two partitions are created by clock domain.
The tool creates a default partition named default_partition that includes the flip-flops not
included in any user-defined partitions. You cannot use the name default_partition when
defining a partition.
You can use the report_dft_partition command to see what partitions have been
defined. Example 2-5 shows the output from the report_dft_partition command for the
three partitions previously defined in Example 2-3. Note that the design reference has been
converted to the corresponding set of hierarchical instances of that design.
Example 2-5 Example of Output From the report_dft_partition Command
Cells or Designs defined in Partition 'P1':
U_SMALL_BLK1
U_SMALL_BLK2
Cells or Designs defined in Partition 'P2':
U_BIG_BLK
Cells or Designs defined in Partition 'P3':
U_MY_IP_BLK
You can use the remove_dft_partition command to remove one or more user-defined
partition definitions. The default partition cannot be removed.
remove_partition {P1 P2 P3}
current_dft_partition P1
set_dft_signal -view spec -type ScanEnable -port SE
set_dft_signal -view spec -type ScanDataIn -port {SI1 SI2}
set_dft_signal -view spec -type ScanDataOut -port {SO1 SO2}
set_scan_configuration -chain_count 2
set_scan_compression_configuration -chain_count 4 -location BLK1
current_dft_partition P2
set_dft_signal -view spec -type ScanEnable -port SE
set_dft_signal -view spec -type ScanDataIn -port {SI3 SI4 SI5}
set_dft_signal -view spec -type ScanDataOut -port {SO3 SO4 SO5}
set_scan_configuration -chain_count 3
set_scan_compression_configuration -chain_count 6 -location BLK2
You can specify the standard and compressed scan mode characteristics for each partition.
Not all test configuration commands are supported in a partition flow. See “Supported DFT
Features in the Partition Flow” on page 2-14 for details.
If you are defining scan-in or scan-out signals using the set_dft_signal command, you
must define them as a part of each partition’s scan configuration. Scan-enable signals can
also be defined on a per-partition basis. However, if a scan-enable signal is defined for only
one partition, it is automatically applied to the remaining partitions. Other signal types, such
as reset, clock, and test-mode signals, should be defined globally before any partitions are
defined, or as part of the default partition configuration.
In a partition flow, codecs are still inserted at the top level of the current design by default.
You can use the set_scan_compression_configuration -location command to specify
the hierarchical block where the codec is to be inserted. For more information, see
“Specifying a Location for DFT Logic Insertion” on page 5-2.
At the top level, the total standard scan chain count is the sum of the standard scan chain
counts across all partitions. Each standard scan chain requires a dedicated scan-in and
scan-out pin, just as a top-level scan chain does in an unpartitioned flow. Scan chains in
partitions are not combined or rebalanced at the top level.
Figure 2-2 shows the standard scan mode chain connections for Example 2-6. A total of five
scan-in and scan-out pins are used, two for partition P1 and three for partition P2.
Figure 2-2 Partition Scan Chains in Standard Scan Mode
3VFDQLQV 3VFDQLQV
3 3
3VFDQRXWV 3VFDQRXWV
After configuring the partitions, you can use the preview_dft command to display the scan
chain distribution across partitions. Example 2-7 shows a report example.
Example 2-7 Output From the preview_dft Command for Multiple DFT Partitions
****************************************
Current mode: Internal_scan
****************************************
Number of chains: 5
Scan methodology: full_scan
Scan style: multiplexed_flip_flop
Clock domain: no_mix
Scan chain '1' (SI1 --> SO1) contains 32 cells (Partition 'P1')
Active in modes: Internal_scan
Scan chain '2' (SI2 --> SO2) contains 32 cells (Partition 'P1')
Active in modes: Internal_scan
Scan chain '3' (SI3 --> SO3) contains 22 cells (Partition 'P2')
Active in modes: Internal_scan
Scan chain '4' (SI4 --> SO4) contains 21 cells (Partition 'P2')
Active in modes: Internal_scan
Scan chain '5' (SI5 --> SO5) contains 21 cells (Partition 'P2')
Active in modes: Internal_scan
WR WR
3 3
WR WR
3VFDQRXWV 3VFDQRXWV
For improved testability, the tool can also use a single shared codec architecture for all
partitions. This shared codec architecture is enabled by setting the following variable:
set_app_var test_enable_codec_sharing true
This shared codec architecture uses the full set of scan-in and scan-out pins across all
partitions. This codec architecture is then replicated for each partition, where only a
dedicated subset of decompressor outputs and compressor inputs is connected to the
compressed scan chains in each partition. The compressor outputs are combined using an
XOR observability tree.
Figure 2-4 shows the shared codec architecture for Example 2-6 on page 2-8. The five
scan-in and scan-out pins from the standard scan mode are used to drive the decompressor
inputs and capture the compressor outputs. Each decompressor has ten output pins,
resulting from the sum of the compressed scan chain counts across all partitions. The same
codec architecture is used in each partition, but a different range of compressor outputs and
decompressor inputs is connected for each partition. In partition P1, the first four
decompressor outputs and compressor inputs are used. In partition P2, the next six
decompressor outputs and compressor inputs are used.
Figure 2-4 Partition Scan Chains With Shared Codec Architectures
3DQG3VFDQLQV
WR WR
3 3
WR WR
3DQG3VFDQRXWV
Note:
To optimize the logic around the unconnected decompressor outputs and compressor
inputs, perform an incremental compile after DFT insertion using either the
compile_ultra -scan -incremental command or the compile -scan
-incremental -boundary_optimization command.
The shared codec architecture has testability efficiency similar to inserting a single codec in
an unpartitioned flow. Because all available scan-in and scan-out pins connect to each
codec, this method provides better controllability, observability, and X-tolerance to the
partitions. However, this insertion method does have some limitations:
• All scan-in and scan-out pins must be shared across all codecs.
• Multiple compressed scan modes are not supported.
• Codecs that compress OCC clock chains are not supported.
• High X-tolerance is not supported.
set_scan_configuration
The following set_scan_configuration options can be specified on a per-partition basis:
• -chain_count
• -max_length
• -exact_length
• -clock_mixing
• -insert_terminal_lockup
• -test_mode
• -exclude_elements
• -voltage_mixing
• -power_domain_mixing
set_scan_compression_configuration
The following set_scan_compression_configuration options can be specified on a
per-partition basis:
• -minimum_compression
• -chain_count
• -max_length
• -location
• -inputs
• -outputs
• -shared_inputs
• -shared_outputs
• -identical_cores
• -scramble_identical_outputs
set_dft_signal
The following set_dft_signal options can be specified on a per-partition basis:
• -view
• -port
• -hookup_pin
• -hookup_sense
• -active_state
set_dft_location
The following set_dft_location test logic types can be specified on a per-partition basis
with the -include and -exclude options:
• DFTMAX
• SERIAL_REG
• PIPELINE_SI_LOGIC
• LOCKUP_LATCH
• REC_MUX
For other test logic types, you can only specify the location for the default partition.
set_scan_path
The following set_scan_path options can be specified on a per-partition basis:
• -include_elements
• -head_elements
• -tail_elements
• -ordered_elements
• -complete
• -exact_length
• -scan_enable
• -scan_data_in
• -scan_data_out
❍ set_scan_compression_configuration
❍ set_scan_path
❍ set_dft_signal
Other commands and options are ignored except when defined for the default partition.
Just as you can create multiple standard scan modes with the DFT Compiler tool, you can
also create multiple compressed scan modes with the DFTMAX tool. This capability uses
the same multiple test-mode creation, configuration, and reporting commands as used with
multiple standard scan modes. For more information, see “Multiple Test Modes” in the DFT
Compiler Scan User Guide.
Usage of multiple compressed scan modes is described in the following subsections:
• Defining Multiple Compressed Scan Modes
• Supported Compressed Scan Specification Commands
• Multiple Test-Mode Script Examples
You can optionally define the test-mode signals and test signal encodings that activate each
of these modes. For more information, see “Defining the Encoding of a Test Mode” in the
DFT Compiler Scan User Guide.
When you use the default compressed scan mode for scan insertion, the accompanying
standard scan mode is always considered to be the base mode. There is no need to
explicitly specify this base mode relationship when a single compressed scan mode is
inserted. When you define multiple compressed scan modes, each compressed scan mode
must have an associated standard scan base mode.
After defining the compressed scan and standard scan test modes, you must also specify
the accompanying base mode relationships for each compressed scan mode. You define
these relationships with the -base_mode option of the
set_scan_compression_configuration command. In Example 2-10, two compressed
scan modes are paired with their standard scan base modes.
Example 2-10 Providing Base Mode Relationships for Compressed Scan Modes
set_scan_configuration -test_mode STDSCAN1 -chain_count 2
set_scan_configuration -test_mode STDSCAN2 -chain_count 3
set_scan_compression_configuration -test_mode COMPSCAN1 \
-base_mode STDSCAN1 -chain_count 4
set_scan_compression_configuration -test_mode COMPSCAN2 \
-base_mode STDSCAN2 -chain_count 5
Although each compressed scan mode must have a corresponding base mode, there is no
complementary requirement. You can create as many additional standard scan modes as
needed.
Multiple compressed scan modes can share a common base mode. Define the common
base mode with the set_scan_configuration command, then reference this base mode
using the -base_mode option of each set_scan_compression_configuration command:
Example 2-11 Sharing a Base Mode Relationships Across Multiple Compressed Scan Modes
set_scan_configuration -test_mode STDSCAN -chain_count 2
set_scan_compression_configuration -test_mode COMPSCAN1 \
-base_mode STDSCAN -chain_count 4
set_scan_compression_configuration -test_mode COMPSCAN2 \
-base_mode STDSCAN -chain_count 5
For multiple compressed scan modes, the same relationship exists between each
compressed scan mode and its corresponding base mode as with a single compressed
scan mode and standard scan mode. By default, each compressed scan mode uses all
available scan-in and scan-out pins from its base mode. In Example 2-10, compressed
mode COMPSCAN1 creates a decompressor with two inputs, and compressed mode
COMPSCAN2 creates a decompressor with three inputs.
If you want to use a different number of scan-in or scan-out pins in a compressed scan mode
from what is used in its base mode, you can use the -inputs and -outputs options of the
set_scan_compression_configuration command. For more information, see “Specifying
a Different Scan Pin Count for Compressed Scan Mode” on page 2-28.
The insert_dft command inserts a separate codec for each compressed scan mode. This
is true even if the codec architectures between two compressed scan modes are identical.
Scan chain reconfiguration MUXs are added to provide the necessary scan chain paths for
all standard scan and compressed scan modes. Additional MUX logic is added to enable
one codec at a time based on the test-mode signal decoding logic. Figure 2-5 shows how
the scan compression codecs in Example 2-10 are connected.
6FDQRXWV 6FDQRXWV
set_scan_compression_configuration
The following set_scan_compression_configuration options can be applied to specific
test modes:
• -base_mode
• -max_length
• -chain_count
• -minimum_compression
• -inputs
• -outputs
• -shared_inputs
• -shared_outputs
• -identical_cores
• -scramble_identical_outputs
• -synchronize_chains
Note:
Although the set_scan_compression_configuration command applies to the current
test mode by default, the -test_mode option is typically used together with the
-base_mode option so that the relationship between the test mode and base mode is
explicitly highlighted.
set_scan_path
Use the set_scan_path -test_mode test_mode_name command to provide scan chain
specifications for each test mode in your design. The scan path specification can be given
for any chains in any defined test mode and can include scan data in and scan data out pin
specifications, with both port and hookup arguments. If the scan path specification applies
to a test mode which has the usage specified as scan_compression, then the scan path
statements can use the -hookup option to specify compressed chains, but they cannot use
a port argument.
# Enable DFTMAX
set_dft_configuration -scan_compression enable
# Configure DFTMAX
set_scan_compression_configuration -base_mode my_base1 -chain_count 32 \
-test_mode scan_compression1 -xtolerance high
# Enable DFTMAX
set_dft_configuration -scan_compression enable
# Configure DFTMAX
set_scan_compression_configuration -base_mode my_base1 -chain_count 32 \
-test_mode scan_compression1 -xtolerance high
set_scan_compression_configuration -base_mode my_base2 -chain_count 256 \
-test_mode scan_compression2 -xtolerance high
current_test_mode scan_compression1
report_dft_signal
dft_drc -verbose
current_test_mode scan_compression2
report_dft_signal
dft_drc -verbose
current_test_mode my_base1
report_dft_signal
dft_drc -verbose
current_test_mode my_base2
report_dft_signal
dft_drc -verbose
current_test_mode burn_in
report_dft_signal
dft_drc -verbose
current_design block
set_dft_signal -view existing_dft -type ScanClock \
-timing [list 45 55] -port clk
current_dft_partition part1
set_scan_configuration -exact_length 40 -test_mode test_mode1
set_scan_configuration -exact_length 80 -test_mode test_mode2
current_dft_partition part2
set_scan_configuration -exact_length 40 -test_mode test_mode1
set_scan_configuration -exact_length 80 -test_mode test_mode2
current_dft_partition default_partition
set_scan_configuration -exact_length 40 -test_mode test_mode1
set_scan_configuration -exact_length 80 -test_mode test_mode2
create_test_protocol
report_dft_partition
preview_dft -show all
insert_dft
dft_drc
current_design block
set_dft_configuration -scan_compression enable
current_dft_partition part1
set_scan_configuration -chain_count 4 -test_mode test_mode1
set_scan_configuration -chain_count 8 -test_mode test_mode2
set_scan_compression_configuration -location inst1 \
-test_mode my_scan_comp -base_mode test_mode1
current_dft_partition part2
set_scan_configuration -chain_count 8 -test_mode test_mode1
set_scan_configuration -chain_count 10 -test_mode test_mode2
set_scan_compression_configuration -location inst3 \
-test_mode my_scan_comp -base_mode test_mode1
current_dft_partition default_partition
set_scan_configuration -chain_count 2 -test_mode test_mode1
set_scan_configuration -chain_count 4 -test_mode test_mode2
set_scan_compression_configuration -location inst5 \
-test_mode my_scan_comp -base_mode test_mode1
create_test_protocol
report_dft_partition
preview_dft -show all
insert_dft
dft_drc
write_scan_def -output ./design.scandef
write -f ddc -hierarchy -output ./scan_inserted_design.ddc
write_test_protocol -output scan.spf -test_mode test_mode1
write_test_protocol -output ascan.spf -test_mode my_scan_comp
2&&
FRQWUROOHU
&RPSUHVVHG
FORFNFKDLQ
The decompressor scan input path passes through the decompressor to the clock chain
input. This allows the clock chain values to be controlled without imposing constraints on
other scan cells. Such a clock chain is called a compressed clock chain because it exists
between the decompressor and compressor, even though it is driven by a dedicated scan-in
signal as if it was uncompressed.
Note:
For codecs with few scan inputs and high compression ratios, DFTMAX compression
might be forced to share the decompressor scan input with other compressed chains.
This happens if the codec would otherwise not be implementable.
The dedicated scan-in signal reduces the number of scan-in signals available for data
decompression into the remaining compressed chains. You should consider this when
determining compression architecture parameters such as scan input count and
compressed chain count.
The clock chain, which is clocked on the trailing edge, is always placed at the beginning of
its compressed scan chain. Additional scan cells can follow the clock chain for
length-balancing purposes, as allowed by the clock-mixing settings applied to the current
design. The compressed scan chain then proceeds into the compressor in the normal way.
If you are using the high X-tolerance feature, the compressed clock chain reduces the
maximum compressed scan chain limit that can be created for a given number of scan-in
signals. For more information, see “Scan-In and Scan-Out Requirements” on page 4-4.
You can use the preview_dft -show {cells scan_clocks} command to see which
compressed scan chain contains the clock chain. The clock chain is marked with a clock
chain segment attribute (o) and a scan segment attribute (s):
****************************************
Current mode: ScanCompression_mode
****************************************
Number of chains: 16
Scan methodology: full_scan
Scan style: multiplexed_flip_flop
Clock domain: no_mix
For more information on OCC controllers, see the “On-Chip Clocking Support” chapter of the
DFT Compiler Scan User Guide.
WR
WHVWBPRGH WHVWBPRGH
WR
6FDQRXWV 6FDQRXWV
You can use any number or scan-in and scan-out pin connections for a compressed scan
mode relative to the chain count of its base mode. The only requirement is that the scan-in
pin and scan-out pin counts are less than the compressed scan chain count.
You can also use the -inputs and -outputs options to specify asymmetrical scan I/O
configurations for scan compression, where the number of scan-in pins differs from the
number of scan-out pins, as shown in Example 2-17.
Example 2-17 Specifying an Asymmetrical Scan Pin Configuration
set_scan_configuration -chain_count 6 -clock_mixing mix_clocks
set_scan_compression_configuration -chain_count 8 -inputs 3 -outputs 5
The minimum number of scan-in and scan-out pins for a compressed scan mode is
• One scan-in and one scan-out pin when default X-tolerance is used
set_scan_compression_configuration \
-xtolerance default -inputs 1 -outputs 1
• Two scan-in pins and one scan-out pin when high X-tolerance is used
set_scan_compression_configuration \
-xtolerance high -inputs 2 -outputs 1
possible for leading-edge and trailing-edge scan cells to share the same scan input or output
port, as shown in Figure 2-8. In these cases, the resulting mix of launch and capture clock
edges reduces the usable clock period.
Figure 2-8 Compressed Scan Chains With Multiple Edge Polarities
/( /HDGLQJHGJHWULJJHUHGIOLSIORS
/( 7( /(
7( 7UDLOLQJHGJHWULJJHUHGIOLSIORS
This mixed-edge penalty against shift frequency in compressed scan mode can be avoided
by using lock-up latches at the start or end of the leading-edge or trailing-edge compressed
chains, respectively. By selectively inserting lock-up latches at the end or start of the
compressed chains, the output and input flip-flops are synchronized to the same clock edge.
The inputs of the scan chains are always synchronized to the trailing edge, and the outputs
of the scan chains to the leading edge.
To synchronize the scan chains, use the following command:
set_scan_compression_configuration
-synchronize_chains head | tail | all | none
You can specify the following values for the -synchronize_chains option:
• head synchronizes the first shift state of all compressed scan chains to the trailing clock
edge.
• tail synchronizes the last shift state of all compressed scan chains to the leading clock
edge.
• all synchronizes the first and last shift states of all compressed scan chains.
• none does not add lock-up latches to the ends of compressed scan chains for
synchronization. This is the default.
Figure 2-9 shows how the previous scan compression logic is created when the
-synchronize_chains all option is used.
Figure 2-9 Compressed Scan Chains With Multiple Edge Polarities and Synchronization
/( /HDGLQJHGJHWULJJHUHGIOLSIORS
7( 7(
7( 7UDLOLQJHGJHWULJJHUHGIOLSIORS
/( 7( /(
/( /( /HDGLQJHGJHORFNXSODWFK
7( 7UDLOLQJHGJHORFNXSODWFK
• The synchronization specification is ignored if you use any of the following features:
❍ set_scan_configuration -add_test_retiming_flops
When you enable output compressor gating, the tool inserts gating at the inputs to the XOR
compression tree as shown in Figure 2-10. Every compressor input is AND-gated with an
active-low pwr_save_n signal before going to the XOR tree.
Figure 2-10 Example of a Default X-Tolerant Compressor With Gated Inputs
SZUBVDYHBQ
The pwr_save_n gating signal is generated by combining the scan-enable signal and the
decoded test-mode vector signal as shown in Figure 2-11. By generating this gating signal
from the existing test-mode and scan-enable signals, no additional dedicated control signal
is required at the block boundary. In a CTL test model flow, this also means that no update
to a block’s test model is needed when output compressor gating is added to a block.
Figure 2-11 Example of Top-Level Compressor Power Gating Control
7HVW
7HVWPRGH PRGH
SLQV GHFRGH
2QHRU ORJLF
PRUH
VLJQDOV
VFDQBHQ
SZUBVDYHBQ
cells are pushed further into the tree, toggling can occur at the upstream XOR cells, and the
power reduction effectiveness is reduced. To preserve the full power reduction benefits, logic
synthesis optimization must not move the gating cells into the compression tree.
In the .ddc flow, this is automatically handled. the tool applies the size_only attribute to the
gating cells as soon as they are created, so that optimization cannot remap the gating cell
functionality into a different gate-level structure. Because this attribute persists in a .ddc flow,
the gating cell placement and the power reduction benefits are preserved.
However, in the Verilog flow, this attribute does not persist. To get the same power-saving
benefits, run the write_script command before you write out the Verilog netlist. Extract
the commands that apply the size_only attribute to the compressor gating cells. When the
netlist is read back in, use these commands to reapply the size_only attribute to the power
gating logic.
Note that this option does not change how the compressor logic is built; it simply causes
DFT insertion to stop instead of complete if the compressor would have R10 DRC violations.
Table 2-1 shows the maximum number of compressed scan chains that can be built for a
given set of scan-out pins without an R10 DRC violation. Note that these limits are lower
than the maximum upper limits shown in Table 4-1 on page 4-4.
Table 2-1 Compressed Scan Chain Limits for Avoiding R10 DRC Violations
2 3
3 7
4 15
5 31
Table 2-1 Compressed Scan Chain Limits for Avoiding R10 DRC Violations (Continued)
6 63
7 127
8 255
9 510
10 1012
11 1980
12 3796
13 7098
14 12910
15 22818
16 32000
If you exceed these limits when the -force_diagnosis option is set to true, DFT insertion
stops with a TEST-1603 message:
Warning: The compressor generated might have lower diagnostics precision.
(TEST-1603)
Information: Scan routing is not complete. Signals 'serial or
scan_enables' need to be routed. (TEST-899)
Information: DFT insertion was not successful. There were unrecoverable
processing errors. (TEST-211)
0
R10 violations can be issued by post-DFT DRC analysis or by TetraMAX DRC analysis. For
more information on R10 violations, see SolvNet article 036993, “What Do R10 and R11
DRC Violations Mean?”.
([WHUQDO
FKDLQV
The external chains consume connections in the scan I/O connection budget. In
compressed scan mode, the tool automatically uses the remaining scan connections for the
codec; you do not need to specify the -inputs and -outputs options of the
set_scan_compression_configuration command. The commands in Example 2-18
configure the scan structure shown in Figure 2-12.
Example 2-18 Configuring External Chains in a Compressed Scan Design
# define two external chains
set_scan_path EC1 ... ;# external chain 1
set_scan_path EC2 ... ;# external chain 2
• The -test_mode all option applies the external chain definition to both the standard
scan and compressed scan modes. To limit the definition to a specific compressed scan
mode, specify it with the -test_mode option. The specified test mode must be previously
defined with the define_test_mode command.
• The scan input and output ports must be previously defined with the set_dft_signal
command. You cannot define external scan chains that use automatically created scan
data ports.
• If you are using the pipelined scan data feature, external chains are treated the same as
other scan chains. This means,
❍ In the automatically inserted pipelined scan data flow, the tool inserts pipeline
registers around the external scan chains the same way it does with other scan
chains.
❍ In the user-defined pipelined scan data flow, you must create and define pipeline
registers with head and tail depths that match other scan chains.
preview_dft
insert_dft
compile_ultra -incremental -scan -congestion
Note:
The scan compression congestion optimization feature does not work in multiple
test-mode flows.
# Enable DFTMAX and AutoFix for clocks, resets, sets, and buses
set_dft_configuration -scan_compression enable \
-fix_clock enable \
-fix_reset enable \
-fix_set enable \
-fix_bus enable \
-fix_bidirectional enable \
-control_points enable \
-observe_points enable
# Configure DFTMAX
set_scan_compression_configuration -minimum_compression 10 \
-xtolerance high -max_length 20
set_scan_configuration -chain_count 8
# Define the cells to fix and ports to use for clock AutoFix
set_dft_signal -view existing_dft -type ScanMasterClock -timing {45 55} \
-port clock_autofix_clock_sc
set_dft_signal -view spec -type TestData -port clock_autofix_clock_sc
set_autofix_element [get_object_name [get_cells dd_c/*]] -type clock \
-control_signal TEST_MODE \
-test_data clock_autofix_clock_sc
# Define the cells to fix and ports to use for reset AutoFix
set_dft_signal -view existing_dft -type Reset -active_state 0 \
-port reset_autofix_reset
set_autofix_element [get_object_name [get_cells -hierarchical *]] \
-type reset -control_signal TEST_MODE \
-test_data reset_autofix_reset
# Enable DFTMAX and AutoFix for clocks, resets, sets, and buses
set_dft_configuration -scan_compression enable \
-fix_clock enable \
-fix_reset enable \
-fix_set enable \
-fix_bus enable \
-fix_bidirectional enable \
-control_points enable \
-observe_points enable
set_scan_compression_configuration -minimum_compression 10 \
-xtolerance high -base_mode my_base1 \
-test_mode scan_compression1
set_scan_configuration -chain_count 8 -test_mode my_base1
set_scan_configuration -chain_count 1 -clock_mixing mix_clocks \
-test_mode burn_in
# Define the cells to fix and ports to use for clock AutoFix
set_dft_signal -view existing_dft -type ScanMasterClock -timing {45 55} \
-port clock_autofix_clock_s -test_mode all
set_dft_signal -view spec -type TestData -port clock_autofix_clock_s \
-test_mode all
set_dft_signal -view spec -type TestMode -port TEST_MODE \
-test_mode all
set_autofix_element [get_object_name [get_cells -hierarchical *]] \
-type clock -control_signal TEST_MODE \
-test_data clock_autofix_clock_s
# Define the cells to fix and ports to use for reset AutoFix
set_dft_signal -view existing_dft -type Reset -active_state 0 \
-port reset_autofix_reset -test_mode all
set_autofix_element [get_object_name [get_cells -hierarchical *]] \
-type reset -control_signal TEST_MODE \
-test_data reset_autofix_reset
insert_dft
current_test_mode my_base1
report_dft_signal
dft_drc -verbose
current_test_mode burn_in
report_dft_signal
dft_drc -verbose
Chain Test
For a chain test, a value of 0011 is repeatedly applied to all scan input ports, shifted through
the decompressor into the scan chains, and finally observed at the scan outputs through the
compressor. Due to compression effects, the values you see on scan outputs will not be the
same as the values shifted in. TetraMAX ATPG takes these compression effects into account
when determining the expected values for a compressed scan chain test.
You can select any other chain test string to be applied by using the set atpg -chain_test
option.
-NUM_Chains <d>
Specify the number of internal chains you want for this analysis.
-NUM_Inputs <d>
Specify the number of scan inputs you want to use for compression
implementation.
-NUM_SCANOuts <d>
Specify the number of scan outputs you want to use for this compression
implementation.
-NODiag
Specify this option to disable the requirement to generate a compressor
with high precision diagnosis. By default, the analyze compressors
command generates a compressor with failure diagnostics, which requires a
large number of scan outputs for a given number of chains.
-XTOLerance <Default|High>
This option specifies whether to perform the analysis with default
x-masking or enhanced x-masking.
For analysis purposes, you can specify the number of scan inputs, scan outputs, chain
count, and whether you want to use a compressor with the diagnostic capability. In verbose
mode, detailed information on the compressor and decompressor being used for analysis is
reported.
You can run this analysis only after you run standard scan DRC. You cannot run it after
compressed scan DRC. Note that for analysis purposes, you can specify any number of
scan inputs, scan outputs and chains if they satisfy the scan architecture requirements for
compressed scan insertion.
Therefore, on every output, there are two bits of information per cycle. In the following two
equations, this accounts for the factor of 3 in the scan-test-data-volume equation and the
factor of 2 in the scan-compression-test-data-volume equation. The compression calculation
is written differently because it is no longer the number of chains but rather the number of
inputs and outputs to the compression logic.
The test data volume reduction equation can be expanded by using the following formulas:
Scan Test Data Volume =
3*(length of the longest Scan mode scan chain)*
(number of scan chains in Scan mode)*
(number of Scan mode patterns)
Scan Compression Test Data Volume =
(length of longest ScanCompression_mode scan chain)*
(number of scan_in + 2*(number of scan_out))*
(number of patterns)
The test data volume might not match the memory used by the tester because each ATE
uses the test data volume in a different way. However, the tester can optimize the memory
content. It can allocate memory differently, depending on the brand or version of the tester
and the channels and cycles used. In such cases, the factors 2 and 3 in the
scan-test-data-volume and scan-compression-test-data volume formulas, respectively,
might not match the data in the tester memory.
The following ratio indicates the test data volume reduction that can be achieved:
Test Data Volume Reduction =
(Scan Test Data Volume)/
(Scan Compression Test Data Volume)
The test data volume reduction value calculated with this formula is just an estimate of the
improvements you can get by using compression.
Expanding this equation, using the previous test application time equations for scan and
scan compression, gives
Test Application Time Reduction =
((longest chain in Scan mode)*
(number of patterns in Scan mode))/
((longest scan chain in ScanCompression_mode)*
(number of patterns in ScanCompression_mode))
Pattern Validation
Both serial and parallel versions of a regular Verilog testbench and a Verilog direct pattern
validation (DPV) testbench are supported. Note that serial patterns pass through the
compressor and decompressor, whereas the parallel patterns directly control and observe
the scan cells.
Pattern Formats
Scan compression mode patterns can be written out in the following formats:
• Binary
• Standard Test Interface Language (STIL) (serial and parallel)
Generating Patterns
This section provides script examples for generating patterns in scan compression mode
and standard scan mode. The two script examples are the same except for the input and
output file names. The run drc command generates compressed or standard scan patterns
based on the contents of the STIL procedure file used as input.
run_build_model top
run_build_model top
2. Create test patterns, and write them out in binary format for diagnostics.
# create patterns
run_atpg -auto_compression
3. Write out the patterns in the netlist-independent pattern format for translation.
# write netlist-independent patterns that can be translated
set_patterns -netlist_independent
write_patterns compressed_pat_net_ind.bin
4. In a new TetraMAX run, read in the design and apply the standard scan SPF.
# read in design
run_build_model ...
# read SPF for standard scan mode
run_drc standard_scan.spf
7. Write out the translated standard scan patterns in binary format for diagnostics.
# write out translated patterns in binary format for diagnostics
write_patterns scan_pat.bin -external -format binary
8. Write out the patterns in the required output format for the tester.
# write out translated patterns in binary format for diagnostics
write_patterns scan_pat.pats -external -format tester_format
The following limitations apply when translating compressed scan patterns to standard scan
patterns:
• You cannot translate standard scan patterns back into compressed scan patterns.
• Pattern translation supports only Basic-Scan and Fast-Sequential patterns. This
limitation is similar to diagnosis.
• Scan logic configuration differences between the compressed scan mode and the
standard scan mode might result in slightly different coverage numbers.
3-1
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
The following logic types are supported in the compressed scan HSS flow:
• Standard scan cores
These cores can be represented by the full netlist or a CTL test model. The DFTMAX tool
incorporates the core-level scan chains into scan compression as scan chain segments.
These scan chain segments can be concatenated and rebalanced inside the codec as
needed, but they cannot be subdivided into smaller scan chains.
• Test-ready cores that are scan-replaced, but do not yet have scan chains
The tool incorporates the test-ready logic into scan compression, creating compressed
scan chains as needed to meet the scan chain requirements.
• Cores that have not yet been scan-replaced
The tool performs scan replacement before applying scan compression.
• Top-level glue logic that might or might not be test-ready
The tool performs scan replacement if needed, then it applies scan compression.
The compressed scan HSS flow is automatically applied whenever one or more standard
scan cores are present and scan compression is enabled with the set_dft_configuration
command:
dc_shell> set_dft_configuration -scan_compression enable
You do not need to specify any additional integration options with the
set_scan_compression_configuration command to enable the compressed scan HSS
flow.
&B&25( &B&25(
In the HASS flow, no scan compression logic is added at the top level. The DFTMAX tool
promotes the scan connections of the compressed scan cores to top-level scan
connections.
A compressed scan core contains scan chain logic that can operate in both standard scan
and compressed scan modes. A standard scan core contains scan chains that only operate
in standard scan mode. When a mix of compressed scan and standard scan cores are
integrated at the top level in the HASS flow, the test modes operate as follows:
• In standard scan mode, all cores operate in their standard scan modes.
• In compressed scan mode, compressed scan cores operate in their compressed scan
mode, while the standard scan cores continue to operate in standard scan mode.
create_test_protocol
dft_drc
preview_dft
insert_dft
current_test_mode Internal_scan
dft_drc
current_test_mode ScanCompression_mode
dft_drc
Note:
The HASS flow does not support cores with multiple user-defined test modes.
Each core must have CTL test model information so that HASS can perform top-level
integration. If the block is smaller and will fit in memory during top-level integration, you can
use the write command to write a design .ddc file that contains the full design netlist as well
as the CTL test model information:
dc_shell> write -format ddc -hierarchy -output design_name.ddc
If the block is larger, you can use the write_test_model command to write out a
test-model-only .ddc file that contains the CTL test model, along with an interface-only
representation of the core that allows the test model to be linked at the top level:
dc_shell> write_test_model -format ddc -output design_name.ctlddc
You can use either format for standard scan and compressed scan cores in the HASS flow.
The first command enables scan compression, and the second command enables the
HASS flow.
The HASS flow does not concatenate or rebalance the scan chain connections of
compressed scan cores at the top level. Each core-level scan chain is promoted to a
top-level scan chain with dedicated scan pin connections in both the standard scan and
compressed scan modes. The top-level scan count, and therefore the scan pin budget, is
determined by the number of scan chains in the compressed scan cores.
Figure 3-3 shows the results from the HASS flow when three compressed scan cores are
present. All eight codec connections are promoted to eight top-level scan-in and scan-out
connections. No other scan chain count is possible.
Figure 3-3 HASS Integration of Three Compressed Scan Cores
When only compressed scan cores exist, you do not need to specify a chain count with the
set_scan_configuration -chain_count command. However, you can specify the
expected chain count so that the tool verifies the actual number of scan chains against the
expected number.
The scan chain connections for compressed cores are always promoted to top-level scan
chain connections. The scan architecture behavior for the additional uncompressed logic
depends on whether a target chain count is specified with the set_scan_configuration
-chain_count command.
Figure 3-4 shows a top-level design example with a compressed scan core, a standard scan
core, and some top-level glue logic. The compressed scan core C_CORE contains 24
flip-flops divided into 6 compressed scan chains of 4 flip-flops each, with 3 scan-in and
scan-out pins. The standard scan core S_CORE contains 12 flip-flops, split into 4 scan
chains. The top-level glue logic GLUE contains 2 scan-replaced flip-flops with no scan
chains.
&B&25( 6B&25( */8(
&RPSUHVVHGVFDQFRUH $GGLWLRQDOXQFRPSUHVVHGORJLF
When no target chain count is specified, the following goals are used for scan architecture
of the additional logic:
• For the compressed scan mode of operation, the tool attempts to architect scan chains
that do not exceed the longest compressed scan chain inside a compressed scan core.
This preserves the test compression characteristics of the compressed scan cores.
• For the standard scan mode of operation, the tool follows the default rules of scan chain
architecture where the minimum number of scan chains is built that meet any applied
scan architecture requirements.
Figure 3-5 shows the resulting HASS top-level integration results operating in compressed
scan mode. The codec scan chain connections from C_CORE are promoted directly to
top-level connections. For the remaining uncompressed logic, standard scan chains are
architected so that the chain length of the compressed core is not exceeded.
Figure 3-5 Compressed Scan Mode After HASS Integration With No Chain Count Specified
&B&25( 6B&25( */8(
Figure 3-6 shows the resulting HASS top-level integration results operating in standard scan
mode. The standard scan chain connections from C_CORE are promoted directly to
top-level connections. For the remaining uncompressed logic, a single standard scan chain
is created that includes joined scan segments from S_CORE and the scan flip-flops from the
GLUE logic.
Figure 3-6 Standard Scan Mode After HASS Integration With No Chain Count Specified
&B&25( 6B&25( */8(
Note that when a chain count is not specified, the scan chain counts might be different
between the standard scan and compressed scan modes.
When a scan chain count is specified with the set_scan_configuration -chain_count
command, the tool attempts to honor the specified chain count for both the standard scan
and compressed scan modes. Figure 3-7 shows the HASS top-level integration results for
the compressed scan mode when the set_scan_configuration -chain_count 6
command is specified. Because the specified scan chain count applies to both the standard
scan and compressed scan modes, the scan architecture of the uncompressed logic is the
same in both modes.
Figure 3-7 Compressed Scan Mode After HASS Integration With -chain_count 6 Specified
&B&25( 6B&25( */8(
Since compressed scan mode chains are usually short, you should take care to manage the
relative lengths of standard scan and compressed scan chains at the top level. This might
require management of the scan chain lengths of any standard scan cores, as well as
providing an adequate scan pin budget at the top level to avoid excessive standard scan
chain concatenation. If further reduction in chain length is needed, you can use the Hybrid
flow. For more information, see “The Hybrid Flow” on page 3-9.
After top-level integration, you can perform DRC of the standard scan mode using the
dft_drc command. However, the tool does not support DRC of the top-level compressed
scan mode. DRC checking for the compressed scan mode is performed in the TetraMAX
tool.
In the HASS flow, a single test-mode pin that is shared across all scan cores is required for
selecting standard scan or compressed scan mode. Complex test-mode encodings are not
supported.
The Hybrid flow supports the same uncompressed logic types as the HASS flow. For a list
of these logic types, see “HASS Integration of Additional Uncompressed Scan Logic” on
page 3-6.
Figure 3-8 shows an example of the Hybrid integration flow.
The first command enables scan compression, and the second command enables the
Hybrid flow.
To configure Hybrid integration, you must supply the following information:
• Specify the total top-level scan chain count with the set_scan_configuration
-chain_count command.
• Specify the number of compressed scan chains for the new top-level codec with the
set_scan_compression_configuration -chain_count command, or the maximum
compressed scan chain length with the set_scan_compression_configuration
-max_length command.
Note:
This value does not include the compressed chains in any existing compressed scan
cores.
Just as with the HASS flow, the scan chain connections of compressed scan cores are
promoted to top-level scan chain connections. When you specify the total top-level chain
count with the set_scan_configuration -chain_count command, this value includes
these promoted compressed scan core connections. However, the compressed chain count
specified with the set_scan_compression_configuration -chain_count command
applies only to the logic included in top-level compressed scan insertion.
Figure 3-9 shows a top-level design that contains a compressed scan core named
C_CORE, a standard scan core named S_CORE, and some top-level logic named GLUE.
&RPSUHVVHGVFDQFRUH $GGLWLRQDOXQFRPSUHVVHGORJLF
Figure 3-10 shows the resulting Hybrid top-level design operating in compressed scan
mode. Note the following features:
• The tool determines the number of inputs and outputs on the new top-level codec by
taking the top-level chain count and subtracting the codec connections of the existing
compressed scan cores. In Figure 3-10, C_CORE uses three of the five total top-level
scan chain connections. The remaining two chain connections determine the width of the
new top-level codec.
• The tool architects four compressed scan chains in the uncompressed logic, then
compresses these chains with the new top-level codec.
Figure 3-10 Compressed Scan Mode Operation After Hybrid Integration
VHWBVFDQBFRQILJXUDWLRQFKDLQBFRXQW
&B&25( 6B&25( */8(
VHWBVFDQBFRPSUHVVLRQBFRQILJXUDWLRQFKDLQBFRXQW
Figure 3-11 shows the HASS top-level integration results operating in standard scan mode.
The DFTMAX tool architects two standard scan chains in the uncompressed logic, and
connects them to the two available top-level scan pins.
&B&25( 6B&25( */8(
You can use the partition feature to perform compressed scan insertion on cores which have
not yet been scan-inserted. This allows you to defer compressed scan insertion of a core to
the top level integration run, where the scan compression configuration can be adjusted and
rerun as needed.
Consider the following scenario:
• Compressed scan core C_CORE already has compressed scan inserted, and only
requires integration at the top level.
• Blocks IP_BLK1 and IP_BLK2 have been synthesized with a test-ready compile, but they
do not yet have scan chains. Each of these blocks should have its own codec inserted
within its hierarchy.
• Some top-level glue logic exists, contained in the GLUE block. This glue logic should
have its own codec inserted at the top level.
3$57,7,21
3$57,7,21
&B&25( */8( ,3B%/. ,3B%/.
Example 3-2 shows the commands used for partition creation and scan configuration. The
set_dft_location command is used to place the codecs inside IP_BLK1 and IP_BLK2.
current_dft_partition PARTITION1
set_scan_configuration -chain_count 3
set_scan_compression_configuration -chain_count 4
set_dft_location -include DFTMAX IP_BLK1
current_dft_partition PARTITION2
set_scan_configuration -chain_count 3
set_scan_compression_configuration -chain_count 4
set_dft_location -include DFTMAX IP_BLK2
current_dft_partition default_partition
set_scan_configuration -chain_count 5
set_scan_compression_configuration -chain_count 3
Figure 3-13 shows the resulting codec configurations after the insert_dft command is
used.
3$57,7,21
3$57,7,21
&B&25( */8( ,3B%/. ,3B%/.
The normal Hybrid scan architecture rules apply inside each partition. For example:
• A top-level chain count of five is specified for the default partition. Since C_CORE
already has three scan chain connections, two scan chain connections are allocated to
the codec inserted in the GLUE block.
• A compressed chain count of three is specified for the default partition. Three
compressed chains are created inside the GLUE block during compressed scan
insertion.
• Top-level chain counts and compressed chain counts applied to other partitions only
apply to the codec insertion for logic within those partitions.
Note:
Post-DFT DRC in scan compression mode is not supported at the top level.
current_design my_top
link
create_test_protocol
dft_drc
preview_dft -show all
insert_dft
current_test_mode Internal_scan
dft_drc -verbose
remove_design core1
remove_design core2
# Configure DFTMAX
set_dft_configuration -scan_compression enable
set_scan_compression_configuration -base_mode my_base1 \
-minimum_compression 10 \
-test_mode scan_compression1 \
-xtolerance high -hybrid true
Limitations
This section describes the limitations associated with the HASS and Hybrid flows. The
subsections in this section are as follows:
• HASS Flow Limitations
• Hybrid Flow Limitations
4-1
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
'HFRPSUHVVLRQ08;
0DVNHQDEOH
0DVNPRGH VLJQDO
VLJQDOV
;EORFNLQJFLUFXLW
;25FRPSUHVVRU
WHVWBVR
An existing ScanDataIn port provides the mask enable signal. A mask enable value of zero
selects the full observe mode. A mask enable value of one plus combinations of the mask
mode signals selects additional X-tolerance observe modes for unload. Information about
the X-tolerance observe modes is contained in the SPF in the CompressorStructures
section in the Compressor my_design_U_compressor_ScanCompression_mode
ModeControl definitions.
The high X-tolerance architecture introduces a combinational path between the scan input
and scan output ports. The path travels from the scan input ports, through the
decompression MUX mask signal generation logic, through the X-blocking and XOR
compactor circuits, then through the scan output ports. This path can potentially contain
long routes as well as combinational logic. To help meet timing requirements, you can use
the pipelined scan data feature. For more information, see “Pipelined Scan Data” on
page 5-7.
The preview_dft and insert_dft commands report information about the scan
compression codecs in the design. The output from these commands includes an
information message to confirm that the high X-tolerance feature is enabled:
Architecting Load Decompressor (version 5.8)
Number of inputs/chains/internal modes = 8/20/4
Architecting Unload compressor (version 5.8)
Number of outputs/chains = 5/20
Information: Compressor will have 100% x-tolerance
2 4
3 12 6
4 32 16
5 80 40
6 192 96
7 448 224
8 1024 512
9 2304 1152
10 5120 2560
11 11264 5632
12 24576 12288
13 32000 26624
a. This column assumes that a single decompressor input is dedicated to OCC clock chains. Additional
dedicated clock chain decompressor inputs will further reduce the limit.
If the on-chip clocking (OCC) feature is used with compressed clock chains, the dedicated
decompressor scan input lowers the limit. For more information on compressed clock
chains, see “Scan Compression and OCC Controllers” on page 2-27.
Table 4-2 shows the maximum compressed scan chain count when high X-tolerance is used
with some asymmetrical low-pin-count configurations:
Table 4-2 High X-Tolerance Compressed Scan Chain Limits for Asymmetrical Scan Pins
2 scan-ins, 1 scan-out 2
3 scan-ins, 1 scan-out 4
3 scan-ins, 2 scan-outs 8 4
4 scan-ins, 3 scan-outs 24 12
5 scan-ins, 4 scan-outs 64 32
If the specified compressed scan chain count cannot be satisfied, the tool issues an error
message that contains information about how many compressed scan chains were
requested and how many compressed scan chains can be built for the current scan pin
configuration. Example 4-1 shows the error message issued when 20 compressed scan
chains are requested, but only 12 scan chains can be built.
Example 4-1 High X-Tolerance Error Message for Insufficient Scan-In Pins
Error: Architecting of Load/Unload compressor failed with the given set
of parameters. (TEST-1722)
Number of internal chains architected: 20
Number of available compression channels: 12
Number of load compressor inputs: 3
Number of unload compressor outputs: 3
You can also use the TetraMAX analyze_compressors command to determine if a codec
can be built for a given set of parameters. For more information, see TetraMAX Online Help.
Supported Flows
High X-tolerance scan compression supports the following flows:
• All flat flows
• All hierarchical flows that use basic scan subblock test models and insert high
X-tolerance compressors at the top level
• Hierarchical integration for designs in which some blocks have high X-tolerance
compressors and some blocks have basic scan
• Hierarchical integration for designs in which some blocks have high X-tolerance
compressors, some blocks have basic scan, and user-defined logic (UDL) exists
Note:
Pin requirements in hierarchical flows are the same whether or not the cores have built-in
X-tolerance.
Static-X Analysis
Some flip-flops capture X values more often than others because they are located in the
fanout of logic constructs that generate unknown values. A flip-flop that frequently captures
an X value during capture is called a static-X cell.
The DFTMAX tool provides a static-X analysis feature that analyzes a design and reports
static-X cells. This analysis feature can be used in both standard scan and compressed scan
flows. When enabled, it reports static-X cell information during pre-DFT DRC. By itself,
static-X analysis does not affect subsequent scan chain architecture.
Static-X analysis is enabled by using the following command:
dc_shell> set_dft_drc_configuration -static_x_analysis enable
When enabled, static-X analysis directs pre-DFT DRC to carry out an X-probability analysis
of the sequential cells by invoking combinational simulation within the tool and then defining
those sequential cells with high X-capture probability as static-X cells. The analysis is
performed using the following procedure:
1. Normal test DRC analysis is performed to determine the set of scannable cells.
2. Constrained primary inputs are set to their constrained values, clocks are set to their
inactive values, and scan-enable signals are set to their inactive (capture) values.
3. Constant-value state elements are set to their constant values.
4. Other primary inputs and nonconstant scannable cells are set to random binary values.
All other state elements, such as nonscan cells, are set to X.
5. 1024 random patterns are simulated to determine the frequency that the data input of a
scannable cell is at X.
6. A scannable cell whose data input is X with a frequency exceeding a predetermined
threshold is recorded along with its frequency of capturing an X value. The
predetermined threshold is 25 percent and cannot be changed.
After identifying the static-X cells, the dft_drc command reports them as D39 violations in
the following format:
Warning: Probability of capture X (X probability <%>) exceeds threshold
for scancell DFF %s. (D39-x)
The dft_drc command also sets the test_dft_xcell_violation attribute on all identified
static-X cells. You can use this attribute to obtain the cells for further script-based analysis:
dc_shell> set static_x_cells \
[get_cells -hierarchical * -filter {test_dft_xcell_violation == true}]
When debugging static-X cells, remember that a static-X cell captures the frequent X values,
but the source of these frequent X values will likely exist in the fanin logic to the cell. The
following design constructs can introduce X values into the design logic:
• Black boxes
• CTL models
• Combinational feedback loops
• Uncontrolled internal buses
• Uncontrolled bidirectional ports
• Nonscan cells
Note:
Timing exceptions are not considered as a source of X values during static-X analysis in
the DFTMAX tool. Instead, they are considered as dynamic path-specific sources of X
values during TetraMAX ATPG.
Architecting X Chains
The DFTMAX tool provides a static-X chain feature that identifies scan cells that frequently
capture X values, and then groups them exclusively into special scan chains, called X
chains. By grouping X-capturing cells into dedicated scan chains, incidental X masking of
any chain is reduced or eliminated.
The static-X chain feature deals with the pattern inflation that is caused by the occurrence of
static-X cells in compression mode. This method of handling the X cells achieves better test
data volume reduction (TDVR), and improves ATPG quality of results. X-chain information is
communicated seamlessly in the DFTMAX to TetraMAX flow through the STIL procedure file
(SPF). The SCANDEF file generated by the DFTMAX tool groups the X cells into separate
SCANDEF partitions so that a place-and-route tool can preserve those groups.
1 0 0 1 1 0
Decompression MUX
XOR
0 0 1 1 1 0
Masking logic
Compression
0 1 0 0 1 0
1 X 0 X X 1
As a result, fewer chains are masked by the high X-tolerance masking logic, resulting in
better fault coverage and a lower volume of test data.
Enabling X Chains
To isolate the identified static-X cells and architect X chains that contain only these cells, use
the following commands:
dc_shell> set_dft_drc_configuration -static_x_analysis enable
dc_shell> set_scan_compression_configuration \
-xtolerance high \
-static_x_chain_isolation true
The preview_dft command reports X chains with an additional “(X chain)” label, as
shown in the following example:
****************************************
Current mode: ScanCompression_mode
****************************************
Number of chains: 320
Scan methodology: full_scan
Scan style: multiplexed_flip_flop
Clock domain: mix_clocks
Note:
Use the preview_dft command to identify X chains. The report_scan_path command
does not identify X chains.
The tool performs scan chain balancing with the additional constraint that static-X cells
cannot be mixed with non-static-X cells in the same scan chain. If the number of static-X
cells exceeds 20 percent of the total number of scan cells, the tool issues the following error
message:
Error: Too many static-X cells in design. Cannot isolate cells as
separate X-chains. (TEST-1090)
Note that assigning the static-X cells to X chains applies an additional constraint to the
physical implementation tool. The static-X cells could be distributed across the chip, so
connecting them together into one or more scan chains can result in long wires that
contribute to routing congestion.
To remove the static-X attribute from cells, use the following command:
dc_shell> remove_attribute [get_cells cell_list] \
test_dft_xcell_violation
Note:
The set_attribute and remove_attribute commands must be used after pre-DFT
DRC is run with the dft_drc command, but before scan is inserted with the insert_dft
command.
Use this capability to include additional scan cells in the X chains. For example, certain scan
cells might frequently capture dynamic X values during pattern generation in TetraMAX
ATPG. If you know the timing exceptions and are able to translate them to capturing scan
cell names, you can mark these scan cells as static-X cells with the set_attribute
command.
However, if the defined scan path consists entirely of static-X cells, the scan path becomes
an X-chain.
This behavior applies only to set_scan_path commands applied to a scan compression
mode. If a set_scan_path specification is applied to a standard scan mode, it does not
affect X-chain scan architecture.
uncontrollable reset becomes controllable, and FF1 becomes scannable. It is placed into a
regular scan chain despite always capturing an X value.
Figure 4-3 Using AutoFix With X Chains
;
%%2;
)) ))
8QFRQWUROOHG
UHVHW
Sequential cells with D1, D2, and D3 violations (uncontrollable clock, set, and reset signals)
are susceptible to this interaction if they frequently capture X values and are subsequently
made scannable by AutoFix.
To avoid this interaction, use the following two-pass flow:
1. Apply AutoFix with scan insertion disabled, so that only the AutoFix logic is inserted:
set_dft_configuration \
-scan disable \
-fix_clock enable -fix_set enable -fix_reset enable
set_autofix_configuration ...
preview_dft
insert_dft
2. Disable AutoFix, reenable scan insertion, and continue with normal scan insertion:
set_dft_configuration \
-fix_clock disable -fix_set disable -fix_reset disable \
-scan enable -scan_compression enable
set_scan_configuration ...
set_scan_compression_configuration ...
An alternative solution is to use the single-pass flow and manually mark the affected
X-capturing sequential cells with the test_dft_xcell_violation attribute. However, this
solution requires knowledge of the cells that are affected by the interaction.
Note:
When a DFT run includes a previously scan-inserted core read from a full-netlist .ddc file,
the tool still uses a CTL model representation during DFT operations.
This section includes the following subsections:
• Static-X Cells in the HASS Flow
• Hierarchical Blocks and X Sources
Static-X analysis can be performed in both standard scan and compressed scan flows.
However, X chains can only be created in compressed scan flows. When creating a standard
scan core that will subsequently be scan-compressed in a HASS flow, X analysis can be
used to determine if there are any static-X cells in the core. However, X chains cannot be
used to consolidate the static-X cells into X chains at the core level.
When using this flow, you should use static-X analysis to ensure that the standard scan core
does not contain any static-X cells. If it does, consider using AutoFix to resolve the X
sources. For more information on AutoFix, see the “Advanced DFT Architecture
Methodologies” chapter in the DFT Compiler Scan User Guide. Note that AutoFix might not
be able to resolve all X sources.
At the top level, the core is modeled using CTL model information during hierarchical
compressed scan insertion. Any static-X cells that exist in the core-level scan chain
segments are not visible to top-level DRC analysis, and they are incorporated into regular
codec scan chains.
The dft_drc -verbose command reports the core-level standard scan chain segments as
possible D39 violations, with one violation reported for each segment:
-----------------------------------------------------------------
Begin Pre-DFT violations...
-----------------------------------------------------------------
DRC Report
Total violations: 4
-----------------------------------------------------------------
4 PRE-DFT VIOLATIONS
4 Static X scan cell violations (D39)
-----------------------------------------------------------------
Sequential Cell Report
0 out of 1333 sequential cells have violations
-----------------------------------------------------------------
The CTL model scan chain segments are reported as D39 violations to report that the
segments could potentially contain static-X cells. Although the scan chain segments are
reported as possible static-X sources, they are not incorporated into the top-level X chains.
For compressed scan cores used in a hierarchical adaptive scan synthesis (HASS) flow,
there is no problem with static-X cells, if they are present, because the static-X cells were
already isolated into X chains when the models were created.
723
&25( &25(
During core-level DRC, no scannable cells capture an X value from the memory, and
therefore no static-X cells are reported by static-X analysis. During top-level DRC, a
scannable cell now captures the memory output. However, the core is modeled using CTL
model information, which does not model the functional core outputs. As a result, static-X
analysis does not detect that flip-flop FF1 frequently captures an X value, and it is placed
into a regular codec scan chain.
If you know the list of affected top-level flip-flops, apply the test_dft_xcell_violation
attribute to place them into X chains. For more information, see “Manually Specifying
X-Chain Cells” on page 4-10.
Memory
DO0 Scan
DO1 Scan
DO2 Scan
DO3 Scan
If the simulation model is configured for the memory, pre-DFT DRC reports the information
shown in Example 4-2.
Example 4-2 Pre-DFT DRC Report for Memory Models
In mode: all_dft...
Pre-DFT DRC enabled
-----------------------------------------------------------------
Begin Modeling violations...
Warning: Cell U_RAM (MEM) is unknown (black box) because functionality
for output pin Q[0] is bad or incomplete. (TEST-451)
Information: Cells with this violation : U_RAM. (TEST-283)
-----------------------------------------------------------------
Begin Pre-DFT violations...
Warning: Clock input clk of DFF U_RAM cannot capture data. (D17-1)
Warning: Probability of capture X (100) exceeds threshold for scancell
DFF U_RAM. (D39-1)
The D39 violation is issued for the memory model itself. However, no D39 violations are
issued for the sequential cells that capture the memory outputs. The simulation model used
by DFTMAX DRC is treated like a Verilog netlist with instantiated sequential cells. These
sequential cells are considered as valid scannable cells within the dft_drc command,
which results in hiding the X-generation effect of the memory outputs. As a result, the
sequential cells connected directly or indirectly to the memory outputs are not treated as
static-X cells and are therefore not placed into X chains.
Subsequently, during TetraMAX ATPG, memories are X-generators during much of the
ATPG process, and those sequential cells capture Xs, although the actual capture details
might depend on the particulars of the ATPG engine and target faults. Therefore, it is better
to put those cells into X chains. To do this, the memory models should not be configured with
the test_simulation_library variable. Instead, the normal black-box synthesis memory
models should be used during DFTMAX pre-DFT DRC.
Q12/PCB_8192x64c16s0_bit_reg_56_ ( IN SI ) ( OUT Q )
+ PARTITION X_clk_core_45_45
+ STOP Q12/PCB_8192x64c16s0_bit_reg_21_ SI ;
Compressed chains that are part of the CoreGroup but are not connected in Mode 0 are
implicitly defined as X chains. In the following example, compressed chains “1” and “2” are
X chains that consist of static-X cells exclusively. Mode 0 is called the full observe XOR
mode. The two X chains are observed by a direct-observability mode, in which each X-chain
can be observed at a different, single output with no other compressed chains XORed.
Mode 58 {
ModeControls {
"test_si17" = 1;
"test_si15" = 0;
"test_si16" = 0;
"test_si1" = 1;
"test_si2" = 1;
"test_si3" = 1;
"test_si4" = 0;
"test_si5" = 0;
"test_si6" = 1;
}
Connection "1" 3;
Connection "2" 11;
Connection "28" 6;
Connection "53" 14;
5-1
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
If the specified hierarchical cell does not exist, the insert_dft command creates it during
test insertion. For more information, see “Creating New DFT Logic Blocks” on page 5-6.
By default, all test logic is synthesized inside the specified hierarchical cell. To synthesize
only some types of test logic at that location, use the -include or -exclude option and list
the test logic types to be included in or excluded from the specified cell.
For example, to place DFTMAX codec logic inside my_cell, and place the remaining test
logic at the top level:
dc_shell> set_dft_location my_cell -include DFTMAX
To place all test logic inside my_cell except for test control module logic, which remains at its
default top-level location:
dc_shell> set_dft_location my_cell -exclude TCM
• WRAPPER
This type includes core wrapping cells and wrapper mode logic configured by the
set_wrapper_configuration command. For more information, see the “Wrapping
Cores” chapter in the DFT Compiler Scan User Guide.
• BSR
This type includes the IEEE Std 1149.1 boundary scan register logic inserted when the
set_dft_configuration -bsd enable command is used.
• TAP
This type includes the IEEE Std 1149.1 TAP controller logic inserted when the
set_dft_configuration -bsd enable command is used.
• SERIAL_CNTRL
This type includes the serializer clock controller used in serializer flows.
• SERIAL_REG
This type includes the standalone deserializer and serializer registers used in the
serializer IP insertion flow. This type does not affect the normal serializer insertion flow.
• XOR_SELECT
This type includes the sharing compressor and block-select logic inserted at the
compressor outputs in the shared codec I/O flow. For more information, see “Sharing
Codec Scan I/O Pins” on page 5-22.
• TCM
This type includes the test control module logic that decodes test-mode signals in a
multiple test-mode flow. For more information on multiple test modes, see “Multiple Test
Modes” in the DFT Compiler Scan User Guide.
• LOCKUP_LATCH
This type includes all lock-up latches.
• REC_MUX
This type includes all scan chain reconfiguration MUXs used to reconfigure scan chains
for different test modes in a multiple test-mode flow. It also includes scan-out MUXs,
tristate and bidirectional disable logic, and any other glue logic added during DFT
insertion.
When test logic is placed in an alternative location, new test signal pins are created on
hierarchical blocks as needed to route the test signals to the specified location. Table 5-1
lists the possible port types and their naming conventions. If you are moving test logic with
many individual signals, such as lock-up latch cells, this can result in a large number of
hierarchy pins being created.
Table 5-1 New Hierarchy Pin Naming Conventions for User-Specified DFT Instances
Functional input net name Net name where the tool inserts the Input
scan-out MUX
If you issue multiple set_dft_location commands, the insert_dft command uses the
last specified location for each test logic type during DFT insertion. In Example 5-1,
reconfiguration MUXs and lock-up latches are kept at their local point of use, test-mode
decode logic is placed in a top-level UTCM block, and all other test logic types are placed in
a UTEST_LOGIC block.
You can use the report_dft_location command to see the currently defined locations for
all DFT logic types. The default location for global test logic types is reported as <top>,
which represents the top level of the current design. The default location for local test logic
types is reported as <local>, which represents the local point of use. Example 5-2 shows
the report resulting from the commands in Example 5-1.
Example 5-2 Example of a report_dft_location Report
Design Name DFT PARTITION NAME DFT TYPE DFT Hierarchy Location
========================================================================
top default_partition BSR <top>
top default_partition DFTMAX UTEST_LOGIC
top default_partition LOCKUP_LATCH <local>
top default_partition TAP UTEST_LOGIC
top default_partition TCM UTCM
top default_partition PIPELINE_SE_LOGIC UTEST_LOGIC
top default_partition PIPELINE_SI_LOGIC UTEST_LOGIC
top default_partition PLL UTEST_LOGIC
top default_partition REC_MUX <local>
top default_partition SERIAL_CNTRL UTEST_LOGIC
top default_partition SERIAL_REG UTEST_LOGIC
top default_partition WRAPPER UTEST_LOGIC
You can use the remove_dft_location command to remove the location specification for
one or more test logic types. When a test logic type has no location specification, it is
inserted at its default location.
In a multiple partition flow, only the following test logic types can be specified on a
per-partition basis: DFTMAX, SERIAL_REG, PIPELINE_SI_LOGIC, LOCKUP_LATCH, REC_MUX.
For other test logic types, you can only specify the location for the default partition.
The following test logic types are not affected by the set_dft_location command:
• AutoFix logic
• Automatically inserted est points
• User-defined test points
• AND gates inserted by the insert_dft command to suppress toggling
During DFT insertion, the insert_dft command creates the hierarchical cells before
inserting the DFT logic and issues information messages with the cell and design names of
the new DFT blocks:
dc_shell> insert_dft
...
Created instance 'UCODEC' of design 'top_dft_design'
Created instance 'UOCC' of design 'top_dft_design_1'
Architecting Scan Chains
You can specify cell instance names with the set_dft_location command, but the
resulting design names are automatically generated. To use specific design names for the
new DFT blocks, use the rename_design command after DFT insertion completes. For
example,
set_dft_location UCODEC -include {DFTMAX TCM}
set_dft_location UOCC -include {PLL}
insert_dft
rename_design [get_attribute [get_cells UCODEC] ref_name] CODEC_design
rename_design [get_attribute [get_cells UOCC] ref_name] OCC_design
The specified instance name cannot be a library cell, black box, or black-box CTL model.
The instance name can be a CTL model if the complete .ddc netlist is available.
Note:
Compressed scan reconfiguration MUXs and test-mode decode logic are not placed in
the specified location.
For codec logic insertion, this command takes precedence over the set_dft_location
-include DFTMAX command. The specified location is stored as part of the codec
configuration. You can use the report_scan_compression_configuration command to
view the specified codec location.
When a top-down multiple partition flow is used, this feature can be used to place each
partition’s codec logic at a specified location. For example,
Example 5-3 Specifying Codec Logic Insertion Locations for Multiple Partitions
set_dft_location core ;# place all non-codec logic in core
current_dft_partition P1
set_scan_configuration -chain_count 4
set_scan_compression_configuration -chain_count 10 -location core/BLK1
current_dft_partition P2
set_scan_configuration -chain_count 3
set_scan_compression_configuration -chain_count 8 -location core/BLK2
+HDGSLSHOLQHUHJLVWHUV
&B&25(
7DLOSLSHOLQHUHJLVWHUV
The tool can automate the insertion of the head and tail pipeline registers around the codec,
or you can provide user-defined pipeline registers at the scan inputs and outputs that the
tool connects to the codec. Test DRC verifies the correct operation of the pipeline registers
and updates the test protocol that TetraMAX ATPG uses for pattern generation.
• User-defined pipeline registers can be provided in the design logic. The tool makes the
needed scan path connections to these existing pipeline registers during the
insert_dft command.
These pipeline register insertion methods are explained in the following subsections:
• Enabling Pipelined Scan Data
• Automatically Inserting Head and Tail Pipeline Registers
• Specifying User-Defined Head and Tail Pipeline Registers
The -head_scan_flop option causes the tool to create scan-replaced head pipeline
registers that hold their state during scan capture. For more information, see “Avoiding X
Capture in Head Pipeline Registers” on page 5-15.
DFT insertion uses a D flip-flop from the target library for the automatically inserted pipeline
registers. To minimize the need for lock-up latches at the compressed scan chains, the head
pipeline registers are clocked on the trailing clock edge, and the tail pipeline registers are
clocked on the leading clock edge. Rising-edge-triggered or falling-edge-triggered flip-flops
are used depending on whether the scan clock uses a return-to-zero or return-to-one
waveform. Figure 5-2 shows the flip-flops used for both types of clock waveforms.
6, 62 6, 62
5HWXUQWR]HURVFDQFORFN 5HWXUQWRRQHVFDQFORFN
Note:
If you enable leading-edge retiming registers using the set_scan_configuration
-add_test_retiming_flops command with the begin_only or begin_and_end option
values, the head pipeline registers are clocked on the leading clock edge instead.
The newly inserted pipeline registers have names of the form
SNPS_PipeHead_SI_pin_name_stage
SNPS_PipeTail_SO_pin_name_stage
where SI_pin_name is the scan in port, SO_pin_name is the scan out port, and stage is the
stage depth.
By default, a new test clock port named SNPS_PipeClk is created for the pipeline registers.
If you want to use an existing design clock instead, use the -head_pipeline_clock and
-tail_pipeline_clock options to specify the clock:
set_pipeline_scan_data_configuration \
-head_pipeline_clock clock_name \
-tail_pipeline_clock clock_name \
-head_pipeline_stages integer \
-tail_pipeline_stages integer \
-head_scan_flop true
You can use the set_scan_path command to specify the scan data path connections to
these pipeline registers:
set_scan_path chain_name \
-scan_data_in port_name \
-scan_data_out port_name \
-pipeline_head_registers instance_list \
-pipeline_tail_registers instance_list \
-view spec
Note:
Do not specify a test mode for the set_scan_path command when defining pipeline
connections. The tool automatically propagates the specification to all test modes during
scan architecture.
Each set_scan_path command associates a set of existing head and/or tail pipeline
registers with a scan-in and scan-out port. A full scan path chain definition with scan
elements is not needed. You can provide a list of multiple pipeline registers to implement
multiple pipeline stages. The head and tail pipeline depths can be different.
For user-defined pipeline registers, you are responsible for the connections to the scan data
ports and between the pipeline stages, and for proper conditioning for the scan ports and
clocks to the pipeline registers. Figure 5-3 demonstrates the required connections for two
head pipeline registers and two tail pipeline registers per scan chain.
Figure 5-3 User-Defined Pipeline Registers and Connections
3LSHOLQHFRQQHFWLRQV
8VHUGHILQHGSLSHOLQHUHJLVWHUV &B&25( PDGHGXULQJ
')7LQVHUWLRQ
During DFT insertion, DFT Compiler makes connections from the pipeline registers to the
scan decompression MUX and XOR compressor logic, but does not check the validity of the
paths between the scan inputs and head registers and between the tail registers and the
scan outputs. After DFT insertion, the dft_drc command determines whether the scan
chains are shifting properly.
You can apply the set_size_only command to user-defined pipeline registers before the
first compile -scan command so that the registers are not removed by logic optimization.
Although the size_only property allows the compile -scan command to scan-replace the
pipeline registers with their scan equivalents, the insert_dft command will unscan the
pipeline registers before making the pipeline connections.
When user-defined pipeline registers are specified with the set_scan_path command, DFT
Compiler ignores any options relating to automatically inserted pipeline registers specified
with the set_pipeline_scan_data_configuration command.
Observe these additional requirements when implementing user-defined pipeline registers:
• Design the pipeline structures before DFT insertion so that the registers can be
referenced in the set_scan_path command.
• Ensure that the specified chain count and the number of scan chains are the same.
• Specify the head and tail pipeline registers with a full hierarchical name.
• Specify the corresponding scan input and output ports for each external chain.
• Specify the pipeline registers in scan order, from input pin to scan chain, and from scan
chain to output pin.
• All head pipeline registers must be triggered by the same clock. All tail pipeline registers
must be triggered by the same clock. The clock can be dedicated or shared with other
scan flip-flops.
• DFT Compiler accepts any clocking scheme that ensures correct scan shift. However, a
good rule to follow is to have all the head pipeline registers triggered by the latest edge
of the shift clocks and to have the tail registers triggered by the earliest edge of the shift
clocks.
• All head pipelines must have the same depth, and all tail pipelines must have the same
depth.
• Design your head pipeline registers to retain their values or propagate a constant value
during the capture cycles for optimal ATPG results. This prevents unknown values from
propagating to the unload data. For more information, see “Avoiding X Capture in Head
Pipeline Registers” on page 5-15.
• The tail registers are assumed to have unknown values at the beginning of unload and
do not need to maintain the state.
The user-defined pipeline register flow is available in both the DFT Compiler and DFTMAX
tools.
dc_shell> link
dc_shell> set_scan_compression_configuration \
-xtolerance default
. . .
The -head_scan_flop option is used to prevent the head pipeline registers from
capturing during scan capture.
b. For user-defined pipeline register connections:
dc_shell> set_scan_path chain0 -view spec \
-pipeline_head_registers \
{head_pipe_0_reg} \
-pipeline_tail_registers \
{tail_stage1_pipe_0_reg tail_stage2_pipe_0_reg} \
-scan_data_in test_SI_0 \
-scan_data_out test_SO_0
. . .
8. Generate a test protocol and check for design violations by running the test design rule
checking at the gate level.
dc_shell> create_test_protocol
dc_shell> dft_drc
dc_shell> insert_dft
11. Write out the pipeline-inserted netlist and the test protocol files.
dc_shell> report_scan_path -view spec \
-chain all
dc_shell> report_scan_configuration
dc_shell> write_test_protocol \
-output ScanCompression.spf \
-test_mode ScanCompression_mode
The following methods can be used to capture known values in the head pipeline registers
during scan capture:
• Capture the current register output state during scan capture, as shown in Figure 5-4.
Figure 5-4 Head Pipeline Register With State-Holding Scan Flip-Flop
6, ' 4 ' 4 62
6,
6( 6(
&/.
If you are using the automatic pipeline insertion flow, specify the -head_scan_flop
true option of the set_pipeline_scan_data_configuration command. The tool will
use scan head pipeline registers, and tie each register’s output to its functional data input
so that the state is held during scan capture.
• Use a dedicated head pipeline register clock, as shown in Figure 5-5.
Figure 5-5 Head Pipeline Register With Dedicated Clock
6, ' 4 ' 4 62
3&/.
&/.
If you are using the automatic pipeline insertion flow, you can specify a dedicated head
pipeline register clock using the -head_pipeline_clock option of the
set_pipeline_scan_data_configuration command.
If the clock is independently controllable from the top level, you should add a constraint
in the TetraMAX tool to suppress the dedicated head pipeline register clock during scan
capture.
6, ' 4 ' 4 62
6(
&/.
There is no option to implement a gated clock in the automatic pipeline register insertion
flow.
• Capture a constant value during scan capture, as shown in Figure 5-7.
Figure 5-7 Head Pipeline Registers With Constant Value Capture
RU
6, ' 4 ' 4 62
6(
&/.
There is no option to implement a constant value capture in the automatic pipeline
register insertion flow.
Post-DFT DRC verifies whether the head pipeline registers hold their values during capture
and issues an R-18 violation message if the check is unsuccessful.
Scan Architecture
While implementing the pipelined scan data, DFT Compiler takes the following aspects into
consideration:
• User-defined pipeline registers and automatically inserted pipeline registers are mutually
exclusive.
• The specification of head and tail pipeline registers is automatically propagated from the
standard scan mode to its corresponding compression mode.
• Pipeline registers are automatically excluded from scan replacement. This exclusion
takes precedence over any other scan membership specifications, such as the
set_scan_path command and the -include and -exclude options of the
set_scan_configuration command.
Compressor des2_U_decompressor {
ModeGroup mode_group;
LoadGroup load_group;
CoreGroup core_group;
Modes 3;
...}
Compressor des2_U_compressor {
UnloadGroup unload_group;
CoreGroup core_group;
Mode {{....}}
}
specification of the ATE clock as the pipeline clock results in the OCC-controlled clock
being used by default. If the ATE clock is manually connected to the pipeline registers, no
violations will be reported, but incorrect ATPG patterns might be generated.
• Multiple test-mode operation with user-defined pipeline registers is not supported.
However, multiple test-mode operation with automatically inserted pipeline registers is
supported.
set_pipeline_scan_data_configuration \
-head_pipeline_stages 1 \
-tail_pipeline_stages 1 \
-head_pipeline_clock clk \
-tail_pipeline_clock clk
When this core is integrated at the chip level, the chip-level pipeline depth is set to two:
set_dft_configuration -pipeline_scan_data enable
set_pipeline_scan_data_configuration \
-head_pipeline_stages 2 \
-tail_pipeline_stages 2 \
-head_pipeline_clock clk \
-tail_pipeline_clock clk
Figure 5-8 shows how the tool adds an additional pipeline stage to meet the chip-level
target. The bolded flip-flops are added at the chip level during integration.
Figure 5-8 Hierarchical Pipelined Scan Data Example
At the core level, the pipeline registers can be driven by a shared functional clock or a
dedicated pipeline clock. At the chip level, you typically connect this core-level clock pin to
the desired chip-level clock signal. However, in the automatically inserted pipeline register
flow, if you have a dedicated core-level pipeline clock pin that is unconnected at the chip
level, the tool automatically connects it to the chip-level pipeline clock.
General Rules
The following general rules apply to all integration flows where cores are integrated at the
chip level with pipelined scan data enabled:
• Pipelined scan data must be enabled when integrating pipelined cores, even if no
additional pipeline stages are added at the top level.
• During chip-level integration, the tool adds pipeline stages as needed to meet the
top-level pipeline depth specification.
• The core-level and chip-level pipeline clocks can differ. Lockup latches are automatically
inserted as needed.
• Unconnected core-level pipeline clock pins (whether DFT-created or user-defined) are
automatically connected to the chip-level pipeline clock signal (whether DFT-created or
user-defined).
For more information on the HASS flow, see “The HASS Flow” on page 3-3. For more
information on the Hybrid flow, see “The Hybrid Flow” on page 3-9.
Figure 5-11 Dedicated Codec I/O Connections and Shared Codec I/O Connections
6KDULQJFRPSUHVVRU
'HGLFDWHGFRGHF,2FRQQHFWLRQV
6KDUHGFRGHF,2FRQQHFWLRQV
For a list of the limitations of the shared codec I/O feature, see “Limitations” on page 5-51.
This section includes the following subsections:
• Specifying the I/O Sharing Configuration
• Determining the Fully Shared I/O Configuration
• Codec I/O Sharing in the HASS Flow
• Codec I/O Sharing in the Hybrid Flow
• Codec I/O Sharing in the Top-Down Flat Flow
• Codec I/O Sharing With Identical Cores
• Codec I/O Sharing Groups
• Codec I/O Sharing and Standard Scan Chains
• Codec I/O Sharing and Pipelined Scan Data
• Integration of Cores With Shared Codec I/O Connections
• Limitations
The value M specifies the size of the set of shared scan-in pins used for all codec input
connections. The value N specifies the size of the set of shared scan-out pins used for all
codec output connections. These values pertain only to the scan I/O signals needed for
codec connections; scan I/O signals for external chains in compressed scan mode and for
scan chains in standard scan mode should not be included in these values.
Figure 5-12 shows two compressed scan cores with connections that are fully shared using
the set_scan_compression_configuration -shared_inputs 4 -shared_outputs 4
command. The first codec has four I/O pins and the second codec has three I/O pins. A
minimum shared set of four top-level scan I/O pins is required to satisfy the connections of
the wider codec. All shared scan inputs are tied together, and the scan outputs are
combined with an output sharing compressor block.
Figure 5-12 Compressed Scan Mode Operation for Two Codecs With Fully Shared I/O
VKDUHGBLQSXWV
&B&25( &B&25(
6KDULQJFRPSUHVVRU
VKDUHGBRXWSXWV
You can use the -shared_inputs option to set the number of shared scan inputs to any
value from fully shared to unshared, inclusive. You can use the -shared_outputs option to
set the number of shared scan outputs, but only to either the fully shared or unshared value.
For more information on computing the fully shared configuration, see “Determining the
Fully Shared I/O Configuration” on page 5-26.
Note:
If you specify the fully unshared (dedicated) outputs value, you must use the flow
described in “Specifying Shared Codec Inputs With Dedicated Codec Outputs” on
page 5-37.
To enable the codec I/O sharing feature, you must specify the -shared_inputs option. The
-shared_outputs option by itself does not enable codec I/O sharing. If you specify the
-shared_inputs option without the -shared_outputs option, the codec outputs are
automatically fully shared.
As you increase the number of shared scan inputs, the amount of sharing decreases and the
controllability of the compressed scan chains increases, respectively. Figure 5-13 shows the
same two codecs with the -shared_inputs 6 option specified.
Figure 5-13 Two Codecs With Reduced Scan-In Pin Sharing
VKDUHGBLQSXWV
&B&25( &B&25(
6KDULQJFRPSUHVVRU
If you provide fewer than the fully shared number of scan inputs with the -shared_inputs
option, the tool issues the following warning message and proceeds with the fully shared
input value:
Warning: Your request for 3 shared codec scan inputs in partition
default_partition cannot be met; 4 shared scan inputs will be used
instead. (TEST-1420)
If you provide fewer than the fully shared number of scan outputs with the -shared_outputs
option, a similar warning message and adjustment occurs:
Warning: Your request for 3 shared codec scan outputs in partition
default_partition cannot be met; 4 shared scan outputs will be used
instead. (TEST-1421)
DFT insertion places the output sharing compressor at the top level by default. To insert the
sharing compressor inside a specific hierarchical block, specify the location using the
set_dft_location -include XOR_SELECT command. For more information, see
“Specifying a Location for DFT Logic Insertion” on page 5-2.
2&&
&B&25( &B&25(
FRQWUROOHU
6KDULQJFRPSUHVVRU
If you are using the Hybrid flow with a top-level OCC controller and the top-level codec
compresses the clock chain of the top-level OCC controller, you must include a scan input
for the top-level codec.
If you are using external clock chains, do not include them in the value provided to the
-shared_inputs option; they are excluded from scan compression.
For more information on compressed clock chains and external clock chains, see “Scan
Compression and OCC Controllers” on page 2-27.
&B&25( &B&25(
For more information on load-mode pins, see “Decompressor Operation” on page 1-4.
&B&25( &B&25(
Because codec I/O sharing requires that all codecs have the same X-tolerance type, these
enable pins do not impose any complexity on the fully shared input computation. If high
X-tolerance is used, all codecs have a single high X-tolerance enable pin, which is shared
as other scan-in data pins are shared.
For more information on high X-tolerance enable pins, see “The High X-Tolerance
Architecture” on page 4-2.
Figure 5-17 Adding Shared Inputs for High X-Tolerance Block-Select Signals
VKDUHGBLQSXWV
&B&25( &B&25(
+LJK;WROHUDQFH +LJK;WROHUDQFH
6KDULQJFRPSUHVVRU
The number of additional block-select scan-in pins N is equal to log2 of the number of
shared codecs, rounded up to the next integer value. This number must be included in the
value provided to the -shared_inputs option. Table 5-2 shows the number of additional
scan-in pins required as a function of the number of shared codecs.
Table 5-2 Number of Additional Scan Data Inputs Required for Codec Sharing
2 1
3 to 4 2
5 to 8 3
9 to 16 4
17 to 32 5
33 to 64 6
The preview_dft command at the integration level reports the block-select signal
connections that will be created. Example 5-4 shows the preview report for two shared-I/O
codecs.
Example 5-4 Shared Codec I/O Block Select Signals in preview_dft Report
ScanDataIn Ports:
This approach is useful when codec information is not readily available for cores or codecs,
such as when you do not have the CTL models available in an integration flow or you are
using the top-down flat insertion flow and the codecs do not yet exist.
To manually compute the fully shared input configuration value, which is the minimum value
that can be specified with the -shared_inputs option, do the following:
1. If all codecs have the same load-mode pin count, compute the maximum scan-in width
of all codecs to be shared, then go to step 3.
If you do not know this information, use the automatic computation method described in
“Automatically Computing the Fully Shared Configuration” on page 5-30.
2. If some codecs have different load-mode pin counts, do the following:
a. For each codec to be shared, separate the scan-in pins into load-mode pins and
non-load-mode pins.
The non-load-mode pins are the remaining scan-in pins that are compressed clock
chain scan-in pins, high X-tolerance enable pins, or regular scan-in data pins.
b. Compute the maximum load-mode pin count value across all codecs.
c. Compute the maximum non-load-mode pin count value across all codecs.
d. Add together the maximum values from steps 2b and 2c, then go to step 3.
3. If compressed clock chains are used, add the number of compressed clock chain scan-in
pins because these pins cannot be shared.
4. If high X-tolerance is used, add N additional scan inputs for block-select signals, where
N is equal to log2 of the number of shared codecs, rounded up to the next integer value.
For more information, see “Adding High X-Tolerance Block-Select Pins” on page 5-28.
To manually compute the fully shared output configuration value, which is the minimum
value that can be specified with the -shared_outputs option, compute the maximum
scan-out width of all codecs to be shared.
&B&25( &B&25(
6KDULQJFRPSUHVVRU
VKDUHGBRXWSXWV
&B&25(
VHWBVFDQBFRPSUHVVLRQBFRQILJXUDWLRQLQSXWVRXWSXWV
When codec I/O sharing is performed, the new top-level codec can use some or all of the
scan input pins used by the existing block-level codecs. Figure 5-20 shows an example of
partial scan-in sharing and Figure 5-21 shows an example of full scan-in sharing.
&B&25(
6KDULQJFRPSUHVVRU
VHWBVFDQBFRPSUHVVLRQBFRQILJXUDWLRQLQSXWVRXWSXWV
VKDUHGBLQSXWVVKDUHGBRXWSXWV
&B&25(
6KDULQJFRPSUHVVRU
VHWBVFDQBFRPSUHVVLRQBFRQILJXUDWLRQLQSXWVRXWSXWV
VKDUHGBLQSXWVVKDUHGBRXWSXWV
The I/O sharing feature provides a degree of freedom in the construction of the new top-level
codec. Because the top-level codec characteristics can no longer be derived from other
scan configuration information in the Hybrid flow, you must explicitly configure the top-level
codec characteristics using the -inputs and -outputs options of the
set_scan_compression_configuration command.
To remedy this, the top-down flat flow uses subpartitions to enable codec I/O sharing. A
subpartition is defined with the define_dft_partition command, and specifies the scan
logic to be scan-compressed with a codec. These subpartitions are then grouped together
into top-level partitions, which can receive codec I/O sharing and scan port specifications.
This flow is configured as follows:
1. Define the subpartitions containing the logic to be scan-compressed with a codec.
2. Define a top-level partition containing the subpartitions that should share their codec I/O
connections.
3. Configure codec characteristics within each subpartition.
4. Configure the shared codec I/O characteristics within each top-level partition.
The following example defines two codecs with shared I/O connections in a top-down flat
flow:
# globally enable scan compression
set_dft_configuration -scan_compression enable
current_dft_partition SUB_P2
set_scan_configuration -chain_count 1
set_scan_compression_configuration -chain_count 4 -inputs 2 -outputs 2
Note:
Subpartition definitions are only supported in a shared codec I/O flow.
Figure 5-22 shows the top-down flat DFT insertion results for these commands.
Figure 5-22 Top-Down Flat Flow Codec I/O Sharing
3$57,7,21
68%B3
68%B3
%/. %/.
6KDULQJFRPSUHVVRU
When you use the shared codec I/O feature in a top-down flat flow, all scan logic to be
compressed must be placed into subpartitions. If scan cells in a partition exist outside a
subpartition, the tool places them into an external chain that is not compressed inside that
partition. See Figure 5-23.
Figure 5-23 Partition-Level External Chains in Top-Down Flat Flow
3$57,7,21
68%B3
68%B3
%/. %/.
6KDULQJFRPSUHVVRU
Identical cores have the same functional and scan logic structures. Because of this,
DFTMAX compression optimizes shared codec I/O connections of identical cores as follows:
• Identical scan input connections are used so that each pattern sensitizes the same faults
across all cores.
• Identical scan output connections are used to reduce the impact of X values on pattern
count.
Figure 5-24 shows the codec scan data connections for two instances of COREA, two
instances of COREB, and a single instance of COREC.
Figure 5-24 Codec Scan Data Connections for Groups of Identical Cores
6KDULQJFRPSUHVVRU
The tool does not identify identical core instances by default; you must specify them with the
-identical_cores option of the set_scan_compression_configuration command.
Wildcards are supported. For example,
dc_shell> set_scan_compression_configuration \
-shared_inputs 4 -shared_outputs 4 \
-identical_cores {COREA_* COREB_*}
If there are multiple groups of identical cores, as in the previous example, the tool analyzes
them to determine the identicality grouping. Cores are considered identical when the
following codec parameters match:
• Decompressor input width
• Compressor output width
• X-tolerance configuration
• Compressed scan chain count
If your design generates few X values, you can use nonidentical (scrambled) scan output
connections for the identical cores to potentially improve the diagnosability of the design. To
do this, set the -scramble_identical_outputs option to true when you configure
identical cores with the set_scan_compression_configuration command. Scrambled
output connections, shown in Figure 5-25, provide more uniqueness in the output signatures
of each identical core.
Figure 5-25 Using Scrambled Output Connections for Identical Cores
6KDULQJFRPSUHVVRU
The preview_dft and insert_dft commands print information messages that show the
identical core groups:
Information: Detected group of identical cores: COREA_1 COREA_2
(TEST-1450)
Information: Detected group of identical cores: COREB_1 COREB_2
(TEST-1450)
You can use these messages to confirm that identical cores are identified as expected.
When you run TetraMAX ATPG, use the -shared_io_analysis option of the set_atpg
command. This option performs an analysis to identify all identical circuit networks in the
identical cores, which results in improved pattern generation. This option is available
beginning with the TetraMAX H-2013.03-SP1 release.
Figure 5-26 Example of Shared Codec Inputs With Dedicated Codec Outputs
VKDUHGBLQSXWV
&B&25($B &B&25($B
+LJK;WROHUDQFH +LJK;WROHUDQFH
VKDUHGBRXWSXWV
The tool uses this sharing configuration when the following requirements are met:
• All cores are identical. Cores are considered identical when the following codec
parameters match:
❍ Decompressor input width
❍ Compressor output width
❍ X-tolerance configuration
❍ Compressed scan chain count
• The value specified for the -shared_inputs option is equal to the shared codec input
width.
• The value specified for the -shared_outputs option is equal to the sum of all shared
codec output widths.
When the tool detects that these requirements are met, it issues the following information
message:
Information: You have asked for shared codec inputs and dedicated codec
outputs in partition partition_name. (TEST-1446)
Note:
In this flow, the identical cores are automatically identified. You do not need to use the
-identical_cores option as described in “Codec I/O Sharing With Identical Cores” on
page 5-35.
Because there is no sharing of codec outputs, no sharing compressor is required. This also
means that no additional shared codec I/O block-select signals must be included in the
-shared_inputs value when using high X-tolerance. For more information on block-select
signals, see “Adding High X-Tolerance Block-Select Pins” on page 5-28.
current_dft_partition PARTITION2
set_scan_configuration -chain_count 3
set_scan_compression_configuration -shared_inputs 3 -shared_outputs 3
Figure 5-27 shows the HASS integration results for these commands.
3$57,7,21
&B&25( &B&25( &B&25( &B&25(
6KDULQJFRPSUHVVRU 6KDULQJFRPSUHVVRU
You can define multiple partitions to create multiple top-level codecs, including a mix of
shared and dedicated top-level codecs.
Note:
A top-level codec is a codec that compresses top-level logic, which is logic that exists
outside a compressed scan core. A top-level codec can be defined in a subpartition (for
a shared top-level codec) or in a top-level partition (for a dedicated top-level codec).
4. Configure the shared codec I/O characteristics within each top-level partition.
The following example defines two top-level DFT partitions, each of which contains two
shared-I/O codecs:
# globally enable scan compression and Hybrid integration
set_dft_configuration -scan_compression enable
set_scan_compression_configuration -hybrid true
current_dft_partition PARTITION2
set_scan_configuration -chain_count 3
set_scan_compression_configuration -shared_inputs 3 -shared_outputs 3
Figure 5-28 shows the Hybrid integration results for these commands.
Figure 5-28 Hybrid Flow With Sharing Groups and a Shared Top-Level Codec
3$57,7,21
3$57,7,21
68%B*/8(
6KDULQJFRPSUHVVRU 6KDULQJFRPSUHVVRU
You can define one or more shared codec subpartitions within any top-level partition, with or
without compressed scan cores. If some scan cells exist in a top-level partition but outside a
subpartition, the tool places them into an external chain that is not compressed inside that
partition. See Figure 5-29.
68%B*/8(
&B&25( */8(
6KDULQJFRPSUHVVRU
Additional requirements apply to the scan configuration when codec I/O sharing is used in
the Hybrid flow with shared top-level codecs. For more information, see “Limitations” on
page 5-51.
Figure 5-30 shows the Hybrid integration results for these commands.
Figure 5-30 Hybrid Flow With Sharing Groups and a Dedicated Top-Level Codec
3$57,7,21
3$57,7,21
&B&25( &B&25( */8(
6KDULQJFRPSUHVVRU
current_dft_partition SUB_P2
set_scan_configuration -chain_count 2
set_scan_compression_configuration -chain_count 4 -inputs 2 -outputs 2
current_dft_partition SUB_P3
set_scan_configuration -chain_count 3
set_scan_compression_configuration -chain_count 5 -inputs 3 -outputs 3
current_dft_partition SUB_P4
set_scan_configuration -chain_count 2
set_scan_compression_configuration -chain_count 4 -inputs 2 -outputs 2
current_dft_partition PARTITION2
set_scan_compression_configuration -shared_inputs 3 -shared_outputs 3
Figure 5-31 shows the top-down flat DFT insertion results for these commands.
Figure 5-31 Top-Down Flat Flow Codec I/O Sharing With Multiple Top-Level Partitions
3$57,7,21
3$57,7,21
68%B3
68%B3
68%B3
68%B3
6KDULQJFRPSUHVVRU 6KDULQJFRPSUHVVRU
6KDULQJFRPSUHVVRU
&RPSUHVVHGVFDQPRGH 6WDQGDUGVFDQPRGH
In the Hybrid flow with codec I/O sharing, core-level scan segments can be mixed with
top-level scan cells to achieve optimal balancing. Figure 5-33 shows the compressed scan
and standard scan chains for a design in the Hybrid integration flow.
Figure 5-33 Standard Scan Chains in the Hybrid Flow With Codec I/O Sharing
68%B3
68%B3
6KDULQJFRPSUHVVRU
&RPSUHVVHGVFDQPRGH 6WDQGDUGVFDQPRGH
In top-down flat flows, the subpartition standard scan chains are promoted to top-level scan
chains with no concatenation or rebalancing within the enclosing top-level partitions. You
must apply the set_scan_configuration -chain_count command to the subpartitions to
manage the standard scan chain counts. Figure 5-34 shows the compressed scan and
standard scan chains for a design in the top-down flat flow, where SUB_P1 has a specified
chain count of 2 and SUB_P2 has a specified chain count of 1.
Figure 5-34 Standard Scan Chains in the Top-Down Flat Flow With Codec I/O Sharing
3$57,7,21
3$57,7,21
68%B3
68%B3
68%B3
68%B3
%/. %/. %/. %/.
6KDULQJFRPSUHVVRU
&RPSUHVVHGVFDQPRGH 6WDQGDUGVFDQPRGH
In the HASS flow with sharing groups, partition boundaries prevent core-level scan segment
concatenation across partitions, but scan segments can still be concatenated and balanced
within each partition. Apply the set_scan_configuration -chain_count command to
each partition to specify the number of standard scan chains for that partition. Figure 5-35
shows the standard scan chains for a design in the HASS integration flow with sharing
groups.
Figure 5-35 Standard Scan Chains in the HASS Flow With Codec I/O Sharing Groups
3$57,7,21
3$57,7,21
6WDQGDUGVFDQPRGH
In the Hybrid flow with sharing groups, core-level scan segments are concatenated and
balanced within top-level partitions (as in the HASS flow with sharing groups), but
subpartition scan chains are promoted to top-level scan chains (as in the top-down-flat
flows). For subpartitions, apply the set_scan_configuration -chain_count command to
specify the number of standard scan chains to create. For top-level partitions, apply the
set_scan_configuration -chain_count command to specify the total scan chain count
for all cores in the partition, excluding any subpartitions. Figure 5-36 shows the standard
scan chains for a design in the Hybrid integration flow with sharing groups.
Figure 5-36 Standard Scan Chains in the Hybrid Flow With Codec I/O Sharing Groups
3$57,7,21
3$57,7,21
68%B3
68%B3
&B&25( %/. &B&25( %/.
6WDQGDUGVFDQPRGH
For more information on specifying standard scan chain counts in the HASS and Hybrid
flows, see Chapter 3, “Hierarchical Adaptive Scan Synthesis.” For more information on
applying chain count and scan I/O signal specifications to DFT partitions, see “Defining and
Configuring Partitions” on page 2-7.
set_pipeline_scan_data_configuration \
-head_pipeline_stages 3 \
-tail_pipeline_stages 3
When compressed scan cores already contain pipeline stages, the DFTMAX tool
incrementally adds top-level pipeline stages to meet the top-level pipeline depth target. This
is known as incremental pipelining. Figure 5-38 shows two compressed scan cores with a
single head and tail pipeline stage, incrementally promoted to three pipeline stages during
HASS top-level integration.
Figure 5-38 Incremental Pipeline Register Addition in HASS Shared Codec I/O Flow
set_pipeline_scan_data_configuration \
-head_pipeline_stages 3 \
-tail_pipeline_stages 3
Note the following limitations of the pipelined scan data feature when used with shared
codec I/O:
• Only compressed scan cores can be present for integration. Standard scan cores or
unstitched logic cannot be present.
• All compressed scan cores must have the same pipeline depth.
TetraMAX versions G-2012.06-SP1 and later automatically recognize pipeline registers in
shared codec I/O scan paths. TetraMAX versions G-2012.06 and earlier require the
following additional DRC settings:
set_drc -pipeline_in_compressor -forked_pipes
If you are using high X-tolerance with codec I/O sharing and pipelined scan data, the tool
inserts pipeline stages on the block-select signals to match the total head and tail pipeline
latency. Figure 5-39 shows pipeline stages added to the block-select signals in a Hybrid flow.
Figure 5-39 I/O Sharing With High X-Tolerance Codecs and Pipelined Scan Data
&B&25( */8(
+LJK;WROHUDQFH +LJK;WROHUDQFH
6KDULQJFRPSUHVVRU
For more information on the pipelined scan data feature, see “Pipelined Scan Data” on
page 5-7. For more information on the requirements of the pipelined scan data feature in the
HASS and Hybrid flows, see “Hierarchical Flows With Pipelined Scan Data” on page 5-20.
6+$5('B&25(
723
&B&25(
6KDULQJFRPSUHVVRU 6KDULQJFRPSUHVVRU
If you enable codec I/O sharing at the integration level with the -shared_inputs option, the
tool performs nested codec I/O sharing. The scan I/O connections of each core are shared
at the integration level. See Figure 5-41.
Figure 5-41 Shared-I/O HASS Integration of Shared Codec I/O Cores
6+$5('B&25(
6+$5('B&25(
723
&B&25(
6KDULQJFRPSUHVVRU 6KDULQJFRPSUHVVRU
6KDULQJFRPSUHVVRU
The values provided to the -shared_inputs and -shared_outputs options must meet
requirements that are similar to other shared codec I/O flows. The value specified for the
-shared_inputs option must be at least as wide as the widest core scan input. The value
specified for the -shared_outputs option must be equal to the widest core scan output.
If some cores have high X-tolerance capability, you must account for additional block-select
pins when specifying a value for the -shared_inputs option. The value must be at least as
large as the sum of the following values:
• The width of the widest core-level scan data input across all cores
• The sum of the block-select signals used across all shared codec I/O cores
• The number of top-level block-select signals needed, which is log2 of the number of high
X-tolerance shared codec I/O cores, rounded up to the next integer value
Figure 5-42 shows the scan data inputs needed for two shared codec I/O cores.
SHARED_CORE1 has a wider set of scan data inputs. Because there are two shared codec
I/O cores, an additional top-level block-select signal is also required. In this example, a
minimum value of 7 must be specified with the -shared_inputs option.
Figure 5-42 Shared-I/O HASS Integration of High X-Tolerance Cores
7RSOHYHOEORFNVHOHFWFRQQHFWLRQV
&RUHOHYHOVFDQGDWDLQSXWFRQQHFWLRQVVKDUHG
&RUHOHYHOEORFNVHOHFWFRQQHFWLRQVSURPRWHG
6+$5('B&25(
6+$5('B&25(
723
6KDULQJFRPSUHVVRU 6KDULQJFRPSUHVVRU
6KDULQJFRPSUHVVRU
For more information on shared codec I/O block-select signals, see “Adding High
X-Tolerance Block-Select Pins” on page 5-28.
You can only include shared-I/O cores in HASS integration runs. The Hybrid flow does not
support shared codec I/O cores.
Limitations
Note following requirements and limitations of the shared codec I/O feature:
• All codecs must have the same X-tolerance type.
• The -shared_outputs value can only be set to the fully-shared value, which is
determined by the widest codec output, or the fully unshared value, which requires the
flow described in “Specifying Shared Codec Inputs With Dedicated Codec Outputs” on
page 5-37.
• In Hybrid mode, the compressed scan chain characteristics of a shared top-level codec
must be specified with the -chain_count or -max_length options of the
set_scan_compression_configuration command. They cannot be automatically
derived using the normal chain count heuristics.
• When partitions are used, codec I/O can be shared within each top-level partition, but not
across top-level partition boundaries.
• When partitions are used, standard scan chains are balanced within each top-level
partition, but not across top-level partition boundaries.
• In flows that use subpartitions, which are the top-down flat flow and the Hybrid flow with
shared top-level codecs, the default partition cannot contain subpartitions because there
is no explicit define_dft_partition command that allows you to reference a
subpartition. You can only include subpartitions in user-defined top-level partitions.
,PSOLFLWVFDQFKDLQV ')7LQVHUWLRQ
H[WHUQDOWRWKH ,3 SHUIRUPHGLQWKH
FRUHOHYHOUXQ FRUHOHYHOUXQ
&RUHOHYHOVFDQGDWDDFFHVVSRUWV
Each implicit scan chain segment is defined in the core level run, characterized by the
following information:
• Chain name
• Chain length
• Scan clock
• Core-level scan data access ports
When implicit scan chain segments are defined, the DFTMAX tool incorporates them into
compressed scan insertion by connecting to the core-level scan data access ports. It uses
the clock and length information to construct scan chains that are optimally balanced while
respecting the chain count and clock-mixing configuration settings applied to the current
design.
Just as with any other user-defined scan segment, implicit scan chains are incorporated into
both the standard scan and compressed scan modes. Reconfiguration MUXs are added as
needed.
When implicit scan chains are used, the tool produces a partial test protocol. This protocol
is not complete and contains only a partial ScanChain definition for the implicit scan chains.
The protocol cannot be used in the TetraMAX tool directly.
• set_scan_path
Use the set_scan_group command to define a scan group for each implicit scan chain:
set_scan_group group_name
-serial_routed true -segment_length length
-access {ScanDataIn core_output_port ScanDataOut core_input_port}
-clock clock_name
[-edge rising | falling]
where
• The group_name argument is a unique user-defined scan group name.
• The chain_length argument is the chain length of the implicit scan chain.
• The clock_name argument is the scan clock which clocks the implicit scan chain. It must
be defined as a scan clock in the core-level run using the set_dft_signal command.
• The core_output_port argument is the core-level output port that externally connects
to the scan input of the implicit chain.
• The core_input_port argument is the core-level input port that externally connects to
the scan output of the implicit chain.
where
• The group_name argument is a scan group name, previous defined with the
set_scan_group command.
By default, implicit scan chains can be mixed with core-level scan cells if DFT requirements
such as scan clock mixing and chain lengths are met. To force implicit scan chains to be
standalone compressed scan chains, add the -complete true option to the
set_scan_path command. This can be useful when you have an implicit scan chain with a
mix of rising-edge and falling-edge cells that cannot be described by the set_scan_group
-edge command.
After you have defined the implicit scan chains, use the preview_dft command to report
how they will be integrated into the core-level scan structures. The following partial preview
report shows a core-level scan chain that contains an implicit scan chain and two core-level
scan cells:
dc_shell> preview_dft
...
Scan chain 'c1' contains 5 cells
Active in modes: ScanCompression_mode :
At the chip level, the implicit scan chain segments must be connected to the core-level scan
access ports. These connections, highlighted in Figure 5-44, can exist in the chip-level RTL
or they can be created using netlist editing commands. the tool does not make these
connections.
Figure 5-44 Implicit Scan Chain Connections to Core in a Chip-Level Run
,PSOLFLWVFDQFKDLQFRQQHFWLRQVPXVW
,3
H[LVWRUEHFUHDWHGLQWKHFKLSOHYHOUXQ
# create scan port that connects to the implicit scan chain’s scan input
# (which is an output from CORE)
create_port -direction out dout
# create scan port that connects to the implicit scan chain’s scan output
# (which is an input from CORE)
create_port -direction in din
# define all test signals; test clocks must be defined before being
# referenced by set_scan_group -clock
set_dft_signal -view existing_dft -type ScanMasterClock \
-timing {45 55} -port clk_st
# write out the inserted design in Verilog and Synopsys ddc format
write -format verilog -hierarchical -output vg/design_with_implicit.v
write -format ddc -hierarchical -output db/design_with_implicit.ddc
Protocol Example
The following example is taken from the ScanStructures section of the test protocol written
out by DFT Compiler. The implicit scan segment is characterized by name, scan length,
scan data in, scan data out, and the scan clock in the test protocol.
ScanStructures {
ScanChain "c1" {
ScanLength 67;
ScanIn "dout";
ScanOut "din";
ScanMasterClock "clk_st";
}
Limitations
Note the following limitations when using implicit scan chains:
• The report_scan_path command does not show the presence of implicit scan chain
segments in the core-level scan chains; use the preview_dft command before DFT
insertion instead.
• At the chip level, the implicit scan chain segments must be connected to the core-level
scan access ports; the tool does not make these connections.
• Implicit scan chains do not reliably mix with scan cells of opposite edge polarity when
edge-mixing is enabled with the set_scan_configuration -clock_mixing command.
• When implicit scan chains are used, the DFTMAX tool produces a partial test protocol.
This protocol is not complete and contains only a partial ScanChain definition for the
implicit scan chains. The protocol cannot be used in the TetraMAX tool directly.
• Post-DFT DRC is not supported when implicit scan chains are used. Use the TetraMAX
tool to perform DRC checking.
6-1
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
Overview
The scan architecture that the DFTMAX tool creates using adaptive scan technology is
called compressed scan. By default, the connection from the input and output of the
compressor/decompressor (codec) to the top-level ports or pins created by DFTMAX scan
compression is combinational. To improve the ATPG quality of results (QoR) for designs or
blocks with a limited number of top-level ports, the DFTMAX tool also supports an optional
serial connection between the codec and the top-level ports.
This chapter uses the term combinational compressed scan, or more generally, compressed
scan, to refer to compressed scan with the default combinational codec-to-top-level-ports
connection. The term serialized compressed scan refers to compressed scan that uses
serializing logic to provide a serial connection to the codec. The term serializer refers to the
logic that provides the serial connection.
For a given number of top-level scan inputs and outputs, DFTMAX compression can create
up to a maximum number of chains with full X-tolerance, using combinational compressed
scan, as shown in Table 6-1.
Table 6-1 Number of Available Compressed Scan Chains
1 1 Unavailable
2 2 4
3 3 12
4 4 32
Table 6-1 shows that the maximum number of chains with full X-tolerance is limited for low
pin-count designs and is not available for one-scan-in-one-scan-out designs. The serializer
overcomes this limitation and achieves full X-tolerance for any number of scan inputs and
outputs, including as few as 1 scan-in pin and 1 scan-out pin.
Note:
The maximum number of chains shown in Table 6-1 will be different if an on-chip clocking
(OCC) chain is present in the design.
Architecture
Figure 6-1 shows the basic serializer architecture.
Figure 6-1 Basic Serializer Architecture
Deserializer Registers
Deserializing registers are placed in the decompressor IP at the input side. These registers
load the scan input data serially and supply the data to the compressed chains.
Serializer Registers
Serializing registers are placed in compressor IP at the output side. These registers capture
data from the compressor outputs and stream the data to the scan output.
Serializer Operation
Figure 6-2 shows the serializer operation and timing diagram involving 4-bit deserializer and
serializer registers.
10 MHz, the internal clock speed reduces to 1.25 MHz. Thus, the speed of the external clock
can be increased up to S-times faster without affecting the compressed chain shift timing.
(An 80 MHz external clock would result in a 10 MHz internal shift clock.)
However, in a fully X-tolerant implementation of the compression logic, the longest path
traverses from the deserializer flip-flop output pin through the decompressor gates and then
through the compressor selector gates to the serializer flip-flop input pin. This path is shown
in red in Figure 6-3.
Figure 6-3 Serializer Architecture Without Update Stage
As the period of the serializer clock decreases, this path becomes critical because it cannot
exceed the clock period.
One way to decouple this critical path from the serializer clock timing is to insert an update
stage between the deserializer register output pins and the decompressor combinational
logic inputs, as shown in Figure 6-5. This update stage is synchronized by a clock that runs
as fast as the internal shift clock.
Figure 6-6 shows the scan shift operation with the update stage implemented.
If you use a custom STIL procedure file, keep the following in mind:
• Make sure that all scan-enable signals used by serializer clock controllers are
constrained to the inactive state in all capture procedures.
• If clock pulses are needed to initialize the internal registers whose clock pins are gated
by the serializer clock controller, make sure that the scan-enable signal is inactive
throughout the test_setup procedure. By keeping the scan-enable signal inactive, the
clock pulses needed for initialization can reach the initialization registers. Otherwise, the
initialization might not be performed properly, and you could see unexpected R-rule
violations in DRC.
Timing Paths
The following figures show the datapaths specific to the serialized compressed scan
architecture. Figure 6-7 shows the datapaths without the update stage. Figure 6-8 shows
the datapaths with the update stage. The figures demonstrate the use of the DFT-inserted
OCC controller and external clocks.
Figure 6-7 Datapath Diagrams Without Update Stage
In Figure 6-7 and Figure 6-8, the red, purple, green, and blue arrows in the waveforms and
the colored arrows in the block diagrams at the right side of the figures correspond to each
other. The arrows are focused on the paths from the decompressor block to the core and
then from the core to the compressor block. These diagrams are also useful in
understanding the role of the update stage, which relaxes the timing path from
decompressor to core to compressor.
Scan Clocks
The following sections discuss scan shift clocks when using a serializer:
• Deserializer/Serializer Update Stage Register Clocks
• Specifying a Clock for Deserializer/Serializer Registers
• Staggered Scan Clocks
• Specifying Scan Clock Ports
You can determine which clock is selected for the deserializer/serializer registers by using
the preview_dft command, as shown by the following:
Load/Unload Serializer Clock = CLK1
Load stands for the input-side deserializer registers, and Unload stand for the output-side
serializer registers.
The update stage is implemented by specifying the command
set_serialize_configuration -update_stage true. The clock for the update stage
always has the same clock source as the deserializer/serializer register clock. The
update-stage clock is a gated version of the deserializer/serializer register clock.
You can specify a clock for the deserializer/serializer registers with the command
set_serialize_configuration -serializer_clock. The clock specified with the
-serializer_clock option has to be predefined with the command set_dft_signal
-type ScanClock.
Suppose, for example, your design has five external clocks, each with different timing, as
shown the following group of set_dft_signal command:
set_dft_signal -type ScanClock -view existing_dft -timing {47 88} \
-port EXT_CLK1 -test_mode all
set_dft_signal -type ScanClock -view existing_dft -timing {50 68}
-port EXT_CLK2 -test_mode all
set_dft_signal -type ScanClock -view existing_dft -timing {55 73} \
-port EXT_CLK3 -test_mode all
set_dft_signal -type ScanClock -view existing_dft -timing {60 78} \
-port EXT_CLK4 -test_mode all
set_dft_signal -type ScanClock -view existing_dft -timing {65 83} \
-port EXT_CLK5 -test_mode all
With these specifications, the tool automatically selects EXT_CKLK1 as the deserializer/
serializer register clock. It is the only clock that can make the serializer scheme work.
Note:
For this example, even if you choose a clock other than EXT_CLK1 by using the
set_serialize_configuration -serializer_clock clock_name command, the
tool ignores your specification.
The value of the -hookup_pin option tells the tool where to insert the serializer clock
controller. Without this option specification, the clock controller would be inserted close to
the port, which might be outside the clock pad and therefore might adversely affect circuit
behavior.
User Interface
The set_scan_compression_configuration -serialize command allows you to
specify the location of the serializer logic. When you want to implement the serializer, specify
the either chip_level or core_level for the -serialize option. The default is none,
which indicates that no serialization is requested and combinational compressed scan is
implemented.
set_scan_compression_configuration ...
-serialize chip_level | core_level | none
-serializer_clock name
-update_clock name
-strobe name
-ip_inputs number
-ip_outputs number
-wide_duty_cycle true | false
To see how these options are used, refer to the script examples in the following top-down flat
flow, top-down partition flow, HASS flow, and Hybrid flow sections.
The deserializer/serializer register size is equal to the number of codec inputs and outputs.
For example, if this number is 8, then 8-bit deserializer/serializer registers are implemented.
The deserializer/serializer register is divided into some number of segments, depending on
the number specified in this command:
set_serialize_configuration -inputs number -outputs number
For example, if the number is 2, then two 4-bit deserializer/serializer segments are created.
The core-level flow is used for serialized compressed scan core creation. The serialized
compressed scan cores are integrated at the chip level in either a HASS or Hybrid flow. The
core-level flow is enabled by the command set_scan_compression_configuration
-serialize core_level. See “Serialized Compressed Scan Core Creation” on page 6-18.
The chip-level flow is used for top-down flat flow, top-down partition flow, HASS flow, Hybrid
flow, and serializer IP insertion flow. The chip-level flow is enabled by the command
set_scan_compression_configuration -serialize chip_level. See
set_scan_compression_configuration \
-xtolerance high \
-chain_count 200 \
-inputs 8 \
-outputs 8 \
-serialize core_level
set_serialize_configuration \
-inputs 1 \
-outputs 1 \
-update_stage true
create_test_protocol
dft_drc
insert_dft
Note:
With regard to command requirements for serialized compressed scan core creation,
you must specify the same value in the set_scan_configuration -chain_count
number and set_serialize_configuration -inputs number -outputs number
commands for each core-level configuration. Otherwise, you will see unexpected errors
in the HASS or Hybrid flows at the chip level.
The ports specified with the -serializer_clock and -update_clock options must be
predefined as test clocks with the set_dft_signal -type ScanClock command, and the
port specified with the -strobe option must be predefined as test data with the
set_dft_signal -type TestData command. All of these ports must be dedicated existing
test ports. The tool connects the signals to the specified ports, instead of creating them.
This error can occur because by default the tool automatically creates a serializer clock
named ser_clk and assumes it has the default timing. If you need to use nondefault clock
timing in a core-level implementation flow, you should define a clock port with nondefault
timing specified, as shown in Example 6-4.
Example 6-4 Serializer Core-Level Flow Using a Nondefault Clock
set_dft_signal -view existing_dft -type ScanClock -timing {20 30} \
-port EXT_CLK1 -test_mode all
set_dft_signal -view existing_dft -type ScanClock -timing {20 30} \
-port EXT_CLK2 -test_mode all
set_dft_signal -view existing_dft -type ScanClock -timing {20 30} \
-port MY_SER_CLK -test_mode all
set_dft_signal -view existing_dft -type ScanClock -timing {20 30} \
-port MY_UPD_CLK -test_mode all
set_dft_signal -view spec -type TestData -port MY_STROBE -test_mode all
set_serialize_configuration \
-inputs 1 \
-outputs 1 \
-serializer_clock MY_SERI_CLK \
-update_clock MY_UPD_CLK \
-strobe MY_STROBE \
-update_stage true
As in this example, when you specify a clock port with -update_clock, you should set the
same clock timing as the clock port specified with -serializer_clock, because the clock
timing becomes the same after a serializer clock controller is inserted at the top level during
a HASS or Hybrid flow.
# Serial mode
write_test_protocol -output SERIAL.spf -test_mode ScanCompression_mode
In this script example, one scan-in port and one scan-out port are created in the serial mode
and two scan-in ports and two scan-out ports are created in the standard scan mode.
Be aware that my_parallel as a parallel mode is specified with the -parallel_mode option
of the set_serialize_configuration command and my_serial as a serial mode is
specified with the -test_mode option of the set_scan_compression_configuration
command.
In this example, one scan-in port and one scan-out port are created in the serial mode, eight
scan-in and scan-out ports are created in the parallel mode, and two scan-in and scan-out
ports are created in the standard scan mode.
When the parallel mode is implemented along with the serial mode, only one codec for the
serial mode is implemented and shared with the parallel mode. Figure 6-12 shows how it is
shared.
Example 6-7 Script Example for a Top-Down Partition Flow With Serializer Chains Dedicated to
Each Partition: Two Modes
define_dft_partition partition1 -include [list U0 U1 U2 U3 U4]
current_dft_partition partition1
set_scan_configuration -chain_count 8 -clock_mixing mix_clocks
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-location U0 -xtolerance high -chain_count 200 \
-inputs 8 -outputs 8 \
-serialize chip_level
set_serialize_configuration \
-inputs 1 -outputs 1 \
-update_stage true
current_dft_partition default_partition
set_scan_configuration -chain_count 10 -clock_mixing mix_clocks
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-location U5 -xtolerance high -chain_count 300 \
-inputs 10 -outputs 10 \
-serialize chip_level
set_serialize_configuration \
-inputs 1 -outputs 1 \
-update_stage true
create_test_protocol
dft_drc
insert_dft
...
In the script shown in Example 6-7, two scan-in and scan-out ports are created in the serial
mode and 18 scan-in and scan-out ports are created in the standard scan mode, at the top
level.
Example 6-8 shows this case for three modes.
Example 6-8 Script Example for a Top-Down Partition Flow With Serializer Chains Dedicated to
Each Partition: Three Modes
define_test_mode my_regular -encoding {TM1 0 TM2 0} \
-usage scan
define_test_mode my_parallel -encoding {TM1 0 TM2 1} \
-usage scan_compression
define_test_mode my_serial -encoding {TM1 1 TM2 0} \
-usage scan_compression
current_dft_partition default_partition
set_scan_configuration -chain_count 10 -test_mode my_regular
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-base_mode my_regular \
-test_mode my_serial \
In the script shown in Example 6-8, two scan-in and scan-out ports are created in the serial
mode, and 18 scan-in and scan-out ports are created in the parallel mode, and 18 scan-in
and scan-out ports are created in the standard scan mode, at the top level.
Figure 6-14 Top-Down Partition Flow With Serializer Chains Concatenated Across Partitions
For this architecture, the following three command requirements should be observed:
• You should use the -partition all option when defining top-level scan ports with the
set_dft_signal command.
• You should not specify the -inputs and -outputs options with the
set_serialize_configuration command in any partition.
• The number of scan-in and scan-out port pairs defined by the set_dft_signal
-partition all commands should be exactly the same number as the
set_scan_configuration -chain_count number command specified in each
partition.
Example 6-9 Script Example for a Top-Down Partition Flow With Serializer Chains Concatenated
Across Partitions
set_dft_signal -view spec -type ScanDataIn -port SI_TOP -partition all
set_dft_signal -view spec -type ScanDataOut -port SO_TOP -partition all
define_dft_partition partition1 -include [list U0 U1 U2 U3 U4]
current_dft_partition partition1
set_scan_configuration -chain_count 1 -clock_mixing mix_clocks
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-location U0 -xtolerance high -chain_count 200 \
-inputs 8 -outputs 8 \
-serialize chip_level
set_serialize_configuration \
-update_stage true
current_dft_partition default_partition
set_scan_configuration -chain_count 1 -clock_mixing mix_clocks
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-location U5 -xtolerance high -chain_count 300 \
-inputs 10 -outputs 10 \
-serialize chip_level
set_serialize_configuration \
-update_stage true
create_test_protocol
dft_drc
insert_dft
...
In the script shown in Example 6-9, the commands have one pair of scan-in and scan-out
settings with the -partition all option, and a chain count value of 1 is specified with the
set_scan_configuration -chain_count command. Additionally, the -inputs number
and -outputs number options are not specified in the set_serialize_configuration
command.
This example creates one scan-in port and one scan-out port in the serial mode and the
standard scan mode at the top level.
The tool relies only on the set_dft_signal -partition all command to determine
whether you are using the concatenated serializer chain flow. Be careful to define the
set_dft_signal -partition all command for the scan-in and scan-out ports correctly;
otherwise, you might encounter unexpected errors.
Note:
Implementing a different number of scan ports between the serial mode and the standard
scan mode is not supported.
HASS Flow
You can insert serializer codecs into the core modules and then integrate the multiple cores
at the top level.
For core-level serializer insertion, use the set_scan_compression_configuration
-serialize core_level command on each core. See “Serialized Compressed Scan Core
Creation” on page 6-18. At the top level, use the set_scan_compression_configuration
You can create a parallel mode by employing user-defined test modes, but this capability is
limited to the dedicated serializer chain flow.
For the concatenated serializer chain flow, the generated test modes are
• ScanCompression_mode: serial mode
• Internal_scan: standard scan mode
Note the following limitations:
• Integrating a mix of combinational compressed scan cores and serialized compressed
scan cores is not supported.
• Having a different number of scan ports between a serial mode and a standard scan
mode is not supported.
Figure 6-15 HASS Flow With Serializer Chains Dedicated to Each Core
Example 6-10 Script Example for a HASS Flow With Serializer Chains Dedicated to Each Core
### core1
set_scan_configuration -chain_count 1 -clock_mixing mix_clocks
report_scan_configuration
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-xtolerance high \
-chain_count 150 \
-inputs 8 \
-outputs 8 \
-serialize core_level
set_serialize_configuration \
-inputs 1 \
-outputs 1 \
-update_stage true
report_scan_compression_configuration
report_serialize_configuration
create_test_protocol
dft_drc
preview_dft
insert_dft
current_test_mode ScanCompression_mode
dft_drc
current_test_mode Internal_scan
dft_drc
### core2
set_scan_configuration -chain_count 1 -clock_mixing mix_clocks
report_scan_configuration
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-xtolerance high \
-chain_count 250 \
-inputs 8 \
-outputs 8 \
-serialize core_level
set_serialize_configuration \
-inputs 1 \
-outputs 1 \
-update_stage true
report_scan_compression_configuration
report_serialize_configuration
create_test_protocol
dft_drc
preview_dft
insert_dft
current_test_mode ScanCompression_mode
dft_drc
current_test_mode Internal_scan
dft_drc
###For core-level serializer insertion,
###you have to specify the same <number> in the
###set_scan_configuration -chain_count <number> and
###set_serialize_configuration -inputs <number> -outputs <number>
###commands for each core level configuration; otherwise,
###you will see unexpected errors.
Example 6-11 shows the script for the HASS parallel mode flow. In this script example, 2
scan-in and 2 scan-out ports are created for the serial mode and the standard scan mode.
Example 6-11 Script Example for a HASS Parallel Mode Flow With Serializer Chains Dedicated
to Each Core
### core1
define_test_mode my_regular -usage scan
### core2
define_test_mode my_regular -usage scan
define_test_mode my_serial -usage scan_compression
define_test_mode my_parallel -usage scan_compression
set_scan_configuration -chain_count 1 -clock_mixing mix_clocks \
-test_mode my_regular
report_scan_configuration
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-base_mode my_regular \
-test_mode my_serial \
-xtolerance high \
-chain_count 250 \
-inputs 8 \
-outputs 8 \
-serialize core_level
set_serialize_configuration \
-test_mode my_serial \
-parallel_mode my_parallel \
-inputs 1 \
-outputs 1 \
-update_stage true
report_scan_compression_configuration
report_serialize_configuration
create_test_protocol
dft_drc
preview_dft
insert_dft
current_test_mode my_regular
dft_drc
current_test_mode my_serial
dft_drc
current_test_mode my_parallel
dft_drc
### For core-level serializer insertion,
### you have to specify the same <number> in the
### set_scan_configuration -chain_count <number> and
### set_serialize_configuration -inputs <number> -outputs <number>
### commands for each core level configuration; otherwise,
### you will see unexpected errors.
In this script example, 2 scan-in and 2 scan-out ports are created for the serial mode and the
standard scan mode. For the parallel mode, 16 scan-in and 16 scan-out ports are created.
You should not specify a number larger than the sum of the numbers specified with the
set_serialize_configuration -inputs number -outputs number command for each
core.
Note:
In the concatenated serializer chain flow, DFTMAX compression might not be able to
build an optimal length serializer chain segment.
Suppose, for example, that you have 2 scan-ins and scan-outs for a 6-bit serializer on
core1, 2 scan-ins and scan-outs for a 6-bit serializer on core2, 2 scan-ins and scan-outs
for a 4-bit serializer on core3, and that you want to create 2 scan-ins and scan-outs at the
top level.
You might expect two 8-bit serializer segments (6/2 + 6/2 + 4/2) to be created at the top
level, by concatenating core-level serializer segments. But this might not happen.
The workaround in this case is to create 6 scan-ins and scan-outs for core1 and core2,
and 4 scan-ins and scan-outs for core3 at the serializer core-level creation. This would
mean that each serializer segment is 1-bit. The tool would then have more flexibility to
create 8-bit serializer segments, which is the optimal length at the top level.
Hybrid Flow
If you have performed multiple core-level implementations but still have some user-defined
logic at the top level, you can apply the Hybrid flow. The Hybrid flow provides core integration
and serializer insertion for the user-defined logic at the same time at the top level.
To create a core implemented with a serializer codec, use the
set_scan_compression_configuration -serialize core_level command at each
core level. At the top level, specify the set_scan_compression_configuration
-serialize chip_level -hybrid true command. This enables the tool to insert a
serializer clock controller and a serializer codec for the top-level user-defined logic and then
integrate all the serializer cores.
The Hybrid flow does not support a user-defined test mode. You cannot have both a parallel
mode and a serial mode. Only a serial mode and a standard scan mode are supported
together. The generated test modes are
• ScanCompression_mode: serial mode
• Internal_scan: standard scan mode
Figure 6-17 shows the Hybrid flow diagram. Example 6-12 shows the script for this case.
### core2
set_scan_configuration -chain_count 2 -clock_mixing mix_clocks
report_scan_configuration
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-xtolerance high \
-chain_count 600 \
-inputs 12 \
-outputs 12 \
-serialize core_level
set_serialize_configuration \
-inputs 2 \
-outputs 2 \
-update_stage true
report_scan_compression_configuration
report_serialize_configuration
create_test_protocol
preview_dft
dft_drc
insert_dft
current_test_mode ScanCompression_mode
dft_drc
current_test_mode Internal_scan
dft_drc
### For core-level serializer insertion,
###you have to specify the same <number> in the
###set_scan_configuration -chain_count <number> and
###set_serialize_configuration -input <number> -output <number>
###commands for each core level configuration; otherwise,
###you will see unexpected errors.
For the Hybrid flow, you set the numbers by using the set_scan_configuration
-chain_count number and the set_serialize_configuration -inputs number
-outputs number commands at the top level as follows:
Serializer IP Insertion
When serialized compressed scan is inserted, the tool places the deserializer register inside
the decompression MUX block, and it places the serializer register inside the XOR
compression tree block. This architecture, shown in Figure 6-18, keeps the scan
compression logic together and minimizes the top-level routing requirements.
6, 'HVHULDOL]HU 'HFRPSUHVVRU
EORFN
'HFRPSUHVVLRQ08;
+LJKIUHTXHQF\
VHULDOVFDQ
SDWKV
;25FRPSUHVVLRQWUHH
&RPSUHVVRU
62 6HULDOL]HU EORFN
However, depending on layout characteristics, the long routes from the top-level scan I/O
connections to the serialization logic can reduce the maximum operating frequency for these
serial scan paths.
The DFTMAX tool provides a feature called serializer IP insertion that separates the
deserializer and serializer registers, collectively known as the serializer IP, from the
combinational codec logic. This architecture, shown in Figure 6-19, places the serializer IP
logic separately so that the layout characteristics of the high-frequency serial scan paths can
be improved.
Figure 6-19 Serializer IP Insertion Architecture
6, 'HVHULDOL]HU
'HFRPSUHVVLRQ08; 'HFRPSUHVVRU
EORFN
6HULDOL]HU,3EORFN
&RPSUHVVRU
;25FRPSUHVVLRQWUHH
EORFN
62 6HULDOL]HU
Serializer IP insertion can also be applied during HASS and Hybrid integration of cores that
already have combinational compressed scan inserted, as shown in Figure 6-20. The tool
inserts and connects the deserializer registers to the existing core-level decompressors, and
inserts and connects the serializer registers to the existing core-level compressors. In
addition to improving layout characteristics, this flow can be used to reduce the scan pin
requirements for existing compressed scan cores.
6, 'HVHULDOL]HU
6HULDOL]HU
8BFRUH FORFN 8BFRUH
FRQWUROOHU
62 6HULDOL]HU
These options specify the number of top-level scan ports allocated to the serializer IP for
each object. They replace the -inputs and -outputs options used for normal serializer
insertion. The object_name argument can be a design name, partition name, or
compressed scan core instance name. The input and output port counts must be equal for
each object. If multiple objects exist in the design, multiple object name and port count pairs
can be specified.
If an update stage register is enabled with the -update_stage true option of the
set_serialize_configuration command, the tool includes the update stage register in
the serializer IP block.
Example 6-13 shows the commands used to identify the core shown in Figure 6-20 on
page 6-41.
Example 6-13 Specifying Serializer IP Insertion for Compressed Scan Cores
set_serialize_configuration \
-ip_inputs {U_core_1 1} \
-ip_outputs {U_core_1 1}
You can use the set_dft_location command to specify the insertion locations for the
serializer IP logic and the codec logic:
set_dft_location -include {SERIAL_REG} ser_IP_instance_name
set_dft_location -include {DFTMAX} codec_instance_name
If the specified hierarchy level does not exist, the tool creates it during DFT insertion. For
more information, see “Specifying a Location for DFT Logic Insertion” on page 5-2.
When serializer IP insertion is enabled, the preview_dft and insert_dft commands issue
messages about each serializer IP block:
Inserting Load Deserializer IP
top_U_core_1_U_deserializer_ScanCompression_mode
for mode ScanCompression_mode
Number of inputs = 1
Maximum size per input = 3
Inserting Unload Serializer IP
top_U_core_1_U_serializer_ScanCompression_mode
for mode ScanCompression_mode
Number of outputs = 1
Maximum size per output = 3
set_scan_configuration \
-chain_count 1 -clock_mixing mix_clocks
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-chain_count 6 \
-inputs 3 -outputs 3 \
-serialize chip_level
set_serialize_configuration \
-ip_inputs {top_design 1} \
-ip_outputs {top_design 1}
WRSBGHVLJQ 'HVHULDOL]HU
6HULDOL]HU
FORFN
FRQWUROOHU
6HULDOL]HU
In this example, one scan-in port and one scan-out port are created for the serial mode. The
chain count value of one results in the same scan port count in both the standard scan mode
and the serial mode.
# partition1
define_dft_partition partition1 -include {TOP_UDL_1 TOP_UDL_2}
current_dft_partition partition1
set_scan_configuration \
-chain_count 1 -clock_mixing mix_clocks
set_scan_compression_configuration \
-chain_count 6 \
-inputs 2 -outputs 2
set_serialize_configuration \
-ip_inputs {partition1 1} -ip_outputs {partition1 1}
# default_partition
current_dft_partition default_partition
set_scan_configuration \
-chain_count 1 -clock_mixing mix_clocks
set_scan_compression_configuration \
-chain_count 6 \
-inputs 3 -outputs 3
set_serialize_configuration \
-ip_inputs {default_partition 1}
-ip_outputs {default_partition 1}
GHIDXOWBSDUWLWLRQ SDUWLWLRQ
6HULDOL]HU
FORFN
FRQWUROOHU
6HULDOL]HU 6HULDOL]HU
In this example, the tool creates one scan-in port and one scan-out port for each partition,
for a total of two scan ports used in the serialized scan and standard scan modes.
• The core must have symmetrical codec scan I/O ports, where the values provided to the
-inputs and -outputs options of the set_scan_compression_configuration
command are equal.
• All scan chains in the core are compressed by a codec.
• No other test modes are defined except Internal_scan and ScanCompression_mode.
• No pipelined scan data is implemented inside the core.
• The core must be provided as a .ddc file or a test model file, so that test model
information is available for the scan compression logic.
In Example 6-16, serializer IP insertion is performed for core instances U_core_1 and
U_core_2.
Example 6-16 Inserting Serializer IP Around Cores in a HASS Flow
set_dft_configuration -scan_compression enable
set_scan_configuration -chain_count 3 -clock_mixing mix_clocks
set_scan_compression_configuration \
-integration_only true \
-serialize chip_level
set_serialize_configuration \
-ip_inputs {U_core_1 1 U_core_2 2} \
-ip_outputs {U_core_1 1 U_core_2 2}
'HVHULDOL]HU 'HVHULDOL]HU
8BFRUHB 8BFRUHB
6HULDOL]HU
FORFN
FRQWUROOHU 6HULDOL]HU 6HULDOL]HU
In this example, the tool creates three scan-in ports and three scan-out ports for the serial
scan mode, one pair for U_core_1 and two pairs for U_core_2. The number specified with
the set_scan_configuration -chain_count command at the top level for the standard
scan mode should be large enough to satisfy the total number of serial mode scan ports
across all cores.
&25( &25(
6HULDOL]HU
FORFN
FRQWUROOHU 6HULDOL]HU 6HULDOL]HU 6HULDOL]HU
You can obtain the decompressor and compressor names using one of the following
methods:
• Use the list_test_models -compressors command at the top level before DFT
insertion.
• Look in the CompressorStructures section of a core-level ASCII CTL model file.
• Look in the CompressorStructures section of a core-level STIL procedure file that is
generated for the scan compression mode.
core2 /home/user/core2.db
Codecs:
core2_P1_U_decompressor_ScanCompression_mode
core2_P2_U_decompressor_ScanCompression_mode
core2_P1_U_compressor_ScanCompression_mode
core2_P2_U_compressor_ScanCompression_mode
top /home/user/top.db
Codecs:
The report from the list_test_models -compressors command shows the list of designs
with CTL model information, along with the codec names defined in each CTL model.
However, the -ip_inputs and -ip_outputs options require core instance names, not
design names. To convert a design name to a list of instances, use the get_references
command. For example,
dc_shell> get_references core2
{CORE2}
Example 6-19 shows how the decompressor and compressor names are provided in an
example CompressorStructures block, contained in an ASCII CTL model file or STIL
procedure file.
Example 6-19 Decompressor and Compressor Names in a CompressorStructures Block
CompressorStructures {
Compressor "core2_P1_U_decompressor_ScanCompression_mode" {
...
}
Compressor "core2_P2_U_decompressor_ScanCompression_mode" {
...
}
Compressor "core2_P1_U_compressor_ScanCompression_mode" {
...
}
Compressor "core2_P2_U_compressor_ScanCompression_mode" {
...
}
}
8VHUGHILQHG
8BFRUHB 8BFRUHB
ORJLF
6HULDOL]HU
FORFN
FRQWUROOHU
6HULDOL]HU 6HULDOL]HU 6HULDOL]HU
In this example, the script assigns a single scan-in and scan-out port to the top-level
serializer IP and codec by referencing the top-level design name with the -ip_inputs and
-ip_outputs options. The tool creates one scan-in and scan-out port for the serialized IP
inserted around U_core_1, and it creates two scan-in and scan-out ports for the serialized
IP inserted around U_core_2. There are a total of four scan connections in the serialized
scan mode.
GHIDXOWBSDUWLWLRQ SDUWLWLRQ
8BFRUHB 8BFRUHB
6HULDOL]HU
FORFN
FRQWUROOHU
6HULDOL]HU 6HULDOL]HU 6HULDOL]HU 6HULDOL]HU
Example 6-21 shows a Hybrid flow with top-level partitions script for this scenario.
Example 6-21 Script for a Serializer Hybrid Flow With Top-Level Partitions
# global settings
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-hybrid true \
-serialize chip_level
# partition1
define_dft_partition partition1 -include {TOP_UDL_1 TOP_UDL_2}
current_dft_partition partition1
set_scan_configuration \
-chain_count 1 -clock_mixing mix_clocks
set_scan_compression_configuration \
-chain_count 6 \
-inputs 5 -outputs 5
set_serialize_configuration \
-ip_inputs {partition1 1} -ip_outputs {partition1 1}
# default partition
current_dft_partition default_partition
set_scan_configuration \
-chain_count 3 -clock_mixing mix_clocks
set_scan_compression_configuration \
-chain_count 6 \
-inputs 5 -outputs 5
set_serialize_configuration \
-ip_inputs {default_partition 1 U_core_1 1 U_core_2 1} \
-ip_outputs {default_partition 1 U_core_1 1 U_core_2 1}
create_test_protocol
dft_drc
insert_dft
In this flow, the compressed scan cores must exist in the default partition. As a result, they
are configured by the set_serialize_configuration command applied to the default
partition. The chain count applied to the default partition with the set_scan_configuration
-chain_count command includes both the compressed scan cores and the new top-level
codec.
8&
8&
8BFRUH
These uncompressed external scan chains are specified at the core level with the
set_scan_path command, as shown in Example 6-22.
In Example 6-23, the Hybrid flow is used to insert serializer IP around a compressed scan
core, and to insert a full serialized codec around the top-level user-defined logic. The tool
includes the external chains in U_core as part of the user-defined logic.
Example 6-23 Incorporating External Chains Into Serializer IP Hybrid Integration
set_scan_configuration \
-chain_count 3 -clock_mixing mix_clocks
set_dft_configuration -scan_compression enable
set_scan_compression_configuration \
-hybrid true \
-serialize chip_level \
-chain_count 9 \
-inputs 3 -outputs 3
set_serialize_configuration \
-ip_inputs [U_core 2 top_design_name 1] \
-ip_outputs [U_core 2 top_design_name 1]
'HVHULDOL]HU 'HVHULDOL]HU
8VHUGHILQHG
8&
8&
8BFRUH
ORJLF
6HULDOL]HU
FORFN
FRQWUROOHU 6HULDOL]HU 6HULDOL]HU
If you are inserting serializer IP using the Hybrid flow with partitions, all external chains are
placed in the default partition by default. If you want to incorporate an external chain into a
different partition, you can include scan chain names in the partition definitions:
define_dft_partition P1 -include {top_UDL1 U_core/UC1}
define_dft_partition P2 -include {top_UDL2 U_core/UC2}
Figure 6-29 shows how these commands allocate the external chains between the two
partitions.
Figure 6-29 Allocating External Chains to Partitions in the Hybrid Serializer IP Flow
8&
3 8BFRUH 3
6HULDOL]HU
FORFN
FRQWUROOHU
6HULDOL]HU 6HULDOL]HU 6HULDOL]HU
Note:
Scan chain names are only supported in partition definitions when this flow is being
used.
For more information on external chains, see “Excluding Scan Chains From Scan
Compression” on page 2-35.
'HVHULDOL]HU 'HVHULDOL]HU
6HULDOL]HU 6HULDOL]HU
&RPSUHVVHGVFDQPRGH 6WDQGDUGVFDQPRGH
In the Hybrid flow with serializer IP insertion, core-level scan segments can be mixed with
top-level scan cells to achieve optimal balancing. Figure 6-31 shows the compressed scan
and standard scan chains for a design in the Hybrid serializer IP insertion flow.
Figure 6-31 Standard Scan Chains in the Hybrid Serializer IP Insertion Flow
'HVHULDOL]HU 'HVHULDOL]HU
&B&25( &B&25(
6HULDOL]HU 6HULDOL]HU
&RPSUHVVHGVFDQPRGH 6WDQGDUGVFDQPRGH
Standard scan chain concatenation is not needed for cores that are already serialized
because such a core’s standard scan mode is architected to use the same scan I/O
resources as its serialized compressed scan mode.
Limitations
The serializer IP insertion feature has the following limitations:
• For each combinational compressed scan core, the number of scan inputs and scan
outputs must be the same for the standard scan mode and the compressed scan mode.
• All cores must have the same X-tolerance type. A mix of default X-tolerance and high
X-tolerance is not supported.
• Multiple user-defined compressed scan test modes are not supported at the core level or
the top level.
• Pipeline scan data registers are not supported at the core level.
• A mix of combinational compressed scan cores and serialized compressed scan cores
is not supported.
• Serializer chains cannot be concatenated across cores at the top level.
• There is no support for core-specific serializer IP insertion.
• The number of serializer scan ports specified with the -ip_inputs and -ip_outputs
options must be less than the number of combinational codec inputs and outputs,
respectively.
• Lock-up latch insertion is not supported between the serializer IP and core scan cells.
❍ If scan clocks exist inside the compressed scan core that differ from the serializer
register clock, you should insert lock-up latches inside the compressed scan core.
Insert them between the decompressor outputs and first scan elements and between
the last scan elements and the compressor inputs. This must be done manually. The
tool cannot modify DFT-inserted cores during serializer IP insertion.
Wide duty cycle support makes the clock duty cycle close to 50 percent, resolving these
problems.
To enable the wide duty cycle support feature, use the following option setting:
set_serialize_configuration -wide_duty_cycle true
After the option is accepted, the preview_dft command shows the following information
message:
Information: Implementing Wide Duty Cycle Serializer Clock Controller.
Block Diagram
Figure 6-33 shows the block diagram when you implement the wide duty cycle.
When the -wide_duty_cycle true option is specified, the tool uses the following
behaviors:
• The update stage is always inserted in the decompressor IP, and the following
information message appears:
Information: the update stage will be enabled in presence of wide duty
cycle.
• Lock-up latches are always inserted in the decompressor IP between the deserializer
registers and the update stage registers. Note that lock-up latch insertion is also
available when the update stage is inserted without the wide duty cycle support enabled
by using the following variable:
set_app_var test_elpc_lul_in_deserializer true
synchronizing stage registers is the same as the clock of the update stage registers
inserted in the decompressor IP.
• No clock-gating logic is used in the serializer clock controller.
Timing Diagram
Figure 6-34 shows the timing diagram for a 4-bit serializer, indicating how it behaves.
When you have a 7-bit serializer with one scan-in port and one scan-out port, the length of
the serializer segment is 7. With the wide duty cycle enabled, the clock is on for 3 external
clock cycles and off for 4 external clock cycles, as illustrated in the Figure 6-35.
Figure 6-35 Timing Diagram of Default Duty Cycle and Wide Duty Cycle Clock
Table 6-2 provides a table that shows the clock width based on the length of the serializer
segment.
Table 6-2 Wide Duty Cycle Clock Width Based on Serializer Segment Length
2 1 (1)
3 1 (2)
4 2 (2)
5 2 (3)
6 3 (3)
7 3 (4)
8 4 (4)
9 4 (5)
10 5 (5)
Note the following when you use the wide duty cycle feature in the HASS flow:
• All serializer cores must be implemented with the -wide_duty_cycle true option.
• The option -wide_duty_cycle true must also to be set at the top level.
set_serialize_configuration \
-inputs 1 \
-outputs 1 \
-wide_duty_cycle true
Note the following when you use the wide duty cycle feature in the Hybrid flow:
• All serializer cores and the top-level serializer must be implemented with the option
setting -wide_duty_cycle true.
This waveform table holds forced values at the state elements for multiple external clock
cycles so that scan cells driven by both the leading and trailing edges of the generated wide
duty cycle clocks can capture the values. Figure 6-36 shows how the waveform is used.
This waveform example uses a 4-bit serializer. The clock-on for the internally generated
wide duty cycle clock is equal to two external clock cycles. The forced value is held across
three external clock cycles. Regardless of whether the scan cells are driven by the leading
or trailing edge of the generated wide duty cycle clock, the scan cells can capture the forced
value.
However, if you make both the external clocks wide and the trailing edge close to the end of
the cycle, the trailing edge of the generated wide duty cycle clock might cross into the
capture window due to internal delay on the clock line. This potential timing issue is shown
in Figure 6-37.
If this timing problem occurs, the shift operation cannot perform properly on scan cells
triggered by the trailing edge of the generated wide duty cycle clock. The problem is
independent of pattern format. Therefore, you should plan carefully to avoid this problem.
Limitations
Note the following limitation with the wide duty cycle feature:
• Staggered clock is not supported.
For more information, see SolvNet article 035708, “What Does the test_ate_sync_cycles
Variable Do?”.
Figure 6-39 Serializer Clock Controller With Multiple OCC Controllers, Alternate Architecture
This alternate architecture is supported in both the top-down flat flow and the top-down
partition flow. This architecture might lead to long wires connecting the external clock port to
the slow_clk pin of each OCC controller, which can produce congestion and timing issues
when the external clock frequency is high
For more information on the OCC insertion flow, see the DFT Compiler Scan User Guide.
As seen in these two figures, the serial mode behavior is the same as the parallel mode
behavior during capture, while the scan-enable signal (scan_en) is low. For the shift mode,
the internally generated clocks need to drive the scan cells. Since this flow uses an inserted
OCC controller, the internally generated scan clock drives the OCC controller slow_clk
input pin. Then, one clock pulse after capture is consumed inside the OCC controller, the
output of the OCC controller drives the scan cells.
Chip-level ATPG is performed on designs completed with the top-down flat flow, top-down
partition flow, HASS flow, or Hybrid flow. Core-level ATPG is performed on a core
implemented with the set_scan_compression_configuration -serialize core_level
command, which is normally integrated later with other cores by using a HASS or Hybrid
flow.
Chip-level and core-level test protocols are somewhat different, but the TetraMAX tool
identifies them and performs ATPG accordingly without requiring any special commands or
guidance.
The following topics are covered in this section:
• Simulation and Patterns
• STIL Procedure File
• Debugging TetraMAX Serializer DRC Errors
• Pattern Translation
• Known Issues
Pattern Validation
Table 6-3 and Table 6-4 provide the support matrix tables for the serial mode.
Table 6-3 Pattern Validation Support: Verilog DPV
Verilog DPV
MAX Testbench
load_unload Procedure
For the chip-level STIL procedure file, the usage of the load_unload procedure, including
shift and test_setup, is identical to the parallel mode as well as combinational scan
compression mode. Some other UserKeywords sections used by the TetraMAX tool are
provided. An additional sequence provided in the load_unload and shift procedures is only
for the core-level STIL procedure file.
Example 6-25 shows a STIL procedure file example that does not include an update stage.
Example 6-25 STIL Procedure File Example Without an Update Stage
"_clk" = '"ext_clk1" + "ext_clk2" + "ser_clk"';
...
"load_unload" {
W "_default_WFT_";
ActiveScanChains core_group;
C {
"dat1[0]" = N;
...
}
"ScanCompression_mode_pre_shift" : V { -- (1)
"_clk" = 00P;
"_si" = #;
"_so" = #;
"strobe" = 0;
"test_se" = 1;
}
Shift {
V { -- (2)
"_clk" = 00P;
"_si" = #;
"_so" = #;
"strobe" = 0;
}
V { -- (3)
"_clk" = 00P;
"_si" = #;
"_so" = #;
}
V { -- (4)
"_clk" = 00P;
"_si" = #;
"_so" = #;
}
V { -- (5)
"_clk" = PPP;
"_si" = #;
"_so" = #;
"strobe" = 1;
}
}
}
This STIL procedure file example defines a configuration with one scan-in and one scan-out,
and a 4-bit deserializer/serializer registers without an update stage. The vector (1) named
“ScanCompression_mode_pre_shift,” which is outside the shift procedure, uses the first
serializer clock (“ser_clk”) to load the first internal shift data into the deserializer registers.
The vector (4), which is the third vector of the shift procedure, completes loading the first
internal shift data into the deserializer registers. At vector (5), internal scan clocks (“ext_clk1”
and “ext_clk2”) are pulsed, and the first internal shift data that has been placed on the
deserializer registers is transferred to the compressed chains; also, the second internal shift
data starts loading into the deserializer registers. The “ScanCompression_mode_pre_shift”
vector is applied only to the first vector, and then the shift procedure is repeatedly applied as
many times as the number of compressed chain shifts per pattern. The scan-out measure
also takes place with each vector.
If the number of compressed chain shifts is 5, the actual vector sequence in a single pattern
is
(1) (2)(3)(4)(5) (2)(3)(4)(5) (2)(3)(4)(5) (2)(3)(4)(5) (2)(3)(4)(5)
and the capture takes place.
Example 6-26 shows a STIL procedure file example that includes an update stage.
Example 6-26 STIL Procedure File Example With an Update Stage
"_clk" = '"ext_clk1" + "ext_clk2" + "ser_clk" + "update_clk"';
...
"load_unload" {
W "_default_WFT_";
ActiveScanChains core_group;
C {
"dat1[0]" = N;
...
"ScanCompression_mode_pre_shift" : V { -- (1)
"_clk" = 00P0;
"_si" = #;
"_so" = #;
"strobe" = 0;
"test_se" = 1;
}
V { -- (2)
"_clk" = 00P0;
"_si" = #;
"_so" = #;
}
V { -- (3)
"_clk" = 00P0;
"_si" = #;
"_so" = #;
}
V { -- (4)
"_clk" = 00P0;
"_si" = #;
"_so" = #;
}
V { -- (5)
"_clk" = 00PP;
"_si" = #;
"_so" = #;
}
Shift {
V { -- (6)
"_clk" = 00P0;
"_si" = #;
"_so" = #;
"strobe" = 0;
}
V { -- (7)
"_clk" = 00P0;
"_si" = #;
"_so" = #;
}
V { -- (8)
"_clk" = 00P0;
"_si" = #;
"_so" = #;
}
V { -- (9)
"_clk" = PPPP;
"_si" = #;
"_so" = #;
"strobe" = 1;
}
}
}
If you implement the update stage, you see additional vectors only at the beginning of each
pattern. The first serializer clock (“ser_clk”) is pulsed at the vector (1). The vector (4)
completes loading the first internal shift data into deserializer registers. At the vector (5), the
first internal shift data that was placed on the deserializer registers is transferred to the
update stage. At the same time, the second shift data starts loading into the deserializer
registers. Then, vector (8) completes loading the second internal shift data into the
deserializer register. At vector (9), taking place at the same time, the first internal shift data
that has been on the update stage is transferred to the compressed chains, the second
internal shift data that has been on the deserializer registers is passed on to the update
stage, and the third internal shift data starts loading into the deserializer registers. If the
number of compressed chain shifts is 5, the actual vector sequence in a single pattern is
(1) (2)(3)(4)(5) (6)(7)(8)(9) (6)(7)(8)(9) (6)(7)(8)(9) (6)(7)(8)(9) (6)(7)(8)(9)
and the capture takes place.
UserKeywords SerializerStructures
For the serial mode, “UserKeywords SerializerStructures” is introduced. Some of its
parameters are used during DRC.
Example 6-27 Chip-Level STIL Procedure File Example Without an Update Stage
UserKeywords SerializerStructures CompressorStructures;
SerializerStructures {
InternalShiftStart 5;
UnloadDataStart 6;
ExternalCyclesPerShift 4;
LoadSerializer "U0/U_deserializer_my_serial" {
Length 4;
ActiveScanChains load_group; }
UnloadSerializer "U0/U_serializer_my_serial" {
Length 4;
ActiveScanChains unload_group;
}
}
Figure 6-42 Timing Diagram for SerializerStructures for Chip-Level STIL Procedure File
Example Without an Update Stage
Example 6-28 Chip-Level STIL Procedure File Example With an Update Stage
UserKeywords SerializerStructures CompressorStructures;
SerializerStructures {
InternalShiftStart 9;
UnloadDataStart 10;
ExternalCyclesPerShift 4;
LoadSerializer "U0/U_deserializer_my_serial" {
Length 4;
ActiveScanChains load_group;
}
UnloadSerializer "U0/U_serializer_my_serial" {
Length 4;
ActiveScanChains unload_group;
}
}
In addition to the configuration shown in Example 6-28, if pipelined scan data is used (for
example, two stages of head pipeline), the InternalShiftStart is delayed by another two
cycles, from 9 to 11. If two stages of tail pipeline are also used, UnloadDataStart is delayed
by two cycles, from 12 to 14. Example 6-29 and Example 6-30 show these two cases.
Example 6-29 SerializerStructures Example With Update Stage and Head Pipeline Registers
UserKeywords SerializerStructures CompressorStructures;
SerializerStructures {
InternalShiftStart 11;
UnloadDataStart 12;
ExternalCyclesPerShift 4;
SerializerInputPipelineStages 2;
LoadSerializer "U0/U_deserializer_my_serial" {
Length 4;
ActiveScanChains load_group;
}
UnloadSerializer "U0/U_serializer_my_serial" {
Length 4;
ActiveScanChains unload_group;
}
}
Example 6-30 SerializerStructures Example With Update Stage and Head and Tail Pipeline
Registers
UserKeywords SerializerStructures CompressorStructures;
SerializerStructures {
InternalShiftStart 11;
UnloadDataStart 14;
ExternalCyclesPerShift 4;
SerializerInputPipelineStages 2;
SerializerOutputPipelineStages 2;
LoadSerializer "U0/U_deserializer_my_serial" {
Length 4;
ActiveScanChains load_group;
}
UnloadSerializer "U0/U_serializer_my_serial" {
Length 4;
ActiveScanChains unload_group;
}
}
When you use the wide duty cycle feature, the “UserKeywords SerializerStructures” section
of the STIL procedure file shows at which external clock cycle the leading and trailing edges
of the internally generated scan shift clocks occur. Example 6-31 provides an example with
this information included.
Example 6-31 Chip-Level STIL Procedure File Example With Wide Duty Cycle Feature
UserKeywords SerializerStructures CompressorStructures;
SerializerStructures {
InternalShiftStartLeadingEdge 12;
InternalShiftStartTrailingEdge 15;
UnloadDataStart 16;
ExternalCyclesPerShift 7;
LoadSerializer "U0/U1_deserializer_my_serial" {
Length 7;
ActiveScanChains load_group;
}
UnloadSerializer "U0/U1_serializer_my_serial" {
Length 7;
ActiveScanChains unload_group;
}
}
This example shows that the leading edge occurs at the 12th cycle and the trailing edge at
the 15th cycle. Figure 6-43 shows the corresponding timing diagram.
Figure 6-43 Correspondence Between SerializerStructures and Clock Creation
Compressor Structures
Figure 6-44 and Figure 6-45 contrast the compressor structures of the serial and parallel
modes.
This comparison assumes the architecture represented in Figure 6-46. TetraMAX ATPG
assigns indexes 0 1 2 ... to the deserializer and serializer registers from the scan-out side.
The scan-in port SI_0 in parallel mode corresponds to the deserializer register bit 0 in serial
mode. The scan-out port SO_0 in parallel mode corresponds to the serializer register bit 0
in serial mode.
ClockStructures
The ClockStructures section prints the output pins of the internally generated scan clocks,
as shown in Example 6-33:
Example 6-33 ClockStructures Example for a STIL Procedure File
UserKeywords DontSimulate;
ClockStructures {
PLLStructures “serializer_init_shift_clocks” {
Clocks {
“u_clockcntrl/wide_clkgen/C75/U1/Z” PLLShift {
OffState 0;
}
“u_clockcntrl/wide_clkgen/C75/U2/Z” PLLShift {
OffState 0;
}
}
}
}
This information about internally-generated clocks can help TetraMAX DRC. You can
prevent the write_test_protocol command from including this information in the SPF by
setting the test_serialize_put_fsm_clock_output variable to false.
The scan cells of the compressed scan chains must be clocked as described in Figure 6-2
on page 6-6. This error indicates that the scan cells are clocked at incorrect cycles.
To debug the issue, apply the following method:
DRC-T> set_drc -store_initial_shifts
DRC-T> set_pindata -shift
DRC-T> run_drc -patternexec my_serial
DRC-T> (gui_start)
When you open the TetraMAX GSV, look at the cell 19806. Figure 6-47 shows the pin data.
Figure 6-47 Pin Data Example for a Scan Cell With an R37 Error
You can find the clock being pulsed in every shift cycle at the CP pin of the scan cell, which
is not correct. Refer to the SerializerStructures section in your SPF to determine the
correct clocking. If you see the following in the SerializerStructures section:
UserKeywords SerializerStructures CompressorStructures;
SerializerStructures {
InternalShiftStart 14;
UnloadDataStart 17;
ExternalCyclesPerShift 6;
SerializerInputPipelineStages 1;
SerializerOutputPipelineStages 2;
LoadSerializer
"my_top_U_deserializer_ScanCompression_mode" {
Length 4;
ActiveScanChains load_group;
}
UnloadSerializer
"my_top_U_serializer_ScanCompression_mode" {
Length 4;
ActiveScanChains unload_group;
}
LoadSerializer "I_coreA/U_deserializer_ScanCompression_mode" {
Length 6;
ActiveScanChains "coreA_load_group";
}
UnloadSerializer "I_coreA/U_serializer_ScanCompression_mode" {
Length 6;
ActiveScanChains "coreA_unload_group";
}
}
then the first clocking for compressed scan chains is at the 14th cycle. You can check this
with the value of the InternalShiftStart. If clocking exists in some other cycles, the
clocking scheme is incorrect.
Figure 6-48 shows the pin data example on one of the scan cells with the correct clocking
behavior.
Figure 6-48 Pin Data Example for a Scan Cell With Correct Clocking
Verify that the clock pulse happens at 14th cycle, which is consistent with the
InternalShiftStart value in the SPF.
As a reference, in the following pin data example shown in Figure 6-49, notice what happens
to one of the deserializer registers, the serializer registers, serializer FSM counter, and
update stage registers, when you have the same SerializerStructures as the serializer
structure just described.
Figure 6-49 Pin Data Example for Some Cells of the Serializer Logic
The first cell is one of the serializer registers at the output side. The second cell is one of the
deserializer registers at the input side. The third cell is one of the serializer FSM counter
registers. Those registers need to have the external clock pulses from the primary port
without serializer clock gating. The fourth cell is one of the update stage registers. The clock
pulses appear on the registers at the 8th cycle and 14th cycles, which can be explained in
the following way:
The number of head pipeline registers is 1 and the maximum length of the serializer
registers is 6. To load scan data fully to the deserializer registers, 6+1=7 cycles are required.
Then at the next cycle, which is 8th cycle, the scan data that has been loaded into the
deserializer registers is transferred to the update stage registers. This is the reason why the
8th cycle on the update register has a clocking. The next scan data is also serially loaded
through the pipeline register to the deserializer registers, consecutively. Since the length of
the serializer registers is 6, 8+6=14 is the next clocking for the update stage to obtain the
second scan data. Also, at the 14th cycle, the data transfers from the update registers to the
compressed scan chains.
These examples show you how to read the pin data, using the set_drc
-store_initial_shifts command. After you apply this command, TetraMAX DRC does
not pass, but it does show you the stored shift data. You need to reset using the set_drc
-nostore_initial_shifts command after you have completed your debug to proceed in
the same session.
To determine the cell names of the reported primitives for the first DRC error, use the
report_primitives command on the two reported primitive IDs:
DRC-T> report_primitives 192417
abc_top_U_decompressor_abc/serial_reg_4_ (192417) DFF (DFF_X1)
--- I (TIE_0)
--- I (TIE_0)
!CK I 88837-u_clockcntrl/U14/X
--- I
159-
Q O
178252-/abc_top_U_decompressor_abc/serial_reg_3_/D
178253-/abc_top_U_decompressor_abc/U7/A ...
DRC-T> report_primitives 185880
xyz_dig_u/xyz__u/shiftreg_reg_47_ (185880) DFF (DFF_X2)
--- I (TIE_0)
!RD P I 143-xyz_dig_u/xyz__u/U83/X
CK I 156-xyz_dig_u/gpio_pads_ctrl_u/svn_buf_s_16_u2/X
--- I 88745-
--- O 88743-
88745-
The reported instance names show that the primitive ID 192417 represents the correct
serializer register. Next, you must identify the serializer index for this primitive. Since the R36
violations are issued on the deserializer side, which is a compressor, you must run the
report_serializers -load -verbose command. For this example, the output is as
follows:
DRC-T> report_serializers -load -verbose
------------------------------------------------ ------ ------
name type length
------------------------------------------------ ------ ------
abc_top_U_deserializer_abc load 5
------ ----- ---------------- ----------------- ------
Scanin Index Serializer Index Parallel Outputs invert
------ ----- ---------------- ----------------- ------
test_si1 0 0 xyz_dig_u/xyz__u/shiftreg_reg_43_ no
test_si1 1 1 xyz_dig_u/xyz__u/shiftreg_reg_44_ no
test_si1 2 2 xyz_dig_u/xyz__u/shiftreg_reg_45_ no
test_si1 3 3 xyz_dig_u/xyz__u/shiftreg_reg_46_ no
test_si1 4 4 xyz_dig_u/xyz__u/shiftreg_reg_47_ no
From this report, you can determine that primitive ID 192417 corresponds to the serializer
index 4, as the other primitive ID 185880 matches the load register for serializer index 4. You
can repeat this process to match the other serializer register names to their corresponding
index values.
Next, open the STIL procedure file in a text editor. Locate the SerializerStructures
section, and create a ParallelOutputs block as demonstrated in the following file:
UserKeywords SerializerStructures CompressorStructures;
SerializerStructures {
InternalShiftStart 6;
UnloadDataStart 7;
ExternalCyclesPerShift 5;
LoadSerializer "abc_top_U_deserializer_abc" {
Length 5;
ActiveScanChains load_group;
ParallelOutputs {
0 "abc_top_U_decompressor_abc/serial_reg_0_" no
1 "abc_top_U_decompressor_abc/serial_reg_1_" no
2 "abc_top_U_decompressor_abc/serial_reg_2_" no
3 "abc_top_U_decompressor_abc/serial_reg_3_" no
4 "abc_top_U_decompressor_abc/serial_reg_4_" no
}
}
UnloadSerializer "abc_top_U_serializer_abc" {
Length 5;
ActiveScanChains unload_group;
}
}
If TetraMAX DRC determines that the register inversion flag is incorrect, it will issue an M874
warning message:
Warning: Possibly incorrect load serializer parallel output inversion
specification: %d %s %s.(M874)
Warning: Possibly incorrect unload serializer parallel output inversion
specification: %d %s %s.(M874)
When the register names and inversion flags are valid, TetraMAX DRC honors the specified
serializer register definitions and proceeds with the DRC process.
Pattern Translation
This section describes the following types of serialized scan pattern translation:
• Translating Parallel Mode Patterns to Serial Mode Patterns
• Translating Serial Mode Patterns to Standard Scan Mode Patterns
Note:
The terms serial and parallel in this section refer to the type of scan compression being
used, not to serial or parallel scan data loading in TetraMAX testbenches.
In the log file, you will see information reported during compressor rules checking:
Begin compressor rules checking...
Warning: Rule R11 (X on chain affects observe ability of other chains)
was violated 1008 times.
Compressor rules checking completed: #chains=200, #scanins=8,
#scanouts=8, #shifts=100, CPU time=0.13 sec.
Note the #shifts= value, which represents the number of shift cycles used in the parallel
mode.
3. Perform ATPG in the parallel mode.
4. Write out the parallel mode pattern set with the -format binary and
-compressor_based options:
write_patterns compressor_based.db \
-format binary -replace -compressor_based
When you write out the pattern set with the -compressor_based option, the pattern set
can be only read back into a serial scan mode TetraMAX run.
5. Run TetraMAX ATPG in serial scan mode.
6. Set the number of shift cycles to the #shifts= value obtained from the compressor rules
checking log file entry from the parallel mode run:
set_drc -dftmax_shift_cycles 100
It is expected that you might see a small amount of coverage difference between the original
parallel mode ATPG results and the run_fault_sim result using the translated serial mode
patterns. This difference can be caused by different lock-up latch configurations, different
scan chain MUXing, different primary input constraints, and other minor scan configuration
differences.
You should use options for the set_build and set_drc commands that are as similar as
possible between the parallel mode and the serial mode runs.
In the log file, you will see information reported during compressor rules checking:
Begin compressor rules checking...
Warning: Rule R11 (X on chain affects observe ability of other chains)
was violated 1008 times.
Compressor rules checking completed: #chains=200, #scanins=8,
#scanouts=8, #shifts=201, CPU time=0.13 sec.
Note the #shifts= value, which represents the number of shift cycles used in the parallel
mode.
3. Run TetraMAX ATPG in serial scan mode.
4. Execute the run_drc command using the serial mode SPF:
run_drc my_serial_mode.spf
5. Take the larger #shifts= value from the two test modes. In this example, the larger value
is 202.
6. Run TetraMAX ATPG in parallel scan mode.
7. Set the number of shift cycles to the larger #shifts= value obtained from the parallel
and serial modes:
set_drc -dftmax_shift_cycles 202
8. Follow the steps in “Performing Pattern Translation for Matching Scan Data Pipeline
Depths, starting with the parallel mode ATPG performed in step 3. In the serial mode in
step 6, use the larger #shifts= value determined from the two test modes.
Known Issues
The known issues for serializer designs in a TetraMAX flow are described in the following
sections:
• C1 Violations
• Serializer Core-Level Flow With Pipelined Scan Data Insertion
C1 Violations
A C1 violation might occur in parallel mode or regular scan mode when you use Synopsys
automated pipeline scan data in which the clock is shared with the ATE clock of a
DFT-inserted OCC controller. The violation is related to gate-level optimization and causes
the clock-off state to be X on a lock-up-latch clock pin that has been inserted after the
pipeline head registers. The violation can be reduced to a warning if the situation is the same
as described earlier. You cannot expect to be able to downgrade all C1 violations.
• Pipeline scan data registers whose clock is shared with scan cells’ clock
The tool inserts the serializer clock controller on the clock lines to provide internally
generated clocks to the compressed scan chains. If it is inserted on the clock line feeding
the pipelined scan data registers, the pipeline registers do not work properly.
• Pattern translation from serial to parallel
• Launch-on-shift (LOS) transition ATPG
• Internally generated scan-enable signals
• LSSD, scan-enabled LSSD, and clocked scan styles
• Lock-up flip-flops
• Retiming flip-flops
• Terminal lock-up latches
When enabled, terminal lock-up latches are inserted at the end of the compressed scan
chains (before the serializer compressor) instead of at the scan output ports. This might
result in scan structures that do not shift into the compressor correctly.
• Mix of -xtolerance high and -xtolerance default codecs in top-down partition,
HASS, and Hybrid flows
• Any case with core wrapping in which a dedicated wrapper clock is created when the
insert_dft command is run
The dedicated wrapper clock is not gated by the serializer clock controller
• tmax2pt (TetraMAX to PrimeTime utility)
TEST-1093
Size of the deserializer and serializer are not equal.
TEST-1094
The number of deserializer inputs and serializer outputs are not equal.
TEST-1095
Scan compression mode chains that are outside the codec are not supported in the
serializer flow.
TEST-1096
The head and tail pipeline flip-flops are not triggered by the same clock in the serializer flow.
TEST-1097
Pipeline clock is not dedicated to pipeline flip-flops in serializer flow.
A-1
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4
current_design ${top_design_name}_SCCOMP_COMPRESSOR
report_area > SnPSteMPfILe
set comp_area [sh grep 'Total cell area' SnPSteMPfILe]
set comp_area_num [lindex $comp_area 3]
set compr_gates [expr $comp_area_num/$nand_area]
current_design ${top_design_name}_SCCOMP_DECOMPRESSOR
report_area > SnPSteMPfILe
set decomp_area [sh grep 'Total cell area' SnPSteMPfILe]
sh rm SnPSteMPfILe
set decomp_area_num [lindex $decomp_area 3]
set decompr_gates [expr $decomp_area_num/$nand_area]
echo ""
echo "Area of NAND2 gate : $nand_area"
echo "Area of decompressor : $decomp_area_num"
echo "Area of compressor : $comp_area_num"
echo ""
echo "Decompressor gate count : $decompr_gates"
echo "Compressor gate count : $compr_gates"
set total_gates [expr $decompr_gates + $compr_gates]
echo "Total compression logic gate count : $total_gates"
current_design $last_design
}
create_container pre_dft
current_container pre_dft
read_ddc ./outputs/des_unit.pre_dft.ddc
set_top des_unit
set_reference_design pre_dft:/WORK/des_unit
create_container post_dft
current_container post_dft
read_ddc ./outputs/des_unit.post_dft_with_compression.ddc
set_top des_unit
set_implementation_design post_dft:/WORK/des_unit
match
verify
AppendixA:A:Example
Chapter ExampleScripts
Scripts
Example Formality Script for Equivalence Checking A-3
DFTMAX™
DFTMAX™ Compression
Compression User
User Guide
Guide H-2013.03-SP4
Version H-2013.03-SP4