FPGA程序如何模块化设计?

FPGA程序如何模块化设计
综合与可综合的HDL设计
综合的定义
综合就是针对给定的电路实现功能和实现此电路的约束条件,如速度、功耗、成本及电路类型等,通过计算机进⾏优化处理,获得⼀个能满⾜上述要求的电路设计⽅案。
被综合的⽂件是HDL⽂件(或相应⽂件等),综合的依据是逻辑设计的描述和各种约束条件,综合的结果则是⼀个硬件电路的实现。该⽅案必须同时满⾜预期的功能和约束条件。对于综合来讲,满⾜要求的⽅案可能有多个,综合器将产⽣⼀个最优的或接近最优的结果。因此,综合的过程也就是设计⽬标的优化过程,最后获得的结构与综合器的⼯作性能有关。
FPGA/CPLD综合软件
FPGA/CPLD综合软件包括:Synopsys公司的FPGA Compiler II、Synplicity公司的Synplify/Synplify Pro、Mentor公司的LeonardoSpectrum及FPGA/CPLD⼚商集成开发环境中⾃带的综合⼯具,如Altera Quartus II软件中的综合软件等。
景区拍照综合的特点
综合的特点体现在以下⼏个⽅⾯:综合是在⼀定的限制条件下进⾏的,⽐如时序、⾯积或物理约束等;综合器独⽴于具体设计⼯艺,如果⼯艺改变,可使⽤新⼯艺元件库重新综合;综合器很难得到硬件设计的所有实现⽅案,不可能得到最优的硬件结果;不同的综合器使⽤不同的机制和算法,因此对相同的HDL描述可能得到不同的结果;不同的综合器对HDL语句和语法的⽀持不同,需要通过察看综合软件的相关⽂档进⾏了解。
可综合的数据类型包括枚举类型、整数类型、数组类型(⼀维数组、⼆维数组)及记录类型。综合器不⽀持的数据类型包括:物理类型,如时间类型;浮点类型,如实数类型;存取类型及⽂件类型等。
⾯向综合的编码风格
设计描述的编码风格将直接影响EDA软件⼯具的综合结果。好的描述⽅式易于被综合器识别且能够被综合出设计者所期望的电路。电路的质量取决于设计者使⽤的描述风格和综合⼯具的能⼒。
形成良好的编码风格应注意以下⼏个⽅⾯:
对希望形成组合逻辑的if和case语句,要完整地描述其各个分⽀,避免形成锁存器(可⾏的⽅法之⼀是给所有被赋值信号赋初始值);
尽量使⽤简单的逻辑及数字运算符;
进程的敏感清单应列举完全,否则可能产⽣综合前后仿真结果不同的现象;
在循环中不要放置不随循环变化的表达式;
对 于复杂的数字运算要充分进⾏资源共享,如采⽤if块等;
对于长的组合链路应该在代码编写阶段注意描述成树状结构;
时序逻辑尽可能采⽤同步设计;
对具有不同的时序或⾯积限制的设计,应尽可能采⽤不同的代码描述以达到不同的要求(⼀般⽽⾔,⾯积与延时是相互冲突的,在FPGA 中⾯积代表资源的多少);
对于复杂系统设计,应尽量采⽤已有的算法和模块来实现。
设计实现
设计实现即利⽤实现⼯具把逻辑映射到⽬标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输⼊输出功能连接的布线通道进⾏连线,并产⽣相应⽂件(如,配置⽂件与相关报告)的过程。通常可分为如下五个步骤:
1)转换:将多个设计⽂件进⾏转换并合并到⼀个设计库⽂件中。
2)映射:将⽹表中的逻辑门映射成物理单元或元素,即把逻辑设计分割到构成可编程逻辑阵列内的可配置逻辑块与输⼊输出块及其他资源中的过程。
3)布局布线:布局是指从映射中取出定义的逻辑和输⼊输出块,并把它们分配到 FPGA 内部的物理位置。通常基于某种先进的算法,如最⼩分割、模拟退⽕和⼀般的受⼒⽅向张弛等来完成;布线是指利⽤⾃动布线软件使⽤布线资源选择路径,试着完成所有的逻辑连接。在布局布线过程中,可同时提取时序信息形成时序分析报告。
4)时序提取:产⽣反标⽂件,供后续的时序仿真使⽤。
5)配置:产⽣FPGA配置时所需的位流⽂件。
增量设计
传统⽅法vs增量设计
传统的FPGA设计过程中,每次修改都将导致整个设计的重新编译,如此,时序也将产⽣变化,针对这⼀现象,引⼊了增量设计的概念。
增 量设计主要是指增量编译:根据设计者的分割设置,对不同的层次和模块分别编译。在对设计进⾏重新编译时,可以保持未修改部分的编译结果,从⽽节省编译时间。
增量设计可将设计中⽆需修改的部分锁定并保持其性能,仅对设计中变化的部分重新处理。使⽤增量设计,设计⼈员可在验证过程中加速设计变化的调试,将更多时间⽤于调整设计中的关键元件,甚⾄在后期设计规范发⽣改变时,也不会影响整个设计的主要进度。
对于设计中未改变的部分,由于它们布局布线都保持不变,性能也不会变化,因此⽆需进⾏重新验证,从⽽可以节省⼤量的设计时间。增量
设计有助于模块化设计和基于团队的设计流程。
图1 传统⽅法vs增量设计(略)
设计分割
设计分割指⽤户定义的逻辑分割,它与物理区域不同。逻辑分割应与设计的层次边界相符合,其中,每个设计实体并不⾃动成为⼀个分割。设计分割具有不同的设计⽂件,如果使⽤第三⽅综合软件,要为每个分割⽣成各⾃的EDIF或VQM⽂件。最优化过程不能跨越分割的边界,每个分割部分独⽴的进⾏综合和适配。
图2给出了设计分割⽰意,顶层划为⼀个分割,其他层次结构的⼦模块根据具体情况进⾏分割。不⼀定每个设计实体即为⼀个分割,也可以是⼏个设计模块的组合。
图2 设计分割(略)
对于不同的设计流程,Altera提供了不同的软件⽀持。⾃顶向下(Top-Down)的设计流程,整个设计在顶层编译,可由⼀个设计者或项⽬管理者完成编译设计,Altera Quartus II 5.0 和5.1中完全⽀持。⾃底向上(Bottom-Up)的设计流程,整个设计是在底层编译,在各个设计者分别优化后进⾏集成。⽬前Altera Quartus II 5.0和5.1中尚⽆导⼊和导出功能,因此并不⽀持⾃底向上(Bottom-Up)的设计流程,⽽借助LogicLock可实现该设计流程。
图3 增量编译流程(略)加密代理
增量编译流程led风筝
增量编译流程如图3所⽰,⾸先,准备利⽤增量编译的项⽬。包括:详细的设计分析,识别设计的层次;⽣成设计分割;使能“完全增量编译”或者“只进⾏增量综合”;⽤LogicLock⽣成设计版图等。自动跟踪
利⽤LogicLock布图
利⽤LogicLock⽣成设计版图:对包括顶层在内的每个分割产⽣⼀个LogicLock区域,⽽后每个LogicLock区域或设计分割将被独⽴放置在分开的物理区域上,⼿动或使⽤Altera Quartus II早期时序估计⼯具分配物理位置。
LogicLock区域由位置和尺⼨定义。⽤原点表⽰位置:对于Stratix,Cyclone和MAX II器件,原点位于区域左下⾓,⽽其他Altera器件,原点则位于区域左上⾓。区域的宽度和⾼度决定了区域的尺⼨。
推荐的设计分割⽤法与布局⽅式
根据设计经验,分割中有⼀些推荐⽤法,包括:所有分割的输⼊输出端⼝要有寄存器;应令跨边界的连接最少;将关键路径限制在每个分割的内部;分割不应太⼩(如<1000个逻辑单元);可能需要均衡使⽤资源;及分割边界上不使⽤三态或双向端⼝等。
同时,推荐的布图⽅式包括:避免区域间相互覆盖及使⽤⽗区域和⼦区域,从⽽保持设计的逻辑层次关系,提⾼区域布局的灵活性等。
其次,执⾏完全编译。执⾏完全编译即启动完全编译并编译每⼀个分割,从⽽⽣成在随后增量编译中重新使⽤的综合后和适配后的⽹表。
最后,对设计进⾏修改并执⾏增量编译。完全编译后,在设计与调试阶段需反复进⾏设计的修改及增
量编译。
执⾏增量编译小型地源热泵
在下⼀次编译期间为每个分割设置使⽤的⽹表类型,如表1所⽰,然后重新编译设计。乌氏粘度计原理
表1 :⽹表类型设置(略)
设计优化与模块化设计⽅法
设计优化
FPGA设计过程中,必须采⽤与其结构相适应的优化技术,才能有效发挥FPGA芯⽚的能⼒。设计优化是指在设计没有达到⽤户要求的情况下,对其进⾏改进,以便满⾜设计的初始规格。
设计优化的主要内容包括:理解整个设计;对设计进⾏约束和设置;优化资源利⽤;输⼊输出时序优化;速度优化;编译效果优化及编译和测试时间优化。其设计流程如图4所⽰。
图4 设计优化流程(略)
只有深⼊理解整个设计,才能对其进⾏优化。包括理解系统时序,如系统时钟、模块时钟、时钟域及
时钟来源等内部时钟问题。
在理解整个设计的基础上,须对设计进⾏约束和设置,约束和设置旨在完成编译后,可以根据编译结果对设计进⾏分析,到设计中的真正瓶颈,从⽽有效的引导后续的优化过程。利⽤Altera提供的开发⼯具及其他⼚商的EDA软件都可设定各种设计约束。
完成约束、设置后,通常将查看并分析编译产⽣的报告,包括:了解设计的资源使⽤情况,以便在后续的设计优化中更合理的分配和使⽤资源;查看并分析时序报告,判断各种时序关系和系统运⾏速度等指标是否满⾜了设计的需求,以便对不满⾜要求的部分进⾏修改和优化。
优化资源的利⽤
设计过程中,由于资源数量限制,造成系统不能在⽬标器件中实现,则需对资源利⽤进⾏优化。FPGA的资源,包括:逻辑单元、块RAM、I/O引脚、DSP块、锁相环、布线资源及各种硬IP核等。
设计中最根本、最有效的优化⽅法是对设计输⼊(如HDL代码)的优化,⽐较常⽤的⾯积优化⽅法包括:模块的时分复⽤、改变状态机的编码⽅式及改变模块的实现⽅式等。
当 设计中位置约束或者逻辑锁定约束较多时,可能会造成局部设计拥挤,导致布线资源紧张,此时,可适当解除或放松布线拥挤区域的约束 。
输⼊输出时序优化
输⼊输出时序优化需要重点考虑的问题是可编程逻辑器件与外围芯⽚间的接⼝时序。在同步系统设计中,外部芯⽚和可编程逻辑器件使⽤的时钟经常是同相位的。设计主要关⼼芯⽚输⼊引脚的建⽴时间和保持时间、数据的时钟到输出延时及数据的输⼊到输出延时等。
输⼊输出时序的优化⽅法:根据外围器件和PCB连线情况,保留⼀定余量,计算I/O时序要求,并将这些时序要求在EDA软件中对设计进⾏约束,编译软件将根据约束条件进⾏⾃动优化;使⽤I/O单元的触发器;及使⽤锁相环电路等。
速度优化
速度优化即最⾼时钟频率优化,其最有效的⽅法是对设计代码进⾏优化。具体优化⽅法包括:增加流⽔线级数、组合逻辑分割和平衡、复制⾼扇出的节点及令状态机仅完成控制逻辑的功能等。
编译效果优化
使⽤不同的随机数种⼦,编译结果将在⼩幅度内变动。如果设计已经⾮常接近系统需求,则可以尝试改变随机数种⼦,使性能达到系统需求。同时,使⽤软件⼯具,如Altera的"Design Space Explorer",可以⼀次运⾏多种编译设置和优化⽬标,探索设计的优化空间。
编译和测试时间优化
设计较⼤或约束较多时,编译时间往往很长,从⽽影响开发进度。缩短编译时间有以下3种常⽤⽅法:使⽤快速编译⽅式,其特点是速度快,但可能在⼀定程度上影响设计性能;使⽤增量编译,最⼤限度的利⽤上⼀次的编译结果;反标注,使逻辑的位置和布线成为下⼀次编译的约束,对这部分不进⾏重新编译。
模块化设计⽅法
模块化设计
模 块化设计是将复杂的⼤型设计分成多个模块,利⽤基于团队的优势,分别进⾏设计和调试。采⽤模块化设计,可以进⾏系统的标准化设计,即将⼀些系统中常⽤的功能块进⾏模块化设计、调试和包装,以备调⽤。
与传统设计流程相⽐,模块化设计流程的输⼊模块是已经优化并达到时序收敛的⼦模块,通过模块化设计⽅法继承以往编译与实现的结果,在保证每个⼦模块时序收敛的基础上,达到顶层设计的时序收敛。因此有效避免了对整个系统进⾏的繁琐的设计编译、时序分析以及优化的反复循环,提⾼了设计效率。
模块划分的⼀般原则:模块内部联系紧密;各个模块的功能尽量独⽴;模块间连接尽量简单。
模块化设计基本流程
模块化设计的基本流程(如图5所⽰),分为两部分,⼀:模块化设计输⼊与综合,包括:顶层模块设计(输⼊与综合)、⼦模块划分及⼦模块的输⼊与综合。⼆:模块化设计实现,包括模块分割,添加设计约束、各⼦模块的实现(布局布线)及设计整合:将顶层设计和各⼦模块合并。

本文发布于:2024-09-22 07:23:27,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/97701.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:设计   优化   编译   综合   分割   时序   逻辑
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议