ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DFT架构设计从策略到落地:时钟规划、工具链协同与踩坑排查

DFT架构设计从策略到落地:时钟规划、工具链协同与踩坑排查 做DFT架构这些年我见过太多刚入行的工程师把精力全花在“跑通Flow”上却忽略了真正决定项目成败的架构规划。前阵子一个团队做200万门的SoCDFT脚本跑得飞起覆盖率报告也漂亮结果芯片回来后上了ATE才发现测试时间严重超标——一条量产线的测试机一天产出直接缩水测试成本凭空多出40%。这不是工具不行是架构设计阶段欠的债。这篇文章就是给准备用Synopsys和Mentor工具做DFT架构设计的新手看的。我会从策略制定讲到工具落地从时钟规划讲到踩坑排查把一条完整的路径梳理清楚。文章里不会只讲“怎么跑”更多会讲“为什么这么定”以及那些文档里不会写、只能在项目里摸爬滚打出来的经验。1. 为什么说DFT架构设计是在“算总账”1.1 新手最容易犯的第一个错误把DFT当成“跑Flow”新人入职DFT岗位最常见的路径是拿到前辈留下的脚本库照猫画虎地把DFT Compiler、Tessert Scan这些工具跑通生成网表和pattern然后觉得大功告成。但真正的DFT架构设计是在你敲下第一条命令之前就要做的那些判断。比如这个设计到底插不插压缩压缩比定多少扫描链放在block级还是top级时钟在capture模式下从哪里来异步复位在shift模式下怎么处理这些决定一旦做错后面跑得越顺损失越隐蔽。因为覆盖率数字可能仍然显示99%但测试时间翻倍、诊断能力下降、良率分析困难这些都是覆盖率报告上看不出来的。我自己带过的一个项目就是血泪教训。当时为了赶进度直接沿用了上一颗芯片的DFT脚本结果新芯片多了一个高速接口测试时钟规划完全没跟上。等网表冻结、流片回来才发现at-speed测试覆盖率差得离谱回炉了一版设计才解决。DFT架构不是可以“先这样后面再说”的事它是在算总账——现在省下的思考时间会在后面的环节连本带利还回去。1.2 五个必须一起权衡的维度做DFT架构设计本质上是在五个维度之间找平衡点面积开销扫描复用逻辑、压缩解压缩逻辑、OCC片上时钟控制器、MemoryBIST控制器这些都是实打实的芯片面积。压缩比越高压缩逻辑越复杂面积代价越大。测试时间pattern数和扫描链长度的函数关系量产阶段一颗芯片的测试时间差几秒放大到几百万颗芯片就是巨额成本差异。故障覆盖率stuck-at和transitionat-speed覆盖率的双重目标如何定车规和消费级产品的要求完全不同。调试与诊断便捷性压缩扫描会让失效定位变得更困难。测试fail了是扫描链坏了还是逻辑坏了压缩模式下几百条链共用一个观察输出诊断复杂度直线上升。验证与实现成本DFT逻辑本身也需要功能验证后端CTS要处理扫描时钟树的平衡这些都会消耗人力和资源。这五个维度互相牵制不存在一个“最优解”只有“当前项目条件下最合适的解”。比如消费级芯片对成本极其敏感那你可能要把测试时间和面积控得更紧而车规芯片对覆盖率有强制要求那该花的面积就得花。1.3 RTL冻结前必须定下来的事DFT架构规划必须前置。按照我的经验下面这几件事在RTL freeze之前就要给出明确方案测试时钟策略用外部低速时钟做capture还是用OCC配合PLL做at-speed测试每一个时钟域怎么处理复位策略做全异步复位还是同步复位测试模式下复位如何置位、如何释放扫描压缩方案用Synopsys的EDT还是Mentor的压缩技术目标压缩比是多少存储器测试方案哪些存储器走MemoryBIST哪些走扫描链直接测试JTAG指令集与边界扫描策略TAP接口怎么设计需要哪些指令是否要支持EXTEST/INTEST。测试功耗约束测试模式下的功耗怎么管要不要做分组shift、时钟门控。这些决策应该整理成一份DFT guideline发给前端设计、后端物理实现和验证团队。里面要写明哪些是红线——比如“所有存储器必须BIST不允许waive”“所有时钟域必须支持at-speed capture”——让每个人都知道边界在哪里。很多项目到后期才发现DFT问题,基本都是因为这份guideline缺失或者写得太笼统。2. Synopsys与Mentor双工具链不是谁强谁弱而是各管一段2.1 Synopsys阵营DFTMAX、TetraMAX、SpyGlass DFT各管什么Synopsys的工具链在国内DFT圈子里占有率很高尤其是在数字前端流程整合度上做得比较顺滑。我实际项目中用过的主打工具大致分三类DFTMAX这是Synopsys做扫描插入和压缩的主流工具。它的核心是基于EDTEmbedded Deterministic Test技术的压缩扫描架构。DFTMAX的有意思之处在于它可以和Design Compiler的物理综合流程联动压缩逻辑和功能逻辑一起做面积、时序优化综合出来的网表更紧凑后续布线阶段的意外也更少。TetraMAXATPG引擎负责在扫描网表基础上生成测试向量。新一代TetraMAX支持stuck-at、transition、path-delay、IDDQ等多种模式实际应用中不同模式要设置的约束差别很大。比如transition模式需要额外定义launch和capture时钟沿的关系这块如果不理解生成的向量在仿真阶段极容易出现大量timing violation。SpyGlass DFTRTL阶段的可测性检查工具。它的价值在于把问题提前暴露——未复位的flip-flop、门控时钟、组合逻辑环、总线浮空等这些在RTL级改起来成本很低到了网表阶段再返工就伤筋动骨了。另外别忘了VCS——Synopsys的仿真器在DFT流程里也扮演关键角色。生成的pattern要拿VCS跑一遍仿真确认时序和功能都对才能交到ATE上去。很多新手忽略这一步结果在ATE上跑出百万级别的mismatch其实是pattern仿真没过。2.2 Mentor阵营Tessent系列的核心组件Mentor的DFT工具现在归在Siemens EDA旗下但整个行业还是习惯叫“Mentor的Tessent”。Tessent系列是一个完整的DFT解决方案家族我用下来比较关键的几个组件是Tessent Scan做扫描链插入和DFT规则检查。它在层次化设计里表现很出色——尤其在处理多时钟域、多电源域交叉的复杂设计时Tessent Scan的DRC检查粒度更细报错提示也更贴近用户的真实意图。Tessent Shell统一的脚本和工具环境。好处是你在Shell里可以用一套语言层次去配置各种Tessent工具而不需要切换一堆不同语法风格的命令行工具。对项目的自动化集成来说这点很友好。Tessent OCC片上时钟控制器生成工具。OCC是at-speed测试的关键模块它负责在capture阶段提供精确的单脉冲或双脉冲快时钟。Tessent OCC的配置方式相当灵活可以针对不同时钟域设置不同的capture时钟方案。Tessent MemoryBIST / LogicBIST存储器和逻辑内建自测试方案。车规和工控领域尤其看重这组工具因为在线测试in-system test的需求通常都靠BIST来满足。2.3 混用模式下两条工具链如何交接行业里真正做复杂芯片的公司往往不会“一条道走到黑”。我见过不少项目是Synopsys和Mentor混着用的比如前端检查用SpyGlass DFT扫描链插入和压缩用DFTMAXATPG用TetraMAX但片上时钟控制又用Tessent OCC。这完全可行关键是要把数据交接格式梳理清楚。下面这张表是我根据自己的项目经验总结的典型分工方式不同公司会有差异但可以做参考设计阶段可选工具组合输出物交接内容RTL可测性检查SpyGlass DFT / Tessent DFT检查报告、violation清单需要修复的可测性问题扫描插入与压缩DFTMAX / Tessent Scan扫描网表、扫描链文件链信息、DFT约束、SDC片上时钟控制Tessent OCC / DFTMAX内建OCCOCC模块网表OCC配置、CDC约束ATPG向量生成TetraMAX / Tessent ATPGSTIL/WGL测试向量覆盖率报告、时序约束向量仿真验证VCS / Xcellium仿真日志、波形pass/fail结果诊断分析Tessent Diagnosis / Synopsys Diagnosis失效定位报告良率分析所需数据最关键的交接文件是STILStandard Test Interface Language和WGL。STIL是IEEE标准格式Synopsys和Mentor的ATPG工具都能读能写它相当于把测试向量信息用中性格式描述出来不同工具间转换时不容易丢信息。实际项目中还有一点要注意不要直接把STIL搬给ATE供应商就完事通常还需要在ATE环境下做一次波形格式转换这一步各家ATE厂商都有自己的格式要提前跟测试厂确认。另一个容易被忽视的交接物是DFT约束文件。扫描链信息、OCC配置、测试模式下的SDC约束这些都要在网表签核后一并交给后端。后端在做CTS时要用scan clock的约束来保证所有触发器在shift阶段能同步移位如果DFT约束给得不清不楚后端就只能自己猜最后出来的时钟树在DFT模式下一塌糊涂。2.4 环境准备Linux环境下最容易忽视的依赖和变量聊到工具不得不提环境问题。热词里能看到“linux中安装synopsys出现的问题 tcl、tk”说明不少人开局就卡在环境搭建上。根据我的经验以下几点最值得留意前提是你已经通过公司IT或官方渠道获取了合法授权Linux发行版与工具版本匹配Synopsys、Mentor的EDA工具对glibc版本有明确要求。比较新的EDA版本在老旧发行版上跑不起来一般建议按官方release note校准操作系统版本。tcl/tk版本冲突很多Synopsys图形界面强依赖特定tcl/tk版本系统自带的tcl/tk与工具捆绑版本冲突时GUI可能打不开或图标错乱。解决思路是把它依赖的tcl/tk路径设到工具安装目录下让工具优先加载自己的版本。LSBLinux Standard Base缺失早期Synopsys工具在CentOS/RHEL上启动报错的常见原因就是lsb包没装。启动命令报出类似“/usr/bin/lsb_release: No such file or directory”就是典型的LSB缺失问题。License环境变量Synopsys工具通过SNPSLMD_LICENSE_FILE或LM_LICENSE_FILE定位license文件或license服务器Mentor的工具则有自己的MGLS_LICENSE_FILE。环境变量设错工具启动会直接报license错误。很多新手以为license坏了其实只是变量写错了路径。说白了环境问题占了DFT新手最初两周工作量的很大比例。遇到这类问题优先翻工具的install.log和启动时的stderr输出比无头绪地在论坛翻帖要高效得多。3. 一个完整DFT架构方案是怎么从无到有落地的3.1 先盘点设计用四连问把测试需求挖出来拿到一个新项目不要急着开工具。先把设计吃透我从实践中总结了一套“四连问”盘点法第一个问题这颗芯片有多少触发器、多少存储器、多少IP寄存器数量和布局决定了扫描链的条数和长度存储器的容量和数量决定了要不要上BIST。可以在综合后的网表上做一次粗略统计也可以用设计规格书上的数据。目标是把设计规模映射到一个大致量级——这决定了DFT架构的复杂度。第二个问题有哪些时钟域它们之间有没有跨时钟域路径这决定了扫描链怎么分组、OCC该怎么规划。跨时钟域路径在ATPG里如果约束不好会产生一堆假fail。通常的处理方式是设置CDC约束让跨时钟域路径不参与capture。第三个问题芯片对外有哪些接口JTAG有没有预留边界扫描需要做到什么程度这决定了测试访问机制的规划。如果芯片有A×I、DDR这类高速接口边界测试策略又不一样。第四个问题芯片用在什么场景消费、工业还是车规这决定了覆盖率目标和可靠性要求。消费级通常stuck-at到95%以上就可以商量车规往往要求98%甚至99%且对transition覆盖率也有硬指标。把这四个问题回答清楚DFT架构的轮廓基本就出来了。3.2 测试策略与覆盖率目标怎么定测试策略的起点是覆盖率目标。数字上不能拍脑袋要结合工艺节点和市场定位来定Stuck-at覆盖率传统上行业普遍要求超过97%车规和军工往往会到99%以上。FinFET时代stuck-at覆盖率的达成难度略有下降因为很多逻辑相对容易测试但这不代表测试时间的压力会降低。Transitionat-speed覆盖率随着工艺推进到7nm、5nm时序故障已经成为主导失效模式transition覆盖率越来越被看重。一般项目要求在85%到95%之间车规的某些安全等级甚至会要求95%以上。但覆盖率不是唯一KPI。测试成本同样重要——在单位晶圆成本里测试费用占比逐年上升这也是压缩技术和BIST如今几乎成了标配的原因。有些设计为了追求极高的覆盖率把transition pattern数量堆到十几万条在量产线上根本跑不完这是典型的“为了指标而指标”。做法上我倾向于把需求分档对逻辑密集、可靠性要求高的模块提高覆盖率目标对IO逻辑、次要控制逻辑可以适当放低要求。要在“覆盖率好看”和“测试真的能跑完”之间找一个平衡。3.3 扫描链、时钟、复位的设计顺序与关键约束这几个部分在设计的时候有固定的先后顺序因为它们是层层递进的关系。第一步确定扫描架构的层次。小设计可以在top级直接flatten扫描大规模SoC几乎一定走层次化——block级做好DFT再在top级拼接扫描链。层次化有个额外好处每个block可以并行做DFT实现缩短工期。但代价是top级的链拼接、跨block时序、以及各block之间的测试数据分配都需要额外设计。第二步规划时钟方案。shift模式下扫描时钟通常由ATE的时钟引脚直接驱动这时所有触发器都在移位时钟树必须能覆盖到所有扫描单元capture模式下如果要做at-speed测试就需要OCC从PLL取快时钟并且精确控制脉冲数。OCC的配置寄存器通常挂在JTAG链上测试程序里要先配置好OCC再进入capture流程。第三步规划复位方案。最稳妥的做法是测试模式下把所有异步复位信号拉成恒定无效电平让flip-flop在shift和capture阶段都处于使能采样状态。因为异步复位若在shift模式下被随机触发会导致移位数据被污染chain test直接fail。这需要在DFT约束里做case-analysis告诉工具“这个信号在测试模式下是常值的”。最后scan_enable信号本身也要当作“准时钟”来对待——它在shift阶段每周期翻转一次时序要求非常严格后端CTS时通常需要给它做专门的buffer tree并设置类似时钟的约束。我见过很多chain test fail最后查来查去是scan_enable的布线延迟太大、到达各触发器的skew不可接受导致的。3.4 规则检查、约束交接与后端必给的东西DFT实现不是“插完扫描链就完事”它需要一个完整的闭环验证RTL阶段先用SpyGlass DFT或Tessent DFT做可测性检查确认RTL里没有明显DFT障碍比如未复位的flip-flop、门控时钟、组合环等。这个阶段修复问题成本最低。网表阶段综合完成后用DFTMAX或Tessent Scan做扫描插入之后立即跑DFT DRC。DRC会列出不可扫描的单元、不允许的时钟门控、违背DFT规则的跨时钟路径等这个报告要逐条看不要无脑waive。ATPG验证用TetraMAX或Tessent ATPG生成pattern然后交回VCS做仿真验证。这一步会发现很多DRC检查不出来问题比如X态传播、OCC配置错误、宏模型不匹配等。整个流程走完要整理一份交接清单给后端工程师我在项目里通常包含这些内容带DFT逻辑的扫描网表扫描链文件chain file标注每条链的scan_in/scan_out端口DFT约束文件时钟、复位、scan_enable、test mode信号的约束声明OCC配置说明测试模式下的SDC约束需要后端特殊处理的引脚列表比如测试时钟脚、测试模式脚。这些文件不全后端物理实现就会很痛苦。我遇到过最棘手的情况是block级DFT约束没声明OCC的输入时钟来源后端CTS把测试时钟树按功能时钟树做了结果流片后OCC行为完全不是预想的那样整个at-speed测试成了摆设。4. 时钟、功耗、测试时间架构设计里最要算清楚的三笔账4.1 at-speed测试绕不开OCC为什么慢速测试不够不少新手会有疑问功能仿真都过了为什么要做at-speed测试答案是芯片上的真实故障既包括静态的逻辑错误stuck-at也包括动态的时序错误transition即信号跳变无法在规定时间内稳定下来。慢速测试只能暴露stuck-at问题对时序故障无能为力。而随着工艺尺度缩小时序故障在整体失效占比中越来越高。为了执行at-speed测试capture阶段必须给触发器提供一个符合功能时序的高频时钟。PLL在测试模式下锁相需要时间而且ATE直接馈送高频时钟又受限于测试机台通道和波形质量于是业界普遍采用OCC方案在测试模式下shift阶段用ATE的低速时钟capture阶段由OCC选择从PLL引出的高速时钟精确输出一个或两个时钟脉冲完成launch和capture动作。那架构上要决定什么核心是哪些时钟域需要OCCOCC的时钟源是哪一级分频OCC配置寄存器怎么接入JTAGPLL在测试模式下怎么保证稳定输出。这些决定直接影响at-speed范围。如果有一个时钟域没加OCC那这个域里的transition故障就测不了覆盖率多高都有水分。4.2 测试功耗shift模式的toggle rate是功能模式的几十倍这个坑我在项目里见过太多次了。功能模式下芯片内部寄存器的平均翻转率通常只有20%到40%但测试模式下扫描链移位意味着受测链上的触发器几乎每周期都在翻转局部toggle rate轻松超过200%、甚至400%。动态功耗跟翻转率成正比所以测试模式下的瞬时功耗可能是正常工作的好几倍带来两个直接后果IR drop电压降超标局部区域供电电压被拉低组合逻辑延迟变大capture阶段本来能满足的时序就满足不了出现大面积假fail。供电网络健壮性不足芯片在量产测试时的功耗行为跟功能模式差异很大如果没在物理设计阶段考虑测试模式的功耗约束就很麻烦。架构层面的缓解手段包括把扫描链分组、分时shift避免所有链在同一时刻翻转在shift路径上插时钟门控利用工具提供的power-aware DFT功能让capture阶段自动屏蔽部分链。物理设计层面需要给测试模式留足够的power pin和power stripe后端要做包含shift和capture场景的IR drop分析。我经历过一个案例芯片设计末期才发现某大模块在shift模式下IR drop超标严重不得不在封装上多加了几十个电源引脚成本和项目进度都受到很大影响。这类问题在DFT架构阶段算清功耗账完全可以避免。4.3 一个具体的pattern数与测试时间估算方法测试时间估算是DFT架构设计里最容易被新手跳过、却又最影响量产成本的环节。这里给一套可以直接套用的估算思路。假设一个设计有200万个寄存器你要做400条扫描链。如果每条链长度尽量均匀那么每条链大约有5000个触发器。再假设ATPG生成的stuck-at pattern数是4000条测试频率是50MHz。那么估算如下每个pattern的shift周期数≈最长扫描链长度5000 capture周期数按2到4个计算每个pattern所需时间 (5000 2) / 50MHz ≈ 0.1ms总测试时间 4000 × 0.1ms ≈ 0.4秒。如果测试频率降低到20MHz总时间就会变成1秒。看起来单个芯片多花0.6秒不痛不痒但一条量产线一个shift要测几十万颗芯片一台测试机一天就少了很多产出。测试时间就是金钱这话在半导体行业从来不过时。测试数据量也可以粗算4000个pattern × 400条链 × 5000级 ≈ 80亿bit8Gbit。ATE的存储深度是昂贵的资源。这就要靠压缩技术来解决。再算压缩的账采用EDT这类压缩方案后外部scan pin从400条降到40条内部仍维持400条链。每个pattern的外部数据量降为原来的1/10ATE存储需求从8Gbit降到约0.8Gbit。但要注意内部链的shift周期仍然是5000级所以测试时间并不会因为压缩而自动缩短。想缩短测试时间核心思路是增加内部链的数量、降低每条链的长度——比如把内部链做到2000条、每条2500级shift周期直接减半。这也是为什么压缩方案配合更多的内部短链使用收益才最明显。这个逻辑理清后压缩比、链数量、pattern数之间的关系就自然清楚了。建议每个项目在做DFT架构评审时都按这套方法把测试时间和数据量估算表做出来发给项目经理和测试厂过目。5. 复杂SoC里的进阶规划shared bus dft、边界扫描与BIST协同5.1 shared bus dft的适用场景与关键风险复杂SoC里往往有多个CPU、DSP、GPU以及各种IP模块。如果每个模块的DFT端口都要单独引出测试引脚数量会爆炸产品封装和ATE通道都承受不起。于是就有了共享总线DFT方案shared bus dft把多个模块的测试接口挂到同一条测试总线上分时访问、共享测试引脚。看起来是省引脚的好思路实际做起来有三个关键风险总线仲裁在测试模式下失效如果仲裁逻辑在shift模式下也被扫描链覆盖它的行为不受控多个模块可能同时驱动测试总线产生总线竞争。解决办法是设计一个test_mode专用的仲裁信号把总线锁定到固定主设备上。未选中模块的输出悬空某个模块没被选中时它的三态输出如果悬空为高阻总线上会出现X态。X态一旦被采样进入压缩逻辑后续的签名全被污染。这是shared bus dft与压缩扫描叠加时最让人头疼的问题。隔离逻辑的成本每个挂到共享总线的模块几乎都需要加隔离单元isolation cell确保模块不活动时总线状态确定。这些隔离单元本身也需要被扫描覆盖又增加了一点面积开销。如果项目里决定上shared bus dft我会建议提前跟后端物理设计团队打好招呼因为测试总线的布线和时序约束与传统功能总线差异很大最好在早期就纳入CTS和布线规划。5.2 JTAG指令集与测试访问机制TAM怎么规划JTAGIEEE 1149.1在DFT架构里的地位相当于整栋房子的门禁系统。所有测试功能——扫描测试、MemoryBIST触发、OCC配置、功耗管理——都要通过JTAG这个口来指挥。规划JTAG时几个核心决策点TAP引脚TCK、TMS、TDI、TDO这四个端口是基础直接用芯片引脚引出。某些设计为了节省引脚会把TDI和TDO串在菊花链daisy chain里多个TAP共享一路。但菊花链的问题是一个TAP坏了后面所有TAP都失联诊断难度大增。指令寄存器除标准指令BYPASS、SAMPLE/PRELOAD、EXTEST、INTEST外通常还要加入自定义指令比如“触发MemoryBIST”“读取OCC状态”“进入某个模块的扫描测试模式”。这些指令码要尽早定义好因为芯片验证和测试程序开发都依赖它。TAMTest Access Mechanism广义的测试访问机制不只是JTAG还包括测试数据从ATE到被测逻辑的整个搬运路径。SoC里多核、多IP的设计要决定TAM宽度、TAM端口怎么接到各个子模块。比如某些大芯片会同时预留连到外部的高位宽TAM口和JTAG串行口前者用来快速搬移大容量测试数据后者用来做控制。JTAG指令集和TAM规划在DFT架构阶段就要变成可执行的spec文档它们会影响芯片验证环境、测试程序、ATE模板等多个环节。如果等芯片都快流片了才想着加指令返工成本巨大。5.3 MemoryBIST与LogicBIST什么场景下值得做存储器测试是DFT架构里绕不开的决策点。大容量SRAM、TCAM、eFuse这些存储单元如果靠外部ATPG来测pattern会极其庞大而且没法有效覆盖存储单元的时序故障。所以合理的做法是让存储器内部自测——MemoryBIST。实践中我一般这样判断容量超过256Kbit的大块SRAM基本都会上BIST因为ATPG测试成本太高几百bit的寄存器堆和分布式小存储直接走扫描链即可没必要为它们专门加BIST控制器有特殊端口或特殊时序的存储器高密度TCAM等BIST几乎是唯一选择车规、工控里的上电自检POST需求MemoryBIST往往也是标配因为它可以在系统里随时运行。BIST算法上March C-算是业界最常见的存储测试算法之一能覆盖大部分存储单元故障模式Tessent MemoryBIST还支持可编程算法你可以针对特定存储器的失效模型做定制。测试完成后BIST结果通过JTAG接口或专用状态寄存器读出便于在ATE上判断pass/fail。LogicBIST则是另一个层面的东西它用LFSR之类的伪随机向量生成逻辑在片内实现测试不需要外部ATE参与。这类方案适合在线测试场景比如汽车启动时做系统自检。但LogicBIST的覆盖率通常远低于确定性ATPG故障诊断也很困难所以它更像是对系统可用性的一种补充而不是替代量产测试的手段。6. 实测踩坑五个最耗debug时间的DFT问题与排查链路6.1 坑一PLL在capture阶段不产生时钟at-speed全部失效现象芯片或仿真环境中stuck-at测试全部通过但transitionat-speed测试覆盖率极低或者所有pattern全部fail。打开波形一看capture阶段该出现的时钟脉冲根本没出现。排查链路先确认stuck-at是好的说明扫描链和移位数据路径本身没问题检查OCC配置寄存器在测试启动序列里有没有正确写入很多OCC配置寄存器默认值是“关闭”必须在测试程序里先通过JTAG配置好检查PLL的测试模式PLL在功能模式下靠外部晶振锁定在DFT模式下如果没把PLL切到测试模式、或者测试模式下PLL的反馈回路没有闭合它根本不会输出时钟检查时钟选择器OCC的时钟选择信号是否被额外的测试逻辑反向或mask掉了。修复方案在DFT约束里强制约束PLL测试模式信号确保测试模式下PLL输出稳定OCC配置寄存器的复位值设置为“使能”减少对初始化顺序的依赖在仿真里加断言检查capture时钟是否到来。这个坑的根源在于PLL的验证场景是功能模式DFT模式下的PLL行为很容易被忽略。做架构规划时要在DFT guideline里明确“所有OCC时钟源都必须仿真验证过”。6.2 坑二scan enable信号被树形时钟门控chain test时好时坏现象block级chain test正常top级chain test时好时坏而且对温度和电压敏感。有时候同一个pattern在实验室fail在ATE上又pass很不稳定。排查链路用DFT DRC检查scan_enable信号路径重点关注它是否穿过组合逻辑、是否被时钟门控单元当成数据信号使用查看scan_enable的时序报告确认它到各个触发器的skew在网表上追踪scan_enable的扇出搜索是否存在gating cell。根因scan_enable在shift阶段每周期都要翻转它本质上像时钟信号一样严格。但设计者常常只把它当作普通使能信号CTS时没有特殊对待。如果它在路径上经过一个时钟门控单元那么门控单元功耗和时序行为会干扰scan_enable的翻转到达时间导致部分触发器还在旧值、部分已经切换链测试自然不稳定。修复方案scan_enable在测试模式下必须从顶层pad直连到所有扫描触发器中间只允许buffer树在后端CTS时把它当作“准时钟”处理做平衡用DFT约束把它声明为ideal signal禁止综合工具优化它的路径。这套处理做完问题基本就消失了。6.3 坑三X态进入压缩器pattern签名大面积污染现象覆盖率报告上看起来一切正常但pattern仿真一跑压缩模式下mismatch数量成千上万。更烦人的是这些mismatch并不稳定换一个随机种子就变了。排查链路先确认不压缩模式下pattern是不是全pass。如果不压缩也fail那问题不在压缩如果不压缩pass、压缩fail基本可以锁定是X态通过压缩网络扩散了用仿真器做X态溯源定位X态最初产生的位置。常见来源包括未初始化的存储器输出、三态总线悬空、模拟宏模型输出在未上电时未定义、某些在测试模式下被时钟门控的寄存器检查压缩器是否有mask机制以及mask寄存器是否配置正确。修复方案在RTL阶段就把浮空总线、未稳定存储器输出修掉这是最省事的如果必须保留X态可以在压缩器前加mask逻辑把已知的X源位置在pattern里mask掉还可以在测试程序里对未使用输入pin加约束、对三态总线做上拉或下拉处理。经验上压缩方案设计阶段就要逐个模块审查X态风控点不要等到pattern仿真出问题再来查那时候定位成本高得多。6.4 坑四层次化扫描链拼接错序顶层chain反复fail现象底层block单独做chain test全部通过一旦拼到top级某些链的测试就开始fail而且fail的链并不每次都一样像是“随机抽奖”。排查链路在top网表上trace具体某条fail链的完整路径从scan_in到scan_out逐个看对比block级和top级的链映射文件确认拼接顺序是否一致检查跨block的链路径上有没有额外的组合逻辑、缓冲器、电平转换器检查跨时钟域的链段时序确认移位时钟是否同一个时钟源。根因多半是顶层拼接block的scan_in、scan_out时把信号接错了位序或者在链上多插了不属于任何扫描单元的组合逻辑。这种问题在flow里跑的时候不会报错只有chain test才会暴露。修复方案层次化DFT的顶层拼接脚本里要有“链一致性检查”——在CHAIN_TEST后单独拉出每一条链的观察点和block级结果对比。另外block级和top级之间最好有固定命名的扫描端口规范从根上减少人为接错。这个小习惯能省很多debug时间。6.5 坑五异步复位在shift模式下“调皮”初始化竞争现象pattern仿真中某些flip-flop在仿真波形上出现X态但覆盖率还好或者某些pattern在低电压下fail高电压下pass表现神经质。排查链路找到X态源头确认是哪类寄存器产生的查看它的复位端连接是否存在异步复位在测试模式下有翻转窗口检查DFT规则报告查看是否这些寄存器被标记为“unscanned”或“reset via async pin”。根因异步复位信号在shift模式如果发生毛刺或缓慢翻转会不断复位触发器导致扫描链上的数据永远不正确。这类问题在仿真里表现为X态在ATE上则表现为时好时坏的随机fail。修复方案测试模式下把所有异步复位信号拉成恒定无效电平并在DFT约束里设置case-analysis告诉工具这些信号在测试模式下的固定值对必须保留异步复位的特殊寄存器采用专门的复位树测试保证在测试模式下只由测试时钟精确控制复位时序。还要把这类寄存器的waive理由记录清楚避免后面的人重复踩坑。最后再分享两个实操习惯第一每次开DFT架构评审会时我都会带一张A4纸的checklist——时钟方案、复位方案、扫描链全局结构、OCC配置、BIST触发方式、JTAG指令列表、测试功耗预估、覆盖率目标、ATE测试时间估算逐项打勾。别小看这张纸它能让评审会从“凭感觉讨论”变成“对着清单逐条过”大部分隐患在这一关就能暴露出来。第二DFT规则检查出的waiver明细一定要记录到项目wiki或者文档里写清楚waive的原因、涉及哪个模块、是谁在什么时候确认的。三个月后回过头来查问题翻wiki比翻工具log高效太多。这个习惯一开始坚持起来麻烦但扛过一次项目复盘之后你会感激自己当时的记录。工具只是执行者DFT架构的判断力是设计早期那几次review里练出来的。没有捷径但少走弯路就是最快的路。
返回列表