华为FPGA设计规范_第1页
华为FPGA设计规范_第2页
华为FPGA设计规范_第3页
华为FPGA设计规范_第4页
华为FPGA设计规范_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、FPGA设计流程指南前言本部门所承担的FPGA设计任务主要是两方面的作用:系统的原型实现和ASIC的原型验证。编写本流程的目的是:l 在于规范整个设计流程,实现开发的合理性、一致性、高效性。l 形成风格良好和完整的文档。l 实现在FPGA不同厂家之间以及从FPGA到ASIC的顺利移植。l 便于新员工快速掌握本部门FPGA的设计流程。由于目前所用到的FPGA器件以Altera的为主,所以下面的例子也以Altera为例,工具组合为 modelsim + LeonardoSpectrum/FPGACompilerII + Quartus,但原则和方法对于其他厂家和工具也是基本适用的。目 录1. 基于

2、HDL的FPGA设计流程概述11.1 设计流程图11.2 关键步骤的实现21.2.1 功能仿真21.2.2 逻辑综合21.2.3 前仿真31.2.4 布局布线31.2.5 后仿真(时序仿真)42. Verilog HDL设计42.1 编程风格(Coding Style)要求42.1.1 文件42.1.2 大小写52.1.3 标识符52.1.4 参数化设计52.1.5 空行和空格52.1.6 对齐和缩进52.1.7 注释52.1.8 参考C语言的资料52.1.9 可视化设计方法62.2 可综合设计62.3 设计目录63. 逻辑仿真63.1 测试程序(test bench)73.2 使用预编译库7

3、4. 逻辑综合84.1 逻辑综合的一些原则84.1.1 关于LeonardoSpectrum84.1.1 大规模设计的综合84.1.3 必须重视工具产生的警告信息84.2 调用模块的黑盒子(Black box)方法8参考10修订纪录101. 基于HDL的FPGA设计流程概述1.1 设计流程图(1)设计定义(2)HDL实现逻辑仿真器(3)功能仿真逻辑综合器(4)逻辑综合逻辑仿真器(5)前仿真FPGA厂家工具(6)布局布线(8)静态时序分析逻辑仿真器(7)后仿真(9)在系统测试说明:l 逻辑仿真器主要指modelsim,Verilog-XL等。l 逻辑综合器主要指LeonardoSpectrum、

4、Synplify、FPGA Express/FPGA Compiler等。l FPGA厂家工具指的是如Altera的Max+PlusII、QuartusII,Xilinx的Foundation、Alliance、ISE4.1等。1.2 关键步骤的实现1.2.1 功能仿真RTL代码调用模块的行为仿真模型测试程序(test bench)测试数据逻辑仿真器说明:“调用模块的行为仿真模型”指的是RTL代码中引用的由厂家提供的宏模块/IP,如Altera 提供的LPM库中的乘法器、存储器等部件的行为模型。1.2.2 逻辑综合设置综合目标和约束条件调用模块的黑盒子接口RTL代码逻辑综合器HDL网表(net

5、list)EDIF网表(netlist)说明:“调用模块的黑盒子接口”的导入,是由于RTL代码调用了一些外部模块,而这些外部模块不能被综合或无需综合,但逻辑综合器需要其接口的定义来检查逻辑并保留这些模块的接口。1.2.3 前仿真逻辑综合器调用模块的行为仿真模型测试数据测试程序(test bench)HDL网表(netlist)逻辑仿真器说明:一般来说,对FPGA设计这一步可以跳过不做,但可用于debug综合有无问题。1.2.4 布局布线逻辑综合器设置布局布线约束条件FPGA厂家工具EDIF网表(netlist)调用模块的综合模型SDF文件(标准延时格式)HDL网表(netlist)下载/编程文

