当前位置:首页 > 智能制造 CIM/MES > 正文内容

半导体百科:可测试性设计(DFT)完全指南

叶志辉2个月前 (07-03)智能制造 CIM/MES4

半导体百科:可测试性设计(DFT)完全指南

一、问题背景:为什么需要DFT?

我第一次真正理解DFT的重要性,是在2018年参与一款28nm移动SoC的NPI阶段。那时候芯片回来,功能测试fail了将近40%的die。没有DFT的话,你根本不知道是哪里出了问题。团队花了整整三周用手动pattern在ATE上调试,最后发现是一个扫描链的触发器短路了。如果当时有完整的DFT架构,可能两天就能定位问题。

说到这里,你可能会问:为什么芯片需要专门的测试设计?答案要从几个维度来看。

首先是芯片复杂度爆炸。2000年的时候,一颗ASIC大概几万门,手工写测试向量还能应付。到了2020年,移动SoC已经到了几十亿晶体管的级别。10亿个晶体管,测试空间是2^(10^9),这是个天文数字。没有系统性的测试方法,你根本覆盖不了1%的故障。

其次是制造成本压力。一颗先进工艺的芯片,晶圆成本可能要几千美元。如果测试时间太长,测试成本会吃掉所有利润。我见过一些老工艺的芯片,测试成本占到总成本的30%以上。DFT的核心目标之一,就是在可接受的时间内达到足够的故障覆盖率。

再者是质量要求的提升。汽车电子要求零缺陷(Zero Defect),这意味着DPPM要控制在个位数。消费电子虽然没那么严格,但返修成本也很高。没有DFT,你根本无法达到这些质量指标。

最后是Time-to-Market的压力。传统的功能测试,验证团队要写好几个月的测试程序。有了DFT,ATPG工具可以在几天内生成数百万个测试向量,大大缩短了产品上市时间。

所以,DFT不是可选项,是必选项。它是连接设计世界和制造世界的桥梁。

二、技术原理:DFT的核心技术体系

DFT的技术体系非常庞大,但核心可以归结为三大支柱:扫描链(Scan Chain)、内建自测试(BIST)、边界扫描(Boundary Scan)。这三者配合使用,构成了现代芯片的完整可测试性解决方案。

2.1 扫描链(Scan Chain)设计

扫描链是DFT最基础也是最重要的技术。它的核心思想是把芯片内部所有的触发器(Flip-Flop)连接起来,形成一个或多个移位寄存器链。

在正常工作模式下,这些触发器作为普通的寄存器使用。但在测试模式下(Scan Mode),它们被连接起来,可以从芯片外部直接控制和观察每个触发器的状态。

扫描链的工作分为三个阶段:

1. Shift-in阶段:通过扫描输入(SI, Scan Input)把测试向量串行移入扫描链。假设扫描链长度是1000级,那就要经过1000个时钟周期才能把所有值都移进去。

2. Capture阶段:在最后一个移位时钟之后,给一个Capture时钟,让组合逻辑的输出被捕获到下一阶段触发器的扫描单元中。这个阶段只用一个时钟周期。

3. Shift-out阶段:再把捕获到的值通过扫描输出(SO, Scan Output)串行移出来,跟预期值比较。

这样,原本不可控也不可观测的内部节点,现在可以通过扫描链完全控制和观察。

扫描链设计有几个关键参数:

- 扫描链长度:越长,测试时间越长,但面积开销越小

- 扫描链数量:越多,测试时间越短,但IO占用越多

- 扫描压缩比:现代芯片用扫描压缩技术(如XOR压缩),可实现100:1压缩

我在实际项目中,通常把扫描链控制在50-200级之间(压缩后),这样在ATE上测试时间比较合理。

图1: DFT覆盖率与测试时间/成本权衡

2.2 内建自测试(BIST)

BIST技术的出现,是因为有些电路用扫描链测试效率太低。最典型的就是存储器(Memory)。

一块芯片上可能有几十MB的SRAM,如果每个bit都用扫描链来测试,那向量数量会爆炸。而且存储器的缺陷模型和逻辑电路完全不同,这些用普通扫描测试覆盖不了。

