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 四个概念的关系
这四个概念不是孤立的。它们共同决定了你的芯片能不能稳定工作。我画了一张图,帮你理清它们之间的关系:
从这张图你能看出来,建立时间和保持时间是一对矛盾体。时钟偏斜和时钟抖动则是外部影响因素。实际项目中,你需要在它们之间找到平衡点。
我的经验:做时序收敛时,先看建立时间,再看保持时间。因为建立时间跟频率直接相关,决定了芯片能跑多快。保持时间通常可以通过插buffer来解决,代价是面积和功耗。
1.6 实际项目中的避坑指南
最后分享几个我在项目中踩过的坑,希望能帮你少走弯路:
- 别忽略OCV:我曾经以为工艺角仿真就够了,结果忘了考虑OCV(片上工艺偏差)。同一个芯片上,不同位置的管子速度不一样,时序分析必须把这个算进去。
- 时钟门控要小心:加了时钟门控的路径,建立时间和保持时间都要重新检查。我见过有人只检查了建立时间,保持时间直接红了。
- 复位路径也要做时序:很多人只检查数据路径,复位路径随便搞。结果芯片复位时出现亚稳态,整个系统初始化就挂了。
- 跨时钟域处理:不同时钟域之间传数据,一定要做同步处理。直接用寄存器打两拍是最基本的,但别忘了检查CDC路径的时序。
重要提醒:时序分析不是一次性的工作。从综合到布局布线,每一步都要重新做时序检查。我见过太多人只在最后一步做STA,结果发现时序不收敛,整个后端要重来。
好了,这四个基础概念就讲到这里。记住一句话:时序分析不是理论题,是实战题。每个参数背后都有无数个流片失败的教训。理解了它们,你的芯片设计之路会顺畅很多。
可可精品资料库