创建门户网站的方案全国十大网络公司
创建门户网站的方案,全国十大网络公司,一个网站费用,wordpress文章展示模板1. 异步复位触发器#xff1a;DFT工程师的“老朋友”与“麻烦制造者”
做芯片测试#xff08;DFT#xff09;的朋友们#xff0c;对异步复位触发器#xff08;Async Reset Flip-Flop#xff09;一定不陌生。它就像我们身边一位能力很强但脾气有点古怪的老同事——在功能模…1. 异步复位触发器DFT工程师的“老朋友”与“麻烦制造者”做芯片测试DFT的朋友们对异步复位触发器Async Reset Flip-Flop一定不陌生。它就像我们身边一位能力很强但脾气有点古怪的老同事——在功能模式下它能干净利落地处理来自外部的异步复位信号确保系统在异常时能迅速回到已知状态是设计稳定性的重要保障。然而一旦我们切换到测试模式准备进行扫描链Scan Chain测试时这位“老同事”就可能摇身一变成为时序问题的“麻烦制造者”。我刚开始接触复杂芯片的DFT设计时就曾在这里栽过跟头。当时项目里用了一个两级触发器来做异步复位信号的同步化处理目的是防止复位信号释放时出现亚稳态。在功能仿真里一切完美但当我们跑完Design Compiler的insert_dft命令生成测试模式后ATPG工具却报出了一堆令人头疼的时序违规。问题就出在这两个复位同步触发器上它们被自动插入了扫描链中。在扫描移位Shift模式下扫描使能Scan Enable信号和扫描时钟Scan Clock会与原本的复位同步时序路径产生冲突导致建立时间Setup Time和保持时间Hold Time无法满足。简单来说异步复位触发器在扫描链里就像一个不按测试剧本演戏的演员。测试模式希望所有触发器都整齐划一地作为移位寄存器工作但复位同步触发器心里还惦记着它的“本职工作”——处理复位信号。这种“一心二用”会导致测试时钟域和功能时钟域、测试复位和功能复位之间产生复杂的时序交互轻则影响测试覆盖率重则导致测试结果根本无法预测芯片良率诊断变成一笔糊涂账。所以一个在业界被广泛采纳的最佳实践就是将用于复位同步的异步复位触发器从扫描链中隔离出来。这不是说它们不重要恰恰相反正是因为它们对系统稳定性至关重要我们才需要确保其在测试模式下不受干扰同时也不干扰其他部分的测试。这篇文章我就结合自己踩过的坑和总结的经验详细聊聊如何从设计阶段就规划好到使用Design Compiler工具链实现隔离再到最后分析测试结果的完整实践。2. 为什么必须隔离深入时序冲突的根源要理解隔离的必要性我们得先看看异步复位触发器在扫描链中会引发哪些具体问题。这不仅仅是理论推演而是实实在在会影响测试向量生成和芯片良率的工程挑战。2.1 扫描模式下的信号冲突在正常的扫描测试中扫描链的工作模式分为两种状态移位Shift和捕获Capture。移位模式Scan Enable为高所有扫描触发器连接成一个大的移位寄存器。数据从Scan-In端口灌入从Scan-Out端口移出。此时触发器的功能数据输入D是被屏蔽的。捕获模式Scan Enable为低触发器恢复其正常功能在捕获时钟沿将功能数据输入D端的值锁存这个值随后又可以在下一个移位周期被扫描输出观察。现在考虑一个典型的异步复位同步化电路两个级联的触发器用时钟对异步复位输入进行同步产生一个干净的、与时钟同步的内部复位信号。在功能模式下这个电路只关心Clock和异步Reset输入。但当它被纳入扫描链后在移位模式下它的Scan-In端口会接收来自前一级扫描触发器的数据而其Q输出则会驱动到下一级。问题来了这个触发器的扫描数据路径SI-Q和它的复位同步功能路径异步Reset-Q在物理上是同一个触发器。在移位操作时如果异步复位引脚假设是低有效恰好被测试仪ATE驱动到了有效状态比如低电平那么这个触发器会被强制复位导致正在移位的测试数据被破坏。更复杂的是扫描使能SE信号的时序非常关键它必须在时钟有效沿之前稳定。如果复位同步触发器的SE信号时序与复位释放时序纠缠在一起会极大增加时序收敛的难度。2.2 对测试覆盖率和故障模型的影响ATPG工具如Synopsys TetraMAX基于故障模型如Stuck-at, Transition Delay来生成测试向量。工具需要能够控制Controllability和观察Observability电路中的每一个节点。如果复位同步触发器在扫描链内ATPG工具会认为它可以像普通触发器一样通过扫描链被设置成任意值控制并且其状态可以被扫描输出观察。但事实上在捕获周期这个触发器的值很大程度上由异步复位引脚的状态决定工具对其的“控制”是虚假的。这会导致两个坏结果测试覆盖率虚高工具计算出的故障覆盖率可能很高因为它误以为能控制/观察那些复位触发器相关的逻辑。但实际上这些逻辑在测试模式下的行为是不可预测的真实的缺陷检测能力大打折扣。测试向量生成低效甚至失败工具可能会花费大量时间去尝试生成控制复位触发器状态的向量但由于信号冲突这些向量在物理上无法实现或者仿真结果与预期不符导致向量生成过程报错或停滞。我在一个40nm的项目中就遇到过因为没做隔离ATPG工具反复尝试对复位同步路径生成测试模式始终无法收敛最后报出大量“无法控制”的警告浪费了好几天时间排查最终回头加上了dont_touch约束才解决。2.3 增加测试结果分析的复杂度即使勉强生成了测试向量在ATE上进行测试时如果包含复位同步触发器的扫描链测试失败诊断Diagnosis工作会变得极其困难。因为失败点可能位于复位同步触发器本身也可能是其下游被它控制的逻辑。由于复位信号在测试模式下的行为与功能模式不同工程师需要花费额外精力去区分这到底是制造缺陷如晶体管卡顿还是我们测试方法本身引入的“假性”失败隔离这些触发器相当于在测试逻辑和功能关键逻辑之间划清了一条界线使得故障定位更加清晰、直接。3. 从RTL到网表实现隔离的设计策略知道了“为什么”接下来就是“怎么做”。隔离策略需要贯穿从RTL编码到逻辑综合的整个前端设计流程。3.1 RTL编码阶段的明确标识最好的开始是在编写RTL代码时就对那些专门用于异步复位同步的触发器进行“标记”。这相当于给后续的DFT工具一个明确的指令“这些家伙是特殊的别动它们。”一种常见且有效的方法是使用综合编译指令Synthesis Pragmas。以SystemVerilog/Verilog为例我们可以这样写module reset_sync ( input logic clk, input logic async_nreset, // 异步低有效复位 output logic sync_nreset // 同步后的低有效复位 ); // 使用 synopsys dc_tcl_script_begin/end 嵌入Tcl指令告诉Design Compiler对这些单元保持不动 // synopsys dc_tcl_script_begin // set_dont_touch [get_cells RESET_SYNC_FF*] true // synopsys dc_tcl_script_end logic sync_mid; // 第一级同步触发器 DFCNQ1 RESET_SYNC_FF1 ( // 假设DFCNQ1是带异步复位的D触发器 .D (1b1), .Q (sync_mid), .CLK (clk), .RN (async_nreset) // 异步复位引脚 ); // 第二级同步触发器 DFCNQ1 RESET_SYNC_FF2 ( .D (sync_mid), .Q (sync_nreset), .CLK (clk), .RN (async_nreset) ); endmodule关键点在于注释中的synopsys dc_tcl_script_begin/end。这不是普通的注释Design Compiler在读取RTL时会识别它并执行其中的Tcl命令。set_dont_touch命令就是告诉工具在后续的综合优化、扫描链插入等所有步骤中都不要改变RESET_SYNC_FF1和RESET_SYNC_FF2这两个单元的网表结构或类型。为什么要用通配符*在实际设计中一个模块里可能有多个复位同步器实例。使用RESET_SYNC_FF*可以一次性保护所有名字以RESET_SYNC_FF开头的单元避免遗漏。当然你也可以根据设计规范使用更精确的集合定义。3.2 综合与扫描插入时的关键约束带着RTL中的dont_touch指令进入综合阶段后我们还需要在DFT脚本中完善整个测试协议Test Protocol确保工具理解我们的设计意图。在Design Compiler的DFT编译流程中大概的脚本顺序和关键命令如下# 1. 读入设计并完成初步综合 read_verilog top.v current_design top link compile_ultra # 2. 定义DFT测试信号 - 这是告诉工具测试接口如何工作 # 扫描时钟定义其波形假设周期为100占空比45/55 set_dft_signal -view existing_dft -type ScanClock -port clk -timing {45 55} # 功能复位信号低有效 set_dft_signal -view existing_dft -type Reset -port async_nreset -active_state 0 # 测试模式选择信号高电平进入测试模式 set_dft_signal -view spec -type TestMode -port test_mode -active_state 1 # 扫描使能信号高电平为移位模式 set_dft_signal -view spec -type ScanEnable -port se -active_state 1 # 扫描数据输入输出端口 set_dft_signal -view spec -type ScanDataIn -port sdi set_dft_signal -view spec -type ScanDataOut -port sdo # 3. 创建测试协议 create_test_protocol # 4. 运行DFT设计规则检查DRC dft_drc运行dft_drc后你需要仔细查看报告。一个成功的、做好了隔离的设计其DRC报告应该不会出现关于复位同步触发器相关的严重错误Critical Violation。你可能会看到一些关于“某些触发器不可扫描”的信息Information或警告Warning例如“S1: Some flip-flops are not scannable”。这正是我们期望的——那些被dont_touch的复位同步触发器被工具识别为不可扫描单元它们不会被自动修复或强行插入扫描链。这里有个坑要注意有些工程师可能会使用set_dft_configuration -fix_reset enable和set_autofix_configuration命令让工具自动修复不可控的复位信号。对于我们已经明确隔离的异步复位同步器这个自动修复功能要谨慎使用。因为工具可能会试图在复位路径上插入一个由test_mode控制的多路复用器Mux这反而可能破坏我们精心设计的同步时序。我的经验是对于已知且已手动处理的关键复位路径关闭其自动修复或者通过设置dont_touch让工具跳过这些区域。3.3 扫描链结构预览与确认在正式插入扫描链之前用preview_dft命令预览一下是个好习惯。set_scan_configuration -chain_count 4 # 假设我们规划了4条扫描链 preview_dftpreview_dft会生成一个报告展示扫描链将如何被连接。在这个报告里你应该能看到那些被标记为dont_touch的触发器比如RESET_SYNC_FF1被排除在扫描链列表之外。同时报告会列出每条扫描链的起点和终点。确认无误后再执行最终的插入命令insert_dft执行insert_dft后再次运行dft_drc进行最终检查。这次除了确认之前的规则还要关注扫描链本身的连通性。一个干净的DRC报告是后续ATPG成功的基础。4. 测试协议与复位信号处理的艺术隔离了触发器并不意味着测试时就不管复位信号了。恰恰相反我们需要更精细地定义在测试模式下复位信号应该如何行为。这就是测试协议Test Protocol定义的精妙之处。4.1 理解“Existing DFT”与“Spec”视图在set_dft_signal命令中-view参数有两个选项existing_dft和spec。它们的区别至关重要-view existing_dft用于声明那些已经存在于功能设计中的端口它们在测试模式下会被复用。比如功能时钟clk、功能复位async_nreset。工具会利用这些已有的端口进行测试而不是创建新的端口。-view spec用于声明那些专门为测试而添加的、功能设计中没有的端口。比如test_mode、se、sdi、sdo。这些端口只会在测试模式下使用。对于异步复位我们通常将其声明为-view existing_dft -type Reset。这意味着在测试模式下ATE设备会通过这个原有的复位引脚向芯片施加控制。但是这里有一个关键选择我们让ATE控制的是原始的异步复位信号还是经过内部同步后的复位信号4.2 两种复位测试策略对比根据设计复杂度和测试要求通常有两种策略策略一ATE直接控制异步复位引脚这是最直接、最常用的方法。在测试协议中我们将功能复位端口如async_nreset声明为DFT复位信号。在测试过程中ATE可以像在功能模式下一样控制这个复位信号的施加和释放。被隔离的复位同步触发器会正常工作将ATE提供的异步复位信号同步到内部时钟域。这种方法的优点是简单更贴近真实功能场景。缺点是在扫描移位期间如果ATE不小心改变了复位信号可能会干扰扫描操作。策略二使用Test Mode信号旁路同步器在一些对复位时序要求极高或者想彻底排除复位同步器对扫描测试任何影响的设计中会采用更复杂的方案。即在RTL设计时就增加一个test_mode控制的多路复用器Mux。// 在复位同步模块内部或顶层 always_comb begin if (test_mode) begin // 测试模式直接使用ATE提供的、可能已经过外部同步的复位信号 internal_nreset test_nreset_from_ate; end else begin // 功能模式使用内部同步器输出的复位信号 internal_nreset sync_nreset_from_isolation_cell; end end在这种情况下你需要为test_nreset_from_ate在测试协议中定义一个新的Reset类型信号可能用-view spec。这种策略将测试复位路径和功能复位路径完全分开控制更精准但增加了设计复杂度和面积开销。对于大多数项目策略一已经足够。我们隔离复位同步触发器的目的是防止它们在扫描链中造成混乱而不是完全禁止它们在测试模式下工作。只要ATE的测试程序Test Program编写得当确保在扫描移位和捕获周期复位信号保持稳定通常保持为无效状态就能安全、有效地进行测试。5. 实践效果验证与故障诊断分析做完所有设计和约束最终效果如何我们需要从测试向量生成和实际测试结果两个维度来验证。5.1 ATPG流程的顺畅度与覆盖率将隔离后的网表交给ATPG工具如TetraMAX。一个最直观的感受是工具运行会更顺畅。之前因为复位同步触发器在链内而导致的“无法控制/无法观察”的警告会大量减少。工具能够清晰地识别出哪些触发器是可扫描的哪些是不可扫描的隔离的。运行自动测试向量生成后查看故障覆盖率报告。此时的覆盖率数字会更加真实可信。因为工具不会再对那些它实际上无法通过扫描链有效控制的逻辑即被隔离的复位同步器及其直接驱动的一部分纯组合逻辑计算可控性。覆盖率的提升可能不明显甚至可能因为排除了一些虚假的可控点而略有下降但这个下降是健康的它反映了真实的、可测试的电路范围。你可以让工具生成针对“Stuck-at”和“Transition Delay”等不同故障模型的向量。观察向量长度和生成时间。一个良好的隔离设计通常不会因为少数触发器被隔离而显著增加向量数量或生成时间。5.2 测试失败时的诊断优势当芯片在ATE上测试失败扫描链测试返回错误数据时诊断流程开始了。如果复位同步触发器在扫描链内失败日志可能指向一个被复位信号干扰的触发器诊断算法需要费力地区分这是复位信号导致的预期行为偏移还是真正的物理缺陷。而当它们被隔离后扫描链的故障模型变得非常“干净”它就是一条纯粹的数据移位路径。任何移位错误都直接指向链上的某个或某几个扫描触发器及其连接线。诊断工具可以更精确地定位到物理缺陷的位置比如某个触发器的时钟引脚开路或者两条扫描链之间的连接线短路。在我经历过的一次成功案例中采用隔离策略后一个扫描链测试失败的芯片通过诊断工具直接定位到了某个标准单元的输出引脚与电源线之间的桥接故障Bridging Fault。定位精度达到了单个标准单元极大加快了失效分析Failure Analysis工程师进行电路修补Circuit Edit或聚焦离子束FIB切割验证的速度。5.3 一个完整的检查清单在项目交付流片Tape-out前建议针对异步复位触发器的DFT处理做一次最终检查[ ]RTL检查所有异步复位同步触发器实例是否都正确使用了dont_touch约束可以通过grep命令快速检查[ ]综合网表检查用report_dft_configuration或直接查看网表确认目标触发器没有被替换成扫描触发器Scan Flip-Flop。[ ]DRC报告检查dft_drc报告中没有关于这些触发器的不可扫描错误应为预期信息且没有因它们引发的时序冲突错误。[ ]ATPG验证导入网表后ATPG工具是否报告这些触发器为“非扫描单元”生成的测试向量仿真Simulation是否通过[ ]测试程序验证ATE测试程序中对于相关复位信号的控制时序特别是在扫描移位期间保持稳定是否明确无误把这些点都踩实你就能 confidently 说异步复位触发器这个“麻烦制造者”已经被你成功转化为DFT设计中一个稳定可靠的“合作伙伴”了。处理这类问题没有银弹核心在于理解原理、明确约束、并在设计流程的每个环节进行验证。