1. DFT概述:什么是DFT,为什么需要DFT,DFT在芯片设计流程中的位置
1.1 什么是DFT?说白了就是给芯片装个“体检系统”
DFT,全称是Design for Test,可测性设计。
我经常跟刚入行的同事这么解释:你设计了一颗芯片,功能再牛,性能再强,如果造出来没法测试,那就是一堆废硅片。
DFT的核心思想,就是在芯片设计阶段,就提前植入一些专门的测试电路。这些电路平时不影响芯片正常工作,但在测试模式下,它们能帮你快速定位芯片内部到底哪里出了问题。
举个例子你就明白了:
- 正常模式:芯片跑你的算法、处理你的数据,DFT电路“隐身”。
- 测试模式:DFT电路接管,把芯片内部的寄存器连成一条长长的“扫描链”,像串糖葫芦一样。你从外面灌入测试向量,看输出对不对,就能判断内部有没有制造缺陷。
核心要点:DFT不是“事后补丁”,而是“事前布局”。
我见过太多项目,流片回来才发现没法测试,只能拿探针一个个点焊盘测,那效率……嗯,不提也罢。
1.2 为什么需要DFT?三个血泪教训告诉你
你可能会问:芯片设计已经够复杂了,为什么还要额外加一堆测试电路?这不是增加面积和功耗吗?
没错,DFT确实会带来开销。但跟它解决的问题相比,这点代价完全值得。我总结三个核心原因:
原因一:制造缺陷是躲不掉的
芯片制造不是100%完美的。光刻对准偏差、金属线桥接、氧化层针孔、离子注入浓度偏差……这些缺陷在纳米级工艺下非常普遍。
我记得有一次,一颗28nm的芯片,功能仿真全过,流片回来100颗样品,有12颗跑不到目标频率。后来用DFT的扫描链一查,发现是某条关键路径上的一个与非门驱动能力偏弱。如果没有DFT,你根本不知道问题出在哪。
原因二:测试成本决定芯片利润
一颗芯片的测试成本,可能占到总成本的10%~30%。
没有DFT的芯片,测试只能靠功能测试——也就是跑一遍正常功能,看结果对不对。但功能测试覆盖率极低,很多内部节点根本测不到。而且功能测试向量动辄几百万条,测试时间长得吓人。
有了DFT,你可以用ATPG(自动测试向量生成)工具,自动生成高覆盖率的测试向量。测试时间从几小时缩短到几分钟,测试成本直线下降。
我的经验:一个成熟的DFT方案,能把测试成本降低50%以上。我做过一个项目,导入full scan后,测试时间从45分钟降到了8分钟,良率还提升了3个百分点。
原因三:良率分析离不开DFT
芯片流片回来,良率只有70%?你得知道那30%到底坏在哪。
DFT提供了“诊断”能力。通过分析测试失败的扫描链数据,你可以精确定位到某个标准单元、某条金属线。然后反馈给工艺团队,调整工艺参数,下一批良率就能提上去。
没有DFT,你只能对着黑盒子干瞪眼。
1.3 DFT在芯片设计流程中的位置
很多新人以为DFT是后端的事情,或者测试部门的事情。其实不对。
DFT贯穿整个芯片设计流程。我习惯把它分成四个阶段:
| 设计阶段 | DFT工作内容 | 我的提醒 |
|---|---|---|
| 架构设计阶段 | 确定DFT策略:选哪种扫描方式?要不要BIST?测试接口用JTAG还是IEEE 1687? | 这一步千万别省,后面改架构代价巨大 |
| RTL设计阶段 | 插入DFT相关的RTL代码:比如测试模式控制逻辑、扫描链使能信号 | 我习惯在RTL里就把测试模式信号留好,省得后面综合时手忙脚乱 |
| 综合与DFT插入阶段 | 用EDA工具自动插入扫描链、BIST控制器、边界扫描单元 | 这是DFT工程师的主战场,工具脚本要写扎实 |
| 测试向量生成与验证阶段 | 运行ATPG生成测试向量,做仿真验证,确保测试覆盖率达标 | 覆盖率不到95%以上,我一般不敢签字放行 |
注意:DFT不是一次性的工作。在芯片设计流程中,DFT需要反复迭代。
我曾经遇到一个项目,综合后扫描链时序不满足,不得不回头修改RTL。所以我的建议是:DFT要尽早介入,越早越好。
1.4 一个简单的DFT结构示例
光说不练假把式。我写个最简单的DFT结构,让你感受一下:
// 一个带扫描功能的D触发器
module scan_dff (
input clk,
input rst_n,
input data_in, // 正常数据输入
input scan_in, // 扫描数据输入
input scan_en, // 扫描使能:1=扫描模式,0=正常模式
output reg q
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
q <= 1'b0;
else if (scan_en)
q <= scan_in; // 扫描模式下,数据从扫描链传入
else
q <= data_in; // 正常模式下,数据从功能路径传入
end
endmodule
你看,这个电路只多了一个MUX(通过scan_en选择输入源),就能让寄存器在正常模式和扫描模式之间切换。
成千上万个这样的寄存器首尾相连,就构成了一条扫描链。测试时,你把测试向量从扫描链的输入端灌进去,跑几个时钟周期,再从输出端读出来,跟预期值比对——这就是DFT最基础的工作原理。
1.5 小结
这一章我们聊了:
- DFT是什么:在芯片设计阶段植入测试电路,让芯片变得“可测”。
- 为什么需要DFT:应对制造缺陷、降低测试成本、支持良率分析。
- DFT在流程中的位置:从架构到RTL到综合到测试向量生成,贯穿始终。
下一章,我会带你深入扫描链设计的细节。到时候咱们聊聊:扫描链到底怎么插?时序怎么收敛?覆盖率怎么算?
嗯,这些都是实战中天天要面对的问题。