TimeQuest笔记
通过将近一个星期的研究,把头看痛了好几次,我对TimeQuest这个时序工具分析以及如何让时序收敛有了一定的认识,在此分享一下个人见解,以及对FPGA前辈见解的理解。
首先我认为时序分析是发生两个相邻寄存器之间的,这两个寄存器一个名为“源寄存器”,一个名为"目的寄存器",之所以这样去强调是因为分清它们很有必要。
其次我认为时序分析的目的是为了时序约束,而时序约束针对三个部分:分别是,“内到内”和“外到内”。读者可能会问了,什么跟什么嘛,这个有区别吗?这个区别就大了,接下来我就要将其中的区别道出来。
所谓的“内到内”其实就是FPGA内部两个相邻寄存器之间的约束,到目前位置我发现无非是对系统时钟进行约束,(至于具体如何约束“内到内”请读者参考akuei2大哥《瞎搞TimeQuest 的无责任笔记2》那里会跟你讲的清清楚楚明明白白。)设定时钟频率即可。有的读者可能会问了,那一大堆公式是干嘛的,至于公式:
(1)Data Arrival Time:Launch Edge + 前级寄存器Clock path 的延时 + 前级寄存器
Cell 从时钟Pin 到数据输出Pin 的 Net 延时(uTco) + Data path 的延时。
(2)Data Required Time:Latch Edge + 后级寄存器Clock path 的延时 (+ uTh)或(-
uTsu)。
(3)Clock Arrival Time:Latch Edge + 后级寄存器Clock path 的延时。
(4)Clock Setup Slack = Data Required Time – Data Arrival Time
这都是TimeQuest的是事(交给TimeQuest算去吧),是TimeQuest针对“内对内”提出的,大家把它称之为TimeQuest的模型!我就姑且把他叫做“内对内模型”吧!不过您可别把这堆公式丢到九霄云外一概不管!他对“内对外模型”和“外对内模型”有借鉴作用,这两个模型可没那么简单啊(不过您要是借鉴了可能就没那么难理解了)。
现在我就讲几个关键项吧(其他的从字面上就能理解是吧)。
Tco:对于源寄存器(也就是发送数据的那位)有Tco,及数据更新时间,说的再清楚一点就是源寄存器要把它目前肚子里装的值发出去所要消耗的时间就是Tco。
Tsu:对于目的寄存器(也就是锁存数据的那位)有Tsu,及数据建立时间,说的再清楚一点就是目的寄存器要锁存一个值需要提前准备的时间,这也就是在分析建立余量是要减去他的原因。
Data Required Time:Latch Edge + 后级寄存器Clock path 的延时 (- uTsu)。(建立余量时的Data Required Time)
Th:Th也是对于目的寄存器而言的,及数据保持时间,说的更清楚一点,就是当目的寄存器锁存了这个值之后还需要消化一段时间才能讲这个值真正锁存住,在分析保持余量的时候会用到它,这个一定要与Tsu区分开来,因为建立余量的公式和保持余量的公式很像,从表面上看就是减数和被减数换了个位置。
Data Required Time:Latch Edge + 后级寄存器Clock path 的延时 (+ uTh)。(保持余量时的Data Required Time)
再来看“内对外模型”他也是一堆公式
(1)Clock Setup Slack = Data Required Time – Data Arrival Time
(2)Data Arrival Time = Launch Edge + Clock源 to Source Register +μTco + Register-to-Pin Delay
(3)Data Required Time = Latch Edge + Clock目的 – Output Maximum Delay of Pin
(保持余量的公式没有列出)
我们是不是也不用管它,交给TimeQuest就好呢?并不是这样的。
“内对外模型”其实就是要对output进行约束,如何对其约束呢?首先们要分清谁是目的寄存器,谁是源寄存器,很显然此时FPGA充当了源寄存器这个角色(output发送数据),目的寄存器由外部芯片充当,这样的话Tco就不用管了TimeQuest知道(因为是FPGA内部的),
至于Th,Tsu就要通过查芯片的资料才知道了TimeQuest就不知道了。细心的读者可能发现在以上公式中并没有发现Th,Tsu这俩个参数啊,其实他隐藏在Output Max Delay 这一项里了。
Output Max Delay = PCB date delay(PCB板走线延时) + 外部器件Tsu + ?暂且不管(建立余量时用到)
Output Min Delay = PCB date delay(PCB板走线延时) - 外部器件Th - ?暂且不管)(保持余量时用到)
重点来了,我们要约束output就必须搞清楚Output Max Delay,
Clock Network Delay,把这两项搞清楚了,就直接到TimeQuest中设置Output Max Delay和Output Min Delay去吧!其他的就交给TimeQuest了。好了现在还有两项没弄清白,“PCB date delay”和 “?暂且不管”。首先我来说说“?暂且不管”是个什么东西,其实这个就是源寄存器与目的寄存器时钟延时之差,之前我们没有管Clock Network Delay,在这里我们将其顾上了。“?暂且不管”其实就是“Clock源”减去“Clock目的”
可能读者会问在建立余量时是“+ ?暂且不管”而在保持余量的时候是“- ?暂且不管”这是为什么?首先我们要知道建立余量和保持余量公式的区别,也就是我前面的提到的被减数和减数关系,而Output Max Delay和Output Min Delay是Data Required Time其中的一项,Data Required Time位置从减数换到了被减数,“?暂且不管”的符号能不变吗?(答案是肯定要变,好了,小学生都知道了)
其次要注意的是Output Max Delay和Output Min Delay是作为被减数的(所以Th,和Tco的符号也可以理解了。)
然后是为什么是加,为什么是减的问题:
如果,目的寄存器的时钟滞后于源寄存器,“Clock源”减去“Clock目的”小于零(目的寄存器的延时更长)再看Clock Setup Slack = Data Required Time – Data Arrival Time
而Data Required Time = Latch Edge + Clock目的 – Output Maximum Delay,
而 Output Max Delay = PCB date delay(PCB板走线延时) + 外部器件Tsu + ?暂且不管(建立余量时用到)还要问为什么是加,那是因为Output Max Delay是作为被减数其实是减了它(“Clock源”减去“Clock目的”小于零)
反之目的寄存器的时钟超前于源寄存器,“Clock源”减去“Clock目的”大于零(源寄存器的延时更长)
Output Min Delay = PCB date delay(PCB板走线延时) - 外部器件Th - ?暂且不管)(保持余量时用到)
再强调一次“?暂且不管”就是“Clock源 减去 Clock目的”。
PCB走线延时的我只提供一条公式:信号没走1000mil要0.18ns。
至于“Clock目的 减去Clock源”怎么求也要根据走线PCB延时。
休息一会我们再来看看“外对内模型”此时FPGA充当的目的寄存器目的寄存器,源寄存器由外部芯片充当。也就是对input进行约束,和上面一样,我们只用管一部分,此时Th, Tsu是FPGA内部的TimeQuest知道,所以不用管。Tco是外部芯片的要查,再就是总的要关心的Input Max Delay和Input Min Delay。
Input Max Delay = 外部器件的最大Tco +PCB板最大走线延时 +“?暂且不管”
Input Min Delay = 外部器件的最小Tco +PCB板最小走线延时 +“?暂且不管”
“?暂且不管”同样是“Clock源 减去Clock目的”。知道了这些就去TimeQuest设置吧!
PCB走线延时公式:信号没走1000mil要0.18ns。借助CAD去查看吧。
这是个人见解,以及对FPGA前辈见解的理解。若有乱讲之处还请指教,主要目的是为了能帮到学TimeQuest的人,顺便对自己学的总结一下。还望大家多多批评指正。
2012年5月15日