利用扫描链压缩技术与多测试时钟设计实现低功耗ATPG测试的方法


A Method of Low-power ATPG Testing Using Scan Chain Compressing and Multi-clock Technology

崔昌明, 孙轶群
国民技术股份有限公司(原深圳中兴集成电路设计有限责任公司)

cui.changming@zte.com.cn
sun.yiqun@zte.com.cn

Abstract

As the scale of Integrated circuit become more and more huge, the number of toggling cells is getting larger in ATPG testing. It leads the increase of transient current, and will bring on some unpredictable faults, even burn up the circuits.

For the purpose of decreasing transient current, it can use multi-clocks on the scan chains separately, stagger the toggling time when shifting, and it can smooth the peak current.

But using multi-clocks would need more testing ports, and it will decrease the scan chains’ number and increase the scan chains’ length. Compressing the scan chains using DFT MAX technique in Synopsys DFT Compiler can fix this problem. It would bring on the decreasing of scan chains’ length and the need of testing ports’ number.

A method of decreasing the transient current during testing is presented in this article. It make the use of scan compression and multi-clocks to implement low power ATPG testing. It ensures the validity of testing and protects the circuit.

Key Words: ATPG testing, DFT, multi-clock, low power

摘要

随着集成电路设计规模的逐步增大,ATPG测试中同时翻转的电路数量也越来越多,而这必然引起测试中瞬态电流的增大,也会引起造成许多不可预测的错误发生,甚至烧毁芯片。

为了减小瞬态电流,可以使用多个测试时钟,分别控制多条扫描链,错开移位(Shift)过程中电路翻转的峰值,达到平缓峰值电流的目的。同时在捕获(Capture)时,由于多个时钟都由外部控制,可以调整捕获时钟峰值间距,也可以达到平缓峰值的作用。

当然在利用多个时钟做测试的时候,势必增加管脚的使用量,减少扫描链的条数,增加扫描链长度,为了解决这个问题,可以利用Synopsys DFT Compiler工具的DFT MAX技术,在插入扫描链时进行扫描链压缩,在减少扫描链长度的同时,不增加,甚至减少管脚的使用。

本文提出了一种结合扫描链压缩技术与多测试时钟设计的方法,以降低ATPG测试时瞬态电流的大小,达到低功耗的ATPG测试,保证了测试的正确性,同时保护了芯片。

关键词:ATPG测试,DFT,多测试时钟,低功耗

1. 前言

随着集成电路设计规模的逐步增大,集成电路的测试也变得越来越重要。在ATPG测试中,扫描链在对测试向量进行移位的过程中通常都是基于同一个扫描时钟同时翻转,这样在时钟触发的时刻势必引起了过大的瞬态电流,而瞬态电流过大是会对芯片的质量造成损伤的,严重时甚至会烧坏芯片。因此,降低芯片扫描时的瞬态电流是非常有必要的。

在DFT设计中,有许多低功耗设计方法,例如减少ATPG产生的pattern中相邻无用位的翻转,使用多电源域结构降低测试功耗等。然而这些方法通常都有一定的局限性,比如前种方法对电路结构的依赖性比较大,对于某些适合于此方法的电路结构也许能够降低较大幅度的测试功耗,但是对于某些不适合于此方法的电路结构来说其带来的功耗优化将非常有限;而后一种方法需要增加电压域,这对于许多芯片来说增加了设计的复杂度,对设计人员的技术水平要求相对较高,因而使用起来也具有某些局限性。

本文从ATPG测试时峰值电流产生的原理入手,提出了采用多个测试时钟错峰的技术,将同时翻转的寄存器分配到不同的时刻翻转,以达到降低峰值电流的目的。同时采用了DFT MAX的扫描压缩技术弥补了测试端口数目增多的问题。

我们在公司一款存储控制芯片项目中尝试了采用此方法,仿真结果表明,采用此方法能够在不增加,甚至减少端口的前提下有效降低芯片在扫描测试时的峰值电流,达到了保护芯片的目的。

2. 采用多时钟错峰技术降低扫描峰值功耗

2.1 原理分析

我们知道,芯片在扫描测试时通常所有扫描链都是基于同一个扫描时钟做shift动作,而每一个shift动作都会带来扫描链上许多寄存器的翻转,在极端情况下芯片的所有寄存器在shift时将同时翻转,导致峰值电流过大,影响测试正确性甚至威胁芯片质量。基于此原理,若要降低扫描测试时的峰值电流,那么减少同一时刻翻转的寄存器数量将是最直接、最有效的方法。因此我们考虑将寄存器的翻转分摊到几个时刻进行,从而避免了所有寄存器在同一时刻翻转的现象发生。为此,我们引入了多个扫描时钟分别应用于不同的扫描链中,将它们的翻转时刻错开进行,这样便能将整个芯片的扫描峰值分摊到几个扫描时钟翻转点上,从而降低芯片在扫描测试时的峰值电流。图 2.1为原理示意图:

