第五章 fpga时序收敛

上传人:ba****u6 文档编号:180736127 上传时间:2023-01-07 格式:DOCX 页数:20 大小:416.55KB
返回 下载 相关 举报
第五章 fpga时序收敛_第1页
第1页 / 共20页
第五章 fpga时序收敛_第2页
第2页 / 共20页
第五章 fpga时序收敛_第3页
第3页 / 共20页
点击查看更多>>
资源描述
写在前面的话:特权同学花了很多时间在这一章上,甚至当初写深入浅出玩转 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中已经很明显的为大家划分出来了。NI0S2处 理器以及时钟单元、System ID、定时器这几个组件没有和外围器件直接连接的 管脚,那么可以认为它们的时序路径只和系统内部的时钟有关。而 GPIO、 JTAG Uart、SDRAM控制器和EPCS控制器这几个组件都有与FPGA外部器件连接 的管脚,那么它们的时序路径就涉及到外围器件的时钟频率(严格来讲可能一般 不说是外围器件的时钟频率,总之,你可以理解为这里要说的是外围器件要正常 通信需要满足的时序要求)。但是由于JTAG Uart、EPCS控制器使用了 FPGA 的一些专用管脚,并且无需用户在集成这些组件后再手动分配管脚号,并且在 FPGA底层的布局布线上工具已经默认能够保证它们的时序收敛了。所以,本实 例中需要考虑的外围器件时序路径分析只有GPIO外设和SDRAM控制器了。 而GPIO连接的外围设备只不过是LED灯而已,它们的闪烁大都是seco nd级 别的,相对于FPGA内部快慢延时最多也只有几十ns的情况,大可以不必理会。 因此,可以这么认为,GPIO与外围的时序基本没有要求,要不要做管脚的时序 约束无关紧要,对我们的设计照成不了任何影响。用前面说过的情况来处理它, 就把它归入false路径。因此,重点就落在了 SDRAM的时序分析上。好的,从上面我们的讨论中分析得出第二个系统需要分析两方面时序:系 统内部时钟的时序和SDRAM接口的时序。系统内部时钟时序分析 在我们的第二个系统中,依然只有一个外部输入的 25MHz 时钟。而仅仅 一个时钟对于整个系统运行来说是不够的,因此我们需要借助于Cyclone II器件 内部的 PLL 来对这个外部时钟进行倍频或分频处理。如图5.4所示,这是PLL的简单接口示意图。InclkO是输入的外部25MHz 外部时钟,由这个时钟通过PLL内部的处理产生了 c0/c1/c2三个输出时钟。这三个输出时钟的频率都是用户可以配置的,通过图中的 Ratio 列的值可以看出该 设计中他们的输出值分别是cO=25MHz, c1=50MHz, c2=50MHz。而在相位上 cO/c1是Odg(一个时钟周期正好是360dg),c2的相位是108dg(即(108/360) *20ns=6ns)。(:严|如年MkRatioPh (dgj匚el2/10.00SO.OD-V2/1COO ESG.Kin*lkD fnt护电皿y : 25.000 MHz OprldQn Mo-de: FJorml图 5.4又由于 c2 是作为驱动外部 SDRAM 同步的输出时钟信号,因此该系统中 真正需要我们关注的内部系统时钟只有c0和cl。另外,in clk虽然是外部输入 的时钟信号,但由于它是连接在了 FPGA 的专用时钟引脚上,因此也要纳入我 们的内部系统时钟考虑的范围内。对于他们的分析很简单,因为 inclk/c0/c1 的 频率分别应该是25MHz/25MHz/50MHz,所以后面的时序约束中只要对它们做 如此约束就可以了。对于PLL的输出时钟约束,有一个非常偷懒”的办法,后面 会提到,甚至于我们无需关注这个 PLL 的输出频率到底是多大,只要使用一条 语句就可以让时序分析工具自动识别我们对 PLL 的配置并进行约束。SDRAM接口时序分析在深入浅出玩转FPGA一书的笔记15里提到了很多10接口约束的实 例,也提到了源同步接口的分析与约束,在开始这部分知识点前也建议大家不妨 好好再消化一下那些内容。当然,我们这里还是会考虑到知识的系统性,所以也 会带大家重新回顾一下比较重要的知识点。如图5.5所示,是一个简单的源同步接口(FPGA与外部芯片)模型。FPGA 内部的时序逻辑基本是寄存器到寄存器的,通常是用相同的时钟分别去驱动源寄 存器和目的寄存器,而这个源同步接口的目的寄存器(驱动外部芯片)时钟虽然 与源寄存器时钟不同,但仍然是 FPGA 内部产生的,一般两个时钟是同频不同 相的关系。因此,我们要做的就是对时钟延时路径以及对数据传输路径延时的分 析。图 5.5而对于外部器件,从本质上讲,它和FPGA之间的时序也是寄存器到寄存 器的传输,只不过通常源寄存器和目的寄存器是分别处于FPGA内和外部芯片 内,并且驱动他们的时钟也常常不是一个时钟。但是既然它们在本质上是类似的, 那么我们就可以在寄存器到寄存器传输的基础上,对它们的不同点做额外的考虑 后进行分析。下面我们就通过FPGA内部路径分析和10 口时路径分析的对比中 来摸透I0时序路径分析的脾性。其实若是一个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)。Output clock吟5 b巧图 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时钟沿为正的 偏移值。JFlguw 1 % Calculating 11% Maximum EDRAM CkKK Ladffwd fjrkRSid LS*! -IctK-bc dSOUW) 3论、|MMla Cycle* 幻 HI iWhM*SDRAM C*x.Clqck冋nod 口KtHIm? (Whwi5ORAM吐渔CorilrolwCkKicWrit DadsighwFw *丫册日 Lead igQMtti 下仲)-加(smJir4 d rwti图 5.10对上述四个公式的推导如下: 读周期滞后时间氐-帀品寄存器保持时间S 礼RAM煞据输岀有散保持时间站聲Th.-:i+=入亠 Tii-i =几七才因此,丁广如耳为读周期最丈滞后时间- 读周期超前时间“ FP少时钟周期讥曲FPGA寄存艇立时间近和5DRAM的村钟 上升沿到数据开贻有效输出的时间為。屮Tvi =亠T血旧壬一(淞乜計孑处-T山1 TCL-+由于Tl.-l为滞后时间-T血-为超前讨间,所应有Eh 1%芦曲即 9- Tfkrl =代入上式可得工兰也- (T 皿b *因此i. T迂亩也血读周期最大超前时间。写周期超前时间工屮,中3寄存器输出时间的疑丸值莅血SD屈M叛据锁存保持时= Tli + 十切童 T 工 h * tflsdn 因此,T拠込-切眉为写周期超前时间口 f写周期滞后时间TfK.,3! FP测寄存希出时间的垠大值T沁w 5口嗣闸熾锁存建立时I阳业口卩X1l j = +皿斗切s由于Tfk.滞后时间,T +肯超前时剛所以有丁皿尸丁込严兀凉即兀改-工-严Xlx “ 5代人上式可得TiL,.严err7 Gnnaw十如S b 4由上面得到的四个参数詡弋放下面两个公式可求得MaxirnumLa? 0 Maximum Lead: t-MajiimumLag = mini mum (Read Lag:, WriteLa)*-1MaimumL亡日cl = minimumR.亡ad Lead. WriteL亡耳d)*1t Maximum La4 Maximum Lead I 得到心简象的理解,就是相移值 亠满足数据读和烹魏的最卜区间的中间直屮_过去特权同学对这个相移估算也没有太多办法,只能凭感觉找,或者说是 主要根据时序分析的结果来一次次的定位最佳的相移值,工作量比较大,也有撞 运气的成分在里面,而Altera官方提出的这个方法还是很有效的,至少可以将 用户的相移值定位到一个比较小的范围内再进行调整。在这个基础上还需要考虑 一些PLL输出延时或者说是板级延时之类的影响,一般也只需要微调就可以搞 定。由于这个值的估算还涉及一次初步的时序约束以及查看时序报告,并提取 相关参数进行计算,所以把实例的分析将放到后文阐述。初步时序约束的时候也 只是先取个大概值。二部曲时序约束 其实具体进行时序约束的数值通常应该算在时序分析这一步中,之所以特 权同学要放到这一步骤来谈,是因为不同的时序约束工具尤其对于 IO 口的约束 方式稍微有些区别,甚至相同的工具也可以有不同的约束方法。因此,约束值的 计算也通常视特定约束方法而定。换个角度看,一种方式分析通了,其实其它方 式也都是换汤不换药的。在Quartus II工程中,默认的时序分析工具可能不是TimeQuest,因此需要在菜单栏中点击进入AssignmentsdSetting,然后如图5.11所示,勾选UseTimeQuest Timing Analyzer during compilation。Ffei1=SfD|ui d r rwq dH i审刊 td 吕*AuHrnbbrSSItiihWn图 5.11此为,最好如图5.12指定以.sdc为后缀名的约束文件。在SOPC系统生 成后,通常也会自动产生一个cpu.sdc的系统约束文件,它主要对SOPC架构 的处理器以及外设进行约束。因为这些组件都是使用官方提供的或者第三方的IP 核,它们一般也都能够集成时序约束文件。图 5.12下面我们开始大家期待已久的 TimeQuest 之旅。点击任务栏上闹钟模样的按钮 即可进入 TimeQuest。| FimeQuest Timinj Analyzer图 5.13因为我们已经有了一个名为 cpu.sdc 的约束文件,所以可以在 TimeQuest 主界面的右下方的Tasks面板直接点击Read SDC File即可。若是还没有任何 的约束文件产生,需要用户点击FileaNew SDC File自己新建一个新的.sdc文件。7 辰 Open Piojecl,.,*i 4 Deale Tirning NtEttiRead SDC File Updato Tiniiig NolKclj: tI RfcJM-13 (5- J n . -1.图 5.14全局时钟约束对于系统产生的cpu.sdc文件里本身有一些约束语句,我们不用理会,可 以在此基础上添加必要的约束语句。首先要做的是全局约束,主要是指系统时钟 的约束。FPGA器件外部输入时钟的clk是25MHz,并且它也作为PLL的输入 时钟,由PLL产生了多个时钟作为FPGA内部工作的时钟。因此,我们首先约 束clk,然后约束PLL输出时钟。一种简单的方法是点击菜单栏上的ConstrainsdCreat Clock选项,弹出 了傻瓜式的GUI界面,我们对系统输入时钟做如图5.15的约束即可。图 5.15点击Run后对话框消失,此时我们可以观察工具视窗下方的Con sole窗 口中出现了 create_clock -period 40 -name EXTIN_CLK get_ports elk的语句, 这就是最终写入.sdc文件中的约束脚本。用户也可以在Con sole中直接输入该 语句然后回车,或者干脆打开.sdc文件,找个空白处输入该语句然后保存。总之, 手段是多样的,就看用户习惯。约束完这个时钟,我们使用最直接的方法在sdc 文件中输入 derive_pll_clocks -use_tan_name 语句,即可让系统自动产生 clk 作为输入的PLL的所有输出时钟的约束,系统能够根据配置PLL时的相关信息 来约束输出时钟的频率。先提醒大家注意,在每次使用 GUI 进行约束后,需要以下两个步骤才能够 确保所执行的约束写入了.sdc文件中。首先如图5.16所示点击Tasks下的 Updata Timing Netlist,然后点击Tasks面板最下方的Write SDC File,在弹出 的保存文件窗口中覆盖原来的.sdc文件。Q 氐 OpenV Create Timing7 fkSDC Fife卓电SI tilt图 5.16IO接口约束之virtual clock生成与约束我们先要区分一下10接口的约束类型。如果从信号传输方向来看,10接 口无非有三种,即所谓的input/output/inout三种。在可以明确定义virtual clock (虚拟时钟)的情况下,约束这三类端口只有两种方式,即set_input_delay/set_output_delay,当然每种约束最好能够分别指定max_delay 值和min_delay值。这里所说的virtual clock,是有别于FPGA内部钟控寄存器 所使用到的时钟,它是FPGA外部接口芯片的时钟。就拿FPGA的in put port 来说,源寄存器在外部芯片中,目的寄存器在FPGA内部,而源寄存器和目的 寄存器时钟往往不一致。因为对于时序分析工具TimeQuest而言,我们已经对 FPGA内部所有的系统时钟进行了约束,因此它可以确定的时钟是目的寄存器上 的(即FPGA内部的),源寄存器上的(芯片内部的)时钟既然不是FPGA内 部的,那么TimeQuest也就不知道它到底“长什么样”了。所以,作为设计者,我 们就有义务让TimeQuest知道,我们所做的就是建模来定义一个virtual clock, 它的特性就是尽可能的和源寄存器的时钟属性一致(也许不能够完全一致)。做 完这一步,其实还不够,虽然有源寄存器时钟和目的寄存器时钟了,但是我们必 须清醒的意识到TimeQuest只是Altera的工具而已,它熟悉的只是Altera自己 的FPGA器件而已,若要让它清楚市面上千百万种芯片的内部时序关系和参数, 那基本上很难,或者说这是一个非常有创意的想法,目前确实没有哪家厂商可以 做到这一步。因此,这一步通常需要我们手动完成,而如果我们只是定义了系统 内部时钟和 virtual clock, “傻瓜”工具 TimeQuest 还是不知道到底我们定义的这 个virtual clock是要和哪些10脚相关。所以,我们还需要把10脚和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所示,用ConstrainQCreate Gen erated Clock.定义 virtual clocko Clock name 可以任意取名,Source 为 PLL输出的时钟c2, Targets为FPGA连接SDRAM的管脚sdram_clk。其他 选项不用填。最后点击“Ru n”完成定义。图 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 为 Ons (因为这个是 FPGA 内部走全局 时钟网络的管脚,它的时钟网络延时会比较小,通常时序要求紧一些)。多el MaDdmum DelrTo:SO c iQortiTwsd 出L冋_dd却佔脚一mo込桝 |14|&込眇3_帀电HefeiRm图 5.185?l MiniiDum o(Hoy1Thrwglr卩卿斡 側也心t2U理旨址 心2_刊_就1做ILOtLte- 刻bd-poih 如dl*jck卜|raRun图 5.19IO 接口约束之理论推导这一步要对SDRAM与FPGA连接的10 口进行约束,这些10 口包括了控 制信号、地址信号、数据信号。除了数据信号是双向总线,其它均为输出信号。 无论如何,我们要做的约束主要就是两个类型,即输入约束和输出约束。在进行这一步之前,我们要再做一些理论储备,再明确一下我们要约束的 取值范围到底是针对整个源寄存器到目的寄存器路径上的哪一段。先看 output 管脚的 setup(Equation 7-3)和 hold(Equation 7-6)时序 余量计算公式,Output Maximum Delay of Pin 和 Output Minimum Delay of Pin 是我们需要添加的output约束值。关于这几个公式的详细推导和说明可以参考 特权同学的深入浅出玩转FPGA一书。Equation 7-3.Glock Stup Skrklime - Data Required lime - Data Arrival Tim&Data Arrival Time = Launch Ede + Clock Network Daky to Source Register +时助十R曲i朋r-to-Pin OelsyData Re quired Pme = Latch Edge 亠 Clock Network Delay - Oitput Maximum elay ol PinEquation T-6Clock Hold Slack Time = Data Arrival Time - Data Required TimeDat Arrival TiEne = Laldi Ed勺巳十 CM N &hvark Delay to Source Fl那我r%口 亠 ReFStepto-Ppn D由裁Data Required Time = Latch Edge + Clock hletworfc De-lay - Output Mininuin Delay of Pin从 Output Maximum Delay of Pin和 Output Minimum Delay of Pin在公式 中的关系,再对照如图5.20所示的寄存器模型,我们不难推断output delay指 定的时间范围是针对于这些红色(带箭头)路径而言的。它的值也是这三部分路 径之和(图示的两条时钟路径算为一部分,需要注意路径取值的正负)。图 5.20 上述的三部分路径之和,有如下公式用于计算 output delay 的最大和最小 取值。Qutput Mas Delay = PCB irsk data delay; + 外部器阳的再+ PCE nun clock sk巳Output Jilin Delay = PCB min data delay) - 夕卜部器件的耳 - FCE niajt clock启険诫心对于上而两于公式,需要做几点说明-冬FCE data血1甥是打澈据丄耳能是一织多个信 号组成的总线)在FCE板上的走绫延时PCB板上的走线延时和PCE板的介电常数以及信号 传播谨率育关-真空中信号的传播速率为1L蚊inciiii弧屮信号在PCB板上的传播速率=信号在真空中传播速率丿匹巳板的介电常数尿开根.粵匚 例如假设一块PCB板上的介电常数 尹,其传播速率次.心开根号=5.71inch/ns (即 O.175ns/irrch)i;.時号在 PCB 板上走线延时的一水经验值郑 555Smil/ns O.lSns/lOOOniiL 通过这个蔘魏大家可朝计算特走目标板上信号的走竝延时口 a外卑器件的7L和伉时间值是可说在芯片datasheet中查到的,它不是指扰们在分析F?融时所言的寄存器的建立时间和谍持时间,而是针对外部芯片的输入输出管脚来说前口换旬话说,到芯片管脚曲止,內部刖所有时间要求都粪括在这两个参数(外部器件的入和珀) n疽最后,关于PCB clock skew,它是指在源寄存器和目的寄存器在PCB板上 的时钟传播的延时差值。拿理想的状况来理解这个概念,当源寄存器和目的寄存 器时钟都是 PCB 板上的一个晶振输出来的,那么它们到达两个寄存器各自的输 入端口时势必要有延时,因为他们到达芯片内部的延时已经被计算过了(前面的 几个公式和说明里都提到了),所以现在唯一不确定的是他们在PCB上走线的 延时。因此,我们定义vPCB clock skew= 晶振输出到达FPGA端口的时间 -晶振输出到达外部芯片的时间。那么这一部分路径的延时就被计算在内了。 有人可能要问为什么?特权同学常常会遇到一些莫名其妙的为什么?其实会问 是好的,但是有些概念需要先消化,因为基本的概念是定义出来的,没有太多的 逻辑可推导,要问为什么其实没有太多意义。这时候就需要先接受,然后回头再 系统的理解这些知识点。其实有时候我们发现自己总喜欢在问一些很傻瓜的问题 这些问题傻到就好像在问为什么 1 是 1、2 是 2,为什么 1 不是 2、2 不是 1。呵 呵!有时候,就像小孩吃饭一样,不要花时间去搞懂为什么要吃饭,饭里都有什 么成分?应该简单的先去吃,吃饱喝足了才有精力去研究去搞懂它。再来看 input 管脚的 setup(Equation 7-2)和 hold(Equation 7-5)时序 余量计算公式,Input Maximum Delay of Pin 和 In put Mi nimum Delay of Pin 是 我们需要添加的i叩ut约束值。Equatiait7-2 Gkitik Setup Slade lime = Data Retfuired lime -Data Arrival TrnneMa Arrival Tim令-Launch Edg + Clock Network Delay+InpulDelay ol Pin 4 Pin-to-Register D 创即Data Required Tine = Latch Edge - Cl ock Netwrk Oelay to 伽忧inZiDn ftegtster-jiEquation 7-5.Clock Hold Slach Tine = Data Arrival Time -DaU R鋼tMd Time湘I Tims = Ladftch Edge Cl ock Network Oftlay +Input Minimum Dela of Pin ( Pjdto-Regisiftr DelayData Required Time = Latcl Edge + ClocK NeUwri Diayto Donation Registet +同样地,我们通过前述两个公式再结合图5.21,就应该能推断出in put delay所针对的传输路径就是红色箭头的两条路径(按照output delay的分法同 样是三部分)延时之和。图 5.21 有关 input delay 的运算公式如下。Input Mas DeLay =数据经过夕卜部器件隹最丸F中+数据经过PCri的最大延时+ PCB masclock delay/i-1Input Min DeLay =数摇经过外割器件的最小瞌+数据经过PCB的最小延时+ PCB min clo匚k dela公式中的参数与 output delay 类似,数据经过 PCB 的最大和最小延时是 可以通过目标板的布局布线进行计算的。数据经过外部器件的最大或最小延时时 间也都是可以通过查看相关接口芯片的datasheet可以确定的。此外,PCB clock delay值同样是指时钟在PCB板上由晶振源传输到源寄存器与传输到目的寄存 器的时间差。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!