6、件1.2.5 后仿真(时序仿真)测试数据SDF文件(标准延时格式)FPGA基本单元仿真模型测试程序(test bench)FPGA厂家工具HDL网表(netlist)逻辑仿真器2. Verilog HDL设计基于将来设计转向ASIC的方便,本部门的设计统一采用Verilog HDL,但针对混合设计和混合仿真的趋势,所有开发人员也应能读懂VHDL。Verilog HDL的学习可参考12。2.1 编程风格(Coding Style)要求2.1.1 文件(1) 每个模块(module)一般应存在于单独的源文件中,通常源文件名与所包含模块名相同。(2) 每个设计文件开头应包含如下注释内容:l 年份及公

7、司名称。l 作者。l 文件名。l 所属项目。l 顶层模块。l 模块名称及其描述。l 修改纪录。请参考标准示例程序3。2.1.2 大小写(1) 如无特别需要,模块名和信号名一律采用小写字母。(2) 为醒目起见,常数(define定义)/参数(parameter定义)采用大写字母。2.1.3 标识符(1) 标识符采用传统C语言的命名方法,即在单词之间以“_”分开,如:max_delay、data_size等等。(2) 采用有意义的、能反映对象特征、作用和性质的单词命名标识符,以增强程序的可读性。(3) 为避免标识符过于冗长,对较长单词的应当采用适当的缩写形式,如用buff代替buffer,ena代

8、替enable,addr代替address等。2.1.4 参数化设计为了源代码的可读性和可移植性起见,不要在程序中直接写特定数值,尽可能采用define语句或paramater语句定义常数或参数。2.1.5 空行和空格(1) 适当地在代码的不同部分中插入空行,避免因程序拥挤不利阅读。(2) 在表达式中插入空格,避免代码拥挤,包括:赋值符号两边要有空格;双目运算符两边要有空格;单目运算符和操作数之间可没有空格,示例如下:a = b;c = a + b;if (a = b) then .a = a & c;2.1.6 对齐和缩进(1) 不要使用连续的空格来进行语句的对齐。(2) 采用制表符Tab对

9、语句对齐和缩进,Tab键采用4个字符宽度,可在编辑器中设置。(3) 各种嵌套语句尤其是if.else语句,必须严格的逐层缩进对齐。2.1.7 注释必须加入详细、清晰的注释行以增强代码的可读性和可移植性,注释内容占代码篇幅不应少于30%。2.1.8 参考C语言的资料要形成良好的编程风格,有许多细节需要注意,可以参考资料4,虽然它是针对C语言的讨论,但由于Verilog HDL和C语言的形式非常近似,所以里面提到的很多原则都是可以借鉴的。2.1.9 可视化设计方法为提高设计效率和适应协同设计的方式,可采用可视化的设计方法,Mentor Grahpics的Renoir软件提供了非常好的设计模式。2.

10、2 可综合设计用HDL实现电路,设计人员对可综合风格的RTL描述的掌握不仅会影响到仿真和综合的一致性,也是逻辑综合后电路可靠性和质量好坏最主要的因素,对此应当予以充分的重视。学习可综合的HDL请参考 56 7。学习设计的模块划分请参考8。2.3 设计目录采用合理、条理清晰的设计目录结构有助于提高设计的效率、可维护性。建议采用类似下面的目录结构:(1)designsrc(源代码)syn(综合)sim(仿真)par(布局布线)(2)designver1ver2src(源代码)syn(综合)sim(仿真)par(布局布线)src(源代码)syn(综合)sim(仿真)par(布局布线)3. 逻辑仿真考

11、虑到性能和易用性,首选的逻辑仿真器是Mentor Graphics的modelsim。3.1 测试程序(test bench)测试程序对于设计功能和时序的验证有着举足轻重的影响,测试激励的完备性和真实性是关键所在,有以下原则须遵循:(1) 测试激励输入和响应输出采集的时序应当兼顾功能仿真(无延时)和时序仿真(有延时)的情况。(2) 对于周期较多的测试,为提高效率,尽可能采用程序语句来判断响应与标准结果是否一致,给出成功或出错标志,而不是通过观察波形来判断。(3) 采用基于文件的测试是很好的办法,即由matlab或spw等系统工具产生测试数据,测试程序将其读入产生激励,再把响应结果写入到文件,再

