Professional Documents
Culture Documents
8
Building Scan Chains 8
The insert_scan command builds scan chains and connects test
signals. The hierarchical scan insertion capability allows you to
specify scan chain designs and to implement a top-down, bottom-up,
or middle-out hierarchical scan insertion flow.
The following sections in this chapter explain how to build scan chains:
Specification Synthesis
Reporting Preview
"what-is" report
"what-shall be"
report
TC-generated
dc_shell script
Specification Process
• set_scan_configuration
• set_scan_path
• set_scan_signal
• set_scan_element
• set_scan_segment
• set_scan_link
• remove_scan_specification
These commands are described in detail later in this chapter.
Note that each time you use the current_design command, any
previous scan specifications no longer apply. This means that you
need to enter new scan specifications for each newly selected design.
Preview Process
Synthesis Process
does not use the timing values described using create_test_clock for
constraint optimization. The insert_scan command also selects scan-
out signal connections (Q or QN) to minimize constraint violations.
DC Expert Plus and Test Compiler do not yet support the creation of
complex test and maintenance architectures where individual scan
cells are members of more than one chain.
Specification Commands
The syntax is
set_scan_configuration
[-add_lockup true | false]
[-bidi_mode input | output]
[-chain_count integer | default]
[-clock_gating entire_design | leaf_cell | superbuffer]
[-clock_mixing no_mix | mix_edges | mix_clocks
| mix_clocks_not_edges]
[-create_test_clocks_by_system_clock_domain true
| false]
[-dedicated_scan_ports true | false]
[-disable true | false]
[-existing_scan true | false]
Scan chain elements cannot belong to more than one chain. Where
set_scan_path commands conflict, the preview_scan and
insert_scan commands execute the most recent command.
The syntax is
set_scan_path
scan_chain_name
[ordered_list]
[-dedicated_scan_out true | false]
[-complete true | false]
scan_chain_name
This arbitrary text string gives the scan chain a name.
ordered_list
Defines scan chain elements. This ordered list can include
sequential cells, multibit components, design instances,
subdesign scan chains, and scan links. You can use wildcards
and dc_shell command expressions like all_registers(), filter(),
and find() to identify design objects.
The syntax is
set_scan_signal
test_signal_type
[-port port_list]
[-hookup pin_name [-sense inverted | non_inverted]]
[-chain scan_chain_list]
test_signal_type
Describes the type of the signal. Valid types include test_clock,
test_scan_clock, test_scan_clock_a, test_scan_clock_b,
test_scan_enable, test_scan_enable_inverted, test_scan_in,
and test_scan_out (see Table 8-1). Validation ensures that
specified types are consistent with the design scan style.
-port port_list
Identifies design ports that insert_scan can use to transmit signals
of the specified type. Validation ensures that the port direction is
consistent with the signal type.
-hookup pin_name
By default, insert_scan command connects wires to the core side
of identified signal ports, jumping pads, and buffers as needed.
The -hookup option overrides this behavior and instructs
insert_scan to connect wires to a specific pin, which you specify
by name. The insert_scan command does the hookup without
checking its validity. After you run insert_scan, use check_test to
check the validity of the hookup. Validation ensures that the pin
direction is consistent with the signal type. You can associate a
specific access pin with only one design port.
-chain scan_chain_list
By default, insert_scan assigns scan signals to scan chains. This
argument lets you make the assignment.
where scan_in is the name of the scan-in port that the insert_scan
command will use.
When the insert_scan command creates additional ports for scan test
signals, it assigns a name to each new port. You can control the
naming convention by using the port naming style variables shown
in Table 8-2.
test_clock_port_naming_style test_c%s
test_scan_in_port_naming_style test_si%s%s
test_scan_out_port_naming_style test_so%s%s
test_scan_enable_port_naming_style test_se%s
test_scan_enable_inverted_port_naming_style test_sei%s
test_scan_clock_port_naming_style test_sc%s
test_scan_clock_a_port_naming_style test_sca%s
test_scan_clock_b_port_naming_style test_scb%s
Use the set_scan_signal command only for scan insertion and not
for design rule checking. The set_scan_signal command indicates
existing I/O ports that are to be used as scan ports. After the
insert_scan command connects these ports, it places the necessary
signal_type attributes on the ports for design rule checking.
Note:
Before you use the insert_scan command on an existing scan
design that was not created by the insert_scan command, you
must identify all test ports in your design with the set_signal_type
command.
Note:
If you want to specify which scan cells are to be used for scan
replacement, use the set_scan_register_type command. For
details, see “Specifying Scan Cells” on page 5-6.
set_scan_element
true | false
[cell_design_ref_list]
[-multibit multibit_component_list]
true | false
A Boolean value that determines whether the specified cells are
to be replaced by scan cells in the design. Use false to prevent
replacement or true to allow replacement. The default setting is
true. This value is not case-sensitive.
cell_design_ref_list
A list of design objects for scan replacement. Objects can be any
of the following sequential types: cells (such as flip-flops and
latches, which can be mapped or unmapped), hierarchical cells
(containing flip-flops or latches), references, library cells, and
designs.
-multibit multibit_component_list
Use this option if one or more of the cells you are specifying are
multibit components. You can use a separate set_scan_element
command to specify multibit cells, or you can combine regular and
multibit cells in the same command as in the following example:
Note:
You should not use the set_scan_element true command if you
use the compile -scan command to replace elements.
The syntax is
set_scan_segment
scan_segment_name
[-access signal_type_pin_pairs_list]
[-contains member_list]
[-synthesizable true | false | default]
[-reverse_order true | false]
scan_segment_name
Gives the scan segment a name. To prevent possible future
conflicts, choose a name that is different from the names of
existing objects. If the scan segment name is the name of a multibit
segment, the insert_scan command interprets the
set_scan_segment command as an explicit specification of a
synthesizable segment.
-access signal_type_pin_pairs_list
Instructs insert_scan how to access the segment. Consists of a
list of ordered pairs, each consisting of a scan signal type and a
design pin. Valid signal types include test_clock, test_scan_clock,
test_scan_clock_a, test_scan_clock_b, test_scan_enable,
test_scan_enable_inverted, test_scan_in, and test_scan_out.
Validation ensures that specified signal types are consistent with
the design scan style.
-contains member_list
Defines scan segment components. This ordered list can include
sequential cells, multibit components, and design instances. You
can use wildcards and dc_shell command expressions like
all_registers(), filter(), and find() to identify design objects.
The syntax is
set_scan_link
scan_link_name
wire | scan_out_lockup
scan_link_name
Indicates the name of the scan link.
wire | scan_out_lockup
Specifies the scan link type. This can be a wire or a lock-up latch
design that retimes scan cell scan-out signals.
Note:
The remove_scan_specification does not affect the settings made
with the set_scan_register_type command. These settings can
be removed by using the remove_scan_register_type command.
For details, see “Specifying Scan Cells” on page 5-6.
remove_scan_specification
[-all]
[-chain chain_name_list]
[-configuration]
[-link link_name_list]
[-segment segment_name_list]
[-signal port_name_list]
-all
Removes all set_scan_path, set_scan_configuration,
set_scan_link, set_scan_segment, and set_scan_signal
command specifications from the design.
-chain chain_name_list
Removes all specifications that reference scan chains in
chain_name_list. Removes associated set_scan_path command
specifications from the design and updates set_scan_signal
command specifications.
-configuration
Restores set_scan_configuration command options to
default values.
-link link_name_list
Removes all specifications that reference scan links in
link_name_list. Removes associated set_scan_link command
specifications from the design and updates set_scan_path
command specifications.
-segment segment_name_list
Removes all specifications that reference scan segments in
segment_name_list. Scan segments in segment_name_list can
be synthesizable segment names. Removes associated
set_scan_segment command specifications from the design and
updates set_scan_path command specifications.
-signal port_name_list
Removes all specifications that reference scan signals associated
with design ports in port_name_list. Removes associated
set_scan_signal command specifications from the design.
*The set_signal_type command is only outmoded as a way to specify a pin you want insert_scan
to use as a test pin (a desired test port for scan insertion). Use the set_scan_signal command
for this purpose instead. Continue to use the set_signal_type command to specify a pin that is
already used as a test pin (an existing test port for design rule checking).
dc_shell> check_test
dc_shell> preview_scan
dc_shell> insert_scan
dc_shell> check_test
You can iterate around the specification and preview processes until
you are satisfied with the proposed architecture. After you are
satisfied with the proposed architecture, use the insert_scan
command to implement the scan chains.
After you have inserted the scan chains, run check_test again. The
check_test command now checks that the scan chains are valid (can
successfully shift data in and out) and performs more checks to
determine that the scan cells can reliably capture data during the
parallel capture cycle of the scan test sequence.
Preview Command
preview_scan
[-command insert_scan | reoptimize_design]
[-script]
[-show cells | scan | scan_clocks | scan_signals
| segments | all]
-script
Instructs preview_scan to produce a dc_shell script that specifies
the defined scan design. The script is written to standard output.
The target library must contain cells that have been defined to operate
as scan cells. The insert_scan command uses these scan cells to
replace nonscan sequential logic used in the design. The library
describes each scan cell’s test characteristics, the test input/output
signal characteristics, and multibit characteristics (if any).
For information on the scan cells in the technology library you are
using, see your ASIC vendor. For information on creating technology
library elements in general, see the Library Compiler Reference
Manual, Volume 1. For information on modeling scan cells in
particular, see the chapter called “Defining Test Cells” in the Library
Compiler User Guide, Volume 1.
• test_clock_port_naming_style
• test_scan_clock_a_port_naming_style
• test_scan_clock_b_port_naming_style
• test_scan_clock_port_naming_style
• test_scan_enable_inverted_port_naming_style
• test_scan_enable_port_naming_style
• test_clock_in_port_naming_style
• test_clock_out_port_naming_style
For more information on specifying test ports, see the earlier section
“Specifying Scan Signals for the Current Design.”
insert_scan
[-map_effort low | medium | high]
[-ignore_compile_design_rules]
-ignore_compile_design_rules
Indicates that insert_scan is to exit before correcting compile
design rule violations. This option allows you to check the results
in a constraint report before correcting the violations. By default,
insert_scan corrects compile design rule violations (for example,
max_transition, max_fanout, max_capacitance, and min_path)
and performs mapping optimization before exiting.
For example, to add test circuitry to the design WC66, enter the
following:
It is very important that you check and then fix, or at least understand
and accept, any violations that test design rule checking finds.
1. set_scan_path commands
2. Clock signals in the design
Internal Clocks
For the purpose of building scan chains, the insert_scan command,
by default, treats all internal clock signals driven by the same top-level
port as the same clock signal.
Figure 8-2 Circuit With Same Top-Level Clock Driving Internal Clock Signals
D1
reg1
CLK1
CLK
OP1
D2
reg2
CLK2
PLL
test mode
test_si
reg1
test_so
reg2
Note that the multiplexer on CLK2 delays the arrival of the clock at
reg2. This can cause a hold-time violation, unless you enable hold-
time violation fixing using the set_fix_hold command. If you enable
hold-time violation fixing (set_fix_hold CLK) before building scan
chains, the insert_scan command adds buffers to the scan
connection between reg1/Q and reg2/TI.
You can avoid creating the hold-time violation by assigning the two
flip-flops to separate scan chains. To do this, use the following
command:
reg1
test_si2 test_so2
reg2
reg1
lockup
reg2
You can enable the same behavior on just one clock line by using the
-internal_clocks option of the create_test_clock command. Using the
circuit shown in Figure 8-2, the following command tells the
insert_scan command to treat only internal clocks driven by the CLK
clock line as separate clocks:
Note:
The -internal_clocks option only affects scan chain building for the
multiplexed flip-flop scan style.
Scan Replacement
The insert_scan command does not perform scan replacement on a
design in two cases. The first case is when you specify no scan
replacement. You do this by using the set_scan_configuration
-replace false command.
The second case is when you previously used the compile -scan
command to synthesize and optimize your design. The compile -scan
command implements all of the flip-flops in the design with scan flip-
flops. The insert_scan command identifies the flip-flops as scan flip-
flops, skips scan replacement, and issues a warning message that it
did not perform scan replacement.
You might want to specify which flip-flop scan cells in the target library
are to be used for replacing nonscan cells in the design. In that case,
use the set_scan_register_type command. This command restricts
the choices of scan cells available for scan replacement. You can
apply this restriction to the current design, to particular designs, or to
particular cell instances in the design. For details, see “Specifying
Scan Cells” on page 5-6.
Unscanning Elements
Unscanning an element takes place when the insert_scan command
remaps a scannable sequential cell that causes a design rule violation
to a nonscan cell. The insert_scan command unscans sequential
elements in the following cases:
D2
OUT1
D1
FF1 FF2
CLK
D2
test_so
test_si OUT1
D1
test_se
FF1 FF2
CLK
Again, the insert_scan command computes the logic values that must
be applied to driver input pins to configure each port. The insert_scan
command cannot apply the logic values if the required logic values
conflict with previous logic values. If this does occur, insert_scan adds
generic configuration logic where needed. Then insert_scan finds all
pins that do not hold the values needed during scan shift, and it gates
them.
Given the best hookup pin, scan insertion builds the rest of the chain.
The insert_scan command uses the preferred routing order specified
with the set_scan_path command to route between serial signals and
scan cells. If no preferred order is specified, insert_scan uses a
default ordering scheme.
The insert_scan command selects the scan-out driver for each cell
using the following criteria:
• Clocked-scan
• Level-Sensitive Scan Design (LSSD)
• Clocked LSSD
• Auxiliary clocked LSSD
The test clocks are dedicated test clocks for each system clock
domain. This makes clock trees and clock signal routing easier. The
insert_scan command uses the following guidelines to determine how
test clocks are added:
Figure 8-8 Adding Test Clocks for Sequential Cells With Multiple Test Clocks
C1 c U1 C2 c U2
port_1 port_2
a a
B1 b b
c U3 c U4
port_3 port_4
a a
B2 b b
For cells that are clocked by the same system clock, the insert_scan
command adds the same test clock to these cells even though they
are clocked by different clock senses (rising edge, falling edge, active
low, and active high). When a clock is distributed to pins with mixed
clock senses, the insert_scan command inserts inverters to ensure
design functionality.
• Creates, at most, one new port per design when you want to use
only the slave clocks distributed to the double-latch elements
• Creates one or more ports when you want test clocks created
according to different system clocks
C1 c U2 C1 c U2
DL DL
B1 b B1 b
c U3 c U3
FF FF
b
Note:
For clarity, the A clock is omitted in Figure 8-9 through Figure
8-14 after scan replacement.
• Connect to a new slave clock, creating a new one if necessary, if
a system clock drives multiple cells with different slave clocks. See
Figure 8-10.
C1 c U2 C1 c U2
DL DL
B1 b B1 b
c U3 c U3
DL DL
B2 b B2 b
C1 c U2 C1 c U2
DL DL
B1 b B1 b
C2 c U1 C2 c U1
SL new port DL
b
C1 c U2 C1 c U2
SL DL
b
C2 c U2 C2 c U2
SL a DL
new port 2
b
C3 c U3 C3 c U3
DL DL
B3 b B3 b
C2 c U2 C2 c U2
SL a DL
b
C3 c U3 C3 c U3
DL DL
B3 b B3 b
Mapping Optimization
The insert_scan command optimizes the current design if it has
performance constraint violations. The optimization level depends on
the -map_effort argument setting.
Low optimization
For -map_effort low, the insert_scan command resizes only the
logic it has added to the design.
Medium optimization
For -map_effort medium, the insert_scan command first resizes
logic it has added. If constraints remain violated, the insert_scan
command applies a set of heuristic optimization algorithms to all
critical paths in the design.
High optimization
For map_effort high, the insert_scan command first resizes logic
it has added. Again, if constraints remain violated, the insert_scan
command performs critical path optimization on the entire design.
If constraints are still violated, the insert_scan command applies
sequential mapping to sequential elements on critical paths. The
command then tries to reduce design area, downsizing cells that
are not on a critical path, and eliminating extra inverters. Next, the
insert_scan command attempts to eliminate any remaining
constraint violations using normal critical path optimization.
The medium optimization level uses the following heuristic
optimization algorithms:
test_dont_fix_constraint_violations = true
• Create input ports and set all necessary timing attributes on them
and declare them to the insert_scan command using the
set_scan_signal command before using the insert_scan
command.
• Use a two-pass insert_scan flow with timing attributes set after
the first pass.
Note:
To show changes caused by using the insert_scan command, you
must run the check_test command before the report_test
command. Running an incremental compile or other command
that changes the database causes the check_test results to be
discarded. In that case, you need to run check_test again before
you use report_test.
The report shows the scan cells in the order that they are connected
in the scan chain. Cells in the list are sometimes annotated with a
single character to provide more information about the scan data or
the cell at that point in the chain:
element is used for connection to the next cell in the scan chain.
However, any type of signal inversion between the two cells can
cause this notation to appear. Here are some more examples:
• An inverter gate between the current cell and the next cell
• A negative (bubble) D input to the sequential input of the next cell
• An inverter gate at the D input of the next cell, internal to that cell
Therefore, the cause of the signal inversion is not always obvious.
report_test
[-configuration]
[-state]
[-constraints]
[-port]
[-clock]
[-scan_path]
[-nosplit]
-configuration
Selects the Configuration Report for display. This report contains
a list of scan configuration settings for the current design, as
specified by the set_scan_configuration command. The scan
configuration for the design includes, among other things,
information about the test methodology, the scan style for the
design, number of scan chains desired, and type of clock mixing.
-state
Selects the State Report for display. This report contains the
current scan status description for the current design. Possible
values are unknown, scan cells replaced, scan cells replaced with
loops, scan cells replaced and scan routed, and existing scan
circuitry.
-constraints
Selects the Constraints Report for display. This report contains a
list of test constraints for the current design, as specified by the
set_min_fault_coverage command, and it gives the status of
whether the constraints have been met by the insert_scan
command.
-port
Selects the Port Report for display. This report contains details of
test ports for the current design, and it displays (if applicable) the
signal type, scan chain index, and clock attributes.
-clock
Selects the Clock Report for display. The report contains details
of clock sources and associated derived clocks, if any.
-scan_path
Selects the Scan Path Report for display. This report contains a
list of every scan cell on the scan path for the current design. If
you get an error message saying that no scan path is defined, try
running check_test again, followed immediately by the report_test
-scan_path command.
-nosplit
Most design information is listed in fixed-width columns. If the
information for a given field exceeds its column’s width, the next
field begins on a new line, starting in the correct column. This
option prevents line splitting and facilitates writing software to
extract information from the report output.
For other options to the report_test command, see the man pages.
Multibit Support
You control multibit test synthesis through the specification of the scan
configuration. You do this using the following commands:
• set_scan_configuration
• set_scan_transparent
• remove_scan_specification
• set_scan_segment
• set_scan_path
• set_scan_element
Commands that accept segment arguments also accept multibit
components. You can refer by instance name to multibit components
from the top-level design through the design hierarchy. Commands
that accept sets of cells also accept multibit components. When you
specify a multibit component as being a part of a larger segment, the
multibit component is included in the larger user-defined segment
without modification.
The number of cells after scan replacement can change. For example,
a 4-bit cell can be scan-replaced by two 2-bit cells. If this occurs, the
two 2-bit cells get new names. If the cell is scan-replaced with a cell
of equal width, a 4-bit cell replaced by a 4-bit cell for example, then
the name of the cell remains the same.
If the scan style you select has a dedicated test clock, the state of the
nonscan cells is easy for Test Compiler Plus to maintain during scan
shift because the test clock does not affect the nonscan cells.
For the multiplexed flip-flop scan style, which uses the same clock for
both normal operation and scan shift, this requirement means that
the clock must be gated to prevent clocking of nonscan cells during
scan shift.
Test Compiler Plus offers a method for clock gating in multiplexed flip-
flop partial-scan designs. Clock gating is performed once, at the top
level of the design, making it much easier to balance the scan and
nonscan clock trees.
dc_shell> max_area n
dc_shell> max_delay n
dc_shell> set_min_fault_coverage lower_bound \
-timing_critical -area_critical
Setting Constraints
The set_min_fault_coverage command is covered in detail in this
section. The other two constraints are explained briefly; for a detailed
discussion, see the Design Compiler reference manuals.
set_min_fault_coverage Command
You can define a lower bound of acceptable fault coverage for your
partial-scan design with the set_min_fault_coverage command. This
command has no effect on full-scan designs. The command syntax is
lower_bound
Is an integer in the range of 80 to 100. Test Compiler Plus maps
the lower bound you select into a discrete fault coverage range.
The ranges are 80 percent to 100 percent, 90 percent to 100
percent, 95 percent to 100 percent, and 98 percent to 100 percent.
Test Compiler Plus reports the range when you issue the
command, as shown in the following example:
dc_shell> set_min_fault_coverage 92
Setting fault coverage target range 90-100% on
'design'.
-area_critical
Indicates that meeting the area constraint takes priority over
meeting the lower bound on fault coverage. Insertion of scan test
circuitry does not increase the area of the design beyond the value
specified by the max_area variable.
-timing_critical
Indicates that timing constraints are more important than the lower
bound on fault coverage. When you use this option, Test Compiler
Plus guarantees that the scan circuitry it inserts will not lengthen
the critical path beyond the value defined by the timing constraints
you set. If the timing constraint limits the number of cells scanned,
Test Compiler Plus reports the cells that would violate the
constraint if they were scanned.
When you run insert_scan, Test Compiler Plus reports how many
cells are replaced by scan cells.
Note:
Scan design rule violations have a significant effect on fault
coverage. If your design violates scan design rules, the overall
fault coverage of your design will be lower than the target fault
coverage you set.
options, and the area and performance constraints you set. Typically,
the percentage of registers scanned falls between 25 percent and 75
percent.
You can override the automatic scan selection process with the
set_scan_element command, explained earlier in this chapter. You
can force individual registers that pass design rule checking to be
scanned or not scanned.
These commands instruct Test Compiler Plus to keep the total design
area under 50,000 gates, even if the fault coverage goal might not be
met.
Assume you are ready for the final volume production version of the
chip in the previous example. At this stage, the fault coverage target
has been raised to 95 percent, and the speed constraint remains at
50 MHz (a 20-ns period). The following example shows the
commands you enter:
For this example, Test Compiler Plus determines that fault coverage
of 95 percent or better is more important than limiting critical paths
to 20 ns or less, because the -timing_critical option is not used. The
Clock Gating
If the test methodology is partial_scan and the scan style is
multiplexed_flip_flop, insert_scan adds clock gating logic. Clock
gating prevents state changes in nonscan storage elements while
scan elements are changing in scan mode. Any nonscan storage
element that shares an active clock with a scan element will have the
function of the signal on its clock input changed. The new clock
function for the nonscan element is to hold it inactive in scan mode.
Note:
The insert_scan command continues to run, it just does not modify
dont_touch nets.
You can override the default of entire_design clock gating using the
-clock_gating option to the set_scan_configuration command.
Scan chain clocking issues are different for edge-sensitive scan shift
and LSSD scan styles. Edge-sensitive scan shift scan styles include
multiplexed flip-flop and clocked-scan.
from the clock-to-Q to the test input of the next stage is longer than
the hold time of that stage, the shift occurs reliably on the active edge
of the clock. The clock must have a controlled path from an external
primary input so the shift function can be performed on demand in
any state.
Skew Issues
Skew can arise from clock tree buffers, but a more serious source of
skew is gating and multiplexing logic that is inserted on clock lines to
obtain supposedly congruent clocks for the scan chain. Gating logic
is not necessarily discouraged, but its introduction can cause hold-
time problems that must be addressed. Fortunately, the Synopsys
environment includes timing analysis that detects hold-time
problems.
D Q D Q
TI TI
C C
Delay
Mixed Phases
If clocking on the scan chain is both inverted and noninverted, a
problem similar to excessive skew can occur. For example, if the
upstream flip-flop is rising-edge triggered and the downstream flip-
flop is falling-edge triggered, a positive clock pulse first clocks a value
into the upstream flip-flop. Then, on the same pulse’s falling edge, it
clocks the same value into the downstream flip-flop. Figure 8-16
illustrates this condition.
If you must mix phases, there can be only one point in the chain where
the clock phase reverses and clocks upstream flip-flops on the trailing
edge of the clock. You must clock downstream flip-flops on the leading
edge. For a positive pulse, the negative edge-triggered flip-flop must
be clocked first; for a negative pulse, the positive edge-triggered flip-
flop must be clocked first.
D Q D Q
TI TI
C C
Good
Clock second Clock first
Bad
Multiple Clocks
If clocks originate from different sources, you must consider whether
these clocks can be constrained to the same timing, given real-world
tester constraints. The timing is determined from the waveforms
defined with the create_test_clock command. If optimistic
assumptions are made in the defined waveforms, the circuit might not
test properly. Consequently, using multiple clocks results in greater
risk and lower predictability than using a single clock for all cells on
a scan chain.
The same clocking requirements apply to all of the LSSD scan styles:
single-latch LSSD, double-latch LSSD, clocked LSSD, and auxiliary-
clock LSSD.
Scan mode does not require a scan mode control. Scan control is
performed by using a clock different from the one used in functional
mode.
Synchronized Clocks
You must synchronize the clocks for the various scan cells in the chain.
Master latches must be enabled by the same clock pulse; slave
latches must be enabled by a different, nonoverlapping clock pulse.
If there is overlap, all latches are simultaneously transparent, causing
incorrect operation.
Skew Control
Unlike edge-sensitive scan shift scan styles, LSSD scan styles do not
require skew control because there is no race between clock and
data. Correct low-frequency operation of the circuit for scan is
ensured with LSSD.