1、时序分析基础概念:建立时间、保持时间、时钟偏斜、时钟抖动

做数字芯片设计,时序分析是绕不开的坎。我刚开始接触这玩意儿的时候,觉得不就是几个时间参数嘛,背下来就行了。结果第一次流片回来,芯片在高温下跑不稳,查了整整两周才发现是保持时间违例。嗯,从那以后我再也不敢小看这些基础概念了。

说白了,时序分析就是检查你的数据能不能在正确的时间点被正确捕获。今天咱们就把四个最核心的概念掰开揉碎了讲清楚。

1.1 建立时间(Setup Time)

建立时间,我习惯叫它「数据提前到达的时间」。什么意思?就是时钟有效沿到来之前,数据必须提前稳定下来的最短时间。

核心定义:在时钟有效沿到来之前,数据输入必须保持稳定的最小时间窗口。

你想想看,寄存器内部有个采样窗口。数据如果来得太晚,还没稳定时钟就来了,那采到的值可能是错的。我在一个DDR接口项目中遇到过这种情况,数据路径上组合逻辑太多,建立时间总是差那么几十皮秒。后来我们插了两级流水线才搞定。

建立时间违例的典型表现:

  • 芯片在低频下能工作,高频下就出错
  • 温度升高时故障率明显增加
  • 随机性的数据错误,不是每次都复现

我的习惯:做综合时,我会给建立时间留5%-10%的余量。别卡得太死,工艺角变化会教你做人。

1.2 保持时间(Hold Time)

保持时间跟建立时间正好相反。它要求时钟有效沿之后,数据还得再保持一段时间不能变。

为什么要有这个要求?因为寄存器内部需要时间来完成数据锁存。时钟沿过去了,但内部电路还没锁好,数据就变了,那采到的值也是错的。

注意:保持时间违例比建立时间违例更难排查。建立时间违例通常可以通过降频来验证,但保持时间违例跟频率无关,降频也没用。

我曾经在一个低功耗项目中踩过这个坑。为了省电,我们把某些路径上的buffer都优化掉了,结果保持时间直接红了。查了三天才发现是时钟树综合时没处理好,时钟偏斜太大导致的。

保持时间违例的典型表现:

  • 芯片在任何频率下都可能出错
  • 错误模式固定,比如某条数据线总是错
  • 跟温度关系不大,但跟工艺角关系很大

1.3 时钟偏斜(Clock Skew)

时钟偏斜,说白了就是同一个时钟信号到达不同寄存器的时间差。理想情况下,时钟应该同时到达所有寄存器。但现实是,时钟走线有长度、有负载、有RC延迟,到达时间不可能完全一样。

时钟偏斜有两种:

  • 正偏斜:目标寄存器的时钟比源寄存器晚到。这对建立时间有利,但对保持时间不利。
  • 负偏斜:目标寄存器的时钟比源寄存器早到。这对保持时间有利,但对建立时间不利。
偏斜类型 对建立时间的影响 对保持时间的影响
正偏斜 有利(数据有更多时间到达) 不利(数据需要保持更久)
负偏斜 不利(数据到达时间变紧) 有利(数据保持要求降低)

我记得有个项目,时钟树综合做完后,发现某个模块的时钟偏斜达到了200ps。当时我建议重新做时钟树,但项目经理嫌费时间。结果呢?后仿就发现了保持时间违例,最后还是得重做。嗯,有些时间真省不了。

1.4 时钟抖动(Clock Jitter)

时钟抖动是时钟周期的不确定性。理想时钟每个周期都一样长,但实际PLL出来的时钟,每个周期长度会有微小的变化。

抖动主要分两种:

  • 随机抖动:由热噪声、散粒噪声等引起,服从高斯分布
  • 确定性抖动:由电源噪声、串扰等引起,有规律可循

关键点:抖动直接影响的是建立时间。因为时钟周期变短了,数据可用的时间窗口就变小了。保持时间受抖动影响较小,因为保持时间只关心时钟沿之后的那一小段。

我在一个高速SerDes项目中,时钟抖动是最大的敌人。PLL输出抖动只要超过30ps,整个链路就锁不住。后来我们在电源网络上加了大量去耦电容,才把抖动压到15ps以内。

1.5 四个概念的关系

这四个概念不是孤立的。它们共同决定了你的芯片能不能稳定工作。我画了一张图,帮你理清它们之间的关系:

时序分析四大核心概念关系图 建立时间 (Setup) 数据必须在时钟沿前稳定 受时钟周期和路径延迟影响 保持时间 (Hold) 数据必须在时钟沿后保持 受时钟偏斜影响较大 时钟偏斜 (Skew) 时钟到达不同寄存器的时差 正偏斜有利Setup,不利Hold 时钟抖动 (Jitter) 时钟周期的不确定性 主要影响建立时间 相互制约 影响 影响 主要影响 核心公式:Tclk ≥ Tcq + Tlogic + Tsetup + Tskew + Tjitter 时钟周期必须大于所有延迟之和,才能保证时序收敛

从这张图你能看出来,建立时间和保持时间是一对矛盾体。时钟偏斜和时钟抖动则是外部影响因素。实际项目中,你需要在它们之间找到平衡点。

我的经验:做时序收敛时,先看建立时间,再看保持时间。因为建立时间跟频率直接相关,决定了芯片能跑多快。保持时间通常可以通过插buffer来解决,代价是面积和功耗。

1.6 实际项目中的避坑指南

最后分享几个我在项目中踩过的坑,希望能帮你少走弯路:

  • 别忽略OCV:我曾经以为工艺角仿真就够了,结果忘了考虑OCV(片上工艺偏差)。同一个芯片上,不同位置的管子速度不一样,时序分析必须把这个算进去。
  • 时钟门控要小心:加了时钟门控的路径,建立时间和保持时间都要重新检查。我见过有人只检查了建立时间,保持时间直接红了。
  • 复位路径也要做时序:很多人只检查数据路径,复位路径随便搞。结果芯片复位时出现亚稳态,整个系统初始化就挂了。
  • 跨时钟域处理:不同时钟域之间传数据,一定要做同步处理。直接用寄存器打两拍是最基本的,但别忘了检查CDC路径的时序。

重要提醒:时序分析不是一次性的工作。从综合到布局布线,每一步都要重新做时序检查。我见过太多人只在最后一步做STA,结果发现时序不收敛,整个后端要重来。

好了,这四个基础概念就讲到这里。记住一句话:时序分析不是理论题,是实战题。每个参数背后都有无数个流片失败的教训。理解了它们,你的芯片设计之路会顺畅很多。

可可精品资料库