5.1 Tessent Atpg系列 第八章 Test Pattern Generation - Verify Test Pattern


本篇文章介绍ug中的第八章Test Pattern Generation的Verify Test Pattern

为什么要做基于timing的仿真,意义在于可以比较ATPG工具和simulator工具的差异性。

因为时序的差异导致不同的结果。

Design Simulation with Timing

首先你需要通过write_patern 这句cmd来写出pattern,默认是parallel 模式,除非你用-serial 指定写出serial, 因为serial 文件非常大,所以你可以使用-sample 开关写出部分pattern即可,工具会根据每一种pattern 类型都会至少保存一只。
另外,你也可以使用-start -end 开关来减少文件大小,但是这样的截取,是不可靠的,没有-sample可靠,最终你还是要跑full pattern set。

如果simulator没有发生错误,那么会print 下面的message:
no error between simulated and excepted patterns
参数传递采用+
默认的verilog testbench 支持几个verilog 参数传递:

  • STARTPAT 设定pattern number开始simulation的起始 pattern number
  • ENDPAD 设定pattern number结束simulation的pattern num
  • CHAINTEST 使STARTPAT以及ENDPAD 参数应用在chain test pattern上,而并非scan test 上。
  • END_AFTER_SETUP 使仿真仅仅仿真test_setup阶段的向量,然后结束仿真。
  • SKIP_SETUP 使testbench skip 跳过仿真test_setup向量,并且开始仿真第一支pattern,chain or scan test
  • CONFIG 指定.cfg 文件,该文件控制着.vec波形文件。具体用法,请看CONFIG Usage
  • NEWPATH tb文件的文件路径,默认文件名字的长度是512个字节。

参数传递的用法举例:
默认情况下,CHAINTEST=0,也就是说只会仿真scan test pattern ,除非你指定了CHAINTEST=1。
如果CHAINTEST=1 ,以及指定ENDPAT, 会从chaintest pattern 开始,但不会对scan test pattern进行simulation。
如果CHAINTEST =1 以及STARTAT ,同样会从指定的STARTPAT chain test pattern开始simulation,并一直到所有的scan test pattern。

vsim <testbench_tp> -c -do “run -all” +STARTPAT=5 +ENDPAT=8

STARTPAT,END PAT, and CHAINTEST Usage:

Parallel VS Serial Patterns

parallel 仿真虽然更快,但是不能定位一些scan shift 的问题,因此最好建议跑几只serial pattern,然后再跑parallel pattern.

Potential causes of Simulation Mismatches

simulation mismatch有很多原因造成,最大的难点就是清楚从哪里开始的。
首先 chain test 是否fail?
scan test serial/parallel 是否能过?
DRC 问题导致: C6和T24是最容易导致mismatch的,你可以通过set_clock_off_simulation 来避免C6问题

simulation mismatch investigaion:
mismatch发生在PO,scan cell ,还是都有?
mismatch发生在scan cell,通常是因为capture问题或者timing问题,但是如果发生在PO 端口,更有可能是数据load in to scan cell不正确。(没懂???)
mismatch发生在部分pattern还是全部pattern?
如果是部分patern,可以单独切,如果是全部pattern,一般是有通用的问题。
mismatch 发生在几个cell/pin 还是说发生在大部分的cell/pin , 发生在几个cell/pin 说明的是小部分的instance或者logic的问题,如果发生在大部分的cell/pin 更可能是一些通常问题。
chain test fail吗?
要确定serial pattern是否fail, chain test 仅仅是将shift data 数据从scanin 到scan out。这个也是我后面要增加的debug手段,也就是开启EDT bypass 模式。

是否特定的pattern类型fail?
如果仅仅是ram sequential pattern fail,那么问题可能是ram(不正确的模型),如果仅仅是clock_sequential pattern fail 。 那么问题最有可能与non-scan FF以及latch相关。

simulation data analysis

