Design-for-Test (DFT) using RTL
Compiler
Agenda
Basic DFT Flow
Defining Scan Setup & Running DFT Rules Check
Mapping Design to Scan & Shift-register Identification
Configuring & Connecting Scan Chains
Hierarchical Scan Insertion
Inserting Compression Structures
Interface to other Tools
2013 Cadence Design Systems, Inc. All rights reserved.
Encounter DFT Flow
Read design information
Define full scan control signals
Define full scan chains
Define compression signals
Synthesize to generic logic
Run DFT Rule Checker
Fix DFT Violations
Shift Enable & Test Mode Signals
Prevent scan mapping of flops
Internal clocks as Test Clocks
DFT controllable constraints
Abstract Scan Segments
Add Testability Logic
Insert Boundary Scan Logic
Denotes an optional step
Synthesize and map to scan
Test point insertion
Configure & Connect Scan Chains
Insert compression logic
Netlist, SDC, ScanDEF, ATPG,
Abstraction Model
Export to Encounter Test
Export to P&R Tool
Verify test structures & Generate
Test Patterns
Reorder scan chains
2013 Cadence Design Systems, Inc. All rights reserved.
Export to Encounter Conformal
Verify Netlist
Encounter RC DFT: Input and Output
Synthesis
Libraries
SDC
File
RTL
Files
Constraint
Files
(SDC, CTL,
Scan Abstract)
Encounter RTL Compiler (RC)
Gate-Level
Netlist
File
Scan
Abstract
Model
Scan DEF
File
Logic
Abstract
File
2013 Cadence Design Systems, Inc. All rights reserved.
Testability
Analysis
File
ATPG
Interface
Files
Setting Scan Style
The muxed scan style (muxed_scan) is the most commonly
used and is the default scan style used in RC-DFT
To set the scan style, enter the following root-level attribute:
set_attr dft_scan_style {muxed_scan | clocked_lssd_scan} /
Scan enable
System out/
Scan out
System Data
data_in
data_out
clk
2013 Cadence Design Systems, Inc. All rights reserved.
Scan In
System Clock
Non-scan Flip-Flop
clk
Multiplexer Scan Flip-Flop
Defining Test Mode Signals
Define the test mode signals (often, already coded in the RTL) to control
and use the existing test logic, and to enable the fixing of DFT violations:
define_dft test_mode [-name object_name]
-active {low | high} [-scan_shift] [-no_ideal]
[ [-hookup_pin pin [-hookup_polarity string]]
[-configure_pad {tm_signal}] [-create_port | -shared_in]]
{pin|port} [-design design]
No DFT violation after adding test_mode
control logic shown in RED
top_mod
div_clk
sub_mod
clk1
D
clk2
clk
enable
test_mode
test_mode
6
2013 Cadence Design Systems, Inc. All rights reserved.
clk3
Gated_clk
Defining Shift Enable Signal
Specify a pin or port that drives the shift_enable pin of the
scan flip-flops. Use the define_dft shift_enable constraint:
define_dft shift_enable [-name object_name]
-active {low|high} [-default] [-no_ideal]
[ [-hookup_pin pin [-hookup_polarity string]]
[-configure_pad {tm_signal|se_signal}] | -create_port ]
{pin|port} [-design design]
The muxed scan style uses shift-enable signals to switch scan flipflops from system mode to scan-shift mode. Define these signals
before running the DFT rule checker.
You can associate a shift enable with each scan chain; default is to
use the first shift-enable signal that is defined (default) as the scan
enable for all the scan chains.
2013 Cadence Design Systems, Inc. All rights reserved.
Auto Identification of Test Signals
For the muxed scan style - unless previously defined - the
DFT rule checker will
create a test clock for each top-level clock pin that is traceable from
the clock pin of a flip-flop to the primary input pin.
creates a test mode signal(s) of type scan shift that is traceable from
the async set and reset pins of a flip-flop to the primary input pin.
To turn off this feature, set the following attributes:
set_attribute dft_identify_top_level_test_clocks false /
set_attribute dft_identify_test_signals false /
2013 Cadence Design Systems, Inc. All rights reserved.
Internal Test Clocks
Define the internal clock branches
as separate test clocks when it is an
unbalanced clock-tree.
define_dft test_clock
-name test_clock
-domain test_clock_domain
-period integer
[-divide_period integer]
[-rise integer]
[-divide_rise integer]
[-fall integer]
[-divide_fall integer]
[-controllable]
{ pin_name [pin_name] ...}
With same test clock domain, RC uses lockup latch to join the chains.
Chain1
Lockup
latch
clk1a
clk1b
With separate clock domains, RC puts them
on separate chains.
chain1
If you use the same test clock
domain for both test clocks, you
allow all flip-flops to be mixed in one
scan chain. RC automatically adds
a lock-up latch for all clocks in the
same
domain.
9
2013 Cadence Design Systems, Inc. All rights reserved.
clk1a
chain2
clk1b
Defining DFT Controllable Constraints
To enable propagation of the test signal across the specified
pins of a black-box module, such as a PLL, use this
command:
set_attr dft_controllable "instance/fromPin
[non_inverting|inverting]" instance/toPin
PLL
A
clk
cki
n
ckp
ll
Example
set_attr dft_controllable PLLA/ckin inverting" PLLA/clkpll
10
2013 Cadence Design Systems, Inc. All rights reserved.
Splitting Clock Branches
U1
CLK
CK
CK
CK
CK
B1
U2
A
B2
By default, B1 and B2 can be treated as one clock (clk) and all flops can
be put on the same chain
Possibly for skew reasons, you might want to keep them as separate test
clocks, but in the same domain.
define_dft test_clock name SCKA domain SCK_D U1/Y
define_dft test_clock name SCKB domain SCK_D U2/Y
11
2013 Cadence Design Systems, Inc. All rights reserved.
Combining Equivalent Clock Inputs
CK
CK
CK
CK
CK_A
CK_B
To tell the DFT engine to treat above as the same clock for
scan chain hook-up purposes, use the following command:
define_dft test_clock -name SCK -domain SCK_D CK_A CK_B
12
2013 Cadence Design Systems, Inc. All rights reserved.
Defining Scan Segments
You can define a set of elements as a scan segment for inclusion into a
scan chain. Such elements may have been previously stitched to create
a scan segment (abstract, boundary_scan, preserved) , or are specified
as a list of elements to be stitched into a scan segment (fixed, floating).
Scan segments are defined using
define_dft { abstract_segment | fixed_segment |
boundary_scan_segment | floating_segment |
dft_configuration_mode | preserved_segment |
shift_register_segment }
The different type of segments are described as followed:
13
abstract_segment defines an abstract scan-chain segment object
fixed_segment defines a fixed scan-chain segment object
boundary_scan_segment defines a boundary-scan segment object
floating_segment defines a floating scan-chain segment object
preserved_segment defines a preserved scan-chain segment object
shift_register_segment defines a shift register scan-chain segment object
2013 Cadence Design Systems, Inc. All rights reserved.
Defining Configuration Mode
You can use scan modes to build the top-level scan chains with specific
elements in different modes of operation (multimode)
define_dft dft_configuration_mode
[-name scan_mode_name]
[-mode_enable_high test_signal]
[-mode_enable_low test_signal]
[-jtag_instruction jtag_instruction]
[design]
Example
The following example defines scan mode scanModeA whose pin1 is
specified to have an active high logic value and pin2 is specified to have
an active low-logic value in this mode of operation:
define_dft dft_configuration_mode -name scanModeA design \
-mode_enable_high pin1 -mode_enable_low pin2
14
2013 Cadence Design Systems, Inc. All rights reserved.
Defining Scan Chains
The chain-specific constraints instruct the scan configuration engine to
bind the scan flops configured into the top-level chains to a specific set of
scan data input and output signals for the specified test-clock domain and
edge. To define a top-level scan chain, use:
define_dft scan_chain [-name name]
{-sdi sdi_name -sdo sdo_name [create_ports] { [-shared_output]
[-shared_select test_signal]| -non_shared_output}
[-shift_enable test_signal]
[-head segment_name] [-tail segment_name][-body segment_name]
[-complete | -max_length integer]
[-domain test_clock_domain [-edge {rise|fall}]]
[-terminal_lockup {level_sensitive | edge_sensitive}]
[-configure_pad {tm_signal | se_signal} ] [analyze]
To control the prefix used to name user-defined scan chains, set the
following root attribute:
set_attr dft_prefix SCAN_ /
15
2013 Cadence Design Systems, Inc. All rights reserved.
RTL Top-down Design-for-Testability (DFT) Flow
Read Target Libraries
Read HDL files
Elaborate Design
Set Timing & Design Constraints
Apply Optimization Directives
Setup for DFT Rule Checker
Run DFT Rule Checker and
Report Registers
Fix DFT Violations
Add Testability Logic
Synthesize Design + Map to Scan
Test Point Insertion
Configure Scan Chains
Connect Scan Chains
Run Incremental Optimization
Analyze Design
Netlist, SDC,
ScanDEF, ATPG, Abstraction
Model
16
2013 Cadence Design Systems, Inc. All rights reserved.
Check DFT Rules
DFT Information Hierarchy
/ (root)
/designs
/libraries
/hdl_libraries
dft
design_name
dft
reports
actual_scan_chains
scan_chains
actual_scan_segments
scan_segments
violations
test_clock_domains
test_signals
17
/messages
boundary_scan
jtag_ir
dft_configuration
_modes
jtag_instructions
2013 Cadence Design Systems, Inc. All rights reserved.
Basic DFT Rule Checks
Following are the some of the supported rule checks:
Uncontrollable clock nets
Internally generated clocks (such as a clock divider)
Gated clocks
Tied constant clock nets
Undriven clock nets
Uncontrollable asynchronous set/reset nets
Internally generated asynchronous set/reset signals
Gated asynchronous set/reset nets
Tied active asynchronous set/reset pins
Undriven asynchronous set/reset pins
Conflicting clock and asynchronous set/reset nets
Shift Register Rules
Set/Reset are controlled OFF during scan shift
Clocks are turned ON
Shift register data pins connected properly to pass the data.
Abstract Segment Rules
18
2013 Cadence Design Systems, Inc. All rights reserved.
Advanced DFT Rule Checks
The following are some of the advanced DFT rule checks:
Tristate contention for internal and external nets
Same asynchronous set or reset data race conditions
Clock and data race conditions
Floating nets violations
X-source violations
This feature needs Encounter Test Architect advanced
license in order to be executed
19
2013 Cadence Design Systems, Inc. All rights reserved.
Checking for DFT Rules
To check for any DFT violations, use the following
command:
check_dft_rules [design] [-advanced]
[-max_print_violations integer | > file]
[-max_print_registers integer]
[-max_print_fanin integer]
[-dft_configuration_mode dft_config_mode_name]
20
2013 Cadence Design Systems, Inc. All rights reserved.
Checking DFT Rules Report
On executing check_dft_rules, DFT engine indicates the violations and the
probable cause of those violations
Users can refer to these messages to assess the DFT violations
Warning : DFT Clock Rule Violation. [DFT-301]
: # 0: internal or gated clock signal in module top, net: Iclk, pin g1/z
Effective fanin cone: clk, en
Warning : DFT Async Rule Violation. [DFT-302]
: # 1: async signal driven by a sequential element in module top, net:
Iset, pin Iset_reg/q
Effective fanin cone: Iset_reg/q
Violation # 0 affects 4 registers
Violation # 1 affects 4 registers
Note - a register may be violating multiple DFT rules
Total number of Test Clock Domains: 1
DFT Test Clock Domain: clk
Test Clock clk (Positive edge) has 1 registers
Test Clock clk (Negative edge) has 0 registers
Number of user specified nonscan registers: 0
Number of registers that fail DFT rules: 4
Number of registers that pass DFT rules: 1
Percentage of total registers that are scanable: 20%
21
2013 Cadence Design Systems, Inc. All rights reserved.
Reporting Scan Flops
To report the scanable status of the flip-flops after running the DFT rule
checker, use:
report dft_registers
This example shows the report for a design with an internally driven
clock signal and an asynchronous set signal
Reporting registers that pass DFT rules
Iset_reg PASS; Test clock: clk/rise
Reporting registers that fail DFT rules
out_reg_0 FAIL; violations: clock #(0 ) async set #(1 )
out_reg_1 FAIL; violations: clock #(0 ) async set #(1 )
out_reg_2 FAIL; violations: clock #(0 ) async set #(1 )
out_reg_3 FAIL; violations: clock #(0 ) async set #(1 )
Total registers that pass DFT rules: 1
Total registers that fail DFT rules: 47
22
2013 Cadence Design Systems, Inc. All rights reserved.
Testability Analysis
In RTL Compiler (RC), user can run different sets of testability analysis starting
as early as elaborating the design
check_dft_rules
Propagates the tied constants, shift-enable and test mode signal values to prune
the circuit and identify the test paths
Identifies constructs in the design that prevent the flops from being included into
the scan chains
RC can provide feedback on the source or cause of the DFT violation back to the
HDL whenever possible
check_atpg_rules
Generate scripts to run Encounter Test ATPG rule checker to ensure that the
design is ATPG ready
check_design
General design rule checker that identifies problems in the circuit, such as
unconnected nets and multidriven nets that impact the DFT coverage
analyze_testability
This command runs Encounter Test ATPG to do a quick estimation of the fault
coverage
Can be used on an unmapped design in an assume scan mode. Accuracy
improves as design goes through mapping such as redundancy removal, and scan
chain hookup
23
2013 Cadence Design Systems, Inc. All rights reserved.
RTL Top-down Design-for-Testability (DFT) Flow
Read Target Libraries
Read HDL files
Elaborate Design
Set Timing & Design Constraints
Apply Optimization Directives
Setup for DFT Rule Checker
Run DFT Rule Checker and
Report Registers
Fix DFT Violations
Add Testability Logic
Synthesize Design + Map to Scan
Test Point Insertion
Configure Scan Chains
Connect Scan Chains
Run Incremental Optimization
Analyze Design
Netlist, SDC,
ScanDEF, ATPG, Abstraction
Model
24
2013 Cadence Design Systems, Inc. All rights reserved.
Fix DFT Violations
Fixing DFT Violations
To automatically fix the DFT violations, use the fix_dft_violations command:
fix_dft_violations
{ -clock -test_control test_signal -test_clock_pin {pin|port}
[-rise | -fall] | {-async_set | -async_reset | -async_set
-async_reset} -test_control test_signal [-async_control
test_signal] [-insert_observe_scan [-test_clock_pin {pin|port}
[-rise | -fall]]] }
[-violations violation_object_id_list -test_control test_signal]
[-tristate_net] [-xsource [-exclude_xsource instance]...]
[-preview] [dont_map] [-dont_check_dft_rules] [-design design]
This command allows the user to:
Control the type of violation to fix, either -async_set, -async_reset, or -clock
Specify the test clock to use through the -test_clock option
Specify a test-mode signal to control the added logic through the test_control option
Display the modifications before making the fixes using -preview option
25
2013 Cadence Design Systems, Inc. All rights reserved.
Fixing Specific Violations
Report of the DFT Violations
rc:/> report dft_violations
Total 2 violations (muxed_scan)
Async. set/reset Rule Violations
================================
Reporting 1 async set/reset violations
Violation #1:
Object name: vid_1_async
Type: async violation
Description: [ASYNC-05] async signal driven by a sequential element
Source: Iset_reg/q (test3.v:13)
Number of registers affected: 4
Affected registers:
out_reg[0]
...
The following command fixes violation vid_1 if the violation is of type async_set:
fix_dft_violations -violations {vid_1_async} -async_set test_control tm
26
2013 Cadence Design Systems, Inc. All rights reserved.
Example of Asynchronous Violations
2:1
rst_b
TM A
2:1
rst
TM B
2:1
rst
TM
reset
logic
Solution 1: Add a 2:1 mux to select
reset port during test_mode.
ERROR : Cannot control all resets to same value
due to pos/neg resets and inversion of reset signal,
and modification of other logic
27
2013 Cadence Design Systems, Inc. All rights reserved.
D
other
logic
Solution 2: Add muxing logic to
each branch as required
define_dft test_mode -name TM1 -active high TM
fix_dft_violations -async_set -async_reset test_mode TM1
Successfully inserted common test-point at node
C/aclr. It covers 2 nodes:
C/aclr, D/aclr
Successfully inserted test-point at node A/aclr.
Successfully inserted test-point at node B/aclr.
Total number of violation points: 4
Total number of test points inserted: 3
Example: Internally Generated Clock
CK
Clock
Divider
div_ck
2:1
TM
Problem: div_ck is not controllable from the top-level port.
Sol: Add 2:1 MUX to bypass Clock Divider Circuit controlled by TM signal
define_dft test_mode -name tm -active high TM
fix_dft_violations -clock -test_mode tm -test_clock_pin
CK
28
2013 Cadence Design Systems, Inc. All rights reserved.
Debugging DFT Violations
In case of suspect DFT violations, to query the test mode
logic values propagated along the test path due to tied
constants, shift-enable, and test mode signals values, use
the following command :
dft_trace_back
This command is usually applied on a pin and will return
the propagated logic value (if found), or no_value.
Following example traces back on the requested pin and in
this case a constant logic 1 value is reported:
dft_trace_back /designs/top/instances_hier/g121/pins_in/CME
29
2013 Cadence Design Systems, Inc. All rights reserved.
RTL Top-down Design-for-Testability (DFT) Flow
Read Target Libraries
Read HDL files
Elaborate Design
Set Timing & Design Constraints
Apply Optimization Directives
Setup for DFT Rule Checker
Run DFT Rule Checker and
Report Registers
Fix DFT Violations
Add Testability Logic
Synthesize Design + Map to Scan
Test Point Insertion
Configure Scan Chains
Connect Scan Chains
Run Incremental Optimization
Analyze Design
Netlist, SDC,
ScanDEF, ATPG, Abstraction
Model
30
2013 Cadence Design Systems, Inc. All rights reserved.
Scan Synthesis
Preserving Non-scan Flops During Synthesis
Use the following attribute to prevent conversion of a flop to
a scan-flop
set_attr dft_dont_scan true flip-flop_object
To preserve a complete subdesign that was previously
mapped to gates, use
set_attr dft_scan_map_mode preserve
/top/subdesign_name
Run the DFT rule checker to update the DFT status of all
flip-flops in the lower-level blocks attributed with preserve
check_dft_rules
31
2013 Cadence Design Systems, Inc. All rights reserved.
Identifying Shift Registers in the Design
To allow RC to identify the shift-registers during mapping, user can
specify following command. User has to ensure that check_dft_rules is
clean before invoking this command:
synthesize to_mapped auto_identify_shift_register
If the design has a large number of shift registers, user can use the twopass flow also to automatically identify the shift-register segments in the
design (post synthesis):
identify_shift_register_scan_segments
-min_length 2 -max_length 2000 [-preview]
replace_scan to_non_scan
To manually identify the shift registers in the design, user can use the
following command:
define_dft shift_register_segment -name shiftReg \
-start_flop tmp_reg[0] -end_flop tmp_reg[7]
32
2013 Cadence Design Systems, Inc. All rights reserved.
Controlling Connection of Scan Signals
To leave the scan data pins floating or to connect them to
ground, set the following attribute (default: loopback):
set_attr dft_connect_scan_data_pins_during_mapping
{floating|ground|loopback} /designs/top_design
To leave the shift-enable pins floating, set the following
attribute (default: tieoff):
set_attr dft_connect_shift_enable_during_mapping
{floating|tieoff} /designs/top_design
Specify the scan flip-flop output pin to use for the scan data
path connection (default: auto):
set_attr dft_scan_output_preference
{auto|non_inverted|inverted} top
33
2013 Cadence Design Systems, Inc. All rights reserved.
Synthesize and Map the Scan Flops
Use the following attribute to select the approach to
mapping the registers. To map to scan flops for DFT, use
either the force_all (does not require the DFT rule checks to
be run) or tdrc_pass (mapped to scan for flops that pass
the DFT rule checks) (default: tdrc_pass) :
set_attr dft_scan_map_mode {tdrc_pass|force_all|preserve}
All registers that pass the DFT rule checks that are not
attributed with a dft_dont_scan or a preserve (if non-scan
flops) are mapped to scan flops during synthesis.
synthesize to_mapped [-auto_identify_shift_register]
34
2013 Cadence Design Systems, Inc. All rights reserved.
Fixing DFT Violations on a Scan-Mapped Design
Following initial synthesis, you can still fix the DFT rule
violations in the mapped netlist by running the
fix_dft_violations command. To convert the remaining flipflops that now pass the DFT rule checks to scan flip-flops,
run this command:
replace_scan
35
2013 Cadence Design Systems, Inc. All rights reserved.
RTL Top-down Design-for-Testability (DFT) Flow
Read Target Libraries
Read HDL files
Elaborate Design
Set Timing & Design Constraints
Apply Optimization Directives
Setup for DFT Rule Checker
Run DFT Rule Checker and
Report Registers
Fix DFT Violations
Add Testability Logic
Synthesize Design + Map to Scan
Test Point Insertion
Configure Scan Chains
Connect Scan Chains
Run Incremental Optimization
Analyze Design
Netlist, SDC,
ScanDEF, ATPG, Abstraction
Model
36
2013 Cadence Design Systems, Inc. All rights reserved.
Configure & Connect
Scan Chains
Setting Minimum Number of Scan Chains
By default, the scan configuration engine inserts one scan chain per
active edge (rising and falling) of each test clock domain
By default, there is no limit for the scan chain length. User can control
the scan configuration by specifying the maximum length of a scan
chain in the design
To specify the minimum number of scan chains to create, set the
following design attribute:
set_attribute dft_min_number_of_scan_chains integer
/designs/top
To specify the maximum length of any scan chain, set the following
design attribute:
set_attribute dft_max_length_of_scan_chains integer
/designs/top
37
2013 Cadence Design Systems, Inc. All rights reserved.
Example of a Minimum Number of Scan Chains
RTL
300 rising-edge scan flip-flops in test clock domain: clk1
100 falling-edge scan flip-flops in test clock domain: clk2
Constraint
set_attr dft_min_number_of_scan_chains 5 /designs/top
What Is the Configuration Output?
The scan configuration engine creates 5 scan chains, whose
lengths are balanced across the test-clock domains:
4 scan chains of 75 scan flops each in test-clock domain: clk1
1 scan chain of 100 scan flops each in test-clock domain: clk2
38
2013 Cadence Design Systems, Inc. All rights reserved.
Example of a Maximum Length of Scan Chains
RTL
Test-clock domain clk1 rising edge clk1 has 16 scan flip-flops.
falling edge clk1 has 8 scan flip-flops.
Test-clock domain clk2 rising edge clk2 has 32 scan flip-flops.
Constraint
set_attr dft_max_length_of_scan_chains 8 /designs/top
set_attr dft_mix_clock_edges_in_scan_chain false /designs/top
Configuration Output
Because the dft_mix_clock_edges_in_scan_chains attribute is set to false, the scan configuration
engine creates at least one scan chain for each active (rising and falling) edge of test clock, clk1.
2 chains with 8 scan flip-flops of rising edge of test clock clk1 &1 chain with 8 scan
flip-flops of falling edge of test clock clk1
4 chains with 8 scan flip-flops of rising edge of test clock clk2
If the dft_mix_clock_edges_in_scan_chains attribute is set to true, then the configuration output is 3
scan chains of 8 flops with test clock clk1 and 4 with 8 scan flops of test clock clk2 as the edges do not
39 matter
2013 Cadence Design Systems, Inc. All rights reserved.
Controlling Data Lockup Elements
If multiple test clocks are defined in the same test clock
domain, and mixing of clock edges is allowed, then RTL
Compiler inserts data lockup elements accordingly between
the scan-chain segments triggered by the different test clocks
and triggering edges on the same scan chain
Scan1
Lockup
Flop
clk1a
Lockup
flop
clk1b
40
2013 Cadence Design Systems, Inc. All rights reserved.
Connecting Scan Chains
The connect_scan_chains command configures and
connects scan flip-flops (which pass the DFT rule checks)
into scan chains. The command works at the current level of
the hierarchy and all lower hierarchies instantiated in that
module. The design must be mapped to the target library
before connecting scan chains in a design
connect_scan_chains [auto_create_chains]
preview [design] [-incremental] [-chains chain_list] [dft_configuration_mode dft_config_mode_name]
[elements element_list] [-pack | -create_empty_chains] [physical] [-power_domain power_domain_list]
41
2013 Cadence Design Systems, Inc. All rights reserved.
Hierarchical Scan Flow
For implementing hierarchical scan flow, block-level test synthesis should
include:
Test clock domain analysis
DFT rule fixing
Map to scan flops for DFT
Creation of the block-level chains
Write the logic abstract model
Write the scan abstract model
Now the pre-processed blocks can be integrated at the next level using
following set of commands:
Read logic abstract model (optional)
Read scan abstract model
42
This is primarily used when memory capacity at chip level is a concern.
Defines the scan architecture.
2013 Cadence Design Systems, Inc. All rights reserved.
Logic Abstract Model
The logic abstract model defines the pre-processed blocks
(sub-modules) in terms of its module port list, I/O
declarations & bit-widths
No additional logic or hierarchical instances are written to
the module description.
User can create a logic abstract model with the following
command:
write_hdl -abstract
43
2013 Cadence Design Systems, Inc. All rights reserved.
Example of Logic Abstract Model
Logic abstract model
module core(in1, out1, clk1, clk2, se, si, so);
input [3:0] in1;
input [1:0] si;
input clk1, clk2, se, si, so;
output [3:0] out1;
output [1:0] so;
endmodule //core
Block core definition includes the testrelated ports such as se, si, and so.
Top-level netlist
module test (inl. in2, m3. clk1, cIk2. out1, out2. out3. se, si. so);
input [3:0] inl. in2. in3:
input clkl, clk2, se. si;
output [3:0] out1. out2, out3:
output so;
reg [3:0] out1, out2;
always (posedge clk1)
out1 <= in1;
always (posedge clk2)
out2 <= in2;
core u_core (.clk1 (clk1), .clk2(clk2). .in1 (in3). .out1(out3)):
endmodule //test
44
2013 Cadence Design Systems, Inc. All rights reserved.
Block core instantiation lists its
functional ports. The test-related
ports are created and linked from
its logic abstract definition above.
Scan Abstract Model
A scan abstract model defines the scan chain architecture
for the design
Basically the scan abstract model does the following:
Defines the block-level chains as segments
Captures the test clocks (and their active edges)
Captures the block-level test mode setup signals
A scan abstract model can be applied to:
Logic abstract model
Blackbox instance
Timing model represented using LIBERTY description
White box, or gate-level representation of the block
Created using: write_dft_abstract_model
Read using: read_dft_abstract_model
45
2013 Cadence Design Systems, Inc. All rights reserved.
[-ctl]
Example of Scan Abstract Model
CTL Abstract Model
STIL 1.0 {
// CTL PXXXX.Y
// Design PXXXX.Y
}
Header {
...}
Signals {
...}
SignalGroups {
...}
SignalGroups Internal_scan {
"_si" = "in1[0]" + "in2[0]"; // #signals=2
"_so" = "out1[0]" + "out2[0]"; // #signals=2
}
ScanStructures Internal_scan {
ScanChain "chain1" {
ScanLength 10;
ScanIn "in1[0]";
ScanOut "out1[0]";
ScanEnable "se1";
}
ScanChain "chain2" {
ScanLength 10;
ScanIn "in2[0]";
ScanOut "out2[0]";
ScanEnable "se1";
}
}
Timing {
...}
//PatternBurst "__burst__" {
//...}
//PatternExec {
//...}
Procedures Internal_scan {
"load_unload" {
W "_default_WFT_";
V {"clk1"=0; "clk2"=0; "clk3"=0;
"se1"=1; "_so"=##;}
// (continued on the right)
46
2013 Cadence Design Systems, Inc. All rights reserved.
//
MacroDefs Internal_scan {
"test_setup" {
W "_default_WFT_";
V { "clk1"=0; "clk2"=0; "clk3"=0; }
V { "clk1"=0; "clk2"=0; "clk3"=0;
"SE"=#; }
}
}
Environment "test" {
CTLMode Internal_scan {
TestMode InternalTest;
DomainReferences {
SignalGroups Internal_scan;
ScanStructures Internal_scan;
Procedures Internal_scan;
MacroDefs Internal_scan;
}
Internal {
"clk1" {
Datatype MasterClock ScanMasterClock;
}
"clk2" {
Datatype MasterClock ScanMasterClock;
}
"clk3" {
Datatype MasterClock ScanMasterClock;
}
"se1" {
Datatype ScanEnable {
ActiveState ForceUp;
}
}
"rst" {
Datatype TestMode {
ActiveState ForceUp;
}
}
}
//
Scan Compression Architectures
XOR Compression
De-compressor uses broadcast scan
(default) or xor spreader network.
Compressor uses XOR compression.
47
2013 Cadence Design Systems, Inc. All rights reserved.
MISR Compression
De-compressor uses broadcast scan
(default) or xor spreader network.
Compressor uses MISR.
Inserting XOR Scan Compression Architecture
To insert XOR-based compression logic, user can make use
of the following command:
compress_scan_chains -compressor xor
[-channel_length | -ratio integer]
[-chains actual_scan_chain...]
[-decompressor {broadcast | xor [-spread_enable
test_signal]}]
[-master_control test_signal]
[-compression_enable test_signal]
[-mask {wide1|wide2}]
48
2013 Cadence Design Systems, Inc. All rights reserved.
Inserting MISR Scan Compression Architecture
To insert MISR-based compression logic, user should use
the following command:
compress_scan_chains -compressor misr
-ratio integer
[-chains actual_scan_chain...]
[-auto_create]
[-decompressor {broadcast | xor [-spread_enable
test_signal]}]
[-master_control test_signal]
[-compression_enable test_signal]
[-mask {wide0 | wide1 | wide2}
49
2013 Cadence Design Systems, Inc. All rights reserved.
Compression Control Signals
User needs to use the define_dft test_mode command to
define compression control signals
Use -shared_in option when shared with an existing functional pin.
Test control signals are identified using the dft_compression_signal
attribute
master_control
compression_enable
spread_enable
Masking Control Pins:
mask_clock, mask_enable,
mask_load
50
2013 Cadence Design Systems, Inc. All rights reserved.
Dedicated pin for compression test purposes.
When specified, this signal is ANDed- with the
compression_enable test signal.
Provides a single pin constraint for LEC verification.
Signal that enables test compression.
Can be shared with an existing functional pin provided its
specified with master_control.
Signal that selects the XOR de-compressor spreader network.
Used with the decompressor xor option
Can be shared with an existing functional pin.
All can be shared with an existing functional pin. However,
should not use an existing fullscan test clock pin as the mask
clock because the fullscan test clock pins are not gated with
~CMLE (mask_load) signal.
Example of XOR Spreader Compression
Mentioned below is an example script that shows the
insertion of an XOR spreader and mask logic
compress_scan_chains ratio 2 \
-compression_enable CE -spread_enable SPRD \
-decompressor xor \
-mask wide1 \
-mask_enable MASK_E \
-mask_load MASK_L \
-mask_clock mask_clock_pin \
-mask_or_misr_sdi in3[3] -mask_or_misr_sdo out3[3]
-shared_output
51
2013 Cadence Design Systems, Inc. All rights reserved.
Compression Example Script
Following example shows compression being inserted without masking and
using a broadcast de-compressor:
Define two Top-Level Full Scan Chains:
define_dft scan_chain -name chain1 -sdi in1[0] -sdo out1[0] shared_out -shift_enable se1
define_dft scan_chain -name chain2 -sdi in2[0] -sdo out2[0]
-shared_out -shift_enable se2
Build and Report the Full Scan Chains
connect_scan_chains
report dft_chains
Define the Compression Test Signals
define_dft test_mode -active high -name CE in1[1] shared_in
define_dft test_mode active high name TM test_mode_pin
Compress the scan chains
compress_scan_chains ratio 2 compressor xor decompressor xor
-compression_enable CE -master_control TM
Shared compression_enable pin will be gated with dedicated master_control test pin.
52
2013 Cadence Design Systems, Inc. All rights reserved.
RTL Top-down Design-for-Testability (DFT) Flow
Read Target Libraries
Read HDL files
Elaborate Design
Set Timing & Design Constraints
Apply Optimization Directives
Setup for DFT Rule Checker
Run DFT Rule Checker and
Report Registers
Fix DFT Violations
Add Testability Logic
Synthesize Design + Map to Scan
Test Point Insertion
Configure Scan Chains
Connect Scan Chains
Run Incremental Optimization
Analyze Design
Netlist, SDC,
ScanDEF, ATPG, Abstraction
Model
53
2013 Cadence Design Systems, Inc. All rights reserved.
Interface to other Tools
Reporting DFT
To analyze the scan chains, run the following command:
report dft_chains
To report the DFT setup, run the following command:
report dft_setup > [filename]
To report the DFT registers, run the following command:
report dft_registers > [filename]
54
2013 Cadence Design Systems, Inc. All rights reserved.
Interface to ATPG Tool
write_atpg {-cadence [> file]| -mentor [> file]
| -stil [-dft_configuration_mode dft_config_mode_name]
[> file]}
[-decimals_ok] [-picoseconds] [-test_clock_waveform
test_clock]...
[-apply_inputs_at integer] [-apply_bidirs_at integer]
[-strobe_outputs_at integer] [-strobe_width integer]
apply_bidirs_at specifies when in the test clock cycle to apply the bidirectional
signals
apply_inputs_at specifies when in the test clock cycle to apply the input signals
strobe_outputs_at specifies when in the test clock cycle to strobe the outputs
strobe_width specifies how long the outputs are valid during the test clock cycle
decimals_ok writes out decimal numbers
test_clock_waveform specifies to use the clock waveform of the specified test clock
dft_configuration_mode specifies the object name of the scan mode for which to
write ATPG data
55
2013 Cadence Design Systems, Inc. All rights reserved.
Interface to Back-end Tool
To create a scanDEF interface file for scan chain reordering
in the P&R tool, user may want to use the following
command:
write_scandef [-partition partition -chains chain
[chain]...]...
[-version {5.4|5.5}]
[-end_chains_before_lockups]
[-dft_configuration_mode dft_config_mode_name]
[-dont_split_by_library_domains]
[-dont_split_by_power_domains]
[-dont_use_timing_model_pins] [design] [ > file]
56
2013 Cadence Design Systems, Inc. All rights reserved.
Exporting the Design to Encounter Test
Use the following commands to generate the corresponding
data:
write_et_atpg
to perform static stuck-at-fault (ATPG)
write_et_bsv
to perform boundary scan verification
write_et_dfa
to perform deterministic fault analysis and test-point selection
write_et_mbist
to generation MBIST tests
write_et_rrfa
to perform random resistant fault analysis and test-point selection
57
2013 Cadence Design Systems, Inc. All rights reserved.