您现在的位置是:首页 >学无止境 >静态时序分析Static Timing Analysis2——建立时间和保持时间的时序检查网站首页学无止境

静态时序分析Static Timing Analysis2——建立时间和保持时间的时序检查

_lalla 2023-05-22 20:00:02
简介静态时序分析Static Timing Analysis2——建立时间和保持时间的时序检查


前言

2023.4.11 继续学习STA,前面听的感觉好迷糊,先接着看,到时候回头再看一遍理解
2023.4.12 打卡


一、建立时间检查

在这里插入图片描述
Tlaunch + Tcq + Tdp <= Tclk + Tcapture - Tsetup

  • 时钟的发射和捕获延迟时间是很小的,Tcq和Tsu是工艺库决定的,是固定值。要想等式成立,要取左边的最大值来进行判断

建立时间违例的解决方法:

  • 降低时钟频率,增加时钟周期(增加Tclk)
  • 在launch cell路径增加缓冲器,让时钟晚点到来(增加clk skew)
  • 组合逻辑优化或插入流水线,缩短关键路径(减小Tcomb)
  • 选择器件延迟更小的触发器(减小Tcq和Tsu)

1、寄存器到寄存器

在这里插入图片描述

另外一个路径的时间计算如下,要减去clock uncertainty,使得时序约束更加严格

时钟不确定性,通常来说芯片在制造过程中存在很多的随机的偏差,如果我们此时在建立时间之前再将数据需要稳定的时间提前一些,以此来模拟芯片实际生成中的偏差。如果clock uncertainty 大于零,就会导致一个比较严谨的建立时间时序约束。如果在uncertainty 大于零的情况下,数据依然能够稳定到达,那也就是说这个设计比较安全。

在这里插入图片描述

2、输入端口到寄存器

这种情况一般定义一个虚拟时钟,再来进行分析
其实是对方框内的芯片进行STA

create_clock -name VIRTUAL_CLKM -period 10 -waveform{0 5}
set_input_delay -clock VIRTUAL_CLKM -max 2.55 [get_ports INVA]

在这里插入图片描述
在这里插入图片描述

第二条路径减去clock uncertainty,再减去建立时间,使得约束严格
在这里插入图片描述

3、寄存器到输出端口

set_output_delay -clock VIRTUAL_CLKP -max 5.1 [get_ports ROUT]
set_load 0.02 [get_ports ROUT] //除了对输出延时进行约束外,还要对输出负载约束

在这里插入图片描述
在这里插入图片描述

注意这里是T减去输出延时
在这里插入图片描述

4、输入端口到输出端口

set_input_delay -clock VIRTUAL_CLKM -max 3.6 [get_ports INB]
set_output_delay -clock VIRTUAL_CLKM -max 5.8 [get_ports POUT]

在这里插入图片描述

该路径时序报告最后结果为负值,说明不满足要求。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、保持时间检查

clock uncertainty:对于建立时间来说,这个值是负数;对于保持时间,这个值是正数(引入这个参数的目的是为了使得时序更加严格,根据实际来判断正负)

保持时间和建立时间检查的区别:

  • 保持时间是在同一时钟边沿进行检查,数据的发射路径和接收路径是同一时钟边沿。建立时间数据捕获路径要比发射路径晚一个时钟周期,不在同一时钟沿检查。
  • 保持时间检查与时钟周期无关。如果要计算一个电路的时钟周期,只能从建立时间去计算。
  • 一般先检查保持时间,建立时间违例修复的方法有很多,而修复保持时间的方法很少。
  • 对于保持时间,上面的数据发射路径的时间要大于下面的捕获时间,数据要维持到捕获之后;而对于建立时间,则是上面发射路径时间要小于捕获路径时间,要求捕获之前数据已经达到了。
  • 当前时钟沿捕获的是上一个时钟沿发射的数据,与此同时,这个时钟沿会发射新的数据,为了不影响捕获上个时钟沿的数据,需要有保持时间检查。在当前时钟沿同时完成捕获数据和发射数据的功能。
  • 保持时间检查取左边的最小值,如果左边的最小值都大于右边,说明时序肯定满足要求
    Tlaunch + Tcq + Tdp >= Tcapture + Thold

保持时间违例的解决方法:

  • 在数据路径上增加buffer(增大Tdp)
  • 选择器件延迟更大的触发器(增加Tcq)
  • 优化时钟路径,让时钟来得更早(相当于减小Tskew)

1、寄存器到寄存器

在这里插入图片描述
在这里插入图片描述

这里用的是arrival time - required time(前者数值大于后者),为了使得用户可以快速根据正负值来判断是否违例。不管是建立时间还是保持时间,都是小于0的时候就表示违例。

在这里插入图片描述

2、输入端口到寄存器

注意这里设置的输入延时的最小值

set_input_delay -clock VIRTUAL_CLKM -min 1.1 [get_ports INA]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、寄存器到输出端口

set_output_delay -clock VIRTUAL_CLKM -min 2.5 [get_ports ROUT]

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4、输入端口到输出端口

set_load -pin_load 0.15 [get_ports POUT]
set _output_delay -clock VIRTUAL_CLKM -min 3.2 [get_ports POUT]
set_input_delay -clock VIRTUAL_CZKM -min 1.8 [get_ports INB]
set_input transition 0.8 [get_ports INB]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。