1. DFT概述:什么是可测性设计、为什么需要DFT、DFT在芯片开发流程中的位置、常见的DFT技术概览
1.1 什么是可测性设计?
可测性设计,英文叫 Design for Test,简称 DFT。说白了,就是我们在设计芯片的时候,提前把「测试」这件事考虑进去。
你想想看,一颗芯片流片回来,你怎么知道它能不能用?总不能拿放大镜一个个晶体管去检查吧?所以我们需要一种方法,能快速、高效地判断芯片有没有制造缺陷。
我个人习惯把 DFT 理解为「给芯片装上一套体检系统」。就像人需要定期体检一样,芯片在出厂前也必须经过严格的测试。这套体检系统不是流片后才加的,而是在设计阶段就规划好的。
核心思想: 在芯片内部增加额外的测试电路,让测试人员能够从外部控制芯片内部节点的状态,并能观测到内部节点的响应。
我在项目中遇到过不少新人,他们觉得 DFT 是「额外的工作」,是「浪费面积」。嗯,这种想法其实很危险。没有 DFT 的芯片,就像没有安全带的汽车——平时看着省事,真出了问题就晚了。
1.2 为什么需要DFT?
这个问题其实很直接。一颗芯片从设计到量产,中间要经历晶圆制造、封装、老化测试等多个环节。每个环节都可能引入缺陷。
举个例子,晶圆制造过程中,哪怕是一粒微小的灰尘落在光刻胶上,都可能导致金属线短路或断路。这种缺陷在显微镜下都很难发现,但通过 DFT 测试,几秒钟就能定位。
具体来说,DFT 的必要性体现在这几个方面:
- 降低测试成本: 自动测试设备(ATE)是按秒计费的。DFT 做得好,测试时间从几秒降到零点几秒,省下的钱可不是小数目。
- 提高测试覆盖率: 没有 DFT,你可能只能测试芯片的输入输出引脚。有了 DFT,你可以测试芯片内部的每一个寄存器、每一条路径。
- 加速良率分析: 当芯片良率出现波动时,DFT 数据能帮你快速定位是哪个工艺步骤出了问题。
- 支持故障诊断: 芯片失效了,DFT 能告诉你「是哪个逻辑门坏了」,而不是让你拿着示波器瞎猜。
我的经验: 曾经有一个项目,因为 DFT 覆盖率不够,导致一批芯片在客户那里频繁失效。我们花了整整两个月才定位到问题——一个很隐蔽的桥接故障。如果当时 DFT 做得更充分,这个故障在量产测试阶段就能被筛掉。
1.3 DFT在芯片开发流程中的位置
DFT 不是独立存在的,它贯穿整个芯片开发流程。我习惯把流程分成这几个阶段:
| 阶段 | DFT相关工作 | 说明 |
|---|---|---|
| 架构设计 | DFT架构规划 | 确定测试策略、选择DFT技术、规划测试接口 |
| RTL设计 | DFT逻辑插入 | 插入扫描链、BIST控制器、边界扫描等 |
| 综合 | DFT综合优化 | 确保DFT逻辑不被优化掉,满足时序约束 |
| 物理设计 | DFT物理实现 | 时钟树综合、扫描链重排序、电源规划 |
| 测试向量生成 | ATPG | 自动生成测试向量,评估测试覆盖率 |
| 量产测试 | ATE测试 | 将测试向量加载到ATE上,执行实际测试 |
你看,从架构设计到量产测试,DFT 工程师几乎在每个环节都要参与。我个人建议,DFT 的规划一定要在项目启动时就介入。等到 RTL 都写完了再想 DFT 的事,那就太晚了。
注意: 很多团队把 DFT 放在后端流程里,这是不对的。DFT 应该与前端设计并行推进。我曾经见过一个项目,因为 DFT 规划晚了,导致扫描链插入后时序不收敛,最后不得不重新综合,整个项目延期了三个月。
1.4 常见的DFT技术概览
DFT 技术有很多种,但最常用的就那么几个。我按使用频率给大家介绍一下:
1.4.1 扫描链(Scan Chain)
这是最基础、最核心的 DFT 技术。原理很简单:把芯片里的普通寄存器替换成扫描寄存器,然后把这些扫描寄存器串成一条或几条链。
测试的时候,通过扫描链把测试数据「灌」进去,然后让芯片跑一个时钟周期,再把结果「扫」出来。这样就能检查芯片内部的逻辑是否正确。
// 扫描寄存器的简化Verilog代码
module scan_flipflop (
input clk,
input si, // 扫描输入
input se, // 扫描使能
input d, // 正常数据输入
output so // 扫描输出
);
reg q;
always @(posedge clk) begin
if (se)
q <= si; // 扫描模式
else
q <= d; // 正常模式
end
assign so = q;
endmodule
我在项目中遇到过最头疼的问题就是扫描链的时序。扫描链太长,测试时间就长;扫描链太短,又需要更多的测试引脚。这个平衡需要根据芯片的规模和测试成本来权衡。
1.4.2 内建自测试(BIST)
BIST 就是让芯片自己测试自己。主要用在存储器测试上,比如 SRAM、ROM 等。
BIST 控制器会生成测试模式,写入存储器,然后读出来比较。如果发现不一致,就报告故障。
为什么存储器要用 BIST?因为存储器的单元太多了,如果用扫描链去测,测试向量会大到无法想象。BIST 可以在芯片内部高速运行,测试效率极高。
1.4.3 边界扫描(Boundary Scan)
这个技术主要用于 PCB 级的测试。它遵循 IEEE 1149.1 标准,也就是我们常说的 JTAG。
边界扫描在芯片的每个 I/O 引脚上都加一个边界扫描单元,这些单元串成一条链。通过 JTAG 接口,你可以控制每个引脚的状态,也可以读取每个引脚的值。
说白了,边界扫描就是给芯片的「手脚」装上了传感器。板级调试的时候,这个功能特别有用。
1.4.4 其他DFT技术
- 测试点插入: 在逻辑覆盖率不够的地方,手动插入观测点或控制点。
- 压缩技术: 减少测试数据量,降低测试时间。比如 X-tolerant 压缩、MISR 等。
- 延迟测试: 检测芯片能否在目标频率下正常工作,主要针对路径延迟故障。
我的建议: 对于初学者,先把扫描链和 BIST 搞明白。这两个技术覆盖了 90% 以上的测试需求。边界扫描可以等有板级调试需求时再深入学习。
1.5 本章小结
DFT 不是什么高深莫测的技术,它就是我们给芯片装的一套「体检系统」。没有它,芯片的质量就无法保证。
记住几个关键点:
- DFT 要尽早规划,最好在架构设计阶段就开始
- 扫描链是基础,BIST 是存储器测试的利器
- 测试覆盖率不是越高越好,要平衡成本和收益
- DFT 不是后端的事,它需要前端和后端的紧密配合
下一章,我会带大家深入扫描链的设计细节。到时候咱们聊聊扫描链的时钟怎么处理、怎么避免扫描链上的竞争冒险。嗯,这些都是实战中经常踩的坑。