UT, BT, IT, ST, FT
…,今天我们要谈的主角是DFT
。为了让大家(即使小白)有个系统性的认识,本文将从如下五个维度进行介绍。
一、为什么需要DFT?
芯片生产过程中,可能导致物理缺陷。随着新工艺技术演进,芯片尺寸的变小会增加某些错误的可能性。芯片制造过程中的错误是我们不愿看到的,下面列出芯片制造中可能出现的一些问题。
- 密度问题:随着纳米技术的出现,芯片制造过程越来越复杂。设计的晶体管越来越小,沟道长度越来越小,后端连线也越来越密集。现在的芯片,普遍有数十亿个晶体管,所以,两根导线之间短路或断路的概率很大,这些是错误或者故障的来源。
- 软件问题:此外,除了制造过程的
defect
,用于设计芯片的EDA
软件的bug
或者工程师的失误,也会造成芯片失效。
考虑到这些问题,最关键的是在芯片出厂前进行测试,并且在每个关键过程都需要测试,而且要低成本高效率的测试,解决的方法就是DFT
。DFT
的终极目标就是在流片后,我们也能通过某些高效测试的方法,保证芯片和我们的设计意图吻合,不出现异常。
可能有知友问,我们可以直接设计一个功能测试脚本程序啊,如果脚本程序运行结果正确,同样可以检查出芯片是否完好。这样就不用再在芯片内部插入DFT
,简化设计,并且减少MUX等逻辑资源。但您想过没,测试脚本要按照芯片功能来编写,测试脚本复杂,而且要测试到每个逻辑点,要测试脚本足够完善,几乎不可能做到。从另外一点看,当前的SOC
设计规模越来越大很大,想要通过测试脚本来验证芯片的质量,会比插入DFT
更耗时费力。而且,编写的测试脚本,无法保证每个逻辑点都被测试到。因此,这也是使用DFT
的必要性。
二、什么是DFT?
DFT
是Design For Test
(可测试性设计)的简称。是设计人员在进行系统和电路设计的同时,考虑测试的需求,通过在芯片中增加一些测试电路从而简化测试过程。是一种为达到故障检测目的所进行的辅助性设计方法,使制作完成后的芯片能达到“可控制性”和“可测试性”两个目的。
DFT
的工作包括:
- 在项目初期规划DFT架构;
- 在
RTL
级别设计测试电路;在验证阶段验证测试电路; - 在
synthesis
阶段实现测试逻辑的插入; - 在测试阶段提供测试向量。
简单说就是:
- 在架构阶段定义好
DFT
的架构; - 在设计阶段实现
DFT
的逻辑和验证; - 在后芯片阶段做好
silicon bringup
的辅助。
三、DFT的作用?
DFT
是用来测试芯片质量,看是否在生产过程中,因为物理制造过程,导致芯片损坏的问题。DFT
不是检查芯片的功能是否正常,只检查芯片的内部连线等等,是否都正确连接到。
DFT
可以降低通过问题器件的风险,如果最终在实际应用中才发现器件有缺陷,所产生的成本将远远高于在制造阶段发现的成本。它还能避免剔除无缺陷器件,从而提高良率。插入DFT
亦能缩短与测试开发相关的时间,并减少测试装配好的芯片所需的时间。
如何能经济、快速的来方便芯片测试,就是DFT
工程师的主要工作目的。
四、DFT的工作对象是什么?
DFT
需要处理基本上芯片所有逻辑的测试。DFT
基本参与了所有的芯片功能,需要提供芯片初始化时FUSE
的管理;需要设计协调时钟,复位,电源等控制逻辑确保测试功能的实现,同时不影响芯片正常的工作模式。
对于片上存储器,由于其分布的复杂性,需要统筹设计mbist
的分布,以最小的代价实现测试覆盖。
除此之外,芯片中功能模块的每一个寄存器都是扫描链测试的工作对象。任何一个寄存器,或者寄存器之间的组合逻辑发生故障,都需要能被DFT
的方法侦测到。
五、DFT工程师的看家本领是什么?
一位合格的DFT
工程师,最起码要懂设计、懂测试、懂电路。这是岗位特性使然,要求各个阶段的知识都要涉及到一些。
比如你要会前端设计的RTL
,你要懂后端的逻辑综合和时序分析,你懂测试改进芯片良率。但对于coding
的能力要求并不算高,也不需要学得很精深。
DFT
的设计周期是比较长的,在整个周期中DFT
工程师需要:
- 参与芯片
DFT
架构定义和设计; - 完成
DFT
电路设计,包括Scan、Mbist、Bscan
等; - 协助后端团队处理
DFT
相关的时序分析和timing
收敛工作; - 使用
ATBG
等工具生成测试向量,并且进行仿真验证; - 参与
ATE,debug
测试failure
,提高芯片良率。
要求再高点,全栈DFT
工程师还需要掌握一些基本的知识和技能:
SCAN
,扫描测试,主要是用来检测芯片制造过程中经常会出现的失效问题。BIST
,内建自测试,主要是在芯片内部产生测试码,对测试的结果进行分析。JTAG
,是指国际标准测试协议(IEEE 1149.1
),也是指JTAG
联合测试行动小组。
上面提到的三项技术,是DFT很核心的技术。 除了要掌握这些技术原理,还得会用EDA
工具,这些技术的实现都得靠EDA
工具才行。还有perl、tcl
这些脚本语言以及Liunx
,都是IC设计通用的必备技能。