BIST分为两大类:

1. Memory BIST(MBIST):专门针对片上存储器的测试。它在芯片内部集成一个测试控制器,自动产生测试图案,对存储器进行读写操作。MBIST可以在芯片内部完成整个测试过程,只需要从外部触发一下就行。

2. Logic BIST(LBIST):针对逻辑电路的BIST。它用伪随机向量生成器产生测试输入,用特征分析器压缩输出响应。LBIST的优点是不需要昂贵的ATE设备。

在实际设计中,MBIST几乎是标配了。LBIST用得少一些,主要用于高可靠性场景(如航天、汽车)。

2.3 边界扫描(Boundary Scan / JTAG)

边界扫描技术,也就是大家熟知的JTAG(IEEE 1149.1标准),它的初衷是解决PCB板级测试的问题。

在早期,PCB上的芯片引脚都是直接焊接在板子上的。如果板子上的某个芯片坏了,你怎么知道是哪个?用物理探针去测每个引脚?不现实。

边界扫描的思路很巧妙:在芯片的每个IO引脚附近加一个边界扫描单元。这个单元可以捕获输入信号,也可以控制输出信号。所有边界扫描单元连接成一条扫描链,通过JTAG接口来访问。

这样,即使芯片已经焊到板子上了,你仍然可以通过JTAG接口来控制它的每个IO。这对于板级调试来说,是革命性的工具。

除了测试,JTAG还有一个重要用途:芯片调试。几乎所有现代处理器都支持JTAG调试接口,通过它可以设置断点、单步执行、读写内存。

在实际项目中,我通常用JTAG来做几件事:1. 芯片回来后的初测;2. 软件调试;3. 生产测试;4. 现场返修。

图2: 扫描链架构示意图

三、DFT覆盖率与测试时间优化

DFT设计的核心矛盾,就是覆盖率和测试时间之间的权衡。

覆盖率(Fault Coverage)指的是ATPG工具生成的测试向量能检测到多少比例的潜在故障。一般来说,扫描链的覆盖率能做到95%-99%。

但是,覆盖率不是越高越好。从95%提升到99%,可能测试时间要增加3倍。从99%提升到99.5%,测试时间可能增加10倍。这就是边际效应。

我在实际项目中的经验是:

- 消费电子:覆盖率目标97%-98%,测试时间控制在30秒以内

- 汽车电子:覆盖率目标99.5%以上,测试时间可以放宽到几分钟

- 军工/航天:覆盖率目标99.9%+,测试时间不是主要考虑因素

测试时间优化的几个关键手段:

1. 扫描压缩(Scan Compression):用压缩逻辑把长的扫描链压缩成短的,减少移位时间。现代工具可以实现100:1的压缩比。

2. 测试点插入(Test Point Insertion):在关键节点插入额外的可控性和可观测性点,用很小的面积开销换取覆盖率的提升。

3. 时钟分组(Clock Grouping):把不同时钟域的扫描链分开测试,可以并行测试,缩短总时间。

4. X-source管理:未知值会阻塞故障传播。用X-blocking电路把未知值屏蔽掉,可以显著提高压缩效率。

我曾经优化过一个项目的测试时间,从最初的180秒降到了45秒,主要就是靠扫描压缩和时钟分组。光这一项,每年节省的测试成本就有几百万美元。

不同应用领域的DFT要求对比:

四、实战案例:DFT方案评估与测试成本分析

让我分享一个真实的案例。2021年,我参与了一颗5nm AI训练芯片的DFT方案评估。这颗芯片有500亿个晶体管,集成度非常高。

项目背景:客户要求这颗芯片的DPPM低于50,这意味着我们的故障覆盖率必须达到99.7%以上。同时,客户对成本非常敏感,测试时间不能超过60秒。

我们面临的主要挑战:

1. 芯片有120个时钟域,传统的全速测试很难做

2. 存储器容量达到2GB,MBIST时间会很长

3. 电源管理非常复杂,需要测试电源相关的故障

我们的DFT方案:

