news 2026/10/11 7:01:13

DFT学习框架:从扫描链到覆盖率,用每日自测打通可测试性设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DFT学习框架:从扫描链到覆盖率,用每日自测打通可测试性设计

上周有个做数字前端的同事找我,说想转DFT方向,问我该从哪本书开始啃。我没直接回答,而是反问他一个问题:stuck-at故障为什么叫stuck-at?他愣了一下,说“就是信号卡死在0或1吧”。我说对,但DFT里比这个更重要的是,你凭什么知道一个节点卡住了?他又答不上来了。这个场景我见过太多次。每个人都说自己听过、见过、知道个大概,但被追问到机制层面就直接露馅。DFT(可测试性设计)这个方向,不算冷门也不算热门,但凡接触过芯片的人多少都能聊几句扫描链、覆盖率、JTAG。可一旦要你独立负责一个项目的DFT交付,要你在RTL评审阶段指出复位风险,要在覆盖率不达标时说出具体原因,很多人立刻就慌了。知识碎片化、缺少框架、被动吸收,是绝大多数DFT初学者跨不过去的三座山。

我做DFT这些年,带过几个从设计转过来的新人,最后摸索出一套自认为有效的打法:用整体性的知识框架打底,用“每天考一次”的高频自测收口。这套打法不需要过人的记忆力,也不需要每天腾出大块时间,它只需要你改变一种学习习惯。今天这篇文章,我把它完整拆开讲:先聊为什么你的DFT知识总是散成一堆珠子,再讲怎么搭一个能挂住这些珠子的骨架,然后用一条真实项目流程把知识点串起来,最后给你一份可以直接用的自测思路和易错题实录。

1. 为什么DFT学了就忘:问题的根源不是记忆力

1.1 学到的大多是零散的“珠子”,缺一根能串起来的线

DFT知识有个特点:边界特别宽,而且每个知识点之间没有天然的视觉联系。扫描链设计听起来像后端干的活,ATPG算法又牵扯到数字逻辑和故障模型,BIST要面对存储器阵列,边界扫描还得理解协议和TAP状态机。你翻开任何一本DFT教材,每章都能看懂,但合上书之后,脑子里通常只剩一堆彼此不相干的名词。

我见过不少人一上来就钻进细节,今天研究fault collapsing,明天看时钟门控对transition测试的影响,后天又折腾压缩链的长度分配。这种学习方式有一个致命问题:所有细节都是悬空的。遇到真问题时,你脑子里涌现的全是碎片——一会儿想起来扫描链可以重排来优化布线,一会儿想起来MUX DFF比LSSD多一个选择端——但这些碎片根本拼不成一个可以辅助决策的画面。整体性学习的核心,是先建立一棵知识树。树干是DFT的根本使命:用可控且可接受的代价,把一个有缺陷的芯片从亿万颗正常芯片里挑出来。第一层枝丫是:想挑出坏芯片,你得先能控制芯片内部状态(SCAN);得知道把状态逼到什么程度算达成目标(ATPG);得为特殊模块设计独立的测试通路(BIST与JTAG);还得保证这些测试能力不破坏芯片本身的正常工作(时钟、复位、功耗、信号完整性)。骨架立住了,再往下长叶子,叶子是具体的信号、协议、库单元和命令选项,长错了可以修剪,但树的骨架不会塌。

1.2 你一直在“熟悉”,而不是在“记忆”

第二个原因出在学习方式上。绝大多数人学新东西,都是看视频、划重点、刷文档,然后进入下一篇,整套动作只是在积累熟悉感。你反复看同一个概念,下周再看到时会有“我好像见过”的既视感,但这不是记忆,只是熟悉。判断记没记住的唯一标准,是能不能在没有任何提示的情况下主动把它提取出来,并且讲出细节。

心理学里有个概念叫测试效应(testing effect):主动回忆一个知识点,比反复阅读同样的材料,对长期记忆的巩固效果要好很多。我带的转岗同事里,凡是坚持每天做一点主动自测的,两周后对扫描链相关概念的反应速度就明显快过只翻书不测试的人。这不是玄学,是大脑的检索路径被反复强化了。你平时不强迫自己“往外拽答案”,等上了项目,被迫往外拽的时候,自然拽不出来。

1.3 工具能跑通流程,掩盖了知识体系的空洞

还有一个更隐蔽的陷阱:很多DFT工程师熟练掌握了工具操作,误以为自己已经懂DFT了。DFT Compiler跑完、TetraMAX出完vector、覆盖率报告显示98%,看起来一切正常。但如果这时候有人问你:为什么覆盖率不是100%?哪部分逻辑测不到?你为什么这么设定扫描链的长度?很多人会回答“公司流程就是这么走的”。

