静态时序分析(static timing analysis)
假设你想知道一个快递员能不能把包裹送过整座城市、并且在截止时间前送到——而且要每一次、走每一条可能的路线都做到。一种办法是整天派快递员上路、盯着表看,但你永远跑不遍每一条街。更聪明的办法是摊开地图,把每条路线上每一段路的最坏行程时间加起来,确认就算最慢的那条路线也能赶在截止时间之前。静态时序分析(static timing analysis,STA)对芯片做的正是这件事:它不靠测试向量去跑仿真(simulation),而是把信号可能走过的每一条路径——从一个寄存器(register)走到下一个——逐一走遍,把沿途的延迟加起来,然后确认每条路径都能按时跑完。
具体来说,STA 把设计拆成一条条时序路径,每条都从一个发起寄存器出发、到一个捕获寄存器结束。对每条路径,它把信号经过的每个标准单元(standard cell)的延迟,加上连接它们的导线延迟,全部相加。然后它对着时钟(clock)做两项检查:一是「建立」(setup)检查,即在某个时钟沿发出的数据要在下一个时钟沿到来之前抵达——还得留出一点余量给寄存器的建立时间(setup time)和时钟不确定度;二是「保持」(hold)检查,即数据不能来得太早,把同一个时钟沿正在捕获的值给冲掉。STA 把每项检查的余量报告为时序裕量(slack),任何裕量为负的路径都算违例。正因为它是「静态」的,它从不需要输入激励——它直接对时序图做推理,因此能保证「每一条」路径都被覆盖,而这是仿真永远无法承诺的。
做这一切的目的,是把芯片能合法运行的最高速度定下来。最慢的那条建立路径——也就是关键路径(critical path)——给时钟周期定了下限:周期不能短于这条路径的延迟,加上捕获寄存器的建立时间和时钟不确定度。最高频率就是这个最小周期的倒数。从关键路径上削掉一点延迟,整片芯片就能跑得更快;哪怕只有一条路径超出预算,这颗芯片就会在额定速度下失效。这正是为什么 STA 是时序签核(timing sign-off)的把关人——它是最后一道检查,确认每一条路径、不论快慢,都落在各自的时间窗内,然后设计才被宣布可以安心投片。
最快的合法时钟,由最慢的那条寄存器到寄存器的路径,再加上捕获寄存器的建立时间和时钟不确定度决定。
「静态」并不是说它不管信号怎么变化——而是说它分析电路的结构、不需要输入图案,正好与动态(基于仿真)的时序分析相反。代价是:STA 只检查时序,不检查你的逻辑对不对;它完全可能给一条又快、但算出错误结果的路径签核放行。