Scan test point

what are test points

设计中包含许多难以控制和观察的点,通过在这些位置添加一些特殊测试电路,可以达到不影响原有电路的功能,使该点变得可观测或者可控制,提高电路的可测试性,这种特殊的测试电路被叫做test point

test point type

test point 分为control test point 和observation test point,其中control test point 分为两类,一类是or gate control test point,一类是and gate control test point,observation test point 只有一种。

control test point:

##you can use this commond to add control test point
add_control_points –location  <pin_name> -type or/and

observation test point:

##you can use this commond to add observation test point
add_observe_points –location  <pin_name> 

how test point work

test point 在测试过程中怎么工作得呢,test point 会有一个test point enable 信号控制开关,由tde 配置,如果加了hold scan cell ,则会由一个hold scan cell 产生enable 信号, 工具在atpg的时候可以自己去推需要开哪些test point,可以降低功耗。

# you can define use hold scan cell to generate test point enable or not
add_dft_signal observe_test_point_en control_test_point_en -add_hold_scan_cell on

使用了-add_hold_scan_cell on 后,test point enable 信号则不是直接来自于tdr,而是通过hold_scan_cell 产生,且ICL 中test point enable 信号定义的点在最后一级 or gate的输出上。

how to insert test point

如何插入test point,目前比较主流的插入方式是pre scan insert,还有一种用来提升指定fault的coverage的插入方式,post scan insert。一般情况下都是使用pre scan insert 配合提高coverage和降低random pattern count特性来做,当然,对于atpg 后,存在大量的UC UO AU的fault 时,可以基于串好chain的网表,读入需要分析的fault list,使用lbist_test_coverage only来专门提高coverage,这种方式不常用,本人也没怎么使用过,还有一种更加友好的方式,就是在rtl阶段告诉前端工程师,在哪些地方将test point 做进去,这种方式可能比较耗费时间,且对于前端来说比较麻烦,但是这样做的好处就是在综合时,test point 插入的逻辑也会被充分优化,不会存在后端pr的时候,一些test point 逻辑摆放不合理导致timing 很难修。下面介绍pre scan test point insertation。

看到user guide 上介绍说 control test point share 会存在一些问题,如下

会存在fault block的情况, 但是仔细想,control test point 有两种type,or gate 和and gate,本身这种结构存在就是为了应对不同的需求,比如说一个test point 的点,由于常0 不可被控成1,这时工具在这个点插入的就是or gate type的control test point,同理, 一个test point点,由于常1不可被控成0,这时工具在这个点插入的就是and gate type的control test point。两中control test point控制的行为不一样,工具理应不会将这两种type的control test point share,所以不存在user guide 中描述的这种情况。

想share control test point 可以使用下面commod

# you can use control test point share
set_test_point_analysis_option -shared_control_points_per_flop 4

如果需要指定地方不插test point 可以使用add_notest_point 命令,或者delete fault –instance,或者读入SDC

工具不会在任何申明了noscan, black_box的地方插入test_point, add_notest_point add_faults –all 这两种方式没有明显区别

## you can define notest point with this commond
add_notest_point [get_instance <instance_name> -h]

## you can define notest point with these commond too
add faults -all
delete_faults -Instance <instance_name>
delete_faults -Instance <instance_name>

test point 有两种作用, 一种是提升coverage, 一种是减少random pattern count,一般情况下我们会选择两个方式混合,以达到最优的一个情况。

可以指定插入test point的比例,比如说5%, 3%,比例是按照test point 占所有flip flop的总数算的, 也可以指定期望达到coverage 的目标,比如说99.9%,99.8%等,在没有提供一个确定的fault list时,默认时99%。

如果你提供一个确定的fault list,工具在进行test point analysis是不会进行X-bounding 分析,且默认的patter 将会变成1000而不再是10000,默认的覆盖率会变成100%,这个时候工具只会对fault list里面的fault 进行分析,而不是整个design,所以使用这个方式,一般都是用于atpg 后提升coverage,而不是用于pre scan test point insert。

how to insert test point for pd to avoid two instance mix

