




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档-下载后可编辑QIC在缩短大容量FPGA编译时间中的作用-技术方案前言
按照相对论的理论,时间也是可以被拉长缩短的,只不过需要巨大的能量支撑着您达到一个和光速可比拟的高速度而已。这话说着轻松,你我心里都明白,估计咱们的有生之年是看不到这样的情景的……
回到可编程逻辑器件领域,随着65nm、40nm,乃至目前的28nm深亚微米工艺的采用,厂家生产出了越来越大,也越来越复杂的FPGA器件。而用户们在为FPGA不断增强的功能和不断下降的单位成本而欣喜不已的同时,也在为相关EDA软件的性能滞后所带来的开发效率相对降低而苦恼不已,尤其是对大容量FPGA芯片动辄10到20个小时的编译时间可谓怨气冲天。笔者在许多次面对一线的FPGA工程师时,都听到了这样类似的话:要是编译时间能压一压就好了!
Altera不能真的压缩时间,但我们能改变“速度”!从数年前的版本开始,Quartus2软件中就整合了一种新技术,或者说一种新的设计流程:增量式编译(IncrementalCompilation)。它是ALTERA为解决大容量FPGA设计编译时间太长的问题给出的一个新式工具!您,了解它吗?
增量式编译原理及流程
增量式编译QIC的原理很容易理解:对一个复杂的设计而言,肯定是需要做一定的功能划分,由不同的子功能模块来实现。那么在设计进入后期比较成熟的时候,前后两次编译的设计版本中,会有很大部分的电路逻辑都是相同的(没有修改),如果能在后编译中,重复利用前编译中未改变部分的编译结果,也就是相应部分的布局布线信息,那么就能把这部分逻辑所消耗的布局布线时间节约下来,从而在很大程度上缩短整个设计的编译时间。当然,聪明的读者都能想到,这样的编译方式,除了能缩短编译时间,还能支持许多别的用途,比如IP设计交付、团队开发、不改变正常设计结果插入调试接口等。这些确实都是ALTERA增量式编译能够实现的功能,但在本文中我们只阐述QIC在缩短编译时间方面的作用。
增量式编译原理虽然简单,但要在FPGA的EDA软件中实现,却是一个复杂的系统工程。它不是简单地在软件中增加一个功能模块,而是对编译处理流程多方面的改变和增强!请比较图1和图2两幅附图:图1是传统的FPGA编译流程(Altera名称:Flatcompilation),图2则是增量式编译流程的示意图。我们很容易发现增量式编译流程复杂了许多,不仅引入了一些新的概念,比如设计分区(partition)、分区综合后网表、分区布局/布线后网表等,同时加入了新的处理阶段--分区合并(partitionmerging),而且对分析综合(AnalysisSynthesis)和布局布线(fitter)阶段进行了改进,增加了许多针对分区的具体操作。
经过几年的研究与实践,QuartusII的增量式编译已逐步完善,无论是在可操作性、稳健性方面,还是在缩短编译时间的效果方面,都十分出色。笔者参与的几个客户项目中,通过QIC的实施,都得到了50%左右的编译时间节约,极大提高了客户的开发效率。下面,我将结合这些实际项目中的经验,介绍如何实践利用QIC来高效的缩短设计编译时间。
QIC实践
QIC的效果评估
在讨论具体如何使用QIC之前,先考虑一个问题:如果读者在您的工作中使用了增量式编译QIC,怎么评估它的效能呢?
您需要至少做3轮实验,才能看到QIC节约编译时间的效果。首先,需要把您的设计用传统编译流程FlatCompilation进行编译,记录下各阶段所花费的时间。然后,创建合理的设计分区,指定分区网表性质,进行第二次编译,得到QIC各个分区的初始网表,并请记录下操作时间。第三次编译,您可以选择修改设计中的某一个分区,然后再编译,记录下操作花费的时间。将第三次的编译时间和次相比,正常的话应当看到非常明显的时间节约,这才是QIC增量式编译在编译时间节约方面的体现。
值得注意的是,第二次编译中已经使用了QIC,但往往花费时间和次编译差不多,有时还有增长。许多人为此怀疑QIC的性能,认为QIC没有效果甚至恶化了编译时间。这其实是一种误解!为什么呢?回到图2,我们可以看到,QIC流程在AnalysisSynthesis和fitter之间增加了一个新的处理阶段--分区合并,它是需要额外花费在次FlatCompilation中不存在的时间。而且,由于这是创建分区后的次编译,所有分区的网表都是空白的,也就是说整个设计都需要被编译、分析、综合、布局布线等的工作量和次编译是类似的,因此这部分花费的时间也是差不多。把这两部分时间加起来,自然第2次编译时间有可能会比次长了。只有当进行第3次编译的时候,各个分区都有可重用的网表了,才有可能将那些没有设计改变的分区的网表重用,从而节约综合和布局布线阶段的时间,达到整体编译时间的节约。
图3是笔者支持的一个客户所进行的QIC增量式编译性能评估的结果总结。客户的设计是高端路由器中的包处理应用,使用了ALTERA公司的Stratix4GX530器件,逻辑利用率大约是60%.客户的编译硬件是一台高性能服务器:
CPU:16coreIntel(R)Xeon(R)CPUE7420@2.13GHz
.Memory:64GB
即使是如此,在不使用QIC的情况下,客户的每次编译都需要12到13个小时。而在使用QIC并根据QIC指导原则进行了必要的设计优化后,的实验结果是可以在6个小时左右(大约350分钟)完成编译,节约了接近55%的总编译时间!从图3中很容易看出前面文字描述的几个特点:
1.次编译和第二次编译的总时间差不多(750VS730)
2.第三次编译中,AnalysisSynthesis操作的时间,fitter操作得时间都比次编译有非常明显的降低;
3.从原理上看,QIC的网表重用对Assembly和时序分析没有直接影响。因此三次编译中,Assembler和时序分析所花费的时间是差不多的。
QIC指导原则
合理创建分区
Quartus中的“分区”是和设计层次紧密关联的。任何设计,无论简单还是复杂,都会有一个顶层模块(top-levelmodule),Quartus自动将它设置为一个默认分区(命名为top),不需要用户设定。而别的分区,需要用户手动创建。创建分区的方法很简单,在QuartusGUI界面左上角的Hierarchy窗口,选择想创建分区的实体,右键唤出的菜单中选择“DesignPartition”,然后在下菜单中选择“SettingasDesignPartition”,分区就创建成功了。
从图2可以看出,分区(Partition)是增量式编译中的一个关键概念。Altera规定:只要是有完整设计边界的设计实体,无论它在设计的哪一层次,都可以用它来创建设计分区。也就是说,QuartusII中,设计中任何层次中的任何一个设计模块,可以作为一个设计分区;一个设计中也可以包含不止一个设计分区;即使是在设计的同一层次,也可有多个分区。同时,请注意:分区之间没有层次关系,任何逻辑只能归属于某一个分区。以图5为例,A模块由A1、B1、C1三个子模块组成。如果A模块被设置为分区,Quartus会用模块名来为此分区命名:A分区。那么,A分区中就会包含A1、B1、C1三个子模块的所有逻辑。但如果把B1子模块也创建为分区,那么,A分区中就只包含A1、C1两个子模块的逻辑,B1子模块的逻辑只属于新的B1分区了。
从前面分区的性质和特点可以看出,对包含多个功能模块的多层次复杂设计,可以有许多种设置分区的方案。但需要注意的是:不是任何一种分区方案都能带来编译时间的节约,恶劣的设计分区甚至能够导致编译失败!如何得到高效合理的设计分区呢?我们需要遵从以下原则:
a.不要创建太多的分区,一般性的设计建议分区的数量控制在4~8个之间;
b.不要创建太小的分区,一般建议不要小于1000个LE或者ALM;
c.外设接口逻辑和内核处理逻辑放到不同的设计分区;
d.相同或相近功能的外设接口,如果管脚位置相邻,可以放在同一个分区,否则创建不同的设计分区;
e.不同的分区方案中,分区之间的联接少的方案更优。
针对QIC优化代码
除了分区方案,设计代码也对QIC的性能有直接的影响,需要设计者针对QIC做一些特定的代码优化。优化主要有两方面,一方面是升级所使用的MegacoreIP到的版本;另一方面则是一些更严格的编码规则。
之所以建议升级MegacoreIP到的版本,这是由于QIC增量式编译常常需要调用MegacoreIP的一些特性来支持一些特定操作,而这些特性通常在较新的版本中才能得到比较好的支持,而且随着QIC的成熟不断改进。笔者就曾经在一个尝试使用QIC的项目中,发现客户的设计继承了一部分老项目中的代码,其中包含好几个Quartus9.1版本的DDREMIF控制器,占了整个设计使用资源的20%左右。当说服客户把这几个控制器升级到当时的Quartus11版本,发现QIC所能节约的编译时间增加了近1个小时,大约15%的整体编译时间。
之所以QIC要求遵从更严格的编码规则,这是由于Quartus在有分区存在的时候,是不对跨越分区边界的逻辑进行综合优化,一些在Flatcompilation中可以被软件优化掉的不良代码,在QIC的流程中会造成严重的影响。这些严格的编码规则包括:
a.不要在底层分区边界上使用三态信号和双向端口;
Altera器件中,只有在器件的输出管脚上才能实现真正的三态信号,在器件内部,三态驱动是依靠多路器逻辑模拟实现,这两点往往要求跨层的编译优化,而这在增量式编译流程中是做不到的,会导致编译失败。只有一种情形例外,就是内部三态逻辑所涉及的所有信号都在同一个底层分区中,Quartus可以依靠多路器逻辑模拟此三态逻辑。双向端口也类似,只有在此双向逻辑所涉及的所有信号都在一个底层分区中,QIC才能正常进行。
b.分区的输入输出都通过寄存器实现,资源有限的情况下至少保证跨分区的连接中的一端是寄存器(reg-in或者reg-out);
虽然这一规则有一定的实现难度,但它可以避免在使用增量式编译流程的时候,那些跨分区边界的信号的延迟出现大的恶化。如果不能实现这一规则,跨分区连接的两端有可能都是组合逻辑。在FlatCompilation中,这两组组合逻辑会被综合优化到一起来布局布线,时序容易满足;但在是增量式编译中,由于不能跨区优化,这2组组合逻辑的分别布局布线,那穿过这两组逻辑的路径延迟将有可能变得很长,出现时序违背。
c.避免不包含任何处理逻辑的信号环路穿越分区边界;
也是由于不能跨区优化,这样的信号环在FlatCompilation中可以被优化消除掉,在增量式编译中就不能消除,浪费资源。
d.避免跨分区的常量信号
类似C,跨区的常量信号不能在目的端分区中直接实现(“0”连接地层,“1”连接电源层),而必须占用走线资源实现。
关注相关信息
使用QIC时,Quartus中会产生很多QIC专有的消息,因此在编译中也增加一些新的章节。这些章节,对我们了解QIC的运行情况有直接的帮助,尤其是当一些异常情况出现,往往需要我们通过阅读这些章节来进行调试。比较重要的有:
a.PartitionMergereport
分区合并的章节如下图所示,分别提供在这个阶段网表的使用情况(netlistTypesUsed),各个分区的综合警告信息(PartitionWarning)和综合后各类资源使用情况(PartitionStatistics)。
b.IncrementalcompilationsectioninFitterreport
在Fitter中,也增加了增量式编译的章节。其中,IncrementalCompilationPreservationSummary汇总了设计中被保留的布局和布线比例;IncrementalCompilationPartitionsetting说明了设计中所有分区的创建方式和网表的保留级别(Preservationlevel);IncrementalCompilationPlacementPreservation给出了每一个分区中节点保留的信息;IncrementalCompilationRoutingPreservation则是每个分区中布线保留的信息。
c.Designpartitionwindow
这个窗口默认是不在Quartus界面中显示的,用户
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿化苗木移栽与存活保障方案
- 码头泊位改造人员调配管理方案
- 蒸汽管道防腐涂层施工与维护方案
- 桥梁施工应急预案制定方案
- 冬季防水施工安全保证措施
- 共享储能电站建设选址规划方案
- 道路建设招投标环节控制措施
- 共享储能项目配套设施建设方案
- 乡村数字化发展的有效路径探索
- 彩泥感官体验课程计划
- 2025山西晋中昔阳县文化旅游发展有限责任公司社会招聘15人笔试备考题库及答案解析
- 2025-2026学年统编版(2024)初中历史八年级上册教学计划及进度表
- 妇科抗生素使用课件
- 成人2型糖尿病口服降糖药联合治疗专家共识解读 2
- 2025-2026学年统编版小学语文五年级上册教学计划及进度表
- 解读《医务人员职业道德准则(2025年版)》(含准则全文)
- 2025年总工会招聘考试工会知识模拟试卷及答案
- 2025年基层卫生人才能力提升培训(乡村医生理论培训考试题及答案)
- 统编版新版三年级上册道德与法治教学计划及进度表
- 2026年高考第一轮复习数学第01讲 导数的概念及其意义、导数的运算(复习课件)
- 涪陵殡葬管理办法
评论
0/150
提交评论