12、交给上述工具进行处理或分析。(4) 仿真器支持几乎所有的Verilog HDL语法,而不仅仅是常用的RTL的描述,应当利用这一点使测试程序尽可能简洁、清楚,篇幅长的要尽量采用task来描述。3.2 使用预编译库在进行功能仿真和后仿真时都需要某些模块的行为仿真模型和门级仿真模型,如Altera Quartus里的220model.v(LPM模块行为仿真模型)和apex20ke_atoms.v(20KE系列门级仿真模型),为避免在不同的设计目录中多次编译这些模型,应当采用一次编译,多次使用的方法。具体做法如下(以20KE门级库为例):1:在某个工作目录下新建一库名 apex20ke,将apex20

13、ke_atoms.v编译到其中。2:在图形界面中的Load Design对话框中装入仿真设计时,在Verilog 标签下指定预编译库的完整路径。(见下图)4. 逻辑综合目前可用的FPGA综合工具有Mentor Graphics 的 LeonardoSpectrum,Synplicity的Synplify和Synopsys 的FPGA CompilerII/FPGA Express,LeonardoSpectrum由于性能和速度最好,成为我们首选的综合器,FPGA CompilerII/FPGA Express由于可以和Design Compiler代码兼容也可用。见参考94.1 逻辑综合的一些

14、原则HDL代码综合后电路质量的好坏主要取决于三个方面:RTL实现是否合理、对厂家器件特点的理解和对综合器掌握的程度。参考10中有比较全面的讨论。4.1.1 关于LeonardoSpectrumLeonardoSpectrum对综合的控制能力比较强,但使用也略为复杂,故需要在使用前尽量熟悉其功能,才能取得较好的综合结果。当出现综合结果不能满足约束条件时,不要急于修改设计源文件,应当通过综合器提供的时序和面积分析命令找出关键所在,然后更改综合控制或修改代码。在LeonardoSpectrum 2000.1b以前的版本输出的 .v 网表都不能用于仿真。4.1.1 大规模设计的综合l 分块综合当设计规

15、模很大时,综合也会耗费很多时间。如果设计只更改某个模块时,可以分块综合。如有设计 top.v 包含 a.v和b.v两个模块,当只修改a.v的话,可以先单独综合b.v,输出其网表b.edf,编写一个b模块的黑盒子接口b_syn.v,每次修改a.v后只综合top.v、a.v、b_syn.v,将综合后的网表和b.edf送去布线,可以节约综合b模块的时间。l 采用脚本命令当设计规模比较大时,综合控制也许会比较复杂,可以考虑采用脚本控制文件的方式进行综合控制,modelsim、LeonardoSpectrum和Quartus都支持TCL(Tool Command Language)语言,采用脚本控制可以

16、提供比图形界面更灵活和更方便的控制手段。4.1.3 必须重视工具产生的警告信息综合工具对设计进行处理可能会产生各种警告信息,有些是可以忽略的,但设计者应该尽量去除,不去除必须确认每条警告的含义,避免因此使设计的实现产生隐患。这个原则对仿真和布局布线同样适用。4.2 调用模块的黑盒子(Black box)方法使用黑盒子方法的原因主要有两点:一是HDL代码中调用了一些FPGA厂家提供的模块(如Altera的LPM模块)或第三方提供的IP,这些模块不需要综合,而且有些综合器也不能综合(如FPGA CompilerII/FPGA Express可以综合包含LPM的代码而LeonardoSpectrum

17、不能)。因此须提供一个黑盒子接口给综合器,所调用的模块到布局布线时才进行连接。二是方便代码的移植,由于厂家提供的模块或第三方提供的IP通常都是与工艺有关的,直接在代码中调用的话将不利于修改,影响代码移植。下面以调用Altera的LPM库中的乘法器为例来说明。调用这样一个模块需要这样一个文件:mult8x8.v(可由Quartus的MegaWizer Plug-in Manager产生),代码如下:/ mult8x8.vmodule mult8x8 (dataa, datab, result);input 7:0 dataa;input 7:0 datab;output 15:0 result;

