第2章 时序分析基础:建立时间、保持时间、传播时延

时序分析到底在分析什么?说白了,就是盯着三个数字:建立时间、保持时间和传播时延。

我刚开始做FPGA时,觉得STA就是个跑工具的流程活。直到有一次,一块板子在实验室跑得好好的,送到客户现场就间歇性死机。折腾了两周,最后发现是保持时间违例——从那以后,我再也不敢小看这三个概念了。

2.1 建立时间(Setup Time)

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

你可以把时钟沿想象成一扇门。数据必须在门关上之前进入房间。如果门快关了你才冲进去,就会被夹住——这就是亚稳态。

关键公式:

Tsetup_margin = Tclk − Tco − Tcomb − Tsetup

这个裕量必须 > 0,否则你的电路就跑不到目标频率。

我在项目中遇到过一块视频处理板,1080p@60fps没问题,一上4K就花屏。查了半天,是组合逻辑路径太长,导致建立时间裕量不足。最后拆了两级流水线才解决。

为什么会这样?因为频率翻倍后,时钟周期缩短,数据没有足够时间从上一级传到下一级。你想想看,这就好比物流公司承诺24小时到货,但你改成12小时,运输车还在路上呢,下一班飞机已经起飞了。

2.2 保持时间(Hold Time)

定义:在时钟有效沿过去之后,数据输入必须保持稳定的最短时间。

建立时间管的是"数据来得太晚",保持时间管的是"数据走得太早"。数据在时钟沿采完之后,不能马上变掉,否则下一级寄存器就会读到不确定的值。

⚠️ 保持时间违例比建立时间更隐蔽

建立时间违例通常降频就能跑,而保持时间违例跟频率无关——你降频也没用。我曾经在一个SDRAM控制器项目里,综合后仿真全过,上板就随机读写错误。折腾了三天,最后发现是保持时间违例,在数据路径上插了两级缓冲才搞定。

保持时间的检查公式:

Thold_margin = Tco + Tcomb − Thold

这个裕量也必须 > 0。注意它跟时钟周期没关系,所以降频解决不了保持时间问题。

2.3 传播时延(Propagation Delay)

定义:信号从输入到输出所经历的时间。在时序路径里,它由两部分组成:

  • Tco:触发器的时钟端到输出端(CLK→Q)的延迟
  • Tcomb:组合逻辑(门电路、走线)的延迟

传播时延不是固定值,它跟温度、电压、制造工艺都有关。这就是为什么STA要分多个工艺角(slow、fast、typical)去检查。

💡 我的习惯

做时序约束时,我通常会先看slow corner的建立时间,再看fast corner的保持时间。因为slow corner下路径最慢,最容易出现建立时间违例;fast corner下路径最快,最容易出现保持时间违例。

传播时延和建立时间是一对"矛盾":路径延迟越大,留给建立时间的窗口就越小。所以当你发现建立时间违例时,要么减短组合逻辑,要么降低频率,要么用PLL调相位。

2.4 三者关系与对比

这三个参数不是孤立的。它们在一个时钟周期里互相制约:

参数 关注点 违例后果 常见修复手段
建立时间 数据来得够不够早 亚稳态、功能错误 加流水线、降低频率、优化组合逻辑
保持时间 数据走的是不是太快 数据穿透、随机错误 插缓冲、加延迟、调整PLL相位
传播时延 信号从起点到终点的总时间 直接决定最高工作频率 优化逻辑级数、使用更快器件

三者的核心约束可以总结为两个不等式:

  1. 建立时间约束:Tclk > Tco + Tcomb + Tsetup
  2. 保持时间约束:Tco + Tcomb > Thold

你再看一遍——保持时间的公式里没有Tclk。这就是为什么我说它跟频率无关,很多人在这里栽过跟头。

图2-1 时序路径与建立/保持时间窗口 数据路径 CLK FF1 组合逻辑 FF2 Tco Tcomb 时序波形 CLK Q1 D2 Tsetup Thold Tpd = Tco+Tcomb 参数说明 Tco :CLK→Q延迟 Tcomb:组合逻辑延迟 Tsetup:建立时间窗口 Thold :保持时间窗口

💡 快速记忆口诀

建立时间——"早到早到,晚了不要"
保持时间——"走了别回,走了别追"
传播时延——"路上多久,心里有数"

✅ 本章核心要点

  • 建立时间看"路径是否太长"——频率越高越容易违例
  • 保持时间看"路径是否太短"——跟频率无关,降频没用
  • 传播时延是前两者的"桥梁",它决定了建立时间的裕量,也影响着保持时间的风险
  • STA的核心就是同时满足建立时间和保持时间两个不等式

⚠️ 避坑提醒

我曾经在项目里只看建立时间,保持时间直接丢给工具自动修。结果tapeout回来的芯片在低温下全挂——因为fast corner下保持时间违例全部暴露了。从那以后,我每次做STA都会把两个corners的检查分开跑,确保都过。