时钟门控技术基础
时钟门控,说白了就是让时钟在不需要的时候“歇着”。我刚开始接触低功耗设计时,觉得这玩意儿挺简单的——不就是加个与门嘛。后来踩了不少坑才发现,这里面的门道比想象中深得多。
时钟门控的原理
芯片里大部分动态功耗都来自时钟网络。时钟树每跳一次,成千上万个触发器就要跟着翻转。你想想看,如果某个模块明明没在工作,时钟还在那拼命跑,这不是浪费电吗?
时钟门控的核心思路就是:在数据不需要更新的时候,把时钟关掉。这样触发器的时钟引脚不跳变,内部节点就不会充放电,功耗自然就降下来了。
关键点:时钟门控节省的是动态功耗,对静态功耗(漏电流)基本没影响。所以它特别适合那些有“空闲期”的模块——比如处理器在等待中断时,或者数据通路在流水线停顿期间。
我在项目中遇到过这样一个场景:一个视频处理模块,大部分时间都在等帧同步信号。没加时钟门控前,整个模块的时钟一直在跑,功耗占了芯片总功耗的30%以上。加上门控后,直接降到了8%。
与门实现的门控
最简单的时钟门控,就是用一个与门。把时钟信号和使能信号做个与运算:
// 与门时钟门控
assign gated_clk = clk & enable;
当enable为高时,gated_clk输出时钟;enable为低时,输出恒为0。看起来没问题,对吧?
但这里有个大坑——毛刺。如果使能信号在时钟高电平期间变化,与门输出就会产生一个不完整的脉冲。这个毛刺传到触发器,可能导致误触发。
注意:与门门控只适用于使能信号在时钟低电平时变化的情况。如果使能信号是异步的,千万别这么用!我曾经在一个项目里看到同事这么搞,结果仿真没问题,流片回来芯片功能时好时坏,查了整整两周才发现是门控毛刺惹的祸。
锁存器实现的门控
为了解决毛刺问题,业界普遍采用锁存器+与门的结构。这才是真正的“标准单元时钟门控”(ICG,Integrated Clock Gating)。
原理是这样的:
- 使能信号先经过一个电平敏感锁存器
- 锁存器由时钟的负沿触发
- 锁存器的输出再和时钟做与运算
// 锁存器时钟门控
always_latch
if (!clk)
enable_latched <= enable;
assign gated_clk = clk & enable_latched;
为什么要加这个锁存器?因为锁存器在时钟低电平时透明,高电平时保持。这样使能信号只能在时钟低电平时进入,等到时钟变高时,锁存器已经锁住了。与门的两个输入在时钟高电平期间都不会变化,毛刺自然就消除了。
| 门控类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 与门门控 | 面积小、延迟低 | 有毛刺风险 | 使能信号与时钟同步且只在低电平变化 |
| 锁存器门控 | 无毛刺、安全可靠 | 面积稍大、增加一个锁存器 | 通用场景,推荐使用 |
我个人习惯是:只要做时钟门控,一律用锁存器结构。别省那一个锁存器的面积,省出来的可能是几个月的调试时间。
时钟门控的DFT测试问题
好了,现在芯片正常工作没问题了。但到了测试阶段,麻烦来了。
你想想看,测试时我们需要把测试向量灌进去,然后捕获响应。如果时钟被门控关掉了,测试向量根本进不去,响应也出不来。这就是时钟门控给DFT带来的核心挑战——测试模式下时钟必须可控。
具体来说,有这几个问题:
- 扫描链无法移位:扫描链需要连续的时钟脉冲来把数据串进去。门控一关,移位就停了。
- 捕获时钟不足:有些测试模式需要多个捕获时钟,门控可能只让一个时钟通过。
- 故障覆盖下降:门控逻辑本身也可能有故障,测试时如果不处理,这部分故障就测不到。
我的做法:在每一个时钟门控单元上加一个测试模式选择信号(test_mode或scan_mode)。测试模式下,强制让门控旁路掉,时钟直通。这样扫描链就能正常工作了。
代码实现大概是这样的:
// 带测试模式的时钟门控
assign gated_clk = test_mode ? clk : (clk & enable_latched);
嗯,这里要注意:test_mode信号必须是异步的,不能依赖任何门控时钟。否则就成了“先有鸡还是先有蛋”的问题——测试模式需要时钟才能生效,但时钟又被门控关掉了。
我曾经在一个项目里吃过这个亏。当时设计了一个复杂的门控树,测试模式信号经过了好几级同步器。结果一进测试模式,前几级门控打开了,后几级还关着,扫描链死活跑不起来。后来改成全局异步的test_mode信号,问题才解决。
另外,对于门控逻辑本身的测试,我建议用AC扫描或者逻辑BIST来覆盖。门控单元的使能路径和时钟路径上的延迟故障,是芯片在实际使用中比较容易出问题的地方。
总结一下时钟门控的DFT要点:
- 每个门控单元都要有测试模式旁路
- test_mode信号必须异步、全局
- 门控逻辑本身需要专门的测试覆盖
- 低功耗测试模式(如保持模式)需要特殊处理
时钟门控是低功耗设计里性价比最高的技术之一。实现简单,效果显著。但DFT工程师一定要在项目早期就介入,把测试模式规划好。等到网表都做好了再回头加门控旁路,那可就麻烦了。