DFT时怎么考虑IR问题

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:两步验证

  1. 形式验证

    -- TE_dft=0 时 功能波形 vs 原网表 LEC 必须 pass ;

    -- TE_dft=1 时 scan shift/launch/capture 无 X-state。

  2. 向量级 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" 的根本原因

相关推荐
水桶学习吧_2 天前
NHC催化平面手性环芳烃Gaussian计算
dft·gaussian·nhc催化
通信仿真爱好者12 天前
第【130】期--OFDM系统中LS、MMSE与DFT信道估计方法的仿真--matlab完整代码
matlab·ofdm·dft·ls·信道估计·mmse
迷失的小猫1 个月前
ATPG 介绍与故障分类全解析
dft·atpg·tessent
临岸草惊风.1 个月前
简单VASP计算INCAR设置(结构优化OPT、静态自洽SCF、能带BAND、态密度DOS)
linux·dft
景芯SoC芯片实战2 个月前
12nm工艺下,6T-Turbo Cell的Filler到底该怎么插?
数据库·数字ic·dft·soc后端
迷失的小猫4 个月前
基于DC的Scan插入流程全解析
dft·dc·scan
迷失的小猫5 个月前
Tessent MBIST Flow 实战全解析
dft·mbist
DarrenHChen_EDA5 个月前
【Backend Flow工程实践 16】从 Scan Chain 到 Placement:测试结构为什么会影响后端布局?
eda·dft·apr·placement·scan chain·backend flow·可测性设计
科学创新前沿6 个月前
物理信息神经网络:从数据驱动到物理嵌入的科学计算新范式!
人工智能·深度学习·dft·pinn·流体力学·固体力学·断裂力学