控制方式
1:目前的ICG 都有两个pin来控制ICG的通断,一路是func enable pin 一路是test enable pin。
从名字上就能知道,对于dft 来说我们需要处理的就是TE pin. 那么在实际项目中如何处理才能达到一个好的效果呢.
icg的TE pin的控制遵守基本原则就是在scan shift 过程中保证所有的icg 都能打开,capture过程随意,应为在DRC 阶段,会check clock是否可控,如果你的TE pin在scan shift的时候为0 那么工具就会认为你的clock 是不可控的,所以我们需要一个在scan shift的时候为1的信号来控制,这时你可以选择由tdr配置的信号,由控制mode的常值信号,由在scan shift下为1的scan enable信号等来控制。
一般情况下我们常见的就是由scan_enable信号或者dft_scan_mode信号控制,那么这两种方式有什么问题呢?
对于由dft_scan_mode信号来说,在scan test阶段,dft_scan_mode 信号为1,这样导致ICG 常开,对于func en那一路来说,fault 被block ,无法往后传递,导致覆盖率降低,且ICG 常开,这样在capture 阶段,所有的scan cell都会toggle,导致功耗过高,所以是一个非常差的设计。
对于scan_enable 来说,在scan shift 阶段,ICG 常开,在capture 阶段,ICG由func enable pin 控制开关,这样的好处就是,没有损失func enable那一路的覆盖率,但是存在一个问题就是,如果func enable 那一路的逻辑非常复杂,工具很难推出1,增加ATPG的timing和pattern count。如果无法推断出1就会导致ICG 后的时钟在capture的时候不可控,可能导致后面由ICG drive的寄存器之间的fault 都无法被测到,损失覆盖率。所以相对而言比dft_scan_mode好但是也不是很适合。
由此上两种方式可见,我们需要的是一个在shift mode下为1,在capture mode下可由工具给值可0可1得信号为最佳之选,这样工具对于ICG的控制就能变得更加容易。这时我们就可以将一个hold scan cell和scan_enable 或之后来控制ICG的TE pin。这样就能达到我们的效果。
而对于ICG TE pin的控制,我们无非就是要做到在shift阶段下常开,在capture 阶段可由工具自己去推,或者可以常关,或者可以常开。这样就是一个功能完全齐全的控制方法。
下面给出例子:
如图所示就是一个完备的ICG TE pin 控制,dfx_icg_en_mode 和dfx_icg_disen_mode 为可配置的tdr,可以将ICG TE在capture阶段控制常0 或者常1, 默认不去配置的情况下,ICG TE pin的值来自于hold scan cell,由工具去控制给0 或1,这样就能更加容易的打开ICG.
作用
基于最后给出的完备的ICG TE pin 控制方法,作用有三个
1:提高测试覆盖率
2:减少pattern count
3:降低功耗
功耗问题
对于功耗问题,我们不仅仅需要考虑到对于ICG的控制,还需要balance ICG 后面drive的寄存器数量,这点可以和前端去优化,而对于降低功耗而言,当然是在capture 阶段将ICG 全关 功耗最低,但是对于DFT 而言, coverage 是摆在第一位的,所以我们这里说的降低功耗,都是基于在不影响coverage的情况下降低功耗。
那么对于capture power 而言,如果我们的设计固定了,那么有什么办法来降低测试功耗呢?
对于固定设计而言,此时已经无法在设计上做改进去降低测试功耗,那么我们可以分块测试,也就是使用add fault XXXXX 来出pattern, 分多个pattern 来测试,这样可以降低测试功耗,但是可能会增加pattern count和测试时间。