最近整理了一下时序约束的内容,顺便发出来分享记录一下。性能
任何硬件想要工做正常,均需知足创建和保持时间,至于这个概念再也不陈述。3d
下面将重点介绍两个概念:创建余量和保持余量。FPGA内部进行时序分析无非就是计算这两个余量,为正,则时序知足要求,不然不知足。blog
FPGA在与外部期间打交道时,端口若是为输入则与input delay约束相关,若是最为输出则output delay,这两种约束的值到底是什么涵义,下文input
我也会重点刨析,可是前提是须要理解图1和图2创建余量和保持余量。硬件
创建余量:不考虑clk_skew,数据在regA 的发射沿(即第一个上升沿)通过Tco+Tdata则会一直保持不变,等待着接受沿采集,接收沿只需知足的创建时间,余量=T-Tco-Tdata即红色区所示。方法
保持余量im
蓝色是第一个数据,第一个上升沿是蓝色数据的发射沿,第二个上升沿是蓝色数据的接收沿d3
紫色是第二个数据,第二个上升沿是紫色数据的发射沿,第三个上升沿是紫色数据接收沿(图中未画)数据
意思是什么?第一个蓝色数据通过发射沿后延迟Tco+Tdata的时间就一直保持不变,直到紫色的数据在其发射沿来后通过Tco+Tdata时间将蓝色数据代替,蓝色数据只须要在其接收沿后停留的时间大于等于保持时间便可被正常采集,可是蓝色数据实际上可以停留多久是由Tco+Tdata决定的,所以Tco+Tdata的值决定了其在接受沿后的寿命,即Tco+Tdata>=Th就能够知足保持时间,保持余量=Tco+Tdata-Th,保持时间和时钟周期T无关,由于他的寿命是由Tco+Tdata决定的。img
input delay 和output delay
对于input /output delay的保持余量和创建余量的计算方法和前面讲的是同样的,区别在于前面的例子中REGA和REGB均是在FPGA内部的,计算余量的全部参数FPGA自身是知道的,他本身能够完成整个计算分析,可是一旦涉及到input delay和output delay,即FPGA做为是接收端或者发送端与其余器件交互时,有些计算的参数FPGA本身知道,有的计算的参数是外部器件知道,为了完成余量的计算,那么就要经过约束把FPGA不知道的量告诉FPGA。
用input delay举例说明 见下图
创建余量=T-Tco-Tdata-Tsu,FPGA做为接收端Tsu,Th是知道的,可是其他两个量不知道,Tco与外部器件性能相关,能够从其数据手册中获取这个量,Tdata也许和你PCB的布线延迟等有关,为了完成计算,只须要把Tdata+Tco的最告诉fpga便可,max参数是与创建参数相关,min与保持余量相关,其最大值为 input delay max为Tco+Tdata的最大值,最小值为input delay min为Tco+Tdata的最小值。
output delay见下图,红色表明FPGA本身知道的量,其他须要经过约束告知
因此max 为Tdata+Tsu
min为Tdata-Th
下面是我作的记录
SDR和DDR的概念:S是单沿触发,D是双沿,双沿又分中心对齐和边沿对齐,见图
下图是input delay 的DDR中心对齐,其中黑色方框框起来的是理想状况下的数据,蓝色是数据总体左偏移,红色是数据总体右偏移,来回抖动的范围,图示中XXXX则表示的数据不稳定的区域,对于上升沿,最小值就是到蓝色框dv_are的大小,最大值就是到红色框边沿T/2-dv_bfe.降低沿再也不赘述。
对于DDR边沿对齐,对上升沿来说,黑色数据框是理想状况,红色是向右偏移,蓝色则是向左偏移,在第三个红色框那里,延迟已经等于0,再进一步左移则为负,蓝色所示。对上升沿来说,max为skew_are,min为 负-skew_bre。