时序路径:四种路径的实战分析

做时序分析,说白了就是搞清楚信号在芯片里怎么跑、跑了多久。我刚开始接触STA时,觉得路径分类很枯燥,不就是起点到终点嘛。直到有一次,一个输入到寄存器的路径死活不满足时序,我才意识到——每种路径都有自己的脾气。

今天咱们就聊聊这四种路径:输入到寄存器、寄存器到寄存器、寄存器到输出、输入到输出。嗯,这是STA的四大基本盘。

1. 输入到寄存器路径(Input to Register)

这条路径从芯片的输入端口开始,到第一个寄存器的数据端结束。说白了,就是外部信号进来后,能不能在时钟沿到来前稳定下来。

核心公式:

输入延时 + 组合逻辑延时 + 建立时间 ≤ 时钟周期

我在项目中遇到过一个问题:一个SPI接口的输入路径,外部器件给的信号延时很大,导致内部寄存器老是采到错误数据。后来我加了一级延迟链,才把时序修回来。

检查要点:

  • 输入延时约束要准确——别信datasheet上的典型值,要看最差情况
  • 组合逻辑尽量简单,别在这条路径上堆太多门
  • 时钟抖动和偏移也要算进去,我习惯留10%的余量

我的习惯:做输入路径时,我会先看外部器件的输出延时,再反推内部需要多少组合逻辑。如果发现余量不够,就加一级寄存器打拍。

2. 寄存器到寄存器路径(Register to Register)

这是最经典的路径,也是STA分析的核心。一个寄存器的输出,经过组合逻辑,到下一个寄存器的输入。

你想想看,这条路径占了芯片里90%以上的时序路径。为什么?因为大部分数据都是在寄存器之间流动的。

核心公式:

时钟到Q延时 + 组合逻辑延时 + 建立时间 ≤ 时钟周期

我曾经踩过一个坑:一个多周期路径,我忘了设set_multicycle_path约束,结果工具按单周期去检查,报了一堆违例。后来我花了整整两天才排查出来——其实只要加一条约束就解决了。

分析步骤:

  1. 确认时钟域——跨时钟域要特殊处理
  2. 看组合逻辑深度——太深就插寄存器
  3. 检查时钟偏斜——偏斜太大也会导致违例

注意:寄存器到寄存器的路径,最容易出问题的是跨时钟域。我建议用同步器或者FIFO来处理,别指望STA工具能自动搞定。

3. 寄存器到输出路径(Register to Output)

这条路径从最后一个寄存器开始,到芯片的输出端口结束。说白了,就是内部数据怎么送到芯片外面去。

我记得有一次做DDR接口,输出路径的时序特别紧。因为外部器件对输出数据的建立时间要求很苛刻,我不得不把输出寄存器放在IO附近,减少走线延迟。

核心公式:

时钟到Q延时 + 组合逻辑延时 + 输出延时 ≤ 时钟周期

实战建议:

  • 输出寄存器尽量靠近IO pad——减少走线延迟
  • 输出延时约束要包含外部负载的影响
  • 如果输出路径太长,考虑用双沿触发或者DDR

我的经验:做输出路径时,我会先看外部器件的建立时间要求,然后反推内部需要多少余量。如果发现不够,就加一级输出寄存器打拍。

4. 输入到输出路径(Input to Output)

这条路径从输入端口直接到输出端口,中间不经过任何寄存器。说白了,就是纯组合逻辑路径。

嗯,这条路径在STA里比较特殊。因为它没有时钟约束,所以时序分析主要看组合逻辑的延迟。

核心公式:

输入延时 + 组合逻辑延时 + 输出延时 ≤ 外部器件要求的延迟

我曾经遇到一个案例:一个异步接口,输入到输出路径的延迟要求是10ns以内。我一开始没注意,结果仿真发现延迟到了12ns。后来我优化了组合逻辑,把一些冗余门去掉,才降到8ns。

处理策略:

  • 尽量加寄存器——把输入到输出变成输入到寄存器+寄存器到输出
  • 如果必须纯组合,那就精简逻辑,减少门级数
  • 考虑用查找表或者MUX代替复杂组合逻辑

注意:输入到输出路径最容易受PVT影响。我建议在关键路径上加一些冗余设计,比如多留一些余量。

四种路径的对比

路径类型 起点 终点 关键约束 常见问题
输入到寄存器 输入端口 寄存器数据端 输入延时 外部信号不稳定
寄存器到寄存器 寄存器输出 寄存器数据端 时钟周期 组合逻辑太深
寄存器到输出 寄存器输出 输出端口 输出延时 外部负载影响
输入到输出 输入端口 输出端口 组合延迟 PVT影响大

知识体系图

时序路径四大分类 时序路径 输入 → 寄存器 Input to Register 寄存器 → 寄存器 Register to Register 寄存器 → 输出 Register to Output 输入 → 输出 Input to Output 关键:时钟约束 | 组合逻辑深度 | 外部延时 | PVT影响

这张图把四种路径的关系画清楚了。你看,寄存器到寄存器是核心,其他三种都是跟外部打交道的。我个人觉得,做STA时先把寄存器到寄存器搞定,再处理其他三种,思路会清晰很多。

总结一下:

  • 输入到寄存器——看外部延时和建立时间
  • 寄存器到寄存器——看组合逻辑深度和时钟周期
  • 寄存器到输出——看输出延时和外部负载
  • 输入到输出——尽量加寄存器,否则看组合延迟

嗯,这四种路径搞清楚了,STA就算入门了。下次遇到时序违例,先看看是哪条路径,再对症下药。

可可精品资料库