图 2.1: 采用多测试时钟实现低功耗测试原理

2.2 实现过程

系统提供的可用于测试使用的端口有28个。我们首先设计了只使用1个测试时钟的DFT方案(定义为“方案1”):产生12条扫描链,因此端口使用情况为:

TestMode:1

ScanEnable:1

ScanDataIn:12

ScanDataOut:12

ScanClock:1

Reset:1

Total:28

我们在Synopsys DFT Compiler中定义了测试协议,插入了扫描链,之后使用Synopsys TetraMax做ATPG产生了测试向量,并通过Synopsys PrimeTime-PX进行了功耗仿真。

接下来,我们尝试采用2个测试时钟的DFT设计方案(定义为“方案2”)。在此方案中,由于需要多增加一个端口作为测试时钟,因此我们将扫描链的数目减少为了11条,这样,便可将多出的两个端口之一定义为测试时钟,因此端口使用情况为:

 

TestMode:1

ScanEnable:1

ScanDataIn:11

ScanDataOut:11

ScanClock:2

Reset:1

Total:27

我们在定义测试协议时将这两个时钟的翻转时刻分别定义为{45 55}和{48 58},并且将它们分别定义到扫描链{C0~C5}和{C6~C10}中。这样,即实现了11条扫描链中有6条的shift时刻与另外5条的shift时刻错开了3ns,使得shift时的峰值功耗分摊开来。DFTC中相关的脚本如下(由于公司项目保密性原因,已将端口名作了更改,但不影响结果,以下同):

# define 2 ScanClock

set_dft_signal -view exist -type ScanClock -port ClkAtpg -timing {45 55}

set_dft_signal -view exist -type ScanClock -port ClkAtpg2 -timing {48 58}

# define scan chain

set_scan_path C0 -scan_data_in SI0 -scan_data_out SO0 -scan_master_clock ClkAtpg

set_scan_path C1 -scan_data_in SI1 -scan_data_out SO1 -scan_master_clock ClkAtpg

set_scan_path C2 -scan_data_in SI2 -scan_data_out SO2 -scan_master_clock ClkAtpg

set_scan_path C3 -scan_data_in SI3 -scan_data_out SO3 -scan_master_clock ClkAtpg

set_scan_path C4 -scan_data_in SI4 -scan_data_out SO4 -scan_master_clock ClkAtpg

set_scan_path C5 -scan_data_in SI5 -scan_data_out SO5 -scan_master_clock ClkAtpg

set_scan_path C6 -scan_data_in SI6 -scan_data_out SO6 -scan_master_clock ClkAtpg2

set_scan_path C7 -scan_data_in SI7 -scan_data_out SO7 -scan_master_clock ClkAtpg2

set_scan_path C8 -scan_data_in SI8 -scan_data_out SO8 -scan_master_clock ClkAtpg2

set_scan_path C9 -scan_data_in SI9 -scan_data_out SO9 -scan_master_clock ClkAtpg2

set_scan_path C10 -scan_data_in SI10 -scan_data_out SO10 -scan_master_clock ClkAtpg2

根据方案2定义好测试协议并插入扫描链后,查看report_scan_path报告,扫描链已经按照脚本定义的方式插入:

我们同样使用TetraMax做ATPG产生了测试向量,并通过PrimeTime-PX进行了功耗仿真。

2.3 结果分析

对于以上两种DFT方案的shift时的功耗仿真对比如图 2.2所示(图中Pc(pp_root)表示电路top层的功耗,以下同):

图 2.2: 方案1与方案2功耗对比

在图 2.2中,上方的波形为采用方案1的功耗仿真波形,下方的波形为采用方案2的功耗仿真波形,观测结果发现,在此shift区间内方案1的峰值功耗为1.60W,方案2的峰值功耗为750.1mW,为前者的一半,峰值功耗降低的幅度是很明显的。

以下是其中某一个shift动作的对比图:

图 2.3: 某1个shift动作对比

在图 2.3中,G1中的信号为方案1的仿真波形,G3中的信号为方案2的仿真波形,其中的电平信号为各自的扫描时钟。从图中可以看出,前者的峰值功耗为1.59W,而后者的峰值功耗为659.0mW,使用2个扫描时钟错峰相当于把1个扫描时钟的功耗分摊到了两个时刻。

