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中所指定的状态。 这就需要一个转换的过程。

基本算法就是

  1. 先把scanstate反转,因为ATE的Pattern中是有时序的,前面的会先被shift进去。
  2. 然后检查每个scancell和SCI之间反转器的个数,如果是奇数的话,把对应的state也反转;如果是偶数的话,保持不变

例如:chain_1o := chain1(11100); 要达到这个目的的话:

  1. 反转11100,成为: 0 #cellE 0 #cellD 1 #cellC 1 #cellB 1 #cellA
  2. 检查每个cell和SCI之间的反转器的个数 0 #cellE,3 0 #cellD,2 1 #cellC,1 1 #cellB,0 1 #cellA,0
  3. 检查每个cell和SCI之间的反转器的个数,奇数反转,偶数不变 1 #cellE,3 0 #cellD,2 0 #cellC,1 1 #cellB,0 1 #cellA,0

具体的如下图: Reference:

经验分享 程序员 微信小程序 职场和发展