Et Ref Testpatterns
Et Ref Testpatterns
Et Ref Testpatterns
Formats
Product Version 15.14
January 2017
© 2003–2015 Cadence Design Systems, Inc. All rights reserved.
Portions © IBM Corporation, the Trustees of Indiana University, University of Notre Dame, the Ohio State
University, Larry Wall. Used by permission.
Printed in the United States of America.
Cadence Design Systems, Inc. (Cadence), 2655 Seely Ave., San Jose, CA 95134, USA.
Product Encounter® Test and Diagnostics contains technology licensed from, and copyrighted by:
1. IBM Corporation, and is © 1994-2002, IBM Corporation. All rights reserved. IBM is a Trademark of
International Business Machine Corporation;.
2. The Trustees of Indiana University and is © 2001-2002, the Trustees of Indiana University. All rights
reserved.
3. The University of Notre Dame and is © 1998-2001, the University of Notre Dame. All rights reserved.
4. The Ohio State University and is © 1994-1998, the Ohio State University. All rights reserved.
5. Perl Copyright © 1987-2002, Larry Wall
Associated third party license terms for this product version may be found in the README.txt file at
downloads.cadence.com.
Open SystemC, Open SystemC Initiative, OSCI, SystemC, and SystemC Initiative are trademarks or
registered trademarks of Open SystemC Initiative, Inc. in the United States and other countries and are
used with permission.
Trademarks: Trademarks and service marks of Cadence Design Systems, Inc. contained in this document
are attributed to Cadence with the appropriate symbol. For queries regarding Cadence’s trademarks,
contact the corporate legal department at the address shown above or call 800.862.4522. All other
trademarks are the property of their respective holders.
Restricted Permission: This publication is protected by copyright law and international treaties and
contains trade secrets and proprietary information owned by Cadence. Unauthorized reproduction or
distribution of this publication, or any portion of it, may result in civil and criminal penalties. Except as
specified in this permission statement, this publication may not be copied, reproduced, modified, published,
uploaded, posted, transmitted, or distributed in any way, without prior written permission from Cadence.
Unless otherwise agreed to by Cadence in writing, this statement grants Cadence customers permission to
print one (1) hard copy of this publication subject to the following conditions:
1. The publication may be used only in accordance with a written agreement between Cadence and its
customer.
2. The publication may not be modified in any way.
3. Any authorized copy of the publication or portion thereof must include all original copyright,
trademark, and other proprietary notices and this permission statement.
4. The information contained in this document cannot be used in the development of like products or
software, whether for internal or external use, and shall not be used for the benefit of any other party,
whether or not for consideration.
Disclaimer: Information in this publication is subject to change without notice and does not represent a
commitment on the part of Cadence. Except as may be explicitly set forth in such agreement, Cadence does
not make, and expressly disclaims, any representations or warranties as to the completeness, accuracy or
usefulness of the information contained in this document. Cadence does not warrant that use of such
information will not infringe any third party rights, nor does Cadence assume any liability for damages or
costs of any kind that may result from use of such information.
Restricted Rights: Use, duplication, or disclosure by the Government is subject to restrictions as set forth
in FAR52.227-14 and DFAR252.227-7013 et seq. or its successor
Encounter Test: Reference: Test Pattern Formats
Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Typographic and Syntax Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Encounter Test Documentation Roadmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Getting Help for Encounter Test and Diagnostics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Contacting Customer Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Encounter Test And Diagnostics Licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Using Encounter Test Contrib Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
What We Changed for This Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1
Test Vector Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
An Overview to Test Vector Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2
Test Vector Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
TBDpatt and TBDseqPatt Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
TBDpatt_Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Experiment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Test_Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Tester_Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Test_Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Test_Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Application Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Keyed Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Summary Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Adjusting Default Event Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
OPCG Test Pattern Application Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
WGL Pattern Data Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
A
Scan Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Scan Operation Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
B
Encounter Test Pattern Data Examples . . . . . . . . . . . . . . . . . . . . . . . 201
Vector Format Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Node List Format Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
AC Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
1149.1 Mode Initialization Example with User-Supplied Custom Scan Sequence . . . . 211
C
WGL Pattern Data Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
WGL Scan Vector Explanation and Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
WGL Scanchain Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
WGL Scanstate Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
WGL Scan Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Deterministic WGL Pattern Data Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
WGL Deterministic Signals File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
WGL LSSD Flush Test Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
WGL Scan Chain Test Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
WGL Logic Test Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
D
STIL Pattern Data Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Deterministic STIL Pattern Data Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
STIL Deterministic Signals File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
STIL LSSD Flush Test Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
STIL Scan Chain Test Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
STIL Logic Test Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
STIL IDDq Test Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Timed Dynamic STIL Pattern Data Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
STIL Timed Signals File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
STIL Timed Logic Test Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
E
Verilog Pattern Data Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Deterministic Test Verilog Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Verilog IDDq Test Main Simulation File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Timed Dynamic Verilog Pattern Data Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Verilog Timed Dynamic Pattern Main Simulation File . . . . . . . . . . . . . . . . . . . . . . . . 299
F
TBDpatt Language Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
TBDpatt File Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
TBDpatt Language Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
List of Figures
Figure 1-1 Test Data Interface Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Figure 2-1 Timings of a Dynamic Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Figure 2-2 A Sample Timing for Dynamic Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Figure 2-3 OPCG Scan Shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Figure 2-4 Sequence with OPCG Issuing At-speed Delay Test Clocks . . . . . . . . . . . . . . 146
Figure A-1 Scan Operation Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Preface
Getting
Started New User
Overview
and
Models
Testmode
Guides
Test
Faults
ATPG
Test Vectors
Diagnostic
Flow PMBIST
PMBIST ET Pattern
Click the Help or ? buttons on Encounter Test forms to navigate to help for the form and its
related topics.
Refer to the following in the Encounter Test: Reference: GUI for additional details:
■ “Help Pull-down” describes the Help selections for the Encounter Test main window.
■ “View Schematic Help Pull-down” describes the Help selections for the Encounter Test
View Schematic window.
1
Test Vector Overview
Figure 1-1 shows the interaction of Encounter Test applications and resulting vectors.
Encounter Test can also create a proprietary version of the test pattern data known as
TBDpatt. Refer to TBDpatt and TBDseqPatt Format on page 15 for more information.
Encounter Test creates the TBDpatt format by using the report_vectors command. Refer to
report_vectors in the Encounter Test: Reference: Commands for more information.
Use the TBDpatt format to assign unique event sequences for custom control logic within a
design, such as OPCG (On Product Clock Generator). To assign unique test sequences, build
a test mode using the following command:
build_testmode seqdef=TBDpatt filename
Then run ATPG to create test patterns and introduce a special pattern application sequence:
create_logic_tests sequencefile=TBDseqpatt filename
The parameters of the write_vectors command are independent of the target test language.
For a complete list of the supported parameters, run the write_vectors -H command.
Note: Select ATPG - Write Vectors to generate test patterns using the graphical user
interface.
2
Test Vector Formats
TBDpatt files contain test patterns (experiments) in ASCII form. TBDseqPatt files are a
specialized form of TBDpatt files containing sequence definitions in ASCII form and a subset
of the statements used in TBDpatt files. The structure of both these files is identical, but they
contain different types of data. TBDpatt files contain actual test pattern data and the test
sequences and timing information associated with that data. TBDseqPatt files contain only
sequence definitions and associated application objects, such as timing data, with no vector
data. Therefore, the contents of TBDseqPatt files cannot be directly applied for fault
simulation or written out in STIL, WGL, or Verilog. We commonly refer to the language of both
the TBDseqPatt and TBDpatt files as the TBDpatt language.
The main purpose of TBDseqPatt files is to supply Encounter Test with any special
sequences that must be applied. Some of the commonly-used special sequences are
mentioned below:
■ Initialize the design
❑ This is referred to as the Mode Initialization Sequence or modeinit
❑ An example of this is turning off the IEEE 1149.1 boundary scan logic to access the
parallel scan chains in the design or programming the on-product clocking logic and
synchronizing the PLLs.
■ Define a special test application sequence
❑ This can be used to force test patterns created in Encounter Test have a user-
defined form and to ensure the correct operation of the hardware in an on-product
clocking environment.
■ Special sequences to enter into or out of scan shift modes of operation
❑ The Scan Preconditioning Sequence (scanprecond) is used to set up the design
state to initialize a scan operation.
❑ The Scan Exit Sequence (scanexit) is used to set up the design for test operation
when the scan operation is complete.
■ Define any special sequences that must be applied during the actual scan shift operation
❑ The Scan Sequence (scansequence) actually applies the scan load and measure
values and performs the shift operation.
To import a special initialization or scan sequence, provide a TBDpatt file as input when
building a test mode:
build_test_mode testmode=OPCG_mode seqpath=<directory path> seqdef=<A TBDpatt
input file with "modeinit">
To import a file with special sequences to apply the test patterns, provide a TBDseqPatt file
on the pattern generation command line, as follows:
create_logic_tests testmode=OPCG_mode sequencefile=<TBDseqPatt file>
testsequence=<A sequence defined in the TBDseqPatt file>
To produce a TBDpatt file from an existing Encounter Test experiment, use the report_vectors
command. To view the automatically-generated TBDseqPatt sequences for MBIST and
OPMISR+ test modes, use the report_sequences command. An example for an OPMISR+
compression logic test mode is given below. The output for an OPMISR+ test mode will also
contain some of the above-mentioned sequences.
report_sequences testmode=OPMISRPLUS outputfile=TBDseqPatt.OPMISRPLUS format=node
The test pattern data itself is organized in a hierarchy of objects. The higher level objects
group the lower level objects in a meaningful way. At the lowest level of the hierarchy are
events which represent the actual test pattern data. In the TBDpatt and TBDseqPatt files,
each of these objects is identified by a numbering system which reflects its position in the test
data hierarchy.
Each object may contain special application objects and keyed data in addition to the test data
hierarchy. Refer to “Application Object” on page 111 for detailed information about the
application objects. Refer to “Keyed Data” on page 139 for detailed information about keyed
data.
Following is the structural hierarchy of a TBDseqPatt file. The file is shown as the top level
of the hierarchy. It consists of a header, vector correspondence lists (as comments) and
sequence definitions.
TBDseqPatt file header
Include "fileName";
//Vector Correspondence List
Sequence Definition
Pattern
Event
The header indicates that this file is in the TBDpatt format and describes how the input is
represented within the file.
The vector correspondence data contains information on how to map an event’s data, which
is in vector form, to individual pins or registers.
A sequence definition contains patterns, which contain events. These define the specific
actions to be taken on the tester or in the simulation environment.
Following is the structural hierarchy of a TBDpatt file. The file is shown as the top level of the
hierarchy. It consists of vector correspondence lists (as comments) and experiment blocks. If
audits indicate that the test patterns contained in these Vectors may be suspect, an audit
summary is written to the pattern file following the vector correspondence. An experiment
block is a collection of test sections, each of which is a collection of tester loops, and so on.
TBDpatt file header
// Vector Correspondence List
Experiment Block
Test_Section
Tester_Loop
Test_Procedure
Test_Sequence
Pattern
Event
For additional information about test data structural hierarchy, refer to Encounter Test Vector
Data in the Encounter Test: Guide 6: Test Vectors.
In the vector form, all primary input, primary output, scannable latch, and weight values are
listed as strings of logic values. The pin to which the value applies is determined by the
position of the value in the vector. An example of a PI stimulus vector is:
Stim_PI (): 0110111;
By looking at the example, it is possible to determine that this design has seven primary
inputs. This is the case since all vectors must fully specify the entity type that is being
stimulated. The correspondence of each vector value to a particular PI pin is specified in the
vector correspondence. This can be written in a separate file using
write_vector_correspondence or included when writing the TBDpatt or TBDseqPatt files. The
vector correspondence is used to determine this relationship for both import and export of
TBDpatt. It is determined automatically by the system and cannot be directly modified by the
user. All user-created test sequences in vector form must conform to the order specified in
the vector correspondence.
#Vector_Correspondence
#
# Note:
# If the original position of any scancell is changed within the Scan_Load or
# Scan_Unload vectors below, it is possible that some of the information
# included in the controllable and Measure_Register commentary will no
#
# index => Encounter Test Manufacturing model pin index
#
#
# PI:
# (PI 1 = "Pin.f.l.fulladder.nl.A", # index = 0
# PI 2 = "Pin.f.l.fulladder.nl.B", # index = 1
# PI 3 = "Pin.f.l.fulladder.nl.CLK", # index = 2 tf = -ES
# PI 4 = "Pin.f.l.fulladder.nl.Test", # index = 3 tf = +SE
# PI 5 = "Pin.f.l.fulladder.nl.carryin", # index = 4
# PI 6 = "Pin.f.l.fulladder.nl.scanin") # index = 5 tf = SI
#
# PO:
# (PO 1 = "Pin.f.l.fulladder.nl.SnC", # index = 6
# PO 2 = "Pin.f.l.fulladder.nl.carryout", # index = 7 tf = SO
# PO 3 = "Pin.f.l.fulladder.nl.sum") # index = 8
#
# Scan_Chain Definition
# Legend:
# Load_Node => Pin where logic values are placed for transfer into a
# scancell via the load operation (e.g. a scan-in primary
# input).
# Unload_Node => Pin where scancell logic values appear as the result of an
# unload operation (e.g. a scan-out primary output).
# index => Encounter Test Manufacturing model pin index for load/unload
nodes
# index for stim/measure scancells.
# Load_Sect => The id of the load section.
# Unload_Sect => The id of the unload section.
# Bit_Length => The number of bit positions in controllable/observable
# scan chain.
# Number_Of_RSLs => The number of Representative Stim Latches/Flops in the
# controllable scan chain.
# Number_Of_SSLs => The number of Skewed Stim Latches/Flops in the controllable
# scan chain.
# Number_Of_RMLs => The number of Representative Measure Latches/Flops in the
# Measure_Register.
# First_Stim_Bit => The bit position in the Scan_Load vector where RSL
# values for this scan chain begin.
# Last_Stim_Bit => The bit position in the Scan_Load vector where RSL
# values for this scan chain stop.
# First_Meas_Bit => The bit position in the Scan_Unload vector where RML
# values for this scan chain begin.
# Last_Meas_Bit => The bit position in the Scan_Unload vector where RML
# values for this scan chain stop.
#
# controllable scan chain 1:
# Load_Node = "Pin.f.l.fulladder.nl.scanin" index = 5
# Load_sect = 3
# Bit_Length = 5
# Number_Of_RSLs = 5# Number_Of_SSLs = 0
# First_Stim_Bit = 1 Last_Stim_Bit = 5
#
# Measure_Register 1:
# Unload_Node = "Pin.f.l.fulladder.nl.carryout" index = 7
# Unload_sect = 3
# Bit_Length = 5
# Number_Of_RMLs = 5
# First_Meas_Bit = 1 Last_Meas_Bit = 5
#
# RSL => Representative Stim Latch/Flop
# SSL => Skewed Stim Latch/Flop
# RML => Representative Measure Latch/Flop
# CR => The id of the controllable scan chain which includes this scancell.
# This id can be correlated to the scan chain definition
# information listed above.
# OR => The id of the Measure_Register which includes this scancell.
# This id can be correlated to the scan chain definition
# information listed above.
# pos => Position in the scan chain which this scancell occupies.
# For a controllable scan chain, the first scancell which receives a
# value from the load node is in position 1 (i.e., scancell
# closest to the load node). For a Measure_Register, the
# scancell whose value reaches the unload node first is in
# position 1 (i.e., scancell closest to the unload node).
# index => Encounter Test Manufacturing hierModel index for the RSL,
# RML or SSL (scancell) block.
# invert => "Yes" means there is inversion in the scan chain
# between this scancell and the scan chain I/O pin. For
# a stim scancell, the inversion is with respect to the scan
# chain input pin; for a measure scancell, the inversion
# is with respect to the scan chain output pin.
# "No" means there is no inversion between the scan chain
# I/O pin and the scancell.
#
# Scan_Load:
# (RSL 1 = "Block.f.l.fulladder.nl.chain1.ScanReg.slave", # CR = 1 pos = 1
index = 13 invert = no
# RSL 2 = "Block.f.l.fulladder.nl.chain2.ScanReg.slave", # CR = 1 pos = 2
index = 19 invert = no
# RSL 3 = "Block.f.l.fulladder.nl.chain3.ScanReg.slave", # CR = 1 pos = 3
index = 25 invert = no
# RSL 4 = "Block.f.l.fulladder.nl.chain4.ScanReg.slave", # CR = 1 pos = 4
index = 31 invert = no
# RSL 5 = "Block.f.l.fulladder.nl.chain5.ScanReg.slave") # CR = 1 pos = 5
index = 37 invert = no
#
# Scan_Unload:
# (RML 1 = "Block.f.l.fulladder.nl.chain5.ScanReg.slave", # OR = 1 pos = 1
index = 37 invert = no
# RML 2 = "Block.f.l.fulladder.nl.chain4.ScanReg.slave", # OR = 1 pos = 2
index = 31 invert = no
This vector correspondence data describes a 1-bit full adder design with a 5-bit controllable
and Measure_Register running through it. The scan chain loads through a primary input
named scan_in and is observed through the primary output named carry_out. The above-
mentioned data shows the order in which all of the primary inputs, primary outputs, and scan
chains will be presented when test pattern data is written out in vector (as opposed to node)
form in the TBDpatt or TBDseqPatt files. For example, to stim the scan enable pin named Test
to a 1, the vector data would be as follows:
Event 1.1.1 Stim_PI(): ...1..;
Similarly, to measure a value of 0 from only the register named chain4.ScanReg.slave, the
vector data would be as follows:
Event 1.4.1 Scan_Unload (default_value = X): .0...;
In the node list form, PIs, POs and scannable latches are listed as a node=logic value pair,
where node specifies the pin or flop being referenced. For example,
Stim_PI ():
"Pin.f.l.PGMUX.n1.DATA00"=0
"Pin.f.l.PGMUX.n1.DATA01"=0;
The above-mentioned example shows the pin names specified in full form. You can also use
the short form of the name, for example:
Stim_PI ():
"DATA00"=0
"DATA01"=0;
In the short form of the name, the top-level block name (PGMUX) and type of entity (Pin) are
implicit.
This form of output generally consumes more space than the vector form, but in some
situations is easier to analyze visually. Pulse, Stim_Clock, Pulse_PPI, and
Stim_PPI_Clock events are always written in this form, regardless of the form specified to
be the TBDpatt format header.
For both vector and node list formats, all referenced nodes are given in either name or index
form. The name form specifies the node as a hierarchical pin or block name and must be
contained within quotation marks. The index form specifies the node as an Encounter Test
model index.
A TBDpatt file in name form can often be imported and reused for an edited version of that
same design, as long as the primary input and output pin names have not changed and the
hierarchical latch names have not changed. Such processing is not recommended if the index
form is used since the model indices will almost assuredly be different between the original
design and a modified version of that same design. The vector formatted TBDpatt files may
be reusable if the number of primary I/O pins, latches, and their vector ordering does not
change, but some changes to test mode pin assignments may cause warnings or errors when
simulating these vectors. For example, if an unassigned PI is changed to a +TI pin
assignment, your TBDpatt pattern data may have contained an assignment to 0 on this pin,
causing an error when simulated in the new mode.
The description of TBDpatt which follows contains some references to test mode names. To
understand this, it is important to know that, while Vector data is stored in a test mode-
qualified file, there are some situations in which, during the initialization of a test mode, it is
necessary to switch temporarily to another test mode. As an example, in a test for an LBIST
mode, initialization of fixed-value latches and linear feedback shift registers (LFSRs) can be
accomplished by switching to a test mode in which these latches are scannable, using that
test mode to initialize them, and then switching to the target (LBIST) mode.
The format and syntax of the TBDpatt file will be enhanced over time to include new features.
This means that future TBDpatt files generated by Encounter Test may contain new
attributes, objects, or event types. It is intended that these changes in syntax be backward
compatible; where possible, the new features will be made optional so that older TBDpatt
files will continue to be usable by Encounter Test.
line comments:
❑ //
❑ --
❑ #
block comments:
❑ /* block of comments* / - “ /*” to start and “*/” to end block comments.
TBDpatt_Format
A TBDpatt file begins with a TBDpatt_Format header statement. Two attributes on this
statement identify the formatting conventions used within the TBDpatt file:
■ mode - the value may be either node or vector. This attribute is optional. TBDseqPatt files
are expected to be in node format. The default value is vector, however, node format may
legally be interspersed in the vector form.
❑ mode = node specifies that PIs, POs, and flops for various events, such as Stim_PI
and Scan_Load are named individually and are assigned values, as shown below:
Event 1 Stim_PI(): "scan_enable" = 0;
Event 2 Pulse(): "capture_clk" = +;
❑ mode = vector specifies that a string of values is given without names, and each
of these values is mapped to a PI, PO, or flop according to the vector
correspondence for all events except Pulse, Stim_Clock, and the corresponding PPI
clock events. For example:
Event 1 Stim_PI(): ......1.....;
Event 2 Pulse(): "capture_clk" = +;
This header specifies that PIs, POs, and flops for various events, such as Stim_PI and
Scan_Load, are named individually and are assigned values, as opposed to the vector
Experiment
An experiment contains the test data generated from one or more test generation application
runs. Each experiment that is committed to the master test data will have its own test data
grouped separately from the test data of other experiments that may also have been
committed. This may be useful in tracking down the source of certain test data. The
experiment is the highest level division of a pattern’s odometer number, which fully specifies
the context of all test patterns and events. When TBDpatt is used as input to read_vectors,
experiment statements cannot be used to separate the data, although they are a required
element of the data structure. The read_vectors command renumbers and collapses all
odometer numbers down to a simple, sequentially numbered form, removing any logical
(lacking physical significance) hierarchical divisions.
where:
exper1 is the experiment name that was specified when the source test data (Vectors) was
created and 1 is the first experiment.
An Experiment contains one or more test sections. There is no order dependency for
Experiments, that is, they can be applied in any desired order. In addition to test sections, an
Experiment may contain Keyed Data and Define_Sequence application objects.
Test_Section
A Test_Section contains tests of a particular type, such as logic, shift register, and IDDQ.
Differential pins that are inverted using the CORRELATE attribute receive the opposite
termination value. Pins with a TTERM attribute always keep the TTERM value regardless
of the termination value, even if tester termination is none.
■ termination_domination = keyword
Indicates whether tester-supplied termination shall be applied to pins which already have
product termination, and if so, which will dominate.
A keyword of tester indicates that tester-supplied termination is applied to all three-state
output pins regardless of any product-supplied value for a pin. A keyword value of
product indicates that tester-supplied termination is applied only to pins without product-
supplied termination.
This attribute is optional. If termination_domination is not specified, it defaults to the TDR
value if tester_termination is specified as 0 or 1, or to tester if tester_termination is
defaulted or specified to none. If dominance is specified when termination is defaulted or
specified to none, dominance is ignored.
■ test_section_type = keyword
This attribute is required. Types of test sections are:
logic
logic_WRP
logic_LBIST
flush
scan
channel_scan
driver_receiver
macro
IDDq
IEEE_1149.1_integrity
ICT_stuck_driver
ICT_stuck_driver_diagnostic
ICT_shorted_nets_log(n+2)
ICT_shorted_nets_2*logn
ICT_shorted_nets_n+1
IOWRAP_stuck_driver
IOWRAP_shorted_nets_log(n+2)
IOWRAP_shorted_nets_2*logn
IOWRAP_shorted_nets_n+1
parametric
path
ecid
■ test_type = keyword
The keyword should be one of the following:
❑ opcbist:
This type is used for test data applied by an on-product controller. The designation
of “opcbist” is used by test compilers to recognize that some aspects of the test
are programmed into the product; for example, the number of test iterations is stored
in a BIST controller register. With OPCG, the timing of the tests is under control of
the product, so a Test_Section having a test_type of opcbist will normally contain
patterns that have the static format. Check with the manufacturer or test expert if you
are unsure whether to use this keyword.
❑ dynamic:
If the test_type is not opcbist, and the Test_Section contains any patterns in
the dynamic format, the Test_Section's test_type is dynamic. Dynamic
format patterns are patterns with a distinct launch and capture time frame, designed
to create and capture transitions. Any patterns created with true-time test will be in
dynamic format.
❑ static:
This is the test_type if the Test_Section is not opcbist and contains only
static patterns.
This attribute is optional; the default is static.
■ pin_timing
The presence of this attribute indicates the test section uses customized pin timings.
■ tester_PRPGs
The presence of this attribute indicates that the test section contains tests which use
pseudo-random pattern generators connected to the design's primary inputs.
■ product_PRPGs
The presence of this attribute indicates that the test section contains tests which use
pseudo-random pattern generators that are contained on the design itself, for example
OPMISR block.
■ tester_signatures
The presence of this attribute indicates that the test section contains tests which specify
latch and primary output responses in terms of compressed signatures collected by
signature registers connected to the design's primary outputs.
■ product_signatures
The presence of this attribute indicates that the test section contains tests which specify
latch responses in terms of compressed signatures collected by signature registers
contained on the design itself, for example, OPMISR signature registers.
■ simulated
The presence of this attribute indicates that the test data of this test section was
simulated. The absence of this attribute indicates that the test data of this test section
has not been simulated, or was exported then re-imported after simulation, so it may
have been subject to manual edits. Read Vectors resets this attribute and therefore, it
cannot be set manually.
The 1.2 following Test_Section indicates that this is the second test section in the first
experiment.
Tester_Loop
The term Tester_Loop derives from its original usefulness in allowing a diagnostic
program to apply the Tester_Loop data repetitively for analysis. At the beginning of a
Tester_Loop, the design is assumed to be in an unknown internal state (all X). Within
Encounter Test, Tester_Loops often contain many more tests than a diagnostic procedure
would want for looping, and the Tester_Loop denotes only that the test contained therein
can be used independently of tests in any other Tester_Loops. Although it is guaranteed
that Tester_Loops can be applied independently of each other, often it is possible to apply
even smaller sections of test data independently for diagnostic procedures. The
Tester_Loop statement has an attribute (procedures_have_memory) which indicates
whether or not the Test_Procedures that it contains may be applied independently of
each other. Furthermore, the Test_Procedure statement has a similar attribute which
indicates whether or not the Test_Sequences are independent of each other.
Upon entry to a Tester_Loop object in the test data, it may be important to ensure that the
design has been placed into the appropriate test mode of operation. To this end, each
Tester_Loop begins with a special init Test_Procedure whose purpose is to bring the
design from the unknown state into the target test mode stability state. An init
Test_Procedure is always the first Test_Procedure inside a Tester_Loop and
contains a single init type of Test_Sequence. This init Test_Sequence may either have
been provided by user input during test mode definition or it may have been generated
automatically by Encounter Test.
The 1.2.1 following the Tester_Loop indicates that this is the first Tester_Loop in test
section 1.2.
Test_Procedure
A Test_Procedure is a collection of one or more test sequences. Unless otherwise stated
by Test_Procedure attributes, all the constituent test sequences have the same clocking
structure (see the non-uniform_sequences attribute below). Test procedures that are
automatically created by Encounter Test will contain a maximum of 32 test sequences. This
number of sequences is optimal for Encounter Test’s high speed scan-based simulator (refer
to Test Simulation Concepts in Encounter Test: Guide 6: Test Vectors for more
information), which is capable of simultaneously simulating 32 uniform test sequences in a
single pass.
❑ normal
Most Test_Procedures are of this type, and have the function and content already
described.
Note: If the type attribute is not specified in an imported TBDpatt file, the default
type is normal.
❑ init
This type of test procedure contains only the initialization sequence for the test
mode. Such a test procedure should be the first appearing in the tester loop, and is
followed by normal test procedures.
Note: While importing a set of vectors using read_vectors, if a mode initialization
test procedure and sequence are present, it should be identical to the mode
initialization which has been defined for the given test mode. If the modes do not
match, Encounter Test ignores the initialization procedure and replaces it with the
one which has been defined for the test mode.
The Test_Procedure has attributes that inform manufacturing of test coverage attained at
given points in an experiment. The test coverage attributes apply only to the order listed in
the TBDpatt file. If the test data is applied in any other order, these numbers are not
accurate.
This attribute gives the percentage of static faults (# of static faults detected in this mode
/ total # of static faults) detected at this point in the experiment.
■ percent_iddq_faults
This attribute gives the percentage of IDDq faults (# of IDDq faults detected in this mode
/ total # of IDDq faults) detected by IDDq tests at this point in the experiment.
■ percent_dynamic_faults
This attribute gives the percentage of dynamic faults (# of dynamic faults detected in this
mode / total # of dynamic faults) detected at this point in the experiment.
■ percent_driverReceiver_faults
This attribute gives the percentage of driver & receiver faults (# of driver & receiver faults
detected in this mode / total # of driver & receiver faults) detected at this point in the
experiment.
The 1.2.1.3 following Test_Procedure indicates that this is the third test procedure in
Tester_Loop 1.2.1.
The following is an example of Tester_Loop and Test_Procedure to specify that the test mode
initialization sequence (modeinit) loads the required values into internal FF’s
(procedures_have_memory and sequences_have_memory) and into RAMs
(ram_init) within the design. If you are using a complicated initialization sequence as the
base logic state for very specialized and focused pattern generation, warn Encounter Test
that there are FF’s and RAMS that have been loaded with required logic values.
TBDpatt_Format (mode=node, model_entity_form=name);
[Experiment MBIST;
[Test_Section (tester_termination=none, test_section_type=logic,
test_type=static) ;
[Tester_Loop(procedures_have_memory,ram_init ) ;
[Test_Procedure(sequences_have_memory);
[Test_Sequence ( ) ;
[Pattern(pattern_type=static);
Event Pulse ( ):
...
Test_Sequence
A Test_Sequence is a sequence of test patterns geared toward detecting a specific set of
faults (defects). Although a single Test_Procedure can contain any number of test sequences,
it is recommended to limit this number to 32 sequences and ensure that they are uniform. This
is the optimum configuration for simulating with the high speed scan-based simulator of
Encounter Test. A Test_Sequence has the following attributes:
■ type = keyword
The type attribute is optional; the default value is normal. The type attribute identifies the
test sequence as one of the following:
❑ normal
This is the usual case, especially for stored-pattern tests.
❑ init
This test sequence type contains the initialization patterns for the test mode. This
test sequence will appear as the only one within an init test procedure. For user-
supplied vectors, this is expected to be identical to the initialization procedure that
has already been created for the given test mode.
❑ setup
This test_sequence type contains only the initial events for the containing test
procedure. Such a test sequence will appear only as the first test sequence within a
test procedure. It is used for weighted random pattern testing to specify the signal
weights and to initialize the product scan chains with their initial random values.
In general, the setup sequence is used when there is OPC (on-product clock or
control) logic that requires initialization before running a series of normal
Test_Sequences. Except for its use in weighted random pattern and BIST
testing, the setup sequence is useful only for initializing OPC latches.
❑ loop
This is a type of test sequence that would be considered as normal except that it is
applied repetitively. The number of repetitions is specified via the repeat attribute.
This sequence type is used in situations such as random-pattern testing, where the
hardware creating the test patterns and analyzing the output results can be
controlled by repetitive events within the test sequence to create a non-repetitive
result.
■ miscompare
Identifies that one or more patterns in this test sequence contain an Expect or
Measure event whose values did not agree with those predicted during simulation. Note
that Measure events are used for comparisons when the simulation option Compare
Measures is specified for the General Purpose Simulator. Read Vectors removes this
attribute and, therefore, you cannot set it directly.
■ repeat = n
Supplies the number of times this test sequence is to be repeated. This attribute is valid
only on loop type test sequences. If type=loop is specified, then repeat= n must
also be specified, where n is a positive integer.
■ collapsible
This attribute directs the test generator to simplify the test sequence by collapsing the
sequence into a single pattern or a small set of patterns. The collapsed version of the
sequence is defined by patterns having the type collapsed appearing at the beginning of
the sequence. The original patterns are kept, but not being of type collapsed, they can
be ignored by subsequent applications wishing to process the collapsed form of the
sequence.
Collapsing “removes” patterns that contain only pseudo primary input events, combines
successive patterns containing Wait_Osc events into a single Wait_Osc event, and
replaces Channel_Scan events with the equivalent Wait_Osc event. The result of
collapsing is a single Wait_Osc event for each running oscillator. As a result, no extra
dead tester cycles will be set aside for these events.
If an application or test compiler is processing the collapsed form of sequences, this
attribute tells it to ignore non-collapsed patterns in this sequence. If the sequence is not
marked collapsible, then it should not contain any collapsed patterns, and all
patterns should be processed normally.
■ extra_release_capture
This attribute directs the test compiler to recognize and use the
Apply_Release_Capture event, which will appear in a non-loop pattern near the
end of the sequence. If this attribute does not appear on the Test_Sequence, then
any Apply_Release_Capture event would be used only by diagnostics routines,
and ignored when running the full test to collect the final signature.
Audit Attributes
These attributes are set by Encounter Test. While reading vectors, all audit information is
reset as described below. Audit information is kept for any Force events contained in the
sequence and for any pseudo PI events contained in the sequence as well as additional audit
information.
This audit information is expressed in TBDpatt format by the following attribute keywords:
■ Forces_unverified,
■ Forces_verified, Forces_bad
One of these will be present if Force events are found within this sequence definition
Note: Forces_verified indicates that the simulation has verified that the force
events in this sequence are redundant because the forced nets were already at the
values indicated in the Force event and remained there throughout the processing of the
hold parameter, without requiring any special processing.
■ PPI_unverified,
■ PPI_verified,
■ PPI_bad
One of these will be present if Pseudo-PI events are found within this sequence definition
or if this is not a modeinit sequence definition and there are any Pseudo-PIs defined for
this test mode with stability values (TIs, TCs, or clocks). Note that the stability pins (and
stability pseudo PIs) are always assumed to be at their stability states after the mode
initialization sequence has been applied.
■ Failed_verification
This flag is set if Verify On Product Clock Sequences was run on this sequence definition
and some check (unique to the sequence verifier) failed.
■ Invalid_oscillator
This flag is set if any Start_Osc, Stop_Osc, or Wait_Osc event is found on a pin that is
neither a clock nor oTI.
The 1.2.1.1.1 following Test_Sequence indicates that this is the first test sequence in test
procedure 1.2.1.1.
If this test sequence has been timed, the SeqDef and Timing_ID refer to the timing data
for this test sequence's dynamic pattern. For a Test_Sequence to have an associated set
of timings, it must contain a dynamic pattern. Only one dynamic pattern is allowed within a
Test_Sequence.
Pattern
A pattern is an ordered set of events. A typical pattern is intended to contain all the events to
be applied within one tester cycle. In the absence of timing data, multiple events within the
same pattern must be applied to the design in the order found in the test data stream. In the
case of a timed delay test (pattern_type=dynamic), if the containing sequence has a
timing_ID, then the timings from the referred-to timing data will be used, which may change
their relative order of application. Pattern has these attributes:
■ miscompare
Identifies whether or not this pattern contains an Expect or Measure event whose
values did not agree with those predicted during simulation. Note that Measure events
are used for comparisons when the simulation option Compare Measures is specified for
the General Purpose Simulator.
■ pattern_type = keyword
Indicates the type of pattern, and is one of the following:
❑ static - a typical pattern used in the application of static tests.
❑ dynamic - a pattern that contains a separate launch and capture time frame used
to excite and detect transition defects. Dynamic patterns use custom timing if a
Timing_ID exists. Only one dynamic pattern is allowed within a Test_Sequence.
❑ begin_loop - a pattern that denotes the beginning of a loop. The only event that
should appear within this pattern is Repeat. This is one of two ways to specify
loops within TBD. The other is by use of the loop type of test sequence.
An example of a begin_loop:
[Pattern 5 (pattern_type = begin_loop);
Event 5.1 Repeat (): 3;
]Pattern 5;
[Pattern 6;
Event 6.1 Pulse:
"MASTERCLK(0)"=+;
]Pattern 6;
[ Pattern 7 (pattern_type = end_loop);
] Pattern 7;
❑ end_loop - A pattern that denotes the end of a loop. This pattern should not
contain any events.
❑ collapsed - A Test_Sequence that is collapsible, will contain one or more
collapsed patterns. A test data compiler can process either the collapsed form
of the sequence or the uncollapsed form. In processing the collapsed form, only
patterns that have the collapsed attribute are processed, up to the first non-
loop pattern. In processing the uncollapsed form of the sequence, the collapsed
patterns are skipped, and all other patterns are processed.
The collapsing process currently supported by Encounter Test consists of counting
the number of oscillator pulses applied through one iteration of the test sequence
loop, including the scan operation, and representing this number in a Wait_Osc
event in a single collapsed pattern.
❑ non_loop - A loop type Test_Sequence may contain patterns at the end that are
not part of the loop. The pattern containing BIST or WRPT signatures is in this
category. The first pattern within a loop test sequence that is actually outside the
range of the loop must be type non_loop.
The 1.2.1.3.1.5 following Pattern indicates that this is the fifth pattern in test sequence
1.2.1.3.1.
Event
An event is a container for stimulus and response test data and any other data for which
ordering is important.
Events are contained in pattern blocks, and appear in the same order as they occurred in the
simulation.
supplied for fast forward, and therefore this attribute is not accepted in combination with
the iteration=n attribute.
■ final
Specifies that this is the end of the test; no more test sequences or test procedures follow
within the containing tester loop. If this signature is ignored, the test results will be lost.
The following table lists the events that Encounter Test provides:
Placeholder Dummy_Skewed_Scan_Unload
Events (for custom
Dummy_Scan_Load
test vector
definitions) Dummy_Scan_Unload
Dummy_Skewed_Scan_Load
Put_Stim_PI
Custom Scan All Apply
Protocol Definition
Set_Scan_Data
(may only be used
within
Define_Sequence
constructs)
Full scan Measure_Scan_Data
OPMISR/OPMISR+ Set_CME_Data
Set_CMI_Data
Measure_MISR_Data
XOR compression Set_CME_Data
Set_CMI_Data
Measure_Scan_Data
On-Product Clocking Load_OPCG_Controls
Control
Pulse_PPI
Set_OLI_Data
Start_Osc
Stop_Osc
Wait_Osc
Wait_Time
Diagnostic aids OPMISR/OPMISR+ Diagnostic_Skewed_Scan_Unloa
(LSSD) d
Diagnostic_Scan_Unload
GSD
Diagnostic_Scan_Unload
OPMISR/OPMISR+ Channel_Scan
Compact_Scan_Load
Diagnostic_Scan_Unload
Dummy_Scan_Load
Product_MISR_Signature
Scan_Load
XOR compression Compact_Scan_Load
Compressed_Input_Stream
Compressed_Output_Stream
Diagnostic_Scan_Unload
Dummy_Scan_Load
Dummy_Scan_Unload
Load_SR
Scan_Load
Apply
Example:
Event 6.1.1 Apply (): Scan_Preconditioning_Sequence;
Apply events are legal for all Define_Sequence types and the following additional contexts:
■ scanop sequences
■ scansection sequences
■ Channel_Mask_Load_Sequence
■ MISR_Mask_Load_Sequence
Note: While Apply events are allowed in all Define_Sequence types, any pattern that
contains one or more Apply events cannot contain other event types.
The Define_Sequence types that are being applied must either have already been
imported or existing previously in the TBDseqPatt being imported.
All Apply events that are not part of the scan operation are removed and the patterns of
the sequence being applied are inserted. The Define_Sequence name and the date/time
of its last update is saved on the first inserted pattern. All other inserted patterns store
the Define_Sequence type of the expanded Apply.
Apply_Release_Capture
This event causes the release-capture portion of the test sequence to be applied. The
release-capture portion of the test sequence is defined as all patterns and events from the
beginning of the sequence up to but not including the Channel_Scan event (or the first
non_loop pattern, whichever comes first). The release-capture sequence is automatically
provided to the processing application through Encounter Test API. The release-capture
sequence is provided in either uncollapsed form or (if the sequence has the collapsible
attribute) the collapsed form.
Example:
Event 1.1.1.2.2.6.1 Apply_Release_Capture ();
Note: Release-capture is not a typical user operation and its use requires expert knowledge
of Encounter Test and its API interface.
Begin_Test_Mode
This event denotes entry into the specified test mode and implies the establishment of the
stability state for the specified test mode. When exporting the data out of the Encounter Test
environment, this event should be interpreted as an invocation of the modeinit sequence for
the specified test mode. Subsequent to this event, until the end of the current test sequence
all scan operations (Scan_Load, Scan_Unload) apply to the specified test mode, and if
using the vector format, the vector correspondence lists for this test mode are used to
interpret the data. This event has no attributes.
Example:
Event 1.1.1.1.1.25.1 Begin_Test_Mode (): lssd_static;
Restriction: This event is allowed only within a modeinit sequence definition or an init type
of test sequence.
Also note that IBM's TDS/6000 system differs from Encounter Test processing in that it does
not simulate the Parent Mode Initialization sequence. This should not be a concern if you
have a normal mode initialization, however for complex resets of the chip, this should be
added to the child's Mode Init immediately following the Begin_Test_Mode event to ensure
TDS/6000 software places the patterns in the file.
Channel_Scan
This event is used in connection with Weighted Random Pattern (WRP), LBIST, and
OPMISR-based testing to specify when the scan operation is to take place. Refer to
Appendix A, “Scan Operation,” for a diagram.
This event may be qualified by the following attribute keywords; any combination (or none) of
these may be present:
■ block_signature_register
No tester SISRs are to be clocked during the scan; normally (in the absence of this
attribute), the tester SISR connected to each scan chain output is clocked at each cycle
of the scan operation. If there are any on-board MISRs (indicated by the presence of a
product_signatures attribute on the test section), then there must be one or more MISR
Enable (ME) primary inputs that are used to block the functioning of these MISRs. This
blocking is accomplished by inverting the value on the ME inputs when the scan
preconditioning sequence is applied. The block_signature_register attribute is
specified when the channel scan is used to initialize the scan chains. This prevents
unknown (unpredictable) signals from being shifted into the SISRs or MISRs.
■ fast_forward
This is a signal that the channel scan is run in the fast forward mode; that is, it includes
operations that save the PRPG states into PRPG save registers, restore the PRPG
states from PRPG save registers, and for tester PRPGs, a PRPG clock pulse. If the test
section has either the fast_forward attribute or fast_forward_sequences
attribute, the restore operation occurs first (preceding the actual channel scan). If the test
section has the fast_forward_pins attribute, then the restore operation occurs on
the last cycle of the channel scan. The tester PRPG manipulations (restoring,
incrementing, saving) always occur first. The PRPG save operation for on-product
PRPGs (LBIST) is positioned within the channel scan operation such that the state of the
PRPG after n+1 scan cycles is saved (where n is the number of tests to be skipped).
None of these operations appear explicitly in TBDpatt or Vectors, but are specified
implicitly by this attribute.
■ fast_forward_save
This is a signal that the channel scan is run in the fast forward mode (see the
fast_forward channel_scan attribute), but excluding the restore operation at the
beginning of the channel scan. If the test section has the fast_forward_pins
attribute, then the restore operation occurs in its place on the last channel scan cycle for
both fast_forward and fast_forward_save channel scans.
■ skewed_load
Causes an extra A shift clock pulse to be applied at the end of the scan operation,
resulting in the two latches of each SRL being set to independent values.
■ skewed_unload
Causes an extra B shift clock pulse to be applied at the beginning of the scan operation.
The effect is to unload the B_SHIFT_CLOCK measure latches (L1s in an LSSD design).
When this attribute is absent, the representative measure latches (RMLs) are observed
(these are L2s in an LSSD design).
Example:
Event 1.1.1.1.1.28.1 Channel_Scan (block_signature_register, skewed_load,
skewed_unload);
■ padding_cycles=n
Specifies whether the channel_scan must have n cycles of padding with all zeros applied
to the scan-in pins before applying the scan-in data for the next test. By default,
padding_cycles=0 so there are no padding cycles unless required.
■ overlap=yes|no
Specifies whether overlapping with the next scan-in is allowed. Refer to “Overlapped/
Non-Overlapped Scans” on page 171 for additional information.
Compact_Scan_Load
This event is a compact form of the Scan_Load event which is used to scan in latch values.
This is the form that is generated by Automatic Test Pattern Generation since it can
significantly reduce the size of the Vectors. Use of the Compact_Scan_Load for manual
patterns may also reduce the size of the Vectors created during Read Vectors as well as the
Vectors resulting from simulation. The values specified are the same as for the Scan_Load
event.
The default_value attribute for Compact_Scan_Load has 2 more values than it does for
Scan_Load: default_value=0|1|X|scan_0|scan_1|random|repeat. If
default_value=random, you also need to specify the seed=value attribute; where
the value is the seed for the randomly generated fill values.
2. Do not specify the default_value or seed. The vector will be filled with the correct
values based on your specification of latchfill and latchfillstatic/
latchfilldynamic during Test Simulation (TGResim).
3. The latch values may be specified using:
❑ expanded vector format - latch values are specified as a string of values, one for
every RSL in the order specified in the vector correspondence. Unspecified values
are represented with a “.”.
For example:
Event 1.1.1.2.6.1.1 Compact_Scan_Load():
0.....;
❑ node list format - latch values are specified with rslname=value; where
rslname is the name of the RSL latch primitive block, or a pin/net that can be
traced back to the RSL's latch primitive block without any ambiguity. Unspecified
latches are not included in the list. For example:
Event 1.1.1.2.6.1.1 Compact_Scan_Load():
latch1_block_name=0;
❑ unexpanded vector format - latch values are specified as string(s) of values. Each
string represents one word, 32 latch values, in flatmodel index order. The words are
numbered starting with 0. This format is how the Compact_Scan_Load events
are actually stored in the Vectors and is the most compact form. It is difficult to
decipher and is intended for use by Encounter Test development. However, it may
be useful if you are editing the patterns from a large Vectors file and you don't need
to change any latch values. For example:
Event 1.1.1.2.6.1.1 Compact_Scan_Load():
0=..0...;
Notes
■ The same latch is set to 0 in all three examples.
■ The TBDpatt_format mode=value setting doesn't matter.
OPMISR/OPMISR+ X
XOR Compression X
Full/Partial Scan X
GSD WRP/LBIST
OPMISR/OPMISR+ X
XOR Compression X
Full/Partial Scan X
Compact_Skewed_Scan_Load
This event is analogous to the Compact_Scan_Load event with the exception that it is the
compact version of the Skewed_Scan_Load event. See Compact_Scan_Load on page 50
and Skewed_Scan_Load on page 98.
Compressed_Input_Stream
This event lists values for all scan-in (SI) pins for every scan cycle. The values specified are
the same as for the Scan_Load event, but should be all 0 or 1 (no X values) by the time this
event is being sent to a tester; however, unlike the Scan_Load event, there is no need to pre-
pad short scan chains with zeros since any padding is already built into the supplied values.
Compressed_Output_Stream
This event lists values for each Scan_Out (SO) or Misr_Observe (MO) pin for every scan cycle.
Values include 0/1/X. The attribute overlap=no indicates overlapping with the next scan-in
is disallowed and the values provided in the event were computed with the assumption that
the scan-in (SI) pins will bet set to zeros (0) for all scan cycles. The imported attribute
indicates the data was imported from a foreign pattern source (IEEE 1450 STIL).
GSD WRP/LBIST
OPMISR/OPMISR+
XOR Compression X
Full/Partial Scan
Composite_Fix_MISR
This is associated with the scan load of a test and is used to XOR with the
Composite_MISR_Signature of the previous test to account for the overlap of scan load
with scan unload. This can be for a core, in which case there is a core identifier and it applies
to (XORs against) the core's Composite_MISR_Signature values for the core's MO pins;
otherwise it is for a chip and applies to the chip's Composite_MISR_Signature values for
the chip's MO pins.
Example:
Event Composite_Fix_MISR (coreNum=1):
00010000 ;
Composite_MISR_Signature
Shows the expected values at MO pins for a chip or the internal expect compare values for a
core. If it is for a core, the event includes a core identifier. If it is for a chip, there is no core
identifier.
Example:
Event Composite_MISR_Signature (coreNum=1):
72150000 ;
Composite_MISR_Signature_Definition
Defines the mapping of MISR Observe signature bits to the core pins to which they map to.
This is necessary to ensure Composite_MISR_Signature events can be migrated to the
chip. If this is for a core, there is a core identifier so that there could be multiple definitions for
multiple cores.
Example:
[ Composite_MISR_Signature_Definition (core=1):
Pin.f.l.DLX_CORE.nl.NPO[0] position=1
Pin.f.l.DLX_CORE.nl.NPO[10] position=2
Pin.f.l.DLX_CORE.nl.NPO[11] position=3
Pin.f.l.DLX_CORE.nl.NPO[12] position=4
Pin.f.l.DLX_CORE.nl.NPO[13] position=5
Pin.f.l.DLX_CORE.nl.NPO[14] position=6
Pin.f.l.DLX_CORE.nl.NPO[15] position=7
Pin.f.l.DLX_CORE.nl.NPO[1] position=8
Pin.f.l.DLX_CORE.nl.NPO[2] position=9
Pin.f.l.DLX_CORE.nl.NPO[3] position=10
Pin.f.l.DLX_CORE.nl.NPO[4] position=11
Pin.f.l.DLX_CORE.nl.NPO[5] position=12
Pin.f.l.DLX_CORE.nl.NPO[6] position=13
Pin.f.l.DLX_CORE.nl.NPO[7] position=14
Pin.f.l.DLX_CORE.nl.NPO[8] position=15
Pin.f.l.DLX_CORE.nl.NPO[9] position=16
] Composite_MISR_Signature_Definition;
Connect_Tester_PRPG
This event is used in weighted random pattern (WRP) testing to specify that the indicated
primary inputs are to receive pseudo-random values. The associated tester PRPGs are
assumed to have been initialized by some previous Tester_PRPG_Seed event. WRP
testing assumes that all non-clock primary inputs that are not being held to a constant value
are to receive pseudo-random values. Therefore, the Connect_Tester_PRPG event is
used only when the PRPG(s) has been temporarily disconnected to apply some deterministic
value to the primary input(s) via the Stim_PI event. This event has the timed_type
attribute.
Example:
Event 1.1.1.1.1.36.1 Connect_Tester_PRPG ():
"Pin.f.l.lsrfh0b.nl.a1"
"Pin.f.l.lsrfh0b.nl.a2";
Full/Partial Scan
Diagnostic_Skewed_Scan_Unload
Diagnostic_Scan_Unload
event, however a Diagnostics_Observe sequence must be applied before expect data can be
scanned out to be observed on the tester.
Example:
Event 1.1.1.2.1.4.1 Diagnostics_Scan_Unload ():
Dummy_Skewed_Scan_Unload
This event is used as a place holder by Encounter Test. When importing sequence definitions
of type test during Test Mode creation you must use Dummy_Skewed_Scan_Unload events
instead of real Skewed_Scan_Unload events because Encounter Test has not yet defined
the scan chains at the time the sequence definitions are being read in during Test Mode
definition processing. This event can also be used within manual patterns as a space saving
device. Actual measured values can not be determined until the input patterns are simulated.
During simulation Encounter Test will convert all Dummy_Skewed_Scan_Unload events to
real Skewed_Scan_Unload events.
Example:
Event 1.1.1.1.1.3.1 Dummy_Skewed_Scan_Unload ();
Dummy_Scan_Unload
This event is used as a place holder by Encounter Test. When importing sequence definitions
of type test during Test Mode creation you must use Dummy_Scan_Unload events instead
of real Scan_Unload events because Encounter Test has not yet defined the scan chains at
the time the sequence definitions are being read in during Test Mode definition processing.
This event can also be used within manual patterns as a space saving device. Actual
measured values can not be determined until the input patterns are simulated. During
simulation Encounter Test will convert all Dummy_Scan_Unload events to real
Scan_Unload events.
Example:
Event 1.1.1.1.1.3.1 Dummy_Scan_Unload ();
Dummy_Scan_Load
This event is used as a place holder by Encounter Test. When importing sequence definitions
of type test during Test Mode creation you must use Dummy_Scan_Load events instead of
real Scan_Load events because Encounter Test has not yet defined the scan chains at the
time the sequence definitions are being read in during Test Mode definition processing. When
the sequence definitions are actually used by Encounter Test, the Dummy_Scan_Load events
will be converted to real Scan_Load events.
Example:
Event 1.1.1.1.1.3.1 Dummy_Scan_Load ();
LSSD WRP/LBIST
OPMISR/OPMISR+ X X
XOR Compression X X
Full/Partial Scan X X
GSD WRP/LBIST
OPMISR/OPMISR+ X X
XOR Compression X X
Full/Partial Scan X X
Dummy_Skewed_Scan_Load
This event is used as a place holder by Encounter Test. When importing sequence definitions
of type test during Test Mode creation you must use Dummy_Skewed_Scan_Load events
instead of real Skewed_Scan_Load events because Encounter Test has not yet defined the
scan chains at the time the sequence definitions are being read in during TestMode definition
processing. When the sequence definitions are used by Encounter Test the
Dummy_Skewed_Scan_Load events will be converted to real Skewed_Scan_Load events.
Example:
Event 1.1.1.1.1.3.1 Dummy_Skewed_Scan_Load ();
GSD WRP/LBIST
OPMISR/OPMISR+ X X
XOR Compression X X
Full/Partial Scan X X
Effective_Cycle_Mask
This event contains a bit string that tells which iterations of the containing test sequence
should be applied in fast forward mode. If the i-th bit in this string is 1, then the i-th iteration
of the test sequence should be applied; if the i-th bit is 0, then the channel scan event and all
Pulse Tester SISR Clocks events are skipped during the i-th iteration of the test sequence.
The mask is written as a hexadecimal string. This event has no attributes.
Example:
Event 1.1.1.1.1.34.2 Effective_Cycle_Mask ():
FEF3BFF ECA3F7E3 6241A0B4 980500C0 24200090 00040020 3010C600 00044002
0200810 00601000 20001000 00104000 00200A40 00102100 00004010 00020052
08020000 00406000 00000000 00000100 ;
Expect
This event specifies expected values for a set of nodes. The nodes may be internal nets or
primary inputs or primary outputs. This event has the timed_type attribute. The expect
event may contain data for resimulation or diagnostics. The diagnostics describe possible
defects in terms of a failure node and a specific pin or net.
Example:
Event 1.1.1.1.1.7.1 Expect ():
"Pin.f.l.lsrfh0b.nl.a5"=1
"Pin.f.l.lsrfh0b.nl.a3"=1
"Pin.f.l.lsrfh0b.nl.a9"=1;
Detected_fault:
SDT on Driver Pin "00"
SNT on Net "srf10hm.s30"
SNT on Net "srf10hn.s30";
Fix_MISR
Example:
Event 1.1.1.3.1.2.1 Fix_MISR:
030A0200;
Force
This event is a declaration about the state of an internal node (often this will be a latch). It
allows a user to force a value on the internal net directly. There are many instances where
this may be useful. Some examples are:
■ Logic has been pruned from the design model so the simulator does not know the
complete behavior.
■ A long or complicated initializing sequence is required to produce the state, but
simulation of this sequence has been bypassed to save execution time.
■ The design is not initializable. A frequency divider is one example of a case where it is
valid to make an assumption about the initial state even though the initial state is
unpredictable.
■ The power-on state is predictable.
The Force event specifies a list of nodes and a value for each.
The Force event should be used with caution, and its proper use requires familiarity not only
with the design and its function, but also with the way latches are modeled for Encounter Test.
In particular, edge-triggered flip-flops are modeled with a pair of latches in tandem, and one
of these latches always has its clock “on.” If the Force is applied to the latch whose clock is
“on” at that point, then the value may be lost before the clock is again pulsed.
This event has one attribute, hold. If hold is specified, the value will persist on the specified
node continually until a Release event is specified for this node, or until the design is reset,
as it might be at a test sequence. If hold is not specified, then the forced value persists in
simulation until the design is stabilized. Then the simulator immediately processes a “virtual”
release event for the node. See “Release” on page 83 to find out what the simulator does
when processing a release event.
Example:
Event 1.1.1.1.1.4.1 Force ():
"Block.f.l.lsrfh0b.nl.opcg1.srfh10m.021"=0
"Block.f.l.lsrfh0b.nl.opcg1.srfh10n.021"=0;
Internal_Response
This event specifies the waveform for a single net within the containing pattern. This event is
typically an output of simulation and is used as input to the waveform display tool. The event
identifies a net and a series of time = value pairs that describe the behavior of the net during
the pattern. A time zero value is always provided and is followed by a time = value pair for
each change on the net. The time units are in picoseconds. This event has no attributes.
Example:
Event 1.1.1.1.1.36.2 Internal_Response ():
"Pin.f.l.lsrfh0b.nl.srf10hd.aa000aa10";
Time 0 = 0
Time 1 = x
Time 2 = 1;
The internal response values are described in the following diagram. The five horizontal lines
represent single logic values. H is a weak 1, L is a weak 0. The ten vertical lines are different
types of unknown values: An A is 1 or H; an N is Z, L or 0; etc.
Internal_Scan_Load
This event lists the values that will be loaded into all flop scan cells as a result of preceding
events. This may be used with unknown compression mechanism to denote what values end
up in the scan cells as a result of applying all of the preceding events. This event is used by
simulators and will not be included in any tests converted to another pattern format (WGL,
STIL).
i
Notes
1. If using the node/name format of TBDpatt, scan cells may be identified by either
referencing the primitive block or output pin name directly or by referencing the
containing cell output pin name if there is no fan-in along the path from the primitive pin
to the cell pin.
2. If you are not explicitly specifying values for all scan cells, the compact version of this
event should be used to achieve a reduction in the size of the Vectors file that results
from Read Vectors. Refer to “Compact_Scan_Load” on page 50 for additional
information.
Example:
Event 1.1.1.1.1.1.1 Internal_Scan_Load (default_value=0):
"internal_scan_flop.Q" = 1;
Latch_Values
This event is used to record the values of all representative measure latches when signature
analysis is being used. The latch values are useful for debug and diagnosis. This event type
has the attributes iteration, skewed_unload, fast_forward, and final.
Example:
Event 1.1.1.1.1.36.2 Latch_Values (iteration=256):
FEFB3BFF ECA3F7E3 6241A0B4 980500C0;
This event is always printed in a hex vector format. This is similar to the vector format of a
Scan_Load event, except that the bit vector contains only 1's and 0's and is converted to
hexadecimal.
XOR Compression
Full/Partial Scan
GSD WRP/LBIST X
OPMISR/OPMISR+
XOR Compression
Full/Partial Scan
Latch_Weight
This event is used in weighted random pattern testing to specify the bias to be applied in the
selection of random values to be scanned into the latches. In concept, a weight is the
probability that the value will be a 1. Each weight is specified in terms of equivalent AND/OR
inputs --the number of unbiased random signals that are ANDed together or ORed together
to produce the weighted random value. Each set of correlated latches can have a different
weight. This implies the use of a high-speed buffer to dynamically alter the weights during
scan operations at the tester. This event has no attributes.
Vector format example:
Event 1.1.1.1.1.16.1 Latch_Weight ():
O4O5-.;
XOR Compression
Full/Partial Scan
Load_Channel_Masks
This event specifies the complete list of channel mask bit registers and the values to which
they should be loaded. When present in a Test_Sequence, this event appears at the
beginning of the pattern that contains the Channel_Scan event. This event also includes a
scan_cycle number on which the masks are to be loaded.
Example:
Event 2.1.1.2.1.4.2 Load_Channel_Masks (cycle=0):
Mask Reg 1 = 1000 # masks just chain 1
Mask Reg 2 = 0100; # masks just chain 2
Load_OPCG_Controls
When used in the mode initialization sequence, place this event between the
Begin_Test_Mode event and the Scan_Load event. These values are then converted into
values for the Scan_Load event to be loaded by the parent testmode scan load operation.
When used in the setup sequence, this event specifies values to be copied into the
Scan_Load event for each subsequent test sequence for all the scan loadable OPCG
registers. If there are OPCG registers that are loaded by the OPCG scan operation then the
Load_OPCG_Controls event specifies that the OPCG scan operation is to be invoked to
load those registers. Refer to OPCG Controls and Identifying Test Function Pins
(Advanced) in the Encounter Test: Guide 2: Testmodes for more information.
Example:
Event 1.1.1.1.1.2.1 Load_OPCG_Controls ():
"MULT" = 00100
"RANGEA" = 1101
"RANGEB" = 010
"TUNE" = 1000111000 ;
Load_SR
This event scans in latch values in a scan design environment, the same as the Scan_Load
event. It differs from the Scan_Load event in that the values to be scanned in are those to
be applied at the input of a Stim_Register rather than on internal latches. It has two
attributes:
■ stim_register
This is the ID of the associated Stim_Register. It correlates to the Stim_Register
Application Object which describes this Stim_Register.
■ number_shifts
The number of shifts necessary to scan in the given values. The loading of the
Stim_Register starts with the first (left-most) logic value in the stim vector and
continues for the number of shifts stated until all required values have been loaded.
The values specified in the load vector are those to be loaded into representative stim latches.
Inversions between the representative stim latch and the scan-in are factored into the load
vector value.
Note: All Load_SR events within a pattern take place in parallel.
Example:
Event 1.1.1.1.1.4.1 Load_SR (stim_register = 4, number_shifts = 9);
101010010;
Measure_Current
This event is used in IDDq testing to specify when the power supply current should be
measured. There is no data associated with this event; the test system must get the
identification of the power supply pin(s) and the acceptable current limit from sources outside
of Encounter Test. This event has no attributes.
Example:
Event 1.1.1.1.1.5.1 Measure_Current ();
Scan_Unload
This event scans out latch values in a scan design environment. A Define_Sequence with the
attribute of scanop is used to perform the unload operation. The values specified are those in
the latches; the value may appear inverted on the scan data primary output due to the
intervening logic between the latch and the primary output. It specifies values for the latches
Notes
■ If using the node/name format of TBDpatt, RML latches may be identified by either
referencing the latch primitive block or output pin name directly or by referencing the
containing cell output pin name if there is no fan-in along the path from the latch
primitive pin to the cell pin.
■ If a Vectors file is created using Version 4.1 or later, and expansion of Scan_Load
occurs, the primary inputs are no longer restored to their pre-scan states, instead are
left in their scan-corrupted states.
XOR Compression
Full/Partial Scan X
GSD WRP/LBIST
OPMISR/OPMISR+
XOR Compression
Full/Partial Scan
Measure_MISR_Data
This event is found in the misr_observe scan sequence. When it is used within a scan
sequence, it directs when values on MISR_OBSERVE test function pins are to be strobed into
the tester for comparison. These pins will usually be the same as the scan I/O pins. This event
has no attributes.
Example:
Event 7.1.2 Measure_MISR_Data ():
"Pin.f.l.top.nl.SCAN_PIN[0]";
For additional information, refer to “On-Product MISR Controls” in the Encounter Test:
Guide 2: Testmodes and Define_Sequence types.
Measure_PO
This event contains expected PO values. This event type causes the design primary output
pins to be observed (and simulators to produce the expected values for each output pin). By
definition, design primary output pins are to be ignored except when explicitly specified by this
event type. This event has the timed_type attribute.
Measure_Scan_Data
This event is used inside a Define_Sequence with type scansequence for scanning or
unloading latches. By its placement within the sequence definition it tells when to observe the
primary output(s) on which the latch values appear, and it specifies which primary outputs to
look at. This event has no attributes.
Example:
PI_Weight
This event is used in weighted random pattern test to specify the bias to be applied in the
selection of random values to be put on the primary inputs. In concept, a weight is the
probability that the value will be a 1. Each weight is specified in terms of equivalent AND/OR
inputs --the number of unbiased random signals that are ANDed together or ORed together
to produce the weighted random value. This event has no attributes.
Product_PRPG_Signature
This event is used to record intermediate on-product PRPG states to allow application of a
subset of the pseudo-random patterns for diagnostic analysis. This event type has the
attributes iteration, fast_forward, and final.
Example:
Event 1.1.1.3.2.8.2 Product_PRPG_Signature (iteration=256):
Product_MISR_Signature
This event is used to record signatures against which to compare the contents of on-board
MISRs. The comparison is done either at the end of the test, or for diagnosis, at some
intermediate point. This event type has the attributes iteration, fast_forward, and
final.
Example:
Event 1.1.1.3.2.8.4 Product_MISR_Signature (iteration=256):
Data values for the MISR bits are printed in hexadecimal notation in the order shown by the
vector correspondence information. By default, this order is bit 1 of MISR 1, bit 2 of MISR
1,...the last bit of MISR 1, bit 1 of MISR 2, etc.
XOR Compression
Full/Partial Scan
GSD WRP/LBIST
OPMISR/OPMISR+ X
XOR Compression
Full/Partial Scan
Pulse
This event identifies a list of clocks to be pulsed and the direction to be pulsed. This event has
the timed_type attribute.
Note: Beware of putting multiple clocks in one Pulse event when writing manual patterns or
sequence definitions. Under certain conditions, this could cause a mismatch between
Encounter Test's results and the hardware. When you are applying multiple clock pulses, you
should put each one in a separate Pulse event. This will ensure that they are simulated by
Encounter Test in the same order that they are applied at the tester.
Example:
Event 1.1.1.2.1.5.1 Pulse (timed_type = release):
A pulse event applies both the clock rise and fall edges in a single event, thus returning the
clock to its off-state at the end of the event. This event does not allow any other event to occur
between the clock edges.
Pulse_PPI
This event identifies a list of pseudo primary inputs to be pulsed and the direction to be
pulsed. Pseudo primary inputs are always referred to by name; the TBDpatt_Format
statement has no effect on the format of this event. This event has the timed_type attribute.
Example:
Event 1.1.1.1.1.3.4 Pulse_PPI ():
"OPCout"=+;
Pulse_Tester_PRPG_Clocks
This event specifies that new random values are to be applied at the primary inputs by means
of pulsing a clock inside the tester that controls the PRPGs that supply these values to the
design primary inputs. This event is used in the application of weighted random pattern tests.
All tester PRPGs are pulsed, including those connected to scan data primary inputs and any
that are temporarily disconnected from a pin. This event has the timed_type attribute.
Example:
Pulse_Tester_SISR_Clocks
This event is used in weighted random pattern testing to specify when the design primary
outputs are to be observed by means of clocking the signature registers that are connected
to the primary outputs. All tester SISRs are pulsed, including those connected to scan data
primary outputs and any that are temporarily disconnected from a pin. This event has the
timed_type attribute.
Example:
Event 2.1.1 Pulse_Tester_SISR_Clocks ();
Full/Partial Scan
GSD WRP/LBIST X X X
OPMISR/OPMISR+
XOR Compression
Full/Partial Scan
Put_Stim_PI
This event provides a list of primary inputs and the values to which they should be set. It is
used in a test sequence definition to tell when the automatically generated primary input
vector is to be applied. The test pattern generator will replace the Put_Stim_PI event by its
own primary input stimulus event (Stim_PI or Stim_PI_Plus_Random), but any primary
input values specified in the Put_Stim_PI event will override the corresponding values
specified by the automatic test pattern generator.
This event is used only in sequence definitions that are identified with the testsequence
keyword on one of the create_*_tests commands. Put_Stim_PI events are not allowed
in test sequences identified with the tgtemplate keyword.
Example:
Event 2.2.1 Put_Stim_PI ():
Full/Partial Scan X
Release
This event discontinues the effect of a previous Force event on each node specified by the
Release event. This allows each specified node to assume the value consistent with its
current input values existing at the time the Release event is processed. If one of the
specified nodes changes as the result of simulating the Release event, this means that the
Force was still doing something “unnatural” to the design, and this causes the simulator to
produce an informational message to that effect (see message “TFS-884” in the Encounter
Test: Reference: Messages).
Example:
Event 1.1.1.1.1.8.1 Release ():
"Pin.f.l.opgckt.nl.opcg1.master.DOUT";
Repeat
This event should appear only inside a pattern with the begin_loop attribute. It specifies the
number of loop iterations to be applied. This event has no attributes.
Example:
Event Repeat (): 30;
Pattern loop repeats in excess of 4,294,967,295 will be broken into multiple pattern loops.
This value can be controlled with the read_vectors keyword maxpatternloops.
Scan_Load
This event scans in flop scan cell values in a scan design environment. A Define_Sequence
with the attribute of scanop is used to perform the load operation. The values specified are
those to be loaded into the scan cells; the value applied to the scan data primary input may
have to be inverted, due to the intervening logic between the primary input and the cell. It
specifies values for the cells in the Scan Load Correspondence List and for all other scan cells
whose states are implied by loading the representative RSLs. Any controllable cell not so
specified is to be loaded to a random value picked by the simulator. If a cell is specified that
is not an RSL, then the value is moved to the corresponding RSL. An error is indicated if there
is no corresponding RSL for the cell.
Notes
1. If using the node/name format of TBDpatt, RSLs may be identified by either
referencing the primitive block or output pin name directly or by referencing the
containing cell output pin name if there is no fan-in along the path from the primitive pin
to the cell pin.
2. If you are not explicitly specifying values for all RSLs, the compact version of this event
should be used to achieve a reduction in the size of the Vectors file that results from
Read Vectors. Refer to “Compact_Scan_Load” on page 50 for additional information.
Example:
Event 1.1.1.1.1.1.1 Scan_Load (default_value=0):
Full/Partial Scan X
GSD WRP/LBIST
OPMISR/OPMISR+ X
XOR Compression X
Full/Partial Scan X
Set_CME_Data
This event is placed into the scan_cycle to indicate when the Channel_Mask_Enable (CME)
pins should be applied (just before the scan-in pins).
Example:
Event 3.1.1 Set_CME_Data ():
"Pin.f.l.a2901scan.nl.q31_in"
"Pin.f.l.a2901scan.nl.ram0_in" ;
Set_CMI_Data
This event is placed into the channelmaskcycle sequence to indicate when the
Channel_Mask_Input (CMI) pins should be applied (just before the pulse of he
Channel_Mask_Load (CML) clock.
Example:
Event 9.1.1 Set_CMI_Data ():
"Pin.f.l.a2901scan.nl.scanin"
"Pin.f.l.a2901scan.nl.ram31in" ;
Event 9.1.3 Pulse ():
Set_OLI_Data
This event indicates the scan cycle location where the loading of OPCG register should be
applied to the OLI pins.
Example:
Event 9.1.1 Set_OLI_Data ():
"Pin.f.l.a2901scan.nl.scanin"
"Pin.f.l.a2901scan.nl.ram31in" ;
Event 9.1.3 Pulse ():
Set_Scan_Data
This event is used inside a Define_Sequence with type scansequence for scanning or
loading latches. This event lists PIs that are scan data inputs that are supposed to be
stimulated at that point in the scan sequence. By its placement within the sequence definition
it tells when to place on the PI the values that are to be loaded into the latches. This event
has no attributes.
Example:
Event Set_Scan Data (): "SI1" "SI2";
GSD WRP/LBIST X
OPMISR/OPMISR+ X
XOR Compression X
Full/Partial Scan X
Start_Osc
This event starts an oscillating waveform on the specified pin(s). All pins in the Start_Osc
event must be in the same correlated set. The corresponding pin should have the +OSC
attribute This oscillating waveform is applied concurrently with subsequent events, until the
waveform is stopped, either by an expiration of the cycle count specified in this event, or by a
Stop_Osc event. In addition, a Stim_Clock or Pulse event on this pin will stop the
oscillator. This event is intended to be used to run On-Product Clock Generation (OPCG)
logic. The OPCG logic typically ignores all input oscillators until a triggering event occurs
(normally the assertion of a GO test function pin), at which point the OPCG logic fires off some
number of internal clock pulses based on the input oscillators (often fed through on-product
Phase-Locked Loops - PLLs) and custom OPCG programming. The OPCG logic’s finite-state
machine (FSM) then shuts down and waits for another triggering event.
period for the oscillator cycle. For example, to specify a 500 MHz oscillator with 50% duty
cycle, specify (up 1.0 ns, down 1.0 ns). This attribute can be specified for oscillators that
are synchronous with the tester to specify the approximate period and duty cycle (and
imply the frequency) for the input oscillator, but tester programming may not achieve the
exact values specified for the up and down attributes. This attribute is more important for
asynchronous oscillators to specify to test engineering what frequency and duty cycle is
needed for the input oscillator; for asynchronous oscillators, if this attribute is not
specified, it is assumed that the oscillator will be set to an appropriate frequency by a test
engineer.
Specify a positive number and a time scale (ps, ns, us, or ms to indicate the time is
specified in pico-, nano-, micro-, or milli- seconds).
■ down n.nn ts
This attribute is specified to denote the time to be spent in the negative portion of the
oscillator cycle. It is paired with the up attribute to complete the specification of the period
for the oscillator cycle. For example, to specify a 333 MHz oscillator with 33% duty cycle,
specify (up 1.0 ns, down 2.0 ns). This attribute can be specified for oscillators that are
synchronous with the tester to specify the approximate period and duty cycle (and imply
the frequency) for the input oscillator, but tester programming may not achieve the exact
values specified for the up and down attributes. This attribute is more important for
asynchronous oscillators to specify to test engineering what frequency and duty cycle is
needed for the input oscillator; for asynchronous oscillators, if this attribute is not
specified, it is assumed that the oscillator will be set to an appropriate frequency by a test
engineer.
Specify a positive number and a time scale (ps, ns, us or ms to indicate the time is
specified in pico-, nano-, micro-, or milli- seconds).
Example:
Event Start_Osc (pulses_per_cycle=3,up 1.5 ns, down 1.5 ns) : "B"=+;
In the example, the tester is instructed to pulse pin B 3 times per tester cycle evenly distributed
within the tester cycle to create an oscillating input. By specifying a period of 3ns, it is
expected that the resulting oscillator signal will run at approximately 333MHz. To do this, the
tester cycle will need run as close to 111MHz as is possible (about 9ns cycle time). While the
oscillator is pulsing pin B, other events following this one may be applied to the product.
Normally, Encounter Test simulators set this pin to X, and it will remain there until some other
event specifies a value to place on the pin.
The value plus (+) in the preceding example is the starting value of the oscillator, applied
when the Start_Osc event is processed. Pulses will continuously occur on the oscillator, but
will normally take affect via OPCG logic only in response to a triggering event, typically
caused by the raising of a GO signal. Once triggered, the OPCG logic should run until it
consumes sufficient input oscillator cycles to produce the internal clocks as programmed.
This is indicated by use of Wait_Osc events within Test_Sequences that specify to wait for
some number of cycles to occur before applying any other stimulus to the device.
Skewed_Compressed_Input_Stream
This event causes a “skewed load” by adding an extra A shift clock pulse to be applied at the
end of the scan operation. Because this shifts one more bit of data into the scan chains, this
event contains one more bit of data for each scan-in (SI) pin. A consequence of using this
event is that, for LSSD designs, the L1 master latch and its companion L2 slave latch can be
set to different/independent values.
The listed values are the values described for the Compressed_Input_Stream event.
XOR Compression X
Full/Partial Scan
GSD WRP/LBIST
OPMISR/OPMISR+
XOR Compression X
Full/Partial Scan
Skewed_Compressed_Output_Stream
This event causes a “skewed unload” by starting the scan-out by applying all of the LSSD B
shift clocks prior to the full count of scan shift cycles, with the result that the master L1 latches
are observed instead of the slave L2 latches. This event lists the values described for the
Compressed_Output_Stream event.
The event attribute overlap=no indicates overlapping with the next scan-in is disallowed
and the values provided in the event were computed with the assumption that the scan-in (SI)
pins will bet set to zeros (0) for all scan cycles. The imported attribute indicates the data
was imported from a foreign pattern source (IEEE 1450 STIL).
Skewed_Internal_Scan_Load
This event lists the values that will be loaded into all flop scan cells as a result of preceding
events, similar to the Internal_Scan_Load event with the addition that this event also stores
the skewed scan latch (SSL) values.
Skewed_Scan_Unload
This event scans out latch values in a LSSD scan design environment. It differs from the
Scan_Unload event in that the Skewed_Scan_Unload event includes the application of
the skewunload sequence. This observes the values of the latches preceding the latches
controlled by the B clocks in the scan chains. Values are reported for representative measure
latches (RML) and the values reported for the RMLs are the values after the initial B clock
pulse. Refer to Appendix A, “Scan Operation” for a diagram.
Note: If using the node/name format of TBDpatt, RML latches may be identified by either
referencing the latch primitive block or output pin name directly or by referencing the
containing cell output pin name if there is no fan-in along the path from the latch primitive pin
to the cell pin.
Skewed_Unload_SR
This event scans out latch values in a scan design environment, the same as the
Skewed_Scan_Unload event. It differs from the Skewed_Scan_Unload event in that the
vector of values given are those to be observed at the output of a Measure_Register rather
than on internal latches. It has two attributes:
■ measure_register
This is the ID of the associated Measure_Register. It correlates to the Measure
Register Application Object which describes this Measure_Register.
■ number_shifts
The number of shifts necessary, after the initial B_SHIFT_CLOCK pulse, to scan out the
given values. The unloading of the measure register starts with the first (left-most) logic
value in the measure vector and continues for the number of shifts stated until all values
have been scanned out.
The Skewed_Unload_SR event differs from the Unload_SR event in that it includes the
application of the skewunload sequence. This observes the values of the latches preceding
the latches controlled by the B clocks in the Measure_Registers. Values in the unload
vector are those scanned out of representative measure latches (RMLs), and the values
reported for the RMLs are the values after the initial B clock pulse. Scan path inversions
between the latch being scanned out and the Measure_Register output are factored into
the scan-out values given.
Note: All Skewed_Unload_SR events within a pattern take place in parallel.
Example:
Event 1.1.1.1.1.4.1 Skewed_Unload_SR (measure_register = 3, number_shifts = 8):
110100010;
Skewed_Load_SR
This event scans in latch values in a scan design environment, the same as the
Skewed_Scan_Load event. It differs from the Skewed_Scan_Load event in that the
values to be scanned in are given by reference to a Stim_Register ID and a vector of
values to be applied to the input of that Stim_Register, rather than as a set of latch values.
It has two attributes:
■ stim_register
This is the ID of the associated Stim_Register. It correlates to the Stim_Register
Application Object which describes this Stim_Register.
■ number_shifts
The number of shifts necessary to scan in the given values. The loading of the
Stim_Register starts with the first (left-most) logic value in the stim vector and
continues for the number of shifts stated, followed by the pulsing of all identified A scan
clocks, until all required values have been loaded.
The values specified in the load vector are those to be loaded into representative stim latches.
Inversions between the representative stim latch and the scan-in are factored into the load
vector values.
Note: All Skewed_Load_SR events within a pattern take place in parallel.
Example:
Event 1.1.1.1.1.4.1 Skewed_Load_SR
(stim_register = 6, number_shifts = 7);
1011010;
Stim_Clock
This event type provides a list of clock primary inputs and the values to which they should be
set. This event has the timed_type attribute.
Example:
Event 1.1.1.4.1.3.1 Stim_Clock ():
This event can produce a single edge of a clock, therefore leaving the clock in the on-state at
the end of the event or pattern.
The stim_clock event allows other events to occur between the rising and falling edge of
the clock, as shown below:
Stim_clock:clk=1
Stim_PI (other pins)
Measure_PO:
Stim_clock: clk=0
Skewed_Scan_Load
This event scans in latch values in a scan design environment. It differs from the Scan_Load
event only in that the scan operation for Skewed_Scan_Load includes an extra pulse on
all identified “A” scan clocks, as implied by its name. The effect is to reach latch states that
cannot be reached by the normal scan sequence. An extra value gets loaded into the first
latch in a scan chain if this latch is controlled by an “A” clock. The specification of this extra
value gives this event a slightly different appearance from the Scan_Load event.
Notes
1. If using the node/name format of TBDpatt, RSL latches may be identified by either
referencing the latch primitive block or output pin name directly or by referencing the
containing cell output pin name if there is no fan-in along the path from the latch
primitive pin to the cell pin.
2. If you are not explicitly specifying values for all RSLs, the compact version of this event
should be used to achieve a reduction in the size of the Vectors file that results from
Read Vectors. Refer to “Compact_Skewed_Scan_Load” on page 52 for additional
information.
3. This event can be compacted to achieve a reduction in the size of the Vectors file. Refer
to “Compact_Skewed_Scan_Load” on page 52 for additional information.
Example:
Event 1.1.1.2.1.1.1 Skewed_Scan_Load ():
Stim_PI
This event type provides a list of primary inputs and the values to which they should be set.
The simulator will not randomize unspecified PIs. When this event is shown in the vector
format, periods (.) are used as place holders for those primary inputs that are not to be
affected by this event. This event has the timed_type attribute.
Example:
Event 5.2.1 Stim_PI ():
OPMISR/OPMISR+ X X X
XOR Compression X X X
Full/Partial Scan X X X
Stim_PI_Plus_Random
This event type is to be used only as input to a simulator. This event type provides a list of
primary inputs and the values to which they should be set. It implies that any primary input
which can properly be stimulated (with the exceptions noted below) will be set to a simulator
supplied random value. When this event is shown in the vector format, periods (.) are used
as place holders for those primary inputs which are to be randomized and for those that are
not to be affected by this event. This event has the timed_type attribute.
Notes
The following classes of primary inputs are not randomized, even if their vector positions
are not specified (occupied by periods):
■ Test Inhibit (TI)
These pins are never allowed to be taken out of their specified stability state. They are
not touched by the Stim_PI_Plus_Random event.
■ Clocks
These pins are not touched by the Stim_PI_Plus_Random event. They should be
at their stability values, as it is not recommended to change any other primary inputs
while a clock is at its defined on state; however, the Encounter Test simulators do not
verify this.
■ Three-state primary inputs
These would be bi-directional pins that are driven from the design by three-state drivers.
They are set to the high-impedance value if left unspecified in the
Stim_PI_Plus_Random event.
■ Lineheld (LH) primary inputs
These are PIs that are specified in the linehold file.
Example:
Event 1.1.1.2.1.1.1 Stim_PI_Plus_Random ():
Stim_PPI
This event specifies a list of pseudo primary inputs to be set to specific values. Treatment of
this event by Encounter Test applications is identical to the Stim_PI event, except that this
event is for pseudo PIs only. TDS (manufacturing) applications (other than diagnostic
simulators) should ignore this event. The values are stored as a vector, and the event is
printed in node list format.
Pseudo primary inputs are always referred to by name; the TBDpatt_Format statement
has no effect on the format of this event. This event hs the timed_type attribute.
Example:
Event 1.1.1 Stim_PPI (timed_type=release):
XOR Compression X X X
Full/Partial Scan X X X
GSD WRP/LBIST X X X
OPMISR/OPMISR+ X X X
XOR Compression X X X
Full/Partial Scan X X X
Stim_PPI_Clock
This event specifies a list of pseudo primary inputs to be set to specific values. Treatment of
this event by Encounter Test applications is identical to the Stim_Clock event, except that
this event is for pseudo PIs only.
Pseudo primary inputs are always referred to by name; the TBDpatt_Format statement has
no effect on the format of this event. This event has the timed_type attribute.
Example:
Event 1.27.2 Stim_PPI_Clock:
Stop_Osc
This event provides a list of primary inputs to be quiesced from a previous Start_Osc
event. The quiescent value for each pin is the opposite of the value specified on that pin in its
previous Start_Osc event.
All pins in the Stop_Osc event must be in the same correlated set.
Example:
Event Stop_Osc ():
"Pin.f.l.opcgckt.nl.B"=0;
Tester_PRPG_Seed
This event specifies the initial values to be loaded into the tester's PRPGs that are connected
to the design primary inputs. In the vector format there is one seed for each primary input in
the vector correspondence list. In the node list format, each seed value is prefixed by the
name of the primary input. The seed values are specified as hexadecimal strings. This event
has no attributes.
Example:
Event 1.1.1.2.1.1.1 Tester_PRPG_Seed ():
Tester_PRPG_Signature
This event is used to specify intermediate primary input PRPG states to allow application of
a subset of the pseudo-random patterns for diagnostic analysis. This event type has the
attributes iteration, fast_forward, and final.
Example:
Event 1.1.1.3.2.8.1 Tester_PRPG_Signature (iteration=256):
XOR Compression
Full/Partial Scan
Tester_SISR_Mask
This event tells which primary outputs have active signature registers connected for the
current Test_Procedure. This allows a SISR that is assigned to a pin to be disconnected
during the Test_Procedure. This flexibility is required on bidirectional pins to support
testers that do not have true bidirectional pin support. For one Test_Procedure, the pin
may be monitored by a SISR and receive no stimulus from the tester; for another test
procedure, the pin may receive stimulus (either a line-hold, stims, or from a PRPG) from the
tester, but have its SISR disconnected.
The mask is defined as a bit string, one bit per primary output in the primary output correlation
list; a 1 indicates that the corresponding primary output has a SISR that is connected for the
test procedure, while a 0 indicates that either there is no SISR assigned to the primary output
or the SISR is disconnected. When a SISR is not connected, Encounter Test assumes that it
does not get clocked during the test procedure.
Example:
Event 1.1.1.3.1.1.4 Tester_SISR_Mask ():
Tester_SISR_Seed
This event specifies the initial values to be loaded into the tester's SISRs that are connected
to the design primary outputs. In the vector format there is one seed for each primary output
in the vector correspondence list. In the node list format, each seed value is prefixed by the
name of the primary output. The seed values are specified as hexadecimal strings.
This event has the fast_forward attribute. The fast_forward attribute allows the
SISR to be seeded differently for normal or fast_forward test application. This makes it
possible to have the SISR seeds included at the beginning of each Test_Procedure and
still have the option of either (a) comparing signatures and reseeding between successive
Test_Procedures or (b) continuing to the next Test_Procedure without comparing
signatures and reseeding.
Example:
Event 1.1.1.3.1.1.2 Tester_SISR_Seed ():
Tester_SISR_Signature
This event is used to specify the primary output signatures against which to compare the
contents of the tester SISRs (single-input signature registers). The comparison is done either
at the end of the test, or for diagnosis, at some intermediate point. This event type has the
attributes iteration, fast_forward, and final.
Example:
Event 1.1.1.2.2.7.3 Tester_SISR_Signature (iteration=256):
Unload_SR
This event scans out latch values in a scan design environment, the same as the
Scan_Unload event. It differs from the Scan_Unload event in that the scanned-out
values are given by reference to a Measure_Register ID and a vector of values to be
observed at the output of that Measure_Register, rather than as a set of latch values. It
has two attributes:
■ measure_register
This is the ID of the associated Measure_Register. It correlates to the Measure
Register Application Object which describes this Measure_Register.
■ number_shifts
The number of shifts necessary to scan out the given values. The unloading of the
Measure_Register starts with the first (left-most) logic value in the measure vector
and continues for the number of shifts stated until all values have been scanned out.
Values are those scanned out of representative measure latches (RMLs). Scan path
inversions between the latch being scanned out and the Measure_Register output are
factored into the scan-out values given.
Example:
Event 1.1.1.1.1.4.1 Unload_SR (measure_register = 3, number_shifts = 8)
110100010;
Use_Channel_Masks
The Use_Channel_Masks event specifies what masking is to occur for each and every scan
cycle in which response data could be unloaded into the MISR. There should be as many
entries as there are scan cycles to completely load and unload the scan chains for each test.
Each entry is an encoded value for the state of the channel_mask_enable (CME) signals. The
value 0 signifies to perform no masking on that scan cycle and so the CME pins should be set
to their defined stability values. For easier reading, zero (0) values are printed as periods (.)
and simply indicate that no masking is being done of those scan cycles. A value of 1 selects
to use mask register 1 for that scan cycle if there is a mask register defined and to mask all
channels if there is no mask register. A value of two indicates to use mask register 2 on that
scan cycles or to use the mask-all channels capability if there is no mask register 2. Similarly
on up to a value of up to 15, that indicates to use mask register 15 or the mask-all channels
capability if mask register 15 does not exist.
Example:
Mask_Reg 1 = 10100010
Mask_Reg 2 = 11111111;
Wait_Osc
This event synchronizes other events with the operation of a free-running oscillator which has
been initiated by a Start_Osc event. The oscillator pin is identified by the Wait_Osc
event. When a Wait_Osc event is encountered, all further action halts (if necessary) until
the specified number of oscillator cycles have elapsed. The oscillator cycle count is specified
as an integer, representing the number of cycles since the previous Wait_Osc (or
Start_Osc) event.
All pins in the Wait_Osc event must be in the same correlated set. A cycle count of 0 means
that any preceding events were applied independent of the oscillator.
When two or more Wait_Osc events appear consecutively, they are assumed to be
concurrent; the “wait time” is the maximum time specified by any one of the Wait_Osc
events in the group, where the time is calculated by multiplying the number of cycles specified
by the period of that oscillator. Encounter Test will indicate an error condition if the nostability
attribute is set in some Wait_Osc event for which the number of cycles is not sufficient to
account for the maximum time calculated for all Wait_Osc events in that consecutive group.
Cycles
Expressed as Cycles= n where n is the number of oscillator cycles since the previous
Wait_Osc or Start_Osc event.
nostability
The presence of this attribute means that the design is not expected to be stable at this time.
A Wait_Osc event with this attribute would be placed at a point in the sequence where the
Encounter Test sequence verifier needs to know the relative time in terms of oscillator pulses,
but should not be checking for stability. If this attribute is not present, the sequence verifier will
issue an error message if the design is not stable.
off
The presence of this attribute means that subsequent events are to be applied independent
of the oscillator signal. The default, with this attribute omitted, means that subsequent events
are synchronized with the oscillator signal, and implies that another Wait_Osc event will
follow some intervening events, possibly in another pattern.
Example:
[ Pattern;
Event Scan_Load (): 1011100010010101;
] Pattern;
[ Pattern;
Event Stim_PI ():.0..101001;
Event Measure_PO ():;
] Pattern;
[ Pattern;
Event Wait_Osc (Cycles=0): "Pin.f.l.ckt.nl.osc";
Event Stim_PI ():.1........; # Apply "go" signal to apply a
Event Pulse_PPI (): C1=+; system clock cycle from OPCG logic.
Event Pulse_PPI (): C2=+;
Event Wait_Osc (Cycles=4,Off): "Pin.f.l.ckt.nl.osc";
] Pattern;
[ Pattern;
Event Scan_Unload ():;
] Pattern;
LSSD WRP/LBIST X X X
OPMISR/OPMISR+ X X X
XOR Compression X X X
Full/Partial Scan X X X
GSD WRP/LBIST X X X
OPMISR/OPMISR+ X X X
XOR Compression X X X
Full/Partial Scan X X X
Wait_Time
An alternative to Wait_OSC events that allows specifying how long to wait in terms of time
rather than oscillator cycles. When a Wait_Time event is encountered, all further action halts
(if necessary) until the specified amount of time has elapsed. The amount of time can be
specified in picoseconds up to milliseconds
Example:
Event Wait_Time 10 ps ;
Application Object
An application object can be added to certain TBD objects. An application object has the
purpose of providing a means of associating Encounter Test data with the test pattern data
object that would be awkward to handle as simple attributes of the object. Application objects
have unique names as described below. The application object is placed immediately after
the begin statement of the TBD object to which it is attached, and may be interspersed with
Keyed Data. Application objects can not be attached to events.
There are two types of application objects that are used to indicate the current test mode of
the design.
■ [Going_To_Mode: Test Modename];
This object is on the first pattern of a series of patterns that initialize the named test
mode.
These objects are used when writing a sigobs sequence, whenever the readout occurs in
a different mode from the LBIST mode. They may also appear in exported TBDpatt if the
expand modeinit sequence was specified.
Define_Sequence
A sequence definition is a set of patterns which, when applied in the given sequence,
accomplishes some purpose. Sequence definitions are stored in the TBDseq file.
LBIST test sequence definitions, when they are used, are copied from the TBDseq file into
Vectors, and thus, when the Vectors file is printed, they appear in TBDpatt. This protects
against the possibility that the user may import a new or changed version of the test sequence
after it is used; information from the sequence definition will be used for delay test. All the
sequence definitions used in an experiment will appear as application objects immediately
following the [Experiment statement.
The presence of this attribute means that this test sequence uses (observes) the starting
state of some memory element and that this memory element gets updated during the
course of the sequence so that successive Test_Sequences derived from this
defined sequence will have results that are dependent upon activity that occurred in a
previous iteration of the test.
For a stored-pattern test, you may be able to omit this attribute even though the above-
stated condition is true. If this attribute is not specified, then Encounter Test will set all
memory elements (except TC and fixed value latches) to X (unknown values) at the
beginning of each iteration of the sequence, thereby removing this dependency upon
previous iterations. However, there may be cases where setting all the non-fixed value
latches to X destroys the effectiveness of the test. If that is the case, then you should
specify this attribute. However, this attribute should not be used if the only memory
elements to be preserved are LFSRs (for WRPT and LBIST) and OPC latches. Note that
OPC latches are defined as those that are observable only through paths that pass
through cut points.
■ dummy
This attribute is used on misrreset sequences if these conditions exist:
❑ On-Product MISR test mode
❑ The MISR reset clock is also the pipeline clock
The presence of this attribute indicates that misrreset sequences are not applied
during a scan event, but instead are explicitly applied within a manipulated test
sequence.
■ type
The sequence type attributes and their meanings are:
❑ controlpipelinefill
This sequence type is added during pattern manipulation for patterns inserted after
a scan event that cause the explicit scanning in of the last number of scan bits.
❑ include
❍ This sequence type includes an optional file that the user can specify.
❑ modeinit
A sequence that brings the design from an unknown state to the stability state for
the test mode. If the test mode has fixed-value latches, the modeinit sequence loads
them. For more information, refer to “Requirements of Initialization Sequences” in
the Encounter Test: Guide 2: Testmodes.
❑ scanop
The overall scan operation that loads and unloads the scannable latches. This
sequence consists of a series of Apply events, which identifies the order in which the
scan sections are to be applied. See Appendix A, “Scan Operation” for a diagram.
❑ scanentry
An optional sequence component of the scan operation that exists primarily in
support of 1149.1 scan protocols. It is used for those cases in which 1149.1 TAP
scan stored pattern test generation is performed in some state of the TAP controller
other than Run-Test/Idle.
The scanentry sequence exists to allow each scan section to start at the same
TAP controller state, or at least in compatible states. This would make it possible to
support dropping scan sections from the scanop without affecting the viability of the
scan sections retained. This section dropping capability is not presently supported,
but the scanentry sequence is nonetheless defined and supported to forestall a
migration problem should the Encounter Test support posture change.
❑ scansection
A sequence that loads and unloads some subset of the scannable latches.
Encounter Test automatically produces only a single scansection sequence. A
scansection sequence as created by Encounter Test consists of a series of Apply
events that identify the scanprecond, skewunload, scansequence, and skewload
sequences that, when applied in succession, accomplish the scan operation. You
can also create your own scansection, refer to “Custom Scan Protocols” in the
Encounter Test: Guide 2: Testmodes.
❑ scanexit
An optional sequence component of the scan operation that exists primarily in
support of 1149.1 scan protocols and only in cases where there is more than one
scan section. It exists to return to the state in which test generation is being
performed, after all scan sections have been processed.
❑ scanprecond
A sequence that brings the design from its stability state to the state where this
section's scansequence can be applied. This is usually one or two patterns that
apply the values to scan gates, output inhibits, and the like.
❑ skewunload
A sequence that can be appended in front of the scan sequence to perform a
skewed unload. For LSSD designs, this consists of a single pattern that pulses all
the B shift clocks.
❑ scansequence
The clocking sequence used for loading and unloading all the latches that are
scannable in the scan section. Within the sequence are dummy stim and measure
events (Set_Scan_Data and Measure_Scan_Data) that tell when and on
which pins to insert or observe the stim latch or measure latch values respectively.
❑ misrobserve
This sequence establishes the MISR Observe state by setting the MISR_READ pins
to their value. A Measure_MISR_Data event is then included to observe the
MISR contents on the MISR_OBSERVE pins. Another Stim_PI is then applied if
needed to reset the values on the MISR_READ pins back to the scan state.
For additional information, refer to:
❍ “On-Product MISR Controls” in the Encounter Test: Guide 1: Models.
❍ “Measure_MISR_Data” on page 74
❍ “Stim_PI” on page 99
The misrobserve sequence exists in the scanop after the scansequence and
before the skewload and scansectionexit sequences. Refer to Appendix A, “Scan
Operation” for details on the scanop structure.
❑ misrreset
The misrreset sequence immediately follows the
MISR_Observe_Sequence. It establishes the MISR Reset state by setting the
MISR_RESET_ENABLE pins to their values, then pulses the MISR Reset clock and
pulses all the B clocks. Another Stim_PI is then applied if needed to reset the
values on the MISR_RESET_ENABLE pins back to the scan state.
For additional information, refer to:
❍ “On-Product MISR Controls” in the Encounter Test: Guide 2: Testmodes.
❍ “MISR Reset” design state in the Encounter Test: Guide 2: Testmodes.
❍ “Stim_PI” on page 99
The misrreset sequence exists in the scanop after the scansequence and
before the skewload and scansectionexit sequences. Refer to Appendix A, “Scan
Operation” for details on the scanop structure.
❑ diagobserve
This sequence is used to switch the design from the On-Product MISR test mode to
the diagnostics test mode where the channel latch data can be scanned out. This
sequence may be empty if there is no difference in the stability state between the
On-Product MISR test mode and the diagnostics test mode.
❑ diagreturn
This sequence is used to switch the design from the diagnostics test mode to the
On-Product MISR test mode after a diagnostic measure event. If the
Diagnostics_Observe_Sequence is empty, this sequence will be empty
also.
❑ nonscanflush
The nonscanflush sequence is used by Encounter Test in two situations. In both
cases, the nonscanflush sequence is automatically inserted into the test
sequence immediately after the scannable latches have been loaded.
❍ Generation of pseudo-random tests. The nonscanflush sequence re-initializes
the non-scannable memory elements after each scan load, allowing them to
have new pseudo-random states for each test, along with the scannable
memory elements.
❍ Generation of scan-based or weighted random pattern tests with the
nonscanlatch=flush option.
❑ scanlastbit
An optional component sequence of the scan operation that exists primarily in
support of 1149.1 scan protocols. It scans the last bit of the scan section for which
the preceding scansequence scanned the first N-1 bits. The reason for its
existence and the reason the scansequence stops one bit short is to
accommodate those cases in which the scanop returns the TAP controller to some
state other than Shift-DR. This cannot happen without at some point entering the
Exit1-DR state, and going from the Shift-DR state to the Exit1-DR state causes one
final shift to occur, hence the name scanlastbit.
❑ skewload
A sequence that can be appended to the end of the scan sequence to perform a
skewed load. For LSSD designs, this consists of a single pattern that pulses all the
A shift clocks.
❑ scansectionexit
The scansectionexit sequence exists to allow each scan section to end at the
same TAP controller state, or at least in compatible states. This would make it
possible to support dropping scan sections from the scanop without affecting the
viability of the scan sections retained. This section dropping capability is not
presently supported, but the scansectionexit sequence is nonetheless
defined and supported to forestall a migration problem should the Encounter Test
support posture change.
❑ loadsuffix
A sequence that is optionally applied immediately after the scanop sequence. When
applied, the loadsuffix sequence is copied into the test sequence immediately after
the scan load event. The loadsuffix sequence is used to move values from the scan
shift registers into any stable scan bits attached to them. This mechanism is used,
for example, to deal with the UPDATE stage of the 1149.1 TAP controller operation.
In LSSD terms, the loadsuffix sequence is used to load L3 latches, which should
normally be fed from L1 latches. When scan chains are reported, these are included
in the listing correlated with a specific bit position within a controllable scan chain.
❑ prpgsave
A sequence that copies the state of all on-board PRPGs into their respective shadow
registers. This sequence is used when applying tests using Fast Forward.
❑ prpgrestore
A sequence that copies the state of all on-board PRPG shadow registers into the
corresponding PRPGs. This sequence is used when applying tests using Fast
Forward.
❑ test
A sequence that specifies the order of operations (patterns and events) for a
Test_Sequence. This type of sequence definition may be thought of as a
template to be used for some Test_Sequences.
❑ setup
This sequence definition type becomes a setup type Test_Sequence when it is
used in a Vectors Experiment. Refer to setup on page 34.
❑ endup
Endup type sequences are to be applied at the end of a BIST operation and before
reading out the MISR contents. An endup sequence may be necessary for shutting
down a phase-locked loop, or moving a BIST controller state machine into some
desired end state. It is not required to have an endup sequence if the design has no
such special requirements.
❑ sigobs
A signature observation sequence is used for reading out the results of a BIST test.
A typical signature observation sequence consists of switching the design into a
scan mode, and then a Scan_Unload event to scan out the MISR (and, for
diagnostics, the channel latch) states.
❑ channelmaskprecon
A channel mask preconditioning sequence defines how to precondition the design
to allow loading the mask bits. This sequence is applied on top of the scan state and
enables loading of the channel mask register from the Channel_Mask_Input
(CMI) pins.
❑ channelmaskcycle
This sequence iterates one cycle of the shift-loading of the channel mask registers.
❑ channelmaskexit
This sequence returns to the scan state so that scan cycles can begin.
❑ channelmaskload
This sequence applies the prior three sequences in order.
❑ scanfill
This sequence contains the number (1 or more) of scan cycles to be explicitly
simulated at the end of a scan load. The sequence is copied into all tests created
during ATPG immediately following all scan_load events and all scan data is
backed up in the scan chains n bit positions to account for these extra shift cycles.
This update of the ATPG created tests allows simulators to correctly compute values
that are loaded into non-scan latches/flops as a result of the clocks applied during
the last n cycles of the scan load operation. These additional scan cycles are added
to the normal scan depth based on the length of the longest scan chain. This
sequence is automatically generated with n explicit scan cycles.
The difference between scanfill and nonscanflush is that the latter is a custom
sequence of patterns that are applied after the scan chain has been loaded. The
nonscanflush patterns are used to load latches that are not on a scan chain. The
scan chain is frozen during this sequence and values from bits within the scan chain
are loaded into non-scan latches.
Keep the following points in consideration while working with scanfill:
❍ Introduce a scanfill sequence during: build_testmode seqdef=xxx
seqpath=yyy
❍ Define the number of scan shifts within the scanfill sequence using the SCAN
statement with the input modedef file.
❍ After ATPG:
If you write out the TDBPatt, you will see that the Stim_Latch event placed
before the custom scanfill sequence will have the scan chain values offset by
the appropriate number of scan shifts. The bits closest to the scan out are "do
not care" and should be filled with the values set for these and all the other don't
care bits in the vector (these bits are included in the bit bucket anyway after the
scanfill is executed).
The Stim_Latch event is followed by the custom user-defined scanfill
sequence. The scan data in pins are either explicit ATPG requested values or
do not care and thus the latch fill settings determine what gets applied.
❍ Only limited error checking can be done with a scanfill sequence. Most errors
are detected when test patterns fail simulation or on the tester
❍ The scanfill sequence must first apply any PI stimulus needed to return to the
scan state as the normal scan_load sequences set the design into the test
generation (TG) state if there are any Test Constraint (TC) test function pins
defined. This sequence must then also return the design back to the TG state.
❑ opcgload
This sequence is used to load OPCG registers and applies the following sequences:
❍ opcgprecon
This sequence puts the design into the scan state for the OPCG registers based
on the assumption that the design starts in the TG state. Note that this loading
of OPCG registers is done via a setup sequence that is applied prior to any
associated test_sequence and as such the same entry condition as for any
test_sequence is assumed, that is, the TG state.
❍ opcgcycle
This sequence is repeated and shifts the OPCG scan chains 1 bit for each
cycle.
❍ opcgexit
This sequence returns to the TG state of the design after the OPCG registers
are loaded.
❑ premanipulate_copy
It is necessary to save the initial (unmanipulated) latch values for designs with scan
control pipelines and Scan_Load events rather then Compact_Scan_Load events.
During manipulation of the test vectors an Internal_Scan_Load event containing
the initial latch values is created and stored within the manipulated test vectors. The
pattern containing this Internal_Scan_Load event is marked with a sequence
attribute of premanipulate_copy making it readily identifiable during simulation.
■ Audit attributes
These attributes are set by Encounter Test. Upon Import, all audit information is reset as
described below. Audit information is kept for any Force events contained in the
sequence and for any pseudo PI events contained in the sequence as well as additional
audit information as described below. The audits are carried as binary flags in Vectors:
❑ manipulation_required
This audit indicates patterns must be manipulated before they can be committed.
This audit is set during any application that creates test patterns if the test mode
statistics indicate that a non-zero pipeline depth has been specified. Refer to
“ASSIGN” in the Encounter Test: Guide 2: Testmodes for related information.
❑ not_manipulated
This audit indicates the patterns have not yet been manipulated and must be
manipulated before they can be committed. This audit is set by an application that
sets the manipulation_required audit. The audit is reset only by using
insert_pipeline_vector_sequence. Refer to
"insert_vector_pipeline_sequence" in the Encounter Test: Reference:
Commands.
There is no audit keyword.
■ user_defined
This attribute is present if the associated sequence was defined by the user rather than
system generated.
The writer of a sequence definition may choose to invoke another sequence by means
of the Apply event. Sequences invoked by Apply in a manually written sequence do not
necessarily have a specified sequence type.
Define_Sequence is a collection of patterns. Only one dynamic pattern is allowed
within a Define_Sequence. A sequence definition may contain keyed data and
Timing_Data, Lineholds, SetupSeq, EndupSeq, and TestSeqType application
objects.
Following is an example showing the placement of a Define_Sequence statement in
an Experiment:
[ Experiment myExperiment 2 (type = loop, repeat = 256);
[ Define_Sequence sequence_abc 19951002204813 1.1 (test);
.
.
.
] Define_Sequence sequence_abc 1.1;
[ Test_Section 2.1;
.
.
.
where:
❑ sequence_abc is the name of the sequence definition
SeqDef
This includes the name of the sequence definition used by this test sequence for timing
information or for LBIST and the date and time that the sequence definition was created. The
sequence definition being referred to must exist as an application object on the experiment
which this test sequence is in.
SetupSeq
This specifies the name of another sequence definition to be used as the setup sequence in
the test procedure when the original sequence definition (the one that contains this
SetupSeq object) is used as a test sequence. Any initialization requirements needed to run
the original sequence definition as a test sequence must be satisfied by either the test mode
initialization sequence, the test sequence itself, or the setup sequence (or a combination
thereof). If there is no need for a setup sequence, then this object should be omitted.
For example, suppose the sequence named XYZ_Setup is required to initialize OPC logic
before running a series of tests using the test sequence named OPCG_Test_Seq_XYZ. They
would be coded as follows for import into the TBDseq file. All usages of this pair of sequences
refer only to OPCG_Test_Seq_XYZ. XYZ_Setup, the setup sequence, will be automatically
used as needed.
[ Define_Sequence OPCG_Test_Seq_XYZ (test);
[ SetupSeq=XYZ_Setup ];
[ Pattern ();
.
.
.
] Define_Sequence OPCG_Test_Seq_XYZ;
[ Define_Sequence XYZ_Setup (setup);
[ Pattern ();
.
.
.
] Define_Sequence XYZ_Setup;
EndupSeq
Specify the name of a sequence definition that runs at the end of the BIST process to shut
down, or “quiesce” the BIST controller. If there is no special quiescing process for your BIST
controller, then this object is omitted.
Example syntax:
[ EndupSeq=lbiststop ];
TestSeqType
This is a character string that describes the test, used by Manufacturing as a sort of catalogue
index in the data base where the tests for a design are stored. The exact character string to
use depends upon certain parameters of the test sequence as defined by your manufacturer.
Some manufacturers may not require that this object be specified at all.
Example syntax:
[ TestSeqType=C2WCC1 ];
Lineholds
This is a list of lineholds that are required for the sequence to work properly.
Note: It may also include lineholds that are not required--Encounter Test does not check for
the specification of unneeded lineholds.
The purpose of this is to ensure that if lineholds are required to get the sequence to pass the
Sequence Verifier properly, then the same lineholds will be used with this test sequence in
the test generation process. This is the only vehicle by which lineholds can be specified to the
Sequence Verifier.
Example syntax:
[ Lineholds () :
"Netname_A"=1
"Netname_B"=0 ;
] Lineholds;
Sort_keys
This application object is associated with a Test_Sequence and stores the number of faults
detected by the Test_Sequence. The syntax of sort_keys:
[ sort_keys (sone = n ) key= value {key= value... };]
Key names represent test objectives and the values represent the number of each test
objective detected by the Test_Sequence to which the object is attached. key can be
one of:
❑ null
❑ static
❑ dynamic
❑ iddq
❑ driver_receiver
❑ stuck_driver
❑ dynamic_stuck_driver
❑ shorted_net
❑ user - provides a means for users to sort patterns using their own criteria.
value is an integer greater than or equal to zero (0)
■ sone specifies whether fault detection counts are based on sofe (sone=1), dictionary
mode (sone=255), or a value between 1 and 255. SONE stands for S top O n N th Error.
Ignore_Measures
Ignore_Measures causes the specified primary outputs or scannable latch states to be set
to X in all Measure_PO or Scan_Unload events within the associated Test_Procedure.
It also prevents faults from being marked tested at the specified primary outputs and latches.
While Ignore_Measures causes the specified primary outputs and latches to be masked
for observation, it does not affect the states on their associated nets during simulation.
Ignore_Measures is used for dynamic tests when the path(s) feeding the specified latch or
PO are longer than the maximum path length, or there are incomplete or incorrect delays in
the logic that feeds it. Ignore_Measures may also be used in static tests when there is any
reason not to trust the simulated values at a given latch or primary output.
When importing test sequence definitions, include the object on the Timing_Data object, if
Timing_Data is specified, or on the Define_Sequence, if no Timing_Data exists.
Test_Procedures automatically generated by Encounter Test from this
Define_Sequence will include the Ignore_Measures object copied from the
Define_Sequence or Timing_Data. When importing Encounter Test pattern data
containing Test_Procedure objects, place the Ignore_Measures object directly on the
Test_Procedure. If also included on an associated Define_Sequence or Timing_Data
object, the Ignore_Measures objects should be consistent, although Encounter Test will
not make any check for consistency.
These application objects have one attribute: default_value = 0|1. This value allows the
specification of just the latches or POs which are to be measured, thus reducing the effort
required when the majority of latches or POs are to be ignored. The default is 0.
Notes
1. The Ignore_Measure object is valid only on a Test_Procedure,
Test_Sequence, Define_Sequences, and as part of the TimingData.
2. A “1” means to ignore measures on the latch/PO.
3. Ignore_Measure is also supported in vector format.
This section describes objects used or created by Test Data Migration applications.
The following application objects are created or used by Create Core Tests.
■ Macro_Tester_Loop
This is used to specify the name of a macro test algorithm to be used for a macro group.
It is a reset point for each macro group (that is, a complete test algorithm is started at a
tester loop and is not finished until the end of the tester loop). Using a different tester loop
for each test algorithm-macro group combination forces them to be independent so that
diagnostic data can be collected for each individual group.
A Macro_Tester_Loop statement can appear only in a Tester_Loop. Following is an
example showing the placement of the Macro_Tester_Loop statement in a
Tester_Loop:
[Tester_Loop 1.1.1 ();
[Macro_Tester_Loop(macro_algorithm=alg1,mic_name=mic1);
macros_in_group=(65, 140, 296);
]Macro_Tester_Loop;
■ Macro_Test_Procedure
This designates that the containing Test_Procedure defines a macro operation, and
specifies the name of the operation.
A Macro_Test_Procedure statement can appear only in a Test_Procedure.
Following is an example showing the placement of the Macro_Test_Procedure
statement in a Test_Procedure:
[Test_Procedure 1.1.1.1 ();
[Macro_Test_Procedure (macro_operation=read);
]Macro_Test_Procedure;
Each operation can be further divided into sub-groups in the contained test sequences.
■ Macro_Test_Sequence
This is used to define macro sub-groups for an operation. The sequence contains all the
patterns necessary to perform the operation for this sub-group.
A Macro_Test_Sequence statement can appear only in a Test_Sequence. Following
is an example showing the placement of the Macro_Test_Sequence statement in a
Test_Sequence:
[Test_Sequence 1.1.1.1.1 ();
[ Macro_Test_Sequence;
macros_in_subgroup=(65, 140);
] Macro_Test_Sequence;
There are four application objects present in TDM Vectors to make it structure-independent.
These application objects are attached to the Vectors handle.
■ PI_Vector
The PI_Vector Application Object gives the correspondence between PI node
identifiers and PI pin names. It contains the following for each primary input pin:
❑ Primary input pin node ID
❑ Primary input pin name
❑ Test function pin attributes
Note: A bi-directional I/O is present in both the PI_Vector Application Object and the
PO_Vector Application Object.
■ PO_Vector
The PO_Vector Application Object gives the correspondence between PO node
identifiers and PO pin names. It contains the following for each primary output pin:
❑ Primary output pin node ID
❑ Primary output pin name
❑ Test function pin attributes
Note: A bi-directional I/O is present in both the PI_Vector Application Object and the
PO_Vector Application Object.
■ Stim_Register
A Stim_Register Application Object is present for each Stim_Register defined for
the test mode. It contains the following information:
❑ Stim_Register ID (an integer)
❑ Scan-in pin node ID
❑ Number of bits
❑ Name of load section preconditioning sequence
❑ Name of load sequence
■ Measure_Register
A Measure_Register Application Object is present for each Measure_Register
defined for the test mode. It contains the following information:
❑ Measure_Register ID (an integer)
❑ Scan-out pin node ID
❑ Number of bits
❑ Name of unload section preconditioning sequence
❑ Name of unload sequence
This object is attached to the experiment level of TBDbin hierarchy and serves to identify the
original source of the patterns. The Pattern_Source object contains the following
information:
■ Source ID - the source record ID used to relate this object to a specific Pattern_Map
object (integer).
■ Source Type - the type of source file (integer): STIL (0) or TBDbin (1) or EVCD (2).
■ Source File Name - the file name, excluding the path, of the STIL or TBDbin file used as
the source of the patterns (string).
■ Source File Date - the date of the source file in MM/DD/YY format (string).
■ Source File Time - the time of the source file in HH:MM:SS format (string).
■ Source File Version - the version of the source file (string).
Target_Core_Info
Identifies a core by module name and assigns it a core number (>0) for reference within this
pattern file. The core also has a time stamp for it to be compared with a time stamp on the
core migration model when patterns are migrated. It also lists the fixed value core input pins
and their values as well as the fixed-value state elements and their values. In a composite
core module there will be one of these objects per target core. The maximum number of core
input and output pipeline stages allowed to be added above it when migrating patterns is
included here along with the number of pipeline stages above the core present when these
patterns were created. This information will be updated to decrease the numbers after
migration has been done to allow that these patterns might be further migrated in the future.
Example:
[ Target_Core_Info ( Core number = 1, maxInputStagesAboveCore = 5,
maxOutputStagesAboveCore = 5, inputStagesPresentAboveCore = 0,
outputStagesPresentAboveCore = 0, module_Name = 0, 19700101000000
] Target_Core_Info;
This object is attached to each pattern of the TBDbin hierarchy that contains a measure event.
and serves to identify the original source of the patterns. The Pattern_Map object contains
the following information:
■ Operation ID - the operation ID that relates this object to a specific Pin_Map object
(integer).
■ Source ID - the source record ID used to relate this object to a to a Pattern_source object
(integer).
■ Reference - a location reference into the source file (as identified by the Source ID field)
which caused the measure contained within the pattern to be created. For STIL source
files, this is the STIL statement number. For TBDbin source files, this is the TBD
odometer value. The type of source file is identified in the referenced Source ID object.
This object is attached to the experiment level of TBDbin hierarchy and serves to identify the
original source of the patterns. The Pin_Map object contains the following information:
■ Operation ID - the operation ID that relates this object to a specific Pattern_Map object
(integer).
■ Operation Name - the name of the operation (string)
■ Instance - the cell instance identifier; the identifier is the hierIndex of the cell.
■ SoC Node - the SoC node value; repeated for each cell output pin.
■ Pin Name - the pin name associated with the node; repeated for each cell output pin.
■ Scan Offset - the Scan_Offset value for the pin; repeated for each cell output pin.
■ Scan Length - the length of the scan chain; repeated for each cell output pin.
■ Invert - the Invert value for the pin; repeated for each cell output pin.
Target_Faults
This object lists the faults targeted by ATPG when the Test_Sequence was created. It lists
the faults and the observation point (scan cell or primary output) intended to detect the fault.
The syntax is as follows:
Fault = fault_index MeasurePoint = name
Example:
[ Test_Sequence 2.1.1.2.2 ();
[ Target_Faults;
Fault = 22538 MReg = 2 Bit = 21
Fault = 57122 MReg = 0 PO = 11
Fault = 19425 MReg = 1 Bit = 13
] Target_Faults;
The following application objects are created and used by Encounter True Time delay test.
Timing_Data
The timings represent the points in time that the events in the Define_Sequence's
dynamic pattern change state during functional simulation or on a tester. You can have
multiple Timing_Data attributes if each timing is derived under different circumstances
(process variations, lineholds, observe_points, and delay data).
This specifies the voltage of the primary power supply used when developing the delays
used to create the timings.
■ VTT
This specifies the voltage of a secondary power supply used when developing the delays
used to create the timings.
■ temp
This specifies the temperature used when developing the delays used to create the
timings. This is the temperature used to test the product.
■ delay_file_audit_string
This specifies the audit string from the import of the delayModel. This includes the date
and time stamp that were used to create the delays.
■ maximum_path_length
This specifies the maximum path length that was used when deriving the tests. Any paths
over this size were ignored. The primary outputs of the paths that have been ignored are
listed in the Ignore_Measures event.
■ minimum_path_length
This specifies the minimum path length that was used when deriving the tests. Any paths
under this size were ignored. If all paths are smaller than this, then all paths will be
considered and this minimum will be ignored.
■ cycles_to_repeat
This describes whether the dynamic pattern was timed expecting that it would be
repeated without the design being allowed to settle between repetitions.
Pin_Timing
This object is attached to the Timing_Data object and defines the tester cycles and the
times within each tester cycle when specific events are to occur. The events are identified by
their relative positions within the dynamic pattern which constitutes the timed portion of the
test. The Pin_Timing object consists of a list of unique timings. There are two types of
unique timing entries:
■ tester cycle
These define the time that each tester cycle starts. The first always starts at time 0 and
all other times are specified relative to this point. This entry type includes the following
fields:
PI or PO
PPI
A pseudo PI name.
cut_point
A net identified by name, hierarchical index, or flat index depending on the TBDpatt_Format
model_entity_form. See “TBDpatt_Format” on page 23
Timing on cut pints can be expressed either on the individual cut point or on the pseudo PI.
If pin timings are given for both a cut point and its pseudo PI, the cut point timing takes
precedence. Thus, if a pseudo PI represents 20 cut points and 19 of them have the same
timing, this can easily be expressed with one pin timing for the pseudo PI and another pin
timing for the unique cut point.
Figure 2-1 shows a timing diagram used to create the example Pin_Timing object of
Figure 2-2.
[ Pin_Timing:
tester_cycle 0.000000 ps cycle 1;
leading_edge_of_pulse Rising 200.000000 ps cycle 1 event 1 "release_clock" IN0";
trailing_edge_of_pulse Falling 600.000000 ps cycle 1 event 1 "release_clock"IN0";
stim_PIs RorF 950.000000 ps cycle 1 event 2 "Pin.f.l.omniTest.nl.PIN0";
stim_PIs RorF 950.000000 ps cycle 1 event 2 "Pin.f.l.omniTest.nl.PIN1";
stim_PIs RorF 950.000000 ps cycle 1 event 2 "Pin.f.l.omniTest.nl.PIN2";
stim_PIs RorF 950.000000 ps cycle 1 event 2 "Pin.f.l.omniTest.nl.input1";
tester_cycle 2280.000000 ps cycle 2;
leading_edge_of_pulse Rising 2400.000000 ps cycle 2 event 3 "capture_clock" IN0";
trailing_edge_of_pulse Falling 2800.000000 ps cycle 2 event 3 "capture_clockIN0";
tester_cycle 4000.000000 ps cycle 3;
] Pin_Timing;
] Timing_Data 1.1.1;
[ Pattern 1.1.1 (pattern_type = static);
Event 1.1.1.1 Stim_PI_Plus_Random ():
] Pattern 1.1.1;
[ Pattern 1.1.2 (pattern_type = dynamic);
Event 1.1.2.1 Pulse (timed_type=release):
"release_clock"= +;
Event 1.1.2.2 Stim_PI (timed_type=release);
; # (The sequence definition is a template, so individual stim
# values do not necessarily appear here.)
Event 1.1.2.3 Pulse (timed_type = capture):
"capture_clock"= +;
] Pattern 1.1.2;
[ Pattern 1.1.3 (pattern_type = static);
Event 1.1.3.1 Scan_Unload ():
] Pattern 1.1.3;
Timing_Lineholds
This object is attached to the Timing_Data object and is one of the application objects used
in the derivation of the pin timings. Timing derivation is controlled by user entered or
automatically generated static lineholds. The Timing_Lineholds are values that are
guaranteed not to change during the release portion of the sequence and so can be used to
eliminate logic that can not affect the tests. Only static lineholds are allowed to be
Timing_Lineholds. The set of Timing_Lineholds can contain both automatically and
manually generated lineholds.
Observe_Points
This object is attached to the Timing_Data object and is one of the application objects used
in the derivation of the pin timings. This is a list of hierpins. When Observe_Points is
present, only those POs and memory elements were used in the generation of timings.
Setup_Patterns
This object is attached to the Timing_Data object and is one of the application objects used
in the derivation of the pin timings. These patterns are used as an auxiliary way to setup the
state of the design before timings are calculated.
The Setup_Patterns are patterns that represent how the design is initialized by the
sequences that are portions of the test sequence being timed.
Timing_ID
This object is attached to a test sequence and contains the index of the timing data used by
this test sequence for timing information. This index refers to the relative order of the timing
data within the Define_Sequence. For example, the following Test_Sequence refers to
the second set of Timing_Data within the Define_Sequence named “Atest” and dated
“19950330104313”.
[ Test_Sequence 2 (type = loop, repeat = 256);
[ SeqDef=(Atest,"19950330104313") ] SeqDef;
[ Timing_ID = 2 ];
[ Pattern 1 (pattern_type = static);
Keyed Data
Keyed_Data provides a means for passing information through the test pattern data file that
Encounter Test applications may or may not recognize. Keyed data can be added to any TBD
object in the hierarchy from experiment to event and to a define_sequence. The keyed
data is placed immediately after the begin statement of the block to which it is attached.
Keyed data consists of character string pairs. In each pair, the two character strings are
separated by an = sign. Each character string should be enclosed in double quotes ("). The
string to the left of the equal sign is referred to as the key and the character string to the right
is the data. Both the key and the data can include any characters, including blanks, except
the newline (carriage return) character. For example, keyed data is coded as follows:
[Test_Sequence ();
[Keyed_Data;
"Keynumber1"="This keyed data is attached to the test sequence"
]Keyed_Data;
[Pattern (pattern_type=static);
[Keyed_Data;
"Patkey" = "This is keyed data attached to a pattern"
]Keyed_Data;
Event 1 Pulse():
"SystemClock"=+;
]Pattern;
]Test_Sequence;
For General Purpose Simulation, logMsg may be used on TBD entities down to, and
including Test_Procedure. A logMsg comment on a Test_Sequence or a Pattern is
ignored.
For High Speed Scan Based Simulation, logMsg may be used down to, and including the
Pattern entity.
Note:
❑ You must specify verbose=yes to enable the printing of log messages.
❑ Keyed_Data objects for TG=IGNORE, TG=IGNORE_FIRST, and TG=IGNORE_LAST
are only recognized when found on the pattern level of the hierarchy of user
sequences of type test. Refer to TG=Keyed Data in the Encounter Test: Guide 5:
ATPG for more information.
Simulation Options
Encounter Test simulators stores the specified simulation options as Keyed_Data in each
Test Section. Use either of the following methods to produce a report:
■ Via GUI, click Report - Vector Simulation Options to display the Report Vector
Simulations window. Refer to "Report Vector Simulation Options" in the Encounter
Test: Reference: GUI.
■ Via commands, use report_vector_simulation_options. Refer to
"report_vector_simulation_options" in the Encounter Test: Reference: Commands.
Summary Information
A TBDpatt file (written by Encounter Test) contains a summary including the number of
occurrences of each level of the hierarchy.
# experiments = n
# test sections = n
# tester loops = n
# test procedures = n
# test sequences = n
# patterns = n
# events = n
test_cycle timeplate - defines the order of events and the timing for functional capture. The
normal order of events is
1. Apply input values
2. Pulse the functional capture clock
3. Strobe any expected output values
Use the following write_vectors parameters to adjust the default timing:
testperiod=<int> ## Adjust the tester cycle 80ns = default
testpioffset=<int> ## Adjust when PI’s are set 0ns =default
testbidioffset=<int> ## Adjust when bidi’s are set 0ns=default
teststrobeoffset=<int> Adjust when to strobe 72ns=default
testpioffsetlist=<pin name]=<int>[,<pin name>=<int>] ## The other entries
adjust the timing of all pins in a specific group. This allows you to control
the timing of a specific pin. Many times this is used to ensure that the clocks
are fired in a specific sequence.
scan_cycle timeplate - Defines the timing and order of events for the scan chain shift
operation. The normal order of events is:
1. Strobe outputs
2. Set inputs
3. Pulse the scan shift clocks
You can adjust the timing of inputs, clocks and strobe times with write_vectors
parameters.
Encounter Test works with the following restrictions while defining equation-based timings:
■ Equation-based timings is not implemented for a variable with the value zero. This is
because a variable is not supported in the first position of the timeplate, so it must be set
to 0ns.
■ Encounter Test does not support two events at the same time, which includes a 0ns
followed by a variable set to 0. The write_vectors command will continue to produce
equation based timings if a 0 is encountered but the PI or PO set to 0 will not be equation
based and therefore cannot be modified through a variable.
■ The number of characters allowed on the right side of any equation is limited to 147
including blanks. Therefore, if <pinName> exceeds 45 characters, write_vectors
will replace the value with the PI or PO entry number instead of the pin name.
Refer to the following for sample equation-based settings and corresponding timeplates for
WGL, STIL, and Verilog formats:
■ “Equation-based Timing for WGL Patterns” on page 151
■ “Equation-based Timing for STIL Patterns” on page 167
■ “Equation-based Timing for Verilog Patterns” on page 189
The following example illustrates a special sequence to get OPCG logic to issue the true-time
delay test launch and capture clocks.
create_logic_delay_tests testseq=<TBDSeqpatt file name>
testsequence=opcg_sys_capture testmode=FULLSCAN_TIMED
The following figure represents a scan shift when scan_en=1 and AT_SPEED=0. Note the
following:
Note: This is a broadside load Verilog simulation and, therefore, there is only one scan shift
clock (scan_clk) to load the data. No additional application sequence is required to enter or
exit scan shift mode. All necessary data for this was provided in the pin assignment file.
The following figure shows a special sequence to have OPCG issue at-speed delay test
clocks. For the sample design, the OPCG logic will issue the launch and capture pulse when
PLL_EN goes to 0. Note that AT_SPEED=1 and this selects the OPCG output as the clock
source.
Figure 2-4 Sequence with OPCG Issuing At-speed Delay Test Clocks
Encounter Test creates one or more WGL “vector” files and optionally, a WGL “signals” file for
each testmode. A testmode typically has one vector file containing scan string confidence
patterns (refer to create_scanchain_tests in the Encounter Test: Reference: Commands
for more information) and one or more vector files to test the functional logic.
Vector files contain WGL which represents the actual test data and any WGL constructs
particular to that test data. The optional signals file contains WGL constructs that are
“common” to multiple vector files. If the signals file is not created, then these constructs are
contained in each vector file.
The test data is divided into multiple vector files in order to reduce the overall processing time
of a single, large WGL file. You can choose one of these methods for creating the files using
either the graphical interface or command line:
■ Create WGL data file from uncommitted tests for a specific testmode. Any test patterns
that you create are placed into an experiment. Specify the name of the experiment while
executing the create_*_tests command:
write_vectors language=wgl testmode=FULLSCAN INexperiment=scan_chain_test
<options>
■ After test generation, commit your test patterns using the commit_tests command and
then create the WGL data file. When you commit a set of tests, the experiment name is
eliminated and the patterns become part of the master pattern set. To write these
patterns, you only need to reference the test mode.
write_vectors language=wgl testmode=FULLSCAN <options>
Commentary is included in each vector file which correlates its contents to the source vectors
with regard to experiment, test section, tester loops, test procedures, test sequences, and
patterns.
<your_workdir>/testresults/wgl
A complete set of example WGL files is shown in Appendix C, “WGL Pattern Data Examples”.
The next section of the file contains legal WGL syntax defining the signal list for the design.
This list includes all the ports on the design. The order of the signals in the list is important
because their relative order is implied within the WGL vectors. The following is an example of
the WGL syntax:
signal
"CME0" : input; ## information about this input
"DATA[0]" :bidir; ## information on this bidi
"A[31]" : output; ## information on this output
"SYS_CLK" : input; ## information about this input
end
The next section is the scancell section that lists the FF in each scan chain. The following is
an example of the scancell section:
scancell
"TOP.Level1.Level2.REGA.DFF";
"TOP.Level1.Level2.REGB.DFF";
"TOP.Level1.Level2b.REGA.DFF";
end
Following the scancell section is the scanchain section defining all the scan chains within the
design. Each chain has a unique name and is referenced by the test vectors by its name.
Each scan chain is defined from Scan Input pin to Scan Output pin and lists every FF in the
chain from Scan In to Scan Out. The FF instance names are the names defined in the above-
mentioned scancell section. The following is an example of the scanchain section:
scanchain
"MREG_1_FULLSCAN" [
"SCAN_IN_1",
"TOP.Level1.Level2.REGA.DFF",
"TOP.Level1.Level2.REGB.DFF",
"TOP.Level1.Level2b.REGA.DFF,
SCAN_OUT_1"
];
"MREG_2_FULLSCAN" [
"SCAN_IN_2",
"TOP.Level1.Level2.REGC.DFF",
"TOP.Level1.Level2.REGD.DFF",
!, "TOP.Level1.Level2b.REGE.DFF,
SCAN_OUT_2"
];
end
Note: The! represents an inversion on the scan chain between REGD and REGE.
Header
The header section starts with comment data providing an overview of the WGL test list. The
comment data contains the following:
■ Encounter Test version used to create the file
■ Date and time of file creation
■ Part entity, variation, and iteration names (project is not specified)
■ Applicable testmode name
■ Source Experiment and Test Section identification
■ Selected input parameters and their values
Next in the header section is the waveform statement that points to the signals file. The
following is a sample waveform statement:
waveform "WGL.lssd.logic.ex2.ts1"
include "WGL.lssd.signals";
The first line of the statement contains the name of the vectors file and the include
statement imbeds the common signals file defined in the previous section. If you do not
specify the include statement, then these constructs are placed in-line in each vector file.
(write_vectors signalsfile=no)
Note: You need only one signals file for each testmode. Every vector file created for a specific
testmode will reference this signals file.
Timing Definitions
The next section is the timing definitions section that defines one or more WGL timeplates
depending on the requirements of the test data. The number of timing timeplates depends on
the number of event sequences required to apply the test patterns. These timeplates define
the time when, within a tester cycle, a value should be applied to a specific pin. If the pin is
an output, the timeplate defines when the pin should be observed within the tester cycle. All
times are relative to the starting of a tester cycle.
Refer to Adjusting Default Event Timing on page 141 for information on default event timing.
The following examples show the default timing and event order that Encounter Test will
assign to test modes. Refer to Default Timings for Clocks in Encounter Test: Guide 6: Test
Vectors for more information.
timeplate "scan_cycle" period 80 ns
"CME0" := input [ 0ns:P, 16.00ns:S ];
"DATA[0]" := input [ 0ns:P, 16.00ns:S ];
"SYS_CLK" := input [ 0ns:P, 24.00ns:S, 32.00ns:U ];
"A[31]" := output[ 0.0ns:Q’edge ];
"DATA[0]" := output[ 0.0ns:Q’edge ];
end
timeplate "test_cycle_FULLSCAN" period 80 ns
"CME0" := input [ 0.0ns:S ];
"DATA[0]" := input [ 0.0ns:S ];
"SYS_CLK" := input [ 0ns:P, 8.00ns:S, 16.00ns:U ];
"A[31]" := output[ 0.0ns:X, 72.00:Q’edge ];
"DATA[0]" := output[ 0.0ns:X, 72.00:Q’edge ];
end
■ The symbol := is followed by the pin direction, input or output. If the pin is a BIDI then
it will appear twice
■ The symbol (such as D, N, U) that follows the time specification occurs at that time.
The different symbols (also known as state characters) and their definitions are as follows:
■ D - Force logic low
■ U - Force logic high
■ N - Force logic unknown
■ Z - Force logic high impedance
■ S - Force logic substituted from pattern
■ C - Force complement of substituted shape
■ P - Force logic using previous format shape
■ L - Compare logic low
■ H - Compare logic high
The timeplates are used to modulate the signals by providing signal timings and shapes.
These are referenced by vector and scan constructs within the pattern block. Both the
scan_cycle and test_cycle timeplates define an 8ns wide pulse for the input clock pin
SYS_CLK. However, the scan_cycle strobes the A and DATA pins at time 0 within the tester
cycle while the test_cycle strobes these pins at time 72ns within the tester cycle.
equationsheet specifications
exprset default
scaling_percent := 100 ;
scaling_factor := scaling_percent / 100 ;
testpioffset := 0.000000ns * scaling_factor ;
testbidioffset := 0.000000ns * scaling_factor ;
teststrobeoffset := 72.000000ns * scaling_factor ;
testperiod := 80.000000ns * scaling_factor ;
equationsheet equations
exprset clocksoff
testpioffset_end := testpioffset + testpulsewidth ;
scanpioffset_end := scanpioffset + scanpulsewidth ;
testperiod_flush := testperiod * scan_length ;
teststrobeoffset_flush := teststrobeoffset * scan_length ;
test_A_end := test_A + testpulsewidth ;
test_B_end := test_B + testpulsewidth ;
test_C_end := test_C + testpulsewidth ;
end
end
equationdefaults
specifications:default, equations:clocksoff;
end
The timing definitions in the timeplate with sample equation-based timings will be as follows:
##***************************************************************************##
## TIMING DEFINITIONS ##
##***************************************************************************##
scanstate Construct
Encounter Test defines a scanstate construct for each scan event in the vectors. Each
scanstate pattern starts with a label, which is SS followed by the ATPG pattern number and
ends with a semi-colon. The label is referenced in the WGL scan vector statement. The
scanstate section also contains the scanchain followed by the set of logic values.
scanstate
"SS.2.1.1.2.1.1.1" :=
"MREG_1_FULLSCAN" (010010011)
"MREG_2_FULLSCAN" (0111000100000001);
"SS.2.1.1.2.1.4.1" :=
"MREG_1_FULLSCAN" (010010011)
"MREG_2_FULLSCAN" (0111000100000001);
"SS.2.1.1.2.2.1.1" :=
"MREG_1_FULLSCAN" (110100110)
"MREG_2_FULLSCAN" (0110001000000010);
...
"SS.2.1.1.5.10.5.1" :=
"MREG_1_FULLSCAN" (110001011)
"MREG_2_FULLSCAN" (1111110001001110);
end
Each SS scanstate entry will reference one or more of the scan chains that exist within the
design. Every scan chain that is referenced is defined within the WGL scanchain construct.
Some points to consider:
■ The logic values will be for both input stimulus and expected output values. The WGL
Vector will reference the scan chains within each SS scanstate entry through an input
or output keyword.
■ A logic value will be assigned for every FF in the scan chain that is referenced. There will
be neither any implied logic values to complete the scan chain reference nor any fill logic
values for the shorter scan chains to match the length of the longest scan chain.
■ The logic value is the value to be applied at the Scan input pin or measured at the scan
output pin. Translation software does not need to account for inversion internal to any
scan chain.
■ Any specific SS scanstate entry may reference a subset of the total number of scan
chains. Different modes of operation such as loading the MASK scanchain for
compression logic need to reference only the subset of scan chains that are actually
being exercised.
Test Vectors
Encounter Test creates a pattern block construct containing vector and scan constructs that
represent the actual test data events applied to the design.
The first entry is the pattern statement that defines the pins and the pin order that are
referenced within the vector and scan pattern statements.
write_vectors usesignalsgroup=NO (default = yes)
The statement specifies that Encounter Test should not list all the design pins individually in
the pattern statement but instead use the predefined WGL constructs ALLINPUT,
ALLOUTPUT, and ALLBIDIR. The implied pin order is the order in which these pins appear
in the signals definition.
The pattern statement is followed by vector and scan statements, which are the actual test
patterns. Each statement first refers to a timing timeplate. The first set of logic values are for
the design pins. The order is defined in the pattern statement. Encounter Test places the logic
values for inputs, bidirectionals as inputs, outputs, and bidirectionals as outputs on separate
lines.
The scan statement includes the input and output values for the scan chains using a
scanstate reference.
The Test Vectors section ends with comment data within the patterns. The most important
information in the comment data is the EVENT. It is recommended that users reference the
EVENT pattern number for diagnostic purposes to identify the failing pattern.
ATE vendors and other companies that process WGL format are required to capture the
pattern number on the EVENT and report it as part of the CHIP-PAD-PATTERN format
imported into Encounter Test for failure analysis.
Note: The EVENT data is not part of the legal WGL syntax and is not required for the normal
processing of the WGL test patterns.
000XXXXX111X0XX01
ZZ
XXXXXX
--];
## Inserted the Scan Sequence: Scan_Sequence
scan ( +, "scan_cycle" ) := [
110XXXXX111X0--01
ZZ
XXXXXX
--],
input [ "MREG_1_FULLSCAN" : "SS.2.1.1.2.1.1.1" ] ,
input [ "MREG_2_FULLSCAN" : "SS.2.1.1.2.1.1.1" ] ;
## Processing the Static: EVENT 2.1.1.2.1.2.1: Stim_PI:
## Processing the Static: EVENT 2.1.1.2.1.3.1: Stim_PI:
## Processing the Static: EVENT 2.1.1.2.1.4.1: Measure_PO:
vector ( +, "test_cycle" ) := [
00010111000011110
11
000000
--];
##******************************************************##
## TEST SEQUENCE.............2 TYPE..........normal ##
##******************************************************##
## Processing the Static: EVENT 2.1.1.2.2.1.1: Scan_Load:
## Inserted the Scan Sequence: Scan_Preconditioning_Sequence
vector ( +, "test_cycle" ) := [
00010111111001101
ZZ
XXXXXX
--];
vector ( +, "test_cycle" ) := [
00010111111001101
ZZ
XXXXXX
--];
## Inserted the Scan Sequence: Scan_Sequence
scan ( +, "scan_cycle" ) := [
1101011111100--01
ZZ
XXXXXX
--],
input [ "MREG_1_FULLSCAN" : "SS.2.1.1.2.2.1.1" ] ,
input [ "MREG_2_FULLSCAN" : "SS.2.1.1.2.2.1.1" ] ;
## Processing the Static: EVENT 2.1.1.2.2.2.1: Stim_PI:
## Processing the Static: EVENT 2.1.1.2.2.3.1: Stim_PI:
## Processing the Static: EVENT 2.1.1.2.2.4.1: Measure_PO:
vector ( +, "test_cycle" ) := [
00001100100011010
--
011100
00];
##*****************************************************##
## TEST SEQUENCE.............14 TYPE........normal ##
##*****************************************************##
## Processing the Static: EVENT 2.1.1.8.14.1.1: Scan_Load: ( Overlap is in Effect)
## Inserted the Scan Sequence: Scan_Preconditioning_Sequence
vector ( +, "test_cycle" ) := [
00001001111101101
ZZ
XXXXXX
--];
vector ( +, "test_cycle" ) := [
00001001111101101
ZZ
XXXXXX
--];
## Inserted the Scan Sequence: Skewed_Unload_Sequence
vector ( +, "test_cycle" ) := [
01001001111101101
ZZ
XXXXXX
--];
## Inserted the Scan Sequence: Scan_Sequence
scan ( +, "scan_cycle" ) := [
1100100111110--01
--
XXXXXX
--],
input [ "MREG_1_FULLSCAN" : "SS.2.1.1.8.14.1.1" ] ,
input [ "MREG_2_FULLSCAN" : "SS.2.1.1.8.14.1.1" ] ,
output [ "MREG_1_FULLSCAN" : "SS.2.1.1.8.13.4.1" ] ,
output [ "MREG_2_FULLSCAN" : "SS.2.1.1.8.13.4.1" ] ;
## Processing the Static: EVENT 2.1.1.8.14.2.1: Stim_PI:
## Processing the Static: EVENT 2.1.1.8.14.2.2: Measure_PO:
vector ( +, "test_cycle" ) := [
00001100000011010
--
000000
00];
## Processing the Static: EVENT 2.1.1.8.14.3.1: Pulse:
vector ( +, "test_cycle" ) := [
00101100000011010
ZZ
XXXXXX
--];
...
## Inserted final non-scan Pattern
vector ( +, "test_cycle" ) := [
0000110011100XX01
ZZ
XXXXXX
--];
end end
Scan statements relate scan values to scan-in and scan-out signals through an indirect
process. Each statement relates one or more scan chains defined by the scanchain construct
to cell values defined by the scanstate construct. The scanstate values for a chain are in the
same order as the cells in the scanchain construct. The scanchain construct also identifies
the scan-in and scan-out signals and any cell to cell inversion. Thus, WGL processors can
map the scan chain cell values to their respective bits in the scanstate and can then map the
bits to the respective scan-in and scan-out signals. Yon must take the scan chain inversions
into account during this process.
Overlapped/Non-Overlapped Scans
The default is to overlap scan-outs with scan-ins. This overlap reduces the number of cycles
required for scanning of test data into and out of the scan chains. However, overlap is not
always possible. For instance, overlap cannot be done between tester loops since tester
loops are intended to be independent. In addition, overlap cannot be done where there are
intervening events which must take place between the scan-out and the subsequent scan-in.
Therefore, for those cases where overlap is not possible a non-overlapped scan sequence is
produced even though the user has requested scan overlap.
Optionally, the user may request a non-overlap scan style, whether or not overlap is possible.
By not overlapping scans the number of tester cycles required for scan effectively doubles.
This is not recommended because it increases the time to test the product and thus increases
the cost of test. Use the following command to produce a non-overlapped scan:
write_vectors scanoverlap=NO
Support for Macro tests is very similar to Logic tests with the following exceptions:
■ Macro tests typically contain loops to perform a repetitive application of clocks or to
increment macro counters or address values, etc. Therefore, the pattern loop and end
loop vectors events must be represented in the WGL.
■ Macro tests may also contain pulses on non-clock PIs due to selecting a non-clock PI
correspondence point for a macro clock.
The above macro test considerations are reflected in the test vector section by using the WGL
loop and end statements to represent loop events and by changing pulse events on non-
clock PIs into a sequence of two vectors - the first to turn the non-clock PI to its on state and
the second one to return it to its off state. If the non-clock PI is not originally off prior to the
pulse, a third vector is added to establish this state.
...
## processed EVENT: 1.1.1.3.1.1.1
## processed EVENT: 1.1.1.3.1.1.2
vector ( +, "task_cycle_lssd" ) := [
00110001X0000XXX0
ZZ
XXXXXX
00];
vector ( +, "task_cycle_lssd" ) := [
00110001X0000XXX1
ZZ
XXXXXX
00];
...
The above example shows how a negative-active pulse on a non-clock PI is treated in the
WGL using two consecutive vectors, the first is a stim to 0 and the second is a stim to 1.
Note: Encounter Test supplies logic values to design pins in the following order:
❑ Inputs
❑ Bidrectional as inputs
❑ Outputs
❑ Bidirectionals as outputs
Support for LBIST tests involves consideration of the following LBIST test concepts:
■ Scanning in the LBIST mode is somewhat different than normal scanning. The vectors
will contain channel_scan events in lieu of the deterministic scan events. These
channel_scan events also use attributes, as opposed to unique scan event types, to
differentiate between normal and skewed scans. Therefore, unique LBIST "channel
scan" sequences must be supported.
■ The core of the LBIST test sequence involves cycling product LBIST clocks. These
clocks cycle the on-product PRPGs and MISRs and move test values along the LBIST
channels. Therefore, looping on the LBIST test sequence is required.
■ LBIST test results are represented by "signatures." These are the values that remain in
the PRPGs and MISRs after the LBIST test sequence has completed. Signatures are
represented as hexadecimal values by signature events. These must be converted to
parent mode values and compared to the product values by a scan-out after the final
sequence cycle has completed. Note, only the final signatures for each LBIST test
sequence will be compared (see below).
These considerations are reflected in the test vector section by using WGL loop and end
statements and by adding the necessary sequences to return to the parent mode and perform
a scan-out.
The following sample code explains the use of LBIST test types:
##*****************************************************##
## TEST SEQUENCE...........2 TYPE...............loop ##
##*****************************************************##
loop 256
## processed EVENT: 1.2.1.2.2.1.1
## processed EVENT: 1.2.1.2.2.2.1
## inserted SCAN SEQUENCE: Scan_Preconditioning_Sequence
## inserted Stability
vector ( +, "task_cycle_lbist" ) := [
00110000011000010
ZZ
XXXXXX
--];
## inserted SCAN SEQUENCE: Skewed_Unload_Sequence (Skewed Unload)
vector ( +, "task_cycle_lbist" ) := [
01010000011000010
ZZ
XXXXXX
--];
loop 4
vector ( +, "task_cycle_lbist" ) := [
11010000011000010
ZZ
XXXXXX
--];
end
end
vector ( +, "task_cycle_lssd" ) := [
00010000011000010
ZZ
XXXXXX
--];
## processed EVENT: 1.2.1.2.2.3.2
## inserted SCAN SEQUENCE: Scan_Preconditioning_Sequence
## inserted SCAN SEQUENCE: Scan_Sequence (Scan)
vector ( +, "task_cycle_lssd" ) := [
00010000111000001
ZZ
XXXXXX
--];
scan ( +, "scan_cycle" ) := [
11010000111000001
--
XXXXXX
--],
In the example above, the inner loop represents a channel_scan event that cycles the
product clocks to increment the on-product PRPGs and MISRs and to move test values along
the LBIST channels. The outer loop performs N cycles of the LBIST test sequence. After
applying the N LBIST tester cycles, the following vector statements show how the parent scan
state is entered and the scan statement with the output scanchain values show how a scan-
out is performed to unload the MISR values.
The above considerations are reflected in the WGL by defining a unique timeplate for each
timing data object and then referencing the appropriate timeplate for each dynamic pattern
found within the test data. The following is an example of a dynamic timeplate.
Note: The actual structure and syntax of the at-speed timing templates is similar to the
templates for static test. The only difference is the timing accuracy and different event orders
such as two clock pulses in the same tester cycle.
timeplate "TBautoLogicSeq8_7_0" period 12500.0000ps
"A" := input[ 0ns:D, 1250.0000ps:S, 1750.0000ps:D ];
"B" := input[ 0ns:D, 2000.0000ps:S, 2500.0000ps:D ];
"C" := input[ 0ns:D, 250.0000ps:S, 750.000ps:D ];
"CS" := input[ 0ns:P ];
...
The timeplate has a unique name that is constructed from its sequence name and the timing
ID appended with a cycle number. Each timeplate includes signal waveform descriptions,
which contain the calculated times from the timing data objects. When a test sequence
...
vector ( +, "TBautoLogicSeq8_7_0" ) := [
-1---------------
--
XXXXXX
--];
...
If there are multiple cycles, multiple vector statements are produced, each referencing the
respective timeplate. User-specified timings are used for untimed static patterns.
Encounter Test creates one or more STIL “vector” files and optionally, a STIL “signals” file for
each testmode. Vector files contain STIL which represents the actual test data and any STIL
constructs particular to that test data. The optional signals file contains STIL constructs that
are “common” to multiple vector files. If the signals file is not created, then these constructs
are contained in each vector file.
The test data is divided into multiple vector files in order to reduce the overall processing time
of a single, large STIL file. You can choose one of these methods for creating the files using
either the graphical interface or command line:
■ Create a STIL file from committed tests for each testsection found within each
experiment in the source vectors file. Optionally, a STIL file for each tester loop within
each test section within each experiment can be created. The file name is of the form:
STIL.testmode.testsectiontype.ex#.ts#[.tl#]
■ Create a STIL file from experimental tests for each testsection found within each
experiment in the source vectors file. Optionally, a STIL file for each tester loop within
each test section within each experiment can be created. The file name is of the form:
STIL.testmode.experiment.testsectiontype.ex#.ts#[.tl#]
Commentary is included in each vector file which correlates its contents to the source vectors
with regard to experiment, test section, tester loops, test procedures, test sequences, and
patterns.
A complete set of example STIL files is shown in Appendix D, “STIL Pattern Data Examples”.
Conceptually, each vector file can be divided into five sections: a header section, a signals
definition section, a macro definition section, a timing section, and the actual test vectors. The
following discusses each section in more detail.
Header
A header section begins each STIL file, an example of which is shown below.
STIL 1.0
//***************************************************************************//
// STIL VECTOR FILE //
// Encounter(TM) Test Encounter Test 2.0.0 Sep 30, 2003 (aix43_64 TDA20) //
//***************************************************************************//
// //
// FILE CREATED..............July 31, 2001 at 12:58:06 //
// //
// PROJECT NAME..............lbc //
// //
// TESTMODE..................lssd //
// //
// TDR.......................dummy_tester_lssd //
// //
// TEST PERIOD...............80 TEST STROBE TYPE..........window //
// TEST PULSE WIDTH..........8 TEST TIME UNITS...........ns //
// TEST PI OFFSET............0 //
// TEST BIDI OFFSET..........0 //
// TEST STROBE OFFSET........72 X VALUE...................Z //
// //
// SCAN PERIOD...............80 SCAN STROBE TYPE..........window //
// SCAN PULSE WIDTH..........8 SCAN TIME UNITS...........ns //
// SCAN PI OFFSET............16 //
// SCAN BIDI OFFSET..........16 //
// SCAN STROBE OFFSET........0 SCAN OVERLAP..............yes //
// //
// EXPERIMENT................2 DATA FORMAT...............binary //
// //
// TEST SECTION..............1 TEST SECTION TYPE.........logic //
// TESTER TERMINATION........0 TERMINATION DOMINATION....tester //
// //
//***************************************************************************//
Include "STIL.lssd.signals";
The include statement imbeds the common signals file which contains the Signals,
SignalGroups, and MacroDefs constructs common to all vector files. If the include
statement is not present, then these constructs are placed in-line in each vector file.
Structure
This data is normally contained within the common “signals” file since it is applicable to all
vector files. However, when the “signals” file is not generated, this data is contained within
each vector file. See the examples below.
Encounter Test uses the Signals construct to define a STIL signals for each PI and PO of
the design.
//***************************************************************************//
// DEFINE SIGNALS //
//***************************************************************************//
Signals {
"A" In;
"B" In;
"C" In;
"CS" In;
...
"DO3" Out;
"DO4" Out;
"SO1" Out;
"SO1_BIDI" InOut;
"SO2" Out;
"SO2_BIDI" InOut;
} /* end Signals */
Encounter Test uses the SignalGroups construct to group I/O signals into meaningful
collections which are then referenced, as needed, in the MacroDefs and Pattern blocks.
Groups are defined for all PIs, POs, BIDIs, all clocks, all scan-inputs and scan-outputs, and
all scan chains.
//***************************************************************************//
// DEFINE SIGNAL GROUPS //
//***************************************************************************//
SignalGroups {
ALLPIs = ’"A"+"B"+"C"+"CS"+"DI1"+"DI2"+"DI3"+"DI4"+"ENABLE1"+"ENABLE2"
+"ME"+"PS"+"SEL"+"SI1"+"SI2"+"ST1"+"ST2"’;
ALLPOs = ’"DO1"+"DO2"+"DO3"+"DO4"+"SO1"+"SO2"’;
ALLIOs = ’"SO1_BIDI"+"SO2_BIDI"’;
ALLACs_lssd = ’"A"’;
ALLBCs_lssd = ’"B"’;
ALLSIs_lssd = ’"SI1"+"SI2"’;
ALLSOs_lssd = ’"SO1_BIDI"+"SO2_BIDI"’;
The ScanStructures construct is used to list the scan chain definitions in a STIL signals
file. Use the Write Vectors option to Include scan chain definitions
(includescanregs=yes for the command line) to produce scan chain information.
//***************************************************************************//
// DEFINE SCAN CHAINS //
//***************************************************************************//
ScanStructures {
ScanChain "Control_Observe_Reg_1_nobs" {
ScanLength 24;
ScanIn "BSI";
ScanCells
" rcvr1.slave"
" rcvr5.slave"
" rcvr6.slave"
" rcvr7.slave"
.
.
.
" drvrcv4.slave3"
" drv1.slave"
" drv2.slave" ;
ScanOut "BSO"; }
ScanChain "Control_Observe_Reg_2_nobs" {
ScanLength 9;
ScanIn "SI1";
ScanCells
" fvsrl.slave"
" prpg.srl1.slave"
" prpg.srl2.slave"
" prpg.srl3.slave"
" prpg.srl4.slave"
" misr.srl1.slave"
" misr.srl2.slave"
" misr.srl3.slave"
" misr.srl4.slave" ;
ScanOut "SO1"; }
ScanChain "Control_Observe_Reg_3_nobs" {
ScanLength 16;
ScanIn "SI2";
ScanCells
" channel1.srl1.slave"
" channel1.srl2.slave"
" channel1.srl3.slave"
" channel1.srl4.slave"
.
.
.
" channel3.srl4.slave"
" channel4.srl1.slave"
" channel4.srl2.slave"
" channel4.srl3.slave"
" channel4.srl4.slave" ;
ScanOut "SO2"; }
}
The MacroDefs construct is used to defined several macros which are used to apply the
actual parallel or scan cycle data. The TEST macro is used within the Pattern block
whenever a parallel cycle is required. The Vector construct references the signal groups:
ALLPIs, ALLPOs, and if applicable, ALLIOs.
Likewise, the SCAN_lssd macro is used within the Pattern block whenever a scan cycle
is required. The Shift and Vector constructs reference the signal groups:
ALLSOs_lssd, ALLSIs_lssd, and any applicable clock groups, e.g., ALLACs_lssd
and ALLBCs_lssd.
//***************************************************************************//
// DEFINE MACROS //
//***************************************************************************//
MacroDefs {
TEST { WaveformTable test_cycle;
Vector {
ALLPIs = %;
ALLPOs = %;
ALLIOs = %;
} /* end Vector */
} /* end TEST */
} /* end MacroDefs */
Timing
Encounter Test defines one or more STIL WaveformTables, depending on the requirements
of the test data. Examples are shown below.
Timing {
WaveformTable test_cycle { Period ’80ns’;
Waveforms {
"A" { 01ZP { ’0ns’ P/P/P/D; ’8ns’ D/U/Z/U; ’16ns’ D/U/Z/D; } }
"B" { 01ZP { ’0ns’ P/P/P/D; ’24ns’ D/U/Z/U; ’32ns’ D/U/Z/D; } }
"C" { 01ZP { ’0ns’ P/P/P/D; ’8ns’ D/U/Z/U; ’16ns’ D/U/Z/D; } }
"CS" { 01Z { ’0ns’ D/U/Z; } }
...
...
The WaveformTables are used to “modulate” the signals, i.e., provide signal timings and
shapes. They are referenced by the TEST and SCAN_lssd macros within the MacroDefs
block. The test_cycle WaveformTable is used for all test (parallel) cycles. The
scan_cycle_lssd WaveformTable is used for all scan cycles.
Refer to "Default Timings for Clocks" in the Encounter Test: Guide 6: Test Vectors for
related information.
Spec equation_based_spec {
Category EQUATION_BASED {
"scaling_percent" = ’100’ ;
"scaling_factor" = ’"scaling_percent"/100’ ;
"testpioffset" = ’0.000000ns*"scaling_factor"’ ;
"testbidioffset" = ’0.000000ns*"scaling_factor"’ ;
"teststrobeoffset" = ’72.000000ns*"scaling_factor"’ ;
"testperiod" = ’80.000000ns*"scaling_factor"’ ;
"testpulsewidth" = ’8.000000ns*"scaling_factor"’ ;
"test_A" = ’8.000000ns*"scaling_factor"’ ;
"test_B" = ’24.000000ns*"scaling_factor"’ ;
"test_C" = ’8.000000ns*"scaling_factor"’ ;
"scanstrobeoffset" = ’0.000000ns*"scaling_factor"’ ;
"scanpioffset" = ’16.000000ns*"scaling_factor"’ ;
"scanbidioffset" = ’16.000000ns*"scaling_factor"’ ;
"scanperiod" = ’80.000000ns*"scaling_factor"’ ;
"scanpulsewidth" = ’8.000000ns*"scaling_factor"’ ;
"scan_A" = ’24.000000ns*"scaling_factor"’ ;
"scan_B" = ’40.000000ns*"scaling_factor"’ ;
"testpioffset_end" = ’"testpioffset"+"testpulsewidth"’ ;
"scanpioffset_end" = ’"scanpioffset"+"scanpulsewidth"’ ;
"test_A_end" = ’"test_A"+"testpulsewidth"’ ;
"scan_A_end" = ’"scan_A"+"scanpulsewidth"’ ;
"test_B_end" = ’"test_B"+"testpulsewidth"’ ;
"scan_B_end" = ’"scan_B"+"scanpulsewidth"’ ;
"test_C_end" = ’"test_C"+"testpulsewidth"’ ;
} }
The timing definitions in the timeplate with sample equation-based timings will be as follows:
//***************************************************************************//
// TIMING DEFINITIONS //
//***************************************************************************//
Timing {
WaveformTable "test_cycle" { Period ’"testperiod"’;
Waveforms {
"A" { 01ZP { ’0ns’ P/P/P/P; ’"test_A"’ D/U/Z/U; ’"test_A_end"’ D/U/Z/D; } }
"B" { 01ZP { ’0ns’ P/P/P/P; ’"test_B"’ D/U/Z/U; ’"test_B_end"’ D/U/Z/D; } }
"C" { 01ZP { ’0ns’ P/P/P/P; ’"test_C"’ D/U/Z/U; ’"test_C_end"’ D/U/Z/D; } }
"CS" { 01Z { ’"testpioffset"’ D/U/Z; } }
"DI1" { 01Z { ’"testpioffset"’ D/U/Z; } }
.
.
.
"DO4" { LHTX { ’0ns’ X/X/X/X; ’"teststrobeoffset"’ L/H/T/X; } }
"SO1" { LHTX { ’0ns’ X/X/X/X; ’"teststrobeoffset"’ L/H/T/X; } }
"SO1_BIDI" { LHTX { ’0ns’ X/X/X/X; ’"teststrobeoffset"’ L/H/T/X; } }
"SO2" { LHTX { ’0ns’ X/X/X/X; ’"teststrobeoffset"’ L/H/T/X; } }
"SO2_BIDI" { LHTX { ’0ns’ X/X/X/X; ’"teststrobeoffset"’ L/H/T/X; } }
} }
Test Vectors
Encounter Test creates a Pattern block construct containing Macro constructs which invoke
either the TEST or SCAN_lssd macros which, in turn, apply the test vector values to the
product I/Os. See the example below.
//***************************************************************************//
// TEST VECTORS //
//***************************************************************************//
PatternBurst
MAIN_BRST { PatList { MAIN_TEST; }
Termination { ALLPOs TerminateHigh; ALLBOs TerminateHigh; } }
PatternExec
MAIN_EXEC { PatternBurst MAIN_BRST; }
Pattern
MAIN_TEST {
//***************************************************************************//
// TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no //
// TEST PROCEDURE............1 TYPE......................init //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// TEST SEQUENCE.............1 TYPE......................init //
/****************************************************************************//
//***************************************************************************//
// TEST PROCEDURE............2 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// STATIC FAULTS.............17 PERCENT STATIC FAULTS.....58.75000 //
// TEST SEQUENCE.............1 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST SEQUENCE.............2 TYPE......................normal //
//***************************************************************************//
...
//***************************************************************************//
// TEST SEQUENCE.............10 TYPE......................normal //
//***************************************************************************//
Macro TEST {
ALLPIs = 00010000100111110;
ALLPOs = LLHLLL;
ALLIOs = LL; }
// inserted SCAN SEQUENCE: Skewed_Unload_Sequence (Skewed Unload)
// inserted SCAN SEQUENCE: Scan_Sequence (Scan)
Macro TEST {
ALLPIs = 0P001011111000001;
ALLPOs = XXXXXX;
ALLIOs = XX; }
Macro SCAN_lssd {
SO0001_lssd = HHLLLLLLL;
SO0002_lssd = HHHHLLHLHHLLHHLH;
} /* end MAIN_TEST */
In the above example, the PatternExec construct does a backward reference, by name,
to the PatternBurst which in turn does a forward (one of the few allowed in STIL) to the
Pattern construct, by name. The PatternBurst also defines the termination
characteristics of the ALLPOs and ALLIOs signal groups. The termination characteristics are
determined by the termination specified in the vectors Test Section.
Within the Pattern construct, TEST macro invocations are used to apply and measure
values to PIs and POs while SCAN_lssd macro invocations are used to apply and measure
scan values. Values are passed to the macros via the assignments made within the
invocation.
Encounter Test performs data compression on PI and PO events where possible in order to
minimize the number of STIL vectors generated from the source vectors. PI and PO events
are collected into a single STIL vector regardless of pattern boundaries, unless the user
option to respect pattern boundaries is used, as long as their event order is consistent with
the defined STIL WaveformTable order. Once an event is encountered which violates this
order, e.g., a PI stim after a PO measure, the STIL vector is written and compression begins
for the next vector. Thus, it is possible that several vectors are compressed into a single STIL
vector. Scan events are not compressed.
Overlapped/Non-Overlapped Scans
The default is to overlap scan-outs with scan-ins. This overlap reduces the number of cycles
required for scanning of test data into and out of the scan chains. However, overlap is not
always possible. For instance, overlap cannot be done between tester loops since tester
loops are intended to be independent. In addition, overlap cannot be done where there are
intervening events which must take place between the scan-out and the subsequent scan-in.
Therefore, for those cases where overlap is not possible a non-overlapped scan sequence is
produced even though the user has requested scan overlap.
Optionally, the user may request a non-overlap scan style, whether or not overlap is possible.
By not overlapping scans the number of tester cycles required for scan effectively doubles.
This is not usually desired as it increases the time to test the product and thus increases the
cost of test. However, non-overlap may be required in some cases.
The STIL example below shows a subset of the test vector section which implements a non-
overlapped scan.
...
//***************************************************************************//
// TEST SEQUENCE.............3 TYPE......................normal //
//***************************************************************************//
...
Support for Macro tests is very similar to Logic tests with the following exceptions:
■ Macro tests typically contain loops to perform a repetitive application of clocks or to
increment macro counters or address values. Therefore, the pattern loop and end loop
events must be represented in the STIL.
■ Macro tests may also contain pulses on non-clock PIs due to selecting a non-clock PI
correspondence point for a macro clock.
The above macro test considerations are reflected in the test vector section by using the STIL
Loop construct to represent loop events and by changing pulse events on non-clock PIs into
a sequence of two vectors: the first to turn the non-clock PI to its “on” state, the second to
return it to its “off” state. If the non-clock PI is not originally off prior to the pulse, a third vector
is added to establish this state.
...
...
The above example shows how a negative-active pulse on a non-clock PI is treated in the
STIL using two consecutive vectors, the first a stim to 0 and the second a stim to 1.
Support for LBIST tests involves consideration of the following LBIST test concepts:
■ Scanning in the LBIST mode is somewhat different than normal scanning. The vectors
will contain channel_scan events in lieu of the deterministic scan events. These
channel_scan events also use attributes, as opposed to unique scan event types, to
differentiate between normal and skewed scans. Therefore, unique LBIST “channel
scan” sequences must be supported.
■ The core of the LBIST test sequence involves cycling product LBIST clocks. These
clocks cycle the on-product PRPGs and MISRs and move test values along the LBIST
channels. Therefore, looping on the LBIST test sequence is required.
■ LBIST test results are represented by “signatures.” These are the values that remain in
the PRPGs and MISRs after the LBIST test sequence has completed. Signatures are
represented as hexadecimal values by signature events. These must be converted to
parent mode values and compared to the product values by a scan-out after the final
sequence cycle has completed. Note, only the final signatures for each LBIST test
sequence will be compared (see below).
These considerations are reflected in the test vector section by using STIL the Loop
construct and by adding the necessary sequences to return to the parent mode and perform
a scan-out.
//***************************************************************************//
// TEST SEQUENCE.............2 TYPE......................loop //
//***************************************************************************//
In the example above, the inner Loop represents a channel_scan event which cycles the
product clocks to increment the on-product PRPGs and MISRs and to move test values along
the LBIST channels whereas the outer Loop performs “N” cycles of the LBIST test sequence.
This example also shows how the parent scan state is entered and a scan-out is performed
to unload the MISR values.
The above considerations are reflected in the STIL by defining a unique WaveformTable for
each timing data object and then referencing the appropriate WaveformTable for each
dynamic pattern found within the test data. The following is an example of a dynamic
WaveformTable.
WaveformTable TBautoLogicSeq8_7_0_cycle { Period ’12500.0000ps’;
Waveforms {
"A" { 01ZP { ’0ns’ P/P/P/D; ’1250.0000ps’ D/U/Z/U; ’1750.0000ps’ D/U/Z/D; } }
"B" { 01ZP { ’0ns’ P/P/P/D; ’2000.0000ps’ D/U/Z/U; ’2500.0000ps’ D/U/Z/D; } }
"C" { 01ZP { ’0ns’ P/P/P/D; ’250.0000ps’ D/U/Z/U; ’750.0000ps’ D/U/Z/D; } }
"CS" { 01Z { ’0ns’ P; } }
...
...
The WaveformTable is given a unique name which is constructed from its sequence name
and timing ID appended with a cycle number. Within each WaveformTable are the signal
waveform descriptions which contain the calculated times from the timing data objects. When
a test sequence containing a dynamic pattern is encountered in the vectors, the converter
produces a macro invocation which references the appropriate WaveformTable as shown
below.
...
Macro TBautoLogicSeq8_7_0 {
ALLPIs = 0P010000011000010;
ALLPOs = XXXXXX;
ALLIOs = XX; }
...
Multiple vector statements are produced if there are multiple cycles required, each
referencing the appropriate WaveformTable. For untimed “static” patterns, the user
specified timings are used as usual.
Encounter Test creates a common “task definition” file and one or more Verilog “vector” files
for each exported set of tests. The task definition file contains the Verilog task definitions
which describe the application of parallel and scan vectors. This file is “included” in each
vector file and eliminates the redundant definition of these tasks. The vector files contain
Verilog language statements that represent the test vectors in a format and which can be
used as input to a Verilog simulator or to applications which convert Verilog to tester
programs.
The test data is divided into multiple vector files in order to reduce the overall processing time
of a single, large Verilog file. You can choose one of the following methods for creating the
files using either the graphical interface or command line:
■ Create Verilog from committed tests for each testsection found within each experiment
in the source vectors file. Optionally, you can create Verilog for each tester loop within
each test section within each experiment. The file name is of the form:
VER.testmode.testsectiontype.ex#.ts#[.tl#]
■ Create Verilog from uncommitted tests for each testsection found within each experiment
in the source vectors file. Optionally, you can create Verilog for each tester loop within
each test section within each experiment. The file name is of the form:
VER.testmode.experiment.testsectiontype.ex#.ts#[.tl#]
Commentary is included in each file which correlates its contents to the source vectors with
regard to experiment, test section, tester loops, test procedures, test sequences and
patterns.
A complete set of example Verilog files is shown in “Verilog Pattern Data Examples” on
page 287.
Header
A header section begins each Verilog file, an example of which is shown below.
/***************************************************************************//
// VERILOG TASKDEF FILE //
// Encounter(R) Test and Diagnostics 3.0. Oct 07, 2005 (linux24 ET30) //
//***************************************************************************//
// //
// FILE CREATED..............October 07, 2005 at 16:13:04 //
// //
// PROJECT NAME..............lbc //
// //
// TESTMODE..................lssd //
// //
// TDR.......................dummy_tester_lssd //
// //
// TEST PERIOD...............80 TEST TIME UNITS...........ns //
// TEST PULSE WIDTH..........8 //
// TEST STROBE OFFSET........72 TEST STROBE TYPE..........edge //
// TEST BIDI OFFSET..........0 //
// TEST PI OFFSET............0 X VALUE...................X //
// //
// TEST PI OFFSET for pin "A" (PI # 1) is ......................8 //
// TEST PI OFFSET for pin "B" (PI # 2) is ......................24 //
// TEST PI OFFSET for pin "C" (PI # 3) is ......................8 //
// //
// SCAN FORMAT...............serial SCAN OVERLAP..............yes //
// SCAN PERIOD...............80 SCAN TIME UNITS...........ns //
// SCAN PULSE WIDTH..........8 //
// SCAN STROBE OFFSET........0 SCAN STROBE TYPE..........edge //
// SCAN BIDI OFFSET..........16 //
// SCAN PI OFFSET............16 X VALUE...................X //
// //
// SCAN PI OFFSET for pin "A" (PI # 1) is ......................24 //
// SCAN PI OFFSET for pin "B" (PI # 2) is ......................40 //
// //
//***************************************************************************//
This section also supplies the Verilog “timescale” and “module” constructs. The
timescale construct defines the units of time to be applied to timing statements used in the
task definitions. The module construct is required at the beginning of each Verilog file. It is
terminated by an “endmodule” construct at the end of the file. The module name is a
catenation of the entity name, testmode name, experiment number, test section number, and,
if applicable, tester loop number.
Structure Connection
This section defines the various Verilog variables used to manipulate or sample the primary
I/O ports during simulation. An example is shown below.
//***************************************************************************//
// DEFINE VARIABLES FOR ALL PRIMARY I/O PORTS //
//***************************************************************************//
reg [1:19] stim_PIs;
The buss_PIs variable contains a bit position for each PI and bidirectional PI net. Pure PIs
are mapped to positions in buss_PIs by the structure instantiation such that when a
buss_PIs bit changes value it is propagated to the corresponding PI of the structure. BIDI
PIs are mapped to their corresponding POs by use of an assign statement (see below).
Similarly, the buss_POs variable contains a bit position for each PO net. POs, including BIDI
POs, are mapped to buss_POs positions by the structure instantiation such that when
simulation changes a PO value it is reflected in the corresponding bit position in buss_POs.
The stim_PIs variable contains a bit position for each PI and bidirectional PI net and is used
to hold the values assigned to these nets by the test vectors. When the parallel cycle task is
invoked it transfers the values from stim_PIs to buss_PIs which in turn propagates the
values to the structure PIs and bidirectional POs for simulation. The stim_CIs variable is
used to manipulate clock pulses on clock PIs in a similar manner.
The resp_POs variable contains a bit position for each PO net, including bidirectional POs.
The resp_POs variable is used to hold the response values expected by the test vectors for
these nets. When the parallel cycle task is invoked it compares the values in buss_POs, as
calculated by the simulation, to those in resp_POs. When a miscompare is detected, a flag
is set in comp_POs for the corresponding PO net.
This section also defines similar variables for input stim, output compare, and shift masks for
all scan chains.
//***************************************************************************//
// DEFINE VARIABLES FOR ALL SHIFT CHAINS //
//***************************************************************************//
The stim_SLs and resp_MLs variables hold the values to be applied to and measured at
all flops or latches. The stim_SSs variable holds values to be applied to all skewed stim latch
values, if any.
The test vector section assigns stim and expect values from the vector scan events to the
stim_SLs and resp_MLs variables and then invokes the necessary scan task(s) which
perform the actual scan operation. Since scan chains will vary in length, shorter chains are
required to be “padded” with X's so that chains can be scanned in parallel. This padding is
accomplished by use of selectively assigning bit values to the stim_SLs and resp_MLs
variables in the test vector section. Since unassigned bits in these variables are never
changed, shorter chains are effectively padded with X values.
lbistchip
lbistchip_inst (
.A (buss_PIs[01]),
.B (buss_PIs[02]),
.C (buss_PIs[03]),
.CS (buss_PIs[04]),
.DI1 (buss_PIs[05]),
.DI2 (buss_PIs[06]),
.DI3 (buss_PIs[07]),
.DI4 (buss_PIs[08]),
.ENABLE1 (buss_PIs[09]),
.ENABLE2 (buss_PIs[10]),
.ME (buss_PIs[11]),
.PS (buss_PIs[12]),
.SEL (buss_PIs[13]),
.SI1 (buss_PIs[14]),
.SI2 (buss_PIs[15]),
.ST1 (buss_PIs[18]),
.ST2 (buss_PIs[19]),
.DO1 (buss_POs[01]),
.DO2 (buss_POs[02]),
.DO3 (buss_POs[03]),
.DO4 (buss_POs[04]),
.SO1 (buss_POs[05]),
.SO1_BIDI (buss_POs[06]),
.SO2 (buss_POs[07]),
.SO2_BIDI (buss_POs[08]));
Connection is done by name so the order of the ports in the instantiation is not dependent on
the order of ports in the structural definition. Pure input ports are connected to the buss_PIs
variable. Output and bidirectional ports are connect to the buss_POs variable. The top cell
name is used as the name of the module. The top cell name appended with _inst is used
as the name of the module instance.
Finally, it may become necessary to make several other connections to the structure. This is
done for bidirectional PIs, which are considered to be POs by Verilog, and, in the case of a
parallel scan format, to internal latches. An example of bidirectional pin connections is shown
below.
//***************************************************************************//
// MAKE SOME OTHER CONNECTIONS //
//***************************************************************************//
assign
buss_POs[06] = buss_PIs[16],
buss_POs[08] = buss_PIs[17];
These assignments place the values put into the buss_PIs variable bidi net positions by the
various tasks onto bidirectional PO nets which have been connected to the buss_POs
variables by the instantiation of the structure, as shown above.
Tasks
Encounter Test defines various tasks depending on the type of test patterns created. For
example, Encounter Test can create tasks to apply the static FULLSCAN patterns or to apply
patterns via the XOR or OPMISR compression logic. This section covers some of these tasks
that will help you understand any Verilog pattern set created by Encounter Test.
Note: Refer to the Verilog mainsim file created by Encounter Test to know more about all the
tasks.
sim_setup
This is the first task invoked by Encounter Test and it initializes the global_term variable to
Z. Next, it assigns all the design port names to the name_PO variable, which is used for both
debug messages and as part of any miscompare messages.
Lastly, it searches for the following NCSim "+" arguments that may have been applied:
■ +DEBUG - This turns on the runtime debug messages.
■ +HEARTBEAT - This turns on the heartbeat messages that provide the current pattern
number being processed and assures that the simulation is still active.
■ +START_RANGE=<odometer> and +END_RANGE=<odometer> - These allow you to
simulate only a subsection of the entire pattern set within the vector file.
■ +FAILSET - When set, this argument dumps the simulation miscompare messages to a
separate file.
Refer to NC-Sim Considerations in Encounter Test: Guide 6: Test Vectors for more
information.
sim_vector_file
This task processes the content of the vector files, one at a time, and then returns the control
back to the initial block. If another file needs to be processed in between, the initial block
processes it and then returns the control back to this task.
The task initializes the stim, part, and resp variables, which are defined by Encounter Test
to contain the pattern stimulus, capture the part response, and hold the expected responses.
The task then reads each line of the vector file. Each line is processed by a CASE
STATEMENT that extracts the first entry on each line to determine the appropriate course of
action.
This task includes opcode definitions, which have reference to the following:
■ Skewed latches - Skewed latches exist only within the LSSD domain. Encounter Test can
add an extra "A" or "B" clock to the scan shift sequence. This "skews" the normal scan
shift to where the L1 latch may not have the same logic value as the L2 latch for a specific
position on the scan chain.
■ Core tests - Core logic patterns are patterns that were created for a module that is now
instantiated into the design. These patterns are mapped/migrated from a core or internal
module to the top-level design.
Table 2-1 on page 182 lists the valid opcode definitions used by this task:
Function Explanation
000: This line stops simulation. When
inserted in the middle of a file, it will
stop NCSim at that point.
Tip
From the Ncsim prompt, issue
reset to reset simulation to
time 0 and run xx ps to run up
to the desired point within
simulation. This helps you
avoid having to edit the pattern
file.
100 <comment>: This is a comment line
101 <PI>: This line starts oscillator pins. These
are pins assigned the OSC flag within
the pin assignment file. The PI entry
points to the OSC pin.
102 <PI>: This line stops the oscillation on OSC
pins. The PI entry points to the OSC
pin.
Test Vectors
This section represents the actual test vectors in Verilog format. As can be seen below, this
section starts with the Verilog “initial” construct and the opening of a “begin” block to contain
the vector data and ends with two “end” constructs which close out the “begin” and “module”
constructs to end the file.
//***************************************************************************//
// INCLUDE COMMON TASK DEFINITIONS //
//***************************************************************************//
‘include "VER.lssd.taskdef"
//***************************************************************************//
// TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no //
//***************************************************************************//
initial
begin
simulation_setup;
//***************************************************************************//
// TEST PROCEDURE............1 TYPE......................init //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
//***************************************************************************//
PATTERN = "2.1.1.1.1.1";
stim_PIs[01:19] = 19’bXXXXXXXXXXXXXXXZZXX;
task_cycle;
PATTERN = "2.1.1.1.1.2";
stim_PIs[01:19] = 19’b000XXXXXXXXXXXXZZXX;
task_cycle;
//***************************************************************************//
// TEST PROCEDURE............2 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// STATIC FAULTS.............21 PERCENT STATIC FAULTS.....58.870968 //
//***************************************************************************//
PATTERN = "2.1.1.2.1.1";
stim_SLs[01:09] = 09’b010010011;
stim_SLs[17:32] = 16’b0111000100000001;
Scan_Preconditioning_Sequence_lssd;
Scan_Sequence_lssd;
PATTERN = "2.1.1.2.1.2";
stim_PIs[01:19] = 19’b000011010000111ZZ00;
task_cycle;
PATTERN = "2.1.1.2.1.3";
task_cycle;
PATTERN = "2.1.1.2.1.4";
resp_POs[01:08] = 08’b00100000;
task_cycle;
...
PATTERN = "2.1.1.5.9.2";
stim_PIs[01:19] = 19’b000010110001101ZZ10;
resp_POs[01:08] = 08’b00000000;
task_cycle;
PATTERN = "2.1.1.5.9.3";
resp_POs[01:08] = 08’b00000000;
task_cycle;
PATTERN = "2.1.1.5.9.4";
stim_CIs[01:19] = 19’b001XXXXXXXXXXXXXXXX;
task_cycle;
PATTERN = "2.1.1.5.9.5";
resp_MLs[01:09] = 09’b100011011;
resp_MLs[17:32] = 16’b1001111011001101;
PATTERN = "2.1.1.5.10.1";
stim_SLs[01:09] = 09’b110001011;
stim_SLs[17:32] = 16’b0010100100010011;
Scan_Preconditioning_Sequence_lssd;
Skewed_Unload_Sequence_lssd;
Scan_Sequence_lssd;
PATTERN = "2.1.1.5.10.2";
stim_PIs[01:19] = 19’b000111110000111ZZ10;
resp_POs[01:08] = 08’b00000000;
task_cycle;
PATTERN = "2.1.1.5.10.3";
resp_POs[01:08] = 08’b00000000;
task_cycle;
PATTERN = "2.1.1.5.10.4";
stim_CIs[01:19] = 19’b001XXXXXXXXXXXXXXXX;
task_cycle;
PATTERN = "2.1.1.5.10.5";
resp_MLs[01:09] = 09’b110100011;
resp_MLs[17:32] = 16’b0111001000111111;
Scan_Preconditioning_Sequence_lssd;
Skewed_Unload_Sequence_lssd;
Scan_Sequence_lssd;
//***************************************************************************//
// END_OF_VECTORS //
//***************************************************************************//
simulation_wrapup ("logic.ex2.ts1.tl1");
end
endmodule
Since Verilog register variables hold their values until explicitly changed, the above
assignments are only produced if their values are different from the last set of values assigned
to the variable. This reduces redundant assignments which, in turn, reduces the overall size
of each vector file.
One or more (for scan events) of the tasks discussed previously are then invoked, depending
on the type of events encountered in the vectors.
The following is the sample equation-based timing definitions added to the mainsim.v file
when specifying equationbasedtimings=yes:
//***************************************************************************//
// EQUATION BASED TIMINGS DEFINITIONS //
//***************************************************************************//
real test_A;
real test_B;
real test_C;
real scan_A;
real scan_B;
real testpioffset_end, testbidioffset_end, scanpioffset_end, scanbidioffset_end;
real testperiod_flush, teststrobeoffset_flush;
real scanperiod_flush, scanstrobeoffset_flush;
real test_A_end;
real scan_A_end;
real test_B_end;
real scan_B_end;
real test_C_end;
Verilog Variations
The following sections discuss variations on the basic Verilog file structure described above.
Overlapped/Non-Overlapped Scans
The default is to overlap scan-outs with scan-ins. This overlap reduces the number of cycles
required for scanning of test data into and out of the scan chains. However, overlap is not
always possible. For instance, overlap cannot be done between tester loops since tester
loops are intended to be independent. In addition, overlap cannot be done where there are
intervening events which must take place between the scan-out and the subsequent scan-in.
Therefore, for those cases where overlap is not possible a non-overlapped scan sequence is
produced even though the user has requested scan overlap.
The test vector example above shows overlapped scans. Notice that pattern 2.1.1.5.9.5,
which resulted from a Skewed_Scan_Unload event, sets the values to be measured into the
resp_MLs variable. However, no scan procedures are invoked at this point, i.e., scan is
“deferred.” The following pattern, number 2.1.1.5.10.1, which resulted from a Scan_Load
event, sets the scan values into stim_SLs as well as invokes the necessary scan procedures
to do the scan.
Optionally, the user may request a non-overlap scan style, whether or not overlap is possible.
By not overlapping scans the number of tester cycles required for scan effectively doubles.
This is not usually desired as it increases the time to test the product and thus increases the
cost of test. However, non-overlap may be required in some cases.
The Verilog example below shows a subset of the test vector section which implements a non-
overlapped scan.
...
PATTERN = "2.1.1.5.9.5";
resp_MLs[01:09] = 09’b100011011;
resp_MLs[17:32] = 16’b1001111011001101;
Scan_Preconditioning_Sequence_lssd;
Skewed_Unload_Sequence_lssd;
Scan_Sequence_lssd;
PATTERN = "2.1.1.5.10.1";
stim_SLs[01:09] = 09’b110001011;
stim_SLs[17:32] = 16’b0010100100010011;
resp_MLs[17:32] = 16’bXXXXXXXXXXXXXXXX;
Scan_Preconditioning_Sequence_lssd;
Scan_Sequence_lssd;
...
Notice that each scan event invokes the required scan tasks. Also, to ensure that no
measures are done during the scan-in operation, the resp_MLs variable is set to all X's.
Effectively, this are the only differences for the non-overlap mode of operation. The scan
sequence itself is not changed.
Support for Macro tests is very similar to Logic tests with the following exceptions:
■ Macro tests typically contain loops to perform a repetitive application of clocks or to
increment macro counters or address values, etc. Therefore, the loop and end loop
events must be represented in the Verilog.
■ Macro tests may also contain pulses on non-clock PIs due to selecting a non-clock PI
correspondence point for a macro clock.
The above macro test considerations are reflected in the test vector section by using the
Verilog “repeat” and “begin/end” constructs to represent the pattern loop events and by
changing pulse events on non-clock PIs into a sequence of two vectors: the first to turn the
non-clock PI to its “on” state, the second to return it to its “off” state. If the non-clock PI is not
originally off prior to the pulse, a third vector is added to establish this state.
...
PATTERN = "1.4.1.5.1.2";
stim_PIs[01:19] = 19’b000100000000100ZZ00;
task_cycle;
stim_PIs[01:19] = 19’b000100000000100ZZ10;
resp_POs[01:08] = 08’b00000000;
task_cycle;
...
The above example shows how a negative-active pulse on a non-clock PI is treated in the
Verilog using two consecutive vectors, the first a stim to 0 and the second a stim to 1.
Support for LBIST tests involves consideration of the following LBIST test concepts:
■ Scanning in the LBIST mode is somewhat different than normal scanning. The vectors
will contain channel_scan events in lieu of the deterministic scan events. These
channel_scan events also use attributes, as opposed to unique scan event types, to
differentiate between normal and skewed scans. Therefore, unique LBIST “channel
scan” sequences must be supported.
■ The core of the LBIST test sequence involves cycling product LBIST clocks. These
clocks cycle the on-product PRPGs and MISRs and move test values along the LBIST
channels. Therefore, looping on the LBIST test sequence is required.
■ LBIST test results are represented by “signatures.” These are the values that remain in
the PRPGs and MISRs after the LBIST test sequence has completed. Signatures are
represented as hexadecimal values by signature events. These must be converted to
parent mode values and compared to the product values by a scan-out after the final
sequence cycle has completed. Note, only the final signatures for each LBIST test
sequence will be compared (see below).
These considerations are reflected in the task definition and test vector sections. In an LBIST
task definition all parent mode and the child mode scan tasks are defined. Each collection of
tasks has been derived from the appropriate mode's sequence definition file. Each mode has
a preconditioning, skewed loading, skewed unloading, and scan sequence. These tasks are
invoked in the test vector section whenever a scan sequence is required for the respective
mode. Note that while the sequences themselves are different, the timings used within each
are common, i.e., the “static” timings are used since scan is not timed.
An LBIST test vector section is very similar to deterministic test in construction. However, the
test sequence uses Verilog “repeat” and “begin/end” constructs to model the LBIST test
sequence cycle. As shown below, the patterns contained within the begin/end block reflect
the patterns contained within the LBIST test sequence.
//***************************************************************************//
// TEST PROCEDURE............1 TYPE......................init //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
//***************************************************************************//
PATTERN = "1.2.1.1.1.1";
stim_PIs[01:19] = 19’bXXXXXXXXXXXXXXXZZXX;
task_cycle;
stim_PIs[01:19] = 19’b000XXXXXXXXXXXXZZXX;
stim_CIs[01:19] = 19’b000XXXXXXXXXXXXXXXX;
task_cycle;
PATTERN = "1.2.1.1.1.1";
stim_SLs[01:09] = 09’b111110000;
stim_SLs[17:32] = 16’bXXXXXXXXXXXXXXXX;
Scan_Preconditioning_Sequence_lssd;
Scan_Sequence_lssd;
PATTERN = "1.2.1.1.1.2";
stim_PIs[01:19] = 19’b000XXXXXXXX0XXXZZ1X;
task_cycle;
//***************************************************************************//
// TEST PROCEDURE............2 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
//***************************************************************************//
PATTERN = "1.2.1.2.1.1";
Scan_Preconditioning_Sequencebsr_lbist;
Scan_Sequence_lbist;
stim_PIs[01:19] = 19’b000100000110000ZZ10;
task_cycle;
repeat(256) begin
PATTERN = "1.2.1.2.2.1";
stim_CIs[01:19] = 19’b001XXXXXXXXXXXXXXXX;
task_cycle;
PATTERN = "1.2.1.2.2.2";
Scan_Preconditioning_Sequence_lbist;
Skewed_Unload_Sequence_lbist;
Scan_Sequence_lbist;
PATTERN = "1.2.1.2.2.3";
end
resp_MLs[01:09] = 09’b0100XXXXX;
resp_MLs[17:32] = 16’bXXXXXXXXXXXXXXXX;
Scan_Preconditioning_Sequence_lssd;
Scan_Sequence_lssd;
At the completion of the sequence the final PRPG and MISR signature events return the
product to the parent mode and a scan-out/compare is performed (as in example pattern
1.2.1.2.2.3) for the final signature values. In addition, “begin_test_mode” events
encountered in any modeinit sequence cause the inclusion of the target mode's initialization
sequence from its sequence definition file to be instantiated in-line in the vectors (see pattern
1.2.1.1.1.1 in the example).
■ LBIST allows mixing of on-product and tester supplied PRPGs and MISRs. However,
there is no reasonable way to represent tester PRPGs or MISRs in Verilog. Therefore,
support will be limited to on-product PRPGs and MISRs only. If tester supplied PRPGs
or MISRs are indicated in the test data, a message will be issued indicating that this type
of test data cannot be supported and the test section will be skipped.
■ LBIST allows the determination of “intermediate” signatures for PRPG and MISR values
at various points within the test cycle. While Verilog support for intermediate signatures
is possible, the requirement for it is not clear at this time. Thus, intermediate signatures
will not be supported, however no messages will be issued if intermediate signatures are
encountered.
■ LBIST supports a “fast forward” mode of operation where ineffective (non-fault detecting)
cycles are skipped. Again, while Verilog support is possible, the requirement for it is not
clear at this time. Thus, fast forward cycles will not be supported.
The above considerations are reflected in the Verilog by defining a unique task for each timing
data object and then invoking the appropriate task for each dynamic pattern found within the
test data. The following is an example of a dynamic task.
//***************************************************************************//
// DEFINE TIMED PARALLEL PROCEDURE //
//***************************************************************************//
task TBautoLogicSeq39_36_0;
begin
#0.125000;
buss_PIs[0021] = stim_CIs[0021];
#6.625000;
buss_PIs[0021] = stim_PIs[0021];
#6.250000;
buss_PIs[0196] = stim_CIs[0196];
#6.625000;
buss_PIs[0196] = stim_PIs[0196];
#5.375000;
stim_CIs = 0200’bXXXXXX...0XX1XX00XXX;XXXX...XXX0XX1XX00XXX;
end
endtask
The task is given a unique name which is constructed from its sequence name and timing ID
appended with a cycle number. Within each task the various values are applied to the PI pins
at the times calculated from the timing data objects. When a test sequence containing a
dynamic pattern is encountered in the vectors, the converter produces a statement which
invokes the appropriate task as shown below.
...
PATTERN = "2.1.1.85.1.4";
stim_CIs[0001:0200] = 0200’bXXXXX...XXXXXX0XX1XX10XXX;
task_cycle;
PATTERN = "2.1.1.85.1.5";
stim_CIs[0001:0200] = 0200’bXXXX1XXX...XXX0XX1XX10XXX;
TBautoLogicSeq39_36_0;
...
Multiple task invocation statements are produced if there are multiple cycles required, each
referencing the appropriate task. For untimed “static” patterns, the tasks which use the user
specified timings are invoked as usual.
Refer to "Default Timings for Clocks" in the Encounter Test: Guide 6: Test Vectors for
related information.
Scan Formats
When the parallel format is selected, several changes are required in Verilog files from what
has been described earlier. The most obvious, and most significant, change involves the scan
task which must now provide the Verilog which manipulates the flops and latches directly
instead of via a shifting process. There are also several minor changes required to other
sections. The following example shows how the chain variables are defined for these scan
formats.
//***************************************************************************//
// DEFINE VARIABLES FOR ALL SHIFT CHAINS //
//***************************************************************************//
...
The differences here are the addition of the new buss_SLs and buss_MLs variables which
are added to provide a source for manipulating flop and latch inputs and outputs. These
variables are connected to the structure by the following assignments.
//***************************************************************************//
// MAKE SOME OTHER CONNECTIONS //
//***************************************************************************//
...
...
buss_MLs[29] = lbistchip_inst.ch1slo4 ,
buss_MLs[30] = lbistchip_inst.M02.SlaveOut3 ,
buss_MLs[31] = lbistchip_inst.M02.SlaveOut2 ,
buss_MLs[32] = lbistchip_inst.M02.SlaveOut1 ;
Values are applied to the flops or latches by setting values into buss_SLs. Simulation values
from each scan cell are collected by buss_MLs which can then be compared to values in
resp_MLs just as buss_POs values are compared to values in resp_POs.
When a miscompare occurs, a message is issued to the Verilog log file indicating the type of
miscompare, the pattern number, the expected responses, and the simulated responses.
For a parallel test cycle, comparisons are done at product POs. An example miscompare
message of this type is shown below.
PO miscompare(s) at pattern: 2.1.1.2.1.4 at Time: 72
Expected: 0 Simulated: 1 On Output: DO2
Expected: 0 Simulated: X On Output: DO4
This example indicates that a PO miscompare occurred at pattern number 2.1.1.2.1.4 (this is
interpreted as experiment 2, test section 1, tester loop 1, test procedure 2, test sequence 1,
and pattern 4). Also indicated are the expected values, as calculated by Encounter Test
simulation, the simulated values, as calculated by Verilog and the output pin name in error.
Values are retained in each variable (stim_PIs, resp_POs, stim_SLs, etc.) until explicitly
reset. For example, the values for a stim_PI come from the prior assignment. Note that
some of the scan tasks (preconditioning is one example) will change the values in stim_PIs
to establish the scan state. These values are left in stim_PIs, i.e., not reset back to their
value prior to scan. Encounter Test leaves the scan state values on PIs after a scan operation
i.e., the stim_PI is permanently changed by the preconditioning assignments.
For scan cycle miscompares, comparisons are performed at scan-out POs for the serial
format. For the parallel format, comparisons are performed at the flop or latch outputs
however, the failure is presented as if it took place at the scan-out POs. The provides a
common miscompare message format. An example of a scan miscompare is shown below.
SO miscompare(s) at pattern: 2.1.1.4.1.1, Bit: 5, Scan Section: Scan_Sequence at Time: 8
Expected: 0 Simulated: 1 On Output: SO1
This example shows that a miscompare occurred at pattern 2.1.1.4.1.1. It also shows that bit
5 was the failing bit position, relative to the scan-out PO and the applicable scan section
name. Again, the expected value, simulated value, and failing scan-out PO are shown.
A
Scan Operation
Scan Operation
(scanop)
*1
Load Suffix Sequence
Scan Section
(scansection)
*1 *1
Scan Entry Sequence Scan Exit Sequence
(scanentry) (scanexit)
*1 *1 *1 *1 *2 *2 *1 *1
(W) (X) Channel (Y) Non-Looped MISR MISR (Z) Section Exit
Scan Section Skewed Mask Scan Scan OBSERVE RESET Skewed Sequence
Preconditioning Unload Load Sequence Sequence Sequence Sequence Load (scansectionexit)
Sequence Sequence Sequence (scansequence)(scanlastbit) Sequence
(scanprecond) (skewunload) (channelmaskload) (skewload)
NOTES: *1 denotes the sequnce is optional. *2 denotes that this sequence is present only for
an On-Product MISR test mode
B
Encounter Test Pattern Data Examples
#
# Scan Chain Definition
# Legend:
# Load_Node => Pin where logic values are placed for transfer into a latch
# via the load operation (e.g. a scan-in primary input).
# Unload_Node => Pin where latch logic values appear as the result of an unload
# operation (e.g. a scan-out primary output).
# index => TestBench model pin index for load/unload nodes or block index
# for stim/measure latches.
# Load_Sect => The id of the load section.
# Unload_Sect => The id of the unload section.
# Bit_Length => The number of bit positions in stim/observable register.
# Number_Of_RSLs => The number of Representative Stim Latches in the
Stim_Register.
# Number_Of_SSLs => The number of Skewed Stim Latches in the Stim_Register.
# Number_Of_RMLs => The number of Representative Measure Latches in the
observable register.
# First_Stim_Bit => The bit position in the Scan_Load vector where RSL values
# for this scan chain begin.
# Last_Stim_Bit => The bit position in the Scan_Load vector where RSL values
# for this scan chain stop.
# First_Meas_Bit => The bit position in the Meas_Latch vector where RML values
# for this scan chain begin.
# Last_Meas_Bit => The bit position in the Meas_Latch vector where RML values
# for this scan chain stop.
#
# Stim_Register 1:
] Test_Sequence 1.1.1.1.1;
] Test_Procedure 1.1.1.1;
[ Test_Procedure 1.1.1.2 (static_faults = 76, percent_static_faults =
46.060608);
[ Test_Sequence 1.1.1.2.1 ();
[ Pattern 1.1.1.2.1.1 (pattern_type = static);
Event 1.1.1.2.1.1.1 Scan_Load ():
10;
] Pattern 1.1.1.2.1.1;
[ Pattern 1.1.1.2.1.2 (pattern_type = static);
Event 1.1.1.2.1.2.1 Stim_PI ():
0001100100;
] Pattern 1.1.1.2.1.2;
[ Pattern 1.1.1.2.1.3 (pattern_type = static);
Event 1.1.1.2.1.3.1 Pulse ():
"Pin.f.l.lsrfh0b.nl.a6"=+ ;
Event 1.1.1.2.1.3.2 Pulse ():
"Pin.f.l.lsrfh0b.nl.a9"=+ ;
] Pattern 1.1.1.2.1.3;
[ Pattern 1.1.1.2.1.4 (pattern_type = static);
Event 1.1.1.2.1.4.1 Measure_PO ():
111;
] Pattern 1.1.1.2.1.4;
[ Pattern 1.1.1.2.1.5 (pattern_type = static);
Event 1.1.1.2.1.5.1 Stim_PI ():
0000100100;
] Pattern 1.1.1.2.1.5;
[ Pattern 1.1.1.2.1.6 (pattern_type = static);
Event 1.1.1.2.1.6.1 Pulse ():
"Pin.f.l.lsrfh0b.nl.a6"=+ ;
Event 1.1.1.2.1.6.2 Pulse ():
"Pin.f.l.lsrfh0b.nl.a9"=+ ;
] Pattern 1.1.1.2.1.6;
[ Pattern 1.1.1.2.1.7 (pattern_type = static);
Event 1.1.1.2.1.7.1 Measure_PO ():
101;
] Pattern 1.1.1.2.1.7;
[ Pattern 1.1.1.2.1.8 (pattern_type = static);
Event 1.1.1.2.1.8.1 Stim_PI ():
1010100100;
] Pattern 1.1.1.2.1.8;
[ Pattern 1.1.1.2.1.9 (pattern_type = static);
Event 1.1.1.2.1.9.1 Pulse ():
"Pin.f.l.lsrfh0b.nl.a6"=+ ;
Event 1.1.1.2.1.9.2 Pulse ():
"Pin.f.l.lsrfh0b.nl.a9"=+ ;
] Pattern 1.1.1.2.1.9;
[ Pattern 1.1.1.2.1.10 (pattern_type = static);
Event 1.1.1.2.1.10.1 Measure_PO ():
110;
] Pattern 1.1.1.2.1.10;
[ Pattern 1.1.1.2.1.11 (pattern_type = static);
Event 1.1.1.2.1.11.1 Stim_PI ():
1011100100;
] Pattern 1.1.1.2.1.11;
[ Pattern 1.1.1.2.1.12 (pattern_type = static);
Event 1.1.1.2.1.12.1 Pulse ():
"Pin.f.l.lsrfh0b.nl.a6"=+ ;
Event 1.1.1.2.1.12.2 Pulse ():
"Pin.f.l.lsrfh0b.nl.a9"=+ ;
] Pattern 1.1.1.2.1.12;
"Pin.f.l.lsrfh0b.nl.a9"=+ ;
] Pattern 1.1.1.2.1.3;
[ Pattern 1.1.1.2.1.4 (pattern_type = static);
Event 1.1.1.2.1.4.1 Measure_PO ():
"Pin.f.l.lsrfh0b.nl.00"=1
"Pin.f.l.lsrfh0b.nl.01"=1
"Pin.f.l.lsrfh0b.nl.02"=1 ;
] Pattern 1.1.1.2.1.4;
[ Pattern 1.1.1.2.1.5 (pattern_type = static);
Event 1.1.1.2.1.5.1 Stim_PI ():
"Pin.f.l.lsrfh0b.nl.a4"=1
"Pin.f.l.lsrfh0b.nl.a6"=0
"Pin.f.l.lsrfh0b.nl.a7"=1
"Pin.f.l.lsrfh0b.nl.a9"=0 ;
] Pattern 1.1.1.2.1.5;
[ Pattern 1.1.1.2.1.6 (pattern_type = static);
Event 1.1.1.2.1.6.1 Pulse ():
"Pin.f.l.lsrfh0b.nl.a6"=+ ;
Event 1.1.1.2.1.6.2 Pulse ():
"Pin.f.l.lsrfh0b.nl.a9"=+ ;
] Pattern 1.1.1.2.1.6;
[ Pattern 1.1.1.2.1.7 (pattern_type = static);
Event 1.1.1.2.1.7.1 Measure_PO ():
"Pin.f.l.lsrfh0b.nl.00"=1
"Pin.f.l.lsrfh0b.nl.01"=0
"Pin.f.l.lsrfh0b.nl.02"=1 ;
] Pattern 1.1.1.2.1.7;
[ Pattern 1.1.1.2.1.8 (pattern_type = static);
Event 1.1.1.2.1.8.1 Stim_PI ():
"Pin.f.l.lsrfh0b.nl.a4"=1
"Pin.f.l.lsrfh0b.nl.a6"=0
"Pin.f.l.lsrfh0b.nl.a7"=1
"Pin.f.l.lsrfh0b.nl.a9"=0 ;
] Pattern 1.1.1.2.1.8;
[ Pattern 1.1.1.2.1.9 (pattern_type = static);
Event 1.1.1.2.1.9.1 Pulse ():
"Pin.f.l.lsrfh0b.nl.a6"=+ ;
Event 1.1.1.2.1.9.2 Pulse ():
"Pin.f.l.lsrfh0b.nl.a9"=+ ;
] Pattern 1.1.1.2.1.9;
[ Pattern 1.1.1.2.1.10 (pattern_type = static);
Event 1.1.1.2.1.10.1 Measure_PO ():
"Pin.f.l.lsrfh0b.nl.00"=1
"Pin.f.l.lsrfh0b.nl.01"=1
"Pin.f.l.lsrfh0b.nl.02"=0 ;
] Pattern 1.1.1.2.1.10;
[ Pattern 1.1.1.2.1.11 (pattern_type = static);
Event 1.1.1.2.1.11.1 Stim_PI ():
"Pin.f.l.lsrfh0b.nl.a4"=1
"Pin.f.l.lsrfh0b.nl.a6"=0
"Pin.f.l.lsrfh0b.nl.a7"=1
"Pin.f.l.lsrfh0b.nl.a9"=0 ;
] Pattern 1.1.1.2.1.11;
[ Pattern 1.1.1.2.1.12 (pattern_type = static);
Event 1.1.1.2.1.12.1 Pulse ():
"Pin.f.l.lsrfh0b.nl.a6"=+ ;
Event 1.1.1.2.1.12.2 Pulse ():
"Pin.f.l.lsrfh0b.nl.a9"=+ ;
] Pattern 1.1.1.2.1.12;
[ Pattern 1.1.1.2.1.13 (pattern_type = static);
Event 1.1.1.2.1.13.1 Measure_PO ():
"Pin.f.l.lsrfh0b.nl.00"=1
"Pin.f.l.lsrfh0b.nl.01"=1
"Pin.f.l.lsrfh0b.nl.02"=0 ;
] Pattern 1.1.1.2.1.13;
[ Pattern 1.1.1.2.1.14 (pattern_type = static);
Event 1.1.1.2.1.14.1 Scan_Unload ():
"Block.f.l.lsrfh0b.nl.srf10hm.021"=1
"Block.f.l.lsrfh0b.nl.srf10hn.021"=0 ;
] Pattern 1.1.1.2.1.14;
] Test_Sequence 1.1.1.2.1;
] Test_Procedure 1.1.1.2;
] Tester_Loop 1.1.1;
] Test_Section 1.1;
[ Test_Section 1.2 (tester_termination = 0, termination_domination = tester,
test_section_type = logic, test_type = dynamic);
[ Tester_Loop 1.2.1 ();
[ Test_Procedure 1.2.1.1 (type = init);
[ Test_Sequence 1.2.1.1.1 (type = init);
[ Pattern 1.2.1.1.1.1 (pattern_type = static);
Event 1.2.1.1.1.1.1 Stim_PI ():
"Pin.f.l.lsrfh0b.nl.a6"=0
"Pin.f.l.lsrfh0b.nl.a9"=0 ;
] Pattern 1.2.1.1.1.1;
] Test_Sequence 1.2.1.1.1;
] Test_Procedure 1.2.1.1;
[ Test_Procedure 1.2.1.2 ();
[ Test_Sequence 1.2.1.2.1 ();
[ Pattern 1.2.1.2.1.1 (pattern_type = static);
Event 1.2.1.2.1.1.1 Skewed_Scan_Load ():
"Block.f.l.lsrfh0b.nl.srf10hm.021"=0
"Block.f.l.lsrfh0b.nl.srf10hn.021"=1
"Block.f.l.lsrfh0b.nl.srf10hm.014"=1 ;
] Pattern 1.2.1.2.1.1;
[ Pattern 1.2.1.2.1.2 (pattern_type = static);
Event 1.2.1.2.1.2.1 Stim_PI ():
"Pin.f.l.lsrfh0b.nl.a4"=1
"Pin.f.l.lsrfh0b.nl.a6"=0
"Pin.f.l.lsrfh0b.nl.a7"=1
"Pin.f.l.lsrfh0b.nl.a9"=0 ;
] Pattern 1.2.1.2.1.2;
[ Pattern 1.2.1.2.1.3 (pattern_type = dynamic);
Event 1.2.1.2.1.3.1 ulse (timed_type = release):
"Pin.f.l.lsrfh0b.nl.a9"=+ ;
Event 1.2.1.2.1.3.2 Stim_PI (timed_type = release):
"Pin.f.l.lsrfh0b.nl.a4"=0
"Pin.f.l.lsrfh0b.nl.a6"=0
"Pin.f.l.lsrfh0b.nl.a7"=1
"Pin.f.l.lsrfh0b.nl.a9"=0 ;
Event 1.2.1.2.1.3.3 Measure_PO (timed_type = capture):
"Pin.f.l.lsrfh0b.nl.00"=1
"Pin.f.l.lsrfh0b.nl.01"=1
"Pin.f.l.lsrfh0b.nl.02"=0 ;
] Pattern 1.2.1.2.1.3;
] Test_Sequence 1.2.1.2.1;
[ Test_Sequence 1.2.1.2.2 ();
[ Pattern 1.2.1.2.2.1 (pattern_type = static);
Event 1.2.1.2.2.1.1 Skewed_Scan_Load ():
"Block.f.l.lsrfh0b.nl.srf10hm.021"=1
"Block.f.l.lsrfh0b.nl.srf10hn.021"=0
"Block.f.l.lsrfh0b.nl.srf10hm.014"=1 ;
] Pattern 1.2.1.2.2.1;
AC Example
TBDpatt_Format (mode=vector, model_entity_form=name);
#
#Vector_Correspondence
#
# Legend:
#
# tf => the test function for the corresponding primary input/output pin
# AC => A shift clock
# AS => A shift and system clock
# BC => B shift clock
# BDY => boundary (test pin -- data)
# BI => bi-directional inhibit
# BS => B shift and system clock
# CI => clock isolation
# CTL => boundary (test pin -- control)
# EC => shift clock for edge-sensitive flip-flops
# ES => clock for both shift and system function of edge-sensitive
# flip-flops.
# LH => linehold
# ME => MISR enable
# OI => output inhibit
# PC => P clock
# PS => P and system clock
# SC => system clock
[ Experiment acexp 1;
[ Define_Sequence TBautoLogicSeq0 19951002204813 1.1 (test);
[ Timing_Data ( automatic, number_of_cycles = 1,
early = ( 1.000000, 0.000000, 0.000000) ,
late = ( 1.000000, 0.000000, 1.0000) )
[ Pin_Timing:
tester_cycle 0.000000 ps cycle 0;
stim_PIs RorF 950.000000 ps cycle 0 event 1 "Pin.f.l.omniTest.nl.PIN0";
stim_PIs RorF 950.000000 ps cycle 0 event 1 "Pin.f.l.omniTest.nl.PIN1";
stim_PIs RorF 950.000000 ps cycle 0 event 1 "Pin.f.l.omniTest.nl.PIN2";
stim_PIs RorF 950.000000 ps cycle 0 event 1 "Pin.f.l.omniTest.nl.input1";
PO_strobe RorF 1330.000000 ps cycle 0 event 2 "Pin.f.l.omniTest.nl.output";
tester_cycle 2280.000000 ps cycle 1;
] Pin_Timing;
] Timing_Data 1.1.1 ;
[ Pattern 1.1.1 (pattern_type = static);
Event 1.1.1.1 Stim_PI ():
] Pattern 1.1.1;
[ Pattern 1.1.2 (pattern_type = dynamic);
Event 1.1.2.1 Stim_PI (timed_type = release):
Event 1.1.2.2 Measure_PO (timed_type = capture):
x;
] Pattern 1.1.2;
] Define_Sequence TBautoLogicSeq0 1.1;
[ Test_Section 1.1 (tester_termination = 1, termination_domination = tester,
test_section_type = logic, test_type = dynamic);
[ Tester_Loop 1.1.1 ();
[ Test_Procedure 1.1.1.1 (type = init);
[ Test_Sequence 1.1.1.1.1 ();
] Test_Sequence 1.1.1.1.1;
] Test_Procedure 1.1.1.1;
[ Test_Procedure 1.1.1.2 (static_faults = 12, percent_static_faults = 54.545456,
dynamic_faults = 8, percent_dynamic_faults = 28.571246);
[ Test_Sequence 1.1.1.2.1 ();
[ SeqDef=(TBautoLogicSeq0,"19951002204813") ] SeqDef;
[ Timing_ID = 1 ];
[ Pattern 1.1.1.2.1.1 (pattern_type = static);
Event 1.1.1.2.1.1.1 Stim_PI ():
0100;
Event 1.1.1.2.1.1.2 Measure_PO ():
0;
] Pattern 1.1.1.2.1.1;
[ Pattern 1.1.1.2.1.2 (pattern_type = dynamic);
Event 1.1.1.2.1.2.1 Stim_PI (timed_type = release):
1101;
Event 1.1.1.2.1.2.2 Measure_PO (timed_type = capture):
1;
] Pattern 1.1.1.2.1.2;
] Test_Sequence 1.1.1.2.1;
] Test_Procedure 1.1.1.2;
] Tester_Loop 1.1.1;
] Test_Section 1.1;
] Experiment acexp 1;
# experiments = 1
# test sections = 1
# tester loops = 1
# test procedures = 6
# test sequences = 6
# patterns = 12
# events = 23
[Pattern;
Event Stim_PI (): "trst" =1;
Event Pulse (): "tck" =+; ]Pattern;
[Pattern;
Event Stim_PI (): "trst" =0;
Event Pulse (): "tck" =+; ]Pattern;
## Note: The mode init sequence must leave the design in the same state
## that every scan load/unload must start in. That state is the
## Shift_DR state whenever Capture_DR is being used!!!
]Define_Sequence Mode_init;
# Scan procedures
#------------------------------------------------------------
[Define_Sequence Scan_setup (scanprecond);
[Pattern;
Event Stim_PI (): "tms" =0;
## This sequence is executed once for each shift of the register, except
## for the last bit shift, which must be defined in the scanlastbit
sequence.
[Define_Sequence Shift-dr (scansequence, repeat = 4);
[Pattern;
Event Measure_Scan_Data (): "tdo";
Event Set_Scan_Data (): "tdi";
Event Pulse (): "tck" =+ ; ]Pattern;
]Define_Sequence Shift-dr;
## This sequence shifts the last bit through the internal register and
moves
## from the Shift_DR state to the Exit1_DR state.
[Define_Sequence Exit1-dr (scanlastbit);
[Pattern;
Event Measure_Scan_Data (): "tdo";
Event Set_Scan_Data (): "tdi";
Event Stim_PI (): "tms" =1;
Event Pulse (): "tck" =+ ; ]Pattern;
]Define_Sequence Exit1-dr;
# Note that TMS must be left at its TestConstraint (TC) value of zero
(0) as
# we exit the scan operation.
]Define_Sequence Updt-dr;
# The Load_S
uffix operation to load the Alternate Stim Latches (ASLs)
# Note: normally the loadsuffix sequence is optional, but when used to
# apply the Update_DR operation of 1149.1, it must always be
# included after every Scan_Load operation.
#--------------------------------------------------------------------
[Define_Sequence Load_Suffix (loadsuffix);
[Pattern;
# Now we pulse TCK and load the parallel latches and move to
Select_DR state.
[Pattern;
Event Stim_PI (): "tms"=0 ;
Event Pulse (): "tck"=+ ;
]Pattern;
]Define_Sequence Load_Suffix;
C
WGL Pattern Data Examples
This section provides examples of WGL format which are typical for Deterministic Logic tests,
Macro tests, LBIST tests, and ICT tests.
■ “WGL Scan Vector Explanation and Examples” on page 215
■ “Deterministic WGL Pattern Data Examples” on page 219
■ “WGL Pattern Data Examples for Macro Tests” on page 251
■ “Timed Dynamic WGL Pattern Data Examples” on page 256
Below is an example of a scan chain with both Scan_in and Scan_out defined:
scanchain
"MREG_1_TB_EXTEST_CAP_UPDT_324BGA" [
"JTAG_TDI",
"top.io_CEN0_0.BSC_MERGED_364.TDO_net_reg.I0.dff",
...other scan flops...
"top.io_IO_6_4.TBB_BSC_IO_6_4__0.TDO_net_reg.I0.dff",
"JTAG_TDO"
];
end
"M01.M08.P01",
];
end
There can be one or multiple scan chains defined within a WGL scanchain declaration. It is
important to note the following:
■ Scan chains need not be of a uniform length.
■ The defined scan chains may be a mixture of only scan_in, only scan_out, or both
scan_in and scan_out.
■ A scan chain can have an inversion represented by a ! between memory elements, as
shown in “Deterministic WGL Pattern Data Examples” on page 219.
There may be scan chains of different length and types existing within a design. Below are
some things to consider:
■ The number of logic values within each scanstate entry matches the number of flops/bits
defined in the scanchain. The entries will be of different length.
■ The values represent only the scan flops within the chain, and not the scan_in or
scan_out pins (as one of these pins may be missing in the scan chain definition).
■ Scanstate definition does not declares the values as scan shift input or scan shift output.
This is done in the WGL scan vector.
■ The values are defined as they appear in the latch or scanchain definition. Therefore if
you want the value at the SI or SO pin then you need to look at the scanchain definition
and consider any inversion.
## NOT A scan vector thus all pins defined. No "-" placeholder for
## any of the scan_in or scan_out pins.
vector ( +, "scan_cycle" ) := [
X X X 1 1 X X X X X X 0 X X X 0
Z Z Z 0 1 Z 0 1 Z Z Z Z Z Z Z Z Z Z Z
X X X X
- - - - - - - - - - - - - - - - - - -];
## NOTE: Even though the scanchain is defined with both an input
## and output scan pin there is only a scan shift output in this vector.
## NOTE: The scan_in pin (5th entry in second row) is now explicitly defined.
## IF this scan input pin was defined AND there was an "input" scan
## statement then there would be a conflict on what value to set this
## pin and thus an ERROR
## IF there was a Measure output value for the scan out pin this would
## conflict with the "output" scan statement and thus be an ERROR
scan ( +, "scan_cycle" ) := [
X X X 1 1 X X X X X X 0 X X X 0
Z Z Z 1 1 Z 0 1 Z Z Z Z Z Z Z Z Z Z Z
X X X X
- - - - - - - - - - - - - - - - - - - ],
output [ "MREG_1_TB_EXTEST_CAP_UPDT_324BGA" : "SS.1.2.1.2.3.2.3" ];
■ The next section explicitly defines the value for every pin contacted by the tester. This is
broken down by the following lines:
❑ First line has the input pin values
❑ Second line has the input value for bidi pins
❑ Third line has output pin measure values
❑ Fourth line has output measure values for bidi pins
The order of contacted pins in this list is defined by the order in which they appear within
the pattern MAIN statement.
Note: Though every tester contacted pin is represented in the scan vector statement, a
specific entry may not have an explicit logic value and may contain a "-" placeholder
instead.
■ The input and/or output scan statements. Each statement references a specific scan
chain and scanstate variable.
❑ The number of logic values in the scanstate variable must match the number of flops
defined in the scanchain.
❑ Any scan vector may have only input references, only output references, or both.
❍ Chains referenced via input statement must have a scan_in pin defined.
❍ Chains referenced via output statement must have a scan_out pin defined.
❍ Within a scan vector, a chain with both scan_in and scan_out defined may be
referenced by only an input statement, only an output statement, or both.
❍ If a chain with both pins defined in the scanchain statement is referenced only
via an input statement, then the scan_out pin value is provided in the scan
vector pin section. If it is referenced only via an output statement then the
scan_in pin value is provided in the scan vector pin section.
Note: All defined scan chains need not be referenced in every scan vector statement.
There will be chains that are not referenced because they are not relevant for the current
operation. In such case, their scan in and scan out pins will be supplied logic values
within the pin section of the scan vector. These pins are not undefined.
The tester cycle count provided within comments in the example is incremented by the
largest scan chain referenced within a specific scan vector. The cycle count is not
expected to increase by the longest defined scan chain as in the XOR compression
mask scan vector references. These are very short scan chains that are scanned
separately from the functional logic scan chains.
signal
"A" : input; ## pinName = A; tf = -AC ; testOffset = 8; scanOffset = 24;
"B" : input; ## pinName = B; tf = -BC ; testOffset = 24; scanOffset = 40;
"C" : input; ## pinName = C; tf = -SC ; testOffset = 8; scanOffset = 16;
"CS" : input; ## pinName = CS; testOffset = 0; scanOffset = 16;
"DI1" : input; ## pinName = DI1; testOffset = 0; scanOffset = 16;
"DI2" : input; ## pinName = DI2; testOffset = 0; scanOffset = 16;
"DI3" : input; ## pinName = DI3; testOffset = 0; scanOffset = 16;
"DI4" : input; ## pinName = DI4; testOffset = 0; scanOffset = 16;
"ENABLE1" : input; ## pinName = ENABLE1; tf = +SE ; testOffset = 0;
"ENABLE2" : input; ## pinName = ENABLE2; tf = +SE ; testOffset = 0;
"ME" : input; ## pinName = ME; tf = +SE ; testOffset = 0;
"PS" : input; ## pinName = PS; testOffset = 0; scanOffset = 16;
"SEL" : input; ## pinName = SEL; tf = -SE ; testOffset = 0; scanOffset
end
scancell
"M00.M02.P01";
"M00.M03.P01";
"M00.M04.P01";
"M00.M05.P01";
"M01.M05.P01";
"M01.M06.P01";
"M01.M07.P01";
"M01.M08.P01";
"M02.M01.P01";
"M02.M02.P01";
"M02.M03.P01";
"M02.M04.P01";
"M03.M01.P01";
"M03.M02.P01";
"M03.M03.P01";
"M03.M04.P01";
"M04.M01.P01";
"M04.M02.P01";
"M04.M03.P01";
"M04.M04.P01";
"M05.M01.P01";
"M05.M02.P01";
"M05.M03.P01";
"M05.M04.P01";
"M40.P01";
end
scanchain
"MREG_1_FULLSCAN" [
"SI1",
"M40.P01",
"M00.M02.P01",
"M00.M03.P01",
"M00.M04.P01",
"M00.M05.P01",
"M01.M05.P01",
"M01.M06.P01",
"M01.M07.P01",
"M01.M08.P01",
"SO1_BIDI"
];
"MREG_2_FULLSCAN" [
"SI2",
"M02.M01.P01",
"M02.M02.P01",
"M02.M03.P01",
"M02.M04.P01",
"M03.M01.P01",
"M03.M02.P01",
"M03.M03.P01",
"M03.M04.P01",
"M04.M01.P01",
"M04.M02.P01",
"M04.M03.P01",
"M04.M04.P01",
"M05.M01.P01",
"M05.M02.P01",
"M05.M03.P01",
"M05.M04.P01",
"SO2_BIDI"
];
end
waveform "WGL.lssd.flush.ex1.ts1"
include "WGL.lssd.signals";
##***************************************************************************##
## TIMING DEFINITIONS ##
##***************************************************************************##
scanstate
end
##***************************************************************************##
## TEST VECTORS ##
##***************************************************************************##
pattern MAIN ( "A", "B", "C", "CS", "DI1", "DI2", "DI3", "DI4", "ENABLE1",
"ENABLE2", "ME", "PS", "SEL", "SI1", "SI2", "ST1", "ST2",
"SO1_BIDI":I, "SO2_BIDI":I,
"DO1", "DO2", "DO3", "DO4", "SO1", "SO2",
"SO1_BIDI":O, "SO2_BIDI":O )
##***************************************************************************##
## TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no ##
## TEST PROCEDURE............1 TYPE......................init ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## TEST SEQUENCE.............1 TYPE......................init ##
##***************************************************************************##
- - ];
##***************************************************************************##
## TEST PROCEDURE............2 TYPE......................normal ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....yes ##
## TEST SEQUENCE.............1 TYPE......................normal ##
##***************************************************************************##
##***************************************************************************##
## TEST SEQUENCE.............3 TYPE......................normal ##
##***************************************************************************##
##***************************************************************************##
## TEST SEQUENCE.............4 TYPE......................normal ##
##***************************************************************************##
Z Z
X X X X X X
- - ];
## Inserted final non-scan Pattern
vector ( +, "test_cycle_stimclks" ) := [
0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1
Z Z
X X X X X X
- - ];
end end
waveform "WGL.lssd.scan.ex1.ts2"
include "WGL.lssd.signals";
##***************************************************************************##
## TIMING DEFINITIONS ##
##***************************************************************************##
scanstate
"SS.1.2.1.2.1.1.1" :=
"MREG_1_FULLSCAN" ( 100110011)
"MREG_2_FULLSCAN" ( 1001100110011001) ;
"SS.1.2.1.2.7.1.1" :=
"MREG_1_FULLSCAN" ( 100110011)
"MREG_2_FULLSCAN" ( 1001100110011001) ;
end
##***************************************************************************##
## TEST VECTORS ##
##***************************************************************************##
pattern MAIN ( "A", "B", "C", "CS", "DI1", "DI2", "DI3", "DI4", "ENABLE1",
"ENABLE2", "ME", "PS", "SEL", "SI1", "SI2", "ST1", "ST2",
"SO1_BIDI":I, "SO2_BIDI":I,
"DO1", "DO2", "DO3", "DO4", "SO1", "SO2",
"SO1_BIDI":O, "SO2_BIDI":O )
##***************************************************************************##
## TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no ##
## TEST PROCEDURE............1 TYPE......................init ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## TEST SEQUENCE.............1 TYPE......................init ##
##***************************************************************************##
##***************************************************************************##
## TEST SEQUENCE.............2 TYPE......................normal ##
##***************************************************************************##
##***************************************************************************##
## TEST SEQUENCE.............7 TYPE......................normal ##
##***************************************************************************##
## Processing the Static: EVENT 1.2.1.2.7.1.1: Scan_Unload:
## Inserted the Scan Sequence: Scan_Preconditioning_Sequence
vector ( +, "test_cycle_lssd" ) := [
0 0 0 0 0 1 0 1 1 1 1 1 0 1 1 0 1
Z Z
X X X X X X
- - ];
vector ( +, "test_cycle_lssd" ) := [
0 0 0 0 0 1 0 1 1 1 1 1 0 1 1 0 1
Z Z
X X X X X X
- - ];
## Inserted the Scan Sequence: Scan_Sequence
scan ( +, "scan_cycle" ) := [
1 1 0 0 0 1 0 1 1 1 1 1 0 1 1 0 1
- -
X X X X X X
- - ],
output [ "MREG_1_FULLSCAN" : "SS.1.2.1.2.7.1.1" ] ,
output [ "MREG_2_FULLSCAN" : "SS.1.2.1.2.7.1.1" ] ;
waveform "WGL.lssd.logic.ex2.ts1"
include "WGL.lssd.signals";
##***************************************************************************##
## TIMING DEFINITIONS ##
##***************************************************************************##
scanstate
"SS.2.1.1 .2.1.1.1" :=
"MREG_1_FULLSCAN" ( 000010100)
"MREG_2_FULLSCAN" ( 1110011001001111) ;
"SS.2.1.1.2.2.1.1" :=
"MREG_1_FULLSCAN" ( 100000111)
"MREG_2_FULLSCAN" ( 1101111010001110) ;
## The Following is StimLatchExtra A.
"SS.2.1.1.3.1.1.1" :=
"MREG_1_FULLSCAN" ( 101110110)
"MREG_2_FULLSCAN" ( 0001011010010110) ;
"SS.2.1.1.3.1.5.1" :=
"MREG_1_FULLSCAN" ( 010110110)
"MREG_2_FULLSCAN" ( 0000101101001011) ;
.
.
.
"SS.2.1.1.8.13.4.1" :=
"MREG_1_FULLSCAN" ( 100011001)
"MREG_2_FULLSCAN" ( 1001010011001111) ;
"SS.2.1.1.8.14.1.1" :=
"MREG_1_FULLSCAN" ( 000101101)
"MREG_2_FULLSCAN" ( 0000010000101111) ;
"SS.2.1.1.8.14.4.1" :=
"MREG_1_FULLSCAN" ( 000101101)
"MREG_2_FULLSCAN" ( 1100000010011100) ;
end
##***************************************************************************##
## TEST VECTORS ##
##***************************************************************************##
pattern MAIN ( "A", "B", "C", "CS", "DI1", "DI2", "DI3", "DI4", "ENABLE1",
"ENABLE2", "ME", "PS", "SEL", "SI1", "SI2", "ST1", "ST2",
"SO1_BIDI":I, "SO2_BIDI":I,
"DO1", "DO2", "DO3", "DO4", "SO1", "SO2",
"SO1_BIDI":O, "SO2_BIDI":O )
##***************************************************************************##
## TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no ##
## TEST PROCEDURE............1 TYPE......................init ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## TEST SEQUENCE.............1 TYPE......................init ##
##***************************************************************************##
##***************************************************************************##
## TEST PROCEDURE............2 TYPE......................normal ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## STATIC FAULTS.............18 PERCENT STATIC FAULTS.....55.988594 ##
## TEST SEQUENCE.............1 TYPE......................normal ##
##***************************************************************************##
## Processing the Static: EVENT 2.1.1.2.1.1.1: Scan_Load:
## Inserted the Scan Sequence: Scan_Preconditioning_Sequence
vector ( +, "test_cycle_lssd" ) := [
0 0 0 X X X X X 1 1 1 X 0 X X 0 1
Z Z
X X X X X X
- - ];
vector ( +, "test_cycle_lssd" ) := [
0 0 0 X X X X X 1 1 1 X 0 X X 0 1
Z Z
X X X X X X
- - ];
## Inserted the Scan Sequence: Scan_Sequence
scan ( +, "scan_cycle" ) := [
1 1 0 X X X X X 1 1 1 X 0 - - 0 1
Z Z
X X X X X X
- - ],
X X X X X X
- - ];
## Inserted the Scan Sequence: Skewed_Unload_Sequence
vector ( +, "test_cycle_lssd" ) := [
0 1 0 0 1 0 1 0 1 1 1 1 0 1 1 0 1
Z Z
X X X X X X
- - ];
## Inserted the Scan Sequence: Scan_Sequence
scan ( +, "scan_cycle" ) := [
1 1 0 0 1 0 1 0 1 1 1 1 0 - - 0 1
- -
X X X X X X
- - ],
input [ "MREG_1_FULLSCAN" : "SS.2.1.1.8.13.1.1" ] ,
input [ "MREG_2_FULLSCAN" : "SS.2.1.1.8.13.1.1" ] ,
output [ "MREG_1_FULLSCAN" : "SS.2.1.1.8.12.4.1" ] ,
output [ "MREG_2_FULLSCAN" : "SS.2.1.1.8.12.4.1" ] ;
##***************************************************************************##
## TEST SEQUENCE.............14 TYPE......................normal ##
##***************************************************************************##
- - ],
input [ "MREG_1_FULLSCAN" : "SS.2.1.1.8.14.1.1" ] ,
input [ "MREG_2_FULLSCAN" : "SS.2.1.1.8.14.1.1" ] ,
output [ "MREG_1_FULLSCAN" : "SS.2.1.1.8.13.4.1" ] ,
output [ "MREG_2_FULLSCAN" : "SS.2.1.1.8.13.4.1" ] ;
## Processing the Static: EVENT 2.1.1.8.14.2.1: Stim_PI:
## Processing the Static: EVENT 2.1.1.8.14.2.2: Measure_PO:
vector ( +, "test_cycle_lssd" ) := [
0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 1 0
- -
0 0 0 0 0 0
0 0 ];
## Processing the Static: EVENT 2.1.1.8.14.3.1: Pulse:
vector ( +, "test_cycle_lssd" ) := [
0 0 1 0 1 1 0 0 0 0 0 0 1 1 0 1 0
Z Z
X X X X X X
- - ];
## Processing the Static: EVENT 2.1.1.8.14.4.1: Skewed_Scan_Unload:
## Inserted the Scan Sequence: Scan_Preconditioning_Sequence
vector ( +, "test_cycle_lssd" ) := [
0 0 0 0 1 1 0 0 1 1 1 0 0 1 0 0 1
Z Z
X X X X X X
- - ];
vector ( +, "test_cycle_lssd" ) := [
0 0 0 0 1 1 0 0 1 1 1 0 0 1 0 0 1
Z Z
X X X X X X
- - ];
## Inserted the Scan Sequence: Skewed_Unload_Sequence
vector ( +, "test_cycle_lssd" ) := [
0 1 0 0 1 1 0 0 1 1 1 0 0 1 0 0 1
Z Z
X X X X X X
- - ];
## Inserted the Scan Sequence: Scan_Sequence
scan ( +, "scan_cycle" ) := [
1 1 0 0 1 1 0 0 1 1 1 0 0 1 0 0 1
- -
X X X X X X
- - ],
output [ "MREG_1_FULLSCAN" : "SS.2.1.1.8.14.4.1" ] ,
output [ "MREG_2_FULLSCAN" : "SS.2.1.1.8.14.4.1" ] ;
## Inserted final non-scan Pattern
vector ( +, "test_cycle_lssd" ) := [
0 0 0 0 1 1 0 0 1 1 1 0 0 X X 0 1
Z Z
X X X X X X
- - ];
end end
waveform "WGL.DRVRCV.driver_receiver.ex1.ts1"
include "WGL.DRVRCV.signals";
##***************************************************************************##
## TIMING DEFINITIONS ##
##***************************************************************************##
scanstate
"SS.1.1.1.2.1.1.1" :=
"MREG_1_DRVRCV" ( 11)
"MREG_2_DRVRCV" ( 001010100010001110100010100010001101110001100100000100) ;
"SS.1.1.1.2.1.6.1" :=
"MREG_1_DRVRCV" ( 11)
"MREG_2_DRVRCV" ( 00101010001000111010001010001000110111000110010001011) ;
"SS.1.1.1.3.1.1.1" :=
"MREG_1_DRVRCV" ( 10)
"MREG_2_DRVRCV" ( 111110101100110011110011011001111000111101011010110111) ;
.
.
.
"SS.1.1.1.25.19.1.1" :=
"MREG_1_DRVRCV" ( 11)
"MREG_2_DRVRCV" ( 010001101111110110001110111101110100111100001010111000) ;
"SS.1.1.1.25.19.4.1" :=
"MREG_1_DRVRCV" ( 11)
"MREG_2_DRVRCV" ( 010001101111110110001110111101110100111101000101011100) ;
end
##***************************************************************************##
## TEST VECTORS ##
##***************************************************************************##
pattern MAIN ( "A2", "A4", "A5", "A6", "A7", "A8", "B0", "B1", "B3", "B4",
"B6", "B7", "B8", "E1", "F3", "F4", "I0", "I1", "L0", "L1",
"L2", "L3", "S0", "S1", "T0",
"60", "61", "70" )
##***************************************************************************##
## TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no ##
## TEST PROCEDURE............1 TYPE......................init ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## TEST SEQUENCE.............1 TYPE......................init ##
##***************************************************************************##
##***************************************************************************##
## TEST PROCEDURE............2 TYPE......................normal ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## STATIC FAULTS.............3553 PERCENT STATIC FAULTS.....8.743049 ##
## DRI/REC FAULTS............54 PERCENT DRI/REC FAULTS....9.246575 ##
## TEST SEQUENCE.............1 TYPE......................normal ##
##***************************************************************************##
##***************************************************************************##
## TEST SEQUENCE.............2 TYPE......................normal ##
##***************************************************************************##
##***************************************************************************##
## TEST SEQUENCE.............3 TYPE......................normal ##
##***************************************************************************##
##***************************************************************************##
## TEST SEQUENCE.............19 TYPE......................normal ##
##***************************************************************************##
0 0 1 0 1 0 0 0 0 0 1 0 0 1 1 X X 0 1 1 0 0 0 1 1
X X X ];
end end
waveform "WGL.IDDQ.IDDq.ex1.ts1"
include "WGL.IDDQ.signals";
##***************************************************************************##
## TIMING DEFINITIONS ##
##***************************************************************************##
scanstate
"SS.1.1.1.2.1.1.1" :=
"MREG_1_IDDQ" ( 00)
"MREG_2_IDDQ" ( 101111111011110100001001101011010111010011101100010...) ;
"SS.1.1.1.3.1.1.1" :=
"MREG_1_IDDQ" ( 11)
"MREG_2_IDDQ" ( 110011000111110110110000010110110010001100101111001...) ;
"SS.1.1.1.4.1.1.1" :=
"MREG_1_IDDQ" ( 00)
"MREG_2_IDDQ" ( 111001110111000000000111000000001011111111011000000...) ;
.
.
.
"SS.1.1.1.91.1.1.1" :=
"MREG_1_IDDQ" ( 11)
"MREG_2_IDDQ" ( 00101100110010011111100000110110100000101000000000...) ;
"SS.1.1.1.92.1.1.1" :=
"MREG_1_IDDQ" ( 00)
"MREG_2_IDDQ" ( 11111111111111111111111111111111111111111001100100...) ;
end
##***************************************************************************##
## TEST VECTORS ##
##***************************************************************************##
pattern MAIN ( "A2", "A4", "A5", "A6", "A7", "A8", "B0", "B1", "B3", "B4",
"B6", "B7", "B8", "E1", "F3", "F4", "I0", "I1", "L0", "L1",
"L2", "L3", "S0", "S1", "T0", "60", "61", "70" )
##***************************************************************************##
## TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no ##
## TEST PROCEDURE............1 TYPE......................init ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## TEST SEQUENCE.............1 TYPE......................init ##
##***************************************************************************##
vector ( +, "test_cycle_IDDQ" ) := [
0 X X 0 1 0 0 0 0 0 X 0 0 X X X X X X X 0 0 X X X
X X X ];
##***************************************************************************##
## TEST PROCEDURE............2 TYPE......................normal ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## IDDQ FAULTS...............8160 PERCENT IDDQ FAULTS.......20.079729 ##
## TEST SEQUENCE.............1 TYPE......................normal ##
##***************************************************************************##
waveform "WGL.IOWRAP.IOWRAP_stuck_driver.ex1.ts1"
include "WGL.IOWRAP.signals";
##***************************************************************************##
## TIMING DEFINITIONS ##
##***************************************************************************##
##***************************************************************************##
## DEFINE SCAN STATES ##
##***************************************************************************##
scanstate
"SS.1.1.1.2.1.1.1" :=
"MREG_1_IOWRAP" ( 0000110101001000110001011001100111111111111...) ;
"SS.1.1.1.2.1.5.1" :=
"MREG_1_IOWRAP" ( 1011000000000000001100010001010000000000000...) ;
"SS.1.1.1.2.2.1.1" :=
"MREG_1_IOWRAP" ( 1011010001100001001111011000111000111100000...) ;
"SS.1.1.1.2.2.5.1" :=
"MREG_1_IOWRAP" ( 0000000000000000001100111111010000000011111...) ;
end
##***************************************************************************##
## TEST VECTORS ##
##***************************************************************************##
##***************************************************************************##
## TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no ##
## TEST PROCEDURE............1 TYPE......................init ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## TEST SEQUENCE.............1 TYPE......................init ##
##***************************************************************************##
##***************************************************************************##
## TEST PROCEDURE............2 TYPE......................normal ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## TEST SEQUENCE.............1 TYPE......................normal ##
##***************************************************************************##
## Processing the Static: EVENT 1.1.1.2.1.1.1: Scan_Load:
## Inserted the Scan Sequence: Scan_Preconditioning_Sequence
vector ( +, "test_cycle_IOWRAP" ) := [
0 0 1 1 0 1 1 X X 0 1 0 0 X 0 X
Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z ...Z
X
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ];
## Inserted the Scan Sequence: Scan_Sequence
scan ( +, "scan_cycle" ) := [
b 0 0 0 0 0 1 1 X X 0 1 0 0 X 0 -
Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z ...Z
X
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ];
input [ "MREG_1_IOWRAP" : "SS.1.1.1.2.1.1.1" ] ;
##***************************************************************************##
## TEST SEQUENCE.............2 TYPE......................normal ##
##***************************************************************************##
end end
waveform "WGL.IOWRAP.IOWRAP_shorted_nets_2*logn.ex1.ts2"
include "WGL.IOWRAP.signals";
##***************************************************************************##
## TIMING DEFINITIONS ##
##***************************************************************************##
end
##***************************************************************************##
## DEFINE SCAN STATES ##
##***************************************************************************##
scanstate
"SS.1.2.1.2.1.1.1" :=
"MREG_1_IOWRAP" ( 01101110001101101011100111100011110100001...) ;
11001001101010101000101010010) ;
"SS.1.2.1.2.1.5.1" :=
"MREG_1_IOWRAP" ( X1XX0101001101101011000111100100000000XXX...) ;
"SS.1.2.1.3.1.1.1" :=
"MREG_1_IOWRAP" ( 01101101100111011100111100100110110011100...) ;
.
.
.
"SS.1.2.1.16.1.5.1" :=
"MREG_1_IOWRAP" ( 00000000000000000011000110011100000000111...) ;
"SS.1.2.1.17.1.1.1" :=
"MREG_1_IOWRAP" ( 10001010111101100111010010110001110101101...) ;
"SS.1.2.1.17.1.5.1" :=
"MREG_1_IOWRAP" ( X1XX1001111101100111001110110000000000XXX...) ;
end
##***************************************************************************##
## TEST VECTORS ##
##***************************************************************************##
##***************************************************************************##
## TEST PROCEDURE............2 TYPE......................normal ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## TEST SEQUENCE.............1 TYPE......................normal ##
##***************************************************************************##
##***************************************************************************##
## TEST PROCEDURE............17 TYPE......................normal ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## TEST SEQUENCE.............1 TYPE......................normal ##
##***************************************************************************##
0 0 1 1 0 1 1 1 X 0 1 0 0 0 0 1
Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z ... Z
X
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ];
## Inserted the Scan Sequence: Skewed_Unload_Sequence
vector ( +, "test_cycle_IOWRAP" ) := [
0 0 0 1 0 1 1 1 X 0 1 0 0 0 0 1
Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z ... Z
X
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ];
## Inserted the Scan Sequence: Scan_Sequence
scan ( +, "scan_cycle" ) := [
0 0 0 0 0 1 1 1 X 0 1 0 0 0 0 -
Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z ... Z
X
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ];
input [ "MREG_1_IOWRAP" : "SS.1.2.1.17.1.1.1" ] ,
output [ "MREG_1_IOWRAP" : "SS.1.2.1.16.1.5.1" ] ;
signal
waveform "WGL.MACRO.macro.ex1.ts1"
include "WGL.MACRO.signals";
##***************************************************************************##
## TIMING DEFINITIONS ##
##***************************************************************************##
scanstate
end
##***************************************************************************##
## TEST VECTORS ##
##***************************************************************************##
##***************************************************************************##
## TESTER LOOP...............1 PROCEDURES HAVE MEMORY....yes ##
## TEST PROCEDURE............1 TYPE......................init ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## TEST SEQUENCE.............1 TYPE......................init ##
##***************************************************************************##
##***************************************************************************##
## TEST PROCEDURE............3 TYPE......................normal ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....yes ##
## TEST SEQUENCE.............1 TYPE......................normal ##
##***************************************************************************##
##***************************************************************************##
## TEST PROCEDURE............9 TYPE......................normal ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....yes ##
## TEST SEQUENCE.............1 TYPE......................normal ##
##***************************************************************************##
##***************************************************************************##
## TEST PROCEDURE............10 TYPE......................normal ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....yes ##
## TEST SEQUENCE.............1 TYPE......................normal ##
##***************************************************************************##
signal
"A0180" : bidir; ## pinName = A0180; tf = BIDI ; testOffset = 0; scanOffset = 16;
"A0181" : bidir; ## pinName = A0181; tf = BIDI ; testOffset = 0; scanOffset = 16;
"A0182" : bidir; ## pinName = A0182; tf = BIDI ; testOffset = 0; scanOffset = 16;
"A0183" : bidir; ## pinName = A0183; tf = BIDI ; testOffset = 0; scanOffset = 16;
"A0184" : bidir; ## pinName = A0184; tf = BIDI ; testOffset = 0; scanOffset = 16;
"A0185" : bidir; ## pinName = A0185; tf = BIDI ; testOffset = 0; scanOffset = 16;
"A0186" : bidir; ## pinName = A0186; tf = BIDI ; testOffset = 0; scanOffset = 16;
"A0187" : bidir; ## pinName = A0187; tf = BIDI ; testOffset = 0; scanOffset = 16;
"A0188" : bidir; ## pinName = A0188; tf = BIDI ; testOffset = 0; scanOffset = 16;
"A0189" : bidir; ## pinName = A0189; tf = BIDI ; testOffset = 0; scanOffset = 16;
"A0190" : bidir; ## pinName = A0190; tf = BIDI ; testOffset = 0; scanOffset = 16;
.
.
.
"A0175" : output; ## pinName = A0175; tf = BDY ;
"A0176" : output; ## pinName = A0176; tf = SO ;
"A0177" : output; ## pinName = A0177;
"A0178" : output; ## pinName = A0178;
"A0179" : output; ## pinName = A0179;
end
scancell
"$blk_MBAA0BO.$blk_0000100.$blk_slave";
"$blk_MBAA1A4.$blk_0000100.$blk_slave";
"$blk_MBAA1A6.$blk_0000100.$blk_slave";
"$blk_MBAA1AX.$blk_0000100.$blk_slave";
"$blk_MBAA1AY.$blk_0000100.$blk_slave";
"$blk_MBAA1BN.$blk_0000100.$blk_slave";
.
.
.
"$blk_MBAENBE.$blk_0000100.$blk_slave";
"$blk_MBAENBF.$blk_0000100.$blk_slave";
"$blk_MBAENBG.$blk_0000100.$blk_slave";
"$blk_MBAENBH.$blk_0000100.$blk_slave";
"$blk_MBAENBI.$blk_0000100.$blk_slave";
end
scanchain
"MREG_1_SP_WAFER_AC" [
"C0170",
"$blk_MBADUBS.$blk_0000100.$blk_slave",
"$blk_MBAD0A7.$blk_0000100.$blk_slave",
"$blk_MBAD6AH.$blk_0000100.$blk_slave",
"$blk_MBADTAU.$blk_0000100.$blk_slave",
"$blk_MBADVBP.$blk_0000100.$blk_slave",
"$blk_MBADTAL.$blk_0000100.$blk_slave",
"$blk_MBAD3BN.$blk_0000100.$blk_slave",
.
.
.
"$blk_MBAEIAC.$blk_0000100.$blk_slave",
"$blk_MBAEDA3.$blk_0000100.$blk_slave",
"$blk_MBAEGA6.$blk_0000100.$blk_slave",
"A0174"
];
"MREG_2_SP_WAFER_AC" [
"C0161",
"$blk_MBAAIBT.$blk_0000100.$blk_slave",
"$blk_MBAA1BN.$blk_0000100.$blk_slave",
"$blk_MBAABBD.$blk_0000100.$blk_slave",
"$blk_MBAA3A3.$blk_0000100.$blk_slave",
.
.
.
"$blk_MBAENA3.$blk_0000100.$blk_slave",
"$blk_MBAENAK.$blk_0000100.$blk_slave",
"$blk_MBAENAG.$blk_0000100.$blk_slave",
"$blk_MBAEMBZ.$blk_0000100.$blk_slave",
"$blk_MBAENAJ.$blk_0000100.$blk_slave",
"$blk_MBAEMB1.$blk_0000100.$blk_slave",
"A0176"
];
end
waveform "WGL.SP_WAFER_AC.logic.ex2.ts1"
include "WGL.SP_WAFER_AC.signals";
##***************************************************************************##
## TIMING DEFINITIONS ##
##***************************************************************************##
scanstate
## The Following is StimLatchExtra A.
"SS.2.1.1.2.1.1.1" :=
"MREG_2_SP_WAFER_AC" ( 00101010001100011110010101101011000000110...1)
"MREG_1_SP_WAFER_AC" ( 00111011010001000100101010010001000101001...1)
"SS.2.1.1.2.1.4.1" :=
"MREG_1_SP_WAFER_AC" ( 10101011101001011110101010001001000001000...1)
"MREG_2_SP_WAFER_AC" ( 00000100100001001101100101100011010101110...1)
## The Following is StimLatchExtra A.
"SS.2.1.1.3.1.1.1" :=
"MREG_2_SP_WAFER_AC" ( 01100001001000010101000110011001011001110...1)
"MREG_1_SP_WAFER_AC" ( 11001001110011010100010000101011101011001...1)
"SS.2.1.1.3.1.4.1" :=
"MREG_1_SP_WAFER_AC" ( 11100100111000110010001000010111110001100...1)
"MREG_2_SP_WAFER_AC" ( 00110000100100001010100011001100101100111...1)
.
.
.
## The Following is StimLatchExtra A.
"SS.2.1.1.130.28.1.1" :=
"MREG_2_SP_WAFER_AC" ( 00001000100111100101010011001000100111000...1)
"MREG_1_SP_WAFER_AC" ( 10110010001111000000010100000000000000001...1)
"SS.2.1.1.130.28.5.1" :=
"MREG_1_SP_WAFER_AC" ( 11011001110100100000001010000000000000000...1)
"MREG_2_SP_WAFER_AC" ( 00101000000100110000001011100100011011100...1)
end
##***************************************************************************##
## TEST VECTORS ##
##***************************************************************************##
##***************************************************************************##
## TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no ##
## TEST PROCEDURE............1 TYPE......................init ##
## SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no ##
## TEST SEQUENCE.............1 TYPE......................init ##
##***************************************************************************##
##***************************************************************************##
## TEST PROCEDURE............2 TYPE......................normal ##
## SLOW TO TURN OFF..........true SEQUENCES HAVE MEMORY.....no ##
## STATIC FAULTS.............10279 PERCENT STATIC FAULTS.....55.604004 ##
## DYNAMIC FAULTS............1871 PERCENT DYNAMIC FAULTS....31.914642 ##
## TEST SEQUENCE.............1 TYPE......................normal ##
##***************************************************************************##
## Processing the Static: EVENT 2.1.1.2.1.1.1: l froSkewed_Scan_Load:
## Inserted the Scan Sequence: Scan_Preconditioning_Sequence
vector ( +, "test_cycle_SP_WAFER_AC" ) := [
0 X X X 0 0 1 0 0
Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z . . . Z
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . . . X
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -];
vector ( +, "test_cycle_SP_WAFER_AC" ) := [
0 X X X 0 0 1 0 0
Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z . . . Z
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . . . X
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -];
## Inserted the Scan Sequence: Scan_Sequence
scan ( +, "scan_cycle" ) := [
1 X X X 0 0 1 0 0
Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z . . . Z
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . . . X
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -];
input [ "MREG_2_SP_WAFER_AC" : "SS.2.1.1.2.1.1.1" ] ,
input [ "MREG_1_SP_WAFER_AC" : "SS.2.1.1.2.1.1.1" ] ;
## Inserted the Scan Sequence: Skewed_Load_Sequence
vector ( +, "test_cycle_SP_WAFER_AC" ) := [
0 X X X 0 0 1 0 0
Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z . . . Z
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . . . X
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -];
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -];
## Inserted the Scan Sequence: Scan_Sequence
scan ( +, "scan_cycle" ) := [
1 X X X 0 0 1 0 0
Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z . . . Z
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . . . X
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -];
input [ "MREG_2_SP_WAFER_AC" : "SS.2.1.1.130.28.1.1" ] ,
input [ "MREG_1_SP_WAFER_AC" : "SS.2.1.1.130.28.1.1" ] ,
output [ "MREG_1_SP_WAFER_AC" : "SS.2.1.1.130.27.5.1" ] ,
output [ "MREG_2_SP_WAFER_AC" : "SS.2.1.1.130.27.5.1" ] ;
## Inserted the Scan Sequence: Skewed_Load_Sequence
vector ( +, "test_cycle_SP_WAFER_AC" ) := [
0 X X X 0 0 1 0 0
Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z . . . Z
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X . . . X
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -];
.
.
.
D
STIL Pattern Data Examples
This section provides examples of STIL format which are typical for Deterministic Logic tests,
Macro tests, LBIST tests, and ICT tests.
■ “Deterministic STIL Pattern Data Examples” on page 263
■ “Timed Dynamic STIL Pattern Data Examples” on page 280
//***************************************************************************//
// STIL SIGNALS FILE //
// Encounter(TM) Test 2.0.0 Feb 24, 2004 (aix43_64 TDA20) //
//*************************************************************************** //
// //
// FILE CREATED..............February 24, 2004 at 10:33:48 //
// //
// PROJECT NAME..............lbc //
// //
// TESTMODE..................lssd //
// //
// TDR.......................dummy_tester_lssd //
// //
// TEST PERIOD...............80 TEST STROBE TYPE..........edge //
// TEST PULSE WIDTH..........8 TEST TIME UNITS...........ns //
// TEST PI OFFSET............0 //
// TEST BIDI OFFSET..........0 //
// TEST STROBE OFFSET........72 X VALUE...................Z //
// //
// SCAN PERIOD...............80 SCAN STROBE TYPE..........edge //
// SCAN PULSE WIDTH..........8 SCAN TIME UNITS...........ns //
// SCAN PI OFFSET............16 //
// SCAN BIDI OFFSET..........16 //
// SCAN STROBE OFFSET........0 SCAN OVERLAP..............yes //
// //
//***************************************************************************//
//***************************************************************************//
// DEFINE SIGNALS //
//***************************************************************************//
Signals {
"A" In; // pinName = A; tf = -AC ; piEntry = 1; hierIndex = 0; . . .
"B" In; // pinName = B; tf = -BC ; piEntry = 2; hierIndex = 1; . . .
"C" In; // pinName = C; tf = -SC ; piEntry = 3; hierIndex = 2; . . .
"CS" In; // pinName = CS; piEntry = 4; hierIndex = 3; flatIndex . . .
.
.
.
"DO3" Out; // pinName = DO3; poEntry = 3; hierIndex = 19; . . .
"DO4" Out; // pinName = DO4; poEntry = 4; hierIndex = 20; . . .
"SO1" Out; // pinName = SO1; poEntry = 5; hierIndex = 21; . . .
"SO2" Out; // pinName = SO2; poEntry = 7; hierIndex = 23; . . .
}
//***************************************************************************//
// DEFINE SIGNAL GROUPS //
//***************************************************************************//
SignalGroups {
"ALLPIs" = ’"A"+"B"+"C"+"CS"+"DI1"+"DI2"+"DI3"+"DI4"+"ENABLE1"+"ENABLE2"
+"ME"+"PS"+"SEL"+"SI1"+"SI2"+"ST1"+"ST2"’;
"ALLPOs" = ’"DO1"+"DO2"+"DO3"+"DO4"+"SO1"+"SO2"’;
"ALLIOs" = ’"SO1_BIDI"+"SO2_BIDI"’;
"ALLACs_lssd" = ’"A"’;
"ALLBCs_lssd" = ’"B"’;
"ALLSIs_lssd" = ’"SI0001_lssd"+"SI0002_lssd"’;
"ALLSOs_lssd" = ’"SO0001_lssd"+"SO0002_lssd"’;
}
//***************************************************************************//
// DEFINE MACROS //
//***************************************************************************//
MacroDefs {
"TEST" { WaveformTable "test_cycle";
Vector {
"ALLPIs" = %;
"ALLPOs" = %;
"ALLIOs" = %; } }
//***************************************************************************//
// STIL VECTOR FILE //
// Encounter(TM) Test 2.0.0 Feb 24, 2004 (aix43_64 TDA20) //
//***************************************************************************//
// //
// FILE CREATED..............February 24, 2004 at 10:33:48 //
// //
// PROJECT NAME..............lbc //
// //
// TESTMODE..................lssd //
// //
// TDR.......................dummy_tester_lssd //
// //
// TEST PERIOD...............80 TEST STROBE TYPE..........edge //
// TEST PULSE WIDTH..........8 TEST TIME UNITS...........ns //
// TEST PI OFFSET............0 //
// TEST BIDI OFFSET..........0 //
// TEST STROBE OFFSET........72 X VALUE...................Z //
// //
// SCAN PERIOD...............80 SCAN STROBE TYPE..........edge //
// SCAN PULSE WIDTH..........8 SCAN TIME UNITS...........ns //
// SCAN PI OFFSET............16 //
// SCAN BIDI OFFSET..........16 //
// SCAN STROBE OFFSET........0 SCAN OVERLAP..............yes //
// //
// EXPERIMENT................1 DATA FORMAT...............binary //
// //
// TEST SECTION..............1 TEST SECTION TYPE.........flush //
// TESTER TERMINATION........0 TERMINATION DOMINATION....tester //
// //
//***************************************************************************//
Include "STIL.lssd.signals";
//***************************************************************************//
// TIMING DEFINITIONS //
//***************************************************************************//
Timing {
//***************************************************************************//
// TEST VECTORS //
//***************************************************************************//
PatternBurst
MAIN_BRST { Termination { "ALLPOs" TerminateLow; "ALLIOs" TerminateLow; }
PatList { MAIN_TEST; } }
PatternExec
MAIN_EXEC { PatternBurst MAIN_BRST; }
Pattern
MAIN_TEST {
//***************************************************************************//
// TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no //
// TEST PROCEDURE............1 TYPE......................init //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// TEST SEQUENCE.............1 TYPE......................init //
//***************************************************************************//
//***************************************************************************//
// TEST PROCEDURE............2 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....yes //
// TEST SEQUENCE.............1 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST SEQUENCE.............2 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST SEQUENCE.............5 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// STIL VECTOR FILE //
// Encounter(TM) Test 2.0.0 Feb 24, 2004 (aix43_64 TDA20) //
//***************************************************************************//
// //
// FILE CREATED..............February 24, 2004 at 10:33:48 //
// //
// PROJECT NAME..............lbc //
// //
// TESTMODE..................lssd //
// //
// TDR.......................dummy_tester_lssd //
// //
// TEST PERIOD...............80 TEST STROBE TYPE..........edge //
// TEST PULSE WIDTH..........8 TEST TIME UNITS...........ns //
// TEST PI OFFSET............0 //
Include "STIL.lssd.signals";
//***************************************************************************//
// TIMING DEFINITIONS //
//***************************************************************************//
Timing {
//***************************************************************************//
// TEST VECTORS //
//***************************************************************************//
PatternBurst
MAIN_BRST { Termination { "ALLPOs" TerminateLow; "ALLIOs" TerminateLow; }
PatList { MAIN_TEST; } }
PatternExec
MAIN_EXEC { PatternBurst MAIN_BRST; }
Pattern
MAIN_TEST {
//***************************************************************************//
// TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no //
// TEST PROCEDURE............1 TYPE......................init //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// TEST SEQUENCE.............1 TYPE......................init //
//***************************************************************************//
//***************************************************************************//
// TEST PROCEDURE............2 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....yes //
// STATIC FAULTS.............571 PERCENT STATIC FAULTS.....54.277565 //
// TEST SEQUENCE.............1 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST SEQUENCE.............2 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST SEQUENCE.............2 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST SEQUENCE.............3 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST SEQUENCE.............7 TYPE......................normal //
//***************************************************************************//
// TDR.......................dummy_tester_lssd //
// //
// TEST PERIOD...............80 TEST STROBE TYPE..........edge //
// TEST PULSE WIDTH..........8 TEST TIME UNITS...........ns //
// TEST PI OFFSET............0 //
// TEST BIDI OFFSET..........0 //
// TEST STROBE OFFSET........72 X VALUE...................Z //
// //
// SCAN PERIOD...............80 SCAN STROBE TYPE..........edge //
// SCAN PULSE WIDTH..........8 SCAN TIME UNITS...........ns //
// SCAN PI OFFSET............16 //
// SCAN BIDI OFFSET..........16 //
// SCAN STROBE OFFSET........0 SCAN OVERLAP..............yes //
// //
// EXPERIMENT................2 DATA FORMAT...............binary //
// //
// TEST SECTION..............1 TEST SECTION TYPE.........logic //
// TESTER TERMINATION........0 TERMINATION DOMINATION....tester //
// //
//***************************************************************************//
Include "STIL.lssd.signals";
//***************************************************************************//
// TIMING DEFINITIONS //
//***************************************************************************//
Timing {
//***************************************************************************//
// TEST VECTORS //
//***************************************************************************//
PatternBurst
MAIN_BRST { Termination { "ALLPOs" TerminateLow; "ALLIOs" TerminateLow; }
PatList { MAIN_TEST; } }
PatternExec
MAIN_EXEC { PatternBurst MAIN_BRST; }
Pattern
MAIN_TEST {
//***************************************************************************//
// TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no //
// TEST PROCEDURE............1 TYPE......................init //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// TEST SEQUENCE.............1 TYPE......................init //
//***************************************************************************//
//***************************************************************************//
// TEST PROCEDURE............2 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// STATIC FAULTS.............18 PERCENT STATIC FAULTS.....55.988594 //
// TEST SEQUENCE.............1 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST SEQUENCE.............2 TYPE......................normal //
//***************************************************************************//
"ALLIOs" = ZZ; }
// Inserted the Scan Sequence: Scan_Sequence
Macro "SCAN_lssd" {
"SI0001_lssd" = 111000001;
"SI0002_lssd" = 0111000101111011; }
//***************************************************************************//
// TEST PROCEDURE............3 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// STATIC FAULTS.............4 PERCENT STATIC FAULTS.....56.368820 //
// TEST SEQUENCE.............1 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST SEQUENCE.............14 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST PROCEDURE............7 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// STATIC FAULTS.............103 PERCENT STATIC FAULTS.....80.228134 //
// TEST SEQUENCE.............1 TYPE......................normal //
//***************************************************************************//
Include "STIL.IDDQ.signals";
//***************************************************************************//
// TIMING DEFINITIONS //
//***************************************************************************//
Timing {
//***************************************************************************//
// TEST VECTORS //
//***************************************************************************//
PatternBurst
MAIN_BRST { Termination { "ALLPOs" TerminateLow; }
PatList { MAIN_TEST; } }
PatternExec
MAIN_EXEC { PatternBurst MAIN_BRST; }
Pattern
MAIN_TEST {
//***************************************************************************//
// TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no //
// TEST PROCEDURE............1 TYPE......................init //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// TEST SEQUENCE.............1 TYPE......................init //
//***************************************************************************//
//***************************************************************************//
// TEST PROCEDURE............2 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// IDDQ FAULTS...............8160 PERCENT IDDQ FAULTS.......20.079729 //
// TEST SEQUENCE.............1 TYPE......................normal //
//***************************************************************************//
Macro "TEST" {
"ALLPIs" = 001010000010P1ZZZZ110001Z;
"ALLPOs" = XXX; }
// Processing the Static: EVENT 1.1.1.2.1.3.1: StimPI:
Macro "TEST" {
"ALLPIs" = 01001
9 0 11000000100;
"ALLPOs" = XXX; }
// Processing the Static: EVENT 1.1.1.2.1.4.1: MeasureCurrent:
//***************************************************************************//
// TEST PROCEDURE............3 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// IDDQ FAULTS...............5364 PERCENT IDDQ FAULTS.......33.279198 //
// TEST SEQUENCE.............1 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST PROCEDURE............91 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// IDDQ FAULTS...............45 PERCENT IDDQ FAULTS.......99.606277 //
// TEST SEQUENCE.............1 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// TEST PROCEDURE............92 TYPE......................normal //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// IDDQ FAULTS...............41 PERCENT IDDQ FAULTS.......99.707169 //
// TEST SEQUENCE.............1 TYPE......................normal //
//***************************************************************************//
//***************************************************************************//
// DEFINE SIGNALS //
//***************************************************************************//
Signals {
"A0180" InOut; // pinName = A0180; tf = BIDI ; piEntry = 1; . . .
"A0181" InOut; // pinName = A0181; tf = BIDI ; piEntry = 2; . . .
"A0182" InOut; // pinName = A0182; tf = BIDI ; piEntry = 3; . . .
"A0183" InOut; // pinName = A0183; tf = BIDI ; piEntry = 4; . . .
"A0176" Out; // pinName = A0176; tf = SO ; poEntry = 77; . . .
"A0177" Out; // pinName = A0177; poEntry = 78; hierIndex = 8. . .
"A0178" Out; // pinName = A0178; poEntry = 79; hierIndex = 8. . .
"A0179" Out; // pinName = A0179; poEntry = 80; hierIndex = 8. . .
}
//***************************************************************************//
// DEFINE SIGNAL GROUPS //
//***************************************************************************//
SignalGroups {
"ALLPIs" = ’"A01A0"+"A01A1"+"A01A2"+"A01A3"+"A01A4"+"A01A5"+"A01A6"
+"A01A7"+"A01A8"’;
"ALLPOs" = ’"A0100"+"A0101"+"A0102"+"A0103"+"A0104"+"A0105"+"A0106"
+"A0107"+"A0108"+"A0109"+"A0110"+"A0111"+"A0112"+"A0113"+"A0114"
+"A0115"+"A0116"+"A0117"+"A0118"+"A0119"+"A0120"+"A0121"+"A0122"
+"A0123"+"A0124"+"A0125"+"A0126"+"A0127"+"A0128"+"A0129"+"A0130"
+"A0131"+"A0132"+"A0133"+"A0134"+"A0135"+"A0136"+"A0137"+"A0138"
+"A0139"+"A0140"+"A0141"+"A0142"+"A0143"+"A0144"+"A0145"+"A0146"
+"A0147"+"A0148"+"A0149"+"A0150"+"A0151"+"A0152"+"A0153"+"A0154"
+"A0155"+"A0156"+"A0157"+"A0158"+"A0159"+"A0160"+"A0161"+"A0162"
+"A0163"+"A0164"+"A0165"+"A0166"+"A0167"+"A0168"+"A0169"+"A0170"
+"A0171"+"A0172"+"A0173"+"A0174"+"A0175"+"A0176"+"A0177"+"A0178"
+"A0179"’;
"ALLIOs" = ’"A0180"+"A0181"+"A0182"+"A0183"+"A0184"+"A0185"+"A0186"
+"A0187"+"A0188"+"A0189"+"A0190"+"A0191"+"A0192"+"A0193"+"A0194"
+"A0195"+"A0196"+"A0197"+"A0198"+"A0199"+"B0100"+"B0101"+"B0102"
+"B0103"+"B0104"+"B0105"+"B0106"+"B0107"+"B0108"+"B0109"+"B0110"
+"B0111"+"B0112"+"B0113"+"B0114"+"B0115"+"B0116"+"B0117"+"B0118"
+"B0119"+"B0120"+"B0121"+"B0122"+"B0123"+"B0124"+"B0125"+"B0126"
+"B0127"+"B0128"+"B0129"+"B0130"+"B0131"+"B0132"+"B0133"+"B0134"
+"B0135"+"B0136"+"B0137"+"B0138"+"B0139"+"B0140"+"B0141"+"B0142"
+"B0143"+"B0144"+"B0145"+"B0146"+"B0147"+"B0148"+"B0149"+"B0150"
+"B0151"+"B0152"+"B0153"+"B0154"+"B0155"+"B0156"+"B0157"+"B0158"
+"B0159"+"B0160"+"B0161"+"B0162"+"B0163"+"B0164"+"B0165"+"B0166"
+"B0167"+"B0168"+"B0169"+"B0170"+"B0171"+"B0172"+"B0173"+"B0174"
+"B0175"+"B0176"+"B0177"+"B0178"+"B0179"+"B0180"+"B0181"+"B0182"
+"B0183"+"B0184"+"B0185"+"B0186"+"B0187"+"B0188"+"B0189"+"B0190"
+"B0191"+"B0192"+"B0193"+"B0194"+"B0195"+"B0196"+"B0197"+"B0198"
+"B0199"+"C0100"+"C0101"+"C0102"+"C0103"+"C0104"+"C0105"+"C0106"
+"C0107"+"C0108"+"C0109"+"C0110"+"C0111"+"C0112"+"C0113"+"C0114"
+"C0115"+"C0116"+"C0117"+"C0118"+"C0119"+"C0120"+"C0121"+"C0122"
+"C0123"+"C0124"+"C0125"+"C0126"+"C0127"+"C0128"+"C0129"+"C0130"
+"C0131"+"C0132"+"C0133"+"C0134"+"C0135"+"C0136"+"C0137"+"C0138"
+"C0139"+"C0140"+"C0141"+"C0142"+"C0143"+"C0144"+"C0145"+"C0146"
+"C0147"+"C0148"+"C0149"+"C0150"+"C0151"+"C0152"+"C0153"+"C0154"
+"C0155"+"C0156"+"C0157"+"C0158"+"C0159"+"C0160"+"C0161"+"C0162"
+"C0163"+"C0164"+"C0165"+"C0166"+"C0167"+"C0168"+"C0169"+"C0170"’;
"ALLACs_SP_WAFER_AC" = ’"C0167"’;
"ALLBCs_SP_WAFER_AC" = ’"A01A0"’;
"ALLSIs_SP_WAFER_AC" = ’"SI0001_SP_WAFER_AC"+"SI0002_SP_WAFER_AC"’;
"ALLSOs_SP_WAFER_AC" = ’"SO0001_SP_WAFER_AC"+"SO0002_SP_WAFER_AC"’;
}
//***************************************************************************//
// DEFINE MACROS //
//***************************************************************************//
MacroDefs {
"TEST" { WaveformTable "test_cycle";
Vector {
"ALLPIs" = %;
"ALLPOs" = %;
"ALLIOs" = %; } }
//***************************************************************************//
// TIMING DEFINITIONS //
//***************************************************************************//
Timing {
//***************************************************************************//
// TEST VECTORS //
//***************************************************************************//
PatternBurst
MAIN_BRST { Termination { "ALLPOs" TerminateLow; "ALLIOs" TerminateLow; }
PatList { MAIN_TEST; } }
PatternExec
MAIN_EXEC { PatternBurst MAIN_BRST; }
Pattern
MAIN_TEST {
//***************************************************************************//
// TESTER LOOP...............1 PROCEDURES HAVE MEMORY....no //
// TEST PROCEDURE............1 TYPE......................init //
// SLOW TO TURN OFF..........false SEQUENCES HAVE MEMORY.....no //
// TEST SEQUENCE.............1 TYPE......................init //
//***************************************************************************//
//***************************************************************************//
// TEST PROCEDURE............2 TYPE......................normal //
// SLOW TO TURN OFF..........true SEQUENCES HAVE MEMORY.....no //
// STATIC FAULTS.............10279 PERCENT STATIC FAULTS.....55.604004 //
// DYNAMIC FAULTS............1871 PERCENT DYNAMIC FAULTS....31.914642 //
// TEST SEQUENCE.............1 TYPE......................normal //
//***************************************************************************//
"ALLPIs" = PZZZ00100;
"ALLPOs" = 80 X ;
"ALLIOs" = 180 Z 0ZZ101001ZZ; }
// Inserted the Scan Sequence: Scan_Sequence
"2.1.1.130.28.5":
Macro "SCAN_SP_WAFER_AC" {
"SO0001_SP_WAFER_AC" = LLHHLLLLLLHLHHHLHHLHLHHLLHHLHLLHL . . .; }
"SO0002_SP_WAFER_AC" = LLHHHHHLHHHHHHLHHLLLLLHHLHLLLHHLL . . .; }
E
Verilog Pattern Data Examples
This section provides examples of Verilog format which are typical for deterministically
derived tests and LBIST tests, as produced by Encounter Test. All examples use a serial scan
format and a window strobe.
■ “Deterministic Test Verilog Examples” on page 287
■ “Timed Dynamic Verilog Pattern Data Examples” on page 299
`timescale 1 ns / 1 ps
module btv_IDDQ;
//***************************************************************************//
// DEFINE VARIABLES FOR ALL PRIMARY I/O PORTS //
//***************************************************************************//
//***************************************************************************//
// DEFINE VARIABLES FOR ALL SHIFT CHAINS //
//***************************************************************************//
//***************************************************************************//
// OTHER DEFINITIONS //
//***************************************************************************//
integer CYCLE, PInum, POnum, ORnum, MODENUM, EXPNUM, SCANOPNUM, SEQNUM, TASK
integer ERR, CMD, FID, TID, CNT, TOT, CID, LIX, MAX, FAILSETID;
integer sim_start [1:15], sim_count [1:15];
reg [1:8185] name_POs [1:0003];
//***************************************************************************//
// INSTANTIATE THE STRUCTURE AND CONNECT TO VERILOG VARIABLES //
//***************************************************************************//
BTV2
BTV2_inst (
.\60 (part_POs[0001]), // pinName = 60; tf = SO BDY ;
.\61 (part_POs[0002]), // pinName = 61; tf = BDY ;
.\70 (part_POs[0003]), // pinName = 70; tf = SO BDY ;
//***************************************************************************//
// MAKE SOME OTHER CONNECTIONS //
//***************************************************************************//
//***************************************************************************//
// OPEN THE FILE AND RUN SIMULATION //
//***************************************************************************//
initial
begin
FILE = 0;
sim_setup;
end
//***************************************************************************//
// DEFINE SIMULATION SETUP PROCEDURE //
//***************************************************************************//
task sim_setup;
begin
TOT = 0;
SOD = "";
EOD = "";
MAX = 1;
sim_trace = 1'b0;
sim_heart = 1'b0;
sim_range = 1'b1;
global_term = 1'bZ;
failset = 1'b0;
FAILSETID = 0;
end
endtask
//***************************************************************************//
// FAILSET SETUP PROCEDURE //
//***************************************************************************//
task failset_setup;
begin
end
endtask
//***************************************************************************//
// READ COMMANDS AND DATA AND RUN SIMULATION //
//***************************************************************************//
task sim_vector_file;
begin
ERR = 0;
LIX = 0;
stim_CIs = 0025'b0XX0100000X00XXXXXXX00XXX;
stim_SLs[0001:2070] = 2070'b0;
resp_MLs[0001:2070] = 2070'bX;
resp_POs = 0003'bX;
$display ( "\n200 INFO (TVE-200): Reading vector file: %0s [end TVE_20
case ( CMD )
100: begin
CNT = $fgets ( COMMENT, FID );
end
200: begin
CNT = $fscanf ( FID, "%b", stim_PIs[1:25] );
end
201: begin
CNT = $fscanf ( FID, "%b", stim_CIs[1:25] );
end
202: begin
CNT = $fscanf ( FID, "%b", resp_POs[1:3] );
end
203: begin
CNT = $fscanf ( FID, "%b", global_term );
end
204: begin
CNT = $fscanf ( FID, "%b", stim_SSs[1:2] );
end
300: begin
CNT = $fscanf ( FID, "%d", MODENUM );
case ( MODENUM )
3: begin
CNT = $fscanf ( FID, "%b", stim_SLs[1034:1035] );
CNT = $fscanf ( FID, "%b", stim_SLs[1036:2035] );
CNT = $fscanf ( FID, "%b", stim_SLs[2036:2070] );
end
endcase
end
301: begin
CNT = $fscanf ( FID, "%d", MODENUM );
case ( MODENUM )
3: begin
CNT = $fscanf ( FID, "%b", resp_MLs[1:2] );
CNT = $fscanf ( FID, "%b", resp_MLs[1036:2035] );
CNT = $fscanf ( FID, "%b", resp_MLs[2036:2070] );
end
endcase
end
400: begin
if ( sim_range ) test_cycle;
end
401: begin
if ( sim_range ) test_cycle_flush;
end
403: begin
if ( sim_range ) scan_cycle;
end
500: begin
LIX = LIX + 1;
CNT = $fscanf ( FID, "%d", sim_count[LIX] );
if ( sim_count[LIX] ) sim_start[LIX] = $ftell ( FID );
end
501: begin
sim_count[LIX] = sim_count[LIX] - 1;
if ( sim_count[LIX] ) CNT = $fseek ( FID, sim_start[LIX], 0 );
else LIX = LIX - 1;
end
600: begin
CNT = $fscanf ( FID, "%d", MODENUM );
case ( MODENUM )
3: begin
CNT = $fscanf ( FID, "%d", SEQNUM );
case ( SEQNUM )
1: begin
CNT = $fscanf ( FID, "%d", MAX );
if ( sim_range ) Scan_Preconditioning_Sequence_IDDQ;
end
2: begin
3: begin
CNT = $fscanf ( FID, "%d", MAX );
if ( sim_range ) Skewed_Unload_Sequence_IDDQ;
end
4: begin
CNT = $fscanf ( FID, "%d", MAX );
if ( sim_range ) Scan_Sequence_IDDQ;
end
5: begin
CNT = $fscanf ( FID, "%d", MAX );
if ( sim_range ) Skewed_Load_Sequence_IDDQ;
end
endcase
end
endcase
end
default: begin
$display ( "\n999 ERROR (TVE-999): Internal Program Error occurred
$display ( " Unrecognized command code = %0d \n", CMD );
end
endcase
end
end
endtask
//***************************************************************************//
// DEFINE TEST FLUSH PROCEDURE //
//***************************************************************************//
task test_cycle_flush;
begin
end
endtask
//***************************************************************************//
// DEFINE TEST PROCEDURE //
//***************************************************************************//
task test_cycle;
begin
end
endtask
//***************************************************************************//
// DEFINE SCAN PROCEDURE //
//***************************************************************************//
task scan_cycle;
begin
end
endtask
//***************************************************************************//
// DEFINE SCAN PRECOND PROCEDURE //
//***************************************************************************//
task Scan_Preconditioning_Sequence_IDDQ;
begin
test_cycle;
end
endtask
//***************************************************************************//
// DEFINE SCAN PRECOND BSR PROCEDURE //
//***************************************************************************//
task Scan_Preconditioning_Sequencebsr_IDDQ;
begin
end
endtask
//***************************************************************************//
// DEFINE SKEWED UNLOAD PROCEDURE //
//***************************************************************************//
task Skewed_Unload_Sequence_IDDQ;
begin
scan_cycle;
end
endtask
//***************************************************************************//
// DEFINE SCAN SEQUENCE PROCEDURE //
//***************************************************************************//
task Scan_Sequence_IDDQ;
begin
end
endtask
//***************************************************************************//
// DEFINE SKEWED LOAD PROCEDURE //
//***************************************************************************//
task Skewed_Load_Sequence_IDDQ;
begin
scan_cycle;
end
endtask
endmodule
`timescale 1 ns / 1 ps
module mbi_SP_WAFER_AC;
//***************************************************************************//
// DEFINE VARIABLES FOR ALL PRIMARY I/O PORTS //
//***************************************************************************//
//***************************************************************************//
// DEFINE VARIABLES FOR ALL SHIFT CHAINS //
//***************************************************************************//
//***************************************************************************//
// OTHER DEFINITIONS //
//***************************************************************************//
integer CYCLE, PInum, POnum, ORnum, MODENUM, EXPNUM, SCANOPNUM, SEQNUM, TASK
integer ERR, CMD, FID, TID, CNT, TOT, CID, LIX, MAX, FAILSETID;
integer sim_start [1:15], sim_count [1:15];
reg [1:8185] name_POs [1:0271];
reg sim_trace, sim_heart, sim_range, failset, global_term;
reg [1:800] PATTERN, pattern, TESTFILE, SOD, EOD;
reg [1:8184] FILE, COMMENT;
reg no_Pin_Found;
//***************************************************************************//
// INSTANTIATE THE STRUCTURE AND CONNECT TO VERILOG VARIABLES //
//***************************************************************************//
IE06303
IE06303_inst (
.A0100 (part_POs[0001]), // pinName = A0100;
.A0101 (part_POs[0002]), // pinName = A0101;
.A0102 (part_POs[0003]), // pinName = A0102;
.
.
.
.A01A5 (part_PIs[0026]), // pinName = A01A5; tf = -BI -OI
.A01A6 (part_PIs[0027]), // pinName = A01A6; tf = +SE -BI
.A01A7 (part_PIs[0028]), // pinName = A01A7; tf = -TI ; te
.A01A8 (part_PIs[0029])); // pinName = A01A8; tf = -SE ; t
//***************************************************************************//
// MAKE SOME OTHER CONNECTIONS //
//***************************************************************************//
//***************************************************************************//
// OPEN THE FILE AND RUN SIMULATION //
//***************************************************************************//
initial
begin
FILE = 0;
sim_setup;
end
//***************************************************************************//
// DEFINE SIMULATION SETUP PROCEDURE //
//***************************************************************************//
task sim_setup;
begin
TOT = 0;
SOD = "";
EOD = "";
MAX = 1;
sim_trace = 1'b0;
sim_heart = 1'b0;
sim_range = 1'b1;
global_term = 1'bZ;
failset = 1'b0;
FAILSETID = 0;
end
endtask
//***************************************************************************//
// FAILSET SETUP PROCEDURE //
//***************************************************************************//
task failset_setup;
begin
end
endtask
//***************************************************************************//
// READ COMMANDS AND DATA AND RUN SIMULATION //
//***************************************************************************//
task sim_vector_file;
begin
ERR = 0;
LIX = 0;
stim_CIs = 0200'bXXXXXXXXXXXXXXXXXXXX0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
stim_SLs[0001:2556] = 2556'b0;
resp_MLs[0001:2556] = 2556'bX;
resp_POs = 0271'bX;
$display ( "\n200 INFO (TVE-200): Reading vector file: %0s [end TVE_20
case ( CMD )
100: begin
CNT = $fgets ( COMMENT, FID );
end
200: begin
CNT = $fscanf ( FID, "%b", stim_PIs[1:200] );
end
201: begin
CNT = $fscanf ( FID, "%b", stim_CIs[1:200] );
end
.
.
.
default: begin
$display ( "\n999 ERROR (TVE-999): Internal Program Error occurred
$display ( " Unrecognized command code = %0d \n", CMD );
end
endcase
end
end
endtask
//***************************************************************************//
// DEFINE TEST FLUSH PROCEDURE //
//***************************************************************************//
task test_cycle_flush;
begin
ERR = ERR + 1;
$display ( "\n650 WARNING (TVE-650): PO miscompare at pattern: %0s a
$display ( " Expected: %b Simulated: %b On Output: %
end
endtask
//***************************************************************************//
// DEFINE TEST PROCEDURE //
//***************************************************************************//
task test_cycle;
begin
end
endtask
//***************************************************************************//
// DEFINE SCAN PROCEDURE //
//***************************************************************************//
task scan_cycle;
begin
end
endtask
//***************************************************************************//
// DEFINE SCAN PRECOND PROCEDURE //
//***************************************************************************//
task Scan_Preconditioning_Sequence_SP_WAFER_AC;
begin
test_cycle;
test_cycle;
end
endtask
//***************************************************************************//
// DEFINE SCAN PRECOND BSR PROCEDURE //
//***************************************************************************//
task Scan_Preconditioning_Sequencebsr_SP_WAFER_AC;
begin
end
endtask
//***************************************************************************//
// DEFINE SKEWED UNLOAD PROCEDURE //
//***************************************************************************//
task Skewed_Unload_Sequence_SP_WAFER_AC;
begin
scan_cycle;
end
endtask
//***************************************************************************//
// DEFINE SCAN SEQUENCE PROCEDURE //
//***************************************************************************//
task Scan_Sequence_SP_WAFER_AC;
begin
ERR = ERR + 1;
$display ( "\n660 WARNING (TVE-660): SO miscompare at pattern: %0s a
$display ( " Expected: %0b Simulated: %0b On Output:
end
endtask
//***************************************************************************//
// DEFINE SKEWED LOAD PROCEDURE //
//***************************************************************************//
task Skewed_Load_Sequence_SP_WAFER_AC;
begin
scan_cycle;
end
endtask
//***************************************************************************//
// DEFINE TIMED TEST PROCEDURE //
//***************************************************************************//
task TBautoLogicSeq1_20001221220437_0;
begin
end
endtask
.
.
.
//***************************************************************************//
// DEFINE TIMED TEST PROCEDURE //
//***************************************************************************//
task TBautoLogicSeq226_20001221224029_0;
begin
end
endtask
endmodule
F
TBDpatt Language Syntax
Keyword - Keywords are a basic unit of the TBDpatt syntax. Keywords imply a specific
meaning to the TBDpatt parser. A keyword is an alphanumeric string that does not contain
white space. Keywords may contain underscores.
Delimiter - Delimiters are single characters that are used to signify the beginning and/or end
of a particular syntactic construct. For example, the end of a statement, the end of a list, or
the end of a list item. Whether or not a particular character is acting as a delimiter may depend
upon the context. For example, a blank, tab or newline serves as a delimiter among keywords,
but not within a string value. TBDpatt uses the following characters as delimiters:
Value - A value is a delimited string that appears in TBDpatt that has no implicit meaning to
the TBDpatt parser. Values typically appear on the right-hand side of an equal sign. Value
delimiters vary, depending on the context.
Attribute list - An attribute list is enclosed in parentheses, and the attributes are separated by
commas. Each attribute is either a keyword or keyword=value. Attribute lists may appear at
various locations within the TBDpatt file.
Vector - A vector is a series of logic values that fully specifies the value of a given set of pins
or blocks in the model. A vector is numbered by position from left to right, with the first position
being one. The correspondence between vector value position and the model entity to which
the value belongs is established by use of a vector correspondence file.
Block - This is a container for other blocks and data. A block has start and stop statements.
A block has scope, such that everything appearing after the start of the block and prior to the
end of the block is considered to be contained within that block. Blocks have attributes that
apply to the entire scope of the block. A block is started using the delimiter [, followed by the
required block type, followed by an optional block id. For example,
[ Test_Section 1.5;
signifies the beginning of the fifth test section block within the first experiment in a TBDpatt
file. Optionally, following the block id if it's present, else following the block type, is an attribute
list associated with that block. For instance,
[ Test_Section 1.5 (tester_termination=0,
termination_domination=tester);
specifies a pair of attribute values that are associated with Test Section 1.5. So, a complete
block construct has the following form:
[ Test_Section 1.5 (tester_termination=1,
termination_domination=tester);
[ Tester_Loop 1.5.1;
[ Test_Procedure 1.5.1.1;
...
] Test_Procedure 1.5.1.1;
] Tester_Loop 1.5.1;
...
]Test_Section 1.5;
Block ids are present only for the convenience of the human reader. When the TBDpatt file is
processed for input, block ids are ignored.
Tester_Loop
Test_Procedure
Test_Sequence
Pattern
Event - Events occur within pattern blocks, and the order in which the events appear
correspond to the point in the simulation at which a given event occurred. Events have an
optional associated id. As with block ids, event ids are useful only for the human reader, and
are ignored by the TBDpatt parsing program.
Each event has an associated type that identifies the kind of test data it contains. Each event
contains only one type of test data.
The format of the data contained within the event is dependent on the event type and the
global TBDpatt format.
[ Pattern 1.2.3.4.5.7;
Event 1.2.3.4.5.7.1 # Hey! This is really neat stuff...
Stim_PI ():
01100110;
] Pattern 1.2.3.4.5.7;
asterisk ::= *
bit ::= 0 | 1
bit_data ::=
bit_position = logic_value
channel_scan_attribute ::=
block_signature_register | skewed_load
| skewed_unload | fast_forward
| fast_forward_save
comment ::= #
{comment_character*}
comment_character::=
string_character |
! | @ | # | $ |
& | asterisk | ( | ) | + |
& | [ | ] |
/ | : | ; |
, | " | ’
d ::= decimal_digit
decimal_digit ::=
0 | positive_digit
decimal_fraction ::=
{unsigned_integer}.decimal_digit*
default_value ::=
0 | 1 | X |
scan_0 | scan_1
diagnostic_pin_type ::=
Driver | Receiver
event_name_and_data ::=
stim_measure_scan_pulse_response_or_expect_event |
lbist_or_wrpt_event |
miscellaneous_event |
experiment ::=
[ Experiment name {component}
({TDM});
{experiment_user_object*}
{ [ Test_Section {component}(test_section_attribute=
test_section_attribute {,test_section_attribute});
{test_section_user_object*}
{ [ Tester_Loop {component}
({procedures_have_memory});
{tester_loop_user_object*}
{ [ Test_Procedure {component}
({test_procedure_attribute{,test_procedure_attribute}*});
{test_procedure_user_object*}
{ [Test_Sequence {component}
({test_sequence_attribute{,test_sequence_attribute}*});
{test_sequence_user_object*}
{ [ Pattern {component}
({pattern_attribute{,pattern_attribute}*});
{pattern_user_object*}
{Event {component} event_name_and_data;}*
{event_user_object*}
] {Pattern} {component}; }*
] {Test_Sequence} {component}; }*
] {Test_Procedure} {component}; }*
] {Tester_Loop} {component}; }*
] {Test_Section} {component}; }*
] {Experiment {name}} {component};
fault_type ::=
static_faults | iddq_faults |
dynamic_faults | driverReceiver_faults
hierarchical_model_entity_name ::=
"character_string"
internal_logic_value ::=
0 | 1 | x | Z |
u | z | l | a |
b | c | d | m |
w | n | p | q |
H
internal_response_data ::=
node_identifier{time unsigned_integer
= internal_logic_value}*
iteration_attribute ::=
iteration_count | fast_forward
iteration_count ::=
iteration = positive_integer
lbist_or_wrpt_event ::=
Channel_Scan ({channel_scan_attribute
{,channel_scan_attribute}*});
| Connect_Tester_PRPG ({timed_type_attribute}): node_identifier*
| Effective_Cycle_Mask (): hex_string*
| Latch_Values (signature_event_attribute_list):
hex_string*
| Latch_Weight (): weight_data
| PI_Weight (): weight_data
| Product_PRPG_Signature (iteration_attribute):
Product_LFSR_State*
| Product_MISR_Signature
(signature_event_attribute_list): Product_LFSR_State*
| Pulse_Tester_PRPG_Clocks ({timed_type_attribute})
| Pulse_Tester_SISR_Clocks ({timed_type_attribute})
| Tester_PRPG_Seed (): tester_LFSR_state*
| Tester_PRPG_Signature (iteration_attribute):
tester_LFSR_state*
| Tester_SISR_Signature
(signature_event_attribute_list):
tester_LFSR_state*
| Tester_SISR_Mask (): bit_string
| Tester_SISR_Seed ({fast_forward}): tester_LFSR_state*
leading_zeros ::= 0*
load_data ::=
stim_vector_data | bit_data
load_event_attribute_list ::=
stimregister_id , number_shifts
logic_test_type ::=
static | dynamic
logic_value ::= 0 | 1 | x | Z
repeat_attribute
lowercase_alphabetic ::=
a | b | c | d |
e | f | g | h |
i | j | k | l |
m | n | o | p |
q | r | s | t |
u | v | w | x |
y | z
m ::= decimal_digit
macro_test_procedure_data ::=
[Macro_Test_Procedure(macro_operation=name);
] {Macro_Test_Procedure};
measure_event_data ::=
measure_vector_data | node_data*
measureregister_id ::=
real_integer
miscellaneous_event ::=
Apply (): name |
Begin_Test_Mode (): name |
Repeat (): positive_integer
node_data ::=
node_identifier = logic_value
number_shifts ::=
real_integer
one_half ::= -1
4
optional_timing_data_attribute ::= maximum_path_length=time
| minimum_path_length=time
| cycles_to_repeat
| early =
(unsigned_real_number,unsigned_real_number,unsigned_real_numbe
r)
| late =
(unsigned_real_number,unsigned_real_number,unsigned_real_numbe
r)
| delay_file_name="character_string"
|
delay_file_date_time_stamp="character_string"
|
delay_file_audit_string="character_string"
| VDD = "character_string"
| VTT = "character_string"
| temp = "character_string"
pattern_attribute ::=
pattern_type_attribute | miscompare
pattern_type ::=
static | dynamic |
begin_loop | end_loop
pattern_type_attribute ::=
pattern_type = pattern_type
pin_data ::=
pin_name=nodeID | {tf=polarity | test_func}
Pin_Timing_cycle ::=
tester_cycle time_cycle_info;
node_type timing_node_identifier;
polarity ::= + | - | Z
positive_digit ::=
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9
positive_integer ::=
{leading_zeros}positive_digit{decimal_digit*}
quoted_character_string ::=
"comment_character*"
real_integer ::=
unsigned_integer{.}
repeat_attribute ::=
repeat=positive_integer
| setup_seq_name
sequence_definition ::=
[ Define_Sequence name {datetime}
{component}
({seq_def_attribute_list}) ;
{seqdef_user_object*}
{ [ Pattern {component}
({pattern_attribute{,pattern_attribute}*});
{pattern_user_object*}
{Event {component} event_name_and_data;}*
] {Pattern} {component}; }*
] {Define_Sequence {name}}{component};
sequence_type ::=
modeinit | scanop
| scanentry | scansection
| scanexit | scanprecond
| skewunload | scansequence
| scanlastbit | skewload
| scansectionexit | loadsuffix
| prpgsave | prpgrestore
| test | setup
shorted_net_fault ::=
SNT on Net node_identifier
signature_event_attribute_list ::=
iteration_attribute{,final}
special_string_character ::=
. | _ | -
| $ | @
stim_measure_scan_pulse_response_or_expect_event ::=
| Skewed_Scan_Unload ({default_value_attribute}):
measure_event_data
| Expect ({timed_type_attribute}): expect_event_data
| Start_Osc ({start_osc_attribute_list}):
{node_identifier = polarity}*
| Stim_PPI ({timed_type_attribute}):
PPI_data*
| Stim_PPI_Clock ({timed_type_attribute}):
PPI_data*
| Stop_Osc : PPI_data*
stimregister_id ::=
real_integer
stim_vector_data ::=
{0 | 1 | x | Z |
.}*
lowercase_alphabetic |
uppercase_alphabetic | special_string_character
stuck_driver_fault ::=
SDT on diagnostic_pin_type Pin
node_identifier
t ::= decimal_digit
TBDpatt ::=
TBDpatt_Format ({mode
=mode_type,}model_entity_form=form_type );
{vector_correspondence_data}
{test_pattern_audit_summary}
experiment*
TBDseqPatt ::=
TBDpatt_Format ({mode
=mode_type,}model_entity_form=form_type );
{vector_correspondence_data}
{test_pattern_audit_summary}
sequence_definition*
termination_type ::=
0 | 1 | none
test_coverage_attribute ::=
fault_type=unsigned_integer
| percent_fault_type=
unsigned_real_number
tester_LFSR_state ::=
node_identifier = hex_string
test_func ::=
AC | AS | BC | BDY |
BI | BS | CI | CTL |
EC | ES | LH | ME |
OI | PC | PS | SC |
SG | SI | SO | TI |
NIL | NIC
test_procedure_type ::=
init | normal
test_section_attribute ::=
| tester_termination= termination_type
| termination_domination= domination_type
| test_type= logic_test_type
| test_section_type= test_section_type
| pin_timing
| tester_PRPGs
| tester_signatures
| product_PRPGs
| product_signatures
| fast_forward
| fast_forward_pins
| fast_forward_sequences
test_section_type ::=
logic | logic_WRP
| logic_LBIST | flush
| scan | driver_receiver
| macro | IDDq
| channel_scan
| IEEE_1149.1_integrity
| ICT_stuck_driver
| ICT_stuck_driver_diagnostic
| ICT_shorted_nets_log(n+2)
| ICT_shorted_nets_2*logn
| ICT_shorted_nets_n+1
| IOWRAP_stuck_driver
| IOWRAP_shorted_nets_log(n+2)
| IOWRAP_shorted_nets_2*logn
| IOWRAP_shorted_nets_n+1
| path
test_sequence_attribute ::=
| type = test_sequence_type
| miscompare
| seq_audit_attribute_list
test_sequence_type ::=
normal | init | setup |
loop_type
time_cycle_info ::=
time cycle positive_integer
timed_type ::=
release | propagate |
capture | none
timed_type_attribute ::=
timed_type = timed_type
time_scale ::=
ps | ns | us
| ms | s
{ObservePoints}
{Ignore_Measures}
{Setup_Patterns}
Pin_Timing
] {Timing_Data} {component};
timing_data_type ::=
manual | automatic
TimingType ::=
stim_PIs | stim_clocks |
stim_PPIs | stim_PPI_clocks |
leading_edge_of_pulse |
trailing_edge_of_pulse |
leading_edge_of_PPI_pulse | trailing_edge_of_PPI_pulse |
PO_strobe
TimingValues ::=
Rising | Falling | RorF | to_Z
unload_data ::=
measure_vector_data | bit_data
unload_event_attribute_list ::=
measureregister_id , number_shifts
unsigned_real_number ::=real_integer |
decimal_fraction
unweighted ::= -.
uppercase_alphabetic ::=
A | B | C | D |
E | F | G | H |
I | J | K | L |
M | N | O | P |
Q | R | S | T |
U | V | W |
X | Y | Z
weight ::=
S0 | S1 | A1 | A2 |
A3 | A4 | A5 | A6 |
A7 | O1 | O2 | O3 |
O4 | O5 | O6 | O7 |
unweighted | one_half
weight_bit_data ::=
weight_vector | {bit_position=weight}*
weight_data ::=
weight_vector |
{node_identifier=weight}*
y ::= decimal_digit
Index
Numerics default_value_attribute 316
Define_Sequence
1149.1 mode init example with user-supplied overview and attributes 112
custom scan sequence 211 types 114
diagnostic_pin_type 316
diagnostic_text 316
A diagobserve, sequence type attribute 116
diagreturn, sequence type attribute 117
AC TBDpatt example 208 domination_type 316
Appendix E, “STIL Pattern Data
Examples” 162
Appendix E, “Verilog Pattern Data E
Examples” 162
application object 111 Encounter Test
asterisk 315 pattern data examples 201
event - Diagnostic_Scan_Unload 56
event -
B Diagnostic_Skewed_Scan_Unload
56
bit 315 event - Dummy_Scan_Load 59
bit_data 315 event - Dummy_Scan_Unload 58
bit_position 315 event - Dummy_Skewed_Scan_Load 60
bit_string 315 event - Dummy_Skewed_Scan_Unload 57
event_name_and_data 316
event_user_object 316
C expect_event_data 316
experiment 316
channel_scan_attribute 315 experiment statement example 25
character_string 315 experiment_user_object 317
comment 315
comment_character 315
comments - TBDpatt 23 F
component 315
controlpipelinefill, sequence type fault_type 317
attribute 114 flat_index 317
customer service, contacting 9 force_event_attribute 317
form_type 317
D H
d 315
data 316 help, accessing 8
datetime 316 hex_string 317
decimal_digit 316 hierarchical_model_entity_name 317
decimal_fraction 316 hierblock_index 318
default_value 316
I mode_type 321
modeinit, sequence type attribute 114
ignore_data 318
Ignore_Latches 126
Ignore_Measures 126, 318 N
ignore_value 318
internal_logic_value 318 name 321
internal_response_data 318 node list format example 205
iteration_attribute 318 node_data 321
iteration_count 318 node_identifier 321
node_type 321
nodeID 321
K nonscanflush, sequence type attribute 117
non-uniform sequences 31
key 319 number_repeats 321
keyed data 139 number_shifts 321
keyed_data 319
O
L ObservePoints 321
language definition 314 one_half 322
language syntax 311 optional_timing_data_attribute 322
lbist_or_wrpt_event 319 optional_wait_osc_attribute 322
leading_zeros 319 osc_cycles_attribute 322
linehold_source 319 osc_down_attribute 322
Lineholds 319 osc_up_attribute 322
load_data 319
load_event_attribute_list 319
loadsuffix, sequence type attribute 118 P
logic_test_type 320
logic_value 320 pattern statement example 38
loop_type 320 pattern_attribute 322
lowercase_alphabetic 320 pattern_source object 133
pattern_type 322
pattern_type_attribute 322
M pattern_user_object 323
pi_vector_data 323
m 320 pin_data 323
macro_index 320 pin_name 323
macro_test_procedure_data 320 Pin_Timing 323
macro_test_sequence_data 320 Pin_Timing_cycle 323
macro_tester_loop_data 320 Pin_Timing_entry 323
measure_event_data 320 Pin_Timing_list 323
measure_register_data 321 po_vector_data 323
measure_vector_data 321 polarity 323
measureregister_id 321 positive_digit 323
miscellaneous_event 321 positive_integer 323
misrobserve, sequence type attribute 116 PPI_data 323
misrreset, sequence type attribute 116 PPI_name 324
PPI_value 324
real_integer 324
repeat_attribute 324 T
t 328
S TB_hiermodel_pin_index 328
TBDpatt 328
scan operation structure 199 TBDpatt file
scanentry, sequence type attribute 115 language definition 314
scanexit, sequence type attribute 115 language syntax 311
scanop, sequence type attribute 114 summary information 140
scanprecond, sequence type attribute 115 TBDpatt format
scansection, sequence type attribute 115 description 15
scansectionexit, sequence type event 38
attribute 117 experiment 25
scansequence, sequence type pattern 37
attribute 115 test_procedure 31
seq_audit_attribute 324 test_section 26
seq_audit_attribute_list 324 test_sequence 34
seq_def_attribute 324 tester_loop 29
seq_def_attribute_list 324 TBDpatt_Format statement 23
seqdef_user_object 324 TBDseqPatt 328
sequence_def_id 324 TBDseqPatt format
sequence_definition 325 description 15
sequence_type 325 termination_type 328
Setup_Patterns 325 test data interface overview 11
setup_seq_name 325 test pattern data
setup, sequence type attribute 118 overview 12
shorted_net_fault 326 test_coverage_attribute 328
signature_event_attribute_list 326 test_func 328
sigobs, sequence type attribute 118 test_pattern_audit_summary 329
skewload, sequence type attribute 117 Test_Procedure 31
skewunload, sequence type attribute 115 Test_Procedure statement example 33
sort_keys 126 test_procedure_attribute 329
special_string_character 326 test_procedure_type 329
Standard Test Interface Language (STIL) test_procedure_user_object 329
pattern data format 161 Test_Section 26
pattern data format example 263 Test_Section statement example 29
start_osc_attribute 326 test_section_attribute 329
test_section_type 329
test_section_user_object 330
W
Test_Sequence 34 wait_osc_attribute_list 332
Test_Sequence example 36 weight 332
test_sequence_attribute 330 weight_bit_data 332
test_sequence_type 330 weight_data 332
test_sequence_user_object 330 weight_vector 332
test, sequence type attribute 118 WGL (Waveform Generation Language)
tester_LFSR_state 328 pattern data format 146
Tester_Loop 29 pattern data format example 215
tester_loop_user_object 328
time 330
time_cycle_info 330
time_scale 330
Y
timed_type 39, 330 y 332
timed_type_attribute 330
timing data 133
timing_data 330
timing_data_attribute_list 331
timing_data_type 331
timing_id 331
timing_node_identifier 331
TimingType 331
TimingValues 331
U
unload_data 331
unload_event_attribute_list 331
unsigned_integer 331
unsigned_real_number 332
unweighted 332
uppercase_alphabetic 332
using Encounter Test
online help 8
V
vector format example 201
vector_correspondence_data 332
Verilog
pattern data format 287
pattern data format example 287
Verilog pattern data
pattern data format example 287