一、DFT基础概念:什么是DFT、DFT在芯片设计中的位置、DFT与功能测试的区别
大家好,我是老李。做芯片验证这行十几年了,今天咱们聊聊DFT——这个让不少新人头疼、却又绕不开的话题。
说实话,我刚入行那会儿,也觉得DFT就是个「附加题」。功能验证都忙不过来,谁有空管测试?直到有一次,我负责的一个芯片流片回来,功能仿真全过,结果ATE测试死活跑不通……嗯,从那以后,我再也不敢小看DFT了。
1.1 什么是DFT?
DFT,全称Design for Test,中文叫「可测试性设计」。说白了,就是在设计阶段就给芯片装上「体检设备」。
你想想看,一颗芯片几亿个晶体管,封装好了就一个小黑盒子。你怎么知道里面哪个管子坏了?DFT就是干这个的——在芯片内部加一些专用电路,让测试设备能「看」进去。
核心思想: 不是等芯片做出来再想怎么测,而是在设计阶段就把测试能力「焊」进去。
我个人习惯把DFT分成三大块:
- 扫描链(Scan Chain):把普通寄存器串成链,测试时像「串糖葫芦」一样把数据灌进去、读出来
- 内建自测试(BIST):芯片自己给自己做体检,比如Memory BIST、Logic BIST
- 边界扫描(JTAG/Boundary Scan):通过IEEE 1149.1标准接口,测试芯片管脚之间的连接
我在项目中遇到过最典型的场景:一个SoC芯片,功能验证跑了三个月,零bug。结果ATE测试时发现有一片SRAM的某几个bit死活写不进去。幸亏提前加了Memory BIST,五分钟就定位到是地址译码器的物理缺陷。要是没有DFT,这芯片就得一颗颗用显微镜去查——想想都头大。
1.2 DFT在芯片设计中的位置
很多新人会问:DFT到底属于前端还是后端?
我的答案是:DFT是个「跨界选手」。它既需要懂RTL设计,又要了解物理实现,还得熟悉ATE测试流程。
来看一张我画的流程图,帮你理清DFT在整个芯片设计流程中的位置:
从这张图你能看到,DFT不是某个时间点「插一杠子」就完事了。它贯穿了整个设计流程:
- 架构阶段:就要定好测试策略——用几条扫描链?要不要加Logic BIST?
- RTL阶段:把DFT的IP(比如BIST控制器)例化进去,同时用`ifdef把DFT逻辑和功能逻辑隔离开
- 综合阶段:插入扫描链,把普通寄存器换成带扫描功能的寄存器
- 后端阶段:保证扫描链的时序收敛,别让测试路径成为关键路径
- ATE测试:最终用DFT生成的pattern去筛芯片
我的经验: 很多团队把DFT放到综合阶段才介入,结果发现RTL里有些三态总线、异步复位逻辑根本没法做扫描测试,回头改RTL代价巨大。我建议在RTL freeze之前,DFT工程师就要做一轮「可测试性检查」——这能省下至少两周的迭代时间。
1.3 DFT与功能测试的区别
这个问题我经常被问到。咱们用一个比喻来理解:
| 对比维度 | 功能测试 | DFT测试 |
|---|---|---|
| 测试对象 | 芯片的功能行为(能不能跑程序?) | 芯片的物理缺陷(有没有短路/断路?) |
| 测试方法 | 跑真实应用场景的testcase | 用扫描链灌入特定pattern,检查响应 |
| 覆盖率 | 功能覆盖率(代码覆盖、断言覆盖) | 故障覆盖率(stuck-at、transition delay) |
| 测试时间 | 通常较长(跑一个操作系统启动可能几秒) | 极短(扫描测试通常毫秒级) |
| 测试设备 | 仿真器、FPGA原型、ATE(跑功能pattern) | ATE(跑扫描pattern) |
| 目的 | 验证设计正确性 | 筛选制造缺陷 |
说白了,功能测试是问「芯片能不能干活?」,DFT测试是问「芯片有没有坏掉?」。
你想想看,一颗芯片有上亿个晶体管,制造过程中难免有杂质、光刻偏差、金属桥接。功能测试跑一万个case,可能都覆盖不到某个内部节点的stuck-at-0故障。但DFT的一条扫描链pattern,就能在几十个时钟周期内把几万个节点的状态全部检查一遍。
注意: DFT不能替代功能验证!我曾经见过一个团队,DFT覆盖率做到99%,结果芯片流片回来功能跑不通——因为DFT只测物理缺陷,不测逻辑功能。功能验证和DFT是「两条腿走路」,缺一不可。
还有一个常见的误区:很多人觉得DFT就是ATE测试用的。其实DFT在芯片调试阶段也很有用。我记得有一次芯片在系统级测试中偶尔死机,功能仿真怎么都复现不了。后来通过JTAG边界扫描,发现是某个管脚在特定温度下出现了信号完整性问题——这个bug要是没有DFT,光靠逻辑分析仪去抓,估计得折腾一个月。
小结
这一章咱们聊了DFT的三个核心问题:
- DFT是什么——给芯片装「体检设备」,让制造缺陷无处遁形
- DFT在流程中的位置——从架构到ATE,贯穿始终的「跨界选手」
- DFT与功能测试的区别——一个查「坏没坏」,一个查「会不会干活」
嗯,基础概念就这些。下一章咱们会深入扫描链的具体实现,包括怎么选扫描寄存器、怎么处理时钟域交叉——到时候我会拿一个实际项目中的踩坑案例来讲,保证让你印象深刻。
可可精品资料库