数字通信同步技术的MATLAB与FPGA实现:Altera/Verilog版(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.6.3 FPGA的设计流程

整个FPGA的设计流程可以与PCB绘制软件设计PCB的流程类比。图1-11是FPGA的设计流程图。本节只是简单地介绍各个设计流程,有关FPGA的详细设计方法可以参考专门介绍FPGA设计的资料。

图1-11 FPGA设计流程图

1. 设计准备

设计一个FPGA项目就好比设计一块PCB一样,只是设计的对象是一颗IC芯片的内部功能结构。一个FPGA设计就是一颗IC芯片设计,在动手进行代码输入前必须明确这颗IC芯片的功能及对外接口。PCB的接口是一些接口插座及信号线,IC芯片的对外接口反映在芯片的引脚上。FPGA灵活性的最直接体现,就在于每个引脚均可自由定义。也就是说,在没有下载程序文件前,FPGA的所有引脚均没有任何功能,各引脚是输入还是输出,引脚信号是复位信号还是LED灯输出信号,完全由程序文件确定。这对于常规的专用芯片来说是无法想象的。

2. 设计输入

明确了设计功能及对外接口后就可以开始设计输入了。所谓设计输入,就是指编写代码、绘制原理图、设计状态机等工作。当然,对于复杂的设计,在动手编写代码前还要进行顶层设计、模块功能设计等一系列工作;对于简单的设计来讲就不用那么麻烦了,一个文件即可解决所有问题。设计输入的方式有多种,如原理图输入方式、状态机输入方式、HDL输入方式、IP核输入方式(高效率的输入方式,用别人的经过测试的劳动成果,可确保设计的性能并提高设计效率),以及DSP输入方式等。

3. 设计综合

大多数介绍FPGA设计的图书在讲解设计流程时,均把设计综合放在功能仿真之后,原因是功能仿真只是对设计输入的语法进行检查及仿真,不涉及具体的电路综合与实现。换句话说,即使你写出的代码最终无法综合成具体电路,功能仿真也可能正确无误。作者认为,如果辛辛苦苦写出的代码最终无法综合成电路,即根本是一个不可能实现的设计,在这种情况下不尽早检查并修改设计,而是费尽心思追求功能仿真的正确性,岂不是在进一步浪费你的宝贵时间?所以,在设计输入完成后,先进行设计综合,看看设计能否综合成电路,再去进行仿真可能会更好些。所谓设计综合,也就是将HDL、原理图等设计输入翻译成由与门、或门、非门、触发器等基本逻辑单元组成的逻辑连接,并形成网表格式文件,供布局布线器进行实现。FPGA内部本身是由一些基本的组合逻辑门、触发器、存储器等组成的,综合的过程也就是将使用语言或绘图描述的功能电路自动编译成基本逻辑单元组合的过程。这好比使用Protel设计PCB,设计好电路原理图后,要将原理图转换成网表文件,如果没有为每个原理图中的元件指定元件封装,或元件库中没有指定的元件封装,则在转换成网表文件并进行后期布局布线时就无法进行下去。同样,如果HDL输入语句本身没有与之对应的硬件实现,自然也就无法将设计综合成正确的电路,这样的设计即使在功能、语法上是正确的,在硬件上却无法找到与之相对应的逻辑单元来实现。

4. 功能仿真

功能仿真又称为行为仿真(在Quartus II中称为RTL Simulation),顾名思义,即功能性仿真,用于检查设计输入的语法是否正确,功能是否满足要求。由于功能仿真仅仅关注语法的正确性,因而即使功能仿真正确后,也无法保证最后设计实现的正确性。在功能仿真正确后,要做的工作可能仍然十分繁杂,原因在于功能仿真过程没有用到实现设计的时序信息,仿真延时基本忽略不计,处于理想状态。对于高速或复杂设计,基本器件的延时正是制约设计的瓶颈。虽然如此,功能仿真在设计初期仍然十分有用,一般来讲,一个连功能仿真都不能通过的设计是不可能通过布局布线后仿真的,也不可能实现设计者的设计意图。功能仿真的另一好处是可以对设计中的每一个模块进行单独仿真,这也是程序调试的基本方法,即先分别对底层模块进行仿真调试,再进行顶层模块的综合调试。

5. 设计实现

设计实现是指根据选定的芯片型号、综合后生成的网表文件,将设计配置到具体FPGA的过程。由于涉及具体的器件型号,所以实现工具只能选用器件厂商提供的软件。Xilinx公司的ISE软件中实现过程又可分为翻译(Translate)、映射(Map)和布局布线(Place & Route)三个步骤。Quartus II中的实现工具主要有Fitter、Assigment Editor、Floorplan Editor、Chip Editor等。虽然看起来步骤较多,但在具体设计时,直接单击Quartus II中的设计实现(Fitter)条目,即可自动完成所有实现步骤。设计实现的过程就好比Protel软件根据原理图生成的网表文件后进行绘制PCB的过程。绘制PCB可以采用自动布局布线及手动布局布线两种方式。对于FPGA设计来讲,同样也有自动布局布线和手动布局布线两种方式,只是手动布局布线相对困难得多。对于常规或相对简单的设计,仅依靠Quartus II的自动布局布线功能即可得到满意的效果。

6. 时序仿真

一般来说,无论软件工程师还是硬件工程师,都更愿意在设计过程中充分展示自己的创意,而不太愿意花过多时间去做测试或仿真工作。对于一个具体的设计来讲,工程师们更愿意关注设计功能的实现,只要功能正确,工作也就差不多完成了。由于目前设计工具的快速发展,尤其是仿真工具功能的日益强大,这种观念恐怕需要进行修正了。对于FPGA设计来说,布局布线后仿真(在Quartus II中称为Gate Level Simulation)也称为后仿真或时序仿真,具有十分精确的器件延时模型,只要约束条件设计正确合理,仿真通过了,程序下载到芯片后基本上不会出现什么问题。在介绍功能仿真时说过,功能仿真通过了,设计还离成功较远,但只要时序仿真通过了,则设计离成功就很近了。

7. 程序下载

时序仿真正确后就可以将设计生成的芯片配置文件写入芯片中进行最后的硬件调试,如果硬件电路板没有问题的话,那么在将芯片配置文件下载到芯片后即可看到自己的设计已经在正确地工作了。