通过比较simulator的值以及ATPG 工具的值,然后去debug。
当simulated value 的值不匹配ATPG的值,verilog parallel 的tb可以报告时间、pattern num 以及scan cell或者哪一个PO出错。但是对于serial tb来说只会报告时哪一个PO出错,以及出错的时间,所以对于serial 来说更具有难度去找出scan cell capture到不正确的值。
你需要在ATPG 工具和simulator 工具同时去trace back,然后去找到mismatch 的源头
当你在比较simulation data与ATPG tool data的同时,非常有帮助去使用
SIM_VECTYPE_SIGNAL 这个parameter file.
当这个key words使用在parameter file中。tb 会include 额外的关键字,让你更容易的理解和debug。
在这里插入图片描述
如图所示,注意到这些信号能够帮助你debug
mgcdft_shift ,
mgcdft_launch_capture
_pattern_count

从图中,我们可以看到发生mismatc的点实在shift procedure after pattern 6
也就是是在shift out pattern 6(shift in pattern 7)的时候发生mismatch。
此时,如果我们想要看到在ATPG工具中的数据,你可以使用在图中1100ns的时候。

demo2:
推荐使用parallel testbench 使用少量的serial shift cycles即可。
能够使你在一支pattern中抓到shift和capture的问题。
为了应用serial post shift cycles,write out the patterns with the “SIM_POST_SHIFT”
比如,为了定义5个post-shift cycles, 请使用:

write_patterns <pat.v> -verilog -parameter_list {SIM_POST_SHIFT 5}

当你使用tb dump波形的时候,下面这些信号可以帮助你:
_procedure_string 描述shift/load_unload 阶段
_pattern_count pattern 序号,需要注意的是,当pattern_count为 0的时候,procedure_string为SHIFT阶段。指的是数据正在shift out for pattern 0(正在shift in for pattern 1), 所以需要记住的是,pattern_count 指的是shift out阶段
_cycle_count cycle数目
_compare_fail 比较失败为1
_chain_test _
是否为chain test, 是为1,为scan test 为0

在这里插入图片描述

为了查看相关的数据在ATPG 中,使用
set_gate_report 0 . 0是pattern index

report_scan_cell <mismatch_chain_name> <mismatch_cell_num> -display
在这里插入图片描述

在这里插入图片描述
如上图,首先要告诉ATPG工具,chain name,上面的哪一个cell fail了,ATPG工具定位到那一个cell之后,
然后set_gate_report pattern 0 ,指定fail的那只pattern。
再report_gates 可以看到SDFF期望的值

我个人的理解上面的D(100)的含义是,ATPG工具会以cycle内发生跳变(change)来看待,而并非与时钟完全的对齐
如下图所示下面我画的是010,如下图代表的是D端口,首先0 是起始的状态,接着发生改变,至于是在哪里时刻改变,从pattern里面并无法提现出来,因为pattern不是基于timing_base的tool,而是基于event的tool,最后是发生再一次的改变为0(即最终状态)

在这里插入图片描述

所以上面的信息D(100) 我们可以看到在当前的cycle内,D端口起始状态是1,然后在某一刻发生了改变为0,最终的状态为0

在这里插入图片描述
1、比较在capture的beginning阶段,首先需要check scan cell 被load进去了正确的值。在该例子中,在capture procedure的开始阶段,ff0/Q是1,如上图所示,simulation和tessent visualizer在capture阶段的开始都是1。ff0/Q (111)
如果这个值没问题,那么就说明scan cell被正确的load进去了值,并且在shift阶段是没有问题的。

2、接下来比较during capture阶段,时钟为010,SE (000) D(100)也就是说D端口在某一刻发生了改变从一开始的1,变成了0,最后保持为0。而Q抓到的是1,并且输出一直保持在111 .
在这里插入图片描述
如上图所示,但是我们可以从dump的波形可以看到,时钟piulse没问题,SE是0没问题,D从1 change到0也没问题,那么问题就出在Q并没有capture到期望的value 1,取而代之的是0.也就是说时钟因为hold问题并没有踩到正确的值。 而变成了100

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值