《华为FPGA设计流程指南22561.docx》由会员分享,可在线阅读,更多相关《华为FPGA设计流程指南22561.docx(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、FPGA设设计流程程指南前言本部门所所承担的的FPGGA设计计任务主主要是两两方面的的作用:系统的的原型实实现和AASICC的原型型验证。编编写本流流程的目目的是:l 在于规范整整个设计计流程,实实现开发发的合理理性、一一致性、高高效性。l 形成风格良良好和完完整的文文档。l 实现在FPPGA不不同厂家家之间以以及从FFPGAA到ASSIC的的顺利移移植。l 便于新员工工快速掌掌握本部部门FPPGA的的设计流流程。由于目前所所用到的的FPGGA器件件以Allterra的为为主,所所以下面面的例子子也以AAlteera为为例,工工具组合合为 mmodeelsiim + LeeonaardooSp
2、eectrrum/FPGGACoompiilerrII + QQuarrtuss,但原原则和方方法对于于其他厂厂家和工工具也是是基本适适用的。目 录1. 基于于HDLL的FPGGA设计计流程概概述11.1 设设计流程程图11.2 关关键步骤骤的实现现21.2.11 功能能仿真21.2.22 逻辑辑综合21.2.33 前仿仿真31.2.44 布局局布线31.2.55 后仿仿真(时时序仿真真)42. Veerillog HDLL设计42.1 编编程风格格(Coodinng SStylle)要要求42.1.11 文件件42.1.22 大小小写52.1.33 标识识符52.1.44 参数数化设计计52
3、.1.55 空行行和空格格52.1.66 对齐齐和缩进进52.1.77 注释释52.1.88 参考考C语言的的资料52.1.99 可视视化设计计方法62.2 可可综合设设计62.3 设设计目录录63. 逻辑辑仿真63.1 测测试程序序(teest bennch)73.2 使使用预编编译库74. 逻辑辑综合84.1 逻逻辑综合合的一些些原则84.1.11 关于于LeoonarrdoSSpecctruum84.1.11 大规规模设计计的综合合84.1.33 必须须重视工工具产生生的警告告信息84.2 调调用模块块的黑盒盒子(BBlacck bbox)方方法8参考100修订纪录101. 基于于HDL
4、L的FPPGA设设计流程程概述1.1 设设计流程程图(1)设计定义(2)HDL实现逻辑仿真器(3)功能仿真逻辑综合器(4)逻辑综合逻辑仿真器(5)前仿真FPGA厂家工具(6)布局布线(8)静态时序分析逻辑仿真器(7)后仿真(9)在系统测试说明:l 逻辑仿真器器主要指指moddelssim,VVeriilogg-XLL等。l 逻辑综合器器主要指指LeoonarrdoSSpecctruum、SSynppliffy、FFPGAA Exxpreess/FPGGA CComppileer等。l FPGA厂厂家工具具指的是是如Allterra的MMax+PluusIII、QuuarttusIII,XXil
5、iinx的的Fouundaatioon、AAlliiancce、IISE44.1等等。1.2 关关键步骤骤的实现现1.2.11 功能能仿真RTL代码调用模块的行为仿真模型测试程序(test bench)测试数据逻辑仿真器说明:“调用模模块的行行为仿真真模型”指的是是RTLL代码中中引用的的由厂家家提供的的宏模块块/IPP,如AAlteera 提供的的LPMM库中的的乘法器器、存储储器等部部件的行行为模型型。1.2.22 逻辑辑综合设置综合目标和约束条件调用模块的黑盒子接口RTL代码逻辑综合器HDL网表(netlist)EDIF网表(netlist)说明:“调用模块块的黑盒盒子接口口”的导入入,
6、是由由于RTTL代码码调用了了一些外外部模块块,而这这些外部部模块不不能被综综合或无无需综合合,但逻逻辑综合合器需要要其接口口的定义义来检查查逻辑并并保留这这些模块块的接口口。1.2.33 前仿仿真逻辑综合器调用模块的行为仿真模型测试数据测试程序(test bench)HDL网表(netlist)逻辑仿真器说明:一般来说说,对FFPGAA设计这这一步可可以跳过过不做,但但可用于于debbug综综合有无无问题。1.2.44 布局局布线逻辑综合器设置布局布线约束条件FPGA厂家工具EDIF网表(netlist)调用模块的综合模型SDF文件(标准延时格式)HDL网表(netlist)下载/编程文件1
7、.2.55 后仿仿真(时时序仿真真)测试数据SDF文件(标准延时格式)FPGA基本单元仿真模型测试程序(test bench)FPGA厂家工具HDL网表(netlist)逻辑仿真器2. Veerillog HDLL设计基于将来来设计转转向ASSIC的的方便,本本部门的的设计统统一采用用Verriloog HHDL,但但针对混混合设计计和混合合仿真的的趋势,所所有开发发人员也也应能读读懂VHHDL。Verillog HDLL的学习习可参考考12。2.1 编编程风格格(Coodinng SStylle)要要求2.1.11 文件件(1) 每个模块(mmoduule)一一般应存存在于单单独的源源文件中
8、中,通常常源文件件名与所所包含模模块名相相同。(2) 每个设计文文件开头头应包含含如下注注释内容容:l 年份及公司司名称。l 作者。l 文件名。l 所属项目。l 顶层模块。l 模块名称及及其描述述。l 修改纪录。请参考标准准示例程程序33。2.1.22 大小小写(1) 如无特别需需要,模模块名和和信号名名一律采采用小写写字母。(2) 为醒目起见见,常数数(ddefiine定定义)/参数(pparaametter定定义)采采用大写写字母。2.1.33 标识识符(1) 标识符采用用传统CC语言的的命名方方法,即即在单词词之间以以“_”分开,如如:maax_ddelaay、datta_ssizee等
9、等。(2) 采用有意义义的、能能反映对对象特征征、作用用和性质质的单词词命名标标识符,以以增强程程序的可可读性。(3) 为避免标识识符过于于冗长,对对较长单单词的应应当采用用适当的的缩写形形式,如如用bufff代替buffferr,enaa代替enaablee,adddr代替adddresss等。2.1.44 参数数化设计计为了源代代码的可可读性和和可移植植性起见见,不要要在程序序中直接接写特定定数值,尽尽可能采采用ddefiine语语句或pparaamatter语语句定义义常数或或参数。2.1.55 空行行和空格格(1) 适当地在代代码的不不同部分分中插入入空行,避避免因程程序拥挤挤不利阅阅
10、读。(2) 在表达式中中插入空空格,避避免代码码拥挤,包包括:赋值符号两两边要有有空格;双目运算符符两边要要有空格格;单目运算符符和操作作数之间间可没有有空格,示例如下:a = bb;c = aa + bb;if (aa = bb) tthenn .a = a & c;2.1.66 对齐齐和缩进进(1) 不要使用连连续的空空格来进进行语句句的对齐齐。(2) 采用制表符符Tabb对语句句对齐和和缩进,Tab键采用4个字符宽度,可在编辑器中设置。(3) 各种嵌套语语句尤其其是iff.elsse语句句,必须须严格的的逐层缩缩进对齐齐。2.1.77 注释释必须加入详详细、清清晰的注注释行以以增强代代码
11、的可可读性和和可移植植性,注注释内容容占代码码篇幅不不应少于于30%。2.1.88 参考考C语言言的资料料要形成良良好的编编程风格格,有许许多细节节需要注注意,可可以参考考资料4,虽虽然它是是针对CC语言的的讨论,但但由于VVeriilogg HDDL和CC语言的的形式非非常近似似,所以以里面提提到的很很多原则则都是可可以借鉴鉴的。2.1.99 可视视化设计计方法为提高设设计效率率和适应应协同设设计的方方式,可可采用可可视化的的设计方方法,MMenttor Graahpiics的的Rennoirr软件提提供了非非常好的的设计模模式。2.2 可可综合设设计用HDLL实现电电路,设设计人员员对可综
12、综合风格格的RTTL描述述的掌握握不仅会会影响到到仿真和和综合的的一致性性,也是是逻辑综综合后电电路可靠靠性和质质量好坏坏最主要要的因素素,对此此应当予予以充分分的重视视。学习可综综合的HHDL请请参考 56 77。学习设计计的模块块划分请请参考8。2.3 设设计目录录采用合理理、条理理清晰的的设计目目录结构构有助于于提高设设计的效效率、可可维护性性。建议议采用类类似下面面的目录录结构:(1)designsrc(源代码)syn(综合)sim(仿真)par(布局布线)(2)designver1ver2src(源代码)syn(综合)sim(仿真)par(布局布线)src(源代码)syn(综合)si
13、m(仿真)par(布局布线)3. 逻辑辑仿真考虑到性性能和易易用性,首首选的逻逻辑仿真真器是MMenttor Graaphiics的的moddelssim。3.1 测测试程序序(teest bennch)测试程序序对于设设计功能能和时序序的验证证有着举举足轻重重的影响响,测试试激励的的完备性性和真实实性是关关键所在在,有以以下原则则须遵循循:(1) 测试激励输输入和响响应输出出采集的的时序应应当兼顾顾功能仿仿真(无无延时)和和时序仿仿真(有有延时)的的情况。(2) 对于周期较较多的测测试,为为提高效效率,尽尽可能采采用程序序语句来来判断响响应与标标准结果果是否一一致,给给出成功功或出错错标志,
14、而而不是通通过观察察波形来来判断。(3) 采用基于文文件的测测试是很很好的办办法,即即由maatlaab或sspw等等系统工工具产生生测试数数据,测测试程序序将其读读入产生生激励,再再把响应应结果写写入到文文件,再再交给上上述工具具进行处处理或分分析。(4) 仿真器支持持几乎所所有的VVeriilogg HDDL语法法,而不不仅仅是是常用的的RTLL的描述述,应当当利用这这一点使使测试程程序尽可可能简洁洁、清楚楚,篇幅幅长的要要尽量采采用taask来来描述。3.2 使使用预编编译库在进行功功能仿真真和后仿仿真时都都需要某某些模块块的行为为仿真模模型和门门级仿真真模型,如如Altteraa Qu
15、uarttus里里的2220moodell.v(LLPM模模块行为为仿真模模型)和和apeex200ke_atooms.v(220KEE系列门门级仿真真模型),为为避免在在不同的的设计目目录中多多次编译译这些模模型,应应当采用用一次编编译,多多次使用用的方法法。具体体做法如如下(以以20KKE门级级库为例例):1:在某某个工作作目录下下新建一一库名 apeex200ke,将将apeex200ke_atooms.v编译译到其中中。2:在图图形界面面中的LLoadd Deesiggn对话话框中装装入仿真真设计时时,在VVeriilogg 标签签下指定定预编译译库的完完整路径径。(见见下图)4. 逻
16、辑辑综合目前可用用的FPPGA综综合工具具有Meentoor GGrapphiccs 的的 LeeonaardooSpeectrrum,SSynppliccityy的Syynpllifyy和Syynoppsyss 的FFPGAA CoompiilerrII/FPGGA EExprresss,LeeonaardooSpeectrrum由由于性能能和速度度最好,成成为我们们首选的的综合器器,FPPGA CommpillerIII/FFPGAA Exxpreess由由于可以以和Deesiggn CComppileer代码码兼容也也可用。见见参考94.1 逻逻辑综合合的一些些原则HDL代代码综合合后电
17、路路质量的的好坏主主要取决决于三个个方面:RTLL实现是是否合理理、对厂厂家器件件特点的的理解和和对综合合器掌握握的程度度。参考考100中有有比较全全面的讨讨论。4.1.11 关于于LeoonarrdoSSpecctruumLeonnarddoSppecttrumm对综合合的控制制能力比比较强,但但使用也也略为复复杂,故故需要在在使用前前尽量熟熟悉其功功能,才才能取得得较好的的综合结结果。当出现综综合结果果不能满满足约束束条件时时,不要要急于修修改设计计源文件件,应当当通过综综合器提提供的时时序和面面积分析析命令找找出关键键所在,然然后更改改综合控控制或修修改代码码。在LeoonarrdoSS
18、pecctruum 220000.1bb以前的的版本输输出的 .v 网表都都不能用用于仿真真。4.1.11 大规规模设计计的综合合l 分块综合当设计规规模很大大时,综综合也会会耗费很很多时间间。如果果设计只只更改某某个模块块时,可可以分块块综合。如如有设计计 toop.vv 包含含 a.v和bb.v两两个模块块,当只只修改aa.v的的话,可可以先单单独综合合b.vv,输出出其网表表b.eedf,编编写一个个b模块块的黑盒盒子接口口b_ssyn.v,每每次修改改a.vv后只综综合toop.vv、a.v、bb_syyn.vv,将综综合后的的网表和和b.eedf送送去布线线,可以以节约综综合b模模块
19、的时时间。l 采用脚本命命令当设计规模模比较大大时,综综合控制制也许会会比较复复杂,可可以考虑虑采用脚脚本控制制文件的的方式进进行综合合控制,mmodeelsiim、LLeonnarddoSppecttrumm和Quuarttus都都支持TTCL(TTooll Coommaand Lannguaage)语语言,采采用脚本本控制可可以提供供比图形形界面更更灵活和和更方便便的控制制手段。4.1.33 必须须重视工工具产生生的警告告信息综合工具具对设计计进行处处理可能能会产生生各种警警告信息息,有些些是可以以忽略的的,但设设计者应应该尽量量去除,不不去除必必须确认认每条警警告的含含义,避避免因此此使
20、设计计的实现现产生隐隐患。这个原则则对仿真真和布局局布线同同样适用用。4.2 调调用模块块的黑盒盒子(BBlacck bbox)方方法使用黑盒盒子方法法的原因因主要有有两点:一是HDDL代码码中调用用了一些些FPGGA厂家家提供的的模块(如如Altteraa的LPPM模块块)或第第三方提提供的IIP,这这些模块块不需要要综合,而而且有些些综合器器也不能能综合(如如FPGGA CComppileerIII/FPPGA Exppresss可以以综合包包含LPPM的代代码而LLeonnarddoSppecttrumm不能)。因因此须提提供一个个黑盒子子接口给给综合器器,所调调用的模模块到布布局布线线
21、时才进进行连接接。二是方便便代码的的移植,由由于厂家家提供的的模块或或第三方方提供的的IP通通常都是是与工艺艺有关的的,直接接在代码码中调用用的话将将不利于于修改,影影响代码码移植。下面以调调用Allterra的LLPM库库中的乘乘法器为为例来说说明。调调用这样样一个模模块需要要这样一一个文件件:muult88x8.v(可可由Quuarttus的的MeggaWiizerr Pllug-in Mannageer产生生),代代码如下下:/ muult88x8.vmodulle mmultt8x88 (ddataaa, dattab, reesullt);inputt 77:0 daataaa;in
22、putt 77:0 daatabb;outpuut 15:0 ressultt;/ exxempplarr trransslatte_ooff/ syynoppsyss trransslatte_oofflpm_mmulttlpmm_muult_commponnentt(.daataaa(daataaa),.daatabb(daatabb),.acclr(1b0),.cllockk(1b0),.cllkenn(1b0),.suum(1b0),.reesullt(reesullt);defpparaamlpmm_muult_commponnentt.lppm_wwidttha = 88, lpmm_muult_commponnentt.lppm_wwidtthb = 88, lpmm_muult_commponnentt.lppm_wwidtths = 116,lpmm_muult_commponnentt.lppm_wwidtthp = 116, lpmm_muult_commponnentt.lppm_rreprreseentaatioon = SIGGNEDD, / exxempplarr trransslatte_oon/ syynoppsyss trransslatte_oon endmoodulle17