我对这个现象特别有感触。工具链越成熟,反而越容易让新人产生一种“完成任务”的错觉。跑流程和做设计是两回事。跑流程只是执行命令,做设计是理解每一行约束背后的意图。真要判断自己学没学会,别看会不会用工具,看能不能回答“为什么”的追问。这个判断标准,也是后面“每天考一次”要解决问题的抓手。

2. 整体性学习思路:先把DFT的知识地图画出来

2.1 先搞清楚DFT在整个芯片研发流程里的位置

很多初学者没有意识到,DFT不是芯片流片后才开始的测试工作,也不是后端布局布线时顺手插两根链的事。芯片研发的主流程大致是:规格定义、架构设计、RTL编码、逻辑综合、DFT插入、布局布线、物理验证、流片、测试与良率分析。传统流程里,DFT插入发生在逻辑综合之后、布局布线之前,也就是在netlist阶段。但现代流程里,团队会要求DFT工程师在RTL评审阶段就介入,做early DFT review,把DFT约束和RTL层面的设计同步修改。越早发现问题,修复成本越低。

一个DFT工程师如果只盯着工具跑脚本,不理解自己在整个流程里的角色,很容易沦为“插扫描链的工人”。真正值钱的DFT能力,是在一个多维约束环境里做判断:面积、时序、覆盖率、功耗、测试时间,互相拉扯。你什么时候介入、介入多深、什么时候让步,都取决于你对整条流程的理解深度。这也是为什么要先画知识地图,而不是上来就背命令。

2.2 四个主干:SCAN、ATPG、BIST、边界扫描

知识地图的四个主干区域,每一块都有它自己的核心问题和主要工具,先列个概览:

  • SCAN(扫描链设计):把芯片内部寄存器替换成可测试的扫描寄存器,串成一条或多条链,让测试向量可以“推”进内部。核心概念包括scan DFF、scan enable、shift/capture、链长平衡。工具层面通常是DFT Compiler、Tessent Scan。

  • ATPG(自动测试向量生成):根据故障模型自动生成测试向量,把芯片内部的节点状态翻转并传播到可观察的输出。核心概念包括stuck-at故障、transition故障、覆盖率计算、测试压缩。工具层面主要是TetraMAX(或新流程里的TestMAX ATPG)、Tessent ATPG。

  • BIST(内建自测试):在芯片内部生成激励并自行比对结果,主要覆盖memory和部分逻辑。核心概念包括MBIST/LBIST、retention、fail address分析。工具层面是Tessent MemoryBIST/LBIST、SoC BIST。

  • 边界扫描:IEEE 1149.1 JTAG协议,用于板级测试、芯片调试、访问内部测试端口。核心概念包括TAP状态机、指令寄存器、BSD文件。

这四块之间有大量交互。JTAG控制端口往往是扫描链的访问入口,MBIST的启动配置可能通过JTAG下进去,EDT压缩提高了ATPG效率但需要额外的测试引脚。学习的时候别把它们当四门独立课,要当四个相互咬合的齿轮。

2.3 精力分配:哪些必须深挖,哪些先混个脸熟

知识地图画完之后,下一步是划分精力。不是所有知识点都值得花同样的时间,我建议分三档处理。

第一档,必须能默写原理级别:扫描链的基本机制(为什么需要scan DFF、shift时数据怎么流动)、stuck-at故障模型和覆盖率计算逻辑、ATPG的基本测试模式(slow scan、skewed load、broad-side),以及复位和时钟在测试模式下的处理方式。这些话是面试和项目协作中的公共语言,含糊不得。

第二档,需要熟练操作的工具级别:DFT Compiler的约束写法、TetraMAX/Tessent的向量生成与覆盖率报告解读、MBIST controller的集成、带DFT信息的仿真。不需要背命令,但遇到问题要能查手册定位。

第三档,了解即可、用到再查:可制造性设计规则、delay fault更精确的高级建模、ATE测试机台的具体程序开发。这些方向通常对应特定产品线,入门期没必要死磕。

3. “每天考一次”的15分钟闭环:一套能坚持的执行方案

3.1 动手前先建一张考点清单

开始每日自测之前,你需要一份自己的考点清单。注意,不是网上抄一份,而是结合手里的项目自己写。具体做法:把你接触过的每个DFT环节拆成最小的知识点单元,一条只写一个考点,格式像这样——“扫描链的shift阶段,scan_en拉高后,数据从哪一端进入扫描寄存器?”一条对应一个精确答案,答案最好在一两句话内能讲完。