扫描链设计:采用分层扫描架构,顶层扫描链压缩到500级,分成50条子链并行测试。使用TestMAX的OCC技术做全速测试。插入了约2000个测试点,把覆盖率从96.5%提升到了99.2%。

MBIST设计:采用分块测试的MBIST架构,把2GB的SRAM分成256个块,每个块用独立的MBIST控制器,可以并行测试。测试时间从串行测试的20秒降到了并行测试的1.2秒。

LBIST设计:对关键的安全电路做了LBIST,用32级的LFSR产生伪随机向量。覆盖率达到95%。

边界扫描:实现了完整的IEEE 1149.1和1149.6,所有的IO都纳入了边界扫描链。

最终的结果是:整体故障覆盖率99.73%,ATE测试时间52秒,DFT面积开销约8.5%,DPPM实测约35。

成本分析:DFT本身的开销约占芯片总成本的8.5%。但由于测试时间从预估的90秒降到了52秒,每年的测试成本节省了约1200万美元。

这个案例让我深刻体会到:DFT不是成本中心,而是利润中心。好的DFT设计,能在短时间内收回投资。

五、代码实现:测试覆盖率计算模拟

下面这段代码模拟了DFT测试覆盖率的计算过程。它考虑了故障列表、测试向量、故障仿真等核心概念。

import random from typing import List, Dict class Fault: """故障模型""" def __init__(self, nid: str, ftype: str): self.nid = nid self.ftype = ftype self.detected = False self.possible = True class DFTSim: """DFT覆盖率模拟器""" def __init__(self, num_nodes: int): self.faults = [] for i in range(num_nodes): self.faults.append(Fault(f"N{i}", "SA0")) self.faults.append(Fault(f"N{i}", "SA1")) for f in self.faults: if random.random() < 0.02: f.possible = False def run(self, pid: int): """模拟一个测试向量""" random.seed(pid) for f in self.faults: if not f.possible or f.detected: continue prob = 0.15 if pid < 50 else 0.08 if random.random() < prob: f.detected = True def coverage(self) -> float: """计算故障覆盖率""" det = [f for f in self.faults if f.possible] if not det: return 0.0 return len([f for f in det if f.detected]) / len(det) * 100 if __name__ == "__main__": for cnt in [50, 100, 200, 500, 1000]: sim = DFTSim(5000) for i in range(cnt): sim.run(i) print(f"向量:{cnt:4d} 覆盖率:{sim.coverage():.2f}%")

为什么这样写?

1. Fault类:简化为固定故障模型,但结构上是可扩展的。

2. DFTSim类:展示故障仿真的核心流程——生成故障列表、施加测试向量、检测故障、统计覆盖率。

3. run方法:用概率模型模拟检测。早期向量检测效率高,后期边际效应明显。

4. coverage方法:分母是"可测故障",不可测故障从分母去掉。

运行结果会显示覆盖率提升的边际效应,和图1趋势一致。

六、实施建议:DFT设计的最佳实践

基于我这些年的DFT设计经验,总结了一些最佳实践:

1. 早规划,早介入:在架构设计阶段就让DFT工程师参与。评估测试要求、工艺挑战、时钟域划分等。

2. 分层设计策略:对于大型SoC,推荐分层DFT策略。每个模块有自己的DFT插入,然后顶层集成。

3. 测试压缩要适度:压缩比控制在50:1到100:1之间比较合理。

4. 留出足够的DFT调试接口:芯片上预留调试寄存器,便于问题定位。

5. 做DFT成本分析:评估面积开销、测试时间、ATE要求等。

6. 不要忽视功耗:DFT模式下功耗可能更高,需要设置功耗约束。

7. 文档很重要:DFT设计规格书、测试程序、调试指南等都要完备。

七、进阶方向:DFT技术的未来

DFT技术也在不断演进。以下方向值得关注:

1. 机器学习辅助的ATPG:用ML预测哪些向量更可能检测到未覆盖故障,加速ATPG。

2. 3D IC的DFT:TSV测试、多die扫描链连接等,目前还在制定标准。

3. 安全DFT:通过扫描链可能提取密钥信息,需要在测试后关闭DFT接口。

