您的位置 首页 新品

零根底学FPGA (二十五)必会! 从静态时序剖析到SDRAM时序收敛(下篇)

七、SDRAM工作时钟相位偏移计算从上篇文章中我们知道,我们的数据是要经过一定的延时才会到达目标器件的,这个延时也就是相对于源寄存器的时钟发射沿的时间延时,数据在源寄存器时钟的上升沿到来时

 七、SDRAM作业时钟相位偏移核算

  从上篇文章中咱们知道,咱们的数据是要通过必定的延时才会抵达方针器材的,这个延时也便是相关于源寄存器的时钟发射沿的时刻延时,数据在源寄存器时钟的上升沿到来时输出,通过FPGA的走线,PCB走线等,抵达方针寄存器的数据端口时会有必定的延时,而这个数据要想被方针器材的意图寄存器锁存,那么,意图寄存器的锁存时钟应该尽量在数据的有用窗口内才干保证数据被捕获成功。所谓数据的有用窗口,便是数据在两次改变之间的中心部分,也是数据最安稳的部分。

  所以,要想将数据正确捕获,咱们的SDRAM作业时钟有必要相关于源时钟有必定的相位偏移,这个相位偏移是咱们能够在PLL模块中手动设置的,这个值应该取多少?下面咱们就来核算这个值。

  这个相移值的核算,需求凭借四个参数,即读周期最大滞后、超前时刻,写周期最大超前、滞后时刻,下面依依来讲

  1、读周期滞后时刻

  所谓读周期滞后时刻便是,SDRAM的作业时钟相关于FPGA的作业时钟慢了多少时刻。我用一个图来解说

360桌面截图20150330165516.jpg

  下面我来解说一下这个图,既然是读周期,那么便是在SDRAM的作业时钟下宣布数据,在FPGA的作业时钟下捕获数据,由上图能够看出,读周期的滞后时刻便是图上的两个参数相减对吧,在理论篇里我讲过,SDRAM在宣布一个数据之后,数据会坚持一段时刻的安稳,这个参数便是Toh,这个参数能够查到。

  数据宣布后,需求被FPGA的作业时钟捕获,可是捕获的时分需求考虑坚持时刻不能违规,因而,Th这个参数便是FPGA的寄存器坚持时刻,这个参数咱们需求从时序陈述里查,等会咱们再说,那么咱们能够核算出

  读周期最大滞后时刻 = Toh – FPGA的坚持时刻Th

  2、读周期超前时刻

  所谓超前时刻,便是SDRAM的作业时钟相关于FPGA的作业时钟快了多少

360桌面截图20150330170536.jpg

  看到这儿,有些人或许就不了解了,SDRAM的时钟比FPGA的时钟相位快了还怎样捕获数据咧?其实,我所说的快慢,仅仅说时钟的上升沿谁在前罢了,咱们完全能够这么了解,便是数据是在SDRAM时钟的前一个时钟沿宣布的,

  上面的原图是错的,即SDRAM宣布数据后,要通过Thz的时刻数据才会有用,这个时刻也是能够查到的,即咱们前面理论篇所讲的参数那个参数TOH,留意这个TOH和上面的那个Toh是不一样的。然后是FPGA的树立时刻,咱们从时序陈述里查。那么,能够得到

  读周期最大超前时刻 = Tclk – (TOH + FPGA的树立时刻Tsu)

  3、写周期滞后时刻

360桌面截图20150330172401.jpg

  原图也是过错的,既然是写周期,那么便是在FPGA的作业时钟下发数据,在SDRAM的作业时钟下捕获数据,那么源寄存器的作业时钟上升沿到来时,数据发送,要等一段时刻后,数据才会有用,这段时刻应该是FPGA寄存器的输出延时时刻,即图上的Tcomax,这个参数咱们需求到时序陈述里找,Tss当然便是SDRAM的树立时刻了,所以咱们能够得到

  写周期滞后时刻 = Tclk – (Tcomax + SDRAM的树立时刻Tsu)

  4、 写周期超前时刻

360桌面截图20150330174043.jpg

  这个图或许刚开始了解起来不太美观,我用红笔标出来了,也便是说,这儿的Tcomin参数,是当下的时钟沿,到下一个数据有用的时刻,而其时的数据,是上一个时钟沿宣布的。当然,Toh即SDRAM锁存数据的坚持时刻了,因而咱们得到

  写周期最大超前时刻 = Tcomin – Toh

  5、参数核算

  下面咱们来找这些参数,将上篇文章中的数据增加束缚之后,履行一次全编译,当然这个时分肯定是时序不收敛,不过不要紧,时序收不收敛跟咱们的PFGA树立坚持时刻以及数据输出时刻是没什么联系的。

  咱们先来看树立坚持时刻,由于树立坚持时刻是读周期的参数,因而,咱们检查读周期的途径时序陈述,也便是sdram_data途径

360桌面截图20150330183710.jpg

  咱们右键,陈述最糟糕途径得到下图

360桌面截图20150330184102.jpg

  书上说的是,从左上方的数据抵达途径中能够得出

  数据的树立时刻 17.602 – 7.291 – 3.279 =7.032ns

  即准树立时刻 – 发射沿相对时刻 – 时钟网络延时的时刻,其实单看这个公式是不好懂的,小墨其时也不了解为什么树立时刻是这么算的呢?后来我看了一下右面的图,才逐渐了解过来,其实看右面的图更简单了解一点

