Beruflich Dokumente
Kultur Dokumente
Test
2015 Cadence Design Systems, Inc. All rights reserved worldwide. Cadence and the Cadence logo are
registered trademarks of Cadence Design Systems, Inc. All others are the property of their respective
holders.
Contents
Purpose ....................................................................................................................... 4
Audience ...................................................................................................................... 4
Overview ...................................................................................................................... 4
Build Fault Model ......................................................................................................... 5
Controlling the Modelling of Faults............................................................................... 7
Excluding the dynamic faults from fault list .............................................................. 7
Fault Rule Files ........................................................................................................ 7
How to IGNORE few selected faults from the fault list ........................................... 18
How to No-Fault only the pins of a modules ........................................................... 21
How to ignore scan-enable/reset faults during TFT................................................ 22
How to migrate faults from the block level to the top level ..................................... 23
How to Fault-Only at the pins of an instance .......................................................... 25
How to ignore faults around blackboxes ................................................................ 27
Support ...................................................................................................................... 28
Feedback ................................................................................................................... 28
Purpose
This application note illustrates how to use various Faultmodel options efficiently
to control and modify the modelling of Faults as per user requirements.
Audience
All Encounter Test (ET) users who want to modify the Faultmodel.
Overview
This document describes various techniques used to control the modelling of faults
using Cadence Encounter Test. These techniques, based on the coverage calculations
and examples in different situations, are explained in detail.
The build_faultmodel command provides an option of fault rule file where a user can
direct the tool to take specified action on the listed faults. Some of the examples and
utilities where fault rules could be used as required are discussed in details. The
document explains the usage, syntax and application of the fault rule file with examples.
The ET ATPG flow starts with building a model of the design/netlist, a testmode and a
fault model. The faultmodel command identifies a list of faults that are to be targeted for
testing during ATPG.
The fault model can include static (stuck-at), dynamic (transition), Iddq, and parametric
(driver/receiver) faults, and other pattern faults defined with fault rules. By default, the
fault model includes static, dynamic, and Iddq faults. Parametric (driver/receiver) faults
are included only if they are explicitly selected.
The only required input for creating a default fault model is an ET Model. If test modes
exist, these are also used as input to build the fault model in determining the active fault
count. Faults are classified as inactive when they cannot be observed due to a
constraint while building the testmode. ATPG works on the active faults only for each of
the testmode.
build_model \
workdir=<workDir> \
designsource=<design_netlists.v> \
techlib=<library_files.v>
build_faultmodel \
workdir=<workDir>
The process of building the fault model is independent of any testmode(s) that might be
created, and, therefore, can be run either before or after defining the testmode(s). The
process of identifying active faults per testmode and initializing the testmode fault status
is done during build_faultmodel for all existing testmodes and during build_testmode for
any testmodes built if the fault model already exists.
One of the advantage of building the testmode first is realized when there are multiple
testmodes to be built, and each of the testmode is built concurrently. When
build_faultmodel is built first, the testmodes can only be built one after another.
The binary data files are created and stored in the workdir/tbdata directory for use by
the subsequent fault-oriented tasks such as ATPG, fault simulation, and diagnostics.
The following topic discusses the various options to control the faults with
build_faultmodel.
By default, the fault model includes static, dynamic, and Iddq faults. To exclude dynamic
faults from being modeled, the includedynamic=no keyword can be used with the
build_faultmodel.
The faultrulefile keyword is used during build_faultmodel, to apply these fault rules
defined in the specified fault rule files. The command will look like this:
build_faultmodel
faultrulefile=/dir1/myfaultrule1,/dir1/myfaultrule2,/dir2/myfaul
trule3
If the fault rule files to be applied are based on the file names in the FAULTS attributes,
and are listed under some specific directory, the faultpath keyword is used to specify
the path of directories where these files are expected to be located.
Following is an example of using the FAULT attribute in the design source Verilog file:
In this example, the fault rules defined in the myfaultrule_1 file will be included for
each instance of this module. The directory containing this fault rule file will be specified
with the build_faultmodel FAULTPATH keyword.
ET also allows other fault attributes to include or remove certain faults (by default). For
more details on how the FAULTS attribute can be used in Verilog, refer to Modifying
Fault Model/Fault Status of Encounter Test: Guide 4: Faults.
The faultpath keyword lets you specify a set of directories, which is the path for the
fault rule file. The specified directories should be separated with colons. The command
will look like this:
build_faultmodel
faultpath=/dir/faultrule1:/dir/faultrule2:/dir2/faultrule3
The specified directories are searched from left to right for the fault rule files. Hence, if
the same filename exists in more than one of the directories specified in FAULTPATH,
the file found in the first directory will be used.
The fault rule files are used to modify the default fault status. For example, you can no-
fault a particular block.
Predominantly, two keywords, NOFAULT and FAULTONLY, are used within a fault rule
file. These keywords are applicable for the modules or instances to be included or
excluded.
The type of faults to be excluded are static, dynamic, or both. A NOFAULT statement
with no STATIC/DYNAMIC designation excludes both STATIC and DYNAMIC faults.
Cell <Cell_name>
Cell <Cell_name>
Module <Module_name>
In statement keyword used to indicate the containing cell or module a given block
specification pertains to. This can be specified in mixed case
Block statement keyword which precedes a fully specified hierarchical block name.
This can be specified in mixed case
Note: To identify certain faults, wildcards can be specified for the BLOCK, Cell or
Module name using asterisk(*).
Let us take an example to understand the fault rule syntax for NOFAULT and
FAULTONLY techniques, and how to apply these rules.
In this example, we have a top with two modules, mod_A (instance name five_ff) and
mod_B (seven_ff).
Example 1: With default settings, and without any fault rule file, the
build_faultmodel workdir=<workDir> includedynamic=yes command will include all
the static and dynamic faults.
The build_faultmodel logfile will report Information message (TFM-704) that suggests
the total active and inactive faults and the Maximum Global fault statistics.
Statistics for faults that are not active in any test modes and maximum test coverage
attainable with the current set of test modes:
For the circuit displayed in Figure 2, the fault detail is shown in the following table:
----------------------------------------------------------------
-----
INFO (TFM-704): Maximum Global Test Coverage Statistics:
Definitions:
#Faults: Number of faults defined (independent of test modes); Total number of static
faults is 210, and total number of dynamic faults is 210
#Active: Number of faults active in at least one mode; Total number of static faults that
are active is 210, and total number of dynamic active faults is 154
#Inactive: Number of Faults Inactive in all modes; Total number of static faults that are
inactive is 0, and total number of dynamic inactive faults is 56
NOFAULT:
Example 2: Excluding all the faults from a specific module using the fault rule file
This example also explains how we can use the various keywords for NOFAULT (also
true to FAULTONLY).
Note: When using the Instance keyword, you also need to specify its module that
consists of the specified Instance. For example, the statement 1 of the fault rules listed
in Example 2. Here, the mod_A instance is within the top module named new_top.
Example 3: Let us also analyze the results of a similar experiment with NOFAULT for
BLOCK Block.f.l.new_top.nl.mod_B.
As mentioned in Example 2, you can use any of the following Faultrule statement in the
fault rule file:
----------------------------------------------------------------
Nofault Instance mod_B In Module new_top
Or
Nofault Block Block.f.l.new_top.nl.mod_B
Or
Nofault Cell seven_ff
Or
Nofault Module seven_ff
----------------------------------------------------------------
Here, you are using NOFAULT for a Block, Block.f.l.new_top.nl.mod_A, which means
that all the faults associated with this BLOCK will now be excluded from the global fault
list.
Here, the results shows that the total number of static faults is now 108, and total
number of dynamic faults is also reduced to 108, and these numbers exclude all the
faults from mod_B block.
FAULTONLY:
Example 4: If you need to list only the faults associated with mod_B BLOCK, you can
create a fault rule file with any of the following Faultrule statement:
----------------------------------------------------------------
FAULTONLY Instance mod_B In Module new_top
Or
FAULTONLY Block Block.f.l.new_top.nl.mod_B
Or
FAULTONLY Block mod_B
Or
FAULTONLY Cell seven_ff
Or
FAULTONLY Module seven_ff
----------------------------------------------------------------
The results show that the total number of static faults is now 102, and the total number
of dynamic faults is also reduced to 102, and these faults are only associated with
mod_B block.
Example 5: Let us see how we can use FAULTONLY to identify faults only for a
particular instance, instead of a complete module.
If you need to process faults only for an instance within a module, you can specify a
FAULTONLY statement in the fault rule file, similar to the following statement:
----------------------------------------------------------------
FAULTONLY Instance q_reg[3] In Module five_ff
----------------------------------------------------------------
After build_faultmodel, this fault rule statement will lead to the following results:
----------------------------------------------------------------
-----
INFO (TFM-704): Maximum Global Test Coverage Statistics:
Results suggest that the total number of static faults for the specified instance q_reg[3]
In Module five_ff is 12, and the total number of dynamic faults is also 12.
The following example demonstrates moving of some of the faults modeled on a pin to
Ignore category. The ignored faults do not participate in ATPG, and are removed from
the coverage calculation by default. Refer to the topic Fault/Test Coverage
Calculations of Encounter Test: Guide 4: Faults, to see how the ignored faults can
be used in the coverage calculations.
ENTITY: This defines the name of the block (a Verilog module) to which this fault rule
file applies. It is acceptable to have more than one model entity included in the same
fault rule file.
Example:
---------------------------------------------------------------------------------------------
ENTITY = new_top
{
IGNORE {SA0 PIN "Pin.f.l.new_top.nl.mod_A.\q_reg[1].SE"}
IGNORE {SA1 PIN "Pin.f.l.new_top.nl.mod_A.\q_reg[1].SE"}
IGNORE {SR PIN "Pin.f.l.new_top.nl.mod_A.\q_reg[1].SE"}
}
---------------------------------------------------------------------------------------------
In this example, the SE pin faults are removed from the mentioned instances.
Other than IGNORE, there are options that decide the action for these selected faults:
PTAB: Identifies a fault that is to be marked "Possibly Testable at Best" in the fault
model built with this fault rule
DETECTED: Identifies a fault to be marked "detected" in the fault model to be built with
this fault rule
OMIT: Identifies the fault that is to be omitted from the fault model. The fault will not
exist, and therefore will not be included in any fault reports or statistics for the fault
model built with this rule
Faultrule Statement:
----------------------------------------------------------------
-----------------------------
ENTITY = new_top
{
IGNORE {SA0 PIN "Pin.f.l.new_top.nl.mod_A.\q_reg[1].SE"}
IGNORE {SA1 PIN "Pin.f.l.new_top.nl.mod_A.\q_reg[1].SE"}
IGNORE {SR PIN "Pin.f.l.new_top.nl.mod_A.\q_reg[1].SE"}
}
---------------------------------------------------------------------------------------------
Results: It will ignore the stuck-at-0, stcuck-at-1, and slow-to-rise faults from the SE pin
of q_reg[1] within module mod_A. Here, the ENTITY is new_top, the top-level module
name.
Example 7: You can also combine the NOFAULT and Individual Pattern Fault
Specifications.
The following example shows how to combine user-defined fault specification and
nofault statement for a specific block. Note that the section for Entity=top should have
both the braces, { and } before the nofault statement.
-------------------------------------------------------------------------------------------
Entity=new_top {
IGNORE {SR PIN "Pin.f.l.new_top.nl.mod_A.\q_reg[1].D"}
}
Nofault BLOCK Block Block.f.l.new_top.nl.mod_B
--------------------------------------------------------------------------------------------
With this fault rule, all the faults for mod_B BLOCK will be excluded, and the slow-to-
rise fault from the D pin of q_reg[1] within module mod_A will also be ignored.
---------------------------------------------------------------------------------------------
ENTITY = new_top
{
IGNORE {SA0 PIN "Pin.f.l.new_top.nl.mod_A.\q_reg[1].SE"}
IGNORE {SA1 PIN "Pin.f.l.new_top.nl.mod_A.\q_reg[1].SE"}
IGNORE {SR PIN "Pin.f.l.new_top.nl.mod_A.\q_reg[1].D"}
IGNORE {SF PIN "Pin.f.l.new_top.nl.mod_A.\q_reg[1].SI"}
}
---------------------------------------------------------------------------------------------
Coverage reporting with ignored faults
There are some faults that are untestable because they cannot affect the design
behavior. Hence, ET normally omits such faults. These faults will be termed as ignore
faults.
For example, if the first input of a two-input AND gate is tied to 0, the stuck-at-1 on the
second input will not normally be faulted.
You can specify includeignore=yes to include such faults in the fault list, although they
will still be classified as ignored faults. Hence, including the ignore fault will also impact
your coverage because these fault will be added to the untested faults, and might result
in a reduced coverage.
The default of the includeignore keyword is based on whether the logic model was
built with the build_model option, industrycompatible=yes, to add additional buffers for
faults to be assigned to each pin on a technology cell.
The default is includeignore=yes if the logic model was built with industry compatibility.
The default is includeignore=no if the logic model was built without industry
compatibility.
To reduce the size of an industry compatible fault model, you can override the default
using the includeignore=no keyword.
OMIT: Identifies the fault that is to be omitted from the fault model. The fault will not
exist and, therefore, will not be included in any fault reports or statistics for the fault
model built with this rule
The difference between using OMIT and IGNORE is the fault classification. When OMIT
is used, the fault is completely removed from the fault database, while using IGNORE
will classify the fault under IGNORE category.
Faultrule Statement:
---------------------------------------------------------------------------------------------
ENTITY = five_ff
{
OMIT {SA0 PIN q_reg[1].SE}
OMIT {SA1 PIN q_reg[1].SE}
OMIT {SA0 PIN q_reg[1].D}
OMIT {SR PIN q_reg[1].SE}
}
---------------------------------------------------------------------------------------------
By default, the dynamic scan enable (SE) and dynamic set/reset faults are considered
as inactive in the transition faultmodel. As mentioned earlier, when faults are marked as
inactive, it does not reflect under the testmode coverage, but will be marked as
untested for global coverage.
In some cases, for the coverage accounting purposes, it is required to have dynamic
SE/set/reset faults out of the global coverage calculations as well. The following method
is used to make these dynamic faults "ignored" instead of inactive":
Parameters/Options:
Use the resulted file from this script to build the fault model:
build_faultmodel faultrulefile=output.txt
Note: All the available extension language scripts can be found in: <ET installation
path>/ etc/tb/contrib.
How to migrate faults from the block level to the top level
In the bottom-up block level flow, there might be cases where the block level fault after
ATPG needs to be migrated to the next higher level in the design.
This command writes out a faultfile file with all the tested faults. Using this command
with r option writes out a fault rule file with both the tested and redundant faults.
This fault rule file is imported at the TOP for ATPG. The block level faults are marked as
tested/redundant once the TOP level fault model is built using build_faultmodel.
Similar is the case for different testmodes, because if the faults are tested in one
testmode, using prepare_detected_faults will give a fault rule file marking these as
detected faults.
Suppose a design has two blocks, A and B, and the build model is done separately.
Build_model
Build_faultmodel
Build_testmode testmode=blockA
Verify_test_structures
Create_scanchain_tests
Create_logic_tests
Commit_tests
Prepare_detected_faults detected_fault_list_blockA
(This creates a fault rule file with all the detected faults of block A).
Build_model
Build_faultmodel
Build_testmode testmode=blockB
Verify_test_structures
Create_scanchain_tests
Create_logic_tests
Commit_tests
Prepare_detected_faults detected_fault_list_blockB
(This creates a fault rule file with all the detected faults of block B).
Build_model designsource=blockA,blockB
Build_faultmodel faultrulefile= detected_fault_list_blockA,
detected_fault_list_blockB
Build_testmode (both modules should active)this mode gives
the global coverage numbers
A similar command, prepare_ignore_faults, can be used to generate a fault rule file for
the BLOCK (or a Cell). Later, you can use this fault rule file to identify and ignore these
faults when this BLOCK (or a Cell) is used for a higher level pattern generation.
You can also create a faultmodel such that only the faults at the instance pins will be
modeled, nofaulting all the faults inside the instance.
To achieve this, create an editfile that contains attribute FAULT = BOUNDARY for the
targeted module. The targeted module should be defined as a CELL during the
build_model command.
Then, to include this attribute, use the editfile=<filename> keyword during the
build_model command.
Example 11: Suppose you want to target only the faults at the pins of mod_B, and
remove all other faults.
OR
During the build_model command, if you do not specify the content of a cell or a block,
the blocks will be defined as blackbox. Such cells will be modeled with only its interface
without any definition as to what it contains.
Similarly, blackboxoutputs=x|z|X|Z|0|1 will specify the value assumed for the outputs
of blackbox cell.
Thus, build_model command with blackboxinputfaults =yes and other default options,
and the faults around the black box (and also for the unconnected inputs/outputs of a
cell) will be counted in the global fault list. These faults are flagged as untestable-X
source (Uxs) so that ATPG does not waste time trying to generate tests for these faults.
However, these will be included in the fault coverage.
--------------------------------------------------------------------------------------------------------------
Support
Cadence Online Support provides access to support resources, including an extensive
knowledge base, access to software updates for Cadence products, and the ability to
interact with Cadence Customer Support. Visit http://support.cadence.com.
Feedback
Email comments, questions, and suggestions to content_feedback@cadence.com.