2. 时序路径分类:四大路径类型
做时序分析,说白了就是搞清楚信号从哪出发、到哪结束。我刚开始接触STA时,面对一堆路径报告头都大了。后来老工程师告诉我:别慌,所有路径就四种类型。你把这四种搞明白,STA就入门了一半。
这四种路径分别是:
- 寄存器到寄存器路径(Reg-to-Reg)
- 输入到寄存器路径(Input-to-Reg)
- 寄存器到输出路径(Reg-to-Output)
- 输入到输出路径(Input-to-Output)
嗯,咱们一个一个来看。
2.1 寄存器到寄存器路径(Reg-to-Reg)
这是最核心、最常见的路径。说白了,就是从一级触发器的时钟端,经过组合逻辑,到下一级触发器的数据输入端。
我做过一个项目,芯片里90%的时序违例都出在这类路径上。为什么?因为组合逻辑太深了,延迟太大。
关键公式:
Tclk2q + Tcomb + Tsetup ≤ Tclk - Tskew
其中:Tclk2q 是触发器输出延迟,Tcomb 是组合逻辑延迟,Tsetup 是建立时间,Tclk 是时钟周期,Tskew 是时钟偏斜。
你想想看,这条路径要是违例了,芯片就没办法在目标频率下正常工作。我曾经遇到一个案例,综合后时序报告显示setup违例0.5ns,查了半天发现是中间插了一长串加法器链。后来插了两级流水线,问题就解决了。
2.2 输入到寄存器路径(Input-to-Reg)
这条路径从芯片的输入引脚开始,经过片外逻辑(或者片内输入缓冲),再到第一级触发器的数据端。
这里有个坑:输入延迟(input delay)怎么设?设大了,内部时序太紧;设小了,外部器件可能不满足。我建议你这样做:
- 先搞清楚外部器件的输出延迟范围
- 加上PCB走线延迟
- 再留一点余量(通常0.5~1ns)
个人经验:输入路径的约束,我习惯用 set_input_delay -max 和 set_input_delay -min 分别约束最大和最小情况。别只设一个值,否则hold检查会出问题。
2.3 寄存器到输出路径(Reg-to-Output)
这条路径从最后一级触发器的时钟端,经过组合逻辑,到芯片的输出引脚。
输出路径的难点在于:你要保证数据在外部器件需要的时候已经稳定了。输出延迟(output delay)设得太小,内部时序压力大;设得太大,外部器件可能采不到正确数据。
| 参数 | 含义 | 典型值 |
|---|---|---|
| output delay -max | 外部器件需要的最大建立时间 | 2~5ns |
| output delay -min | 外部器件需要的最小保持时间 | 0.5~2ns |
| output load | 输出引脚的负载电容 | 5~20pF |
我记得有一次,输出路径的hold违例怎么都修不掉。后来发现是输出负载设得太小了,实际PCB上挂了三个芯片,电容翻了一倍。调整负载模型后,hold就过了。
2.4 输入到输出路径(Input-to-Output)
这条路径从输入引脚直接到输出引脚,中间不经过任何触发器。说白了就是纯组合逻辑路径。
注意:这种路径在同步设计中应该尽量避免。因为它不受时钟控制,延迟完全由组合逻辑和走线决定,很难保证时序。
如果设计中确实需要这种路径(比如异步复位、一些控制信号),我建议你:
- 用
set_max_delay和set_min_delay明确约束 - 尽量缩短组合逻辑深度
- 考虑加一些延迟单元来平衡
我曾经在一个接口模块里看到过这种路径,输入信号经过两级与门就直接输出了。仿真没问题,但实际芯片在高温下就出错了。后来加了一级触发器做同步,问题就解决了。
2.5 四种路径的关系图
下面这张图展示了四种路径在芯片中的位置关系。你看一眼就明白了。
2.6 四种路径的约束要点
不同路径的约束方法不一样。我整理了一个表格,方便你对照:
| 路径类型 | 需要约束什么 | 常用命令 | 常见问题 |
|---|---|---|---|
| Reg-to-Reg | 时钟周期、时钟偏斜 | create_clock |
组合逻辑太深导致setup违例 |
| Input-to-Reg | 输入延迟、外部器件时序 | set_input_delay |
input delay设错导致内部时序过紧 |
| Reg-to-Output | 输出延迟、输出负载 | set_output_delay |
输出负载模型不准确 |
| Input-to-Output | 最大/最小延迟 | set_max_delay / set_min_delay |
路径不受时钟控制,延迟难保证 |
避坑指南:我曾经在项目中只约束了Reg-to-Reg路径,忽略了输入输出路径。结果流片回来,芯片内部逻辑跑得飞快,但跟外部器件通信时老是出错。从那以后,我每次做STA都会把四种路径全部检查一遍,一个都不漏。
好了,这四种路径你记住了吗?说白了就是:信号从哪来、到哪去。搞清楚了这些,后面学STA约束和优化就轻松多了。