考点来源主要有三类:项目里真实踩过的坑、面试题和评估题里反复出现的题目、工具报错信息里那些你没搞懂的术语。每天早上花五分钟把清单过一遍,标出哪些能秒答、哪些要想一下、哪些完全没思路。一周下来,你的知识漏洞会自己浮出水面。

3.2 十五分钟怎么拆

执行节奏上,我建议固定在早上,最晚不要拖到晚上。晚上人的状态容易被当天情绪影响,而且工作一天后提取效率会明显下降。每个早上的15分钟拆成三段:

前2分钟,合上资料,回忆昨天清单里最不熟的五条知识点,能脱口而出才算过。中间8分钟,解决一个项目里遇到的真问题。比如昨天的工具warning没看懂,今天就拿手册和RTL把这条warning彻底搞明白。最后5分钟,用一条新的自测题替换或加深原有考点,写进清单。

核心是每天都要有一次“从脑子里往外拽答案”的动作,而不是再翻一遍资料。翻资料这种事,工作中已经做了很多,不缺你这15分钟。

3.3 错题怎么进入下一轮复习

错题不是记下来就完了,需要一个简单的间隔重复机制。我自己用的规则是:一条考点如果连续三天都能秒答,就降为低频区,每周考一次;一旦答错,立刻回到高频区,重新连续三天秒答再降级。不需要买花里胡哨的记忆软件,一张Excel表就能搞定,三列:题目、等级(高/中/低)、最近一次答错的日期。

重点不在表格,在于你每天主动提取的时候,让自己暴露在答不出来或者答错的“痛苦”里。答错越痛,下次记住的概率越大。别把这个当成自虐,这是DFT工程师为数不多的低成本试错机会,项目上答错一个概念,可能就是几万块的重跑费用。

4. 用一条真实项目线把知识串起来:DFT一周走读

4.1 阶段一:RTL评审,DFT工程师不是旁观者

假设你负责一款MCU芯片的DFT,芯片不大,两个时钟域,内含SRAM、ROM、若干外设。周一,你先做RTL评审。这时你会问四个问题:所有存储单元的复位信号是不是干净的?每个时钟域是不是有自己的扫描链方案,跨时钟信号有没有放同步器?memory有没有预留BIST接口?IO端口里有没有给JTAG或测试模式留专用引脚?

这几个问题的答案决定后续脚本怎么写。比如复位不干净,你就要在DFT约束里额外处理;跨时钟域没放同步器,ATPG会产生大量X态;BIST接口没预留,后面要改RTL,成本直接翻倍。很多DFT工程师觉得RTL评审是前端的事,这恰恰是错的。你在RTL阶段多问一句,后面就能少加十行约束。

4.2 阶段二:约束与插入,理解工具背后的语义

周三,开始跑DFT插入。先读懂综合后的netlist,再施加DFT约束。见过最多的问题,是把DFT约束当成“写完后交给工具去自动优化的事”,完全不关心约束背后的物理含义。比如set_dft_signal这条命令,你不光要写对,还要能解释为什么工具会把某些信号当作时钟处理,为什么scan enable在capture阶段必须提前拉低。

工具跑完之后会输出violation报告,这份报告才是你真正要花时间研究的东西。不要看到violation就急着查百度、翻手册,先把报告从头到尾读一遍,能看懂多少算多少,然后针对看不懂的条目去查。这个过程比跑十遍流程都管用。

4.3 阶段三:覆盖率报告,数字只是一个结果

周五,用生成的netlist跑ATPG,看覆盖率报告。stuck-at覆盖率98%,看起来很高,但你要能拆出它为什么不是100%。哪些节点因为测试本身不可控?哪些节点因为时序约束加了don't touch?哪些损失来自扫描链结构本身?覆盖率报告里每一个uncoverage reason都看一遍,比盲目加测试向量有用得多。

我带同事时有个硬性要求:每周五输出一张“覆盖率缺失原因分析表”,把每个uncovered节点归因到RTL、约束或网表结构上。坚持两个月,他们对DFT的理解深度明显比只会跑脚本的人高出一截。

4.4 阶段四:仿真回归与SDC交接

DFT插入之后,紧接着要做仿真回归,还要输出带扫描模式的SDC。很多新人以为DFT这步做完就结束了,其实交接才算开始。后端要用你的SDC去约束布局布线,测试工程师要用你的pattern去做ATE程序。SDC写得太松,后端的CTS修不出来;pattern没跑仿真,直接上机可能让整个测试程序崩掉。

