首页 理论教育 基于Vivado与VerilogHDL的FPGA技术实践

基于Vivado与VerilogHDL的FPGA技术实践

时间:2023-10-28 理论教育 版权反馈
【摘要】:运用EDA 技术对FPGA/CPLD 进行开发设计的一般流程如图1.2 所示,主要包括设计输入、设计处理、仿真、编程下载、硬件测试等几个阶段。图1.2EDA 设计流程1. 设计输入从图1.2 中可以看出,任何一项工程设计均是从设计输入开始,其功能是用一定的逻辑表达手段将设计表达出来,输入计算机及EDA 开发工具,为后续设计的处理提供一个设计基础。

基于Vivado与VerilogHDL的FPGA技术实践

运用EDA 技术对FPGA/CPLD 进行开发设计的一般流程如图1.2 所示,主要包括设计输入(原理图/HDL 文本编辑)、设计处理(编译和检查、综合、适配)、仿真、编程下载、硬件测试等几个阶段。整个设计过程,基本上都在EDA 软件平台上完成,每个阶段都有相应的基于计算机环境的EDA 工具的支持。常用EDA 工具大致可以分为5 个模块:设计输入编辑器、HDL 综合器、适配器、仿真器、下载器。

图1.2 EDA 设计流程

1. 设计输入

从图1.2 中可以看出,任何一项工程设计均是从设计输入开始,其功能是用一定的逻辑表达手段将设计表达出来,输入计算机及EDA 开发工具,为后续设计的处理提供一个设计基础。通常,设计输入时使用的EDA 工具主要包含图形编辑器和文本编辑器两种类型,即设计者可以用图形方式或文本方式将设计表达出来,为逻辑综合做准备。

(1)图形输入。

图形输入通常包含原理图输入、状态图输入和波形图输入三种方式。

原理图输入方法:利用EDA 工具提供的图形编辑器以原理图的方式进行的输入。这是一种最直接的设计输入方式,它使用软件系统提供的元器件库及各种符号和连线画出设计电路的原理图,原理图由逻辑器件和连线构成,这些器件包括类似与门、或门、非门、触发器、74 系列器件和类似IP 的功能块等。原理图输入的优点是比较容易掌握,直观且方便,绘图方法类似于Protel 原理图的绘制(但这种原理图和Protel 画的原理图有本质的区别),设计者可以利用基本的数字电路的知识便可以进行电子线路在FPGA 中的实现,而不需要增加诸如HDL 等新的相关知识。然而,原理图输入法的优点同时也成为它的缺点:① 随着设计规模增大,设计的易读性迅速下降,对于原理图中密密麻麻的电路连线,极难弄清电路的实际功能。② 原理图一旦完成,电路结构的改变将十分困难,因此几乎没有可以再利用的设计模块。③ 由于图形文件的不兼容性,电路模块的移植困难、入档困难、交流困难,因为缺乏一个统一的标准化的原理图编辑器。④ 由于在原理图中已经确定了设计系统的基本电路结构和元件,留给综合器和适配器的优化选择空间十分有限,难以实现面积、速度以及不同风格的综合优化。因此,原理图输入方法大多用于设计者对系统及各个部分电路很熟悉的情况。

状态图输入方法:主要是利用EDA 工具的状态图编辑器,用绘制状态流程图的方式进行输入。当设置好时钟信号名、状态转换条件、状态机类型等要素后,EDA 编译器和综合器就能将此状态变化流程图编译综合成电路网表,还可以自动生成VHDL 程序。这种设计方法可以简化状态机的设计难度,常常用于状态机电路的设计。

波形图输入方法:是将待设计的电路看成是一个黑盒子,在波形编辑器中,只需告诉EDA 工具黑盒子电路的输入和输出时序波形图,EDA 工具便可以据此完成相应功能电路的设计。波形图输入主要用于建立和编辑波形设计文件,输入仿真向量和功能测试向量,适用于时序逻辑和有重复性的逻辑函数。

(2)文本输入。

文本输入是指在EDA 工具的相应文本编辑器中,将使用了某种硬件描述语言电路设计文本,如VHDL 或Verilog HDL 的源程序代码,进行编辑输入的方式。这种方式与传统的软件语言编辑输入大同小异,只是这里的硬件描述语言是设计硬件电路,而非软件语言的程序设计。文本输入方法可以克服原理图输入方法所存在的所有弊端,它是EDA技术中最基本、最有效和最通用的输入方法。

实际上,在EDA 技术的实际应用中,文本输入和原理图输入是可以混合使用的,即在原理图中的底层元件符号,可以用文本方式设计完成;顶层设计一般均采用原理图设计输入方式。

2. 设计处理

设计处理是EDA 设计中的核心环节,该过程智能化、自动化的实现从设计输入到最终硬件实现的全过程。在设计处理阶段,编译软件将对设计输入文件进行逻辑化简、综合、优化并根据设计者选择的具体器件自动进行适配,最终产生一个编程文件。设计处理主要包含设计编译和检查语法错误、逻辑综合、适配、布局和布线、生成编程数据文件等过程。

(1)编译和检查。

设计输入完成后,首先进行编译,在编译过程中进行语法错误检查,如检查原理图的信号线有无漏接,信号线端口名是否有重复,文本程序代码的关键字有无错误,使用语句结构是否规范,是否符合相应语言的语法规则等等。如果有错,会及时标出错误的位置,供设计者修改、纠正。

