3. 建立时间与保持时间:时序检查的核心

各位同学,今天我们来聊聊时序分析里最基础、也最重要的两个概念——建立时间和保持时间。说实话,我刚入行那会儿,觉得这玩意儿就是背定义、套公式。直到有一次,我负责的一个高速接口模块在仿真时一切正常,流片回来却死活抓不到数据……嗯,从那以后,我才真正理解了这两个“时间”的分量。

3.1 建立时间(Setup Time)定义与检查

建立时间,说白了就是:在时钟有效沿到来之前,数据信号必须提前稳定下来的最短时间。

你想想看,触发器内部有个“判决窗口”。时钟沿来临时,它需要一小段时间来“看清”输入数据是0还是1。如果数据在时钟沿前还在跳变,触发器就可能读到错误的值。

核心公式(建立时间检查):

T_launch + T_co + T_data_path + T_setup ≤ T_capture + T_cycle

其中:

  • T_launch:发射时钟路径延迟
  • T_co:触发器的时钟到输出延迟
  • T_data_path:组合逻辑路径延迟
  • T_setup:触发器的建立时间要求
  • T_capture:捕获时钟路径延迟
  • T_cycle:时钟周期

我在项目中遇到过这样一个案例:一个设计在慢速工艺角下setup slack为负。当时我排查了很久,发现是综合工具把一条关键路径的buffer插得太多了。解决办法很简单——手动调整逻辑级数,或者用更高驱动强度的单元。

3.2 保持时间(Hold Time)定义与检查

保持时间则是:在时钟有效沿之后,数据信号必须保持稳定的最短时间。

为什么要有保持时间?因为时钟沿过去后,触发器内部的“锁存器”还需要一小段时间来把数据真正锁住。如果数据在这期间就变了,那之前采到的值可能被“冲掉”。

核心公式(保持时间检查):

T_launch + T_co + T_data_path ≥ T_capture + T_hold

其中:

  • T_hold:触发器的保持时间要求
  • 其他参数与建立时间检查相同

⚠️ 特别注意:保持时间违例通常比建立时间违例更棘手。因为建立时间可以通过降低频率来“救”,但保持时间违例是物理上的——你降频也没用。我曾经在一个28nm的项目中,因为时钟树综合时没处理好时钟偏斜,导致保持时间违例遍布整个芯片。最后不得不插入大量延迟单元,面积和功耗都涨了不少。

3.3 时序裕量(Slack)概念

Slack,就是时序裕量。它告诉你:当前路径离“违例”还有多少余量。

公式很简单:

Setup Slack = (T_capture + T_cycle) - (T_launch + T_co + T_data_path + T_setup)
Hold Slack  = (T_launch + T_co + T_data_path) - (T_capture + T_hold)

Slack为正,说明时序满足;Slack为负,说明违例了。

💡 我的个人习惯:在项目初期,我会把setup slack目标设为时钟周期的5%~10%作为余量。这样即使后期有ECO(工程变更)或工艺波动,也不容易出问题。但保持时间slack,我一般要求至少为正即可,不要留太大余量——因为插入太多延迟单元反而会增加功耗和面积。

3.4 知识体系图

下面这张图,是我自己总结的时序检查核心逻辑。你看一遍,应该就能把建立时间、保持时间和slack的关系串起来:

时序检查核心知识体系 时序检查 建立时间 (Setup) 保持时间 (Hold) 时序裕量 (Slack) 数据路径延迟 时钟偏斜 最小路径延迟 时钟抖动 Setup Slack Hold Slack 关键原则 Setup Slack ≥ 0:数据必须在时钟沿前稳定 Hold Slack ≥ 0:数据必须在时钟沿后保持

3.5 实际项目中的避坑指南

讲完理论,我分享几个实战中容易踩的坑:

  1. 别忽略时钟偏斜:我曾经在一个项目中,setup slack算出来是正的,但流片后就是有问题。后来发现是时钟树综合时,时钟偏斜比预期大了很多。记住:时钟偏斜会同时影响setup和hold,而且方向可能相反。
  2. 保持时间检查要“悲观”:我建议在做hold检查时,用最差的工艺角(比如slow corner)和最差的电压温度条件。因为hold违例一旦发生,基本没有补救措施。
  3. 别只看最差路径:有些工程师只盯着WNS(最差负slack)看。但有时候,一条路径的slack是正的,但它的扇出很大,导致其他路径出问题。我习惯用报告把所有violation路径都过一遍。

💡 一个小技巧:在做setup检查时,可以先把时钟周期设为目标频率的80%,跑一遍STA。如果这样还有违例,那说明你的逻辑路径可能太深了,需要重新考虑流水线设计。如果通过了,再逐步提高频率到目标值。

3.6 总结

建立时间、保持时间和时序裕量,这三个概念是时序分析的基石。说白了,setup检查保证数据“来得早”,hold检查保证数据“走得晚”,而slack就是告诉你还有多少余量。

我见过不少新手,一上来就盯着工具报的violation列表看,却搞不清这些违例到底意味着什么。其实,你只要记住一句话:setup违例可以降频救,hold违例只能改设计。嗯,这句话够你用到很多项目里了。

可可精品资料库