零基础学FPGA (二十四)必会! 从静态时序分析到SDRAM时序收敛(上篇)
时间:01-28
来源:互联网
点击:
2、再来看输入模型
输入模型无非就是跟输出模型相反罢了,原来FPGA作为输出,现在作为输入,还是要考虑我们之前静态时序分析的时候推出的那两个公式
即 Tclk + 时钟偏斜 > Tco + 外部PCB走线延时 + Tsu
那么Tco + 外部PCB走线延时 + 时钟网络延时 Th
即最小输入延时 > Th
3、下面我们做一个总结
最大输出延时 = 外部器件的Tsu + 外部PCB最大延迟 + 最大时钟网络延时
最小输出延时 = 外部器件的Th - 外部最小PCB走线延时 + 最大时钟网络延时
最大输入延时 = 外部器件最大Tco + 外部PCB最大走线延时 + 最大时钟网络延时
最小输入延时 = 外部器件最小Tco + 外部PCB最小走线延时 + 最小时钟网络延时
下面再来解释一下最大最小问题,看到这大家肯有点看不懂了,刚才还觉得可以,加了一些最大最小就看不懂了,其实我们要做的输出,不仅仅是有一个引脚输出,拿我们的SDRAM来说,有12根地址线,还有16根数据线还有其他的控制信号线要输出,那么,我们应该选其中最长的,或者最短的来考虑,只要最长的或者最短的满足要求了,其他的自然也就满足要求了,即我们用最坏的打算来考虑我们的约束路径。
还有最大最小时钟网络延时,由于这里我们只有一跟时钟线,就无所谓最大最小了,这么说就是为了规范
最大最小外部器件的Tco,数据经过SDRAM的时候,并不是时间都是一样的,总有些快慢问题,这里我们也取极限,就是数据经过SDRAM的最大时间和最小时间,这个时间在datasheet里面是有参数的
细心的朋友可能会发现 最小输出延时计算的时候,为什么是减去 最小PCB走线延时呢,为什么不是最大?为什么不是加上最大时钟网络延时呢?为什么不是最小?其实,时序分析工具分析的时候是按照一定的公式计算数据到达时间和数据需要时间的,这个公式见下图
在计算保持时间余量,数据需要时间的时候,公式是减去 output minimum delay of pin
为什么是减去呢,按理说应该是加上我们的输出最小延时才对,小墨当时也不理解,所以就当是记住吧,也就是说
这里的 output minimum delay of pin = - 输出最小延时
这样理解的话,那么输出最小延时越大,那么output minimum delay of pin 就越小了,也就是为什么是减去最小PCB延时的原因吧
后面我们到时序分析工具里面看时序报告图的时候就会发现,如果我们约束的最小输出延时是负数的话,里面显示的却是正数,所以,我们就暂时记住好了,因为真的是不好理解。
三、参数计算
根据我们刚才推断出来的那几个公式,我们就可以进行参数计算了,先来看看我们需要什么参数
输出模型的时候,我们需要的是SDRAM的建立时间,保持时间,外部PCB走线延时,输入模型的时候,我们需要的是外部器件的最大最小Tco
SDRAM的建立保持时间可以从datasheet里面找到
根据器件型号,我们选择建立时间为 1.5 ns ,保持时间为 0.8ns,外部PCB走线延时这个不怎么好算,只能估计吧,因为板子不是我画的,长度也不知道,根据经验,我们知道,信号在PCB上的延时大概为0.18ns /1000mil,那我就估计为最大0.3ns,最小0.1好了
然后是时钟网络延时,也就是源时钟到达源寄存器 - 到达目的寄存器的值,由于我们的时钟是总PLL发出的,时钟从FPGA管脚输出后再送给SDRAM,因此这个值一定是负值,而且也是时钟在PCB上的走线延时,这个值我们估算为-0.1ns好了,因为真的没法算我觉得。
然后是数据经过外部器件的最大最小延时,这个值我们在SDRAM的理论篇里面说了,就是Tac参数和Toh参数,不懂得朋友可以到前面去补补课,这个值我们在datasheet里面也找得到
所以我们取最大Tco 为5.4ns 最小Tco为2.7ns
经过计算得我们的约束参数
最大输出延时 =外部器件的Tsu+外部PCB最大延迟+最大时钟网络延时
=1.5+0.3-0.1=1.7ns
最小输出延时 = 外部器件的Th - 外部最小PCB走线延时 + 最大时钟网络延时
= -(0.8 - 0.1 - 0.1 ) = - 0.6ns
最大输入延时 = 外部器件最大Tco + 外部PCB最大走线延时 + 最大时钟网络延时
= 5.4 + 0.3 - 0.1=5.6ns
最小输入延时 = 外部器件最小Tco + 外部PCB最小走线延时 + 最小时钟网络延时
= 2.7 + 0.1 -0.1 = 2.7ns
四、全局时钟约束
由于我们的时钟是由晶振源传到PLL,然后再由PLL输出给SDRAM和FPGA内部寄存器的,因此我们需要对输入的时钟进行约束,约束其为50M的时钟,并对应好我们的端口时钟clk,即约束我们的输入时钟为50M,并给这个时钟取一个在时序分析时钟的名字,即sys_clk,关于timequest的使用,大家还需自行学习,这里仅仅只是说约束方法
而对于PLL输出时钟的约束,我们仅需在.sdc文件相应的的位置,手动输入约束即可,仅需要一条语句 ,这条命令输进去以后,时序分析工具会自动的为我们约束好PLL的输出时钟
我们可以通过查看时序报告,可以看到,我们的时钟都跑到了我们约束的条件,如果我们不加这条语句的的话,那么PLL的输出时钟是达不到这个要求的,那样的话,我们的时钟都不稳定,更别提系统稳定性了
输入模型无非就是跟输出模型相反罢了,原来FPGA作为输出,现在作为输入,还是要考虑我们之前静态时序分析的时候推出的那两个公式
即 Tclk + 时钟偏斜 > Tco + 外部PCB走线延时 + Tsu
那么Tco + 外部PCB走线延时 + 时钟网络延时 Th
即最小输入延时 > Th
3、下面我们做一个总结
最大输出延时 = 外部器件的Tsu + 外部PCB最大延迟 + 最大时钟网络延时
最小输出延时 = 外部器件的Th - 外部最小PCB走线延时 + 最大时钟网络延时
最大输入延时 = 外部器件最大Tco + 外部PCB最大走线延时 + 最大时钟网络延时
最小输入延时 = 外部器件最小Tco + 外部PCB最小走线延时 + 最小时钟网络延时
下面再来解释一下最大最小问题,看到这大家肯有点看不懂了,刚才还觉得可以,加了一些最大最小就看不懂了,其实我们要做的输出,不仅仅是有一个引脚输出,拿我们的SDRAM来说,有12根地址线,还有16根数据线还有其他的控制信号线要输出,那么,我们应该选其中最长的,或者最短的来考虑,只要最长的或者最短的满足要求了,其他的自然也就满足要求了,即我们用最坏的打算来考虑我们的约束路径。
还有最大最小时钟网络延时,由于这里我们只有一跟时钟线,就无所谓最大最小了,这么说就是为了规范
最大最小外部器件的Tco,数据经过SDRAM的时候,并不是时间都是一样的,总有些快慢问题,这里我们也取极限,就是数据经过SDRAM的最大时间和最小时间,这个时间在datasheet里面是有参数的
细心的朋友可能会发现 最小输出延时计算的时候,为什么是减去 最小PCB走线延时呢,为什么不是最大?为什么不是加上最大时钟网络延时呢?为什么不是最小?其实,时序分析工具分析的时候是按照一定的公式计算数据到达时间和数据需要时间的,这个公式见下图
在计算保持时间余量,数据需要时间的时候,公式是减去 output minimum delay of pin
为什么是减去呢,按理说应该是加上我们的输出最小延时才对,小墨当时也不理解,所以就当是记住吧,也就是说
这里的 output minimum delay of pin = - 输出最小延时
这样理解的话,那么输出最小延时越大,那么output minimum delay of pin 就越小了,也就是为什么是减去最小PCB延时的原因吧
后面我们到时序分析工具里面看时序报告图的时候就会发现,如果我们约束的最小输出延时是负数的话,里面显示的却是正数,所以,我们就暂时记住好了,因为真的是不好理解。
三、参数计算
根据我们刚才推断出来的那几个公式,我们就可以进行参数计算了,先来看看我们需要什么参数
输出模型的时候,我们需要的是SDRAM的建立时间,保持时间,外部PCB走线延时,输入模型的时候,我们需要的是外部器件的最大最小Tco
SDRAM的建立保持时间可以从datasheet里面找到
根据器件型号,我们选择建立时间为 1.5 ns ,保持时间为 0.8ns,外部PCB走线延时这个不怎么好算,只能估计吧,因为板子不是我画的,长度也不知道,根据经验,我们知道,信号在PCB上的延时大概为0.18ns /1000mil,那我就估计为最大0.3ns,最小0.1好了
然后是时钟网络延时,也就是源时钟到达源寄存器 - 到达目的寄存器的值,由于我们的时钟是总PLL发出的,时钟从FPGA管脚输出后再送给SDRAM,因此这个值一定是负值,而且也是时钟在PCB上的走线延时,这个值我们估算为-0.1ns好了,因为真的没法算我觉得。
然后是数据经过外部器件的最大最小延时,这个值我们在SDRAM的理论篇里面说了,就是Tac参数和Toh参数,不懂得朋友可以到前面去补补课,这个值我们在datasheet里面也找得到
所以我们取最大Tco 为5.4ns 最小Tco为2.7ns
经过计算得我们的约束参数
最大输出延时 =外部器件的Tsu+外部PCB最大延迟+最大时钟网络延时
=1.5+0.3-0.1=1.7ns
最小输出延时 = 外部器件的Th - 外部最小PCB走线延时 + 最大时钟网络延时
= -(0.8 - 0.1 - 0.1 ) = - 0.6ns
最大输入延时 = 外部器件最大Tco + 外部PCB最大走线延时 + 最大时钟网络延时
= 5.4 + 0.3 - 0.1=5.6ns
最小输入延时 = 外部器件最小Tco + 外部PCB最小走线延时 + 最小时钟网络延时
= 2.7 + 0.1 -0.1 = 2.7ns
四、全局时钟约束
由于我们的时钟是由晶振源传到PLL,然后再由PLL输出给SDRAM和FPGA内部寄存器的,因此我们需要对输入的时钟进行约束,约束其为50M的时钟,并对应好我们的端口时钟clk,即约束我们的输入时钟为50M,并给这个时钟取一个在时序分析时钟的名字,即sys_clk,关于timequest的使用,大家还需自行学习,这里仅仅只是说约束方法
而对于PLL输出时钟的约束,我们仅需在.sdc文件相应的的位置,手动输入约束即可,仅需要一条语句 ,这条命令输进去以后,时序分析工具会自动的为我们约束好PLL的输出时钟
我们可以通过查看时序报告,可以看到,我们的时钟都跑到了我们约束的条件,如果我们不加这条语句的的话,那么PLL的输出时钟是达不到这个要求的,那样的话,我们的时钟都不稳定,更别提系统稳定性了
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于FPGA的DVI/HDMI接口实现(05-13)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- 基于PLB总线的H.264整数变换量化软核的设计(03-20)
- FPGA按键模式的研究与设计(03-24)
- 周立功:如何兼顾学习ARM与FPGA(05-23)