quartus时序分析文档理解与翻译(4)——创建IO约束

来源:互联网 发布:淘宝3ds哪家的好 编辑:程序博客网 时间:2024/06/14 20:46

之前认为时钟约束完成后,基本上整个设计的约束也就做完了,从来没考虑过IO约束。那么IO约束的原因在哪里?

这段英文大概表达了这个意思:The TimeQuest analyzer reviews setup and hold relationships for designs in whichan external source interacts with a register internal to the design。

外部source和内部寄存器有交互,也就是说,FPGA的数据来源来自于另一个芯片,驱动他的时钟和FPGA内部接收他的时钟间关系未知。

如果要让FPGA对他做相关的时序优化,那么我们就应该提供输入和输出的外部模型(set_input_delay  and set_output_delay)。

Input Constraints

md文档上说,需要给设计中的所有input ports都加上输入约束。

在约束外部输入延迟时,有一个逃不掉的东西就是虚拟时钟,虚拟时钟定义了输入端口数据的 launching clock;TimeQuest analyzer自动生成期间内部的latching clock,因为器件内的所有时钟都已经被定义过了。

下图是一个基于虚拟时钟设置input delay的例子:


input延迟时间的算法如下图:


为什么设置这样的值,初看起来还挺深奥,但是仔细分析分析,其实挺简单;

首先input_delay指的是什么:他是指,从第一个时钟上升沿到达Altera_device开始算起,到数据到达Altera_device结束,这段时间的长度;

先来看看input delay(max),第一个上升沿(假设都是上升沿触发)到达External Device的最大时间是cd_ext(max),最大的tco_ext(max),传播最大延迟是dd(max),假设第一个上升沿到达Altera_Device的时间cd_altr为0,那么很显然,对于Altera_Device而言,数据到来延迟的最大时间为cd_ext(max)+tco_ext(max)+dd(max);但是这个数据很冤枉,不能光算我们的最大的延迟,FPGA作为数据的接收方,时钟根本就不是从0时刻到达他的芯片内寄存器的时钟port,他干嘛从0时刻算起,而且都是我的最大值;裁判此刻站出来说了,因为计算的是最大值,所以你的值全部算最大的,这理,你得懂吧(明显偏袒Altera_Device);这是Altera_Device想想,也是,我应该从第一个时钟沿到了我这里,再开始算,但既然是计算最大值,那么应该算上从0时刻到达我这里的最小值了,所以应该减去cd_altr(min)。那么最终的的input最大值是cd_ext(max)+tco_ext(max)+dd(max)- cd_altr(min)。

input_delay(min)参照上面的设置就可以设置了哦。

这个值产生的意义在于,工具有了这个值以后,综合工具会尽量优化从port到第一个寄存器端口的那段路径,保证延迟不能过大,以保证数据能够正确满足第二clock建立时间!!!

Output Constraints

原因:Output constraints allow you to specify all external delays from the device for all output ports in your design.

同理,也是基于虚拟时钟,此时launching clock内部应经被自动计算,不用设置。



output延迟时间的算法如下图:


同样,分析分析上面的公式,首先说一点,上面设置了output_delay的值以后,对综合工具产生的影响是什么呢?搞清楚这点,很重要,综合工具根据它,产生的结果是修改Tco的值,修改输出pin到port的延时;好,接下来说公式,首先明白一个概念,这里的输出延迟,是指从第一个时钟上身沿到达External_Device开始算起,到数据到达External_Device的目的寄存器结束,这段时间,就是dd+Tsu+cd_altr,cd_altr表明时钟不是零时刻就到达了Altera_Dvice,而是有延迟。其实本来我都没考虑到这个Tsu,但是看了人家的公式后,发现了,确实应该加这个Tsu,因为建立时间必须在时钟的上升沿之前到来,后面两个值相减得到的数值说明了是从第一个时钟上身沿到达External_Device开始算起;

文档上基本就说了这么多,说说我的理解:

计算公式我们先不分析,来说一说这个设置最终影响的是什么,很简单其实就影响了输入端口(port)到真正的寄存器输入端口(pin)的延迟单元的多少,输出延迟则相反。器件根据我们设置的这个命令也就仅仅得出了这个影响最终设计的着力之点;但是得出此值,确实更具了很多其他的参数,就是如上的那些;


0 0
原创粉丝点击