如图1,使用了TI的视频解码芯片,数据和时钟的关系见图2。这里有几个问题想请教大家:
1、由于输入的视频流有多种格式,因此解码后送给FPGA的时钟也有变化,可能为74.25M、也可能为148.5M,还有可能是别的时钟。请问这种情况下,在FPGA内部对clk如何做周期约束呢?
2、这种情况下如何对输入的data做offset约束呢?
针对上边两个问题,我的做法是这样的,不知道对不对,请大家指教:
1、进行clk周期约束的时候,我是按照最快的那个可能时钟约束的,即是按照148.5M的频率约束的,我约束的是150M。
2、在150M周期约束的前提下,按照图2进行的offset约束。tvp7002设置的数据在时钟上升沿输出,于是数据即是在clk上升沿T/2-(0~1.5ns)之前准备好,考虑PCB走线,按1ns算,我写的offset约束是 TIMEGRP "iTVP7002_DATA" OFFSET = IN 2.5ns BEFORE "iTVP7002_PCLK"。
3、在调试的时候,发现有部分FPGA存在问题。初步分析认为是时序约束的问题,在offset in约束中增加了valid约束 TIMEGRP "iTVP7002_DATA" OFFSET = IN 2.5ns VALID 2ns BEFORE "iTVP7002_PCLK"之后,出问题的FPGA也没有问题了。后来又做了如下实验:
(1)、考虑可能PCB走线延迟估算稍大,改为OFFSET = IN 2ns ,有问题的FPGA仍存在问题;
(2)、增加valid约束,OFFSET = IN 2ns VALID 1.5ns 或者OFFSET = IN 2.5ns VALID 2ns ,有问题的FPGA不再出现问题。到现在也解释不了为什么会这样。
以上都是我的个人理解和做法,感觉对时序约束理解的还是不透彻,请大家指教啊! |