jake的个人空间 https://blog.eetop.cn/1592 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

数字电路DFT

热度 23已有 10606 次阅读| 2021-1-15 02:44 |系统分类:芯片设计

设计 day1 就应该考虑 DFT 了,尤其是设计时钟模块,复位模块时。

 

数字电路最常用的 DFT 就是加 scan chain ATPG 工具产生 scan pattern 可以很高效地判断片子内部是否有缺陷。 测试时间是成本的重要部分。Die ATE 上多花 1ms 的测试时间,都会增加成本。 Scan pattern 因其高效,被视为最经济的 DFT

 

DFT 简而言之就两个词:

-        Controllability 可控性

-        Observability  可观察性

可控性Controllability 主要包括

-        时钟可控。 每一个时钟都应该加上 scan mux。在 ATPG mode 下,scan mux 切换到 scan clock 替换功能时钟 (functional clock) 驱动 flip flop 如果设计中用到 ICG (integrated clock gating) cell ATPG mode ICG 保持“透明” transparent scan clock 要畅通无阻通过 ICG 通常 ICG 会有一个 TE pin,连上 atpg_mode 信号就可以保证每个 scan clock pulse 都通过了。

-        复位可控。 每一个复位都应该加上 scan mux。在 ATPG mode 下,scan mux 切换到 scan reset 替换功能复位。 如果因为pin 紧张,无法提供 scan reset,可以在 ATPG mode 下把复位 tie 1

 

Observability  可观察性

如果电路内部某个 gate stuck at fault,是否都能观察到。 绝大部分 gate 如果有 stuck at fault 都会被 scan chain 捕捉到。输出的 scan pattern 与预期不一致,就说明片子内部有缺陷了。

ATPG 工具报告中的 test coverage可用来评估可观察性好坏。 如果test coverage % 比较低,就要研究如何让内部更多的信号可以被 scan chain 观察到了。 具体要看是哪部分电路覆盖率低,分析是否设计中有错造成部分 flip flop 没有加到 scan chain 里。 有些 gate 是无法完全覆盖的,如 scan mux, scan tie off   

 

提高 test coverage 的常用技巧

ATPG mode 下,把 registered output 反馈 (loop back) 到输入并和输入 mux 一下。 这样在 ATPG mode 下,不可控的输入也变得可控了。 切记:registered output Registered output flop 产生的。 这个 flop 如果在 scan chain 里,那它的值是可以被 scan pattern 决定的,这个也就是 scan pattern controllable 的。如果某个 output 是完全由组合逻辑产生的,那是不能 loop back和输入 mux 的。

 

综合工具插入 scan chain 后通常可以生成 DFT DRC 报告。 要看一下。 如果 DFT DRC 过不了,肯定有什么地方错了。

 

PnR (place & route) 是, 可以做 scan reordering,根据物理位置,优化 scan chain 

 

芯片规模不大,或是百万门级规模但功能单一,完全可以由设计人员自己做 DFT ,不需要专职的 DFT engineer

7

点赞

刚表态过的朋友 (7 人)

发表评论 评论 (42 个评论)