如何解决后端不希望两个不同的instance 之间存在test point 乱串的情况。为甚会有这种需求呢?,在floorplan中,存在两个instance 摆放的很近,中间的绕线资源非常紧张,这个时候如果插入了test point,且没有设置好,两个instance 之间的test point不要相互串chain,就可能会导致test point 在两个instance 之间乱串的情况,这样就会造成绕线拥塞。所以为了解决和避免这种情况产生,在先前就要和后端了解floorplan的情况,对于一些需要特殊处理的instance,提前做好规划,避免迭代。那么我们如何去解呢?这时又会分两个情况分析,一个是串chain的问题, 一个是share test point的问题,两个都会产生乱串的情况,这是我们可以告诉工具,不允许在两个instance 之间share test point和不允许在两个instance 之间串chain。

# if you not want tool share test point between instances, you can use this commond
set_test_point_sharing_restrictions on -instance {<instance_name}

或者 你可以create power domain 来避免两个power domain之间share test point。

然而,要解决test point 不要在两个不同instance 之间乱串的情况,我们就可以用power domain的方式解决,前面创建了power domain 之后,在add_scan_mode时指定 -signal_power_domain_chains on

test point and timing violation

如果在没有func sdc 的时候,我们可以设置下面命令来规避在cross clock domain或者mcp path 上插入test point

## you can use this commond to exclude test points from MCP/FP
set_test_point_analysis_options -exclude_cross_domain_paths on

test_point_analysis 的时候建议不要读sdc,因为sdc导致的test point 无法插入的点一旦超过20%,将会影响到test point 对于stuck at coverage 的提升。

transition 阶段,因为插入test point的时候没有读入sdc,将会导致在fals path 或者mcp 上插入testpoint,这时如果sdc没有将这些to observe test point path设为false path时,将会导致在ac测试的capture阶段,test point采错值,仿真fail。对于control test point capture 阶段自己采自己,不会有什么影响。所以建议在AC 阶段将observe test point en 关掉。

而实际情况是不需要这么做的, 在插入test point 后还需要修timing,修不掉的会补false path,在ATPG 阶段会吃最新的sdc,所以不存在这种情况

control test point capture 阶段 采自己的值,对timing 没有影响,obeserve test point capture阶段需要采上一级寄存器的值,如果没有设置false path, 就需要单cycletiming,在原本的path上增加了to observe test pointpath,且如果shareobserve test point,还会存在data path 被拉的太长的问题,前面异或逻辑锥由share observe test point的参数设置不同,数量不一样,这样对于后端routing 来说可能会有data path 被拉到很远,导致timing 难修

how to generate critical path to exclude test point

我们可以在pt 里面将一些critical path报出来,生成一份dofile,告诉工具哪些地方不插test point

# you can use this to generate critical path for tessent
restore_session pt_session
source /tessent_tool/share/tessent_write_no_tpi_paths.pt_tcl
set path <get_timing_paths critical_path>
tessent_write_no_tpi_paths $path ./path


################
# insert test point use generate dofile

dofile path.no_tpi

以上就是test 一些常见的项目中的用法和问题,有什么新的技术可以交流交流!

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:LBIST(Logic Built-In Self Test)是针对逻辑电路的自测试。测试激励由片上 PRPG(Pseudo-random pattern generation)来产生,输出响应通过 MISR(Multiple Input Signature Register)来压缩,最后对得到的特征值进行比对。LBIST 多应用于对可靠性要求较高的芯片(如汽车电子,工业级应用)的系统自检测试。LBIST产生的激励是随机的,所以天生的缺陷是测试覆盖率不充分,通过在设计中增加测试点(Test Point Insertion)可以在一定程度上得到改善。 引用:Boundary scan是附加在芯片I/O周边的扫描测试链,通过专门的测试端口(TAP)访问。在测试模式下,边界扫描链会接管功能逻辑,对I/O进行灵活访问。边界扫描链的结构,测试端口,以及其控制器(TAP Controller),被IEEE定为标准协议(IEEE 1149),也称做JTAG。边界扫描链最早应用于印刷电路板上芯片间的互联测试,后来也广泛应用于生产测试中对芯片管脚的测试。 引用:Memory BIST是测试存储器电路的方法,通过输入不同组数值测试SRAM存储器是否有坏点,需要将自检的硬件逻辑加到RTL中。 在以上引用中,"built in test"是指LBIST和Boundary scan这两种自测试方法。LBIST是通过在芯片上加入自测试电路、产生随机激励并通过压缩特征值进行比对来进行测试。Boundary scan则是通过在芯片I/O周边添加扫描测试链,以实现对芯片管脚的测试。这两种方法都是在芯片设计时内置的测试功能,用于系统自检测试和芯片管脚测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值