第五章 fpga时序收敛
更新时间:2024-06-02 14:27:01 阅读量: 综合文库 文档下载
- 第五章单元测试智慧树推荐度:
- 相关推荐
写在前面的话:
特权同学花了很多时间在这一章上,甚至当初写《深入浅出玩转FPGA》的时候都没有这样投入过。因为觉得这个时序分析不仅重要,不仅对初学者来说有难度有深度,而且其中还有很多技巧和方法是非常值得总结和归纳的。特权同学虽然以往对这些知识点有过学习,有过实践,也有过总结,但是又一次对这些知识点的重新梳理才发觉其实还可以更深入。学无止境,站在前人(或者说是自己过往认知的基础上)的肩膀上我们可以看得更远,探得更深,摸得更透…… 为了不让大家等得太久,这一章分成多部分以博文形式发表,谢谢大家的支持!也很希望听到反馈的声音,你的问题也许就是我的疏忽。
特权同学在《深入浅出玩转FPGA》一书中也专门有章节和大家探讨时序相关概念,并且有数篇针对TimeQuest的分析案例。但其实很多人还是对这个熟悉而又陌生的知识点望而生畏,觉得无从下手。在初学时,特权同学也有过同样的困惑。但是今天回头看看过去走过的路,发现其实会与不会、懂与不懂之间只是隔了一层薄薄的窗纸而已,只要鼓起勇气花点时间费点精力再用点方法就足以捅破它,迎接你的将会是“柳暗花明又一村”式的豁朗开朗。
咱先在正式入题之前再说些乱七八糟的话题,因为我想,当你的注意力被吸引过来了,我们就可以专心的学习了。昨晚在几位刚毕业(有的还在待业)的年轻人住处聚会(不要误会,是基督徒的聚会,我们在一起读圣经),会后小洪还有特权同学留下和这些“小朋友”们私下谈论了一些话题。因为小洪是比较能耐的过来人,所以话题涉及了工作、创业、公司管理经营的一些想法和理念。讲到创业,一个公司的第一个亿销售额可能需要三年五年甚至更长时间;然而第二个亿往往就不需要这么久了,会大大的缩短,可能只需要一年两年甚至更快。中文有一个成语很恰当的形容这种现象,叫“厚积薄发”。学习的过程也是这样,学FPGA我们不用拿年来算,我们只要用心去学,我们所花的每一分每一秒,我们所掌握的每一个知识点,有一天都可能成为我们理解下一个知识点的“跳板”。当这些“跳板”越来越多的时候,我们前进的步伐也就顺理成章的越来越快。世上本没有免费的午餐(当然,如果你成为基督徒,那么免费的午餐不仅有,而且会越来越多,我们称之为“爱宴”。因为在基督徒中间所传递的是真爱,无条件的爱,当你被这种爱包围的时候,你也会愿意用这种爱去体贴顾惜他人。),要得到一些东西总是要付出一些东西(马经称之为“等价交换”)。你付出的越多得到的自然也会越多,但是事物的发展也是需要遵循一些规律的,学习这种付出得到的常常不会是45度斜线式的等比回报,更多的时候它就好像(对不起,特权同学想说的这种波形太抽象了,都不知道该如何形容了)……用马克思的话来描述就是:前途是光明的,道路是曲折的,在曲折中前进。最后,用圣经节来结束这个话题吧,路加福音6章38节说:你们要给人,就必有给你们的,用十足的量器,连摇带按,上尖下流的倒在你们怀里;因为你们用什么量器量给人,也必用什么量器量给你们。
时序设计四部曲
说时序,这回要真刀真枪的细细的来讲,那么我们还是应该先掌握一些必须的背景知识。解决几个问题,我想这些问题很可能是大多数初学者没有搞明白的。
如何做时序分析?在整个设计的哪个环节需要进行时序约束?如何给设计添加时序约束?如何查看时序报告?如何达到时序收敛?这些疑问其实已经包含了我们接下来要谈的四部曲,即时序分析、时序约束、时序报告、时序收敛。这里事先申明,所谓四部曲不是任何官方提出来的概念,是特权同学对时序设计在FPGA流程中的理解总结出来的。
如图5.1所示,在整个FPGA流程中,时序约束是在设计输入完成(这个“完成”包含了代码编写好、系统集成好、并且通过综合和功能仿真验证后)并进行了一次编译后进行的。如果不进行编译,那么设计者很可能无法找到需要约束的路径,甚至摸不清楚有哪些路径是需要约束的,因此,时序约束前的编译必不可少。时序约束后还需要执行一次编译,这次编译是让开发工具按照设计者的期望(体现到和工具交互的手段就是“时序约束”)去综合与实现,最后用户通过观察时序报告来验证时序是否达到要求。
图5.1
上面是从整个FPGA开发流程的角度来理解时序设计。下面要从时序设计本身来理解,即四部曲之间到底有怎样的关系。如图5.2所示,时序约束也逃不了FPGA固有的迭代特性。在整个系统的功能定型后,设计者需要做的一项工作就是时序分析,这个分析在时序设计的初期可能只是系统的时钟频率考虑以及与FPGA接口的外围器件时序要求考虑。系统时钟考虑是最简单的,FPGA的
时钟源通常是外部晶振,但也许这个晶振频率只是作为FPGA内部时钟管理单元的一个基准输入时钟,而FPGA内部跑的时钟频率也通常不完全一致,时钟管理单元可以产生多个不同频率的时钟。无论如何,这些作为FPGA系统内部的时钟频率是确定的,至少应该是设计者心中有数的。那么,在时序约束时,按照它们需要跑到的频率去约束它们。而与FPGA接口的外围器件通常也都有时序要求,尤其是一些高频传输接口,如果不做好时序分析与约束,甚至会导致系统无法正常工作。这时候需要去翻看对应器件的datasheet,通常直接去找图图和表表就行,图即时序图,表即对应时序图的时间表。这两样东西分析透了,才能够做出正确的约束,而不是错误的过约束或欠约束。
图5.2
做好第一步的时序分析,那么就能够进行恰当的时序约束。时序约束是需要通过开发工具来协助的,Quartus II内嵌的TimeQuest就是我们的利器,它能够帮助我们完成整个时序设计。时序报告也是在TimeQuest内产生的,前面提到了在时序约束后的一次编译过程中工具会尽可能的来满足设计者的要求,最终却是通过时序报告来体现工具的“劳动成果”。在时序报告中,我们可以查看已经约束的路径是否达到既定要求,没达到要求的在TimeQuest中会用红色字体警示。当然了,TimeQuest还提供了一些叫做“时序例外”的约束方法,所谓“时序例外”,就是当我们查看时序报告确定时序不收敛(所谓收敛,就是时序完全达到要求)的时候,我们如果找到一些时序要求本来并不高,但是我们的约束却比较紧,并且很多时候这些路径也达到了要求,这时候我们就有必要放宽对这些路
径的要求,让原本花费在它们身上的努力转嫁到其它还没有达到时序要求的关键路径上。此时,我们所做的工作就叫做时序例外约束,它主要是指false路径约束(即不约束这个路径,通常能够用这种约束的路径是系统运行过程中从始至终不曾变化或完全无关紧要的路径)和多周期路径约束(能够使用该约束的比较典型的是多个时钟周期数据才会变化一次的路径)。
时序设计的第一轮是验证原始约束是否达到要求,一般很难一次性成功(不排除系统性能要求不高的情况下一次性成功)。那么第二轮就需要结合时序报告中的各种路径(包括失败路径和一些可能的过约束路径),并重新考量第一轮的时序分析是否有偏差。最后可能需要对原来的路径约束做一些更改,或者添加一些时序例外约束。然后重新编译,重新分析时序报告并验证时序是否收敛,如此往复恩轮,直到最后时序完全收敛。忘了看过哪位“大虾”的文章,说时序收敛的过程是“打鼹鼠”,特权同学非常赞同,时序报告中体现出来的结果往往是各个区域路径“此起彼伏”式的失败与成功的交错。总之,时序设计师一项费时费力费脑子的活。
当然了,其实时序设计并不是独立于FPGA开发流程的其他环节的。在很多极端的情况下,光靠上面的一些反复更改约束并不一定能够解决时序问题。这时候也许需要对工具的Systhesis选项或者Fitter选项做一些设置,再或者回到源代码进行优化,其实这时候的工作就成了整个流程迭代性的一部分。
一部曲——时序分析
系统整合完毕,所有的设计输入、初步的功能仿真等工作就绪后,设计者应该对整个系统所涉及到的各种时序模型做到心中有数。如图5.3所示,当我们回顾第二个系统的整个架构时,在时序设计的初期,我们首先应该考虑的是这个系统要达到怎样的速度性能才算符合要求。那么,这个速度性能考虑包括:系统时钟频率(可能会有好几个系统工作时钟)、外设接口的频率(与FPGA相关的考虑就是FPGA与这些外设间连接的管脚的时序要求)。从本质上来讲,好像就这两方面。
图5.3 第二个系统框图
第二个系统中与系统时钟频率有关的组件是哪些?与外设接口频率有关的组件又是哪些呢?其实图5.3中已经很明显的为大家划分出来了。NIOS2处理器以及时钟单元、System ID、定时器这几个组件没有和外围器件直接连接的管脚,那么可以认为它们的时序路径只和系统内部的时钟有关。而GPIO、JTAG Uart、SDRAM控制器和EPCS控制器这几个组件都有与FPGA外部器件连接的管脚,那么它们的时序路径就涉及到外围器件的时钟频率(严格来讲可能一般不说是外围器件的时钟频率,总之,你可以理解为这里要说的是外围器件要正常通信需要满足的时序要求)。但是由于JTAG Uart、EPCS控制器使用了FPGA的一些专用管脚,并且无需用户在集成这些组件后再手动分配管脚号,并且在FPGA底层的布局布线上工具已经默认能够保证它们的时序收敛了。所以,本实例中需要考虑的外围器件时序路径分析只有GPIO外设和SDRAM控制器了。而GPIO连接的外围设备只不过是LED灯而已,它们的闪烁大都是second级别的,相对于FPGA内部快慢延时最多也只有几十ns的情况,大可以不必理会。因此,可以这么认为,GPIO与外围的时序基本没有要求,要不要做管脚的时序约束无关紧要,对我们的设计照成不了任何影响。用前面说过的情况来处理它,就把它归入false路径。因此,重点就落在了SDRAM的时序分析上。 好的,从上面我们的讨论中分析得出第二个系统需要分析两方面时序:系统内部时钟的时序和SDRAM接口的时序。 系统内部时钟时序分析
在我们的第二个系统中,依然只有一个外部输入的25MHz时钟。而仅仅一个时钟对于整个系统运行来说是不够的,因此我们需要借助于Cyclone II器件内部的PLL来对这个外部时钟进行倍频或分频处理。 如图5.4所示,这是PLL的简单接口示意图。Inclk0是输入的外部25MHz外部时钟,由这个时钟通过PLL内部的处理产生了c0/c1/c2三个输出时钟。这
三个输出时钟的频率都是用户可以配置的,通过图中的Ratio列的值可以看出该设计中他们的输出值分别是c0=25MHz,c1=50MHz,c2=50MHz。而在相位上c0/c1是0dg(一个时钟周期正好是360dg),c2的相位是108dg(即(108/360)*20ns=6ns)。
图5.4
又由于c2是作为驱动外部SDRAM同步的输出时钟信号,因此该系统中真正需要我们关注的内部系统时钟只有c0和c1。另外,inclk虽然是外部输入的时钟信号,但由于它是连接在了FPGA的专用时钟引脚上,因此也要纳入我们的内部系统时钟考虑的范围内。对于他们的分析很简单,因为inclk/c0/c1的频率分别应该是25MHz/25MHz/50MHz,所以后面的时序约束中只要对它们做如此约束就可以了。对于PLL的输出时钟约束,有一个非常“偷懒”的办法,后面会提到,甚至于我们无需关注这个PLL的输出频率到底是多大,只要使用一条语句就可以让时序分析工具自动识别我们对PLL的配置并进行约束。 SDRAM接口时序分析
在《深入浅出玩转FPGA》一书的笔记15里提到了很多IO接口约束的实例,也提到了源同步接口的分析与约束,在开始这部分知识点前也建议大家不妨好好再消化一下那些内容。当然,我们这里还是会考虑到知识的系统性,所以也会带大家重新回顾一下比较重要的知识点。 如图5.5所示,是一个简单的源同步接口(FPGA与外部芯片)模型。FPGA内部的时序逻辑基本是寄存器到寄存器的,通常是用相同的时钟分别去驱动源寄存器和目的寄存器,而这个源同步接口的目的寄存器(驱动外部芯片)时钟虽然与源寄存器时钟不同,但仍然是FPGA内部产生的,一般两个时钟是同频不同相的关系。因此,我们要做的就是对时钟延时路径以及对数据传输路径延时的分析。
图5.5
而对于外部器件,从本质上讲,它和FPGA之间的时序也是寄存器到寄存器的传输,只不过通常源寄存器和目的寄存器是分别处于FPGA内和外部芯片内,并且驱动他们的时钟也常常不是一个时钟。但是既然它们在本质上是类似的,那么我们就可以在寄存器到寄存器传输的基础上,对它们的不同点做额外的考虑后进行分析。下面我们就通过FPGA内部路径分析和IO口时路径分析的对比中来摸透IO时序路径分析的脾性。
其实若是一个FPGA内部的路径,如图5.6所示,若约束FPGA的时钟,那么简单的来看,公式 +( - )<就必须得到满足。当然了,往深入的探讨,寄存器的建立时间和保持时间要求也都是需要得到满足的。
图5.6
而同样利用这样的思维去考虑FPGA与外部芯片的时序路径关系的时候,其实也还是完全一样的。只不过的整个路径原本都在FPGA内部,但现在却要一分为三了,有一部分在FPGA内部,有一部分在芯片内部,还有一部分在哪里?没错,就是他们在电路板上连线的那部分(图5.5中间粗体路径)。而时钟路径的分析会稍微复杂一些,有可能和源时钟同频也可能不同频,有可能同相位也可能不同相位,只能具体问题具体分析了。对于我们这个设计,也可以理解为
是一个比较典型的源同步接口的模型。所谓源同步接口,简单的理解就是输出的数据和输出的时钟路径都是由同一器件(这里是FPGA器件内部)产生的,并且数据传输和时钟的上升沿(或下降沿)通常是中央对齐的或是边沿对齐的。我们的这个时序是中央对齐的,所谓中央对齐,就是指在数据的采样端(目的寄存器),时钟的上升沿和数据传输的有效窗口(即两次数据变化的中央)是对齐的。 对于SDRAM的数据路径的分析,因为前面说到的三部分里,PCB板的走线延时对于特定的目标应用板是固定的,在芯片内部的路径时间等延时参数也相对固定,可以从芯片的datasheet查到。那么,只有在FPGA内部的那部分路径延时在时序设计前还是个未知数,而我们要做的就是算出在整个数据路径延时中留给FPGA内部走线延时的时间范围是什么,这个时间范围就是我们要分析的对象,也是我们要添加的约束内容。
我们再来看一个波形,如图5.7所示,这是一个理想的中央对齐的源同步传输。如果结合图5.5来理解,Data clock即FPGA内部源寄存器的时钟(图5.5的Sys_clk),Output clock即FPGA产生的作为外部芯片的时钟(图5.5的Ext_clk),Data bus即FPGA与外部芯片的数据传输总线(图5.5的Data out)。
图5.7
在FPGA内部,Data clock的每个上升沿Data bus会产生跳变。而Data bus需要在芯片端口被Output clock的上升沿锁存,因此Data bus的数据有效窗口(数据保持稳定的两次跳变的中央)必须对准Output clock的上升沿。那么Output clock喝Data clock就会有一定的相位差(Phase shift),理想状态下这个相位差为180dg。
说完理想的状态,我们再来看图5.8,这是一个和实际情况比较接近的波形(很多时候实际波形要比这复杂得多)。时钟Data clock后的若干延时时间(Output delay)后输出数据(Data bus)才会发生变化,而相应的外部时钟(Output clock)也必须做出调整(Phase shift比理想状态下要大一些)。
图5.8
此为,特权同学发现用这个图来理解时序分析工具将要进行的建立保持时间检查再合适不过了。看那两条虚线,左侧向右打箭头的是建立时间检查,即检查数据输出在最慢情况下,数据是否能够在输出时钟上升沿前的某一个既定时间内(目的寄存器的建立时间)到达。右侧向左打箭头的是保持时间检查,即检查下一个(当然也可以换到前一个时钟周期来考虑,效果是相同的)数据输出在最快情况下,是否能够在上一级时钟上升沿的某一既定时间(保持时间)之后到达。 好的,在理解了数据和时钟路径传输的基本概念之后,下一部分内容会配合约束方法更详细的来讨论。前文提到了,这里的SDR SDRAM的数据信号、地址信号以及相关的控制信号传输到SDRAM端口时,它们的信号有效窗口(所谓有效窗口,就是在一个时钟传输周期内,信号总线上所有数据保持稳定不发生变化的时间范围)必须和SDRAM时钟的上升沿对齐,而如何能满足这个要求呢?通常的做法也就是利用PLL的相位调整来达到输出时钟的可控性。下面我们就要研究一下SDRAM的时钟信号相位到底该如何取值。
《Quartus II Handbook Version 9.1 Volume 5:Embedded Peripherals》中Section I的1. SDRAM Controller Core部分提出了如何估计SDRAM数据有效信号窗口,并且给出了SDRAM时钟相对于FPGA时钟相移估计的公式。 从机理上来说,下面的估算无非就是通过第一轮的基本时序约束,查看FPGA内部管脚的一些延时值,然后再结合SDRAM的芯片资料提供的一些基本时序参数,从而计算出读和写数据时的滞后值和超前值,然后在这四个值之间取一个比较合适的中间值就是估计的相位值了。注意了,这里只是估计的,在这个估计值中,还有两个因素是没有考虑进去的,PCB板的线延时时间和SDRAM从PLL输出到外部管脚之间的延时时间。这两个参数虽然对最后的输出相位影响不是非常大,但是也是需要在后期分析中加以考虑的。
我们首先需要理解读周期最大滞后时间、读周期最大超前时间、写周期最大滞后时间、写周期最大超前时间四个参数的估算公式。原文的四个公式如图5.9和图5.10所示。所谓超前时间,是指SDRAM时钟的相移相对于FPGA时钟沿为负的偏移值;而滞后时间则是指SDRAM时钟的相移相对于FPGA时钟沿为正的偏移值。
图5.9
图5.10
对上述四个公式的推导如下:
过去特权同学对这个相移估算也没有太多办法,只能凭感觉找,或者说是主要根据时序分析的结果来一次次的定位最佳的相移值,工作量比较大,也有撞运气的成分在里面,而Altera官方提出的这个方法还是很有效的,至少可以将用户的相移值定位到一个比较小的范围内再进行调整。在这个基础上还需要考虑
一些PLL输出延时或者说是板级延时之类的影响,一般也只需要微调就可以搞定。
由于这个值的估算还涉及一次初步的时序约束以及查看时序报告,并提取相关参数进行计算,所以把实例的分析将放到后文阐述。初步时序约束的时候也只是先取个大概值。 二部曲——时序约束
其实具体进行时序约束的数值通常应该算在时序分析这一步中,之所以特权同学要放到这一步骤来谈,是因为不同的时序约束工具尤其对于IO口的约束方式稍微有些区别,甚至相同的工具也可以有不同的约束方法。因此,约束值的计算也通常视特定约束方法而定。换个角度看,一种方式分析通了,其实其它方式也都是换汤不换药的。
在Quartus II工程中,默认的时序分析工具可能不是TimeQuest,因此需要在菜单栏中点击进入AssignmentsàSetting…,然后如图5.11所示,勾选Use TimeQuest Timing Analyzer during compilation。
图5.11
此为,最好如图5.12指定以.sdc为后缀名的约束文件。在SOPC系统生成后,通常也会自动产生一个cpu.sdc的系统约束文件,它主要对SOPC架构的处理器以及外设进行约束。因为这些组件都是使用官方提供的或者第三方的IP核,它们一般也都能够集成时序约束文件。
图5.12
下面我们开始大家期待已久的TimeQuest之旅。点击任务栏上闹钟模样的按钮即可进入TimeQuest。
图5.13
因为我们已经有了一个名为cpu.sdc的约束文件,所以可以在TimeQuest主界面的右下方的Tasks面板直接点击Read SDC File即可。若是还没有任何的约束文件产生,需要用户点击FileàNew SDC File自己新建一个新的.sdc文件。
图5.14
全局时钟约束
对于系统产生的cpu.sdc文件里本身有一些约束语句,我们不用理会,可以在此基础上添加必要的约束语句。首先要做的是全局约束,主要是指系统时钟的约束。FPGA器件外部输入时钟的clk是25MHz,并且它也作为PLL的输入时钟,由PLL产生了多个时钟作为FPGA内部工作的时钟。因此,我们首先约束clk,然后约束PLL输出时钟。
一种简单的方法是点击菜单栏上的ConstrainsàCreat Clock…选项,弹出了傻瓜式的GUI界面,我们对系统输入时钟做如图5.15的约束即可。
图5.15
点击Run后对话框消失,此时我们可以观察工具视窗下方的Console窗口中出现了create_clock -period 40 -name EXTIN_CLK [get_ports {clk}]的语句,这就是最终写入.sdc文件中的约束脚本。用户也可以在Console中直接输入该语句然后回车,或者干脆打开.sdc文件,找个空白处输入该语句然后保存。总之,手段是多样的,就看用户习惯。约束完这个时钟,我们使用最直接的方法在.sdc文件中输入derive_pll_clocks -use_tan_name语句,即可让系统自动产生clk作为输入的PLL的所有输出时钟的约束,系统能够根据配置PLL时的相关信息来约束输出时钟的频率。 先提醒大家注意,在每次使用GUI进行约束后,需要以下两个步骤才能够确保所执行的约束写入了.sdc文件中。首先如图5.16所示点击Tasks下的Updata Timing Netlist,然后点击Tasks面板最下方的Write SDC File,在弹出的保存文件窗口中覆盖原来的.sdc文件。
图5.16
IO接口约束之virtual clock生成与约束
我们先要区分一下IO接口的约束类型。如果从信号传输方向来看,IO接口无非有三种,即所谓的input/output/inout三种。在可以明确定义virtual clock(虚拟时钟)的情况下,约束这三类端口只有两种方式,即set_input_delay/set_output_delay,当然每种约束最好能够分别指定max_delay值和min_delay值。这里所说的virtual clock,是有别于FPGA内部钟控寄存器
所使用到的时钟,它是FPGA外部接口芯片的时钟。就拿FPGA的input port来说,源寄存器在外部芯片中,目的寄存器在FPGA内部,而源寄存器和目的寄存器时钟往往不一致。因为对于时序分析工具TimeQuest而言,我们已经对FPGA内部所有的系统时钟进行了约束,因此它可以确定的时钟是目的寄存器上的(即FPGA内部的),源寄存器上的(芯片内部的)时钟既然不是FPGA内部的,那么TimeQuest也就不知道它到底“长什么样”了。所以,作为设计者,我们就有义务让TimeQuest知道,我们所做的就是建模来定义一个virtual clock,它的特性就是尽可能的和源寄存器的时钟属性一致(也许不能够完全一致)。做完这一步,其实还不够,虽然有源寄存器时钟和目的寄存器时钟了,但是我们必须清醒的意识到TimeQuest只是Altera的工具而已,它熟悉的只是Altera自己的FPGA器件而已,若要让它清楚市面上千百万种芯片的内部时序关系和参数,那基本上很难,或者说这是一个非常有创意的想法,目前确实没有哪家厂商可以做到这一步。因此,这一步通常需要我们手动完成,而如果我们只是定义了系统内部时钟和virtual clock,“傻瓜”工具TimeQuest还是不知道到底我们定义的这个virtual clock是要和哪些IO脚相关。所以,我们还需要把IO脚和virtual clock关联上,并且指定这些IO脚从进入FPGA器件内部的那一刻开始直到传输到目的寄存器的输入端为止,这个路径的传输延时不可以太大也不可以太小,它需要有一个范围界定,因此时序分析的过程要充分考虑好这个范围大小。在时序约束中就可以把这个范围告诉TimeQuest。
其实TimeQuest支持两种约束IO端口的方法,其一就是前面刚提到的和virtual clock相关的约束方法。另一种方法来得更直接,即使用
set_min_delay/set_max_delay约束IO脚从进入FPGA器件内部的那一刻开始直到传输到目的寄存器的输入端为止的时间范围,它和前一种方式的不同在于它的路径分析中不包含目的寄存器的相关参数,并且这种方式更适合于异步路径的约束,它可以对任意两个端点到端点间的路径进行约束。
但无论是哪一种约束方式,只要我们把基本原理弄明白了就OK。下面我们就第一种更适合源同步接口约束的方式来学习,当然其中也用到了后一种方式来约束FPGA产生的输出时钟。
先定义前面提到的virtual clock,这个virtual clock是FPGA内部PLL模块的c2产生并提供给SDRAM的。如图5.17所示,用ConstrainàCreate Generated Clock…定义virtual clock。Clock name可以任意取名,Source为PLL输出的时钟c2,Targets为FPGA连接SDRAM的管脚sdram_clk。其他选项不用填。最后点击“Run”完成定义。
图5.17
约束前一步中定义的Source时钟到Targets时钟的路径。因为前面的Targets时钟即sdram_clk也是FPGA的输出管脚,它的约束没有virtual clock可用,单独来说(虽然它本身就是一个时钟信号)应该算是一个异步信号。所以我们对它的约束就用set_max_delay和set_min_delay。如图5.18和图5.19所示,分别约束PLL输出时钟c2到FPGA的输出管脚sdram_clk的最大和最小路径延时(set_max_delay和set_min_delay)。From选择PLL输出时钟端口c2;To选择FPGA连接SDRAM的管脚sdram_clk;Delay value通常可以取值set_max_delay为3ns,set_min_delay为0ns(因为这个是FPGA内部走全局时钟网络的管脚,它的时钟网络延时会比较小,通常时序要求紧一些)。
图5.18
图5.19
IO接口约束之理论推导
这一步要对SDRAM与FPGA连接的IO口进行约束,这些IO口包括了控制信号、地址信号、数据信号。除了数据信号是双向总线,其它均为输出信号。无论如何,我们要做的约束主要就是两个类型,即输入约束和输出约束。
在进行这一步之前,我们要再做一些理论储备,再明确一下我们要约束的取值范围到底是针对整个源寄存器到目的寄存器路径上的哪一段。
先看output管脚的setup(Equation 7-3)和hold(Equation 7-6)时序余量计算公式,Output Maximum Delay of Pin和Output Minimum Delay of Pin是我们需要添加的output约束值。关于这几个公式的详细推导和说明可以参考特权同学的《深入浅出玩转FPGA》一书。
从Output Maximum Delay of Pin和Output Minimum Delay of Pin在公式中的关系,再对照如图5.20所示的寄存器模型,我们不难推断output delay指定的时间范围是针对于这些红色(带箭头)路径而言的。它的值也是这三部分路径之和(图示的两条时钟路径算为一部分,需要注意路径取值的正负)。
图5.20
上述的三部分路径之和,有如下公式用于计算output delay的最大和最小取值。
最后,关于PCB clock skew,它是指在源寄存器和目的寄存器在PCB板上的时钟传播的延时差值。拿理想的状况来理解这个概念,当源寄存器和目的寄存器时钟都是PCB板上的一个晶振输出来的,那么它们到达两个寄存器各自的输入端口时势必要有延时,因为他们到达芯片内部的延时已经被计算过了(前面的几个公式和说明里都提到了),所以现在唯一不确定的是他们在PCB上走线的延时。因此,我们定义
是好的,但是有些概念需要先消化,因为基本的概念是定义出来的,没有太多的逻辑可推导,要问为什么其实没有太多意义。这时候就需要先接受,然后回头再系统的理解这些知识点。其实有时候我们发现自己总喜欢在问一些很傻瓜的问题,这些问题傻到就好像在问为什么1是1、2是2,为什么1不是2、2不是1。呵呵!有时候,就像小孩吃饭一样,不要花时间去搞懂为什么要吃饭,饭里都有什么成分?应该简单的先去吃,吃饱喝足了才有精力去研究去搞懂它。
再来看input管脚的setup(Equation 7-2)和hold(Equation 7-5)时序余量计算公式,Input Maximum Delay of Pin和Input Minimum Delay of Pin是我们需要添加的input约束值。
同样地,我们通过前述两个公式再结合图5.21,就应该能推断出input delay所针对的传输路径就是红色箭头的两条路径(按照output delay的分法同样是三部分)延时之和。
图5.21
有关input delay的运算公式如下。
公式中的参数与output delay类似,数据经过PCB的最大和最小延时是可以通过目标板的布局布线进行计算的。数据经过外部器件的最大或最小延时时间也都是可以通过查看相关接口芯片的datasheet可以确定的。此外,PCB clock delay值同样是指时钟在PCB板上由晶振源传输到源寄存器与传输到目的寄存器的时间差。
正在阅读:
第五章 fpga时序收敛06-02
常州市住房公积金个人缴存户账户设立申请表04-30
夸女人的经典语句02-22
2012年银行从业考试04-14
体育教育专业知识05-25
浅析中国传统孝道文化及其现代价值10-07
人工智能_(马少平_朱小燕_著)_清华大学出版社_课后答案08-16
计算机组成原理课程设计报告03-01
学校食堂领导陪餐制度06-23
安全标准化13要素建设资料-精 - 图文01-16
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 时序
- 收敛
- fpga
- 混沌电路的设计与研究电子专业论文
- 2018年幼儿园“小学化”专项治理工作总结、自查汇报、整改措施(
- 七万吨谷氨酸工厂设计修改
- 人力资源转化为人力资本的战略意义
- 学校资产管理制度
- 我国文化产业研究概况综述
- 重庆市关于机关事业单位工作人员死亡后遗属生活困难补助若干具体
- CA6140型卧式车床进给箱设计参考
- 东方电气汽轮机安全监测系统培训教材
- XX年度工作总结、XX年工作部署暨表彰大会主持词
- 哈达中心小学工作总结
- 酒店无线解决方案-ARUBA - 图文
- 达州市2018年高中阶段教育学校统一招生考试理科综合试题(物理部
- 小学1-6年级成语大全附解释
- 滁州拓展机构哪家好? - 图文
- 云南省昭通市2013届高三毕业生复习统一检测 英语 Word版含答案
- 山东祥辉钢结构厂房(含土建)施工组织设计
- 宏誉物流公司货物运输安全生产管理制度
- 2014年家居装修设计的三大要点每日一讲(3月3日)
- 《靳式截针方法全解》