(2)综合。

经过编译和检查无误的设计输入文件,便可以进入到综合阶段。所谓综合(Synthesis),就是将电路的高级语言(如行为描述、原理图或状态图描述)转换为低级的,可与FPGA/CPLD 的门阵列基本结构相映射的网表文件或程序。逻辑映射的过程就是将电路的高级描述,针对给定硬件结构组件,进行编译、优化、转换和综合,最终获得门级电路甚至更低层次的电路描述文件。

实际上,综合功能完全是在EDA 工具—— 综合器中完成的。显然,综合器就是能够自动将一种设计表述形式向另一种设计表述形式转换的计算机程序,或协助进行手工转换的程序。它可以将高层次的表述转换为低层次的表述,可以将用行为表述的设计文件转换为具体的电路结构,可以将高一级抽象的电路(如算法级)转换为低一级的门级电路,并可以用相应的技术进行实现。在这里,综合的整个过程实际上共分为四步来完成:

① 将自然语言转换到VHDL 语言算法,即自然语言综合。(www.xing528.com)

② 从算法表示转换到寄存器传输级(Register Transport Level,RTL),即从行为域到结构域的综合—— 行为综合。

③ 从RTL 级表示转换到逻辑门(包含触发器)的表示,即逻辑综合。

④ 从逻辑门表示转换到版图表示,或转换到FPGA 的配置网表文件,即结构综合。

为了能更好地理解综合的过程和功能,可以将其与传统的软件程序编译器进行对比。从表面上看,我们熟悉的软件程序代码到可执行文件的产生,是通过编译器完成的,其过程可以理解为软件程序语言到机器语言的“翻译”过程;综合器和编译器都不过是一种“翻译器”,它们都能将高层次的设计表达转换为低层次的表达,但它们却又有着本质的区别,如图1.3 所示。

编译器和综合器的主要区别在于编译器是将软件程序翻译成为基于某种特定CPU 的机器代码,这种二进制代码流仅限于CPU 能识别而不能移植,并且机器代码不代表硬件结构,属于纯软件开发设计。而综合器则是将硬件描述语言程序代码翻译为一具体的网表文件,这种网表文件代表了特定的硬件结构,因此,EDA 技术中的程序代码属于硬件设计。

(3)适配/实现。

适配是在适配器中完成的,所谓适配就是将由综合器产生的网表文件针对某一具体的目标器件进行逻辑映射操作,即将网表文件配置于指定的目标器件中,使之产生最终的下载文件,如JEDEC、JAM 格式文件。适配器完成逻辑映射工作具体包含底层器件配置、逻辑分割、逻辑优化、逻辑布局布线等。适配所选用的目标器件(FPGA/CPLD)必须属于原综合器指定的目标器件系列,适配完成后可以利用适配所产生的仿真文件作精确的时序仿真。

图1.3 编译器和综合器的功能比较

3. 设计仿真

在编程下载之前往往需要利用EDA 的仿真工具对适配生成的结果进行模拟测试,这就是所谓的仿真。仿真是EDA 设计过程中的重要步骤,其过程和实现原理是让计算机根据一定的算法和一定的仿真库对EDA 设计进行模拟,以验证设计,排除错误。设计过程中的仿真主要有功能仿真和时序仿真。

所谓功能仿真,就是直接对VHDL/Verilog、原理图描述或其他描述形式的逻辑功能进行模拟测试,以了解其实现的功能是否满足原设计的要求。仿真过程中不涉及任何具体器件的硬件特性(如延时特性),不经历综合与适配阶段,在设计项目编辑编译后即可进入门级仿真器进行模拟测试。功能仿真的好处是设计耗时短,对硬件库、综合器等没有任何要求。

所谓时序仿真,就是将适配器所产生的网表文件送入到仿真器中进行的仿真。这时的仿真是最接近于真实器件运行特性的仿真,因为仿真中已经包含了器件硬件特性参数,因此可以得到精确的时序仿真结果。但时序仿真的仿真文件必须来自针对具体器件的综合器与适配器,综合后所得的EDIF 等网表文件通常作为FPGA 适配器的输入文件,产生的仿真网表文件中包含了精确的硬件延迟信息。

对于大规模的设计项目而言,综合和适配在计算机上的耗时是十分可观的,如果每一次修改设计后都进行时序仿真,显然会极大地降低开发效率。因此,通常需要先进行功能仿真,待确定设计文件所表达的功能满足原设计意图时,再进行综合、适配和时序仿真,以提高设计的效率。

4. 编程下载

如果经过编译、综合、适配和仿真等过程都没有问题,即能满足设计的要求,这时便可以把适配后生成的下载或配置文件,通过编程器或编程电缆向FPGA 或CPLD 下载,以便进行硬件调试和验证,这就是EDA 的编程下载。

一般而言,对CPLD 的下载称为编程(Program),对FPGA 中的SRAM 进行直接的下载称为配置(Configure)。这主要取决于所选用器件的结构所决定。

5. 硬件测试

设计的最后便是硬件测试,所谓硬件测试,就是将载入了设计的FPGA/CPLD 直接用于应用系统中,以便最终验证设计项目在目标系统上的实际工作情况,排除错误,改进设计。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