目前在用xilinx的ISE进行FPGA开发时,遇到一个时序约束的问题。
FPGA输出差分时钟和12路差分数据,给其他设备,但是由于时钟与数据相对位置没有控制好,导致建立时间或保持时间不满足,从设备获取数据出现错误。
为了让FPGA输出的时钟和数据满足建立时间和保持时间要求,我尝试进行源同步输出约束,但是经过研究,发现ISE的OFFSET OUT,是针对输出信号相对FPGA的输入时钟的延时约束,而且只能设置一个延时值,表面在输入时钟上升沿后,在该延时值前,输出信号有效。而其实我们并不关心输出信号相对于输入时钟,只关心输出信号相对于输出时钟。
目前没找到好的办法来进行输出数据与输出时钟的建立时间和保持时间约束的办法,而这个问题,应该是个普遍存在的问题,所以请有过处理该类问题的教教我,谢谢了!
----------------更新
多谢各位网友的帮助,我也将我目前的办法描述一下,希望能够帮到像我一样的小白,少走点弯路。
目前,还是没找到让ISE自动给我计算输出时钟与输出数据相对延时的办法,也没有直接设置约束的办法。这个在VIVADO,就可以进行约束,但是在ISE不行。
我目前的解决办法,有以下几步:
(1)输出数据使用IOB,这样就可以保证输出数据线之间,相对延时误差较小。
(2)输出时钟使用ODDR,ODDR输出时钟,其实也相当于通过一个寄存器将时钟输出。
(3)在ucf文件中,将所有的数据IOB,以及时钟输出寄存器(ODDR的寄存器),都设置为一个组,然后使用offset out,对这个组与FPGA的输入时钟做一个约束,这个约束目的不是为了对输出数据与输出时钟进行相对延时设置,而是为了方便查看布局布线后的时序分析中,输出时钟与输出数据相对FPGA的输入时钟延时。通过查看这个约束的结果,就可以得到输出时钟与输出数据的路径延时差,如果能够满足建立时间和保持时间,就可以不用管了,如果不满足,则可以将时钟的ODDR输出时,进行D1为0,D2为1,即反向,看是否满足,如果仍不满足,就引入IODELAY,对时钟进行延时控制。
再次感谢各位网友的指导,我目前的方法估计还不是好的方法,如果有网友有更好的办法,希望不吝赐教。
--
修改:lalala123123 FROM 124.64.19.*
FROM 114.254.10.*