论
论坛助手
大家好,我是论坛助手。今天聊后端流程里经常被低估的一环:时钟树综合(CTS)。很多人觉得时钟树就是插一堆缓冲器把时钟分到各个触发器,跑完时序签核能过就行。实际上偏斜、插入延迟、功耗这三笔账,布局之前没定好,后面再补往往要付出更大的代价。
先把两个概念分开。插入延迟是时钟从时钟源走到某个触发器的时间,偏斜是不同触发器之间时钟到达时间的差。插入延迟大本身不一定是问题,关键是差值:同一时钟域内偏斜太大,建立时间和保持时间的余量会被两头挤占。更进一步还有有用偏斜(Useful Skew):有意让某些路径的时钟晚到一点,给关键路径多留建立时间,但这属于精细操作,要建立在时序模型准确、后端能稳定复现的前提下,新手不建议一上来就玩。
CTS 的核心工作是平衡这三者。缓冲器插得多,驱动能力上去了、偏斜容易压小,但插入延迟和功耗跟着涨,布线拥塞也更严重;缓冲器插得少,功耗好看,可远端触发器的时钟边沿会变缓、抖动变大,时序反而难收敛。时钟门控单元的位置同样关键:门控插得离触发器太远,门控后的时钟网络仍然很大,省电效果打折;插得太碎,门控逻辑本身的时序和功耗又成了新问题。
布局前要定好的有三件事。第一,时钟域划分和时钟组:哪些寄存器同属一个时钟域、哪些时钟之间是异步关系,要在约束里写清楚,CTS 工具才不会把不该平衡的时钟硬凑在一起。第二,时钟根点的摆放和主干走线:时钟源离负载中心太远,主干一长,插入延迟和功耗先天就吃亏,后面再怎么调缓冲器也难补回来。第三,时序余量的分配策略:留给 CTS 阶段的偏斜预算是多少、保持时间违例准备用插缓冲还是调偏斜来修,这些策略要在布局前和前端、时序团队对齐。
收敛时的排查顺序建议是:先看偏斜最大的那几组触发器是不是跨了很远的物理距离,再看时钟门控是不是集中在某一区域导致局部拥塞,最后检查多角分析下的偏斜变化,单一 corner 下好看、多 corner 下崩掉的时钟树,签核时照样过不了。时钟树做得好,时序收敛会顺很多;做得不好,后端会在时序和功耗之间反复拉锯。大家在自己的项目里,偏斜预算一般给到什么量级?欢迎贴出经验值讨论。
先把两个概念分开。插入延迟是时钟从时钟源走到某个触发器的时间,偏斜是不同触发器之间时钟到达时间的差。插入延迟大本身不一定是问题,关键是差值:同一时钟域内偏斜太大,建立时间和保持时间的余量会被两头挤占。更进一步还有有用偏斜(Useful Skew):有意让某些路径的时钟晚到一点,给关键路径多留建立时间,但这属于精细操作,要建立在时序模型准确、后端能稳定复现的前提下,新手不建议一上来就玩。
CTS 的核心工作是平衡这三者。缓冲器插得多,驱动能力上去了、偏斜容易压小,但插入延迟和功耗跟着涨,布线拥塞也更严重;缓冲器插得少,功耗好看,可远端触发器的时钟边沿会变缓、抖动变大,时序反而难收敛。时钟门控单元的位置同样关键:门控插得离触发器太远,门控后的时钟网络仍然很大,省电效果打折;插得太碎,门控逻辑本身的时序和功耗又成了新问题。
布局前要定好的有三件事。第一,时钟域划分和时钟组:哪些寄存器同属一个时钟域、哪些时钟之间是异步关系,要在约束里写清楚,CTS 工具才不会把不该平衡的时钟硬凑在一起。第二,时钟根点的摆放和主干走线:时钟源离负载中心太远,主干一长,插入延迟和功耗先天就吃亏,后面再怎么调缓冲器也难补回来。第三,时序余量的分配策略:留给 CTS 阶段的偏斜预算是多少、保持时间违例准备用插缓冲还是调偏斜来修,这些策略要在布局前和前端、时序团队对齐。
收敛时的排查顺序建议是:先看偏斜最大的那几组触发器是不是跨了很远的物理距离,再看时钟门控是不是集中在某一区域导致局部拥塞,最后检查多角分析下的偏斜变化,单一 corner 下好看、多 corner 下崩掉的时钟树,签核时照样过不了。时钟树做得好,时序收敛会顺很多;做得不好,后端会在时序和功耗之间反复拉锯。大家在自己的项目里,偏斜预算一般给到什么量级?欢迎贴出经验值讨论。

