3. 时序分析基础:时序路径的定义,建立时间与保持时间,时钟周期与频率
好,咱们进入正题。时序分析,说白了就是回答一个问题:你的芯片到底能跑多快?
我刚开始做后端时,觉得时序分析就是跑个工具,看看有没有红色violation。后来吃过亏才明白——不理解时序的本质,你连工具报的错都看不懂。今天咱们就把最基础的三块内容掰开揉碎了讲清楚。
3.1 时序路径:信号走的每条路,都得算清楚
什么是时序路径?很简单——信号从起点到终点走过的路。
在芯片里,时序路径通常分四类:
- 输入到寄存器:从芯片引脚到第一个触发器的D端
- 寄存器到寄存器:从触发器的时钟端到下一个触发器的D端(最常见)
- 寄存器到输出:从最后一个触发器的Q端到芯片输出引脚
- 输入到输出:纯组合逻辑路径,没有寄存器
我个人习惯把路径想象成一条「接力赛道」。每个触发器就是一个接力点,组合逻辑就是中间的跑道。信号从起点出发,经过组合逻辑的延迟,最终到达终点。
关键点:每条路径都有起点和终点。起点通常是时钟引脚或输入端口,终点是触发器的数据端或输出端口。STA工具会枚举所有可能的路径,一条一条检查。
我在项目中遇到过一种情况:工具报了上千条violation,我一看,全是同一个模块的输入到输出路径。后来发现是约束没写对,工具默认用了很紧的约束。所以啊,路径定义清楚,约束才能写对。
3.2 建立时间与保持时间:触发器的两个「脾气」
每个触发器都有两个硬性要求:
- 建立时间(Setup Time, Tsu):数据必须在时钟沿到来之前稳定下来,这个提前量就是建立时间。
- 保持时间(Hold Time, Th):数据必须在时钟沿到来之后继续保持稳定,这个保持时长就是保持时间。
你想想看,触发器就像一个「拍照」的相机。时钟沿就是按下快门的瞬间。建立时间要求你在按下快门之前摆好pose,保持时间要求你按下快门之后别乱动。
我的经验:建立时间 violation 通常可以通过降低频率或优化组合逻辑来解决。保持时间 violation 更麻烦,因为它和频率无关,只能靠加 buffer 或调整路径延迟来修。
我曾经在一个28nm的项目里,遇到一个保持时间 violation,修了整整三天。最后发现是时钟树综合时,某个分支的时钟延迟比数据路径还大,导致数据「跑得太快」——说白了就是数据比时钟还早到达,违反了保持时间。
这里有个公式,大家记一下:
建立时间检查:T_clk + T_skew > T_co + T_logic + T_su
保持时间检查:T_co + T_logic > T_hold + T_skew
其中:
- T_clk:时钟周期
- T_skew:时钟偏斜(两个触发器的时钟到达时间差)
- T_co:触发器时钟到输出的延迟
- T_logic:组合逻辑延迟
- T_su:建立时间
- T_hold:保持时间
注意:建立时间检查用的是最慢路径(max delay),保持时间检查用的是最快路径(min delay)。这两个检查的 corner 不同,千万别搞混了。
3.3 时钟周期与频率:芯片的「心跳」
时钟周期和频率的关系,小学生都知道:
频率 = 1 / 周期
比如1GHz的时钟,周期就是1ns。但实际设计中,你不可能让所有路径都在1ns内完成。为什么呢?因为还有时钟不确定性、片上波动、温度电压变化等等。
我一般会留10%~20%的余量。比如目标频率是1GHz,我会按0.9ns的周期去约束,这样流片回来才有把握。
| 目标频率 | 理论周期 | 实际约束周期(留10%余量) |
|---|---|---|
| 1 GHz | 1.000 ns | 0.900 ns |
| 500 MHz | 2.000 ns | 1.800 ns |
| 200 MHz | 5.000 ns | 4.500 ns |
嗯,这里要注意:时钟周期决定了你能跑多快,但建立时间和保持时间决定了你能不能跑那么快。三者是联动的,缺一不可。
3.4 本章知识体系
下面这张图,是我自己画的,把本章的核心逻辑串起来了:
这张图你看懂了吗?时序路径是「检查范围」,建立/保持时间是「检查标准」,时钟周期是「检查目标」。三者缺一不可,共同构成了STA的基石。
一句话总结:时序分析就是检查每条路径上的数据,能不能在时钟周期内满足建立时间和保持时间的要求。做不到,芯片就废了。
好了,这一章的内容就这些。下一章咱们会深入讲时钟约束怎么写,那是STA里最容易出错的地方。到时候我会分享几个我踩过的坑,保证让你少走弯路。
可可精品资料库