根据此原理我们可以推断出,若采用更多的扫描时钟错峰,那么峰值功耗将会更低,当然,这也会需要更多的时钟端口。另外,由于扫描链数目的减少,势必带来测试时间的增加。比如对于此芯片来说,若均为单测试时钟设计,采用12条扫描链产生的pattern数为1444条、扫描链长度为818,而采用11条扫描链产生的pattern数为1435条、扫描链长度为893,因此其测试时间的比值为 (1444*818) : (1435*893) ≈ 12 : 13,即测试时间基本上与扫描链数目呈反比。另外,若加入了多扫描时钟设计,其ATPG产生的pattern数也会比单时钟的多,因此测试时间会更加长,比如对于同样为11条链的结构,采用单时钟设计产生的pattern数为1435个,而采用两个时钟设计产生的pattern数为2195个。为了弥补端口以及测试时间的损失,我们引入了DFT MAX的扫描压缩技术。

3. 采用DFT MAX扫描压缩技术弥补端口 及测试时间的损失

DFT MAX扫描压缩技术能够在芯片扫描引脚与内部扫描链之间插入一个组合逻辑的压缩与解压缩模块,将内部的扫描链分成若干较短的扫描链,使得每条链的长度变短,从而ATPG产生的测试向量长度也相应变短,达到降低测试成本的目的。

但是,扫描压缩技术需要增加一个端口控制是否进入扫描压缩模式,若没有人为定义此控制端口,DFTC将自动为设计增加一个test_mode信号以满足控制要求。对于一个端口数目已经固定的设计来说,需要考虑如何实现该增加端口的要求。由于我们此次DFT优化的目标主要是功耗而不是测试时间,因此在端口数量固定的情况下,我们甚至可以继续减少外部扫描链的数目来弥补端口的损失,只要在ScanCompression模式时的测试时间比最初的DFT方案的测试时间少就可以了。

首先,我们尝试在方案2的基础上使用DFT MAX技术添加扫描压缩逻辑,由于方案2还剩余了1个可用端口,因此我们将此端口用作TestMode扫描模式选择端口。于是其端口使用情况如下:

TestMode:2

ScanEnable:1

ScanDataIn:11

ScanDataOut:11

ScanClock:2

Reset:1

Total:28

在此方案中,我们先采用默认的压缩比(10倍压缩),并将此方案定义为“方案3”。在DFTC中的相关约束脚本如下:

#——–scan compression——–

set_dft_configuration -scan_compression enable

set_dft_signal -type TestMode -port TM_Pad

set_dft_signal -type TestMode -port SI11

set_autofix_configuration -control_signal TM_pad

从脚本可以看出,我们将可用端口SI11用做了区分扫描模式的端口。在产生ScanCompression模式的测试协议后查看生成的.spf文件,压缩后的内部链为11×12=132条,并且每条链分属于两个测试时钟之一:

之后同样使用TetraMax做了ATPG生成pattern并仿真功耗,仿真结果如图 3.1所示:

图 3.1: 方案3 InternalScan模式与ScanCompression模式功耗对比

图 3.1中G1的信号为InternalScan模式的仿真波形,G3的信号为ScanCompression模式的仿真波形,其中的电平信号为各自的扫描时钟。从图中可以看到,虽然采用两个时钟能够将峰值电流降低,但是由于采用ScanCompression模式的内部扫描链增多了,造成采用ScanCompression模式的峰值电流比采用InternalScan模式的峰值电流高出许多,这就有违我们低功耗测试的目的了。我们将两种模式的相关数据汇总于表 3.1:

2个测试时钟(压缩比10倍)

InternalScan模式

ScanCompression模式

pattern count

2195

2256

chain length

916

75

pattern count×chain length

2,010,620

169,200

peak power

670.8mW

1.70W

表 3.1: 方案3 InternalScan模式与ScanCompression模式对比

可以看到,采用压缩模式的测试时间仅为采用普通模式的测试时间的8.4%,但是功耗却增大了2倍多。究其原因,便是由于压缩后的扫描链增多了12倍,因此做扫描时同时移位的寄存器也相应增多了,造成峰值功耗过大。针对此问题,我们决定降低压缩比,使扫描链数目适当减少,同时增加测试时钟数目,更大程度的分摊峰值功耗,做到在不增加测试时间的前提下尽量降低测试峰值功耗。

4. 平衡测试时间与峰值功耗

为了解决扫描模式峰值功耗过大的问题,我们决定再减去一条扫描链,将扫描时钟增加为4个,同时降低扫描压缩比。此方案(定义为“方案4”)的端口使用情况为:

TestMode:2

ScanEnable:1

ScanDataIn:11

ScanDataOut:11

ScanClock:2

Reset:1

Total:28

4.1 实现过程

DFTC中相关的脚本如下:

# define 4 ScanClock

