时序约束(二)
上一篇对时序约束原理做了概述,网上也有讲的比较清楚的,或者网上小梅哥和尤凯元老师得视频都讲的很不错,这里主要是讲一下原理概述,重点是做一些实例演练,或者自己目前手头的项目遇到的情况。
目前手头的项目是高速的AD数据采集,300M的采样时钟,DDR的数据传输模式,也就是说时钟周期3.33ns,上下沿采样,相当于时钟周期只有1.667ns,这里不进行正确的时序约束,很可能无法正常的采集数据。这里我们先看看没有正确的约束,或者没有约束情况下数据采集的情况。如下图:
1.时序未约束或错误约束情况下,输入信号5M正弦波和方波如下:
FPGA采样后保存到ram中,由DSP采集后做显示得到的结果如下:
我们可以看到输入信号没有毛刺,而采集到的信号却有了明显的毛刺,直接原因就是时序没有正确约束,时钟上升下降沿采集数据时,不能够满足建立保持时间,也就是说,时钟采样时,数据不稳定,正在进行交变。示意图如下:
由图可以直观的看到,时序约束所要做的就是使时钟的采样沿落在数据的稳定区域。如何能让时钟采样沿落在数据稳定区域呢?实际情况是时钟与数据在电路中传播都有延时,如果建立时间不满足可以让时钟延时大一些,也可以让数据延时小一些,如果保持时间不满足,可以让时钟延时小一些,也可以让数据延时大一些,具体情况具体分析,例如修改逻辑,增加流水,加锁相环移相,input/output delay中还可以改变外部器件的时钟数据相位关系等方法。所有的这些方法都是为了让时钟采样沿落在数据稳定区。实际例子和操作我们后面再具体分析。
2.时序约束情况下,输入信号10M正弦波和方波如下:
FPGA采样后保存到ram中,由DSP采集后做显示得到的结果如下:
FPGA采样后ila直接抓取数据做显示得到的结果如下:
可以看到正确的时序约束后波形的毛刺消失了,采集的信号与输入的信号一致,基本还原了原始输入信号,这是后续信号处理的前提,如果采集数据都不正确,后面也就谈不上数据的计算处理。
这一篇主要通过一个时序约束实例显示了时序约束的重要性,后面会通过vivado工程实例的操作来具体了解一下vivado工具是如何进行时序约束的。