Scan ATPG中的Core wrapping技术

1.为什么要在模块级做wrapping?

因为我们芯片越来越大,越来越复杂,如果把full chip当作研究对象去做ATPG的话,tool limit、test time、ATPG效率都难以接受,所以我们必须找到一个自下而上的方法,herical分层技术来实现对full chip的切割测试。在这种方法中,芯片可以分成多个较小的部分hardon_block或内核,可以有效地访问和处理。由于在内核级别生成模式,它导致引脚数量、内存和测试运行时间的减少。也可以并行运行内核。
core wrapping就是方法之一。我们把full chip切割成几十个core,然后在每个core的边界串一些wrapper chain把这个core包起来,实现对core的独立测试,剩下的core和core之间的逻辑就从top层面进行extest测试,因为wrapper链的存在intest测试和extest测试分开且互不影响。通过wrapper chain把每个core隔离测试出完pattern后,再从下往上的做pattern porting/retargeting,最后变成full chip的pattern。

2、工作原理

我们在串wrapper chain时其实就是在一个design里,把与func.input port交互的一些寄存器挑出来串成input wrapper chain,把与func.output port交互的一些寄存器挑出来串成output wrapper chain,剩下的寄存器放到internal chain。

三种工作模式:

  • Scancomp: intest测试且打开CODEC/EDT压缩

  • Wrp_if: intest测试bypass压缩逻辑(防止压缩逻辑出问题)

  • Wrp_of: extest测试

两种wrapper cell类型:

  • Shared wrapper cell(上图白色reg)

  • Dedicated wrapper cell(上图蓝色reg)

两种插入流程:

  • Simple core wrapping flow

  • Maximized reused flow(大芯片)

分为这三类chain:input_wrap_chain、output_wrap_chain、core_chain在内外两种工作模式下的状态:

intest:

extest:

专用和share型wrap_cell的区别:

Dedicated类型是工具自动插到design中的,有两个mux,第一个由shift_en控制选择fun.data还是test.data,第二个由capture_en控制选择func.data还是hold住上一拍的值(func.data直接从mux进入design,不会经过主寄存器,否则被打一拍会改变design的功能)

Shared类型就是复用design里本来就存在的功能寄存器。

如何选取这两类cell:一般设置成auto,让工具根据设计自己去权衡,也可以由于设计特点,设置独有的option

set_wrapper_configuration  -classcore_wrapper \

                                               -maximize_reuse enable\

                                               -reuse_threshold N

                                               -depth_threshold M

首先是把maximize_reuse使能起来。那工具在拿到我们的design时会怎么考虑到底是插入一个Dedicated WC还是复用Shared WC;-reuse_threshold N,是指定reuse Shared register的阈值:

假设这里N=2,对于input port A来说,工具会去trace A的fanout,发现能追到两级(<=2)register,那工具就会把这两个寄存器都换成Shared WC;对于input port B来说,工具能trace到三级register(>2),此时工具就会在portB后面插一个Dedicated WC,其他的寄存器就放到core chain上去测试。

-depth_threshold M,是指定port到WC之间的组合逻辑深度:

假设这里M=1,对于portA,它到第一级reg之间有一个与门,组合逻辑深度=1,所以工具会把它后面的register替换成Shared WC,对于portB,组合逻辑深度=2(>1),工具就会选择在portB后面插入一个Dedicated WC.

注意:有一些特殊的port是不能进wrapper chain的,常见的如Clock/Reset/Global test mode/DFT tdr/Power control/Analog control ports/ICL_ports/unconnected pi/po ,必须自主可控约束。

wrapper chain的条数、Dedicated WC的时钟来源(一般采用mini_occ的clk_out)等等。在这个过程中工具会去做一些balance,比如Dedicated WC不能太多,否则面积开销过大,但也不能全都是Shared WC,因为port到Shared WC之间的组合逻辑会被放到extest mode下去测,但我们还是希望尽量提高intest mode的coverage,放到外面还是比intest难测。

3、wrap_chain的时序问题

在intest测试的capture阶段,input wrapper chain需要一直做shift,这时候对于Shared WC来说,它的clock是function下的高频clock,在高频时钟下做shift,两级WC的Q--SI之间的path会天然存在timing violation,这个violation会直接导致后续ATPG后仿出现mismatch,并且function的ac coverage也会有所损失。有两个方法可以解决这个问题:

亡羊补牢法:

也分有没有对相关path设false path,如果设了,那就保证ATPG推pattern时读到这些false path,这时候仿真不会报mismatch;如果没设,就需要在ATPG阶段通过add_capture_masks对相关cell做mask。这两种只是仿真不报错,但coverage还是损失了。

未雨绸缪法:

在设计wrapper cell时就要想到这个问题,M家和S家的工具都是提供了option的,对于S家,有-hold_mux_for_shared_wrapper_cells enable这个option配合scan_enable信号可以改变WC的行为,具体来说:

对于Shared WC,工具在cti,即测试数据端口前面会加上一级mux,由总控dft_scan_SE来选择(capture时scan_SE=0,此时选择hold住当前值),在capture阶段就会一直在回环自己,Q--SI之间的path就不存在了。

对于Dedicated WC,工具不会改变它的结构,但是会改变第一个mux的选择端,也是直接连到总控scan_SE上,在capture时也是loop自己。这样可以从根本上解决coverage损失的问题。

注意:后仿过程中也会出现在AC测试时,hold_cell自身的Q-SI的时序修不干净,只能在atpg时读入false_path(采用set_false_path -through -*SI的规则)

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值