本系列文章从秋招高频问题入手,深度剖析静态时序分析,如有错误之处,欢迎批评指正!
联系邮箱:zhangshaopu@ufl.edu
高频问题 1:STA 针对什么类型的电路?使用什么工具做 STA?
STA 针对的是同步电路,常见的工具是 Synopsys 公司的 PrimeTime
高频问题 2:建立时间和保持时间的概念
2.1 基本概念
建立时间 / setup time / Tsu
触发器在时钟沿到来之前,其输入端信号必须保持稳定的时间
换句话说:D 需要提前 CLK_EDGE 多长时间到来,D 的采集才不会出错
保持时间 / hold time / Thold
触发器在时钟沿到来之后,其输入端信号必须保持稳定的时间
换句话说:CLK_EDGE 到来后,D 还需要维持多长时间不变,才不会影响 Q
输出延时 / Tcq
CLK_EDGE 到来多久后,D 才能到达到 Q
2.2 建立时间的检查和修复
建立时间决定了该【触发器】与【前级逻辑】之间的 组合逻辑 的 最大延迟
如何修复建立时间违例?核心在于:调整上述公式中的变量,保持左侧小于右侧
Tlaunch 和 Tcapture | 增大 Tcapture 减少 Tlaunch | 方式一:通过 时钟树平衡 完成 方式二:在时钟路径上 插 buffer |
Tc2q 和 Tsetup | 无法调整 | 这部分的调整需要 更换工艺库 |
Tdp | 优化组合逻辑 减少 Tdp | 方式一:减少【逻辑门的数量】或【调整逻辑结构】 方式二:使用【速度更快的单元】替换【速度较慢的单元】 |
Tcycle | 增大 Tcycle | 不推荐降频,会降低电路整体的性能 |
2.3 保持时间的检查和修复
保持时间决定了该【触发器】之与【前级逻辑】之间的 组合逻辑 的 最小延迟
如何修复保持时间违例?核心在于:调整上述公式中的变量,保持左侧大于右侧
Tlaunch 和 Tcapture | 减少 Tcapture 增大 Tlaunch | 方式一:通过 时钟树平衡 完成 方式二:在时钟路径上 插 buffer |
Tc2q 和 Tsetup | 无法调整 | 这部分的调整需要 更换工艺库 |
Tdp | 优化组合逻辑 增大 Tdp | 在组合路径上 插 buffer 使用这个方法一定要注意:不能让 setup time 因此违例! |
高频问题 3:Recovery Time & Removal Time
3.1 Recovery Time
(类比 setup time)有效时钟沿来临之前,异步控制信号 释放后必须保持稳定的时间
如图所示:如果 rst_n 不满足 recovery time,可能导致 下个时钟沿 无法正确采样 rst_n 信号
3.2 Removal Time
(类比 hold time)有效时钟沿来临之后,异步控制信号 必须保持稳定的时间
如图所示:如果 rst_n 不满足 removal time,可能导致 本次时钟沿 无法正确采样 rst_n 信号
高频问题 4:时序路径有哪些?
起点/终点 | d pin | output port |
clk pin | (最常见的一种)path 2 | path 3 |
input port | path 1 | path 4 |
高频问题 5:多周期路径、半周期路径、伪路径?
5.1 多周期路径 Multi-Cycle-Path
默认情况 下,综合工具会把每条路径定义为 单周期路径,即在 源 DFF 的时钟沿 launch 的数据都应该在 目的 DFF 的下一时钟沿 capture。
但有的设计会存在例外:数据【从起点到终点的传输时间】需要【一个时钟周期以上】才能稳定的路径,这类路径被称为多周期路径
解决方案 | 方案特点 |
插入 buffer 使得组合逻辑打散 | 频率快、吞吐量大,但是 增加了面积和功耗 |
设置 multi-cycle path 约束 在 STA 中指定若干个时钟周期后的上升沿去 capture 数据 | 允许复杂的逻辑(如乘法、除法或其他复杂的组合逻辑运算)多周期实现,减少时钟频率的要求,适用于低功耗设计 但 牺牲了吞吐量 |
在设置了多周期约束后,核心问题在于:如何检查建立时间和保持时间?
建立时间的检查较为简单:假设多周期数量为 X,setup time 检查的时钟沿是 在 launch 时钟沿的 X 个周期之后
但是保持时间的检查就复杂了,因为按照单周期的做法,hold time 的检查时钟沿是 setup time 的前一个时钟沿,以下图为例,那么 hold time 的检查时钟沿是 2nd edge
这样就要求数据需要保持到 2nd edge 之后才能变化,这显然是不现实的,因此 hold time 的检查时钟沿需要提前到 launch 时钟沿,以下图为例,那么 hold time 的检查时钟沿是最左侧的沿
5.2 半周期路径 Half-Cycle-Path
如果在设计中,同时存在上升沿触发的 DFF,以及下降沿触发的 DFF,则设计中大概率存在半周期路径。
如图所示:UFF 5 是下降沿触发,UFF 3 是上升沿触发
在设置了半周期约束后,还是这个核心问题:如何检查建立时间和保持时间?
时序路径中仅有 半个时钟周期 来进行建立时间检查,因此:建立时间检查更加严苛
时序路径中有 额外的半个时钟周期 来进行保持时间检查,因此:保持时间检查更加宽松
5.3 伪路径 False-Path
当电路运行的时候,某些时序路径并不会被激活,这些路径被定义为伪路径
这些路径 不需要满足特定的时序约束;因此,设置伪路径可以让 STA 工具忽略这些路径,更专注于分析真实的时序路径,提高 STA 的效率;但是,设置过多的伪路径会降低分析的效率,反而使分析速度减慢。
类别 | 描述 | 例子 |
测试逻辑 | 用于测试和验证目的的逻辑部分 正常运行时不参与主要功能 | JTAG调试模块 内建自测试(BIST)模块 |
静态逻辑 | 在大部分时间内保持不变的逻辑状态 | 使能信号、固定配置寄存器 |
准静态逻辑 | 偶尔会改变,但在大多数操作时间内保持静止 | 配置或状态寄存器 (仅在系统启动或特定条件下更新) |
跨时钟域信号 | 涉及不同时钟域的信号路径 | 通常涉及数据同步和缓冲机制 |
高频问题 6:STA 的工作状态?
STA 的工作状态和三个参数有关:制程(Process)电压(Voltage)温度(Temperature)
,它们合称 PVT。其中,每个参数包含三个典型值:
制程(process) slow / typical / fast 电压(Voltage) min / normal / max 温度(Temperature) min / normal / max
参数的不同,对应于延迟的不同,如下图所示:
通过搭配参数,我们可以得到最常见的工作状态
Condition Process Voltage Temperature WCS (Worst-case Slow) slow low high TYP (Typical) typical normal normal BCF (Best-case Fast) fast high low
在实际工作中,制程往往是保持不变的,因此:高温低电压:Delay 最大,用于 分析 setup time;低温高电压:Delay 最小,用于 分析 hold time。