WGL中的Scan信息的解析
什么是WGL? WGL是Waveform Generation Language的缩写。 它是一个可编辑的文本文件; 它是EDA工具集中的ATPG程序生成的,便于ATE转换的文件; WGL文件对应到ATE中的文件的话,就是pin文件,timing文件和pattern文件;
例如metor的ATPG工具就可以生成以下格式的"Timing Pattern": 至于什么是Scan,这个需要另外一篇来详细解释,这里简单提一下。 早期的IC设计的时候,不会考虑芯片的可测试性,有问题了,只能靠经验和一些Ad-Hoc的方法来调试。没有通用性。
当然芯片本身已经很复杂了,还需要增加电路来满足可测试性,刚开始的时候大家都是不愿意的。
随着芯片越来越复杂,可测试性越来越重要了,所以人们就坐在一起,商量了一个协议,就IEEE/ANSI Standard 1149.1-1990,也就是JTAG。
JTAG可以方便的把时序电路分割成组合电路来测试,同时可以拿到芯片内部的各种状态,便于诊断和分析。
JTAG是Scan测试方法的一种。
Scan主要由ScanCell和Scan Chain组成。如下图。 对应的WGL文件中的Scan信息,定义如下。
scancell
# 这些cell是芯片内部的,在生成的ATE Pin文件中,是不会体现出来的
"cellA";
"cellB";
"cellC";
"cellD";
"cellE";
end
scanchain
# 这里定义了一个链。从SCI开始,到SCO结束。
chain1 ["SCI",
"cellA",
"cellB",
"!", #这是表示在cellB和cellC中间有一个反向器,在生成ATE的pattern的时候,需要注意
"cellC",
"!",
"cellD",
"!",
"cellE",
"SCO"];
end
scanstate
# 定义了两个scan chain中各个cell的状态,这里会在WGL的pattern中使用。
chain_1o := chain1(11100); #这里表示,这个chain传入芯片后,cellA到cellE的状态分别是11100
chain_1i := chain1(11100);
end
pattern scan_test ("SCI", "SCO", "cellA", "cellB", "cellC", "cellD", "cellE")
vector("normal_timing") := [ 1 0 0 0 0 0 X];
vector("normal_timing") := [ 1 0 0 0 0 0 X];
scan("scan_timing") := [ - - - - - - -],
output [chain1:chain_1o], input [chain1:chain_1i];
好,我们终于进入今天的正题了,如何把WGL中的Scan Pattern转换成ATE需要的Pattern。 仔细看看上面WGl文件的解释,我们可以知道,WGL中的Scan Pattern是基于state的;但是我们的ATE的Pattern是基于Cycle的。 也就是说:我的ATE的Pattern需要在一定的cycle之后,使得芯片对应的scan chain上的scan cell处于scanstate中所指定的状态。 这就需要一个转换的过程。
基本算法就是
- 先把scanstate反转,因为ATE的Pattern中是有时序的,前面的会先被shift进去。
- 然后检查每个scancell和SCI之间反转器的个数,如果是奇数的话,把对应的state也反转;如果是偶数的话,保持不变
例如:chain_1o := chain1(11100); 要达到这个目的的话:
- 反转11100,成为: 0 #cellE 0 #cellD 1 #cellC 1 #cellB 1 #cellA
- 检查每个cell和SCI之间的反转器的个数 0 #cellE,3 0 #cellD,2 1 #cellC,1 1 #cellB,0 1 #cellA,0
- 检查每个cell和SCI之间的反转器的个数,奇数反转,偶数不变 1 #cellE,3 0 #cellD,2 0 #cellC,1 1 #cellB,0 1 #cellA,0
具体的如下图: Reference:
