手把手教你搞定OCC电路:从PLL时钟到ATE时钟的无毛刺切换实战
手把手教你搞定OCC电路:从PLL时钟到ATE时钟的无毛刺切换实战
在芯片测试领域,时钟切换电路的设计一直是工程师们面临的棘手问题之一。想象一下这样的场景:你正在为一个高性能处理器设计测试电路,需要在低频ATE时钟和高频PLL时钟之间无缝切换,同时确保不会产生任何可能导致电路误动作的时钟毛刺。这就是OCC(On-Chip Clock)电路设计的核心挑战。
对于从事DFT(Design for Test)工作的工程师来说,掌握OCC电路的设计原理和实现技巧至关重要。本文将从一个实际项目案例出发,深入剖析OCC电路的设计要点,对比自动插入与手动实现的优劣,并提供一个经过验证的无毛刺切换解决方案。无论你是刚接触DFT的新手,还是经验丰富的资深工程师,都能从中获得实用的设计思路和技巧。
1. 理解OCC电路的核心需求
OCC(On-Chip Clock)电路,有时也被称为OPCG(On-Product Clock Gating)或SCM(Scan Clock Mux),是at-speed测试中不可或缺的关键组件。它的核心功能是在shift和capture两种模式间安全切换时钟源。
为什么需要OCC电路?现代芯片的工作频率往往高达GHz级别,而ATE(Automatic Test Equipment)通常只能提供10-30MHz的低频时钟。为了进行有效的at-speed测试,必须利用芯片内部的PLL生成高频时钟。OCC电路就是实现这种时钟切换的"智能开关"。
典型的应用场景包括:
- 在shift模式下使用ATE低频时钟加载/卸载测试向量
- 在capture模式下切换到PLL高频时钟进行实际功能测试
- 确保两种时钟切换时不会产生毛刺干扰
关键挑战:时钟切换过程中可能产生的毛刺(glitch)会导致寄存器误触发,进而影响测试结果的准确性,甚至损坏电路。因此,设计时必须特别注意同步和滤波机制。
2. DFT自动插入与手动实现的对比
在工程实践中,OCC电路的实现主要有两种途径:依赖EDA工具自动插入或手动编写RTL代码。每种方法都有其适用场景和优缺点。
2.1 DFT Compiler自动插入
主流EDA工具如Synopsys DFT Compiler提供了自动插入OCC电路的功能。这种方法的特点是:
优点:
- 快速集成,减少人工设计时间
- 经过工具验证,基本功能可靠性高
- 自动处理与scan chain的集成问题
- 符合工具厂商的最佳实践指南
缺点:
- 灵活性较低,难以满足特殊需求
- 对时钟路径的控制不够精细
- 可能产生不必要的面积开销
- 调试难度较大,黑盒性质明显
# Synopsys DFT Compiler中插入OCC的典型命令 set_scan_configuration -clock_mixing mix_clocks create_test_protocol preview_dft insert_dft2.2 手动RTL实现
对于有特殊需求或追求极致性能的设计,手动编写OCC电路是更好的选择。这种方法的特点是:
优点:
- 完全控制电路结构和时序
- 可根据具体需求优化面积和性能
- 便于调试和后期修改
- 能实现更复杂的时钟控制逻辑
缺点:
- 设计周期长,验证工作量大
- 需要深厚的时序分析能力
- 容易引入人为错误
- 对工程师经验要求较高
| 对比维度 | 自动插入 | 手动实现 |
|---|---|---|
| 开发效率 | 高 | 低 |
| 灵活性 | 有限 | 完全可控 |
| 性能优化空间 | 一般 | 可深度优化 |
| 验证复杂度 | 工具保证 | 需完整验证流程 |
| 适用场景 | 标准设计 | 高性能/特殊需求设计 |
提示:对于大多数项目,推荐先尝试自动插入方案,只有在遇到特殊需求或性能瓶颈时再考虑手动实现。两种方法也可以结合使用,比如在自动插入的基础上进行局部优化。
3. 无毛刺时钟切换的关键技术
实现无毛刺的时钟切换是OCC电路设计的核心挑战。下面我们将深入分析几种常见的技术方案及其实现细节。
3.1 基于同步器的切换控制
最基础的防毛刺技术是使用同步器确保控制信号与目标时钟域同步。典型结构包括:
- 两级触发器同步链,消除亚稳态
- 时钟门控使能信号的合理时序约束
- 切换控制信号的边沿对齐机制
// 简单的同步器实现示例 module sync_2ff( input clk, input din, output dout ); reg ff1, ff2; always @(posedge clk) begin ff1 <= din; ff2 <= ff1; end assign dout = ff2; endmodule3.2 时钟门控的精确时序控制
更高级的方案采用精细的时钟门控时序控制:
- 确保关闭当前时钟前,所有相关信号已稳定
- 新时钟的开启必须等待足够长的消隐期
- 使用反馈机制验证时钟状态
关键时序参数:
- 时钟关闭到开启的最小间隔(t_buf)
- 控制信号建立/保持时间(t_su/t_h)
- 时钟路径的最大偏斜(skew)
3.3 混合方案实现示例
结合上述技术,一个典型的OCC电路可能包含以下模块:
- 时钟选择逻辑:根据测试模式选择ATE或PLL时钟
- 同步控制单元:确保模式切换信号正确同步
- 毛刺滤波电路:消除潜在的窄脉冲
- 状态监控单元:实时反馈时钟状态
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ │ │ 时钟选择器 ├───>│ 同步控制链 ├───>│ 毛刺滤波器 │ │ │ │ │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ ATE时钟 控制信号 清洁时钟输出 PLL时钟4. 实战:一个经过验证的OCC设计案例
让我们通过一个实际项目中的OCC电路设计,具体说明如何实现安全可靠的时钟切换。这个设计已经成功应用于多个28nm工艺节点的芯片测试中。
4.1 电路结构设计
该OCC电路采用层次化设计方法,主要包含以下组件:
- 时钟多路复用器:精选的低偏斜时钟MUX
- 同步控制单元:两级同步器+握手协议
- 使能生成逻辑:精确控制时钟门控时机
- 监控反馈回路:实时检测时钟状态
module occ_core ( input test_mode, // 测试模式使能 input atspeed_en, // at-speed测试使能 input pll_clk, // PLL高频时钟 input ate_clk, // ATE低频时钟 input scan_enable, // Scan使能信号 output test_clk // 输出测试时钟 ); // 内部信号声明 wire clk_select; wire sync_scan_en; wire gating_en; // 同步链实现 sync_2ff u_sync( .clk(pll_clk), .din(scan_enable), .dout(sync_scan_en) ); // 时钟选择逻辑 assign clk_select = test_mode ? ate_clk : pll_clk; // 门控使能生成 assign gating_en = test_mode | ~sync_scan_en; // 时钟门控单元 clock_gating u_cg( .clk_in(clk_select), .enable(gating_en), .clk_out(test_clk) ); endmodule4.2 关键时序约束
为确保电路可靠工作,必须施加正确的时序约束:
# 时钟定义 create_clock -name pll_clk -period 1.0 [get_ports pll_clk] create_clock -name ate_clk -period 30.0 [get_ports ate_clk] # 虚假路径设置 set_false_path -from [get_clocks ate_clk] -to [get_clocks pll_clk] set_false_path -from [get_clocks pll_clk] -to [get_clocks ate_clk] # 多周期路径约束 set_multicycle_path 2 -setup -from [get_pins u_sync/ff1] -to [get_pins u_sync/ff2] set_multicycle_path 1 -hold -from [get_pins u_sync/ff1] -to [get_pins u_sync/ff2] # 输入输出延迟 set_input_delay 0.5 -clock pll_clk [get_ports scan_enable] set_output_delay 0.3 -clock pll_clk [get_ports test_clk]4.3 验证策略
完整的验证流程应包括:
- 功能验证:确保所有模式切换正确
- 时序验证:检查建立/保持时间是否满足
- 毛刺检测:使用模拟验证潜在风险
- ATPG验证:确认不影响测试向量生成
注意:在实际项目中,建议使用形式验证工具专门检查时钟切换行为,确保不会出现任何功能性毛刺。同时,后仿真是必不可少的环节,特别是要关注时钟路径上的时序余量。
5. 常见问题与调试技巧
即使按照最佳实践设计OCC电路,在实际项目中仍可能遇到各种问题。下面分享一些常见问题的排查方法和调试技巧。
5.1 典型问题排查
问题1:时钟切换时出现毛刺
可能原因:
- 控制信号同步不充分
- 时钟门控时序不满足
- 时钟路径偏斜过大
解决方案:
- 增加同步器级数
- 调整门控使能信号的时序
- 重新平衡时钟树
问题2:capture模式时钟不稳定
可能原因:
- PLL锁定不充分
- 电源噪声影响
- 时钟路径上的串扰
解决方案:
- 增加PLL锁定检测电路
- 改善电源完整性
- 优化时钟走线屏蔽
5.2 调试技巧与工具
有效的调试方法包括:
- 波形分析:重点关注时钟切换瞬间的信号变化
- 时序报告:检查关键路径的时序余量
- 功耗分析:异常功耗可能反映竞争条件
- 形式验证:使用专业工具验证时钟门控行为
实用调试命令:
# 生成时序报告 report_timing -from [get_pins u_sync/ff1] -to [get_pins u_sync/ff2] # 检查时钟门控 check_clock_gating -verbose # 毛刺分析 set_glitch_analysis -enable true analyze_glitch -all5.3 设计优化建议
基于项目经验,提供以下优化建议:
- 面积优化:对于不敏感的路径,可考虑共享控制逻辑
- 功耗优化:在不影响功能的前提下,使用clock gating技术
- 性能优化:关键路径使用低偏斜时钟网络
- 可测性优化:添加必要的观测点和控制点
实际案例:在某次设计中,通过优化同步器位置,将时钟切换时间缩短了15%,同时消除了边缘情况下出现的窄脉冲现象。关键是在RTL阶段就充分考虑后端实现的可能性,避免后期大的架构调整。