360桌面截图20150330190322.jpg

  看了这个图咱们就会了解,当17.602 减去那两项之后,剩余的便是咱们设置的最大输入延时时刻以及数据进入FPGA的走线延时时刻,为什么这段时刻是树立时刻呢?咱们之前不是界说数据不是应该在树立时刻内坚持安稳吗?可是这段时刻内,数据还没到啊。对,没错,好像是这样的,数据没到,为什么没到呢?是由于咱们的数据延时太长,以至于咱们的捕获时钟在当下的时钟沿捕获不到,因而,这就触及到了多周期途径束缚的常识,咱们能够让捕获周期为2 ,也便是说,比及下一锁存沿到来的时分再把数据捕获就好了。

  咱们再来看一下这两段时刻,榜首段时刻,也便是时钟发射沿相对时刻加上时钟网络延时的时刻,其实这个时刻便是SDRAM宣布数据,到数据出现在数据总线上的时刻

360桌面截图20150330170536.jpg

  再回过头去看一下咱们剖析读周期之后时刻的时分,数据出现在数据总线上之后是不是直接被锁存沿锁存了?这样说来便是没有加上数据在PCB走线的延时,因而上图仅仅一个抱负进程,即没有考虑PCB走线的延时,而咱们的时序剖析东西的确将其考虑在内了,所以,咱们的FPGA树立时刻,除了包含数据坚持安稳的时刻外,还应加上这段走线延时的时刻,这也就解说了,为什么咱们的树立时刻是那么算的

  这个进程是我自己的了解,不知道是不是精确,觉得有问题的朋友请活跃纠正,谢谢

  同理,咱们用相同的办法

  算出坚持时刻为 4.122ns

  下面再来看FPGA的输出时刻,这个进程就要看时序陈述中的输出途径了,依照相同的办法,咱们找到输出途径的树立时刻的时序陈述

360桌面截图20150330194752.jpg

  咱们能够看到,这个很直观,没有像上面那个那么杂乱

  最大输出延时为6.161ns,

  同理,检查输出途径坚持时刻的时序陈述

360桌面截图20150330195412.jpg

  这个也比较直观,用14.623 减去 10 就好了,为什么要减10呢?再来看这个图

360桌面截图20150330174043.jpg

  头一个发射沿为0时刻的话,咱们需求等一个时钟周期后发射第二个沿,也即这儿的数据抵达时刻14.623,是下一个数据的抵达时刻,减去10,不便是咱们的最小输出时刻了么。

  所以,咱们的最小输出时刻为4.623ns

  好了,一切的参数都有了,下面核算

  读周期最大滞后时刻 = Toh – FPGA的坚持时刻Th = 2.7 – 4.122 = – 1.422ns

  读周期最大超前时刻 = Tclk – (TOH + FPGA的树立时刻Tsu) = 10 – (5.4 +7.032)=-2.432

  写周期最大滞后时刻 = Tclk – (Tcomax + SDRAM的树立时刻Tsu)

  = 10 – (6.161 +1.5) = 2.339ns

  写周期最大超前时刻 = Tcomin – Toh = 4.623 – 0.8 = 3.823ns

  这样,咱们依据公式,取最小滞后时刻为 – 1.422 最小超前时刻为 -2.423

  取二者均匀值得 (-1.422 – 2.423 )/ 2 = – 1.9225

  然后,还没有完…. 时序剖析这一块便是这么费事…

  咱们现在考虑的,仅仅是考虑的是在SDRAM端口的时钟延时,也便是说还没有考虑SDRAM时钟从PLL输出,通过FPGA内部走线,和外部PCB的延时,咱们想一下,是不是有一个这样的联系

  便是,PLL的时钟偏移 + 时钟从PLL输出在FPGA内部的延时 + 时钟在外部PCB走线的延时 = SDRAM 端口的时钟延时

  而咱们要手动增加的,便是PLL的时钟偏移值。再者,上篇文章咱们对虚拟时钟SDRAM_CLK进行束缚的时分,咱们对他就行束缚为最大值为3ns对吧, 时钟从PLL输出在FPGA内部的延时就能够按咱们所束缚的最大值来核算,所以因而,咱们核算

  PLL的时钟 偏移值 = -1.9225 – 3 – 0.1 = – 5.0225

  换算成正值为 10 – 5.0225 = 4.9775

  到此为止,咱们的相位偏移才核算结束,咱们将它送给PLL

360桌面截图20150330203333.jpg

  八、多周期束缚

  对其进行全编译,检查时序陈述,发现时序依然不收敛

360桌面截图20150330203629.jpg

  检查过错时序陈述能够看到,咱们没有做多周期束缚,至于为什么,上面现已说过了,这儿直接来做

  咱们设置延时周期数为2,即在第二个时钟周期进行数据锁存,由于是输入途径时序违规,所以咱们束缚的多周期途径便是从咱们的虚拟时钟,也便是SDRAM的作业时钟,到咱们FPGA的作业时钟clk1

360桌面截图20150330204343.jpg

  再履行一次全编译,一切的途径到达时序收敛

360桌面截图20150330204612.jpg

  当然,除了这些,咱们还需求一些时序上的优化,以及一些微调,要想到达体系的真实安稳,光做这些仍是不行的,小墨也是在学习傍边,更深化的探求我只能说关于现在的我来说是无能为力了,有许多经历都是咱们后续在不断地探索中取得的,急也没用,仍是安心做好当下,一步一个脚印,学无止境,咱们永久不能说自己学会了,只能说了解了,渐渐来吧~我们还需加油!

  下面是我调好的板级测企图,下面也会附有源代码,不过下到你的板子上不必定跑的起来哦,我们仍是自己亲手算算这些参数,比及板子真实跑起来的时分,你才会感受到那种成功的高兴~

360桌面截图20150330210207.jpg

  好了,SDRAM就写到这吧,谢谢我们的支撑~

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/116098.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部