MTFI的基本语法元素如下:
•Comments
“//”标识注释的开始,直到行尾。
•FaultInformation{…}
指定顶级块和文件类型的关键字。
•version:integer
指定MTFI文件语法版本的关键字。
•FaultType(type){…}
指定数据故障类型的关键字:Stuck、Iddq、Toggle、Transition、Path_delay、Bridge和Udfm。关键字。
•FaultList{…}
定义存储每个故障数据的数据块的关键字。
•UnlistedFaultsData{…}
定义数据块的关键字,该数据块存储特定灰箱实例的覆盖信息,以允许分层故障统计。
•FaultCollapsing {true|false}
指定故障列表中故障崩溃状态的关键字。值“true”表示列表中的故障已折叠;值“false”表示列表中的错误未失效。只能在FaultList数据块中使用此语句。
•DetectionLimit : integer
指定DS故障检测下降限制的关键字。
•Format
关键字,指定存储在特定数据块(FaultList或UnlistedFaultData)中的值序列。以下关键字可用于Format语句:
o等级
指定故障类别和子类别(例如,DS、UC、AU.BB)的必需关键字。有关更多信息,请参阅“故障支持”
类和子类”。
o位置
指定pin路径名的关键字。只能在FaultList数据块中使用此关键字。如果故障stuck-at,则需要关键字。
o标识符
指定故障标识符的必需关键字。在卡滞或过渡故障的情况下,该值可以是0或1。不支持其他故障类型。
o检测
可选关键字,指定故障类型停留和转换的检测次数。
o折叠故障计数
指定折叠故障数的必需关键字。只能在UnlistedFaultsData数据块中使用此关键字。
o未故障计数
指定未失效故障数的必需关键字。只能在UnlistedFaultsData数据块中使用此关键字。
•实例(“路径名”){…}
指定数据块中所有引脚的实例路径名的必需关键字。必须将路径名括在括号和双引号中。路径名可以是空字符串。
Examples
The following is an example of a typical MTFI file:
//
// Tessent FastScan v9.6
//
// Design = test.v
// Created = Tue Dec 20 20:08:46 2011
//
// Statistics:
// Test Coverage = 50.00%
// Total Faults = 6
// UC (uncontrolled) = 2
// DS (det_simulation) = 1
// DI (det_implication) = 1
// AU (atpg_untestable) = 2
//
FaultInformation {
version : 1;
FaultType ( Stuck ){
FaultList {
FaultCollapsing : false;
Format : Identifier, Class, Location;
Instance ( “” ) {
1, DS, “/i1/IN0”;
1, AU, “/i1/IN1”;
1, EQ, “/i2/Y”;
0, UC, “/i5/Z”;
1, DI, “/i5/Z”;
0, AU, “/i4/IN1”;
1, UC, “/i4/IN1”;
}
}
}
}
Support of Fault Classes and Sub-Classes
MTFI提供了允许您指定故障类别和子类别的功能。
以下示例显示MTFI如何使用Format语句的Class关键字支持故障类和子类:
FaultInformation {
version : 1;
FaultType ( Stuck ){
FaultList {
FaultCollapsing : false;
Format : Identifier, Class, Location;
Instance ( “” ) {
1, DS, “/i1/IN0”;
1, AU, “/i1/IN1”;
1, EQ, “/i2/Y”;
0, UC, “/i5/Z”;
1, DI, “/i5/Z”;
0, AU, “/i4/IN1”;
1, UC, “/i4/IN1”;
}
}
}
}
在以下示例中,一个AU故障被识别为由于黑匣子而导致的AU,一个DI故障被指定为由于LBIST而导致的。因此,对于这两个故障,MTFI文件同时报告类和子类值。
FaultInformation {
version : 1;
FaultType ( Stuck ) {
FaultList {
FaultCollapsing : false;
Format : Identifier, Class, Location;
Instance ( “” ) {
1, DS, “/i1/IN0”;
1, AU, “/i1/IN1”;
1, EQ, “/i2/Y”;
0, UC, “/i5/Z”;
1, DI, “/i5/Z”;
1, DI.LBIST, “/i5/Z”;
0, AU.BB, “/i4/IN1”;
1, UC, “/i4/IN1”;
}
}
}
}
在前面的示例中,子类信息是类值的一部分,并由点分隔。任何AU、UC、UO和DI故障类别都可以进一步划分为不同的子类别。 该工具支持以下UC和UO故障子类:ATPG_Abort(AAB)、Unsuccessful(UNS)、EDT Abort(EAB)。该工具支持DI故障的预定义故障子类EDT。
User-Defined Fault Sub-Classes
除了前面描述的预定义故障子类之外,该工具还支持AU和DI故障的用户定义子类。用户定义的子类可以是基于以下字符集的任何字符串:
•
A-Z
•
a-z
•
0-9
•
-
•
_
你有责任确保用户定义的子类的名称不同于任何预定义的子类。否则,可能会错误地解释故障。请注意,当您使用“report_statistics-detailed_reportDI”命令时,以及当特定子类别中存在一些DI故障时,统计报告会显示DI故障的明细。
Support of Stuck and Transition Fault Information
MTFI
能够以类似于经典格式的方式表示stuck-at的故障信息。
如下例所示:
FaultInformation {
version : 1;
FaultType ( Stuck ) {
FaultList {
FaultCollapsing : false;
Format : Identifier, Class, Location;
Instance ( “” ) {
1, UC, “/in1”;
0, DS, “/in1”;
0, DS, “/i1/IN0”;
1, DS, “/i1/OUT”;
1, DS, “/i1/IN0”;
1, AU, “/i1/IN1”;
1, EQ, “/i2/Y”;
0, UC, “/i5/Z”;
1, DS, “/out”;
1, DI, “/i5/Z”;
}
}
}
}
Support of N-Detect Values
对于FaultList块中的单个故障以及UnlistedFaultsData块中的一组故障,可以处理检测到故障的频率信息。
在FaultList块中,可以使用Format语句的Detections关键字将值添加到列表中。该值必须是指定此故障检测次数的正整数。除DS之外的所有类的值都必须为0。
在以下示例中,检测下降极限为4。对于检测到四次或更多次的任何DS故障,工具将检测值报告为“4”。
FaultInformation {
version : 1;
FaultType ( Stuck ) {
FaultList {
FaultCollapsing : false;
DetectionLimit : 4;
Format : Identifier, Class, Detections, Location;
Instance ( “” ) {
1, DS, 3, “/i1/OUT”;
1, DS, 4, “/i1/IN0”;
1, AU.BB, 0, “/i1/IN1”;
1, EQ, 0, “/i2/Y”;
0, UC, 0, “/i5/Z”;
1, DS, 2, “/out”;
1, DI, 0, “/i5/Z”;
}
}
}
}
In general, the same rules are valid for the UnlistedFaultsData block, as shown in the following
example:
FaultInformation {
version : 1;
FaultType ( Stuck ) {
UnlistedFaultsData {
DetectionLimit : 4;
Format : Class,Detections,CollapsedFaultCount,
UncollapsedFaultCount;
Instance ( “/CoreD/i1” ) {
UC, 0, 1252, 2079;
UC.EAB, 0, 452, 543;
DS, 1, 69873, 87232;
DS, 2, 12873, 21432;
DS, 3, 9752, 11974;
DS, 4, 487, 6293;
AU.BB, 0, 8708, 10046;
AU, 0, 2374, 3782;
}
}
}
}
在UnlistedFaultsData的情况下,前面的示例显示了检测次数之后的故障计数。通常,每次检测都有一条线,直到达到电流检测极限。因此,在前面的示例中,故障数量已达到4的检测极限。还要注意,在前面的示例中,行UC,0,1252,2079显示了未分类子类(即不属于任何预定义或用户定义子类的UC故障)中UC故障的崩溃和未崩溃故障计数
同样,AU,0,2374,3782线显示了未分类AU故障的故障计数。加载MTFI文件时,文件中存储的n检测数上限为工具中当前设置的检测极限。这适用于FaultList数据块和UnlistedFaultsData块中的检测编号。根据开关的不同,外部MTFI文件中的n检测数据可以附加到相应故障的内部检测编号,或替换内部故障列表中相应故障的检测编号。
Support of Different Fault Types in the Same File
允许你在单个文件中手动指定多个故障类型。
使用read_faults命令读取MTFI文件时,当前故障类型(使用set_fault_type设置)必须与MTFI文件中的指定故障类型匹配。为了在故障类型“stuck-at
”和“transition
”之间共享故障信息,MTFI允许
在同一文件中手动指定两种故障类型,如下例所示:
FaultInformation {
version : 1;
FaultType ( Stuck, Transition ) {
FaultList {
FaultCollapsing : false;
Format : Identifier, Class, Location;
Instance ( "" ) {
1, AU.PC, "/i1/OUT";
1, AU.PC, "/i1/IN0";
1, AU.BB, "/i1/IN1";
1, AU.BB, "/i2/Y";
0, AU.TC, "/i5/Z";
1, AU.TC, "/out";
1, AU.TC, "/i5/Z";
}
}
}
}
MTFI不支持stuck-at和transition以外的组合。请注意,没有支持MTFI的工具可以输出包含多种故障类型的MTFI文件。
Support for Hierarchical Fault Accounting
MTFI
允许有效地处理分层设计的故障信息,在分层设计中测试单个小内核,并将其故障统计信息保存在单个MTFI文件中。
然后可以使用小内核的“灰盒”版本加上MTFI文件中的故障信息,在更大的内核中实例化这些小内核。使用这种方法,大内核的测试pattern不需要处理小内核的内部细节,只需要处理它们的灰盒版本(其中只包含下一个更高级别测试所需的逻辑子集)。
考虑图15-1中的示例。Core_A和Core_B是独立设计,具有各自的测试pattern和故障列表。在Core_A和Core_B上运行ATPG后,使用以下命令将故障信息存储在MTFI文件中:
ANALYSIS> write_faults Core_A.mtfi
ANALYSIS> write_faults Core_B.mtfi
注意,Core_A和Core_B中的逻辑是完全可观察和可控的,因此Core_A.mtfi,Core_b.mtfi中没有未列出的故障。
如果给定核心存在多个故障列表,每个故障列表反映了不同测试模式实现的覆盖范围,并且目的是将这些结果合并到核心的单个覆盖范围中,则必须在核心级ATPG运行期间执行合并。这是因为当您在下一层次结构中使用“read_faults-graybox”命令时,该命令只支持每个内核一个故障列表。请注意,您只能合并单个故障类型的故障列表。例如,您不能在核心级别合并stuck-at和transition的故障列表。以前面描述的Core_A为例,在写出核心的最终故障列表之前,首先合并任何其他先前运行的测试pattern的故障列表。以下命令序列就是一个示例:
ANALYSIS> read_faults Core_A_mode1.mtfi -merge
ANALYSIS> read_faults Core_A_mode2.mtfi -merge
ANALYSIS> write_faults Core_A.mtfi
接下来,通过实例化Core_A和Core_B的灰盒版本创建Core_C,然后使用之前使用以下命令编写的故障信息:
ANALYSIS> read_faults Core_A.mtfi-Instance Core_C/Core_A -Graybox
ANALYSIS> read_faults Core_B.mtfi -Instance Core_C/Core_B -Graybox
TheGraybox开关指示工具将其能够映射到Core_C中的现有网络的任何故障,并通过将其分类为未列出的故障来基本上丢弃剩余的故障。该工具保留未列出故障的故障统计信息。
在Core_C上运行ATPG后,可以将故障信息写入MTFI文件:
ANALYSIS> write_faults Core_C.mtfi
该命令将写入发出read_faults命令时创建的列出和未列出故障的数据。然后,可以在更大的内核Core_D中实例化Core_C的灰盒版本,并从Core_C.mtfi文件
加载故障信息 ,这样,
Core_A、Core_B和Core_C将已经完全测试,不会再次测试,
但是来自所有三个核心的故障统计信息将可用于查看和分析Core_D中列出的故障。