我见过一个项目,因为scan_en没有被约束成ideal network,布线上出现信号完整性问题,后端ECO被迫重跑了两周。这种“跨工序”意识,是整体性学习里最重要的一环。DFT永远不是孤立的一步,你要想清楚你的输出会被谁用、怎么用。

5. 高频易错题实录:复位在测试模式下为什么要“改造”

5.1 先看一个常见故障表现

用真实场景来切入一个重点问题。假设你的模块在RTL里写的是异步复位:always @(posedge clk or negedge rst_n)。rst_n来自顶层端口,看起来干净得很。但真正做DFT时,经常遇到两种复位异常。

第一种,某些寄存器的复位信号不是直接使用全局rst_n,而是先经过了一个组合逻辑,比如rst_n && enable;或者用了一个同步寄存器的输出去复位其他触发器。第二种,复位网络在扫描链外是异步路径,而工具在shift阶段要求复位处于固定值,否则已经移入扫描链的数据会被复位逻辑清掉。这两种情况都会导致DFT仿真出现X态,或者pattern mismatch。热词里那句“dft插复位怎么改rtl”说的就是这类问题。

5.2 三步排查与RTL修改思路

处理这类问题,我的标准流程分三步。

第一步,在RTL层查每个寄存器的复位端来源,把“不干净的复位”全部标记出来。所谓不干净,包括复位信号来自逻辑组合、来自寄存器输出、或者经过了多级buffer之后又被其他信号干预。

第二步,在顶层建立测试复位方案。常见做法是引入一个scan_rst_n信号,在测试模式下由JTAG或专用测试引脚来驱动,RTL里做一个复位选择:test_mode拉高时,把全局复位信号替换为scan_rst_n;test_mode为低时保持功能复位。逻辑放在复位生成的最前端,不要散落到每个触发器的复位端。示意性的RTL写法大致是这样:

// 顶层测试复位选择 wire rst_n_effective = test_mode ? scan_rst_n : rst_n; // 所有触发器统一使用复位选择后的信号 always @(posedge clk or negedge rst_n_effective) begin if (!rst_n_effective) q <= 1'b0; else if (enable) q <= d; end

这里要说明一下,手写复位选择逻辑是一种可行的做法,但更稳健的工程方式,是在复位路径干净的前提下,把复位源通过set_dft_signal -type Reset指定给DFT工具,让工具自动插入测试复位逻辑。只有当复位源本身不干净,工具识别不了的时候,才需要手改RTL去“清理”复位路径,让工具能可靠地接管。

第三步,在DFT插入之后跑回归仿真,确认shift阶段所有触发器都处于可控复位值,capture阶段复位已经释放。改完RTL后还要重新跑DFT DRC,检查是不是又有组合逻辑插到了复位路径上。只要复位路径被组合逻辑污染,后面ATPG生成的pattern就会带着X态到处跑。

5.3 从一道复位题长出一串考点

这个复位问题,可以延伸出整整一串连锁考点:异步复位的恢复/移除时间检查对捕获时钟的影响、多功能复位和上电复位的区别、复位树上的单元要不要进扫描链、复位树怎么做时钟树综合、复位和JTAG TRST的配合。把这串考点设计成连续几天的自测题,比每天单独背一个概念要有用得多。

今天考“复位怎么改RTL”,明天考“异步复位恢复时间违例怎么查”,后天考“复位树要不要做CTS”。表面上是每天考一道题,实际是在训练一条完整的问题解决链路。DFT面试题里很喜欢这一套连环追问,你按这个方式学,等于提前把连环追问的答案备好了。

6. 用来检验学习效果的三个指标:从“会跑流程”到“能拍板”

6.1 指标一:拿到陌生设计,能快速给出DFT策略草图

一个很直观的检验方法:给你一个完全没见过的SoC,你能否在一小时内画出一张DFT设计策略草图。这张草图不需要详细到每个pin,但要能回答几个核心问题:扫描链的条数和长度怎么定?memory用不用BIST?JTAG端口怎么规划?测试模式下的时钟和复位怎么连接?如果画的时候脑子里全是糨糊,说明知识还没有形成整体认知;如果能快速列出方案,说明知识树已经成形。

这个测试我几乎每次带人都会用。前两周大多数人画不出来,或者画出来全是漏洞,比如漏了时钟域划分,忘了规划复位策略。坚持一个月每日自测之后,基本都能在一小时内画出一版像样的策略图。