回复 jake 2021-3-30 09:58
您现在的方案是 TEST_MODE&(TEST_MODE_SEL==2'b01) buffer后的信号作为scan_mode,对吧?“POR和Scan reset目前是用scan mode做mux的” -- 这样做是对的。实际上所有的DFT reset mux, DFT clock mux都应该是用scan_mode做选择的。  
如果能保证上电过程TEST_MODE为0,那就不需要加其他逻辑了。应该不需要等太长时间,毕竟ATE上每一 ms 都是钱。
回复 andywang3791 2021-3-30 17:30
jake: 您现在的方案是 TEST_MODE&(TEST_MODE_SEL==2'b01) buffer后的信号作为scan_mode,对吧?“POR和Scan reset目前是用scan mode做mux的” -- 这样做是对的。实际上 ...
是的,TEST_MODE&(TEST_MODE_SEL==2'b01)这之后加一个sizeonly的buffer,作为scan mode,不过保证上电过程TEST_MODE为0只能靠ATE去延迟,design里并没有保证,所以如果刚一上电就驱动TEST_MODE和scan_pattern我担心就会出问题
回复 jake 2021-3-30 21:47
andywang3791: 是的,TEST_MODE&(TEST_MODE_SEL==2'b01)这之后加一个sizeonly的buffer,作为scan mode,不过保证上电过程TEST_MODE为0只能靠ATE去延迟,design里并没有保证,所 ...
现在的情况是上电时需要ATE保证TEST_MODE为0。 这就有一个问题,在用户的使用场景中上电时能否保证TEST_MODE为0。TEST_MODE是个PAD的输出,是吧?
在上一家百年老店我们是这么做的。用户使用场景是3V,5V only。我们做了一个特殊IO PAD,正常使用情况下这个PAD的输出都是0。输入拉高到7V以上,输出为1(TEST_MODE=1)。这个7V以上输入是不告诉用户的。Datasheet也写明了输入5V以内,否则不保障片子安全。同时设计中加了保险,password register + write-only atpg_mode register bit。 前面提到过的,这个atpg_mode bit只能在(TEST_MODE==1)且password match的情况下写入,且写入后再也无法更改,除非片子重启POR。Password也是不告诉用户的。这样几道保险加上,就能保证所有正常上电或使用场景下无法进入scan mode。 供参考。
回复 andywang3791 2021-3-31 09:08
"TEST_MODE是个PAD的输出,是吧?"---对于design来说是输入,方向是从pad->core, 也就是input only的一个pad,这个pad应该只在CP测试时用,封装后我们应该不会拉出这个pin脚,您提到的这个做法确实很保险,比较稳妥,多谢您的建议
回复 wa12jun 2022-3-1 17:16
hi,jack.请问一下设计中例化的门控单元te是接scan_mode还是scan_en,我这边尝试接scan_en,好像总是会报violation
回复 edayz 2022-3-13 09:20
谢谢分享
回复 hmuing 2022-4-26 15:01
jake: 1.  综合 DFT insertion 定义的 TESTMODE 是 atpg/scan 专属的信号,通常就是 scan_mode/atpg_mode。 复杂一些的 SOC 会多几个,基本都是在 scan 时必须保持固定 ...
您好,想请教一下,这个atpg_mode如何设置为1了,正常测试的时候可以先指令设置好后再测试,但是现在TetraMAX中,因为这个信号无法设置为1导致blocked error,scan_out trace 0 cells,该如何解决
回复 jake 2022-4-26 21:29
wa12jun: hi,jack.请问一下设计中例化的门控单元te是接scan_mode还是scan_en,我这边尝试接scan_en,好像总是会报violation
一般接scan_mode
回复 jake 2022-4-26 21:30
hmuing: 您好,想请教一下,这个atpg_mode如何设置为1了,正常测试的时候可以先指令设置好后再测试,但是现在TetraMAX中,因为这个信号无法设置为1导致blocked error,sc ...
跑Tetramax的时候需要一个wrapper,在里面例化digtop的时候直接把atpg_mode接1
回复 hmuing 2022-4-27 13:54
jake: 跑Tetramax的时候需要一个wrapper,在里面例化digtop的时候直接把atpg_mode接1
谢谢哈,但是我还要一个问题不太理解,就是我整个功能都实现了,但扫描链中出现了部分串QN的情况而不是全部串Q,所以仿真的时候scan_out和scan_in并不一致,工具可以识别扫描链是串Q还是串QN的不会出错,这是什么原理?为什么不是全部串Q,可以非常直观的看出来
回复 jake 2022-4-27 14:01
hmuing: 谢谢哈,但是我还要一个问题不太理解,就是我整个功能都实现了,但扫描链中出现了部分串QN的情况而不是全部串Q,所以仿真的时候scan_out和scan_in并不一致,工具 ...
不需要全部是Q。也许某些节点用QN test coverage更高。
回复 hmuing 2022-4-27 14:07
jake: 不需要全部是Q。也许某些节点用QN test coverage更高。
原来如此,受教了,那如果我想设置一下的话,是否可以什么命令使得扫描链全部串Q呢
回复 jake 2022-4-27 14:11
hmuing: 原来如此,受教了,那如果我想设置一下的话,是否可以什么命令使得扫描链全部串Q呢
抱歉,这个无法回答,以前没有这么试过
回复 hmuing 2022-4-27 14:14
jake: 抱歉,这个无法回答,以前没有这么试过
   hah,谢谢哈,我也是刚遇到这个问题,想多了解一下原理,感谢您的指导!
回复 hmuing 2022-5-25 12:45
jake: 1.  综合 DFT insertion 定义的 TESTMODE 是 atpg/scan 专属的信号,通常就是 scan_mode/atpg_mode。 复杂一些的 SOC 会多几个,基本都是在 scan 时必须保持固定 ...
hi,Jack,关于dig层por的一个问题咨询一下,正常功能下test_mode=0,通过外部打指令方式将test_mode置1,但这个flop的复位端por是从模拟模块输入过来的,实际测试ATE只需要在上电后延迟几ms就可以了,但是生成测试向量时,需要通过在spf中test_setup中增加打指令的方式将这个flop置1,而por不是chip_top层的port,做不到先是0,延迟一段时间再变为1,所以导致test_mode初值不是0,打指令失败,出现不定态,导致错误,难道必须在生成的测试向量testbench中修改test_setup,增加打指令命令么?
回复 jake 2022-5-25 21:15
hmuing: hi,Jack,关于dig层por的一个问题咨询一下,正常功能下test_mode=0,通过外部打指令方式将test_mode置1,但这个flop的复位端por是从模拟模块输入过来的,实际测 ...
"而por不是chip_top层的port,做不到先是0,延迟一段时间再变为1,所以导致test_mode初值不是0,打指令失败,出现不定态,导致错误" -- 生成向量的时候需要做一个digtop_wrapper,类似chip_top,por应该加到digtop_wrapper的port里,虽然por并不是chip_top的pin。这样工具就知道por是复位,生成向量的时候就知道por 0->1后test_mode这个flop初始状态是0,后续的写入指令可以把test_mode置为1
回复 hmuing 2022-5-26 10:43
jake: "而por不是chip_top层的port,做不到先是0,延迟一段时间再变为1,所以导致test_mode初值不是0,打指令失败,出现不定态,导致错误" -- 生成向量的时 ...
我是这样设置的,但是导入tmax中trace不了,test_mode这个flop的Q端还是xxx,而复位端已经变成111了
回复 jake 2022-5-26 11:40
hmuing: 我是这样设置的,但是导入tmax中trace不了,test_mode这个flop的Q端还是xxx,而复位端已经变成111了
有点不对劲。test_mode这个flop很特殊,RN直接连por。 por 0->1后test_mode Q应该是0
回复 hmuing 2022-5-26 13:27
jake: 有点不对劲。test_mode这个flop很特殊,RN直接连por。 por 0->1后test_mode Q应该是0
是的,感觉tmax不会帮你执行清零打指令使testmode为1这个过程,读进来之前就必须已经是1才行;所以我同样这样设置后,手动将网表里的test_mode输出修改为1'b1,然后读进tmax,生成测试向量,然后再用修改前的网表和测试向量去仿真,是正确的,会清零再打指令进test_mode,scan测试,和实际想法一致,但是如果要这样做的话,那直接在生成后的测试向量中修改test_setup就好了,模拟实际情况,实际测试的时候,ATE的其他端口和芯片顶层连接,por这个端口不需要和芯片连接的(因为内部上电就会产生给digital),悬空处理,感觉这样更省事,不知道想的对不对?唯一的缺点就是修改testbench还要修改wgl,一旦wgl改错了就完了,没有验证环节
回复 sanshi623 2023-12-21 10:44
jake,您好,想请教一下,在DFT 模式下,假设存在时钟 func_A_clk  , func_B_clk , func_C_clk 功能时钟以及 ATE_clk 测试时钟。 频率大小  func_C_clk > func_B_clk > ATE_clk > func_A_clk。 那该怎么处理 func_A_clk 这个时钟下的 DFF 呢? func_A_clk 这个时钟下的 DFF还有没有必要做 transition 测试;如果想要在这些DFF 上只做stuck at 测试,不做transition 测试的话,需不需要将这些DFF 跟func_B_clk , func_C_clk 时钟域的DFF 分开串扫描链呢

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 229

    粉丝
  • 89

    好友
  • 285

    获赞
  • 273

    评论
  • 2319

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-9 06:54 , Processed in 0.022740 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部