Additional test pattern types附加的pattern的类型
ATPG test pattern 的类型
使用tessent shell 生成的pattern 大致分以下几种类型:
1. basic Scan 对于 full-scan 的电路 生成的是basic scan的pattern
2. clock Sequential 用于那些时序深度有限 存在no-scan latches /no-scan cell 的电路 在时序上: shift之后(或者说load之后)会有若干个cycle 给no-scan cell复制 只有最后一个cycle是 真正capture的;
3. clock PO 用于时钟信号经过组合逻辑到达一个私有的输出 这种电路;
4. Multiple load 用于存在 no-scan cell的RAM ROM 的设计; 在时序上可能存在多个scan load cycle 一个或多个capture的cycle;
下面看每个test pattern的详细的介绍
basic scan pattern
基础的scan pattern 包含下面几个步骤:
1. load_scan chains
2. force primary inputs(PI)
3. measure primary outputs(PO)
4. Pulse capture clock
5. unload value from scan cells
这里的capture cycle 只有一个cycle;
而load/unload是多个cycle;(mutiple clock to load ,signal clock to capture)
clock sequential patterns
上面说了 这种pattern是用来提高 non-scan 的时序部件的覆盖率;
例如:
上图存在一个 未被替换的D触发器 是组合逻辑连接中的一部分;
这种pattern测试时候的event包括:
- load scan chain
- apply clock sequential cycle 包括: 重复force PI ;Pulse clock;N次,此时的N为时序深度-1;
- Apply capture cycle 包括:force PI; measure PO; pulse capture clock;
- 从scancell’中将值shift 出来(unload)
使用create_pattern指令时 工具会自动帮你识别sequential depth elements; 帮你设置合适的 depth的值;
整个过程,以上面的电路为例,
1, load 阶段SI 输入00;SE拉高;将00shift进scan chain 中 会发现属于non-scan cell 的中间寄存器仍然是不可控的状态; 此时的output 也是未知的;
- 进入clock sequential cycle, PI 从AB port输入0 1;
Pulse clock; 此时就会将逻辑中的值 打入non-scan 的DFF中;上级时序传递的X到达下一级的scan cell
- apply capture clock 在capture cycle的时候再次force PI measure PO;
给一个clk pulse 将逻辑中的值 capture到扫描链中;
至此 我们就完成了 第一次 PI 是为了control non-scan cell中的值 第二次PI才是真正用于capture 的值;
4. 最后就是将 scan chain 中的值 unload出来 同时load进新的值;
clock PO pattern
指得那些 generated clock 的电路; 时钟经过组合逻辑会直接连接到PO上;
这种电路存在的问题:
如上图所示位置存在 stuck@1 的fualt是可以测到的但是stuck@0的fault;由于其本身为clk,现又为PI ,双重身份,使它不能随便赋1;无法检测stuck@0 的fault;
解决方法
为了解决这个问题: 一个附加的timeplate被安排上了;这个timeplate 会自动生成,在basic pattern capture或者 load/unload 的时候 它表现为一个规则的时钟;而在clock PO pattern的capture cycle 阶段他表现为持续拉高的状态;
当出现DRC的违例中的C8 C9时,就可以使用 clock PO pattern 去解决;
对于 sub-block 来说, block级的PO 可能并不是 top level 的PO;所以block并不考虑 clock PO的 pattern.对于 top level, 也要看ATE机台是否支持multiple timeplate ,对于不支持的 只能cut off掉,但是对覆盖率的影响微乎其微;
set_pattern_type -clock_po off
testing Around RAMs(memory 周边的逻辑如何去测)
如上图所示: memory在scan chain中 会看做blackbox存在于电路中;通过添加bypass逻辑的方式实现周边逻辑的测试;
- Asynchronous bypass
上图通过 简单的增加互联线和 MUX的额方式,将black绕开,将前后逻辑连入扫描链中,添加逻辑较少 但是前后逻辑跨度大 可能会造成时序的上的影响;影响测试电路的主频;
2. synchronous bypass
通过在中间增加scan-used 寄存器的方式,做接力;减少对时序的影响;这种方式就是资源消耗比较大;
3. observation cells
为RAM的控制信号 WE RE 那些单向输入的,添加观测用的scan cell(observation cell);
mem_bypass 还有这个 observation cells 都是在Tessent MemoryBIST 的时候插入的(虚线蓝框 memory interface 的部分)
At-speed memory在速测试存在的问题
在速测试首先他的sequential depth 是大于1的,所以memory作为黑盒影响的并不单单是下一级的寄存器,根据时序深度会影响到path中的好几级;
即使做了memory bypass,测试pattern只是走的test path;上图所示的fault location也是测不到的,只是后续电路可以测到
解决办法就是将memory的ATPG 也读进来;
利用RAMs 进行结构性测试
在ATPG阶段利用RAMs的目的是允许已知值(可控的值)通过RAMs传递下去;减少X态的生成和传播;
RAM被视为一个临时的数据存放地;在一个pattern的开头会被初始化为X;??在load/unload 阶段也需要一直保持这种状态;
这种multiple load pattern可以测到的fault point包括 RAM的ports, data ports的detect 和 clock sequential 类似;而address port需要更复杂的pattern;
不能覆盖 memory 内部的 cell arry 需要MBIST方式进行测试;
multiple load pattern;
在此之前 需要对RAM 进行设置;主要是需要对RE WE等RAM的控制信号进行控制; 是有两种方式:
- 使用 scan_en 做gating 的方式去控制 RAM的RE WE;是常用的方式;
- 是将RAM clk和 scan clk独立开来;RAM clock 可以独立保持自己的状态,在pulse的时候 可以将RAMclk关闭;使它不会跳转下一态;
#可以手动 自动指定信号的offstate
#manually
add_read_controls <offstate> <control_name>
add_write_control offstate> <control_name>
#Automotive
analyze_control_signals -auto_fix
multi load pattern的含义就是工具允许 Scan chain在一个pattern上load 多次(对RAM data port address port进行配置); 被用在一个设计需要在 scan load 阶段保持某个状态的时候;
Multi-load pattern分下面几个阶段:
- load_scan chain
- Force PI
- Pulse sequential read/write
- 根据需要repeat steps 1-3 or 2-3
- apply capture cycle
- unload scan chain