1. OCC IP电路结构概述
在芯片可测性设计(DFT)领域,OCC(On-Chip Clock Controller)IP是实现高质量测试时钟控制的核心模块。我参与过多个采用40nm和28nm工艺的SoC项目,OCC模块的设计质量直接影响到最终芯片的测试覆盖率与良率。这个看似简单的时钟控制电路,实际上需要处理测试模式与功能模式的无缝切换、时钟域交叉、以及低功耗测试等复杂场景。
典型的OCC IP包含三个关键部分:时钟选择逻辑(Clock Mux)、时钟门控单元(Clock Gating Cell)和测试控制状态机。在28nm项目中,我们曾测量到不合理的OCC结构会导致高达15%的测试时钟偏移(clock skew),这个教训让我深刻理解了其电路设计的重要性。
2. DFT视角下的OCC设计需求
2.1 测试模式与功能模式的时钟切换
在ATPG(自动测试向量生成)阶段,OCC必须确保测试时钟能完全替代功能时钟。我常用的方案是采用双路选择器结构:
verilog复制assign clk_out = test_mode ? scan_clk : func_clk;
但在实际流片中发现,简单的MUX会导致时钟路径上的glitch。后来我们改用同步切换电路,增加了一个DFF来锁存test_mode信号,与时钟下降沿同步切换。
2.2 低功耗测试支持
现代芯片要求OCC支持power-aware测试。在某次IoT芯片项目中,我们实现了动态时钟门控:
- 通过ATE(自动测试设备)发送的shift_en信号
- 结合scan_enable信号生成局部门控
- 采用AND型门控单元避免latch-up风险
重要提示:避免在OCC中使用OR型门控!我们在65nm节点曾因此出现时钟毛刺导致测试失败。
3. OCC IP核心电路详解
3.1 时钟选择器的晶体管级实现
在物理设计阶段,OCC的时钟选择器需要特殊处理。以下是我们总结的版图设计规则:
| 设计参数 | 推荐值 | 依据 |
|---|---|---|
| MUX驱动强度 | 3X标准单元驱动 | 降低时钟插入延迟 |
| 走线宽度 | 2倍最小金属宽度 | 减少IR drop影响 |
| 保护环 | 双环结构(N+P) | 防止衬底噪声干扰 |
某次在16nm FinFET工艺中,未遵守这些规则导致时钟路径出现约50ps的偏差,不得不进行ECO修改。
3.2 测试时钟安全机制
可靠的OCC必须包含以下保护电路:
- 时钟丢失检测(Clock Monitor)
- 采用双路采样比较器
- 超时阈值设为10个功能时钟周期
- 频率越界保护
- 通过计数器监测周期时间
- 异常时强制切换到备份时钟
- 毛刺滤波器
- 3级D触发器链实现
- 滤除宽度<200ps的脉冲
4. 实际项目中的OCC集成问题
4.1 时钟域交叉处理
在多时钟域SoC中,OCC需要特别处理跨域信号。我们在某AI芯片项目中采用了如下方案:
- 同步器链设计
- 采用3级DFF同步
- 使用时钟门控使能信号作为同步时钟
- 握手机制
- 添加req/ack双向握手
- 超时设置为源时钟的8个周期
4.2 扫描链连接要点
OCC与扫描链的接口需要注意:
- 确保scan_enable信号先于时钟切换
- 插入缓冲器平衡负载
- 添加测试点(test point)监测关键信号
在某次28nm项目后期,因scan_enable信号skew超标导致测试覆盖率下降12%,最终通过增加驱动单元解决。
5. OCC验证与调试技巧
5.1 静态时序分析特殊约束
需要为OCC电路定义特殊的SDC约束:
tcl复制set_clock_groups -asynchronous \
-group [get_clocks func_clk] \
-group [get_clocks test_clk]
set_false_path -from [get_pins occ/test_mode] \
-to [get_pins occ/clk_mux/sel]
5.2 动态仿真常见问题
在仿真中经常遇到的两个典型问题及解决方法:
-
时钟切换时的亚稳态
- 现象:X态传播导致仿真失败
- 解决:在testbench中添加
$deposit强制初始化
-
门控时钟时序违规
- 现象:hold时间违反
- 解决:调整门控使能信号的时序路径
6. 先进工艺下的OCC设计演进
在7nm以下工艺节点,OCC设计面临新的挑战:
-
时钟树综合变化
- 需要采用CCD(Clock Concurrent Optimization)流程
- 建议保留10%的时钟裕量用于测试模式
-
电压频率缩放影响
- 测试模式下需支持DVFS
- 添加电压域交叉的level shifter
-
热效应补偿
- 集成温度传感器反馈
- 动态调整时钟驱动强度
在某5nm GPU项目中,我们通过自适应时钟驱动技术,将测试模式下的功耗降低了22%,同时保持相同的测试速度。