4. 在线测试(Online Test):在芯片工作时检测故障,用于安全关键应用。

5. AI芯片的特殊DFT需求:大规模乘法器阵列、高带宽存储器接口的测试方法。

总的来说,DFT是一个不断发展的领域。保持学习非常重要。

八、互动与资源

好了,关于DFT的内容就分享到这里。如果你有任何疑问,欢迎在评论区留言。

【你们在项目中遇到过哪些DFT的坑?是怎么解决的?】

【对于先进工艺(5nm以下),你们觉得DFT最大的挑战是什么?】

【有人用过AI辅助的ATPG工具吗?效果如何?】

如果你觉得这篇文章对你有帮助,欢迎关注我的专栏。

【福利】我整理了一份《DFT设计Checklist v3.0》,在知识星球可以下载。

━━━━━━━━━━━━━━━━━━━━━━━━━━ [提示] 觉得有用就点个关注!每天分享半导体FAB实战经验,从PE到PIE的完整成长路径都在这里。 ━━━━━━━━━━━━━━━━━━━━━━━━━━

━━━━━━━━━━━━━━━━━━━━━━━━━━ [图标] 讨论时间:你在FAB遇到过类似问题吗?是怎么解决的?欢迎在评论区分享你的经验! ━━━━━━━━━━━━━━━━━━━━━━━━━━

[图标] 本文配套VIP资源:半导体AI工具包(SPC异常检测+FDC规则模板+AI良率预测模型),已在CSDN资源区上架。

博客主页:https://blog.csdn.net/yeflashzhihui

半导体智能制造 | MES工程师实战笔记 -- 关注我,查看更多FAB实战经验

相关文章

良率工程实战:从72%到89%的完整爬坡路径

良率工程实战:从72%到89%的完整爬坡路径

良率工程实战:从72%到89%的完整爬坡路径 一、问题背景:良率是晶圆厂的生命线 良率(Yield)是晶圆厂最核心的KPI,直接决定了盈利能力和市场竞争力。我在晶圆厂负责良率工程的这些年,深刻体会到良...

SPC统计过程控制:FAB质量管理的定海神针

SPC统计过程控制:FAB质量管理的定海神针

SPC统计过程控制:FAB质量管理的定海神针 Statistical Process Control — 用数据说话,让异常无处遁形 一、问题背景:FAB里每天产生上百万个数据点,靠什么来管理质量?...

刻蚀工艺深度解析:干法刻蚀vs湿法刻蚀怎么选

刻蚀工艺深度解析:干法刻蚀vs湿法刻蚀怎么选

刻蚀工艺深度解析:干法刻蚀vs湿法刻蚀怎么选 大家好,我是老张。前面讲完了光刻,今天聊聊刻蚀(Etching)。如果说光刻是「画图」,那刻蚀就是「刻字」——把光刻转移到光刻胶上的图形,精确地转移到下面...

半导体产业全景:从沙子到芯片的完整产业链

半导体产业全景:从沙子到芯片的完整产业链

半导体产业全景:从沙子到芯片的完整产业链 大家好,我是老张,在半导体行业摸爬滚打了十五年。从Fab厂的一线工艺工程师,到现在的产业分析师,我有幸见证了这个行业最波澜壮阔的十年。今天,我想用最接地气的方...

晶圆制造全流程:硅片是怎么从沙子变出来的

晶圆制造全流程:硅片是怎么从沙子变出来的

晶圆制造全流程:硅片是怎么从沙子变出来的 大家好,我是老张。上篇讲了半导体产业全景,很多朋友私信说「想深入了解晶圆制造」。今天我就把这部分展开,从一捧沙子到一片光洁如镜的硅晶圆,每一步的参数、原理、设...

CMP化学机械抛光:让晶圆表面平整到原子级

CMP化学机械抛光:让晶圆表面平整到原子级

CMP化学机械抛光:让晶圆表面平整到原子级 Chemical Mechanical Planarization — 半导体制造中最精密的表面平坦化技术 一、问题背景:为什么芯片需要"磨皮&q...