Beruflich Dokumente
Kultur Dokumente
P1450.1
IEEE Standard Test Interface Language (STIL) for
Digital Test Vector Data Design Extension
Prepared by the STIL Working Group of the Test Technology Standards Committee
Copyright 2001 by the Institute of Electrical and Electronics Engineers, Inc.
Three Park Avenue
New York, New York 10016-5997, USA
All rights reserved.
This document is an unapproved draft of a proposed IEEE-SA Standard - USE AT YOUR OWN RISK. As such, this
document is subject to change. Permission is hereby granted for IEEE Standards Committee participants to reproduce
this document for purposes of IEEE standardization activities only. Prior to submitting this document to another standard development organization for standardization activities, permission must first be obtained from the Manager,
Standards Licensing and Contracts, IEEE Standards Activities Department. Other entities seeking permission to
reproduce portions of this document must obtain the appropriate license from the Manager, Standards Licensing and
Contracts, IEEE Standards Activities Department. The IEEE is the sole entity that may authorize the use of IEEE
owned trademarks, certification marks, or other designations that may indicate compliance with the materials contained herein.
IEEE Standards Activities Department
Standards Licensing and Contracts
445 Hoes Lane, P.O. Box 1331
Piscataway, NJ 08855-1331, USA
Table 1History
Date
By
Comments
04/01/2002
D14
tony taylor
01/03/2002
D13
tony taylor
See "D12 Review Resolution Document" for summary of the changes. This
draft was finalized on March 21, 2002.
10/11/01
D12
greg maston
Table 1History
Date
By
Comments
8/21/01
to 10/10/01;
0.98; D11
tony taylor
greg maston
8/15/01;
0.97; D10
tony taylor
Added Annex L.3 - complex scan cells and multibit scan cells defined using
hierarchical scan (by Greg Maston). Removed clause defining "engr_expr"
as it is now considered another form of "real_expr". Added UserKeywords,
UserFunctions and UserParameters to the STIL header block. Added file
type and file format keyword definitions. Added rules for formatting of integer values, and for truncation. Added Peters new definition of comparesubstitute events (s and S) to Signals, SignalGroups, Timing, Annex I.
7/25/01; 0.96;
D09
tony taylor
Made changes as agreed to at 7/19 phone call. Reworked some syntax definitions.
7/12/01; 0.95;
D08
tony taylor
Made changes as agreed to at 7/5 phone call.. Made adjustments to the SignalGroup->Variable definitions.
6/23/01;
0.94; D07
greg maston
tony taylor
4/27/01; draft
0.93(b) 2001;
D06
greg maston
Table 1History
Date
By
Comments
3/1/01;draft
0.93(a) 2001;
D05
greg maston
2/2/01...2/28/
01; draft 0.92
2001; D04
greg maston
1/29/01; D03
greg maston
8/6/00..1/10/
01; D02
6/25/00; D01
tony taylor
Original document created from the collected syntax definitions from prior
P1450.1 working groups.
1.
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.
4.
5.
6.
7.
8.
9.
10.
Variables Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.1 Variables Block Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.2 Variables Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
11.
12.
13.
14.
30
31
33
34
15.
16.
17.
41
43
43
44
46
47
48
18.
19.
Environment block. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
19.1 Environment Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19.2 "MAP_STRING" Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19.3 Environment Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19.4 NameMaps Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
52
52
53
20.
BistStructures block (to be removed from the document?) . . . . . . . . . . . . . . 54
AnnexA Glossary (informative) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
AnnexB Signal Mapping Using SignalVariables (informative). . . . . . . . . . . . . . . . 63
AnnexC Using Logic Expressions with Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
AnnexD Using Boolean Expressions (boolean_expr) (informative). . . . . . . . . . . . 68
AnnexE Using Variables and Expressions in Algorithmic Patterns (informative) . 70
AnnexF Chaining Scan Chains with STIL (informative) . . . . . . . . . . . . . . . . . . . . 72
AnnexG Vector data mapping using \m (informative) . . . . . . . . . . . . . . . . . . . . . . 75
AnnexH Vector data joining using \j (informative) . . . . . . . . . . . . . . . . . . . . . . . . . 78
AnnexI Block Data Collection (informative). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
AnnexJ Signal constraints using Fixed and Equivalent statements (informative). 84
AnnexK Independent Parallel Patterns (informative) . . . . . . . . . . . . . . . . . . . . . . 86
AnnexL ScanStructures using complex scan cells (informative) . . . . . . . . . . . . . 87
AnnexM Fail data feedback from ATE using STIL (informative) . . . . . . . . . . . . . . 92
AnnexN BreakPoints using MergedScan() function (informative) . . . . . . . . . . . . . 99
5
P1450.1
IEEE Standard Test Interface Language (STIL) for
Digital Test Vector Data Design Extension
1.
Overview
STIL is an evolving standard being developed in support of various needs for interfacing between test generation
tools and test equipment. The IEEE Std. 1450-1999 (STIL.0) forms the basis for this evolution. New "dot" standards,
like this one, are being developed to address specific needs beyond STIL.0.
This (STIL.1) standard addresses "Design" related aspects of digital test data. This standard can also be viewed as the
addition of advanced features to the STIL.0 base-line to allow for the usage of STIL in more complex applications,
while leaving the basic standard unchanged as a vehicle for transmitting basic test data. The following is a brief overview of the new features in STIL.1 to support advanced applications such as: a) embedded cores, b) families of test
patterns, c) mapping to ATE systems, d) mapping to simulation e) devices with advanced DFT.
Environment Mapping - Data for a device exists in many forms and in many other software environments. Examples are: a) simulation environment, b) static analysis environment, c) specific ATE system environment. The STIL
"Environment" block is a new mechanism to relate STIL data to these other environments. No assumptions, expectations, or limitations are imposed on the other environments. This is just a way of relating one to the other.
Parameterized Data - Much of STIL data is declarative in nature (i.e., it defines various static attributes of a device
or pattern set). The addition of "Constant" declarations allows a data set to be created that applies to a family of
devices.
Complex Test Protocol Definition - Test protocol definitions are usually contained in STIL "Procedures" or "MacroDefs" and are used to specify the application of a series of data values to a device. STIL.0 supports scan chain data
passing and simple WFC data passing via the "#" and "%" characters. STIL.1 enhances this capability by allowing the
use of data substitution from signal-variables, integer-expressions in loops and vectors, "If"/"While" decisions on pattern statements. These capabilities are needed for BIST, embedded cores, and various test access mechanisms.
Advanced Scan Architecture - Advanced DFT techniques require additional capabilities beyond what is defined in
STIL.0. This includes multi-state scan cells, hierarchical scan-chain definitions, re-configurable scan-chains, and
scan-chain indexing.
Run Time Pattern Decisions - The "If", "While", "Loop Data" are new STIL.1 constructs that have been added for
specification of pattern activity. These statements are needed in the specification of patterns to be run in the simulation environment. Although there is no standardization amongst ATE systems on run time instructions for pattern execution, it is anticipated that restricted versions of these statements will be incorporated into ATE test patterns.
Pattern Burst Options - New variations on the "PatternBurst" have been added to allow for pattern running in parallel, patterns running in "LockStep", and patterns that can be re-ordered. For parallel pattern execution, the specification for how the patterns fit together can be specified by using the "Fixed", "Extend", and "Wait" statements.
Enhanced User Extensibility - The "UserKeyword" extensibility defined in STIL.0 has been extended to allow keywords to be defined on a per-block-type basis.
Signal Relationships - Additional syntax is provided to allow the specification of relationships between signals. This
is done via "\m" to map WFCs to another WFC, \j to join WFCs, "Extend" to define behavior of signals beyond the
bounds of a given pattern, and "Fixed" to restrict any further changes to signals within a pattern.
BIST Structure Definitions - A new "BISTStructures" block is added in STIL.1 to define the content and connection
of a BIST block into a design. As with "ScanStructures" the primary purpose of the construct is to allow for fast, efficient simulation of patterns with BIST controllers.
Fail Feedback - Two new features are added to facilitate the processing of failure data from an ATE system back to
design tools. The first is the "X" or cross-reference statement that allows the specification of where in a pattern/vector
sequence a failure occurs. The second is the "S"/"s" timing event that allows for the specification of a data capture
6
1.1
Scope
Define structures in STIL to support usage as semiconductor simulation stimulus; including: 1) mapping signal
names to equivalent design references, 2) interface between Scan and BIST, and the logic simulation, 3) data types to
represent unresolved states in a pattern, 4) parallel or asynchronous pattern execution on different design blocks, and
5) expression-based conditional execution of pattern constructs.
Define structures in STIL to support the definition of test patterns for sub-blocks of a design (i.e., embedded cores)
such that these tests can be incorporated into a complete higher-level device test.
Define structures in STIL to relate fail information from device testing environments back to original stimulus and
design data elements.
1.2
Purpose
Enhance the STIL language definition to support the usage of STIL in the design environment. This includes extending the execution concept to support STIL as a stimulus language, to allow STIL to be used as an intermediate form
of data, and to allow STIL to capture design information needed to port simulation data to device test environments.
In addition, define extensions to support the definition of sub element tests, and to define the mechanisms to integrate
those tests into a complete device test. This effort is to be done in conjunction with IEEE P1500 which is defining
standards for the definition and integration of embedded cores.
Finally, define the constructs necessary to correlate test failure information back to the design environment, to allow
debug and diagnosis operations to be performed based on failure information in STIL format.
2.
References
This standard shall be used in conjunction with the following standards. When the following standards are superseded
by an approved version, the revision shall apply. These references are automatically updated during the editing process.
IEEE Std. 100-1996, The IEEE Standard Dictionary of Electrical and Electronics Terms, Sixth Edition.
IEEE Std. 1450-1999, IEEE Standard Test Interface Language (STIL) for Digital Test Vectors.
IEEE Std. P1500, IEEE Standard for Embedded Core Test (under development as of 25 September 2000).
IEEE Std. 1364-1995, IEEE Standard Hardware Description Language Based on the Verilog(R) Hardware Description Language.
3.
3.1
Definitions
For the purposes of this standard, the following terms and definitions apply. Additional terminology specific to this
standard is found in Annex A. IEEE Std 100-1996, The IEEE Standard Dictionary of Electrical and Electronics
Terms, Sixth Edition, should be referenced for terms not defined in this document.
Core
A component or module that contains separately-developed functionality, integrated into a chip to provide
additional overall functionality (see System on Chip).
STIL0 Refers to IEEE Std. 1450-1999. This base STIL standard is commonly referred to as "dot 0" to differentiate
it from all the STIL extensions (such as this standard).
System on Chip (SoC)An Integrated Circuit containing modules that represent separately-developed functionality.
3.2
ATE
BIST
CA
Cellular Automata
LFSR
System on Chip
STIL
WaveformCharacter
4.
This document is an adjunct to IEEE Std. 1450-1999. The conventions established and defined in IEEE Std. 14501999 are used in this document and are included verbatim below.
Many clauses in this document add additional constructs to existing clauses in the IEEE Std. 1450-1999 document
and are so identified in the title. The Environment and BistStructures blocks are new constructs introduced in this
document. All clauses in this document are normative. Example code is provided within each clause. More complete
examples are provided in the Annexes which are informative.
The following is a copy of the conventions as defined in IEEE Std. 1450-1999 and followed by this document.
Different fonts are used as follows:
a) SMALL CAP TEXT is used to indicate user data;
b) courier text is used to indicate code examples.
In the syntax definitions:
a) SMALL CAP TEXT is used to indicate user data;
b) bold text is used to indicate keywords;
c) italic text is used to reference metatypes;
d) () indicates optional syntax which may be used 0 or 1 time;
e) ()+ indicates syntax which may be used 1 or more times;
f) ()* indicates optional syntax which may be used 0 or more times;
g) <> indicates multiple choice arguments or syntax.
In the syntax explanations, the verb shall is used to indicate mandatory requirements. The meaning of a mandatory
requirement varies for different readers of the standard:
To developers of tools that process STIL (readers), shall denotes a requirement that the standard imposes. The
resulting implementation is required to enforce this requirement and issue an error if the requirement is not met
by the input.
To developers of STIL files (writers), shall denotes mandatory characteristics of the language. The resulting output must conform to these characteristics.
To the users of STIL, shall denotes mandatory characteristics of the language. Users may depend on these characteristics for interpretation of the STIL source.
The language definition clauses contain statements that use the phrase "it is an error", and "it may be ambiguous".
These phrases indicate improperly-defined STIL information. The interpretation of these phrases will differ for the
8
5.
All constructs and restrictions for IEEE Std. 1450-1999 Clause 6 are in effect here, with the following additions:
Additional STIL reserved words specific within the context of this standard.
Additional STIL reserved characters specific within the context of this standard.
Extensions to the expression environment are defined in clause 6 of this standard. Three new types of variables
SignalVariables, enumerations, and constants are defined, and extensions to real expressions and Spec variables
are also defined. New types of expressions boolean_expr, cellname_list, integer_expr, logical_expr, real_expr,
sigvar_expr, and integer_list are also defined.
5.1
Table 1 lists all STIL reserved words defined by this standard and not defined in IEEE Std. 1450-1999. Subsequent
clauses in this standard identify the use and context of each of these additional reserved words.
5.2
Several reserved characters identified in IEEE Std. 1450-1999 are applied in additional contexts for this standard.
Table 2 lists additional STIL reserved characters defined in this standard as well as additional contexts of previously
5.3
Usage
()
&
<
>
<=
>=
==
!=
?:
assignment in: timing expressions, logical expressions, vector expressions, groupname expressions, spec category expressions, and spec variable expressions (6 contexts)
min, max
All constructs and definitions in IEEE Std. 1450-1999 clause 6.10 are in effect. In addition, signals expressed using a
bracketed construct shall allow the use of previously declared constants where integer values are allowed. See
clause 6.1 for the definition of constants.
5.4
Additions to STIL0 clause 6.16 - STIL name spaces and name resolution
Environment and BistStructures blocks augment the STIL namespace as defined in table 3. This table is incremental
to IEEE Std. 1450-1999 table 6 STIL name spaces; all definitions present in that table remain unchanged.
Enumeration names, Variable names, and Constant names are used by logical expressions in the PatternBurst or Pattern blocks. This space also contains Signals, the current selected SignalGroups, and the current selected Spec variables defined for the context of that expression. Variable and Enumeration names shall be unique against all Signals,
referenced and unnamed SignalGroups, and Spec variable names defined for a PatternBurst or application of a Pattern
10
6.
Type of Name
Domain restrictions
Environment
Environment domain
names
BistStructures
BistStructures domain
names and BistStructures names
Enumeration, Variable,
Constant Names
(logical_expr)
Signals, SignalGroups,
Spec variables, Enumeration, Variable, and
Constant names
Names are present in this space dependent on reference statements in the PatternExec (for Spec
variables) and the PatternBurst (for named SignalGroups blocks). Signal names are present unless
overridden by the same name from a named SignalGroups block as specified for SignalGroup resolution in IEEE Std. 1450-1999. Names in an
unnamed SignalGroups block are present unless
overridden by the same name in a named and referenced SignalGroup block. It is an error for defined
Enumeration, Variable, and Constant names to
conflict with Signals, SignalGroups, or Spec variable names accessible in the same context.
IEEE Std. 1450-1999 defines Timing Expressions using Spec Variables and expression constructs presented in clause
6.13, and Signal Expressions in clause 6.14. This standard extends these expression contexts with additional variable
types and corresponding expression constructs. clause 6.1 presents SignalVariables, Constants, and Enumeration
types, and clause 6.2 - clause 6.8 detail the additional expression constructs supported by these additional types.
6.1
SignalVariables, enumerations, and constants are declared under the SignalGroups block as defined in clause 12. In
addition, constants may be declared in the Signals block as defined in clause 11. SignalVariables, enumerations and
constants are used in logical or WaveformCharacter expressions as explained in clause 6.6 and 6.8, and constants are
allowed in bracketed Signal or SignalGroup contexts as explained in clause 5.3. STIL user-defined naming constructs
defined in IEEE Std. 1450-1999 subclause 6.10 are supported for SignalVariable, enumeration, and constant names.
Logical expressions may contain references to signals, groups, and spec variables. Therefore the name space for Variables, Enumerations, and Constants includes the names in effect in these additional namespaces. SignalVariables,
enumerations, and constants follow the same name scoping constructs as SignalGroup names, that is: these names are
unique across items in this names, in referenced (named) SignalGroup blocks; names defined in an unnamed SignalGroup block are accessible without reference unless overridden by another definition of the same name in a named
and referenced SignalGroup block, and items with the same name as a Signal shall be used instead of that Signal.
SignalVariables, Enumerations, and Constants are typed when they are declared. This standard defines Integer, IntegerEnum, and Constant variable types that may be used in boolean expressions as presented in clause 6.2, and integer
expressions as presented in clause 6.4. SignalVariable and SignalVariableEnum types are defined in this standard and
are used to supply WaveformCharacter expressions in assignments to Signal or SignalGroups as presented in
clause 6.8. The context of Spec Variables is extended from the STIL0 definition of Timing expressions to support a
11
6.2
A boolean expression (boolean_expr) is a logical expression that evaluates to a true or false. The result of a boolean
operation (using boolean operators defined in table 5) is 0 if the result is False, and 1 if the result is True. The result
of a bitwise operation (using bitwise operators defined in table 5) is the entire expression; that is, a bitwise expression
is maintained as defined and not otherwise evaluated.
Contexts that require boolean expression values interpret the value 0 and negative values as False and non-zero positive values as True. All other types (bitwise logical or WaveformCharacter list values) shall be an error if provided as
the result of a logical expression and a boolean context is required.
6.3
It is allowed reference to other scan chains as well as scan cells, thus providing hierarchical scan chain
definitions (see clause 15). The names of scan cells and scan modules are separate and distinct from all
other name spaces.
2.
The operators allowed in a cellname_list are the bracket construct [ .. ] to define a series of cellnames,
and the ! operator to to indicate inversion. Supported constructs within the brackets are defined in
clause 6.5.
6.4
An integer_expr is logical expression that evaluates to integer. See the list of allowed operators in Table 4 on page 17.
The following rules of interpretation apply to integers:
a)
d) If an integer operation results in a number with a fractional part, the fraction shall truncate to produce an
integer value.
Integer expressions may contain integers, operators as previously indicated, Integer variables, and Constants. The following are examples of integer expressions and their usage:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause 6.4 *}
}
Signals { sigA In; sigB Out; sigC InOut; }
Variables {
i Integer;
k Constant = 2;
}
SignalGroups {
sigref = A+B+C;
} // end SignalGroups
Timing { WaveformTable {
Waveforms {
sigref {
01 { 2ns+k*(0.5ns) U/D; }
} // end sigref
} // end Waveforms
} // end Timing
Pattern P {
C { i =
C { i =
C { i =
C { i =
C { i =
C { i =
C { i =
C { i =
C { i =
C { i =
C { i =
If i >=
1234; }
48000000; }
48_000_000; }
48M; }
48M; }
i + 2; }
i = 13; }
i = i/2; }
i = i * 0.5; }
i + 1; }
\h7FF_FFFF; }
99 {}
//
//
//
//
//
//
//
equivalent to 48000000
equivalent to 48000000
equivalent to 48000000
where x is an integer variable
expression containing assignment
truncate (i.e., if 13/2 yields 6)
truncate (i.e., if 13*0.5 yields 6)
6.5
An integer_list is used to specify an ordered list of integer values. Allowed operators in an integer list is the ellipsis
.. which specifies a range of integers. An integer_list may contain either a single integer, a space-separated list of
integers or integer ranges. Previously defined Constants may appear in place of integers. An integer range is represented by 2 integers (or Constants) separated by ... For example, 3..6 is equivalent to 3 4 5 6 and 4 .. 2 is equivalent to 4 3 2. Spaces are allowed between the integer or Constant, and the ".." operator. The following underlined
code are examples of integer lists:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause 6.5 *}
}
Signal {
sig[1..5] In;
prpg_sig Pseudo;
}
BistStructures mybist {
BistRegister reg {
TapPositions 0 2 4 6 8 10 12;
Connection prpg_sig 0..25;
}
Pattern pat {
V { sig[5 4 3 2 1] = 11001; }
}
6.6
Logical expressions are enclosed in single quotes. The operator set and expression constructs supported by logical
expressions is the same as defined for IEEE Std. 1450-1999, Subclause 6.13 (Timing Expressions), with additional
bitwise and boolean operators supported. All logical expression operators are defined in table 5.
Logical expressions may evaluate to integer, real number, exponential number, bitwise logical, or boolean values. The
result of the last operation executed in evaluating a logical expression is the result of a logical expression, for example
the result of assigning a value to a logical variable is the value of that assignment.
Logical expressions consist of:
References to Variables, Enums, and Constants defined under Signals or SignalGroups blocks that are currently
applied in PatternBurst contexts.
References to Signals, SignalGroups, or Spec Variables that are currently defined in the PatternBurst and PatternExec context.
Integers, real numbers, or exponential numbers.
Expressions as described in IEEE Std. 1450-1999 clause 6.13 but not including event labels nor time marks, and
supporting the set of operators defined in table 5.
Expressions formed by algebraic combination of any of these as allowed regarding the unit of the combinants
(e.g., the following is not valid: 1.5V + 2.5ns, whereas 1.5V/2.5ns is valid).
Variables are declared under Signal or SignalGroup blocks, as defined in clause 11 and clause 12. Consider the following example definitions:
14
6.7
A real expression is defined in a Spec table as defined in IEEE Std. 1450-1999. The term real_expr is used in the syntax definition to indicate where a real number is to be used. A real number can be expressed in one of two formats.
A real number can be of the form: <number>e<+\-><number>. A real number can be used to represent values that are
not standard SI units, for example a slew rate in volts/ns.
A real number can also be of the form <number><prefix><SI unit>. For example, 23ns is a time expression, 10uf
is a capacitance expression. This generic reference can be used whenever one of the standard unit definitions is
allowed.
The following are examples of real number expressions:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause 6.7 *}
}
Spec {
Category cat {
time = 25ns;
wattage = 25mw;
slewrate = 1v/1ns;
realvar = 25e-9;
} // end Category
} // end Spec
Pattern pat {
C { time = 23.5ns + 1.5ns/2; } // time expression
C { wattage = 5v * 2ua; }
// where wattage is of type Watts
C { slewrate = 5v/1ns; }
// where slewrate is of type Real
C ( realvar = 5v; }
// where realvar is of type Real
C { realvar = 5ma; }
// where realvar is of type Real
C { realvar = 5e-3; }
// where realvar is of type Real
} // end Pattern
6.8
SignalVariable expressions are enclosed in single quotes. Variables declared to be of type SignalVariable are assigned
WaveformCharacter list values, and signal references are assigned the value of Variables of type SignalVariable.
A WaveformCharacter list value results by direct assignment of a WaveformCharacter list, variable of type SignalVariable, or variable of type SignalVariableEnum in a sigvar_expr. It is an error to manipulate a WaveformCharacter list
with operators or functions.
The application of signal variables is to hold signal data and to pass signal data from pattern vectors, macro calls or
procedure calls to macros, procedures or other vectors.
Signal variables are always have global scope and always retain their value upon return from a procedure or macro.
The following are examples of signal variable usage:
16
6.9
Table 4 describes the usage of each type of variable and expression and where each variable type is defined. This table
does not have a corresponding table in IEEE Std. 1450-1999.
variable types
where defined
where used
syntax examples
engr_expr
- time_expr
- voltage_expr
- etc.
time
integer
real
@label
Spec
SignalGroups
Spec
Timing
Timing
23.0ns/2+16.5e-9-t2
t1/i + r - t2
real_expr
time
integer
real
@label
Spec
SignalGroups
Spec
Timing
Pattern
integer_expr
integer
SignalGroups
Pattern
Timing
PatternCharacteristics ->
NumberVectors max * mode;
integer_list
integer
SignalGroups
BistStructures
SignalVariables
1,2,3,4,5
3, 6, 4, 5, 1, 2
1..5
sigref_expr
signals
signal groups
SignalGroups
on-the-fly
most blocks
SignalGroups { a=b+c; }
V { x+y = 11; }
17
variable types
where defined
where used
syntax examples
sigvar_expr
SignalVariable
SignalGroups
Pattern
V { grp = sv1; }
V { grp = sv2[1..5]; }
V { grp = sv3[5 4 2 3 1]; }
logical_expr
integer
time
real
SignalVariable
Signal
SignalGroup
SignalGroups
Spec
Spec
SignalGroups
SignalGroups
SignalGroups
Pattern
Loop x*25 { }
boolean_expr
integer
time
real
SignalVariable
Signal
SignalGroup
SignalGroups
Spec
Spec
SignalGroups
SignalGroups
SignalGroups
Pattern
ScanStructures
If i == 0 {}
If period > 23.0ns {}
If value < 3e-6 {}
If sv2[1..5] == 11000 {}
If (s1==H) | (s2==H) {}
If grp != HHHH {}
ScanEnable sig1==U;
Table 5 is expanded from Table 5 of IEEE Std. 1450-1999, to identify operator usage in additional expression types,
and to define the following operators not supported in IEEE Std. 1450-1999: % (modulus), ! (negation), && (boolean
and), || (boolean or), ~ (tilde, bit-wise negation), & (bit-wise and), | (bit-wise inclusive or), ^ (bit-wise exclusive or),
and ^~, ~^ (bit-wise equivalence). Logical behavior of these operators is the same as defined in IEEE Std. 1364.
Table 5 defines the allowed operators on each type of variable. The table is ordered by precedence. Operators within
the bold line are of equal precedence and are processed left to right. Operators in each bold line separated group have
higher precedence that the groups below them and shall be processed first.
Definition
time
real
sig
var
sig
ref
cell
ref
min()
minimum value
YES
YES
YES
YES
NO
NO
NO
NO
max()
maximum value
YES
YES
YES
YES
NO
NO
NO
NO
MergedScan()
NO
YES
YES
YES
YES
NO
NO
NO
()
parenthesis
YES
YES
YES
YES
YES
NO
NO
NO
table 3,
table 4 of
IEEE Std.
1450-1999
YES
NO
NO
NO
YES
NO
NO
NO
divide
YES
YES
YES
YES
NO
NO
NO
NO
multiply
YES
YES
YES
YES
NO
NO
NO
NO
modulus
NO
NO
YES
YES
NO
NO
NO
NO
18
Definition
time
real
sig
var
sig
ref
cell
ref
add
YES
YES
YES
YES
NO
NO
YES
YES
subtract
YES
YES
YES
YES
NO
NO
YES
NO
<
YES
YES
YES
YES
YES
NO
NO
NO
>
YES
YES
YES
YES
YES
NO
NO
NO
<=
YES
YES
YES
YES
YES
NO
NO
NO
>=
YES
YES
YES
YES
YES
NO
NO
NO
NO
NO
YES
YES
YES
NO
NO
YES
&&
NO
NO
YES
YES
YES
NO
NO
NO
||
or (boolean value)
NO
NO
YES
YES
YES
NO
NO
NO
==
NO
NO
NO
YES
YES
NO
NO
NO
!=
NO
NO
NO
YES
YES
NO
NO
NO
bit-wise negation
NO
NO
YES
YES
NO
NO
NO
NO
&
bit-wise and
NO
NO
YES
YES
NO
NO
NO
NO
bit-wise inclusive or
NO
NO
YES
YES
NO
NO
NO
NO
bit-wise exclusive or
NO
NO
YES
YES
NO
NO
NO
NO
^~, ~^
bit-wise equivalence
NO
NO
YES
YES
NO
NO
NO
NO
?:
conditional expression
YES
YES
YES
YES
YES
NO
NO
NO
assignment
YES
YES
YES
YES
NO
NO
NO
NO
..
NO
NO
NO
NO
NO
YES
YES
YES
7.
This standard defines two additional top-level STIL blocks: Environment (clause 19), and BistStructures (clause 20).
These blocks relate to the top-level blocks of IEEE Std. 1450-1999 as defined below.
19
7.1
The BistStructures blocks, if present, have a required ordering with respect to other STIL clauses defined in IEEE
Std. 1450-1999. This ordering is shown in table 6. This table is incremental to table 7 in IEEE Std. 1450-1999 and
indicates the required position of the BistStructures block is following the ScanStructures blocks (if present). All
other definitions and requirements specified in Table 7 of IEEE Std. 1450-1999 remain unchanged.
Purpose
ScanStructures
BistStructures
Defines internal BIST structure information. The BistStructures block or blocks are
optional. If there are multiple BistStructures blocks they shall be named. The Pattern
may contain a reference to a named BistStructures. BistStructures blocks shall be
defined before the Pattern blocks.
Spec
7.2
Environment blocks, if present, do not have a defined order with respect to other STIL clauses defined in IEEE Std.
1450-1999. Environment blocks may appear any place a top-level STIL statement is allowed. This is delineated in
table 7, which is provided to be complete with table 8 in IEEE Std. 1450-1999.
Purpose
Environment
Some applications of the Environment block may place ordering constraints to satisfy issues specific to the application of this data.
8.
The STIL statement identifies the primary version of IEEE Std. 1450-1999 information contained in a STIL file, and
the presence of one or more standard Extension constructs. The primary version of STIL is defined in IEEE Std.
1450-1999.
The extension to the STIL statement allows for a block containing extension identifiers that allow for additional constructs in the STIL file. There may be multiple Extension statements present, to identify the presence of multiple
extension environments. The extension name and the extension statements are defined in the individual documents for
those standards.
All other constructs and restrictions for IEEE Std. 1450-1999 clause 8 are in effect here.
8.1
STIL syntax
STIL IEEE_1450_0_IDENTIFIER {
( EXT_NAME EXT_VERSION; )+
} // end STIL
(1)
(2)
20
(2)
EXT_NAME:
The specific name of the Extension. This standard is identified by the name Design.
EXT_VERSION:
8.2
The primary version of an EXT_NAME. This standard is identified by the value 2001.
STIL example
STIL 1.0 {
Design 2001;
DCLevels 2001;
CTL 2001;
}
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause 8.2 *}
}
9.
This clause defines additional locations in a STIL file where the UserKeywords statement is allowed to appear.
The UserKeywords construct is expanded from IEEE Std. 1450-1999, to allow the UserKeywords statement to be
defined within STIL blocks. When a UserKeywords statement is defined within a STIL block, those definitions shall
apply only within that block and contained sub blocks. This allows Userkeywords to be "locally scoped" to a containing STIL block.
All other constructs and requirements for IEEE Std. 1450-1999 Clause 11 are in effect here.
9.1
UserKeywords syntax
9.2
UserKeywords example
Timing one {
UserKeywords startup shutdown;
WaveformTable one {
21
10.
Variables Block
This clause defines variables and constants. If the block is unnamed then all definitions shall be globally available to
all other blocks in the STIL file. If the block has a name, then that name must be referenced by the Pattern or PatternBurst for the variables to be available.
This block should be considered in light of the Spec block that also can define constants and variables. The purpose
and usage of these two blocks is sufficiently different to warrent their separation. The Spec block is intended to contain parametric data used in specifying device/test characteristics. The Spec block has special handling defined for
Category, Min/Typ/Max/Meas, and Selector which are to facilitate a flexible definition of these test parameters. The
Spec block is designed to contain primarily constant values with one exception (Meas) which is to allow re-calculation of the constants based on a real-time measured value from a tester.
The Variables block is used to contain control variables and constants. Typical uses for these constants and variables
is to control flow of exectuion, to provide aliasing of values to meaningful names with Constants and Enumerations,
and to provide run time parameters.
10.1
(1)
(2)
(3)
( InitialValue logical_expr ; )
( IntegerEnum INTEGER_ENUM_NAME; )
( Values integer_list ; )
} )* // end Integer
( IntegerEnum INTEGER_ENUM_NAME {
(4)
Values {
(ENUM (DECIMAL_INTEGER); )+
} // end Values
} )* // end IntegerEnum
( SignalVariable VAR_NAME; )*
(5)
( SignalVariable VAR_NAME {
( Usage (< CTL | Design | Simulation | Test | TRC | User USER_DEFINED >)* ; )// under review see GR-7
( Base < Hex | Dec> WFC_LIST ; )
( Alignment < MSB | LSB > ; )
( Length DECIMAL_INTEGER ; )
( InitialValue vec_data ; )
( SignalVariableEnum SIGNAL_ENUM_NAME)
} )* // end SignalVariable
( SignalVariableEnum SIGNAL_ENUM_NAME {
(6)
( Base <Hex | Dec> WFC_LIST ; )
( Alignment < MSB | LSB > ; )
( Length DECIMAL_INTEGER; )
Values {
(ENUM vec_data ; )+
} // end Values
} )* // end SignalVariableEnum
} // end Variables
tbd: (TT 7/28/02 - The following definitions need to be adjusted to the above syntax (pending wg approval of the
22
The name assigned to an enumerated value and to be used when associating this named value to a variable
of this enumerated type.
DECIMAL_INTEGER: The integer value that is assigned to this enum name. A value is optional for enums. of type
IntegerEnum. Separate ENUM declarations may identify the same value; ENUM values do not have to be unique
within one ENUM_NAME.
(5) CONST_NAME Constant = DECIMAL_INTEGER : declaration of a named variable that is equivalent to the
specified integer value in all applications. Constants declared in the Signals block are globally accessible to all
logical_expr expressions and bracketed signal name constructs.
(6) VAR_NAME < SignalVariable | SignalVariableEnum SIGNAL_ENUM >: Each variable has a name followed
by a type definition. The type is one of: SignalVariable or SignalVariableEnum. SignalVariableEnum shall be
followed by the name of the Enumeration definition, which shall be previously defined. This statement is terminated
by a semicolon, or a set of braces defining optional attributes. Variables are differentiated from enumerations by the
absence of the Values attribute on these declarations.
Usage SimulationOnly: This optional attribute indicates that the named variable is intended to be used in nonATE applications. Typical uses would be for interacting with a simulation process or for defining conditions
processed during the translation process.
Base <Hex | Dec> WFC_LIST : This optional attribute defines the mapping from WFC characters to/from decimal
or hex integer values, as defined for the Base option of SignalGroups in IEEE Std. 1450-1999 Clause 14. This
statement is allowed only for variables and enumerations of type SignalVariable.
23
SIGNAL_ENUM.
ENUM:
The name assigned to an enumerated value and to be used when associating this named value to a variable
of this enumerated type.
vec_data: The value is expressed as a vec_data expression as defined in STIL.0. It may be comprised of a string of
WaveformCharacters, or an integer value that maps into a set of WaveformCharacters. Separate ENUM declarations
may identify the same value; ENUM values do not have to be unique within one SIGNAL_ENUM.
10.2
Variables Example
11.
This clause defines additional statements supported within the Signals block. All statements and capabilities as
24
(1)
(2)
(3)
(4)
}
The WFCMap attribute is defined for both Signals and SignalGroups (clause 12). This attribute defined here applies
to both environments.
(1) Signals: Refer to IEEE Std. 1450-1999 for the definition of the Signals block and statements not defined in this
extension.
(2) WFCMap is an optional attribute block.
(3) FROM_WFC -> TO_WFC(TO_WFC)+ : identifies a set of waveforms to use when the FROM_WFC waveform
contains a Substitute character; the FROM_WFC waveform referenced shall contain a Substitute character when there
is more than one TO_WFC character present. This statement supports the reverse mapping of information required to
support the CompareSubstitute. See Timing Block and WaveformTable Block - Extensions to STIL0 clause 18 on
page 35 for information about the CompareSubstitute event. The order of characters in the TO_WFC list is important:
the first WaveformCharacter represents the waveform reference to use when the S state identifies a CompareLow (L
event) state, the second WaveformCharacter represents the waveform reference when the S state identifies a
CompareHigh (H event) state, the third WaveformCharacter represents a CompareUnknown (X event), and a forth
WaveformCharacter represents a CompareOff (T event) state. A minimum of two TO_WFC characters shall be present
in this expression, to map to a CompareLow waveform a CompareHigh waveform.
(4) FROM_WFC1 FROM_WFC2 -> TO_WFC ; is a statement that indicates that two separate assignments to the
same signal, one using FROM_WFC1 and the other one using FROM_WFC2, should be interpreted as having assigned to
the WaveformCharacter value TO_WFC instead. The two WaveformCharacters FROM_WFC1 and FROM_WFC2 need not
be separated by whitespace and are not order sensitive.
11.2
11.3
To use the mapping of a signal or signalgroup, two new flags are added to the cyclized pattern data: \m indicates that
the defined mapping from a single FROM_WFC should be used; \j indicates that the defined mapping from two
FROM_WFC1 FROM_WFC2 should be used. When \j is used, both assignments shall be preceded by \j. No more
than two \j-assignments to the same sigref_expr may occur in the same vector or condition. If there is only one
assignment to a sigref_expr then a \j, if present, is ignored.
The \m and \j flags apply to all WaveformCharacters of the flagged assignment. The WFCMap is applied only once
i.e., the mapped TO_WFC is not subject to further mapping. If \m or \j are used for a sigref_expr which does not
define a WFCMap, then the components of sigref_expr are descended until the first corresponding WFCMap is
found.
If the vector mapping \m is used but no WFCMap has been defined for the WaveformCharacter FROM_WFC to be
mapped (for sigref_expr or its components), then the same WaveformCharacter FROM_WFC is used unchanged. If
the vector mapping \j is used for two assignments of FROM_WFC1 and FROM_WFC2 then the corresponding WFCMap shall be defined.
12.
This clause defines additional statements supported within the SignalGroups block. All statements and capabilities as
defined in IEEE Std. 1450-1999 Clause 15 are unchanged.
As presented in clause 11, the WFCMap attribute has been added to SignalGroup declarations in this block. Additional details on the WFCMap can be found in clause 11 and clause 16.
In addition, new Variable types are declared in this block. These types are SignalVariable, Integer, SignalVariableEnum, IntegerEnum, or Constant. These variables, once defined, may appear in appropriate expressions, as presented
in clause 6. Variable declarations are differentiated from SignalGroup declarations by the type keyword that appears
immediately after the name.
Be aware that Spec variables, defined in IEEE Std. 1450-1999 clause 19, have different functionality compared to the
variables defined here. Spec variables may be referenced in logical expressions, but the value applied is a function of
the Spec and Selector operations and these variables cannot be assigned to in logical expressions.
While logical expressions and WaveformCharacter expressions may support the instruction capability of an ATE system, in general most ATE systems will be able to support only a limited sub-set of the design capabilities defined
herein. The full capabilities are intended for use by simulation applications or pattern translation tools.
(1)
(2)
(1) SignalGroups: Refer to IEEE Std. 1450-1999 for the definition of the SignalGroups block and statements not
defined in this extension.
26
12.2
12.3
The WFCMap attribute, if not present on a declaration, is undefined for that signal or signalgroup reference. If mapping is required for every use of a signal, all SignalGroups that contain that signal need a WFCMap that defines the
mapping required for that signal.
13.
This clause defines additional statements supported within the PatternBurst block. All statements and capabilities as
defined in IEEE Std. 1450-1999 Clause 17 are unchanged.
Two new pattern grouping structures are defined - the ParallelPatList and the PatSet. Also, the Fixed, Extend, and
Wait statements are defined to allow the specification of how multiple patterns are to be executed.
Lastly, the If and While statements are provided to allow conditional execution of patterns within a burst.
13.1
PatternBurst Syntax
PatternBurst PAT_BURST_NAME {
( Variables VARIABLES_DOMAIN; )*
( Fixed sigref_expr (default_state) ; )*
( PatList {
( PAT_NAME_OR_BURST_NAME {
( Variables VARIABLES_DOMAIN; )*
( Fixed sigref_expr (default_state) ; )*
( If boolean_expr ; )
( While boolean_expr ; )
} )* // end pat_name_or_burst_name
(1)
(2)
(3)
(4)
(5)
(6)
28
(7)
(8)
(9)
(10)
(1) PatternBurst: Refer to IEEE Std. 1450-1999 for the definition of the PatternBurst block and statements not
defined in this extension.
(2) Variables: This statement allows reference to a named block of variables to by allowed by all patterns and
pattern bursts within this block. See Variables Block on page 22.
(3) Fixed: This statement allows the specification of a set of signals that are to be maintained in a fixed state. This
statement may be associated with a pattern or burst within a PatList, PatSet, or ParallelPatList. It requires that the list
of signals in the sigref_expr not be used in the associated patterns, but remain fixed in the state that they are defined in
prior to this pattern or burst. The state for the fixed signals is determined by the following conditions:
the optional default state in the Fixed statement;
the ending state of a prior pattern execution;
the default state as defined in the Signal block definition.
This statement performs a similar function to the Fixed statement that may occur within a pattern. The difference is in
the scope. The Fixed statement within a pattern is in effect from its occurrence to the end of the pattern, whereas the
Fixed statement outside a pattern is in effect for the entire pattern or burst of patterns.
(4) PatList: The PatList block performs exactly the same function as defined in IEEE-Std 1450.1999. It is repeated
here to show the new optional statements that are allowed within a pattern list, namely the If and While attributes.
(5) If: This attribute defines a conditional requirement on the execution of the PAT_OR_BURST_NAME; this block
will execute only if the boolean_expr is True. The expression is evaluated at the point this reference would start to
execute in the sequence defined.
The If statement determines whether the statements within the block are to execute or not. The statements within an If
block have the same effect and scope as if they were to be executed outside of the block - i.e., the statement "If xxx
{ Fixed yyy; }" will be in effect for the rest of the pattern if xxx evaluates to True.
(6) While: This attribute defines an iterative option for execution of the PAT_OR_BURST_NAME; this reference
will be executed repeated times as long as the boolean_expr is True. The expression is evaluated each time this
reference would start to execute; pattern sequencing iterates on this reference until the expression returns False.
(7) PatSet: This block defines a set of PAT_OR_BURST_NAME that have no requirement on the order of execution
of each reference. This construct is intended primarily for defining data in an interim format prior to being presented
29
13.2
PatternBurst example
13.3
SoC
M2
13.4
M1
CBA4321
si1
so1
CBA4321
ED765xx
si2
so2
xxED765
Pattern tiling is the process of connecting patterns together end-to-end in time and side-to side by signal. For the purpose of specifying the desired actions when a PatternBurst contains patterns that may be run in parallel, the following
statements are availablefor this purpose:
Fixed sigref_expr (default_state) ;
Wait;
Extend;
The following is an example of Pattern Tiling using the statements available in the PatternBurst. Refer to clause 13
33
signals
pat_a
pat_b
pat_c
pat_d
time
pat_e
pat_f
2.
pat_a and pat_b are allowed to extend, since they are expected to complete in less time than pat_c.
Extending means that the state of all signals at the end of the last vector of the pattern can be held, effectively extending the period of the last vector.
3.
pat_c must run to completion before any further activity in this burst can be started
4.
5.
pat_d, pat_e, and pat_f are run sequentially, starting immediately upon completion of the last vector of
34
13.5
Conditional PatternBurst statements If and While defined here allow selective execution of a complete Pattern or PatternBurst based on the evaluation of a boolean expression.
The following example defines two Pattern Variables whose scopes are the pattern burst named with_vars. The Pattern Variable counter has an initial value determined by evaluating the expression t_Per / 25ns. The Pattern Variable failure is initially given an undefined value.
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause 13.5 *}
}
Variables {
count Integer {
InitialValue t_Per / 25nS;
} // end count
failure Integer;
}
SignalGroups block_one {
} // end SignalGroups
PatternBurst with_vars {
SignalGroups block_one;
PatList {
first_pat;
second_pat { If !failure; }
} // end PatList
} // end PatternBurst
// The If statement provides control over the execution of second_pat,
// depending on the value of the variable failure when second_pat is ready to execute.
Pattern first_pat {
UserFunction TestResult;
Loop count { V { clk = P; } }
V { some_pins = 11110000 HHHHLLLL; }
C { failure = TestResult(); }
} // end Pattern
35
14.1
The following table defines the additional Compare character CompareSubstitute. This table is incremental to Table
10 of IEEE Std. 1450-1999.
Icon
Definition
CompareSubstitute
CompareSubstituteWindow
14.2
CompareSubstitute Operation
The CompareSubstitute event allows stimulus to be defined for device test, and supports a mechanism to return the
device response to this stimulus. How this response information is returned is outside the scope of this effort, but an
example is provided in annex I.
The CompareSubstitute event is expected to be found only once in a waveform definition. If multiple CompareSubstitute characters are present in one waveform definition, then all Compare operations shall return the same value or the
CompareUnknown state shall be returned.
The CompareSubstitute event is expected to be defined in conjunction with a WFCMap definition for each WaveformCharacter that represents a waveform containing the CompareSubstitute event. The WFCMap defines what
WaveformCharacter values are returned for each of the supported state values returned by CompareSubstitute. If no
WFCMap is defined, or a WaveformCharacter for a specific Compare value is not defined in the WFCMap for this
waveform, then the return information is not mapped to waveform references, but explicit \e events are returned with
the Vector data, as defined in Clause 13.3.
15.
Simulation of scan patterns outside the test-pattern generator is often performed to verify timing, design functionality
or the library used to generate the patterns. The speed of the simulator is limited by simulating the load/unload (Shift)
operation of scan chains. Optimal simulation performance is achieved with no shifts, bypassing scan chain logic and
asserting/verifying the scan data directly on the scan cells.
The STIL.0 syntax is extended to support complex scan cells, where complex scan cell is defined to be a state element that is loaded/unloaded by a single element of the scan chain data, but may contain multiple states internally. A
related operation is that of loading multiple state elements from multiple elements of a scan chain which is defined by
using the ScanModule statement.
A scan cell may contain one or more state elements in various configurations. All state elements defined in one scan
cell access a single scan bit value; one scan bit in the data stream is allocated to each scan cell construct defined. Stability and capture ability are identified for each state element in the scan cell, in addition to the inversion information
with respect to both scan input and output by scan-oriented test pattern generators. For example, loading a single scan
bit may require setting values in several state elements. Additionally, there may be extra cycles in the load or unload
36
15.1
ScanStructures Syntax
ScanStructures (SCAN_NAME) {
( ScanChain CHAIN_NAME {
ScanLength integer_expr ;
( ScanOutLength integer_expr ; )
( ScanEnable logical_expr ; )
( ScanCells ( cellname_list )+ ; )
( ScanCells {
(< cellname_list
| cellname_list {
( (If boolean_expr) CellIn STATE-ELEMENT-LIST ; )*
( (If boolean_expr) CellOut STATE-ELEMENT ; )*
} >)* // end cellname_list
})
// end ScanCells
} )*
// end ScanChain
// end ScanStructures
(1)
(2)
(3)
(4)
(5)
(6)
(1) ScanStructures: Refer to IEEE Std. 1450-1999 for the definition of the ScanStructures block and statements not
defined in this extension.
(2) ScanLength integer_expr : As defined in IEEE Std. 1450-1999, with the extension to support integer
expressions.
(3) ScanOutLength integer_expr : As defined in IEEE Std. 1450-1999, with the extension to support integer
expressions.
(4) ScanEnable logical_expr: This optional statement allows designation of a single Signal or a complete
expression to represent the design constraints, if any, necessary to allow access to the scan shift operations for this
scan chain. See example usage in Annex C.
(5) ScanCells: This statement shall appear at most once in a ScanChain block. It shall contain a combination of: a)
scan cell names as defined in IEEE Std. 1450-1999, b) cellname_list as defined in clause 6.3, c) scancell block, or d)
a scan segment. See annex L for more information.
A scan segment is a list of scan cells that are defined in a ScanChain block and are to be inserted in sequence in the
currently being defined scan cell list. The scan segment is defined as follows:
SCANSTRUCT
:: SCANCHAIN : INSTANCE
37
CellIn: This is an optional statement indicating that the nets in STATE-ELEMENT-LIST are to be loaded with the
data value corresponding to the current scan cell, with possible inversion as indicated by a ! character. A !
indicates inversion between the input of the scan cell and the optional name following the !. If no name follows
the ! then the inversion is inside the cell CELLNAME, between the cell input and the state element.
CellOut: This is an optional statement indicating that, when the boolean_expr is true, the net STATE-ELEMENT is
to be unloaded (into the cellname-ref) with the data value corresponding to the current scan cell, with possible
inversion as indicated by a ! character. A ! indicates inversion between the name preceding the ! and the
output of the scan cell. If no name precedes the ! then the inversion is inside the cell CELLNAME, between the
state element and the cell output.
Both CellIn and CellOut statements may be qualified by If boolean_expr. This indicates that the nets in the CellIn
and CellOut statements are only to be considered in a pattern where the boolean_expr is True. The following cases
are all valid for CellIn:
No CellIn statement
CellIn statement
Only load operations when all pat_exprs are false are to be simulated, other
loads use their corresponding CellIn statement.
CellOut statement
Only unload operations when all pat_exprs are false are to be simulated, other
unloads use their corresponding CellOut statement.
38
15.2
The ScanCell naming constructs allow cells to be expressed as a list using the same notation defined for Signals and
SignalGroups in STIL0 clause 6.10. An example is shown below. Note that the presence of inversion between cells
requires multiple sets of cellnames to be present to represent the inversion at the correct point in the list:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause 15.2 *}
}
ScanStructures {
ScanChain chain1 {
ScanLength 100;
ScanIn si1;
ScanOut so1;
ScanCells aa[1..50] ! aa[51..100];
} // end ScanChain
} // end ScanStructures
/* Once a scan chain is defined as an indexed list, then it can be referenced in statements that need to access these
cells, as shown in the following example. Note: This example is taken from 1450.6, but since it is within an Environment block it is acceptable syntax within 1450.1. */
Environment {
CTL {
Internal {
sig[5..9] { IsConnected In ScanSignal chain1 aa[23..27]; }
sig[12..22] { IsConnected In InternalSignal corex aa[55..65]; }
} // end Internal
} // end CTL
} // end Environment
15.3
The ScanModule block is used when a previous ScanChain found under one ScanStructures block, is incorporated
into another ScanStructures block. This mechanism allows for hierarchical scanchain declaration, with the requirement that the previous ScanCell declaration be precisely maintained in this new ScanStructures context. The following example is based on the structure presented in figure 2.
The scanchains of module CPUX are defined, in order to reuse these definitions as components of a scanchain for
module Custom1. The following ScanStructures supports this representation:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause 15.3 *}
}
ScanStructures CPUX {
ScanChain A { ScanCells {} }
} // end ScanStructures
ScanStructures CUSTOM_1 {
39
module CUSTOM_1
module CPUX
INSTANCE_A
module CPUX
INSTANCE_B
scanchain A
scanchain A
16.
This clause defines additional formatting capabilities for defining pattern data. All statements as defined in IEEE Std.
1450-1999 clause 21 are unchanged.
16.1
Cyclized Data
The cyclized data construct is expanded to support the use of logical expressions. Logical expressions appear in two
contexts under cyclized data:
sigref_expr = logical_expr ;
logical_expr ;
When assigned to a sigref_expr, the logical expression shall be a sigvar_expr, or of type Integer and the sigref_expr of
Base Integer. When a logical expression is used as a complete statement, the expression is of any supported type. This
form of statement is used to manipulate Variable values.
16.2
The vector data mapping function allows for a new waveform definition to be selected for a given waveform character
in a vector. This is most useful in the case of parameter passing to a macro or procedure, however can be used anywhere a waveform character string is formed. The Join function allows to have two WaveformCharacters against
the same signal in one vector. This enables structuring of STIL pattern output using Procedures.
The WFCMap statement, which is defined in clauses: Signals Block - Extensions to STIL0 clause 14 on page 24,
and SignalGroups Block - Extensions to STIL0 clause 15 on page 26 is used to specify the mapping on a per-signal
or per-group basis. This data, in conjunction with the \m and \j in the pattern data, together specify the resultant waveform character to use in resolving a vector.
40
16.3
When specifying data for simulation stimulus, it is often times the case that the desired level of a given pin (input
drive or output compare) is known while the exact timing waveform which is appropriate for the cycle is not known.
This, in many cases, is why simulation for test generation is done. The simulator (or STIL consuming co-simulation
engine) would use the raw data, and the conditions of the device under simulation to determine the WaveForm Character which will be included in the test pattern.
Syntax Definition:
The base override flag, \e shall be added to the vec_data flags for specifying raw event data. The \e applies to all
characters that follow until the occurrence of a space or a semicolon. Raw data shall take the following form:
Drive
Expect
High
Low
Off
Unknown
Unspecified
17.
This clause defines additional statements that are allowed within the Pattern block. All constructs and definitions of
IEEE Std. 1450-1999 clause 22 remain in effect.
17.1
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
42
no tag is present, then the offset and iteration shall be relative from the beginning of the pattern.
Cycle VECTOR_CNT. The number of vectors executed since the beginning of the current pattern. The first vector is
counted as vector number 1.
Iteration ITERATION_CNT. The number of iterations that the following vector being referenced has been applied
including the current iteration. This is associated with vectors which are surrounded by Loop constructs such as
can be defined with Loop, MatchLoop, and Goto statements. If the vector being referenced is within a nested loop,
the iteration count will be the total iterations that the vector has been applied across all loops. The iteration count is
always a positive integer.
PatternOffset VECTOR_CNT. The number of vectors executed (not including the following one being referenced)
since the beginning of the pattern. The Offset vector count is a non negative integer. The first vector of the pattern
is counted as 1.
TagOffset VECTOR_CNT. The number of vectors executed (not including the following one being referenced) since
the last cross-reference TAG was established. The Offset vector count is a non negative integer. If no offset is
specified then the default is zero.
(8) Loop Data : The Loop construct is expanded to support the keyword Data. This construct is used only for Loops
inside Macro and Procedure bodies. This Loop statement iterates, replacing each # parameter with a data value until
there are no more data values defined. It is an error if all data values are not consumed by the # parameters in the
Loop.
43
17.2
Pattern Examples
17.3
Structured test patterns often have signals constrained to have a certain value or waveform during a pattern sequence.
This may be required, for example, for ATPG scan rules checking (such as a test mode signal always active) or for
differential scan or clock inputs. These constructs help reduce pattern volume, as the value of a constraint signal does
not need to be specified explicitly in the pattern data. Also, ATPG rules checking requires signal constraint information as input.
Two new STIL pattern statements are defined:
( LABEL : ) F(ixed) { (cyclized-data)* (non-cyclized-data)* }
The "Fixed" statement is used to define stimulus and/or response fixed for all subsequent vectors, until the end of the
current Pattern or Procedure. Every Procedure starts its own environment, not inheriting Fixed data from its caller.
Upon return from a procedure, the Fixed values of the caller are re-instantiated. Subsequent vectors may redundantly
define the same WaveformCharacter assignments as in the Fixed statements; however, no vector is allowed to define a
WaveformCharacter assignment in contradiction with the Fixed statements in effect. The Fixed pattern statement does
not result in a tester cycle, but constraints and sets values for all following cycles within its scope.
( LABEL : ) E(quivalent) SIG-EXPR-LIST ;
The Equivalent statement is used to define an equivalence relationship between two or more signals. Equivalence
implies that the signals are assigned the same WaveformCharacter. Additionally, a signal or signal expression is
optionally preceded by \m to indicate that the WaveformCharacter is to be mapped before the equivalence is applied.
All signal expressions in sig-expr-LIST shall have the same number of signals; the first signals of the signal expression are equivalent, the second signals of all signal expressions are also equivalent, etc. The scope of these equivalences extends for all subsequent vectors, until the end of the current Pattern or Procedure. Vectors may assign
WaveformCharacters to any non-empty subset of equivalent signals and the equivalence relationship extends the
assignment to the other signals in the equivalence class. For example, in:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause 17.3 *}
}
Signals {
44
17.4
The X (Cross-Reference) statement may be used to tag, as well as refer to, positions within a STIL Pattern block as
being important cross-reference points. Any vector may be preceded by an X statement, thereby associating that vector to the given cross-reference tag. Unlike Labels, the cross-reference tag may be identical on multiple vectors.
This supports the case where a single complex STIL vector is translated to multiple tester vectors.
One application of the X statement is to provide fail data feedback as a mechanism for failure diagnosis. For this, the
X statement is used in two contexts. First, the STIL pattern block is augmented with X statements to tag key vectors
during test generation. Secondly, the failures collected, when applying the patterns at the tester, are logged and then
converted into a STIL failure file. This failure file will contain X statement cross-references to correlate the failures
back to the vectors tagged in the original STIL file during test generation. For further details see annex N.
The X statement has two forms. The simple statement form shall be used to convey or refer to a cross-reference tag.
The block form shall be used to refer to a cross-reference tag and to convey offset information relative to that crossreference as well as the number of iterations that have occurred for the following vector being referenced.
Question: The following needs review by WG:
There is an implied hierarchy for X statements from the mainline STIL patterns to the
procedures/macros. This is realized by the concatenation of the "tag" of the current X
statement to that of the calling blocks (i.e. mainline STIL file or procedure or macro block) current X statement
value. I think we would
45
17.5
17.6
The Loop Data and the Shift statements perform similar functions - the will loop over a sequence of pattern statements; they may be used only in procedures or macros; they take parameters from the calling pattern statements and
apply the parameters to signals; they take signal-variable data and apply it to signals. The difference between the Shift
and Loop Data is that the Shift is specifically designed in support of scan load/unload operations, whereas Loop Data
is a general construct for providing data-dependent loops. The following rules further identify the differences:
1.
Within a Shift block, the parameters to be shifted shall be determined by the presence of a ScanIn or
ScanOut attribute in the Signal or SignalGroups block. This is as opposed to implying the shift from the
presence of # characters.
2.
Foreach ScanIn/ScanOut signal within a Shift block, the shift data can be defined in two ways: a) a
parameter defined by # notation; b) an in-line series of wfcs
3.
Within a Loop Data construct at least one WaveformCharacter assignment inside this Loop shall contain
a # for the waveform-character.
4.
The loop size for a Shift block is determined by the length of the longest scan chain.
5.
The loop size for a Loop Data is determined by the length of the longest parameter.
6.
Padding rules are the same for both Shift and Loop Data.
Pattern run1 {
Call variable_loop { sig1=010; }
Call variable_loop { sig1=00000; }
} // end Pattern
// ABC is a SignalVariable
// ABD, DEF are two SignalVariables
// with indexed SignalVariable
// with multi-bits of a SignalVariable
// illegal
// illegal
Pattern run2 {
Call shift_load {
ABC=1100;
XYZ[1..20]=11111000001111100000;
DEF=101;
} // end Call
} // end Pattern
17.7
The Loop statement as defined in STIL0 is extended to allow the use of integer expressions. This extension applies to
clause 22.6 "Loop statement" and to clause 22.7 "MatchLoop statement". The following are example of this usage:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause 17.7 *}
}
Variables {
count Integer { InitialValue 100; }
}
Signals { clk In; a[1..8] In; b[1..8] Out; }
SignalGroups {
some_pins = a[1..8]+b[1..8];
} // end SignalGroups
Procedures {
proc1 {
C { count = #; clk=0; some_pins=\r8 0 \r8 X; }
Loop count { V { clk = P; } }
V { some_pins = 11110000 HHHHLLLL; }
} // end proc1
} // end Procedures
Pattern pat1 {
Call proc1 { count=200; }
} // end Pattern pat1
49
19.
Environment block
The Environment block contains constructs to cross-reference STIL information with other environments, for example a simulation or layout netlist environment. The Environment block may be used by tools that operate in the specified Environment and access STIL data. The Environment block may also contain additional information specific for
the particular environment.
50
19.1
Environment Syntax
Environment (ENV_NAME) {
( InheritEnvironment ENV_NAME ; )*
( NameMaps (MAP_NAME) {
InheritNameMap ENV_NAME(.MAP_NAME) ;
( ScanCells { (CELLNAME MAP_STRING; )* } )*
( Signals { (SIG_NAME MAP_STRING; )* } )*
( SignalGroups (DOMAIN_NAME) { (GROUP_NAME MAP_STRING; )* } )*
( Variable { (VAR_NAME MAP_STRING; )* } )*
( AllNames { (ANY_NAME MAP_STRING; )* } )*
} )* // end NameMaps
( FileReference FILE_PATH_NAME; )*
( FileReference FILE_PATH_NAME {
Type file_type ;
Format file_format ;
Version VERSION_NUMBER ;
} )* // end FileReference
(ENVIRONMENT_DEFINED_STATEMENTS)*
// end Environment
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(9) AllNames: This optional block supports an Environment that does not partition namespaces with the same
structure as STIL, and supports mapping of names from additional STIL constructs (such as objects in user-defined
blocks).
ANY_NAME MAP_STRING: Statement to map any STIL NAME, into the name used in the external
Environment.
(10) FileReference FILE_PATH_NAME: The FileReference statement is used within an Environment block to specify
various other files associated information. The content and application of the referenced files is not specified in STIL,
but is the responsibility of the tool or application using the Environment block. For instance, if the patterns are in
STIL then they would be Included, but if the patterns were in WGL or some tester-specific format, this mechanism
would be used to reference that data.
(11) Type file_type: Specifies the type of this file. The file type shall be one of the specified types, or else User
followed by the user type name.
(12) Format file_format: Specifies the format of this file type. The file format shall be one of the specified formats for
the associated type, or else User followed by the user type name.
(13) Version VERSION_NUMBER: A quoted string identifying the version of this file. The format and information
of the VERSION_NUMBER is dependent on the file type and format, and not defined here.
(14) ENVIRONMENT_DEFINED_STATEMENTS: These are semicolon-terminated or braced statements that follow the
STIL requirements, but do not require a UserKeyword statement to identify these blocks. The environment defined
statement and semantics associate with the specification for the extension as identified in the STIL {} block.
19.2
"MAP_STRING" Syntax
The target "MAP_STRING" is used to map STIL names into an external environment. If the target name contains
either a double-quote or a back-slash, then the following syntax shall be used in the target string. It is an error for any
character other than double-quote or back-slash to following a single back-slash.
double-quote: "blah_blah\"blah_blah"
back-slash: "blah_blah\\blah_blah"
52
"blah_blah\blah_blah"
A typical useage of this back-slash notation is in mapping strings into Verilog names. The following is an example of
this transformation:
MAP_STRING in STIL = "\\\"abc[15] "
Verilog string
= "\"abc[15] "
Note1: Per 1450-1999 definition, the double-quote character is NOT allowed in a STIL string.
Note2: In the above examples, the outer double-quotes are not part of the name, whereas the inner double-quote is
part of the name. The outer double-quotes are delimiters in both STIL and Verilog representations.
19.3
Environment Example
19.4
NameMaps Example
The NameMaps block relates STIL names to external environments. An example of an application of this construct,
53
20.
The BistStructures block allows CAD tools (such as ATPG and simulators) to check BIST-related design rules (such
as X-propagation) and to compute BIST signatures. The simulation of BIST functions is very efficient because the
internal gates of the BIST registers do not need to be simulated once the function of the BIST register and its connections are known to the simulator.
20.1
Syntax Definition
BistStructures (BIST_NAME) {
( BistRegister BISTREGNAME {
Usage < PatternGenerator | SignatureAnalyzer | CircularBIST >;
Type < LFSRInternal | LFSRExternal | CA >;
Length integer_expr;
( BistClock SIGNAL_NAME; )
( TapPositions integer_list; )
( TapPositions {
Positions integer_list;
TapFrom integer_list;
} )* // end TapPositions
( Connection (!) SIGNAL_NAME integer_list; )*
( Seed integer_expr; )
( ScanChains (SCAN_CHAIN_NAME)+ ; )
( EndState integer_expr; )
( NextstateOffset integer_expr; )
( FirststateOffset integer_expr; )
} )*
// end BistRegister
( BistLength integer_expr; )
( BistcycleLength integer_expr; )
( CaptureCycles integer_expr; )
// end BistStructures
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(1) BistStructures: Block to define BIST structures i.e., a group of BistRegisters that operate in parallel, and their
common attributes.
BIST_NAME: Optional name of this BistStructures block. Required if multiple BistStructures blocks are defined.
(2) BistRegister: Block to define a single BIST register. Multiple BIST registers may be defined in the
BistStructures block. BISTREGNAME is a unique name associated to each BIST register definition.
(3) Usage: Identifies the nature of the BIST register: PatternGenerator for a pseudo-random pattern generator,
SignatureAnalyzer for a signature register, CircularBIST for both (circular BIST).
(4) Type: Identifies how the cells of BIST register are connected to perform their function: LFSRInternal and
LFSRExternal for linear-feedback shift registers with the XOR gates between the cells (instream) and outside the
cells (out of stream) respectively; CA for cellular automata BIST register.
(5) Length: Identifies the number of bits the BIST register has.
(6) BistClock: Identifies the signal which advances the BIST register to its next value. This signal is a functional, not
a scan clock.
(7) TapPositions: Identifies how the cells of the BIST register are connected to each other. The first format applies to
all bits of the BIST register and identifies which bit positions are XORed to form the tapped input. In the second
format, Positions integer_list indicates to which bits of the BIST register TapFrom integer_list applies. Refer to See
clause 6.5 on page 14 for definition of integer_list.
55
56
20.2
The example defines a BIST registers: "cella_prpg" used as pattern generator. The register is an array of cellular
automata (Type CA). The Length field specifies the number of bits and the Seed specifies the initial value. The TapPositions fields describe the structure of the BIST register: For CAs, the tabs are relative to the current cell (cell 0),
thus "cella_prpg" has the odd bits (1, 3, 5, ...) connected to their two nearest neighbors and to themselves (-1, 0, 1).
Meanwhile, the even bits (0, 2, 4, ...) are only connected to their nearest neighbors (-1, 1). The Clock field declares
the signal ck1 that advances the BIST register. The Connection fields list the connections of BIST register bit cells to
points in the netlist. Bits 0, 1 and 2 are XORed and connected to prpg_sig1; bit 4 is connected to prpg_sig2,
etc.
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause 20.2 *}
}
Signals {
prpg_sig1 Pseudo; prpg_sig2 Pseudo; prpg_sig3 Pseudo;
prpg_sig4 Pseudo;
} // end Signals
BistStructures {
BistRegister cella_prpg {
Usage PatternGenerator;
Type CA;
Length 27;
TapPositions {
Positions 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25;
TapFrom -1, 0, 1;
}
TapPositions {
Positions 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26;
TapFrom -1, 1;
}
Connection prpg_sig1 0..2;
Connection prpg_sig2 4;
Connection prpg_sig3 10;
Connection prpg_sig4 20;
Seed \h7FF_FFFF;
} // end BistRegister
} // end BistStructures
20.3
The example below shows a STUMPS logic-BIST architecture. The PRPG-LFSR, implementing the polynomial
4
f ( x ) = x + x + 1, and the phase shifter are from [1] page 176. The MISR-LFSR implements the polynomial
4
57
PRPG
LFSR
si0
si1
si2
si3
si4
si5
phaseshifter
design tested
compactor
MISR LFSR
Pseudo
Pseudo
Pseudo
Pseudo
{
{
{
{
si2 Pseudo {
si5 Pseudo {
} so2 Pseudo
} so5 Pseudo
ScanIn }
ScanIn }
{ ScanOut }
{ ScanOut }
}
ScanStructures {
ScanChain c0 {
ScanChain c1 {
ScanChain c2 {
ScanChain c3 {
ScanChain c4 {
ScanChain c5 {
}
ScanIn
ScanIn
ScanIn
ScanIn
ScanIn
ScanIn
si0;
si1;
si2;
si3;
si4;
si5;
ScanOut
ScanOut
ScanOut
ScanOut
ScanOut
ScanOut
so0;
so1;
so2;
so3;
so4;
so5;
}
}
}
}
}
}
BistStructures {
BistRegister prpg {
Usage PatternGenerator;
Type LFSRExternal;
Length 4;
TapPositions 0 1;
Connection si0 3;
Connection si1 0 1 3;
Connection si2 1..3;
Connection si3 0;
Connection si4 0 1;
Connection si5 0 2;
BistClock bclk;
}
BistRegister misr {
Usage SignatureAnalyzer;
Type LFSRInternal;
Length 4;
TapPositions 3;
Connection so0 3;
Connection so1 2;
Connection so2 1 2;
Connection so3 1;
Connection so4 0;
Connection so5 0;
BistClock bclk;
}
CaptureCycles 1;
}
// The following procedures outline the function of this logic BIST system:
Procedures {
bist_load_unload { // shift internal channels
W bist_waveform_table;
Loop 500 { // longest scan chain is 500
V { bclk = P; } // pulse bclk (waveform for P not shown)
}
}
load_unload { // shift prpg and misr
59
[1] P. H. Bardell, W. H. McAnney, J. Savir, Built-In Test for VLSI: Pseudorandom Techniques, John
Wiley & Sons, 1987.
20.4
Commonly, BIST registers will also be connected and accessed as a scan chain, to support observability and controllability operations. The BistCell statement of the BistStructure block is used to identify the relationship of the BIST
registers to the ScanStructure block. This is shown in the example below, which references only the LFSR and MISR
registers of the previous example, and identifies only the scanchain connection for these elements.
PRPG
LFSR
B1_si
L3
L2
L1
B1_so
L0
design tested
MISR LFSR
B2_so
M3
B2_so
M2
M1
M0
60
61
Annex A
Glossary (informative)
The following terms and definitions are used within the context of this standard: in this document.
A.1
boolean_expr: (A) A metatype used to present language constructs. (B) A reference to an logic expression
that evaluates to a boolean - True or False. See clause 6.2 on page 12.
A.2
cellname_list: (A) A metatype used to present language constructs. (B) A reference to a an expression containing internal cell names. See clause 6.3 on page 12.
A.3
False: The value 0 (zero) or a negative value returned from the evaluation of a boolean expression.
A.4
integer_expr: (A) A metatype used to present language constructs. (B) A reference to an logic expression
that evaluates to an integer value. See clause 6.4 on page 13.
A.5
integer_list: A list of space separated integers, or pairs of integers separated by the ".." operator. See See
clause 6.5 on page 14. See clause 6.5 on page 14.
A.6
logical_expr: (A) A metatype used to present language constructs. (B) A reference to a an expression containing Signals, SignalGroups, Variables, and Enumerations. See clause 6.6 on page 14.
A.7
sigvar_expr: (A) A metatype used to present language constructs. (B) A reference to a an expression containing WaveformCharacter lists. See clause 6.8 on page 16.
A.8
True: A non-zero positive value returned from the evaluation of a boolean expression.
A.9
WaveformCharacter: A single alphanumeric character representing a reference to a Waveform defined in
the current WaveformTable.
A.10
WaveformCharacter list: A list or series of alphanumeric characters, each character representing a reference to a Waveform defined in the current WaveformTable.
62
Annex B
B.1
STIL defines a mechanism for passing multiple bit data from a vector to a WaveformTable (see IEEE Std. 1450-1999
clause 21.2). Using pattern expressions, the same parameter passing mechanism also can be applied to the parameters
to a Macro or a Procedure. An example of this is:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause B.1 *}
}
Signals {
sig[1..5] In;
}
SignalGroup {
grp = sig[1..5];
p1 SignalVariable { Length 5; }
p2 SignalVariable { Length 5; }
p3 SignalVariable { Length 5; }
}
MacroDefs
m1 {
C {
V {
V {
V {
}
}
{
p1 = #; p2
grp = p1
grp = p2
grp = p3
=
;
;
;
#; p3 = #; }
}
}
}
Pattern p1 {
Macro m1 { p1=11111; p2=00000; p3=11111; }
Macro m1 { p1=00000; p2=11111; p3=00000; }
}
B.2
Vector data is passed from vectors to Macros or Procedures by means of signal group oriented strings of waveform
characters. A new capability in MacroDefs or Procedures allows the waveform characters from the parameters to be
mapped onto other signal groups as required by the core test design interface. An example of a vector data expression
is:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause B.2 *}
}
Signals {
x[0..27] InOut;
}
SignalGroups {
63
Top
sig_aa[1]
sig_aa[2]
sig_aa[3]
sig_aa[4]
sig_aa[5]
sig_a[1]
sig_a[2]
sig_a[3]
sig_a[4]
sig_a[5]
sig_bb[1]
sig_bb[2]
sig_bb[3]
sig_bb[4]
sig_bb[5]
sig_b[1]
sig_b[2]
sig_b[3]
sig_b[4]
sig_b[5]
Sub-module
sig_cd
sig_c[1]
sig_c[2]
sig_c[3]
sig_c[4]
sig_c[5]
sig_d
SignalVariable;
SignalVariable;
SignalVariable { Length 5; }
SignalVariable;
SignalVariable { Length 5; }
MacroDefs {
mac_a {
C { sig_a[1..5] = #; sig_b[1..5] = #; grp_c = #; sig_d = #;}
V { sig_aa[1..5] = 'sig_a[1..5]'; }
V { sig_bb[1..5] = 'sig_b[5,3,1,2,4]'; }
//
V { sig_bb[3,4,2,5,1] = 'sig_b[1..5]'; } // alternate stmt
C { grp_c[5,4,3,2,1] = grp_c; }
Shift {
V { sig_cd = 'sig_d[1..5]' 'grp_c[1..5]' ; }
//
V { sig_cd = 'sig_d[1..5]' 00000 ; } // alternate stmt
//
V { sig_cd = 00000 'grp_c[1..5]' ; } // alternate stmt
}
65
66
Annex C
67
Annex D
grp_1
sig_1
sig_2
sig_3
sig_4
grp_2
sig[5]
sig[6]
sig[7]
sig[8]
sig[9]
sig[10]
grp_3
sv_1
69
2.
3.
Using integer logic expressions to create algorithmic data on signals and groups.
71
Annex F
This example takes two existing modules with one scan chain each and integrate them at the chip level by creating a
single scan chain. The resulting chip could be a module itself and hence the STIL at the chip level is of special interest.
Chip
Chip_clk
SI12
Chip_SE
C1
si1
se1
C2
so1
abc
ABC
si2
se2
so2
SO12
xyz
XYZ
module C1 comes with STIL to define the operation of the scan chain and the vectors that use the scan chain. For this
example, module C1 has a Macro to operate the scan chain and some patterns that use the macro.
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause F *}
}
Macro_Scan_C1 {
W W1;
C { se1 = 1;}
Shift { V{ si1=#; so1=#; clk1=P;} }
V { abc = #; }
}
Pattern P1 {
Macro_Scan_C1 { si1=101010; so1=LLHHLL; abc=000;}
}
Similarly, module C2 has a macro that operates the scan chain and patterns that use the macro.
Macro_Scan_C2 {
W W2;
C { se2 = 1;}
Shift { V{ si2=#; so2=#; clk2=P;} }
72
Aliasing Problem:
Let us consider the situation where both modules are the same. That is we only have one set of pattern data.
Macro_Scan_C1 {
W W1;
C { se1 = 1;}
Shift { si1=#; so1=#; clk1=P;}
73
P1 {MacroDefs D1;}
P1 {MacroDefs D2;}
}
}
74
Annex G
This is and example of the user of the signal mapping operation. Refer to Vector data mapping and joining - \m and
\j on page 40 for the definition of syntax and semantic.
G.1
Use Case #1
Inversion of a signal is a common reason for using the map function. The characteristics of the inverted waveform can
be completely defined in the new waveform definition that is to replaced the one originally called for. The following
is a table of the typical transformation that would caused the waveform inversion:
D -> U
U -> D
L -> H
H -> L
l -> h
h -> l
Z -> N
T -> X
t -> X
N -> N
X -> X
Use Case #2
In certain scan test styles it is necessary to measure the output of the DUTs bidis in one cycle and then drive the same
logical values on the same bidis from the tester in the next cycle, while also turning the internal bidi drivers off. A test
patterns thus has the following format:
(1) load scan chains
(2) force values on primary inputs (all clocks are off, bidis are driven by DUT)
(3) measure primary outputs and bidis (all clocks are off)
75
77
Annex H
The Join function allows to have multiple WaveformCharacters against the same signal in one vector. This annex is
an application of this capability. Refer to Vector data mapping and joining - \m and \j on page 40 for details of the
syntax and semantics.
H.1
Example
While any signal or signalgroup may be mapped, it is more common to use the \j mapping to control WaveformCharacter assignment to bidirectional (InOut) signals or signalgroups. This enables structuring of STIL patterns using Pro-
Measure
0, 1, Z, N
L, H, T
H, T
H, T
78
Usage Example
Consider a design with one input, one output and two bidis, declared as follows:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause H.2 *}
}
Signals { i In; o Out; b1 InOut; b2 InOut; }
Signalgroups are also defined:
Signalgroups {
"_pi" = 'i + b1 + b2';
"_po" = 'o + b1 + b2';
_io = b1 + b2;
}
Patterns are written out using capture procedures defined as follows:
Procedures {
"capture" {
V { "_pi"=### ; "_po"=###; }
}
}
Consider an automatically-generated (ATPG) test pattern that includes the following cycle:
force_all_pis { i=0; b1=Z; b2=1; }
measure_all_pos ( o=H; b1=H; b2=X; }
In STIL, this would be written as:
Call capture { "_pi"=0Z1; "_po"=HHX; }
Understanding how STIL is interpreted by the consumer of the patterns, the actual arguments are substituted for the
formal arguments # in the body of the procedure, and the signalgroups _pi and _po are expanded to their signals,
resulting in:
79
80
Annex I
This annex describes a usage scenario that combines several capabilities defined in this standard to provide complete
support for returning tester information for evaluation or review by CAD tools. While this example is oriented around
returning information for diagnostic applications, this functionality is not constrained to this application. This scenario can also be applied to the general notion of "learn-mode" tester operation, where the test provides the stimulus
only and the response is "learned" by reporting the behavior from testing known-good devices. Integration of the
return values in this mode of operation into a new test program is the responsibility of the CAD environment interpreting the returned data.
To support the return of test values from a STIL test program, several constructs need to be present in the program.
This example assumes a scenario where the desired return information is a subset of both the set of signals in the
design (that is, only one Signal needs to be evaluated), and a subset of the test vector sequence (that is, there is a specific region of the test where this information is needed). This scenario presents the "worst-case" application of these
constructs; see the Note at the end for a discussion about the consequences of generalizing these restrictions.
I.1
The set of signals that return response data are identified by defining a new Waveform for those signals. This Waveform contains an "S" or CompareSubstitute event for the region where the value needs to be checked. Typically, the
timing of the S event will coincide with the timing for CompareLow and CompareHigh checks also defined (but may
not be used) for that Signal. For example, if the original waveforms on Signal A1 were defined as:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause I.1 *}
}
Timing {
WaveformTable A {
Period '20ns';
Waveforms {
A1 { 01X { '14ns' l/h/x; '18ns' X; }}
}
}
}
Then the additional Waveform could be defined as follows:
Timing {
WaveformTable A {
Period '20ns';
Waveforms {
A1 { 01XC { '14ns' l/h/x/s; '18ns' X; }}
}
}
}
If the timing of the compare-low check does not match the timing of the compare-high check, a decision is made on
how to define the timing of the waveform containing the S event. Typically, the S event would be defined in a waveform that defined the overlapping region of both the low strobe and the high strobe, in order to return the correct value
if either of these states was detected during the test execution.
I.2
There may be several Waveforms defined on a Signal that have the same or similar characteristics to the Waveform
81
I.3
The final step is to identify the desired pattern location where response data is desired. This is indicated by the application of the WaveformCharacter that contains an S event, in the Pattern data. One example of this is:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause I.3 *}
}
Pattern diag_one {
...
"Pattern17": Loop 200 { V { clk=P; A1=C; } }
...
}
This will enable the response-return for all Vectors inside this single Loop construct (in this example, for the 200 Vectors contained in this Loop).
I.4
The return format for this information is tester-dependent, but a recommended format using STIL constructs would
be to return this data following the diagnostic information return for failing data as shown in annex M. For example,
the return data for this scenario could look like:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause I.4 *}
}
Signals {
A1 Out { WFCMap { C -> 01X; } Base Hex 01; }
82
83
Following is an example of Fixed and Equivalent statements used in Pattern cpat. For the first two vectors, signals a
and b must be 0 and signals c and d must be either 0 and 1, or 1 and 0 or have both WaveformCharacters other
than 0 and 1.
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause J.1 *}
}
Signals { a In; b In; c In; q Out;
d In {
WFCMap { 0->1; 1->0; }
}
}
SignalGroups { cinputs a+b; }
Timing {
WaveformTable myWFT {
Period '10ns';
Waveforms {
cinputs+c+d { 01ZN { '0ns' D/U/Z/N; } }
q { LHTX { '0ns' X; '4ns' L/H/T/X; } }
}
}
}
PatternBurst "_burst_" {
PatList { cpat }
}
Pattern cpat {
W myWFT;
Fixed { cinputs=00; }
Equivalent c \m d;
V { c=0; q=H; } // equivalent to V { a=0; b=0; c=0; d=1; q=H; }
V { c=1; q=L; } // equivalent to V { a=0; b=0; c=1; d=0; q=L; }
V { d=1; } // equivalent to V { a=0; b=0; c=0; d=1; q=L; }
Fixed { c=0; }// implies also Fixed { d=1; }
V {}
// equivalent to V { a=0; b=0; c=0; d=1; q=L; }
}
J.2
The following is an example of a test_mode signal, typical in a scan design, that needs to be constraint when applying
values on primary inputs, but not during load/unload of the scan chains. The Fixed statement is active in procedure
"capture_sysclk", but not in procedure "load_unload". Also, the design has differential scan inputs si1 and si1b, thus
the Equivalent statement is active in procedure "load_unload", but not in "capture_sysclk".
84
85
Annex K
The ParallelPatList as defined in the PatternBurst block is fine for the case where the user wants a tightly coupled execution of patterns. This might be the case for testing a dual port access memory where the timing is asynchronous, but
the patterns are associated.
A different, but related application is where there are two independent sets of signals, timing, and patterns on a device
that are to be tested independently, with no regard for each other. Consider the following example, which assumes the
name Test to represent the collection of all entities necessary to execute this operation:
DUT signals
port_A signals
tmg_A
port_B signals
brst_A
tmg_B
exec_A
brst_b
exec_B
program
flow
test(n-1)
test(n)
test(n+1)
86
Annex L
The ScanStructures block is extended to include additional information required for efficient simulation of scan patterns, i.e., eliminating the need to serially simulate load/unload cycles. Refer to clause ScanStructure extensions for
the syntax definition. The ScanStructures block is optional in a STIL pattern file because the data is tester-ready.
However, the ScanStructures block may be used by a simulator to more efficiently simulate the load/unload of scan
chains by loading and unloading scan cells in parallel.
L.1
To use the tester-ready, serial data for parallel load/unload, the simulator must know the input and output inversions
for every scan cell with respect to the scan-input and scan-output pins of the scan chain. In STIL, these inversions are
represented by ! characters in the ScanCells list. However, this notation cannot unambiguously represent both input
and output inversions for all scan cells if one or more cells have internal inversions, as in the following example:
external inversion
internal inversion
scan_in
a1
a2
ScanCells !
a1
a2 !
ScanCells !
a1
a2
a3
scan_out
In this example, scan cell a2 has an internal inversion: the value scanned out of a2 is inverted with respect to the value
scanned into a2.
In the first ScanCells statement the inversion between a2 and a3 implies that the output of cell a2 is inverted at the
scan_out pin, which is incorrect. The second ScanCells statement correctly represents the output of cell a2 (noninverted at scan_out), but incorrectly shows the input of a3 inverted with respect to the scan_in pin, whereas in reality
the two inversions cancel each other out and make the input of a3 non-inverted with respect to scan_in. There is no
correct representation of this scan chain using this limited ScanCells notation.
Using the extensions to the ScanStructures block, the above example can be correctly represented as follows:
In the following example, chain c1 is defined with 4 scan cells, cell a3 having a more complex definition. All inversions have been marked with a comment in the form /*invn*/ to facilitate explanations. Cell a3 resembles an LSSD
cell, with the master shift clock being ACLK and the slave shift clock being BCLK. The other scan cells would typi-
87
inv1
inv2 inv3
inv4
inv5
a3
scan_in
a1
a2
master
slave
a4
scan_out
shadow
Figure 11Example of scan chain including a cell with multiple state elements and
internal inversions
This scan chain is defined as follows:
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause L.2 *}
}
Variable {
}
ScanStructures G1 {
ScanChain c1 {
ScanIn c1_in;
ScanOut c1_out;
ScanCells { ! /*inv1*/; a1; a2; ! /*inv2*/;
a3 {
If scanmode > 0
CellIn ! /*inv3*/ master shadow ! /*inv4*/ slave;
if scanmode == 2
CellOut slave;
if scanmode == 1
CellOut master ! /*inv4*/;
}
a4; ! /*inv5*/; }
}
}
The simulation-only variable scanmode is declared as follows:
Variables {
scanmode {
Usage SimOnly;
InitialValue 2;
}
}
The variable scanmode controls simulation. The load/unload procedures are setting this variable as follows:
Procedures {
skewed_load {
88
value of scanmode
= #; c1_out = #; ACLK = P; BCLK = P; }
// reset
// master_observe mode
} // pulse B-clock
}
The pattern block need not be concerned with the details of the scan chain and does not explicitly change the variable
scanmode.
Pattern scan {
pattern 1: Call load_unload { c1_in = 0001; } // scanmode==2
Call skewed_load { c1_in = 0; } // sets scanmode to 0, then 2
V { ... }
Call master_observe; // scanmode==1
pattern 2: Call load_unload { c1_out = 1110; } // scanmode then 2
V { ... }
pattern 3: Call load_unload { c1_out = 1110; } // scanmode==2
}
In the pattern shown, the first vector (labeled pattern 1) calls the load_unload procedure. The simulator can
execute a fully parallel load of { c1_in = 0001; } because scanmode==2 (from its InitialValue in the PatternBurst). The first three bits applied on c1_in are 0, the last bit is 1. This results in the following values being
loaded:
a1 is the cell closest to the scan input c1_in and is thus loaded with the last value (1) of the 0001 string,
inverted as indicated by the ! /*inv1*/, thus a1=0.
a2 is the next cell, loaded with the next-to-last value (0), also inverted /*inv1*/, thus a2=1.
a3 is loaded with 0 inverted twice /*inv1*/ /*inv2*/; within a3 master has yet another inversion /
*inv3*/, thus a3/master=1 and a3/shadow=0.
a4 is the cell closest to the scan output c1_out and is thus loaded with the first value (0) inverted twice /
*inv1*/ /*inv2*/: a4=0.
Next, the skewed_load procedure is called in the Pattern block. The { c1_in = 0; } in this procedure must
be serially simulated because scanmode is set to 0, and will affect the values just loaded into the scan cells. At the
end, procedure skewed_load sets scanmode back to 2.
The following vector is also simulated. Next, the master_observe procedure is called. This procedure has no parameters, and only affects how the following call to load_unload (data { c1_out = 1110; } and labeled pattern 2) is to be interpreted, by setting scanmode to 1:
a4 is the cell closest to the scan output c1_out and is unloaded with the first value (1) of the 1110 string,
inverted as indicated by the ! /*inv5*/, thus a4=0.
a3 is the next cell, unloaded with the second value (1), also inverted /*inv5*/. Within a3, when scanmode==1,
the master is unloaded with yet another inversion /*inv4*/, thus a3/master=1;
a2 is the next cell, unloaded with (1) inverted twice /*inv2*/ /*inv5*/, thus a2=1;
a1 is the cell closest to the scan input c1_in and is unloaded with the last value (0) inverted twice /*inv2*/ /
*inv5*/, thus a1=0.
89
Next, load_unload is again called (label pattern 3). This time, scanmode is 2 (set at the end of the previous
load_unload). The same unload data { c1_out = 1110; } is now interpreted differently for cell a3:
a3 is the next cell, unloaded with the second value (1), also inverted /*inv5*/. Within a3, when scanmode==2,
the slave is unloaded, thus a3/slave=0;
L.3
Example: Complex and Multi-bit scan cells defined with hierarchical scan
The hierarchical scan construct allows common sub-elements of a scanchain to be defined once and instantiated as a
complete scanchain definition. This allows complex scan cell information to be represented once for a type of cell,
and also supports the notion of a multi-bit scan cell if the users perspective considers a single element of a scanchain to contain more than one scan state. Be aware in the example below, that the LSSD_MSS cell, while containing
2 state elements in the scan path, is always clocked such that only a single scan state is ever contained in these elements as discussed in the previous example.
LSSD_MSS
a1
ma
sl
LSSD_MSS
a2
ma
sl
_4_BIT_CELL LSSD_MSS
a3
a4
s1 s2
s3 s4
ma
sl
_4_BIT_CELL
a5
s1 s2
c1_in
s3 s4
c1_out
sh
sh
sh
}
}
91
EDA Software
Simulator
/ ATPG
- Patterns w/ Simulator References
STIL
STIL
Translator
STIL
Feedback
ATE Software
Failures relative to
Simulator References -
Datalog
Results
Vector to
Simulator Reference
Correlation
Tester Specific
Vectors
TESTER
A STIL file containing Fail Data Feedback shall appear very similar to a STIL file containing Test Patterns. Namely,
it will contain:
A Signals and/or SignalGroups blocks to identify the signals used to convey the failing pins. These blocks shall
be derived from the original STIL file.
A Timing block to identify the waveform characters used to convey failing state. This block may be derived from
the original STIL file and/or it may be created by the STIL Feedback software. The Timing block may define
new waveform characters which werent in the original STIL file. For example, a Pattern may consist of only
measure 0s, but the resultant testing may result in measure 1s or measure high impedance, requiring new
waveform characters to be added. The Timing block may also define waveforms consisting of only a fail event
without timing. Specification of the timing may not be required in performing the diagnosis.
A PatternExec block to associate the PatternBurst with the Timings.
A PatternBurst block to identify the failing Pattern.
A Pattern block to identify the failing Vectors, relative to the X statements. The Vectors need only convey the
actual failing measurements.
M.2
The following example illustrates the complete flow from simulation to return failure feedback. It consists of three
scenarios:
1.
A Functional subset. This subset of vectors contain no simulation references, and illustrates how failures may be conveyed relative to the start of a Pattern.
2.
A Scan subset. This subset of vectors contains key simulation references, and illustrates how failures
may be conveyed relative to the start of a scan operation (scan out), relative within a block of parallel
93
A Complex Timing subset. This subset of vectors contains key simulation references, and illustrates
how vectors may be split into multiple tester cycles, and how the original simulator reference is maintained.
Section 1: represents functional type pat terns (no 1.1.0 stim(001:0, 002:0, 003:1) meas(004:X, 005:X);
simulator references).
1.1.1 pulse(001) stim(002:1) stimlatch(101:0, 102:1,
103:1, 104:0, 105:0, 106:1, 107:1, 108:0, 109:0,
110:1);
1.1.2 pulse(001) stim(002:0) meas(004:0);
Section 2: represents scan type patterns (contain 1.1.3 pulse(001) meas(004:1);
1.1.4 pulse(001) meas(004:0);
simulator references).
1.1.5 pulse(001) meas(004:1);
Note: latches are defined in scan input to scan outloop 400
put order (i.e. latch 101 is connected to 003, latch 1.1.6 pulse(001) meas(004:1);
110 is connected to 005). Therefore, the scan data 1.1.7 pulse(001) meas(004:1);
appears inverted in STIL, since the first scan state 1.1.8 pulse(001) meas(004:0);
specified must be shifted completely through the scan
endloop
Simulator Write
chain.
1.1.9 pulse(001) stim(002:1) meas(004:X) measlatch(101:1, 102:0, 103:0, 104:1, 105:1, 106:0,
107:0, 108:1, 109:1, 110:0);
Section 3: represents a complex pattern which 1.2.0 stim(001:0, 002:0, 003:0) meas(004:X, 005:X;
1.2.1 pulse@10ns(001) stim@35ns(002:1)
requires multiple time-based events on one signal.
pulse@60ns(001) meas@80ns(004:1);
1.2.2 stim(001:0, 002:0) meas(004:X);
94
Simulator:
STIL Output
Signals { p001 In; p002 In; p003 In; p004 Out; p005 Out;}
SignalGroups { si=p003 {ScanIn 10;} so=p005 {ScanOut 10;}
pi=p001+p002+p003; po=p004+p005; }
Timing { WaveformTable simple { Period 100ns;
Waveforms { pi { 01 { 0ns D/U; }
P { 0ns D; 50ns U; 70ns D; } }
po { LHX { 90ns LHX; } } } }
WaveformTable complex { InheritWaveformTable simple;
Waveforms { p001 { Q { 0ns D; 10ns U; 20ns D;
60ns U; 70ns D; } }
p002 { Q { 35ns U; } }
p003 { Q { 80ns H; } } } }
} // Timing
complex timings
Section 1:
functional vectors
Pattern samples {
W simple;
V { p001=0; p002=0; p003=0; p004=X; p005=X; }
V { p001=P; p004=L; }
V { p001=P; p004=H; }
V { p001=P; p004=L; }
95
Section 2: scan
first measure
loop association
scan unload
Section 3: complex
timings
complex vector
W complex;
V { p001=0; p002=0; p003=0; p004=X; p005=X; }
X 1.2.1;
V { p001=Q; p002=Q; p004=Q; }
V { p001=0; p002=0; p004=X; }
} // Pattern sample
STIL Translator:
produces:
Timing sets
#Timing
T1 = cycle 100ns RZ 50/70ns, NRZ 0ns, strb 90ns
T2 = cycle 50ns, RZ 10/20ns, NRZ 35ns, strb 30ns
and
96
Vector Data
and
Vector to Simulator Cross-Reference
file (created/used locally by tester)
16 : 1.1.2
20 : 1.1.6
23 : 1.1.9
34 : 1.2.1
35: 1.2.1
#Vectors
#Addr/Timing
1/T1
2/T1
3/T1
4/T1
#
5/T1
6/T1
7/T1
8/T1
9/T1
10/T1
11/T1
12/T1
13/T1
14/T1
15/T1
16/T1
17/T1
18/T1
19/T1
LOOP 400
20/T1
21/T1
22/T1
ENDLOOP
23/T1
24/T1
25/T1
26/T1
27/T1
28/T1
29/T1
30/T1
31/T1
32/T1
#
33/T1
34/T2
35/T2
36/T1
p001
0
P
P
P
p002
0
0
0
0
0
P
P
P
P
P
P
P
P
P
P
P
P
P
P
0
1
1
1
1
1
1
1
1
1
1
0
0
0
0
1
1
0
0
1
1
0
0
1
1
0
0
0
0
0
X
X
X
X
X
X
X
X
X
X
X
L
H
L
H
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
P
P
P
0
0
0
0
0
0
H
H
L
X
X
X
P
P
P
P
P
P
P
P
P
P
0
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
X
X
X
X
X
X
X
X
X
X
L
H
H
L
L
H
H
L
L
H
0
P
P
0
0
1
1
0
0
0
0
0
X
X
H
X
X
X
X
X
97
Address
3
18
21
28
35
Loop
Iteration
141
Pin
p004
p004
p004
p005
p004
Measure
State
Z
H
Z
L
L
Pattern sample {
W datalog;
X { Offset=2; }
V { p004=Z; }
X 1.1.2 { Offset=2; }
V { p004=H; }
X 1.1.6 { Iteration=140; Offset=2; }
V { p004=Z; }
X 1.1.9 { Offset=5; }
V { p005=L; }
X 1.2.1;
V { p004=L; }
}
98
Annex N
STIL writers will primarily output STIL scan-based patterns using a merged format, being motivated by the test time
reduction savings. Typically, in a merged scan format, the unload operation of a scan pattern is merged in with the
load operation of the next subsequent scan pattern. This results in effectively cutting in half the number of vectors
applied.
As a result of outputting STIL patterns in merged format, there exists no convenient location in the STIL patterns to
place a STIL BreakPoint statement. For a BreakPoint statement to exist within STIL scan patterns which are in
merged format, it would typically need to exist between the two unload/load operations that have been merged
together. When processing large sets of patterns, there exists a need to break those patterns up into smaller, more
manageable, pattern segments. If the patterns being processed are merged scan patterns, then there is no standard way
of breaking them up into independent patterns segments.
STIL BreakPoint statements are used to segment the patterns into logical chunks by identifying the points in the patterns where they may be broken up. Breaking up STIL patterns at the BreakPoint statement will ensure that the resulting pattern segments will each function independently of each other, and that these segments may be applied as a
standalone entity to a tester or simulator.
By using the MergedScan() function, STIL writers can provide both merged and unmerged formats of scan patterns
within a single pattern instance. Usage of either the merged or unmerged formats is then left up to the STIL consumers to use on a pattern by pattern basis, depending upon their processing requirements and resources. An example of
this is shown below.
N.1
This example shows the usage of the MergedScan() function and how it may be applied in scan procedures or macros
containing shift blocks.
First the Signals and SignalGroups blocks defining the scanin and scanout signals and groups
STIL 1.0 { Design 2001; }
Header {
Source "P1450.1 Working-Draft 14, Aug 1, 2002";
Ann {* clause N.1 *}
}
Signals {
...
si1
In {ScanIn 8;}
si2
In {ScanIn 6;}
so1
Out{ScanOut 8;}
so2
Out{ScanOut 6;}
}
SignalGroups {
si = si1 + si2;
so = so1 + so1;
...
}
Next, a Procedures block defining a single scan procedure to be used for all scan operations, both merged and
unmerged. Note the If/Else logic based on the result of a call to the boolean function MergedScan(). This is the key
area of the STIL patterns which allows for either a merged or unmerged representation of scan patterns. The If/Else
constructs will ensure a mutually exclusive relationship between these two formats such that the STIL consumer will
always apply one and only one of the scan formats.
Procedures {
99
scan {
C { si=\r2 0; so=\r2 X; }
// If the STIL consumers environment allows for a merged scan operation
If 'MergedScan()' {
Shift { V { si=#; so=#; clk=P; } }
}
// Else...STIL consumers environment requires unmerged scan operation
//
which includes a BreakPoint
Else {
Shift { V {
so=#; clk=P; } }
// unload
BreakPoint;
// break patterns here
Shift { V { si=#;
clk=P; } }
// load
}
}
// end scan procedure
// end Procedures block
Finally, the scan procedure defined above is used within the Pattern block to apply all the scan patterns. The actually patterns themselves have no special coding depending on whether the merged or unmerged scan patterns will be
used. This is completely encapsulated within the defined scan procedure.
Pattern scanpat {
Call scan { si1=00100110; si2=100111; }
// load
V { clks=PPP; pi=10101000001; po=ZHXXXLHZZXX; }
Call scan { si1=01000111; si2=001110;
// load/unload
so1=HHLHLLXL; so2=HXXLHL; }
V { clks=PPP; pi=11110101000; po=ZLLLLHHZZXL; }
...more patterns not shown
Call scan { si1=11110010; si2=111100;
// load/unload
so1=LLLLHXLH; so2=LHHLLL; }
V { clks=PPP; pi=11111001001; po=HLHLLLLLXZL; }
Call scan { so1=XLLHLHHH; so2=HHLLXH; }
// unload
}
N.2
The example above shows how STIL patterns can be written to allow representation of merged and unmerged scan
patterns within the same pattern instance. This clause describes how a STIL consumer may actually process the patterns above.
The MergedScan() function is a boolean function which returns true or false based on whether, when processing scan
patterns, the merged scan pattern format should be used. By default, this function return true. This would cause the
default behavior of all STIL consumers to output using merged format. During processing of patterns in some given
STIL consumer environment, it is determined by the STIL consumer that there exists a need to break the patterns due
to various factors relevant to that STIL consumer (e.g Tester Resources, Memory Limitations,...). At this point, the
STIL consumer switches the value returned by MergedScan() to be that of false.
The result of the MergedScan() function now returning false will cause the next subsequent procedure/macro call
which contains a call to MergedScan() to take the alternate path and generate patterns in unmerged format. As part of
the STIL consumer making the call to MergedScan() which returns false, the STIL consumer can then reset the
MergedScan() function back to its default of state of returning true for all subsequent calls.
In reality, a STIL consumer may not know when it needs to break the patterns up into a new pattern segment until it
has already processed to the point in the patterns where resource have been exhausted. In this case, the STIL consumer may need to buffer up STIL patterns and then when it determines it needs to break the patterns, it will break
them at that point and then re-process the buffered up patterns starting the new pattern segment at the beginning of the
100
101