第一章:时序问题的本质

1.1 建立时间与保持时间——芯片的“心跳规则”

做数字电路设计,说白了就是在跟时间打交道。每个寄存器都有两个硬性指标:建立时间(setup time)和保持时间(hold time)。

建立时间:数据在时钟有效沿到来之前,必须稳定存在的最小时间。

保持时间:数据在时钟有效沿到来之后,必须稳定保持的最小时间。

我刚开始做设计时,总觉得这两个概念就是书本上的定义。直到有一次项目上板,芯片在低温下跑得好好的,一升温就出错。排查了三天,最后发现是保持时间违例——温度升高导致走线延迟变小,数据跑得太快,把保持时间给“吃”掉了。

核心公式(简化版):

建立时间要求:T_clk_q + T_comb + T_setup ≤ T_clk_period + T_skew
保持时间要求:T_clk_q + T_comb ≥ T_hold + T_skew

其中:T_clk_q 是寄存器输出延迟,T_comb 是组合逻辑延迟,T_skew 是时钟偏斜。

1.2 为什么上板后时序会变差?

很多工程师在仿真时一切正常,一上板就出问题。为什么会这样?我总结了三个主要原因:

  1. 仿真模型太理想——仿真用的线延迟、门延迟都是典型值,而芯片实际工作时的PVT(工艺、电压、温度)变化范围很大。
  2. 时钟抖动和偏斜——仿真时时钟是完美的方波,上板后PLL输出的时钟有抖动,时钟树有偏斜,这些都会吃掉时序裕量。
  3. 信号完整性恶化——上板后的串扰、反射、电源噪声,都会让信号的实际延迟偏离STA分析值。

⚠️ 我曾经踩过的坑:

有一次做DDR3接口,STA报告setup slack有200ps,我觉得很安全。结果上板后跑压力测试,每10分钟就报一次ECC错误。后来用示波器量时钟,发现PLL输出有150ps的周期抖动。加上这150ps,我的setup裕量只剩50ps,刚好在临界点。从那以后,我给自己定了个规矩:上板前至少留20%的时序裕量。

1.3 时序问题的本质——一个比喻

你想想看,时序问题就像接力赛跑。

建立时间违例:前一棒跑得太慢(组合逻辑延迟太大),后一棒等不及了(时钟沿到了),交接棒失败。

保持时间违例:前一棒跑得太快(数据变化太快),后一棒还没准备好(保持时间窗口内数据就变了),交接棒也失败。

上板后时序变差,相当于跑道从室内换到了室外——温度变了、风速变了、地面摩擦力变了,运动员的发挥自然不一样。

1.4 时序分析的两种模式

分析模式 适用场景 我的建议
单模式(Single Mode) 早期评估、快速迭代 适合RTL阶段快速检查,但别太依赖
BC-WC模式(Best Case / Worst Case) 上板前最终签核 我习惯用这个模式做最终检查,覆盖PVT极端情况
OCV模式(On-Chip Variation) 先进工艺(28nm以下) 28nm以下必须用,否则上板后大概率出问题

💡 个人经验:

我一般这样安排时序分析流程:RTL阶段用单模式快速迭代,综合后用BC-WC模式检查,布局布线后用OCV模式做最终签核。每个阶段发现问题,越早修代价越小。

1.5 时序问题的知识体系

下面这张图是我自己总结的时序问题定位知识体系,你可以把它当作整个课程的地图:

时序问题定位知识体系 时序问题的本质 上板后时序变差的三大原因 PVT变化 时钟抖动/偏斜 信号完整性 时序分析方法:单模式 → BC-WC → OCV 定位工具:STA报告 → 波形分析 → 片上调试 目标:一次上板成功

1.6 本章小结

建立时间和保持时间是时序分析的基础。上板后时序变差,本质上是实际工作条件与仿真/STA分析条件之间的偏差造成的。理解这个偏差的来源,是定位时序问题的第一步。

记住三个关键点:

  • 建立时间看“数据到得够不够早”
  • 保持时间看“数据待得够不够久”
  • 上板后时序变差,90%的原因是PVT变化和时钟抖动

嗯,这一章就到这里。下一章我们聊聊怎么读懂STA报告——那个动辄几千行的文件,其实藏着很多有用的信息。

💡 课后思考:

你的项目中,有没有遇到过setup或hold违例?当时是怎么定位和解决的?带着这个问题进入下一章,你会更有收获。

可可精品资料库