set_dft_signal -view exist -type ScanClock -port ClkAtpg -timing {45 55}

set_dft_signal -view exist -type ScanClock -port ClkAtpg2 -timing {48 58}

set_dft_signal -view exist -type ScanClock -port ClkAtpg3 -timing {51 61}

set_dft_signal -view exist -type ScanClock -port ClkAtpg4 -timing {53 63}

# define scan chain

set_scan_path C0 -scan_data_in SI0 -scan_data_out SO0 -scan_master_clock ClkAtpg

set_scan_path C1 -scan_data_in SI1 -scan_data_out SO1 -scan_master_clock ClkAtpg

set_scan_path C2 -scan_data_in SI2 -scan_data_out SO2 -scan_master_clock ClkAtpg

set_scan_path C3 -scan_data_in SI3 -scan_data_out SO3 -scan_master_clock ClkAtpg2

set_scan_path C4 -scan_data_in SI4 -scan_data_out SO4 -scan_master_clock ClkAtpg2

set_scan_path C5 -scan_data_in SI5 -scan_data_out SO5 -scan_master_clock ClkAtpg2

set_scan_path C6 -scan_data_in SI6 -scan_data_out SO6 -scan_master_clock ClkAtpg3

set_scan_path C7 -scan_data_in SI7 -scan_data_out SO7 -scan_master_clock ClkAtpg3

set_scan_path C8 -scan_data_in SI8 -scan_data_out SO8 -scan_master_clock ClkAtpg4

set_scan_path C9 -scan_data_in SI9 -scan_data_out SO9 -scan_master_clock ClkAtpg4

set_scan_compression_configuration -minimum_compression 2

 

从脚本可以看出,我们定义了4个测试时钟端口:ClkAtpg、ClkAtpg2、ClkAtpg3以及ClkAtpg4,将它们的跳变沿分别错开了3ns并且分配到了10条扫描链当中。为了防止压缩扫描链过多导致峰值功耗较大,我们将扫描压缩比设置为了2。插入扫描链之后的report_scan_path报告如下:

压缩扫描链后,内部扫描链为24条。使用TetraMax做ATPG生成pattern后仿真功耗,功耗仿真波形如图 4.1所示:

图 4.1: 方案4 ScanCompression模式功耗仿真波形

从图中可以看出,采用方案4的ScanCompression模式的扫描峰值功耗为958.0mW,基本上降到了方案3 ScanCompression模式峰值功耗的一半左右;而此方案的pattern count×chain length=1937×409=792,233,测试时间大大低于方案1以及方案3 Internal_Scan模式的测试时间。因此,相对于方案1来说,此方案在不增加测试端口的条件下在峰值功耗和测试时间上都得到了优化,达到了低功耗测试的目的。

当然,我们也发现采用4个扫描时钟的峰值功耗没有完全降到采用2个扫描时钟的峰值功耗的一半,这有两方面的原因:其一,4个扫描时钟很难完全平均的分配系统中的寄存器数目,因此会有个别扫描时钟比其余时钟触发的功耗大;其二,test pattern中“0”和“1”的分布也会导致shift的各个时刻翻转的寄存器数目有多有少,也会带来个别的功耗较大的时刻。

4.2 结果分析

我们将上述几种方案的统计结果列表如下:

表 4.1: 各测试方案统计结果对比
 

方案1

方案2

方案3

方案4

非扫描压缩

扫描压缩

 

时钟数目

1

2

2

2

4

扫描压缩比

10

2

测试端口数目

28

27

28

28

28

扫描链数目

12

11

11

132 (外部11)

24 (外部10)

pattern数目

1444

1435

2195

2256

1937

扫描链长度

818

893

916

75

409

pattern数目×

扫描链长度

1,181,192

1,281,455

2,010,620

169,200

792,233

峰值功耗(W)

1.60

0.75

0.67

1.70

0.96

从表 4.1中可以看到,就峰值功耗而言,方案3的非扫描模式优势最大,但是其测试时间上的代价也最大;就测试时间而言,方案3的扫描模式优势最大,但是其测试功耗也最大。相对于方案2和方案3来说,方案4在不增加测试端口的条件下在峰值功耗和测试时间上都得到了优化,达到了低功耗测试的目的。

5. 总结

本文提出了一种利用DFT MAX扫描链压缩技术与多测试时钟设计实现低功耗ATPG测试的方法,实验结果表明,此方法能够在不增加测试端口的前提下降低测试峰值功耗,达到保护芯片以及保证测试正确性的目的,同时能够减少测试时间、降低测试成本。

6. 参考文献

[1] DFT Compiler User Guide, Version Y-2006.6, Synopsys.

[2] 专用集成电路设计实用教程,虞希清,2007.1,浙江大学出版社