1.DFT设计时怎么处理IR问题
在 DFT 阶段谈 IR-drop(动态+静态) 不是去算 mV 数值 ,而是确保 测试向量不会把芯片瞬间拉到"电压塌陷" ,导致 良率误杀 或 过度老化。核心思路是:
"让 ATPG 在生成向量时就看得见电源网格,别把太多高翻转堆在同一向量、同一周期、同一区域。"
下面把 DFT 如何考虑 IR 问题拆成 四步做法 + 三类 signoff:
1.1. 矢量级 Toggle Masking / Low-Power-ATPG
-
默认 ATPG 追求 高覆盖率 ,会把所有 scan cell 翻个遍 → di/dt 爆炸;
-
Low-Power-ATPG 选项:
-- max_toggle = 15 % (可设)
-- regional_toggle = 20 %
→ 工具 逐向量统计翻转密度 ,超过门限就重新填充;
-
结果:di/dt ↓30 % ,Vmin 测试裕量↑ ,ATE 不再误杀。
1.2. 区域级 Power Domain Aware
-
对不同电源域(PD1/PD2)设 独立 toggle budget;
-
掉电域 的 wrapper cell 强制 mask ,不让它翻转;
-
同时上电域 设 cycle-shift (向量 stagger ),把翻转峰错开 1-2 周期。
1.3. 网格级 Vector-Based IR Analysis
-
PR 后提取 SPEF + 电流模型 → 导入 RedHawk/Voltus;
-
把 ATPG 产生的 worst-pattern set(典型 10-50 条) 注入 动态 IR 引擎;
-
工具报出 Vmin-drop > 10 % 的向量 → 返回 DFT 重新 mask / 重新填充;
-
闭环迭代 直到 最坏向量 ΔV < 7 %(工艺厂给的测试裕量)。
1.4. 时钟级 At-Speed IR Screening
-
Transition ATPG 跑 最高功能频率;
-
同一向量 里 launch + capture 沿相距仅 1 周期 ,IR 塌陷最猛;
-
DFT 约束 :
-- max_launch_cycle_power = X mW
-- max_simultaneous_output_switching = N %
→ At-Speed 向量若超功率 ,工具自动拆分 launch/capture 到两周期 (cycle-skew ),把电流峰削平。
1.5. DFT-IR signoff 三件套
|---------------------------|-----------------|-------------------|
| 静态 IR | RedHawk/Voltus | ΔV < 5 % Vdd |
| 动态 IR (worst-pattern) | Vector-based IR | ΔV < 7 % Vdd |
| EM 电流密度 | Ansys/Calibre | Jrms < Jmax*0.8 |
1.6 总结
DFT 考虑 IR 不是去算电源,而是"让 ATPG 自带电源意识" :
低翻转、分区域、错周期、回注 IR 引擎闭环 ,
确保测试向量不会把芯片拉到"测试假失败"或"过度老化"。
2.launch和capture如何拆到两个pattern
不是说拆分出来的两个pattern一个只有launch,一个只有capture,这是不可能的。launch和capture一定是一起出现的,对于同一个寄存器D pin capture前级发过来数据的同时,通过Q pin launch数据给后级。对于相邻两级DFF,前一时钟前一级DDF launch数据,当前时钟当前DFF capture数据。
这里说launch pattern和capture pattern是把launch翻转率高的cell放到launch pattern;把capture翻转率高的cell放到capture pattern。
DUT 看到的波形仍然是"launch 拍紧接 capture 拍" ,两条都含有完整的 shift-in / launch / capture / shift-out 时序,区别只在于:
-
第一条向量
-- shift → launch (在功能周期 N 上升沿发射)
-- capture 也在同一向量内发生(周期 N+1 上升沿),
-- 但 工具把"高翻转"的 cell 尽量只放 launch 相关 ,capture 相关翻转被 mask/reloc 到第二条。
-
第二条向量
-- shift → launch 已不存在(或极少),
-- capture 仍是周期 N+1 沿,
-- 把剩余高翻转移过来 ,让两条向量的瞬时电流都 < 门限。
因此 "第一条只有 launch 翻转峰,第二条只有 capture 翻转峰" 是 功耗分布策略 ,不是把 launch/capture 沿拆掉 ;
DUT 仍然在同一对功能周期内完成 launch→capture ,时序关系、捕获边沿、路径延迟全部保持 At-Speed ,只是峰值电流被错峰。
3.DFT时候控制ICG的TE/EN来降低IR问题是怎么做的
DFT 里把 ICG(Integrated Clock Gating) 的 Test Enable (TE) 和 Functional Enable (EN) 分开控,用来 "错峰放 clock" ,"把大片 flip-flop 同时时钟上升沿" 拆成"分批跳变" ,从而 ↓di/dt、↓IR-drop、↓串扰 ,但 不影响测试覆盖率 。
下面按 插入阶段 → 控制策略 → 向量生成 → signoff 四步说明:
3.1. 插入阶段:DFT ICG vs Functional ICG
-
Functional EN (EN_func)(灰色)
-- 功能模式下 省电用 ,可随 RTL 已存在;
-
DFT TE (TE_dft)(红色)
-- DFT 插入阶段 给 每一个 ICG 再加一条 OR 路径 :
clk_out = (EN_func | TE_dft) & clk_in-- TE_dft 默认 0 ,功能行为不变 ;测试模式下 TE_dft 由 scan enable 或 ATPG 直接驱动。
3.2. 控制策略:两条"错峰"命令
|---------------------------------------------|-----------------------------|------------|
| set_dft_clock_gating_test_enable true | 让工具 自动插 TE 端口 | Insertion |
| set_atpg_clock_gating_test_enable control | 告诉 ATPG "TE 可以当 0/1 变量" | PatternGen |
→ 结果:
EN_func 仍按功能意图开关 ,TE_dft 成为 ATPG 的新"旋钮" ,向量阶段可以选 0 选 1。
3.3. 向量生成:ATPG 把 TE 当普通 PI
-
低功率模式
--
set_max_toggle 20 %+set_clock_gating_test_enable 1-- ATPG 优先 把 TE_dft=1 ,打开全部 ICG ,再把高翻转拆到多拍 → 瞬时电流峰↓。
-
高覆盖补漏
-- 对 难测试故障 ,允许 TE_dft=0 ,关闭部分 ICG ,把时钟重新隔离 ,保证故障可观测 → coverage 不掉。
-
区域级错峰
-- PowerDomain 1 设 TE=1 ,PowerDomain 2 设 TE=0 ,再交替 → 分区电流峰时间错开。
3.4. Signoff:两步验证
-
形式验证
-- TE_dft=0 时 功能波形 vs 原网表 LEC 必须 pass ;
-- TE_dft=1 时 scan shift/launch/capture 无 X-state。
-
向量级 IR 检查
-- 把 worst-toggle pattern 丢进 RedHawk/Voltus ,ΔV < 7 % 才放行;
-- 若 IR 仍超 ,再收紧 toggle budget 或 加 cycle-skew。
3.5. 效果量化(28 nm 例)
|-----------|--------|----------------|
| 峰值 toggle | 48 % | 22 % |
| 瞬态电流 | 1.00 I | 0.55 I |
| ΔV worst | 110 mV | 65 mV |
| 覆盖率 | 99.2 % | 99.2 %(无 loss) |
3.6 总结
DFT 把 ICG 的 TE 当"错峰旋钮" ,ATPG 可以按向量需要把大片时钟"分批打开" ,把同一拍的高翻转拆到多拍 ,从而瞬态电流↓、IR↓ ,再通过 TE=0 补漏保证 coverage ,最后用 IR 工具 signoff ,实现"测得全 + 测得稳"。
4. extest mode下 子系统非grayBox的逻辑寄存器为什么可以被gating
在 EXTEST 模式下,子系统里未被 GrayBox 带走的"非 GrayBox 逻辑寄存器" (即内核里原来的功能寄存器、EDT 通道、OCC 等)之所以仍然可以被 ICG 做 clock gating,根本原因是:
EXTEST 只测"wrapper 外侧"互连,不依赖内核任何寄存器翻转 ,
因此工具主动把内核时钟"关死" ,既省电又降 IR ,对测试结果毫无影响。
下面把"为什么能 gate"拆成三步:
4.1. EXTEST 的测试对象决定"内核无需翻转"
-
EXTEST 只驱动/采样 wrapper chain 的边界扫入/扫出;
-
wrapper 内侧→内核→wrapper 外侧 这条数据路径 被 wrapper cell 物理隔离;
-
因此 内核寄存器翻不翻转 都不会改变 wrapper 边界上的期望向量 。
4.2. 工具在生成 EXTEST 向量时自动 mask 掉内核翻转
-
set_attribute_value scan_out<core> --name ignore_for_graybox --value true把 core chain 的输出 标成 don't care;
-
ATPG 在 external mode 下 只对外层 comb 逻辑推故障 ,内核任何节点都设为 X;
-
于是 ICG 可以把内核时钟完全 kill 掉 (TE=0),向量仍 100 % pass 。
4.3. OCC/ICG 的 TE 信号在 EXTEST 下被扫描寄存器直接编程
-
Parent OCC 在 external mode 下只提供 wrapper shift & capture 时钟;
-
Child OCC 的 clock-gater 使能 由 scan-programmable 寄存器 控制;
-
ATPG 把对应位点成 0 → 内核 ICG 被永久关闭 → 动态功耗 ↓30 %--50 % ,IR-drop 裕量↑ 。
4.4. 结果量化(28 nm 实例)
|-------------|----|--------|--------|---------------------|
| 不 gate | 全开 | 1.00 I | 110 mV | Pass |
| EXTEST gate | 全关 | 0.55 I | 65 mV | Pass(无 coverage 损失) |
4.5 总结
EXTEST 只测 wrapper 外侧 ,内核翻不翻转都"don't care" ,
工具索性把内核 ICG 全部关死 ,既省功耗又降 IR ,测试照样 pass ------这就是 "非 GrayBox 逻辑寄存器仍能被 gating" 的根本原因