FORCE “primary_input_pin” <value> <time>;
此命令用于在给定时间强制选定主输入引脚上的值(0,1、X或Z)。时间值不得低于该程序的先前时间值。每个程序的时间在时间0再次开始。主输入引脚将用双引号括起来。
APPLY “scan_group_procedure_name” <#times> <time>;
此命令指示所选程序名称将从所选时间开始应用所选次数。扫描组过程名称将用双引号括起来。此命令只能在加载和卸载过程中使用。
FORCE_SCI “scan_chain_name” <time>;
该命令指示移位过程中的时间,值将被放置在扫描链输入上。扫描链名称将用双引号括起来。
MEASURE_SCO “scan_chain_name” <time>;
该命令指示移位过程中扫描链输出上测量值的时间。扫描链名称将用双引号括起来。
Functional_Chain_Test
functional_chain_test部分包含要测试电路中所有扫描链的功能扫描链测试的定义。对于每个扫描链组,扫描链测试将包括加载交替的双0和双1(00110011…),然后卸载组中所有扫描链的这些值。
The format is as follows:
CHAIN_TEST =
APPLY “test_setup” <value> <time>;
PATTERN = <number>;
APPLY “scan_group_load_name” <time> =
CHAIN “scan_chain_name1” = “values....”;
CHAIN “scan_chain_name2” = “values....”;
....
....
END;
APPLY “scan_group_unload_name” <time> =
CHAIN “scan_chain_name1” = “values....”;
CHAIN “scan_chain_name2” = “values....”;
....
....
END;
END;
如果setup_Data部分中有测试设置过程,则在功能链测试模式的开头应用可选的“test_setup”行。pattern的编号是从零开始的pattern编号,其中要测试电路中所有扫描链的功能扫描链测试。扫描组加载和卸载名称以及扫描链名称将用双引号括起来。加载和卸载扫描链的值将用双引号括起来。在扫描链加载期间,相应扫描链的每个值都将放置在其扫描链输入引脚上。移位程序将通过扫描链移位值,并继续移位下一个值,直到所有扫描链的所有值都已加载。由于移位的数量由最长扫描链的长度决定,所以X(不必在意)放在较短扫描链的开头。这将确保正确加载扫描链的所有值。在扫描链卸载期间,将在其扫描链输出引脚处测量相应扫描链的每个值。移位程序将值移出扫描链,并继续移位下一个值,直到所有扫描链的所有值都已卸载。同样,由于移位的数量由最长扫描链的长度决定,所以X(不测量)位于较短扫描链的末端。这将确保扫描链的所有值都将被快速卸载。
CHAIN_TEST =
APPLY “test_setup” 1 0;
PATTERN = 0;
APPLY “g1_load” 0 =
CHAIN “c2” = “XXXXXXXXX0011001100110011001100”;
CHAIN “c1” = “XXXXXXXXXXXXX001100110011001100”;
CHAIN “c0” = “0011001100110011001100110011001”;
END;
APPLY “g1_unload” 1 =
CHAIN “c2” = “0011001100110011001100XXXXXXXXX”;
CHAIN “c1” = “001100110011001100XXXXXXXXXXXXX”;
CHAIN “c0” = “0011001100110011001100110011001”
END;
END;
Scan_Test
The scan_test section contains the definition of the scan test patterns that were created by
Tessent Shell.
A scan pattern will normally include the following:
SCAN_TEST =
PATTERN = <number>;
FORCE “PI” “primary_input_values” <time>;
APPLY “scan_group_load_name” <time> =
CHAIN “scan_chain_name1” = “values....”;
CHAIN “scan_chain_name2” = “values....”;
....
....
END;
FORCE “PI” “primary_input_values” <time>;
MEASURE “PO” “primary_output_values” <time>;
PULSE “capture_clock_name1” <time>;
PULSE “capture_clock_name2” <time>;
APPLY “scan_group_unload_name” <time> =
CHAIN “scan_chain_name1” = “values....”;
CHAIN “scan_chain_name2” = “values....”;
....
....
END;
....
....
....
END;
pattern的编号表示加载扫描链、放置和测量值、脉冲任何捕获时钟以及卸载扫描链的pattern编号。pattern编号从零开始,必须以零开始。如果使用transition fault,将在每个测试pattern的开始处应用额外的force陈述。扫描组加载和卸载名称以及扫描链名称将用双引号括起来。pattern的所有时间值不得低于该pattern中的先前时间值。加载和卸载扫描链的值将用双引号括起来。
主要输入值将与设置部分中定义的主要输入一一对应。主输出值也将与设置部分中定义的主输出一一对应。如果setup_Data部分中有一个test_setup过程,则应用测试设置过程的第一个事件必须在应用第一个pattern之前发生:
APPLY “test_setup” <value> <time>;
如果有任何写入control lines,则在主输入端施加值后,将对其进行脉冲处理:
PULSE “write_control_input_name” <time>;
如果有捕获时钟,则在主输出端测量值后,它们将在相同的选定时间脉冲。可以使用任何扫描时钟将数据捕获到被观察到的扫描单元中,扫描pattern将参考适当的测试程序,以定义如何控制和观察扫描单元。如果要将主机的内容放入其扫描单元的输出中,可以通过应用卸载操作进行观察,则必须在卸载扫描链之前应用master_observe程序:
APPLY “scan_group_master_observe_name” <value> <time>;
如果要将shadow的内容放入扫描单元的输出中,通过应用卸载操作可以观察到shadow,则必须在卸载扫描链之前应用shadow_observe程序:
APPLY “scan_group_shadow_observe_name” <value> <time>;
如果扫描单元的主单元和slave单元将处于不同的检测值,则必须在加载扫描链后应用skew_load procedure :
APPLY “scan_group_skew_load_name” <value> <time>;
每个扫描pattern都具有独立于所有其他扫描pattern的特性。正常pattern模式将包含以下事件:
1. Load values into the scan chains.
2. Force values on all non-clock primary inputs.
3. Measure all primary outputs not connected to scan clocks.
4. Exercise a capture clock. (optional)
5. Apply observe procedure (if necessary)
6. Unload values from scan chains.
卸载最后一个pattern时,工具将再次加载最后一个pattern,以完全移动最后一个捕获周期的内容,从而使输出与计算值匹配。尽管加载和卸载操作是单独给出的,但强烈建议在测试仪上应用pattern时,加载与卸载前一pattern同时进行。
为了观察连接到时钟的主要输出,将有一种额外的扫描pattern,其中包含以下事件:
1.将值加载到扫描链中。
2.强制所有主要输入值,包括时钟。
3.测量连接到扫描时钟的所有主输出。
Scan_Cell
scan_cell部分包含电路中使用的扫描单元的定义。
扫描单元数据的格式如下:
SCAN_CELLS =
SCAN_GROUP “group_name1” =
SCAN-CHAIN “chain_name1” =
SCAN_CELL = <cellid> <type> <sciinv> <scoinv>
<relsciinv> <relscoinv> <instance_name>
<model_name> <input_pin> <output_pin>;
....
END;
SCAN_CHAIN “chain_name2” =
SCAN_CELL = <cellid> <type> <sciinv> <scoinv>
<relsciinv> <relscoinv> <instance_name>
<model_name> <input_pin> <output_pin>;
....
END;
....
END;
....
END;
扫描单元存储元件的element如下:
•cellid-标识扫描链中扫描单元位置的数字。数字0表示最接近扫描输出引脚的扫描单元。
•type-扫描存储元件的类型。类型可以是MASTER、SLAVE、SHADOW、OBS_HADOW、COPY或EXTRA。
•sciinv-扫描单元库输入引脚相对于扫描链输入引脚的反转。该值可以是T(反转)或F(无反转)。
•scoinv-扫描单元库输出引脚相对于扫描链输出引脚的反转。该值可以是T(反转)或F(无反转)。
•relsciinv—存储元件相对于扫描单元库输入引脚的反转。值可以是T(反转)或F(无反转)
•relscoinv—存储元件相对于扫描单元库输出引脚的反转。该值可以是T(反转)或F(无反转)。
•instance_name—扫描单元中内存元素的顶层边界instance名称。
•model_name—扫描单元中内存元素的内部实例路径名(if used - blank otherwise)。
•input_pin-扫描单元的库输入引脚(if used - blank otherwise)。
•output_pin-扫描单元的库输出引脚(if used - blank otherwise)
Example Circuit
Figure 12-1
illustrates the scan cell elements in a typical scan circuit
BIST Pattern File Format
上一节中描述的所有测试pattern文件格式也直接适用于BIST模式。然而,一组额外的BIST特定格式被添加到ASCII模式文件格式中。
BIST特定格式在本节中描述
BIST Pattern Setup_Data
BIST的setup_data部分包含定义BIST pattern特定地配置。本小节包括BIST pattern中
signature register
(prpg_register和misr_register)的文件版本标识符和定义。
BIST特定语句用于标识以下配置是特定地
BIST pattern
。BIST特定语句的格式如下:
declare bist pattern specific configuration =
version标签用于指示BISTpattern version。version标记的格式如下:
BIST_ASCII_PATTERN_FILE_SUBVERSION
Here is an example of a BIST pattern-specific statement combined with a version tag statement:
declare bist pattern specific configuration =
BIST_ASCII_PATTERN_FILE_SUBVERSION = 1;
pattern_internal_view开关,指示BIST模式内部视图是否被写入pattern文件;其可能值为“ON”或“OFF”。如果开关设置为on,如以下示例所示,BISTpattern将包含在pattern文件中。关于pattern格式类型的信息:
pattern_internal_view = “on”
prpg_register和misr_register标识符定义BIST pattern中的signature寄存器,如prpg和misr。signature寄存器语句使用以下格式:
gnature_register <name of signature register> =
length = <length of the register>;
type = <type of the register>;
init_value = <initial state of the register>;
end;
Here are some examples of signature register statements:
prpg_register “decomp1” =
length = 22;
type = PRPG;
init_value = “0000000000000000000000”;
end;
prpg_register “decomp2” =
length = 12;
type = PRPG;
init_value = “000000000000”;
end;
prpg_register “prpg1” =
length = 16;
type = PRPG;
init_value = “0000000000000000”;
end;
prpg_register “prpg2” =
length = 16;
type = PRPG;
init_value = “0000000000000000”;
end;
misr_register “misr1” =
length = 32;
type = MISR;
init_value = “11111111111111111111111111111111”;
end;
misr_register “misr2” =
length = 24;
type = MISR;
init_value = “111111111111111111111111”;
end;
Scan_Test for BIST
每个BISTpattern包括一个lfsm_snapshot语句。在pattern语句中,关键字pre_load、pre_unload或post_unload,后跟一个寄存器名,以指示何时获取寄存器的快照。
The keywords are applied as follows:
•
pre_load
— Used for PRPG type registers.
•
pre_unload
and
post_unload
— Used for MISR type registers
快照语句的组成使得每个BISTpattern的模拟独立于所有其他pattern:
•给定PRPG寄存器的pre_load值,可以计算每个BISTpattern的加载数据。
•给定MISR寄存器的预卸载值,可以计算并验证卸载后的MISR寄存器。
pattern = 0;
lfsm_snapshot =
pre_load “decomp1” = “0000000000000000000000”;
pre_load “decomp2” = “000000000000”;
pre_load “prpg1” = “1111111111111111”;
pre_load “prpg2” = “1111111111111111”;
pre_unload “misr1” = “11111111111111111111111111111111”;
pre_unload “misr2” = “111111111111111111111111”;
post_unload “misr1” = “11111111110001111110111111101111”;
post_unload “misr2” = “111111110000000011111111”;
end;
apply “grp1_load” 0 =
...
end;
force “PI” “....” 1;
measure “PO” “....” 2;
apply “grp1_unload” 3 =
...
end;