问题
芯片上有数百万甚至数十亿个触发器,它们需要在时钟信号的协调下同步工作。
理想情况下,时钟信号应该同时到达所有触发器(就像乐队需要统一的指挥)。
但实际上,时钟信号从源头传播到各个触发器,经过不同长度的金属连线,到达时间必然不同——这个差异叫时钟偏斜(Clock Skew)。
偏斜会带来什么
保持时间违例(Hold Violation):
如果时钟到达第二个触发器比第一个晚太多,数据可能"追上"时钟——新数据在同一时钟沿就被写入,破坏了原有的数据传递顺序。
建立时间违例(Setup Violation):
如果时钟到达第二个触发器比第一个早太多,数据还没来得及稳定就被采样。
这两种情况都会导致功能错误。
时钟树综合(CTS)
目标:构建一个时钟分布网络,让时钟信号以最小的偏斜到达所有触发器。
H 树(H-Tree)
经典结构:从中心出发,逐级分叉成 H 形,让到达各端点的路径长度相等。
理论上零偏斜,但要求触发器均匀分布——实际芯片布局做不到。
时钟树综合的实际做法
- 分析所有触发器的位置;
- 构建一个缓冲器树(在各级插入缓冲器增强驱动能力);
- 通过平衡路径长度和调整缓冲器尺寸来最小化偏斜;
- 在布线后做精细调整。
插入缓冲器的必要性:时钟网络要驱动海量负载,单靠时钟源无法驱动。缓冲器逐级放大,同时隔离各级的负载。
有用偏斜(Useful Skew)
有趣的是,零偏斜并不总是最优。
现代设计中有意引入一些偏斜,来"借用"时间:
- 对时序紧张的路径,让接收端时钟稍微晚一点到达,给数据更多时间稳定;
- 对时序宽松的路径,让时钟早一点到达。
这叫有用偏斜调度——把时序余量从宽裕的地方"借"给紧张的地方,提升整体可实现的频率。
时钟门控
前文提到,给不工作的模块关掉时钟可以省功耗。
实现:在时钟路径上插入与门,用使能信号控制。
关键:使能信号必须无毛刺(Glitch-free)。如果使能信号在时钟高电平时变化,可能产生不完整的时钟脉冲,导致触发器误动作。
因此通常用集成时钟门控单元(ICG)——内部用锁存器保证使能信号只在时钟低电平时变化。
时钟网络的功耗
时钟是芯片中翻转最频繁的信号——每个时钟周期都要翻转两次。
因此时钟网络的功耗可能占总功耗的相当比例(在某些设计中可达 30%–40%)。
这解释了为什么:
- 低功耗设计高度重视时钟门控;
- 异步设计(前文提到)在功耗上有理论优势。
一个设计权衡
时钟树的设计与布局布线紧密耦合:
- 先布局 → 再综合时钟树 → 时钟树占用布线资源 → 可能需要调整布局 → 重新综合。
这是一个迭代过程,也是后端设计中最耗时的环节之一。
说明:本文为芯片后端设计的知识整理。