时序路径:时序路径的组成与四种基本类型

好,咱们今天聊聊时序路径。这玩意儿,说白了就是STA分析的基本单元。你想想看,整个芯片里成千上万的寄存器,它们之间怎么传递数据?就是靠这些路径。

我记得刚入行那会儿,带我的老工程师跟我说:“小子,搞懂路径,STA你就学会了一半。”当时我不信,后来踩了不少坑才明白——这话一点不假。

时序路径的三大要素

一条完整的时序路径,由三部分组成:

  • 起点(Startpoint):数据从哪里出发
  • 组合逻辑(Combinational Logic):数据经过的中间电路
  • 终点(Endpoint):数据最终到达哪里

嗯,就这么简单。但实际项目中,这三个要素的细节可不少。

起点

起点通常是时序单元的时钟引脚。具体来说:

  • 触发器的时钟引脚(CK pin)
  • 输入端口(Input Port)

我个人习惯把输入端口也当作起点。为什么?因为数据从芯片外部进来,它没有前一级的时序信息,STA工具只能从输入端口开始算。

终点

终点是数据被捕获的地方:

  • 触发器的数据输入引脚(D pin)
  • 输出端口(Output Port)

这里有个坑——我曾经以为只有寄存器D端才算终点。后来发现,输出端口也是终点,因为外部电路要用你的数据,你得保证它按时到达。

组合逻辑

起点和终点之间,就是组合逻辑。包括:

  • 与门、或门、非门等基本门电路
  • 多路选择器(MUX)
  • 加法器、比较器等运算单元
  • 各种连线(Net)

说白了,就是一堆逻辑门串在一起。路径越长,延迟越大,时序越紧张。

核心要点:一条路径 = 起点 + 组合逻辑 + 终点。缺一不可。

四种基本路径类型

STA把路径分成四类。这四种类型,覆盖了芯片里所有的时序检查场景。

类型 起点 终点 典型场景
输入到寄存器 输入端口 寄存器D端 片外数据进入芯片
寄存器到寄存器 寄存器CK端 寄存器D端 内部流水线
寄存器到输出 寄存器CK端 输出端口 数据送出芯片
输入到输出 输入端口 输出端口 纯组合路径

1. 输入到寄存器路径

这种路径从输入端口开始,经过组合逻辑,到达寄存器的D端。

你想想看,外部信号什么时候到达?不确定。所以我们需要约束输入延迟(input delay),告诉工具:信号大概在时钟沿之后多久才稳定。

我在项目中遇到过一个问题——输入延迟设得太乐观,结果芯片回来后,外部数据总是采错。后来把input delay放宽了0.5ns,问题就解决了。

2. 寄存器到寄存器路径

这是最常见的路径。一个寄存器的Q端输出,经过组合逻辑,送到下一个寄存器的D端。

STA工具会检查:

  • 建立时间(setup):数据必须在下一个时钟沿之前到达
  • 保持时间(hold):数据必须在时钟沿之后保持稳定

说白了,就是看数据能不能在时钟周期内跑完这段路。

小技巧:如果setup违例,可以插流水线(加寄存器)。如果hold违例,可以加buffer延迟。但别乱加——我曾经为了修hold,加了太多buffer,结果setup反而更差了。

3. 寄存器到输出路径

从寄存器的CK端开始,经过组合逻辑,到达输出端口。

这种路径需要约束输出延迟(output delay)。外部电路需要多少时间才能采到你的数据?这个时间就是output delay。

嗯,这里要注意:output delay是相对于时钟沿的。如果设得太小,外部电路可能来不及采数据。

4. 输入到输出路径

这种路径没有寄存器,直接从输入端口到输出端口。纯组合逻辑。

说实话,这种路径在同步设计中不太常见。但有些特殊场景会用到,比如异步复位信号、一些控制信号。

我曾经在一个项目中,把复位信号设计成了输入到输出路径。结果STA报了一堆违例——因为复位信号没有时钟约束。后来加了虚拟时钟(virtual clock)才搞定。

警告:输入到输出路径没有时钟沿约束,STA工具默认不做检查。你必须手动添加set_max_delay或set_input_delay/set_output_delay约束。否则,这条路径就是“裸奔”状态。

路径分析的底层逻辑

你可能会问:为什么STA要分这四种路径?

原因很简单——每种路径的约束方式不同。

  • 寄存器到寄存器:靠时钟周期约束
  • 输入到寄存器:靠input delay + 时钟周期
  • 寄存器到输出:靠output delay + 时钟周期
  • 输入到输出:靠set_max_delay或input/output delay组合

说白了,STA工具就是沿着这些路径,一条一条地算延迟,然后跟约束做比较。超了就报违例,没超就通过。

我个人习惯,在写约束之前,先画一张路径图。把所有的起点、终点、组合逻辑标出来。这样写约束的时候,心里有数,不容易漏。

嗯,今天就聊到这儿。下一章咱们聊聊时钟约束——这可是STA的“灵魂”。