当前位置: 代码迷 >> 综合 >> 基于TimeQuest Timing Analyzer的时序分析笔记(四)
  详细解决方案

基于TimeQuest Timing Analyzer的时序分析笔记(四)

热度:60   发布时间:2024-02-04 21:53:13.0

基于TimeQuest Timing Analyzer的时序分析笔记(四)
在(一)里面介绍了建立时间分析,本文对保持时间进行简单介绍以及TimeQuest Timing Analyzer使用中间的一些窗口解释。以下部分内容来自小梅哥时序分析。
1.那么什么是保持时间余量呢?先说物理意义。对于 D 触发器来说,不是说时钟上升沿过了,D 端的数据就马上可以变化了,为了保证 D 触发器能够准确的将 D 端数据寄存,必须在时钟上升沿之后的一段时间内,D 触发器的 D 端继续保持稳定,否则就可能导致数据寄存失败。这个数据需要保持稳定的时间长度,称为 D 触发器的保持时间(Th)(或者说保持时间是时钟上升沿到来之后数据必须保持稳定的时间),而保持时间余量,说的正是 D 端的数据在时钟上升沿之后继续保持稳定的时间长度和 D 触发器的保持时间参数的差值。
既:保持时间余量 = 数据到达时间 – 数据需求时间
Hold time slack = data_arrival – dara_require
保持时间很重要的原因就在于,为了保证源寄存器发出的数据不能变化太快,不能目的寄存器还没来得及将上一个周期的数据稳稳的寄存,新的数据又已经传递到目的寄存器的 D端了。这种情况在 FPGA 内部一般很少出现,但是在 FPGA 和外部器件连接,给外部器件输
出数据和时钟的情况下极易出现。
在这里插入图片描述
在这里插入图片描述通过上图,大家也可以看到,分析保持时间余量时,Launch edge 和 Latch edge 是同一个 edge,而不是像分析建立时间余量时候那样相差一个时钟周期。这个差异其实也很好理解,满足目的寄存器保持时间,就是要确保当前时钟周期发出的数据不会在当前时钟周期之前到达目的寄存器,因此此时目的寄存器正在接收前一个时钟周期的上升沿源寄存器发射的数据呢,如果当前周期发射的数据很快到达目的寄存器,那么前一个数据就被破坏了,就无法正常接收了。
保持时间余量 = 数据到达时间 – 数据需求时间
Hold time slack = data_arrival – dara_require即
Slack(Th)=data_arrivaltime-data_requiretime
=(Tclk1+Tco+Tdata) - (Tclk2+Th)
同时再次把建立时间余量放在这对比:
Slack(Tu)=data_requiretime - data_arrivaltime
=( Latch+Tclk2-Tsu) - (Launch+Tclk1+Tco+Tdata)
=Tclk+Tclk2-Tsu-(Tclk1+Tco+Tdata)
此时我们可以看到两个计算式子很相似,但是要注意建立时间余量以发射沿、锁存沿为参考,保持时间余量是针对同一个沿。
注意:
若Hold Slack为正,表示Data Arrival Time在Data Required Time之后,满足Hold Time;反之若Hold Slack为负,则表示Data Required Time在Data Arrival Time之后,无法满足Hold Time。
若Setup Slack为正,表示Data Required Time在Data Arrival Time之后,满足Setup Time;反之若Setup Slack为负,则表示Data Arrival Time在Data Required Time之后,无法满足Setup Time。

下图来自Alter官方时序讲解视频截取min-max是在利用工具分析时具体的计算,前两篇介绍工具使用流程时介绍过,一般理论情况下,按以上两个算式分析即可。
在这里插入图片描述2.在时序分析时SDC文件为约束文件,这是我们在时序分析是所添加的各种时钟约束、io约束等信息,因此在分析路径时我们会添加相应引脚或接口如下:只要我们知道属于哪个类型,可以快速找到。这些应用在前面工具使用分析时会用到。
在这里插入图片描述
Cell∶LUT组合逻辑单元、IO_BUF、CLKCTRL、reg
Keeper(工具选项中这项)∶写代码的过程中定义的各种信号名称。
Pin∶Cell的输入和输出等端口。
Ports∶整个设计顶层的输入输出和双向端口。
Registers∶整个设计中存在的物理寄存器类型的 cell.
在这里插入图片描述本文暂时介绍到这里,后续再扩展,如有错误,请告知。

  相关解决方案