timequest静态时序分析学习笔记之基本概念
第一章 基本概念
1.1延迟因素
第一,FPGA芯片内部的一些固有延迟,包括建立时间Tsu、保持时间Th和数据存入寄存器到输出管脚时间Tco,这些时间是由FPGA芯片决定的,不同的FPGA芯片这些延迟时间不一样。(如图1)
第二,路径延迟,包括时钟路径延迟和数据路径延迟,这两种延迟都与设计的逻辑有关,而最主要的延迟还是数据延迟,所以好的代码设计非常重要。(如图1)
图一 FPGA芯片内部
第三、外部延迟因素,即FPGA与外部IC进行数据交互的延迟因素,包括外部IC建立时间Tsu_ext、外部IC保持时间Th_ext、外部IC从时钟到来到数据输出到管脚的延迟Tco、外部数据延迟、时钟到IC芯片的延迟、时钟到FPGA芯片的延迟,这些延迟因素timequest都没法自己知道,必须通过设计者弄清这些延迟是多少,然后通过约束命令告诉timequest才行。(如图2)
图2 FPGA与外部IC
1.2建立时间和保持时间、建立关系值和保持关系值
建立时间:指时钟到达寄存器之前数据在输入管脚达到稳定所需要的最小时间。
保持时间:指时钟到达之后数据在输入管脚保持稳定所需要的最小时间。
建立关系值:目的寄存器锁存沿(latch clock)-源寄存器启动沿(launch clock)。数据在第一个时钟沿从源寄存器发出去,在第二个时钟沿存入目的寄存器,建立关系值就是指这两个时钟的距离。
保持关系值:上一个latch clock - 源寄存器的当前launch clock。(如图3)
图3 建立关系值和保持关系值
1.3建立余量和保持余量
1.3.1建立余量计算
图 4
Data Arrival Path = Launch Edge + src_clk_dly + src_reg_uTco + data_delay
Data Required Path = Latch Edge + dst_clk_dly
由于还得满足在latch clock到来之前数据在目的寄存器达到稳定所需要的最小时间Tsu,所以建立余量公式如下:
Setup slack = Data Required Path - Data Arrival Path - Tsu
而在timequest分析里面,它把延迟因素Tsu放在了Data Required Path里面,所以Data Required Path公式可以这样:
Data Required Path = Latch Edge + dst_clk_dly - Tsu
最终根据timequest得到的公式:
Setup slack = Data Required Path - Data Arrival Path(timequest_userGuide page 32)
现在我们看timequest是如何来分析setup slack:
图5 建立余量波形图
通过图5建立余量波形图我们可以知道setup relationship,data arrival time ,data required time,setup slack以及一些其它的延迟参数。
图6 建立余量波形数据路径
然后我们通过data path分析中可以知道data arrival path和data required path的值,看最后一行,data arrival path的值是17.826ns,data required path的值是25.544ns,根据公式可以求得setup slack是7.718ns,当然我们添加约束命令后,这些计算都是timequest自己做的事,与设计者无关。
图7
如图7的第一行的slack的值,它刚好等于图6 data required path的值e减data arrival path的值,在这里我们可以看到每一条路径的建立余量,源寄存器和目的寄存器,启动沿,锁存沿,建立关系值,时钟抖动和数据延迟。
1.3.2保持余量计算
在说公式前先看timequest的具体分析报告
图 8 保持余量波形图
注意看图8launch clock和latch clock的位置,还有slack的值,然后再看图9的data arrival path和data required path最后一行的值。
图 9
通过这两张图可以知道:hold slack = data arrival path - data required path
Data Arrival Path = Launch Edge + src_clk_dly + src_reg_uTco + data_delay
Data Required Path = Latch Edge + dst_clk_dly + Th
但是这里的latch clock 是目的寄存器的上一个锁存沿。
hold slack = data arrival path - data required path
建立余量与保持余量的Data Arrival Path的计算是一样的,不同的是建立余量Data Required Path的Latch Edge是当前锁存沿,而保持余量data required path的Latch Edge是上一个锁存沿。
1.3.3外部延迟计算
我们可以把FPGA芯片和板上IC芯片想象成两个寄存器,不过timequest自己不知道他们之间的延迟,所以需要设计值通过约束命令来告诉它。
外部器件参数:Tsu_ext=外部器件的Tsu,Th_ext=外部器件的Th。
板上的数据延迟:
Max_fpga2ext=FPGA输出到外部器件管脚的最大延迟;
Min_fpga2ext=FPGA输出到外部器件管脚的最小延迟;
set_output_delay -max = Tsu_ext + Max_fpga2ext
set_output_delay -min = -Th_ext + Min_fpga2ext
对于输入约束
外部器件参数:Tco_ext=外部器件的Tco,minTco_ext=外部器件最小的Tco。
板上的数据延迟:
Max_ext2fpga = 从外部器件输出到FPGA管脚的最大延迟。
min_ext2fpga = 从外部器件输出到FPGA管脚的最小延迟。
板上时钟延迟:
Max_clk2fpga = 板上时钟到FPGA的最大延迟
min_clk2fpga = 板上时钟到FPGA的最小延迟
Max_clk2ext = 板上时钟到外部器件的最大延迟
min_clk2ext = 板上时钟到外部器件的最大延迟
set_input_delay -max = Tco_ext + Max_ext2fpg
set_input_delay -min = minTco_ext + min_ext2fpga
上面的公式没有把时钟skew考虑进去。考虑进去后的公式应该是这样的:
对于输出约束
set_output_delay -max = Tsu_ext + Max_fpga2ext - (min_clk2ext - Max_clk2fpga)
= Tsu_ext + Max_fpga2ext - (min_clk_skew)
即:最大输出延迟 = 外部器件建立时间+FPGA到外部器件的最大延迟时间 - (最小板上时钟到外部器件的延迟-最大板上时钟到FPGA的延迟)=外部器件建立时间+FPGA到外部器件的延迟时间 - 最小时钟偏移。
set_output_delay -min = -Th_ext + min_fpga2ext - (Max_clk2ext - min_clk2fpga)
= -Th_ext + min_fpga2ext - (Max_clk_skew)
即:最小输出延迟 = 外部器件保持时间+FPGA到外部器件的最小延迟时间 - (板上时钟到外部器件的最大延迟-板上时钟到FPGA的最小延迟)=外部器件建立直接+FPGA到外部器件的延迟时间 - 最大时钟偏移。
对于输入约束:
set_input_delay -max = Tco_ext + Max_ext2fpg - (min_clk2fpga - Max_clk2ext)
= Tco_ext + Max_ext2fpg - (min_clk_skew)
即:最大输入延迟 = 外部器件Tco + 外部器件到FPGA的最大延迟-最小时钟偏移。
set_input_delay -min = minTco_ext + min_ext2fpga - (Max_clk2fpga - min_clk2ext)22
= minTco_ext + min_ext2fpga - (Max_clk_skew)
即:最小输入延迟 = 最小外部器件Tco + 外部器件到到FPGA的最小延迟-最大时钟偏移。
如下面框图:
图 10
注意:由于对于外部时钟的延迟信息还可以通过set_clock_delay告诉FPGA,所以在做约束的时候不要重复用这两种约束添加外部时钟的延迟信息。
参考资料:
1.FPGA那些事儿--TimeQuest静态时序分析REV7.0.pdf
2.TimeQuest_User_Guide.pdf