4、时序告警概念:什么是时序告警、建立时间与保持时间、时序路径分类

各位同学,咱们今天聊点实在的。

时序告警,说白了就是芯片在跑的时候,某个信号没在规定时间内到达该去的地方。我刚开始接触这玩意儿的时候,觉得不就是个告警嘛,改改约束就行了。结果有一次,一个时序违例没处理干净,流片回来芯片在高温下直接罢工……嗯,从那以后我再也不敢小看任何一条时序告警了。

4.1 什么是时序告警

时序告警,就是静态时序分析(STA)工具告诉你:你的设计在某个路径上,时序不满足要求。

你想想看,芯片里成千上万个寄存器,每个都要在时钟沿到来时稳定地采到数据。如果数据来得太晚,或者变化得太快,寄存器就可能采到错误的值。这就是时序违例,也就是我们常说的时序告警。

我个人习惯把时序告警分成两类:

  • 建立时间违例:数据到得太晚,寄存器来不及稳定
  • 保持时间违例:数据变化得太快,寄存器还没采完就变了

这两种违例,修复思路完全不同。咱们下面细说。

核心要点:时序告警不是bug,而是设计在时序上的不满足。它可能来自路径太长、组合逻辑太多、时钟频率太高,或者约束写错了。

4.2 建立时间与保持时间

这两个概念,是时序分析的基石。我见过不少工程师,做了好几年设计,对这两个概念还是模模糊糊。咱们今天一次讲透。

4.2.1 建立时间(Setup Time)

建立时间,指的是在时钟有效沿到来之前,数据必须保持稳定的最短时间。

为什么要有这个要求?因为寄存器内部需要时间把数据锁存进去。如果数据在时钟沿快到了才变,寄存器可能锁到一个中间值,那就乱套了。

我曾经在一个项目中,遇到一个建立时间违例,路径上组合逻辑太多,数据从A寄存器传到B寄存器,中间经过了七八级逻辑。结果数据到达B寄存器的时候,已经比时钟沿晚了0.2ns。这就是典型的建立时间违例。

我的经验:修复建立时间违例,最直接的办法就是插流水线(pipeline)。把长路径切成两段,中间加一级寄存器。代价是增加一个时钟周期的延迟,但时序就满足了。

4.2.2 保持时间(Hold Time)

保持时间,指的是在时钟有效沿到来之后,数据必须保持稳定的最短时间。

这个要求是为了防止数据变化太快,寄存器还没锁存完就变了。保持时间违例通常发生在路径太短、组合逻辑太少的情况下。

我记得有一次,一个同事设计的电路,两个寄存器之间就隔了一个反相器。结果保持时间违例了,因为数据从第一个寄存器出来,经过反相器,几乎瞬间就到了第二个寄存器。时钟沿一来,第二个寄存器还没来得及锁存,数据就变了。

注意:保持时间违例和时钟频率无关!即使你把时钟降到1Hz,保持时间违例依然存在。因为它是数据变化太快导致的,不是数据到得太晚。修复方法通常是加buffer,增加路径延迟。

咱们用一张表来对比一下:

对比项 建立时间违例 保持时间违例
根本原因 数据到得太晚 数据变化太快
与时钟频率关系 相关,降频可缓解 无关,降频无效
常见修复方法 插流水线、优化组合逻辑 加buffer、增加路径延迟
典型表现 路径太长、组合逻辑太多 路径太短、扇出太小

4.3 时序路径分类

搞清楚了建立时间和保持时间,咱们再来看看时序路径。STA工具会把所有路径分成几类,每一类的分析方法和约束写法都不一样。

我个人习惯把时序路径分为以下四种:

  1. 输入到寄存器路径:从芯片的输入端口到第一个寄存器的数据端
  2. 寄存器到寄存器路径:从一个寄存器的输出到下一个寄存器的数据端
  3. 寄存器到输出路径:从最后一个寄存器的输出到芯片的输出端口
  4. 输入到输出路径:从芯片的输入端口直接到输出端口(纯组合路径)

其中,寄存器到寄存器路径是最常见的,也是我们最需要关注的。我建议你每次做STA时,先看这类路径的违例情况,因为它们直接反映了设计的核心时序质量。

下面我用一张图来展示这四种路径的关系:

时序路径分类示意图 输入端口 寄存器1 寄存器2 输出端口 路径①:输入→寄存器 路径②:寄存器→寄存器 路径③:寄存器→输出 路径④:输入→输出(纯组合路径) 时钟信号 图例 输入到寄存器路径 寄存器到寄存器路径 寄存器到输出路径 输入到输出路径

在实际项目中,我建议你重点关注路径②(寄存器到寄存器)。因为这类路径占了时序违例的绝大多数,而且修复起来相对可控。路径①和路径③通常受IO约束影响,需要和芯片外部接口配合调整。路径④嘛,能不用就不用,纯组合路径在高速设计中很容易出问题。

一个小技巧:当你拿到STA报告时,先按路径类型分组。看看哪类路径违例最多,然后集中精力解决。不要东一榔头西一棒子,那样效率很低。

好了,关于时序告警的基本概念,咱们就聊到这儿。记住一句话:时序告警不可怕,可怕的是你不知道它为什么发生。搞清楚了建立时间、保持时间和路径分类,你就已经迈出了时序分析的第一步。

本章小结:

  • 时序告警是STA工具告诉你时序不满足
  • 建立时间违例:数据到得太晚,可插流水线修复
  • 保持时间违例:数据变化太快,可加buffer修复
  • 时序路径分四类,寄存器到寄存器路径最常见

可可精品资料库