6.2 指标二:能解读覆盖率数字背后的原因

第二个检验方式:看到一份覆盖率报告,98.5%的stuck-at coverage,你能否在几分钟内说清楚分子分母怎么定义、为什么这个设计到不了100%、哪些因素可能导致它下降。比如新加了BIST之后,某些逻辑被排除在测试之外;某些时钟门控单元在test mode下没法施加transition;某些信号因为跨时钟域没有同步器而无法可靠观察。

能把这个链路讲清楚才算真的理解覆盖率,不是看到数字高就开心、数字低就发愁。覆盖率是DFT工程师的核心语言,你要是连它都读不透,很难跟前后端的人争资源、讨余量。

6.3 指标三:能把复杂概念讲给隔壁前端听

最后一个指标,也是我在实际协作里最看重的:能否用大白话把DFT概念讲给前端工程师听。DFT工程师每天的日常就是和前端、后端、测试工程师来回对齐,满嘴黑话换不来理解,只会让协作变得痛苦。我常用一个类比解释scan shift:把芯片内部寄存器想象成一长串由扳道工控制的火车轨道,shift阶段就是往轨道上一节一节推车厢,等车厢排列好了,capture阶段再“轰”的一下检查每一节车厢有没有卡住。能讲出这种类比的工程师,说明不是在背定义,而是真正把机制想透了。

这三个指标你不需要一次全达标,但可以每个月对自己做一次评估。哪一项弱就补哪一项,这比单纯刷书有效率得多。

我自己的体会是,每天考一次最难的不是“考”,而是“每天坚持”。头两周的新鲜感很容易,两个月的持续才是真正的考验。我给自己定的硬性做法是固定在早晨,先开自测表,答完题再打开工具日志。出门前那15分钟看起来很紧,但坚持下来你会发现,以前那种“书到用时方恨少”的慌张感会慢慢消失。有个转岗同事后来跟我说,他终于理解了为什么要自己考自己,因为真正的项目不会考前划重点,它只会在你毫无防备的时候突然问一句:这个覆盖率为什么掉了两个点?如果你平时没有用自测养成随时提取的习惯,那一刻就只能干瞪眼。我觉得这句话,已经把整套方法最核心的价值说透了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 7:00:33

如何不被自媒体干扰,真正地独立思考

不论是刷小红书还是刷 X&#xff0c;我们总是能看到各种热点新闻&#xff1a;“小龙虾风靡全球”“ChatGPT 发布史上最强模型”“某某模型打败了所有竞争对手”……现在的信息传播非常快&#xff0c;一个新产品刚刚发布&#xff0c;可能还没来得及仔细了解它&#xff0c;互联网…

作者头像 李华
网站建设 2026/10/11 6:59:52

彻底去除ppt侧边栏每次自动出现的 office plus

直接卸载即可说明&#xff1a;来自知乎PPT现在旁边这个工具栏如何能取消掉啊&#xff1f; - Jesse的回答 - 知乎 https://www.zhihu.com/question/1941546378661692962/answer/1941674346016932502

作者头像 李华
网站建设 2026/10/11 6:58:24

斯坦福SNAP网络分析实战:从图数据加载到影响力传播

简介&#xff1a;斯坦福大学SNAP复杂网络分析是一套面向科研人员和工程师的大规模网络分析工具与平台&#xff0c;用于处理社交网络、信息网络、生物网络和技术网络等各类复杂网络数据&#xff0c;支持从数据导入、网络操作到社区检测、中心性测量等分析流程&#xff0c;适合网…

作者头像 李华
网站建设 2026/10/11 6:58:08

Python 数据处理入门:用 Pandas 快速处理 Excel 表格

摘要&#xff1a;平时做课程设计、社团统计或者比赛数据整理时&#xff0c;经常会遇到 Excel 表格数据量大、重复操作多的问题。本文介绍如何使用 Python 的 Pandas 库读取 Excel 文件&#xff0c;完成数据查看、筛选、分组统计、空值处理、去重、新增列和导出结果等常见操作&a…

作者头像 李华
网站建设 2026/10/11 6:57:52

企业管理系统定制开发实战:从业务流程建模到权限设计与交付验收

企业管理系统定制开发过程中&#xff0c;真正复杂的往往不是某个页面如何实现&#xff0c;而是如何将实际业务流程转化为稳定、可维护的软件系统。不少项目在初期看起来功能并不复杂&#xff0c;例如客户管理、订单管理、库存管理、审批流程和数据统计&#xff0c;但进入开发阶…

作者头像 李华