2、时序路径的构成:起点、终点、组合逻辑、时钟定义

好,咱们来聊聊时序路径的构成。说白了,一条时序路径就是数据从某个起点出发,经过一堆组合逻辑,最终到达终点,并且整个过程都要受时钟节拍的控制。

我刚开始学STA时,总觉得这东西很抽象。后来带我的老工程师跟我说了一句话,我到现在还记得——「你只要搞清楚数据从哪里来、到哪里去、中间干了什么、什么时候干,路径就清楚了。」嗯,这句话我一直记着。

2.1 路径的起点(Startpoint)

路径的起点,就是数据开始出发的地方。在STA里,起点通常有两种:

  • 时钟引脚(Clock Pin):触发器的时钟端。时钟沿一来,数据就从Q端开始往外跑。
  • 输入端口(Input Port):芯片的输入引脚。外部数据从这里进入芯片内部。

我个人习惯把起点想象成「发令枪响的地方」。时钟沿就是那个枪声,数据听到枪声就开始跑。

关键点:起点一定是时序单元的时钟端,或者是顶层输入端口。组合逻辑的门输出不能作为起点。

2.2 路径的终点(Endpoint)

终点,就是数据最终要到达的地方。同样有两种:

  • 数据引脚(Data Pin):触发器的D端。数据要在这里被采样,等待下一个时钟沿。
  • 输出端口(Output Port):芯片的输出引脚。数据从这里送出芯片。

你想想看,终点其实就是「数据要被用掉的地方」。要么被触发器存起来,要么被送出芯片给外部用。

注意:我曾经遇到过一位同事,把组合逻辑的输出也当成终点去约束,结果时序报告里一堆莫名其妙的违例。记住,终点只能是触发器的D端或输出端口。

2.3 组合逻辑(Combinational Logic)

组合逻辑就是起点和终点之间的「路」。这条路可能很简单——就一根线直连;也可能很复杂——经过几十级门电路。

组合逻辑的延迟,是时序分析里最核心的计算对象。它由两部分组成:

  • 单元延迟(Cell Delay):每个门电路本身的延迟,跟输入转换时间和输出负载有关。
  • 互连线延迟(Net Delay):金属连线带来的RC延迟,工艺越先进,这个占比越大。

我记得在28nm以下工艺时,互连线延迟经常占到总延迟的60%以上。那时候我们做时序收敛,光优化逻辑级数已经不够了,还得盯着绕线看。

小技巧:分析组合逻辑路径时,我习惯先看逻辑级数。一般来说,7-8级以内是比较安全的。超过10级,就要小心了——除非你频率很低。

2.4 时钟定义(Clock Definition)

时钟是时序路径的「节拍器」。没有时钟,时序分析就无从谈起。

时钟定义包含几个关键参数:

参数 说明 我的经验
周期(Period) 时钟重复的时间间隔 这是最基础的,但很多人会忽略时钟抖动
占空比(Duty Cycle) 高电平时间占周期的比例 一般50%,但DDR接口会用到45%/55%
时钟沿(Edge) 上升沿还是下降沿触发 大部分用上升沿,但要注意混合沿路径
时钟不确定性(Uncertainty) 包含抖动和偏斜的余量 我一般留周期5%-10%的余量

在SDC约束文件里,时钟定义长这样:

create_clock -name clk -period 10.0 [get_ports clk]
set_clock_uncertainty -setup 0.5 [get_clocks clk]
set_clock_latency -source 0.2 [get_clocks clk]

这里我多说一句:时钟延迟(Latency)分两种——源延迟(Source Latency)和网络延迟(Network Latency)。源延迟是时钟从源头到芯片引脚的时间,网络延迟是从芯片引脚到触发器时钟端的时间。很多新手只设了周期,忘了设延迟和不确定性,结果后仿真一跑就崩。

2.5 路径的完整构成

把上面四个要素串起来,一条完整的时序路径就是:

  1. 起点:时钟沿触发,数据从触发器Q端或输入端口出发
  2. 组合逻辑:数据经过一系列门电路和连线
  3. 终点:数据到达触发器D端或输出端口
  4. 时钟:控制整个过程的时序节拍

举个例子,假设你有一个两级触发器级联的电路:

FF1 (clk) --> [组合逻辑A] --> FF2 (D端)

这条路径的起点是FF1的时钟端,终点是FF2的D端,中间是组合逻辑A,时钟是clk。STA工具会计算:从clk的上升沿到FF1的Q端输出,再经过组合逻辑A,最终到达FF2的D端,这个总延迟必须小于一个时钟周期减去建立时间。

核心公式
数据到达时间(Data Arrival Time)= 时钟延迟 + 时钟到Q延迟 + 组合逻辑延迟
数据要求时间(Data Required Time)= 时钟周期 + 时钟延迟 - 建立时间
建立时间余量(Setup Slack)= 数据要求时间 - 数据到达时间

嗯,这个公式我建议你背下来。做时序分析,说白了就是在算这个余量。余量大于0,路径就满足时序;小于0,就违例了。

我曾经在一个项目里,有一条路径的建立时间余量只有2ps。2ps是什么概念?大概就是一根头发丝直径的千分之一的时间。我们花了整整两周去优化那条路径,最后通过调整时钟相位和减少一级逻辑才搞定。

所以,理解路径的构成,是做好时序分析的第一步。你只有知道数据从哪里来、到哪里去、中间经历了什么,才能知道怎么去优化它。