最近整理了一下时序约束的内容, 顺便发出来分享记录一下.
任何硬件想要工作正常, 均需满足建立和保持时间, 至于这个概念不再陈述.
下面将重点介绍两个概念: 建立余量和保持余量. FPGA 内部进行时序分析无非就是计算这两个余量, 为正, 则时序满足要求, 否则不满足.
FPGA 在与外部期间打交道时, 端口如果为输入则与 input delay 约束相关, 如果最为输出则 output delay, 这两种约束的值究竟是什么涵义, 下文
我也会重点刨析, 但是前提是需要理解图 1 和图 2 建立余量和保持余量.
建立余量: 不考虑 clk_skew, 数据在 regA 的发射沿 (即第一个上升沿) 经过 Tco+Tdata 则会一直保持不变, 等待着接受沿采集, 接收沿只需满足的建立时间, 余量 = T-Tco-Tdata 即红色区所示.
保持余量
蓝色是第一个数据, 第一个上升沿是蓝色数据的发射沿, 第二个上升沿是蓝色数据的接收沿
紫色是第二个数据, 第二个上升沿是紫色数据的发射沿, 第三个上升沿是紫色数据接收沿(图中未画)
意思是什么? 第一个蓝色数据经过发射沿后延迟 Tco+Tdata 的时间就一直保持不变, 直到紫色的数据在其发射沿来后经过 Tco+Tdata 时间将蓝色数据代替, 蓝色数据只需要在其接收沿后停留的时间大于等于保持时间即可被正常采集, 但是蓝色数据实际上能够停留多久是由 Tco+Tdata 决定的, 因此 Tco+Tdata 的值决定了其在接受沿后的寿命, 即 Tco+Tdata>=Th 就可以满足保持时间, 保持余量 = Tco+Tdata-Th, 保持时间和时钟周期 T 无关, 因为他的寿命是由 Tco+Tdata 决定的.
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.
来源: https://www.cnblogs.com/aslmer/p/11746947.html