门控对DFF降低功耗的原理
门控(clock gating)降低 DFF 功耗的本质,是减少无效翻转,从而降低动态功耗。
P = α · C · V² · f
其中,α:翻转率(关键!);C:负载电容;f:时钟频率
clock gating的原理
glitch定义
glitch是gated clock上出现的短暂毛刺信号,通常是因为enable信号在时钟高电平期间发生变化导致的。这种时钟信号的毛刺,会被DFF认为是额外的时钟边沿,从而引起触发错误。由于gated clock是全局敏感信号,glitch的危害远远大于普通数据路径上的危害。解决办法是在clock gating的设计中,使用latch-based clcok gating,在时钟低电平时采样enable信号,保证高电平期间控制信号是稳定的,从而可以避免glitch。
latch是时序元件,使用 “使能透明/保持”来描述它的功能。EN 有效时 Q 跟随输入,EN 无效时 Q 保持原值
| EN | D | Q(next) | 状态 |
|---|---|---|---|
| 0 | X | Q | 保持 |
| 1 | 0 | 0 | 透明传输 |
| 1 | 1 | 1 | 透明传输 |
如果 clock gating 的 enable 信号来自另一个时钟域,直接使用会导致严重问题。首先,由于 enable 是异步信号,可能在时钟高电平期间变化,从而在 gated clock 上产生 glitch,相当于产生额外的时钟边沿;其次,enable 在跨域时可能引入亚稳态,进一步污染 gated clock。
正确做法是先将 enable 信号通过双级同步器同步到目标时钟域,再送入 clock gating 单元进行门控控制。latch 只用于避免 gating 过程中的 glitch,但不能替代 CDC 同步。
为什么memory做clock gating 不省功耗
对同步SRAM来说,动态功耗主要来自内部读写操作(bitline/wordline的切换),而不是clock网络。
因此降低 memory 功耗通常需要从减少访问次数、banking 或 power gating 等角度入手。
SRAM 的 bitline 设计成 precharge + differential
SRAM的bitline和wordline

更准确的,bitline具有差分结构。
BL ←→ BLB
│ │
[cell][cell][cell] ← 同一列
│ │
└──→ Sense Amplifier