18、/ exemplar translate_off/ synopsys translate_offlpm_multlpm_mult_component(.dataa(dataa),.datab(datab),.aclr(1b0),.clock(1b0),.clken(1b0),.sum(1b0),.result(result);defparamlpm_mult_component.lpm_widtha = 8, lpm_mult_component.lpm_widthb = 8, lpm_mult_component.lpm_widths = 16,lpm_mult_component.lpm_

19、widthp = 16, lpm_mult_component.lpm_representation = SIGNED, / exemplar translate_on/ synopsys translate_on endmodule注意上述的代码有两对编译指示:/ exemplar translate_off 和 / exemplar translate_on (LeonardoSpectrum支持)/ synopsys translate_off 和 / synopsys translate_on(LeonardoSpectrum和FPGA CompilerII都支持)对于相应的综合器,在

20、这些编译指示中间的语句将会被忽略,那我们可以看到在综合过程中模块mult8x8实际变成了一个只有I/O定义的空盒子(即black box),所以该部分的代码没有连接,在Quartus布局布线的时候,lpm模块的代码才连接到整个设计,在仿真的时候,编译指示不影响模块的完整性。参考1:台湾清华Verilog HDL教程2:Verilog HDL硬件描述语言3:文件头注释块示例4:C语言的风格5:Verilog HDL Reference manual6:Actel HDL coding style guide7:LeonardoSpectrum HDL Synthesis8:ASIC Design

21、 Partitioning9:三种FPGA综合工具的比较10: FPGA Synthesis Training Course修订纪录V2.0(何辉,2001-8-1)修改了4.2节(黑盒子方法)的描述V1.0(何辉,2001-3)第一个版本本文讨论的四种常用FPGA/CPLD设计思想与技巧:乒乓操作、串并转换、流水线操作、数据接口同步化,都是FPGA/CPLD逻辑设计的内在规律的体现,合理地采用这些设计思想能在FPGA/CPLD设计工作种取得事半功倍的效果。 FPGA/CPLD的设计思想与技巧是一个非常大的话题,由于篇幅所限,本文仅介绍一些常用的设计思想与技巧,包括乒乓球操作、串并转换、流水线

22、操作和数据接口的同步方法。希望本文能引起工程师们的注意,如果能有意识地利用这些原则指导日后的设计工作,将取得事半功倍的效果! 乒乓操作 “乒乓操作”是一个常常应用于数据流控制的处理技巧,典型的乒乓操作方法如图1所示。 乒乓操作的处理流程为:输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM(DPRAM)、单口RAM(SPRAM)、FIFO等。在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1”;在第2个缓冲周期,通过“输入数据选择单元”的切换,将输入的数据流缓存到“数据缓冲模块2”,同时将“数据缓冲模块1”缓存

23、的第1个周期数据通过“输入数据选择单元”的选择,送到“数据流运算处理模块”进行运算处理;在第3个缓冲周期通过“输入数据选择单元”的再次切换,将输入的数据流缓存到“数据缓冲模块1”,同时将“数据缓冲模块2”缓存的第2个周期的数据通过“输入数据选择单元”切换,送到“数据流运算处理模块”进行运算处理。如此循环。 乒乓操作的最大特点是通过“输入数据选择单元”和“输出数据选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理模块”进行运算与处理。把乒乓操作模块当做一个整体,站在这个模块的两端看数据,输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数据流进行流

24、水线式处理。所以乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲与处理。 乒乓操作的第二个优点是可以节约缓冲区空间。比如在WCDMA基带应用中,1个帧是由15个时隙组成的,有时需要将1整帧的数据延时一个时隙后处理,比较直接的办法是将这帧数据缓存起来,然后延时1个时隙进行处理。这时缓冲区的长度是1整帧数据长,假设数据速率是3.84Mbps,1帧长10ms,则此时需要缓冲区长度是38400位。如果采用乒乓操作,只需定义两个能缓冲1个时隙数据的RAM(单口RAM即可)。当向一块RAM写数据的时候,从另一块RAM读数据,然后送到处理单元处理,此时每块RAM的容量仅需2560位即可,2块RAM加起来也

25、只有5120位的容量。 另外,巧妙运用乒乓操作还可以达到用低速模块处理高速数据流的效果。如图2所示,数据缓冲模块采用了双口RAM,并在DPRAM后引入了一级数据预处理模块,这个数据预处理可以根据需要的各种数据运算,比如在WCDMA设计中,对输入数据流的解扩、解扰、去旋转等。假设端口A的输入数据流的速率为100Mbps,乒乓操作的缓冲周期是10ms。以下分析各个节点端口的数据速率。 A端口处输入数据流速率为100Mbps,在第1个缓冲周期10ms内,通过“输入数据选择单元”,从B1到达DPRAM1。B1的数据速率也是100Mbps,DPRAM1要在10ms内写入1Mb数据。同理,在第2个10ms

26、,数据流被切换到DPRAM2,端口B2的数据速率也是100Mbps,DPRAM2在第2个10ms被写入1Mb数据。在第3个10ms,数据流又切换到DPRAM1,DPRAM1被写入1Mb数据。 仔细分析就会发现到第3个缓冲周期时,留给DPRAM1读取数据并送到“数据预处理模块1”的时间一共是20ms。有的工程师困惑于DPRAM1的读数时间为什么是20ms,这个时间是这样得来的:首先,在在第2个缓冲周期向DPRAM2写数据的10ms内,DPRAM1可以进行读操作;另外,在第1个缓冲周期的第5ms起(绝对时间为5ms时刻),DPRAM1就可以一边向500K以后的地址写数据,一边从地址0读数,到达10

27、ms时,DPRAM1刚好写完了1Mb数据,并且读了500K数据,这个缓冲时间内DPRAM1读了5ms;在第3个缓冲周期的第5ms起(绝对时间为35ms时刻),同理可以一边向500K以后的地址写数据一边从地址0读数,又读取了5个ms,所以截止DPRAM1第一个周期存入的数据被完全覆盖以前,DPRAM1最多可以读取20ms时间,而所需读取的数据为1Mb,所以端口C1的数据速率为:1Mb/20ms=50Mbps。因此,“数据预处理模块1”的最低数据吞吐能力也仅仅要求为50Mbps。同理,“数据预处理模块2”的最低数据吞吐能力也仅仅要求为50Mbps。换言之,通过乒乓操作,“数据预处理模块”的时序压力

28、减轻了,所要求的数据处理速率仅仅为输入数据速率的1/2。 通过乒乓操作实现低速模块处理高速数据的实质是:通过DPRAM这种缓存单元实现了数据流的串并转换,并行用“数据预处理模块1”和“数据预处理模块2”处理分流的数据,是面积与速度互换原则的体现! 串并转换设计技巧 串并转换是FPGA设计的一个重要技巧,它是数据流处理的常用手段,也是面积与速度互换思想的直接体现。串并转换的实现方法多种多样,根据数据的排序和数量的要求,可以选用寄存器、RAM等实现。前面在乒乓操作的图例中,就是通过DPRAM实现了数据流的串并转换,而且由于使用了DPRAM,数据的缓冲区可以开得很大,对于数量比较小的设计可以采用寄存

29、器完成串并转换。如无特殊需求,应该用同步时序设计完成串并之间的转换。比如数据从串行到并行,数据排列顺序是高位在前,可以用下面的编码实现: prl_temp=prl_temp,srl_in; 其中,prl_temp是并行输出缓存寄存器,srl_in是串行数据输入。 对于排列顺序有规定的串并转换,可以用case语句判断实现。对于复杂的串并转换,还可以用状态机实现。串并转换的方法比较简单,在此不必赘述。 流水线操作设计思想 首先需要声明的是,这里所讲述的流水线是指一种处理流程和顺序操作的设计思想,并非FPGA、ASIC设计中优化时序所用的“Pipelining”。 流水线处理是高速设计中的一个常用设

30、计手段。如果某个设计的处理流程分为若干步骤,而且整个数据处理是“单流向”的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以考虑采用流水线设计方法来提高系统的工作频率。 流水线设计的结构示意图如图3所示。其基本结构为:将适当划分的n个操作步骤单流向串联起来。流水线操作的最大特点和要求是,数据流在各个步骤的处理从时间上看是连续的,如果将每个操作步骤简化假设为通过一个D触发器(就是用寄存器打一个节拍),那么流水线操作就类似一个移位寄存器组,数据流依次流经D触发器,完成每个步骤的操作。流水线设计时序如图4所示。 流水线设计的一个关键在于整个设计时序的合理安排,要求每个操作步骤的划分

31、合理。如果前级操作时间恰好等于后级的操作时间,设计最为简单,前级的输出直接汇入后级的输入即可;如果前级操作时间大于后级的操作时间,则需要对前级的输出数据适当缓存才能汇入到后级输入端;如果前级操作时间恰好小于后级的操作时间,则必须通过复制逻辑,将数据流分流,或者在前级对数据采用存储、后处理方式,否则会造成后级数据溢出。 在WCDMA设计中经常使用到流水线处理的方法,如RAKE接收机、搜索器、前导捕获等。流水线处理方式之所以频率较高,是因为复制了处理模块,它是面积换取速度思想的又一种具体体现。 数据接口的同步方法 数据接口的同步是FPGA/CPLD设计的一个常见问题,也是一个重点和难点,很多设计不

32、稳定都是源于数据接口的同步有问题。 在电路图设计阶段,一些工程师手工加入BUFT或者非门调整数据延迟,从而保证本级模块的时钟对上级模块数据的建立、保持时间要求。还有一些工程师为了有稳定的采样,生成了很多相差90度的时钟信号,时而用正沿打一下数据,时而用负沿打一下数据,用以调整数据的采样位置。这两种做法都十分不可取,因为一旦芯片更新换代或者移植到其它芯片组的芯片上,采样实现必须从新设计。而且,这两种做法造成电路实现的余量不够,一旦外界条件变换(比如温度升高),采样时序就有可能完全紊乱,造成电路瘫痪。 下面简单介绍几种不同情况下数据接口的同步方法: 1. 输入、输出的延时(芯片间、PCB布线、一些

33、驱动接口元件的延时等)不可测,或者有可能变动的条件下,如何完成数据同步? 对于数据的延迟不可测或变动,就需要建立同步机制,可以用一个同步使能或同步指示信号。另外,使数据通过RAM或者FIFO的存取,也可以达到数据同步目的。 把数据存放在RAM或FIFO的方法如下:将上级芯片提供的数据随路时钟作为写信号,将数据写入RAM或者FIFO,然后使用本级的采样时钟(一般是数据处理的主时钟)将数据读出来即可。这种做法的关键是数据写入RAM或者FIFO要可靠,如果使用同步RAM或者FIFO,就要求应该有一个与数据相对延迟关系固定的随路指示信号,这个信号可以是数据的有效指示,也可以是上级模块将数据打出来的时钟。对于慢速数据,也可以采样异步RAM或者FIFO,但是不推荐这种做法。 数据是有固定格式安排的,很多重要信息在数据的起始位置,这种情况在通信系统中非常普遍。通讯系统中,很多数据是按照“帧”组织的。而由于整个系统对时钟要求很高,常常专门设计一块时钟板完成高精

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论