2. 时钟树基础与Cadence实现语境
在数字后端实现中,时钟信号并不是一根理想导线,而是一张覆盖全芯片的分配网络。它从时钟源出发,经过根缓冲、主干、分支、叶节点,最终到达每一个时序单元的时钟引脚。这张网络就是时钟树。Cadence 的 Innovus 与 Tempus 把这张网络抽象为可约束、可分析、可优化的对象,本节要建立的就是“物理结构—时序参数—工具约束”三者之间的对应关系。
一、时钟树的物理结构
一个典型的时钟树从时钟定义点(create_clock 指定的源点)开始,向下分为若干层级。根节点通常位于芯片边缘或 PLL 输出附近,经过一级或多级根缓冲后进入主干;主干在芯片中部形成 H 型或鱼骨型骨架,再通过分支缓冲逐级扇出到叶节点。叶节点直接驱动触发器、锁存器或宏单元的 CK 引脚。Cadence 工具中,这条路径上的每个缓冲、反相器、时钟门控单元都被识别为时钟单元,其连线被识别为时钟网络。
理解结构的关键在于区分时钟路径与数据路径。时钟路径从时钟源到触发器 CK 端,数据路径从上一级触发器 Q 端到下一级 D 端。时序收敛的本质,就是让数据到达时间与时钟到达时间满足建立/保持关系。因此,时钟树上的任何延迟、偏差和不确定性,都会直接改变时序余量。
二、时钟延迟:源延迟与网络延迟
时钟延迟分为两部分。源延迟(source latency)指时钟从真实源点(如 PLL 输出或外部晶振)到芯片时钟定义点之间的延迟,通常由时钟源特性或板级走线决定,在 SDC 中用 set_clock_latency -source 描述。网络延迟(network latency)指从时钟定义点到触发器 CK 引脚之间的片上延迟,由时钟树综合结果决定,用 set_clock_latency 描述。
在 Cadence 语境中,时钟树综合前,工具使用预估的 network latency 进行时序分析;时钟树综合后,工具用实际提取的延迟替代预估值。如果 CTS 后不更新 latency,时序报告会严重失真。因此,Innovus 流程中通常在 ccopt_design 之后执行 set_propagated_clock,让工具基于真实时钟网络传播计算到达时间。
三、时钟偏差:全局与局部
时钟偏差(skew)是同一时钟域内两个触发器 CK 引脚到达时间之差。它分为全局偏差和局部偏差。全局偏差关注整个芯片范围内最大到达时间与最小到达时间之差;局部偏差关注相邻或同一路径上两个触发器之间的到达时间差。对建立时间而言,捕获时钟比发射时钟晚到会减少余量;对保持时间而言,捕获时钟比发射时钟早到会减少余量。
Cadence 工具在 CTS 阶段以 ccopt 引擎同时优化插入延迟和偏差。用户通过 set_clock_tree_options 指定目标偏差,例如 -target_skew 100ps。工具会在满足偏差目标的前提下尽量减小插入延迟和功耗。需要注意的是,偏差目标不是越小越好:过度收紧偏差会引入更多缓冲、增大面积和功耗,甚至恶化 OCV 余量。
四、时钟不确定性:约束表达与含义
时钟不确定性(clock uncertainty)是 SDC 中用于覆盖抖动、OCV、时钟树偏差残余和设计余量的统一参数。它通过 set_clock_uncertainty 施加,且必须分别指定 setup 和 hold 值。例如:
set_clock_uncertainty -setup 0.15 [get_clocks clk_core]
set_clock_uncertainty -hold 0.08 [get_clocks clk_core]
在 Innovus 中,setup uncertainty 会从建立时间余量中扣除,hold uncertainty 会从保持时间余量中扣除。CTS 前,uncertainty 通常包含预估 skew;CTS 后,实际 skew 已由时钟树决定,uncertainty 应相应减小,只保留 jitter、OCV 和设计余量。如果 CTS 后仍保留过大的 uncertainty,会掩盖真实偏差问题,导致过度优化。
五、Cadence 中的约束表达与检查
在 Innovus 中,时钟树约束主要通过以下命令表达:
create_clock:定义时钟源、周期和波形。set_clock_latency:设置源延迟或网络延迟。set_clock_uncertainty:设置建立/保持不确定性。set_clock_transition:设置时钟转换时间约束。set_clock_tree_options:设置 CTS 目标偏差、缓冲类型、最大电容等。
完成约束后,可用 report_clock_tree 查看时钟树结构,用 report_clock_timing -type skew 查看偏差报告,用 report_timing 检查建立/保持余量。判断时钟树是否达标,关键看三项:插入延迟是否在预算内、全局偏差是否满足目标、各叶节点转换时间是否在约束范围内。
六、参数关系小结
时钟树、延迟、偏差、不确定性四者构成一个闭环:时钟树结构决定网络延迟和偏差;偏差和抖动共同影响不确定性;不确定性又反过来约束 CTS 的优化目标。在 Cadence 工具中,这个闭环通过 SDC 约束和 CTS 引擎参数共同表达。理解每个参数在工具中的定义位置和生效阶段,是后续时钟树综合与时序收敛的基础。