1.5 面向FPGA的EDA开发流程
完整地了解利用EDA技术进行设计开发的流程对于正确地选择和使用EDA软件,优化设计项目,提高设计效率十分有益。一个完整的、典型的EDA设计流程既是自顶向下设计方法的具体实施途径,也是EDA工具软件本身的组成结构。
1.设计输入
图1-2是基于EDA软件的FPGA开发流程图。下面将分别介绍各设计模块的功能特点。对于目前流行的用于FPGA开发的EDA软件,图1-2的设计流程具有一般性。
将电路系统以一定的表达方式输入计算机,是在EDA软件平台上对FPGA/CPLD开发的最初步骤。通常,使用EDA工具的设计输入可分为两种类型:
(1)图形输入
图形输入通常包括电路原理图输入、状态图输入和波形图输入等方法。
状态图输入方法就是根据电路的控制条件和不同的转换方式,用绘图的方法,在EDA软件的状态图编辑器上绘出状态图,然后由EDA编译器和综合器将此状态变化流程图编译综合成电路网表。
波形图输入方法则是将待设计的电路看成是一个黑盒子,只需告诉EDA工具该黑盒子电路的输入和输出时序波形图,EDA工具即能据此完成黑盒子电路的设计。
原理图输入方法是一种类似于传统电子设计方法的原理图编辑输入方式。即在EDA软件的图形编辑界面上绘制能完成特定功能的电路原理图。原理图由逻辑器件(符号)和连接线构成,图中的逻辑器件可以是EDA软件库中预制的功能模块,如与门、非门、或门、触发器以及各种含74系列器件功能的宏功能块,甚至还有一些类似于IP的宏功能块。
(2)硬件描述语言代码文本输入
这种方式与传统的计算机软件语言编辑输入基本一致。就是将使用了某种硬件描述语言的电路设计代码,如VHDL或Verilog的源程序,进行编辑输入。
图1-2 FPGA的EDA开发流程图
2.综合
综合(Synthesis),就其字面含义应该为:把抽象的实体结合成单个或统一的实体。因此,综合就是把某些东西结合到一起,把设计抽象层次中的一种表述转化成另一种表述的过程。
对于电子设计领域的综合概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配而成的过程。
事实上,EDA设计过程中的每一个步骤都可称为一个综合环节。设计过程通常从高层次的行为描述开始,以最低层的结构描述结束,每个综合步骤都是上一层次的转换:
从自然语言对系统功能的表述转换到Verilog语言算法表述,是自然语言综合;
从算法表述转换到寄存器传输级(Register Transport Level,RTL)表述,即从行为域到结构域的综合,是行为综合;
从RTL级表述转换到逻辑门(包括触发器)的表述,即逻辑综合;
从逻辑门表述转换到版图表述(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合,或称结构综合。
一般地,所谓逻辑综合是仅对应于HDL而言的。利用HDL综合器对设计进行综合是十分重要的一步。因为综合过程将把软件设计的HDL描述与硬件结构挂钩,是将软件描述转化为硬件电路的关键步骤,是文字描述与硬件实现的一座桥梁。综合就是将电路的高级语言(如行为描述)转换成低级的,可与FPGA/CPLD的基本结构相映射的网表文件或程序。
当输入的HDL文件在EDA工具中检测无误后,首先面临的是逻辑综合,因此要求HDL源文件中的语句都是可综合的(即可硬件实现的)。
整个综合过程就是将设计者在EDA平台上编辑输入的HDL代码文本、原理图或状态图形描述,依据给定的硬件结构组件和约束控制条件进行编译、优化、转换和综合,最终获得门级电路甚至更底层的电路描述网表文件。由此可见,综合器工作前,必须给定最后实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用某种网表文件的方式对应起来,成为相应的映射关系。
如果把综合理解为映射过程,那么显然这种映射不是唯一的,并且综合的优化也不是单纯的或一个方向的。为达到速度、面积(资源)、性能的要求,往往需要对综合加以约束,称为综合约束。这些约束设置就是用以控制综合器在对HDL程序综合过程中,使构建的系统在工作速度、逻辑资源占用、可靠性等方面符合设计者的要求。
3.适配(布线布局)
适配器(Fitter)也称结构综合器,它的功能是将由综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件,如JEDEC、Jam、POF、SOF等格式的文件。适配所选定的目标器件必须属于原综合器指定的目标器件系列。通常,EDA软件中的综合器可由专业的第三方EDA公司提供,而适配器则需由FPGA/CPLD供应商提供。因为适配器的适配对象直接与器件的结构细节相对应。
适配器就是将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、优化、布局布线操作。适配完成后可以利用适配所产生的仿真文件做精确的时序仿真,同时产生可用于对目标器件进行编程的文件。
4.仿真
在编程下载前必须利用EDA工具对适配生成的结果进行模拟测试,即所谓的仿真(Simulation)。仿真就是让计算机根据一定的算法和一定的仿真库对EDA设计进行模拟,以验证设计的正确性,以便排除错误。仿真是在EDA设计过程中的重要步骤。图1-2所示开发流程的时序与功能门级仿真通常由FPGA公司的EDA开发工具直接提供(当然也可以选用第三方的专业仿真工具),它可以完成两种不同级别的仿真测试:
(1)时序仿真。就是接近真实器件时序性能运行特性的仿真。仿真文件中已包含了器件硬件特性参数,因而,仿真精度高。但时序仿真的仿真文件必须来自针对具体器件的适配器。综合后所得的EDIF等网表文件通常作为FPGA适配器的输入文件,产生的仿真网表文件中包含了精确的硬件延迟信息。
(2)功能仿真。是直接对HDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求的过程。仿真过程不涉及任何具体器件的硬件特性。不需经历适配,甚至综合阶段,在设计项目编辑编译(或综合)后即可进入门级仿真器进行模拟测试。直接进行功能仿真的好处是设计耗时短,对硬件库、综合器等没有任何要求。
本教材主要介绍基于Quartus Ⅱ的时序仿真工具。如果要使用第三方的诸如ModelSim等仿真工具,则必须编写test bench程序来进行仿真,对此读者可参考相关资料。