1. 时序分析基础:建立时间与保持时间的概念、时序路径分类、时钟周期与频率的关系

各位同学,咱们今天聊聊时序分析最基础的东西。说实话,我刚入行那会儿,觉得时序分析就是跑个工具看看有没有红色报错。后来吃过亏才明白——不懂基础,你连报错都看不懂。

1.1 建立时间与保持时间

这两个概念,是时序分析的根基。我见过不少工程师,做了三五年设计,问起来还是一知半解。

建立时间(Setup Time):数据在时钟有效沿到来之前,必须保持稳定的最短时间。

保持时间(Hold Time):数据在时钟有效沿到来之后,必须保持稳定的最短时间。

说白了,就是触发器对数据有个「脾气」——你数据不能来得太晚,也不能走得太早。来得太晚,建立时间违例;走得太多,保持时间违例。

核心要点:

  • 建立时间违例 → 可以降频解决
  • 保持时间违例 → 降频没用,必须改电路

我在项目中遇到过一件事:有个模块在1.2GHz跑得好好的,换到1.0GHz反而出错了。排查了半天,原来是保持时间违例。你想想看,频率降低,建立时间裕量变大了,但保持时间跟频率没关系啊!

1.2 时序路径分类

时序路径,说白了就是数据从哪出发、到哪结束。我习惯把路径分成四类,这样分析起来思路清晰:

路径类型 起点 终点 典型场景
寄存器到寄存器 时钟引脚 时钟引脚 最核心的路径,占90%以上
输入到寄存器 输入端口 寄存器D端 片外输入数据
寄存器到输出 寄存器Q端 输出端口 片外输出数据
输入到输出 输入端口 输出端口 纯组合逻辑路径

嗯,这里要注意:第四类路径(输入到输出)在高速设计中尽量少用。为什么?因为它没有寄存器做缓冲,时序完全靠组合逻辑的延迟来保证,很难收敛。

我的经验:做时序约束时,先盯死寄存器到寄存器的路径。这条路径搞定了,其他路径就好办多了。

1.3 时钟周期与频率的关系

这个太简单了?别急,我见过有人把关系搞反的。

公式:频率 = 1 / 周期

举个例子:

  • 周期 1ns → 频率 1GHz
  • 周期 2ns → 频率 500MHz
  • 周期 10ns → 频率 100MHz

但实际设计中,我们更关心的是「这个频率下,时序能不能收敛」。说白了,就是看数据路径的延迟能不能小于时钟周期减去建立时间。

避坑指南:我曾经以为只要频率够低,时序就一定没问题。结果有一次,一个模块在100MHz下保持时间违例了。查了半天,是时钟树综合时插入了太多buffer,导致时钟偏斜太大。所以记住:频率低不代表时序好,保持时间跟频率无关!

1.4 知识体系总览

我把这一章的核心逻辑画成了一张图,方便你理解各个概念之间的关系:

时序分析基础 - 知识体系 建立时间与保持时间 Setup Time: 数据提前稳定 Hold Time: 数据保持稳定 违例后果不同 Setup可降频,Hold必须改电路 时序路径分类 Reg-to-Reg(核心) Input-to-Reg Reg-to-Output Input-to-Output 时钟周期与频率 频率 = 1 / 周期 周期决定最高频率 路径延迟 < 周期 - Setup Hold与频率无关 核心逻辑 时钟周期决定了数据必须在多长时间内完成传输 建立时间确保数据被正确采样,保持时间确保数据不被覆盖

这张图把三个核心概念串起来了。你仔细看:时钟周期决定了你能跑多快,建立时间和保持时间决定了数据能不能被正确采样,而时序路径分类帮你定位问题出在哪一段。

一个小技巧:做时序分析时,我习惯先看建立时间,再看保持时间。因为建立时间违例通常更常见,而且可以通过调整逻辑深度、插入流水线来解决。保持时间违例虽然少,但一旦出现,改起来更麻烦。

好了,这一章的内容就这些。记住:基础不牢,地动山摇。把建立时间、保持时间、时序路径、时钟周期这几个概念吃透了,后面的内容学起来就轻松多了。

可可精品资料库