在数字系统设计的今天,片上系统(SoC)技术的出现已经在设计领域引起深刻变革。为适应产品尽快上市的要求,设计者必须合理选择各EDA厂家提供的加速设计的工具软件,以使其产品在本领域良性发展。FPGA设计是当前数字系统设计领域中的重要方式之一。本文以多种EDA厂家工具为基础,系统介绍 FPGA设计的流程。
1 数字逻辑划分与FPGA内部结构
图1所示为数字逻辑权状分类图,由其可以看出,现场可编程门阵列(FPGA)是专用集成电路中可编程逻辑器件的重要分支。
随着微电子工业的发展与进步,FPGA的集成度已经达到数百万门,如Xilinx公司的Xcv3200e最大门数为320万门,Altera公司的 Apex20k1500e为150万门,且系统时钟频率已达到200MHz,支持多种I/I电压标准,并具有丰富的可重复利用的IP核,便于加速系统设计。
FPGA的内部资源(以Xilinx公司为例)一般分为可编程逻辑块CLB、输入输出块IOB和可编程连线PI三部分。通过编程控制PI连接各CLB单元,可以形成具有特定功能的电路。使用各公司的专用设计软件设计FPGA,最终可形成由PI控制CLB单元的位流文件。
Xilinx公司主推的Virtex系列FPGA产品采用0.22微米工艺,具有如下特性:支持9种I/O标准、4个延时锁定环、块存储与分布存储并存、可编程流水延时存储、热控制、配置速率为500Mb/s。而Altera公司的Apex20ke系列同样是其公司主推的FPGA产品,在内部嘏线资源方面与Xilinx公司产品不同。在Virtex器件中,分为双长线、单长线、长线几种,在布线时可以按最近原则进行取舍;而在Apex20ke中,连线仅为一种等长,所以在时序分析时比较准确。
2 FPGA设计流程
FPGA设计人体分为设计输入、综合、功能仿真(前仿真)、实现、时序仿真(后仿真)、配置下载等六个步骤,设计流程如图2所示。下面分别介绍各个设计步骤。
2.1 设计输入
设计输入包括使用硬件描述语言HDL、状态图与原理图输入三种方式。HDL设计方式是现今设计大规模数字集成电路的良好形式,除IEEE标准中 VHDL与Verilog HDL两种形式外,尚有各自FPGA厂家推出的专用语言,如Quartus下的AHDL。HDL语言描述在状态机、控制逻辑、总线功能方面较强,使其描述的电路能特定综合器(如Synopsys公司的FPGA Compiler II或FPGA Express)作用下以具体硬件单元较好地实现;而原理图输入在顶层设计、数据通路逻辑、手工最优化电路等方面具有图形化强、单元节俭、功能明确等特点,另外,在Altera公司Quartus软件环境下,可以使用Momory Editor对内部memory进行直接编辑置入数据。常用方式是以HDL语言为主,原理图为辅,进行混合设计以发挥二者各自特色。
通常,FPGA厂商软件与第三方软件设有接口,可以把第三方设计文件导入进行处理。如Quartus与Foundation都可以把EDIF网表作为输入网表而直接进行布局布线,布局布线后,可再将生成的相应文件交给第三方进行后续处理。
2.2 设计综合
综合,就是针对给定的电路实现功能和实现此电路的约束条件,如速度、功耗、成本及电路类型等,通过计算机进行优化处理,获得一个能满足上述要求的电路设计方案。也就是是说,被综合的文件是HDL文件(或相应文件等),综合的依据是逻辑设计的描述和各种约束条件,综合的结果则是一个硬件电路的实现方案,该方案必须同时满足预期的功能和约束条件。对于综合来说,满足要求的方案可能有多个,综合器将产生一个最优的或接近最优的结果。因此,综合的过程也就是设计目标的优化过程,最后获得的结构与综合器的工作性能有关。
FPGA Compiler II是一个完善的FPGA逻辑分析、综合和优化工具,它从HDL形式未优化的网表中产生优化的网表文件,包括分析、综合和优化三个步骤。其中,分析是采用 Synopsys标准的HDL语法规则对HDL源文件进行分析并纠正语法错误;综合是以选定的FPGA结构和器件为目标,对HDL和FPGA网表文件进行逻辑综合;而优化则是根据用户的设计约束对速度和面积进行逻辑优化,产生一个优化的FPGA网表文件,以供FPGA布局和布线工具使用,即将电路优化于特定厂家器件库,独立于硅持性,但可以被约束条件所驱动。
利用FPGA Compiler II进行设计综合时,应在当前Project下导入设计源文件,自动进行语法分析,在语法无误并确定综合方式、目标器件、综合强度、多层保持选择、优化目标等设置后,即可进行综合与优化。在此可以将两步独立进行,在两步之间进行约束指定,如时钟的确定、通路与端口的延时、模块的算子共享、寄存器的扇出等。如果设计模型较大,可以采用层次化方式进行综合,先综合下级模块,后综合上级模块。在进行上级模块综合埋设置下级模块为Don't Touch,使设计与综合过程合理化。综合后形成的网表可以以EDIF格式输出,也可以以VHDL或Verilog HDL格式输出,将其导入FPGA设计厂商提供的可支持第三方设计输入的专用软件中,就可进行后续的FPGA芯片的实现。综合完成后可以输出报告文件,列出综合状态与综合结果,如资源使用情况、综合后层次信息等。
2.3 仿真验证
从广义上讲,设计验证包括功能与时序仿真和电路验证。仿真是指使用设计软件包对已实现的设计进行完整测试,模拟实际物理环境下的工作情况。前仿真是指仅对逻辑功能进行测试模拟,以了解其实现的功能否满足原设计的要求,仿真过程没有加入时序信息,不涉及具体器件的硬件特性,如延时特性;而在布局布线后,提取有关的器件延迟、连线延时等时序参数,并在此基础上进行的仿真称为后仿真,它是接近真实器件运行的仿真。
2.4 设计实现
实现可理解为利用实现工具把逻辑映射到目标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输入输出功能连接的布线通道进行连线,并产生相应文件(如配置文件与相关报告)。通常可分为如下五个步骤。
(1)转换:将多个设计文件进行转换并合并到一个设计库文件中。
(2)映射:将网表中逻辑门映射成物理元素,即把逻辑设计分割到构成可编程逻辑阵列内的可配置逻辑块与输入输出块及其它资源中的过程。 (3)布局与布线:布局是指从映射取出定义的逻辑和输入输出块,并把它们分配到FPGA内部的物理位置,通常基于某种先进的算法,如最小分割、模拟退火和一般的受力方向张弛等来完成;布线是指利用自动布线软件使用布线资源选择路径试着完成所有的逻辑连接。因最新的设计实现工具是时序驱动的,即在器件的布局布线期间对整个信号通道执行时序分析,因此可以使用约束条件操作布线软件,完成设计规定的性能要求。在布局布线过程中,可同时提取时序信息形成报靠。
(4)时序提取:产生一反标文件,供给后续的时序仿真使用。
(5)配置:产生FPGA配置时的需要的位流文件。
在实现过程中可以进行选项设置。因其支持增量设计,可以使其重复多次布线,且每次布线利用上一次布线信息以使布线更优或达到设计目标。在实现过程中应设置默认配置的下载形式,以使后续位流下载正常。
2.5 时序分析
在设计实现过程中,在映射后需要对一个设计的实际功能块的延时和估计的布线延时进行时序分析;而在布局布线后,也要对实际布局布线的功能块延时和实际布线延时进行静态时序分析。从某种程序来讲,静态时序分析可以说是整个FPGA设计中最重要的步骤,它允许设计者详尽地分析所有关键路径并得出一个有次序的报告,而且报告中含有其它调试信息,比如每个网络节点的扇出或容性负载等。静态时序分析器可以用来检查设计的逻辑和时序,以便计算各通中性能,识别可靠的踪迹,检测建立和保持时间的配合,时序分析器不要求用户产生输入激励或测试矢量。虽然Xilinx与Altera在FPGA开发套件上拥有时序分析工具,但在拥有第三方专门时序分析工具的情况下,仅利用FPGA厂家设计工具进行布局布线,而使用第三方的专门时序分析工具进行时序分析,一般FPGA厂商在其设计环境下皆有与第三方时序分析工具的接口。Synopsys公司的PrimeTime是一个很好的时序分析工具,利用它可以达到更好的效果。将综合后的网表文件保存为db格式,可在PrimeTime环境下打开。利用此软件查看关键路径或设计者感兴趣的通路的时序,并对其进行分析,再次对原来的设计进行时序结束,可以提高工作主频或减少关键路径的跹 时。与综合过程相似,静态时序分析也是一个重复的过程,它与布局布线步骤紧密相连,这个操作通常要进行多次直到时序约束得到很好的满足。
在综合与时序仿真过程中交互使用PrimeTime进行时序分析,满足设计要求后即可进行FPGA芯片投片前的最终物理验证。
2.6 下载验证
下载是在功能仿真与时序仿真正确的前提下,将综合后形成的位流下载到具体的FPGA芯片中,也叫芯片配置。FPGA设计有两种配置形式:直接由计算机经过专用下载电缆进行配置;由外围配置芯片进行上电时自动配置。因FPGA具有掉电信息丢失的性质,因此可在验证初期使用电缆直接下载位流,如有必要再将烧录配置芯片中(如Xilinx的XC18V系列,Altera的EPC2系列)。使用电缆下载时有多种直载方式,如对Xilinx公司的FPGA下载可以使用JTAG Programmer、Hardware Programmer、PROM Programmer三种方式,而对Altera公司的FPGA可以选择JTAG方式或Passive Serial方式。因FPGA大多支持IEEE的JTAG标准,所以使用芯片上的JTAG口是常用下载方式。
将位流文件下载到FPGA器件内部后进行实际器件的物理测试即为电路验证,当得到正确的验证结果后就证明了设计的正确性。电路验证对FPGA投片生产具有较大意义。
3 基于多种EDA工具的FPGA设计
仿真工具Modelsim与综合工具FPGA Compiler II及布线工具Foundation Series或Quartus相配合实现FPGA设计流程图如图3所示。
在设计输入阶段,因Modelsim仅支持VHDL或Verilog HDL,所以在选用多种设计输入工具时,可以使用文本编辑器完成HDL语言的输入,也可以利用相应的工具以图形方式完成输入,但必须能够导出对应的 VHDL或Verilog HDL格式。近年来出现的图形化HDL设计工具,可以接收逻辑结构图、状态转换图、数据流图、控制流程图及真值表等输入方式,并通过配置的翻译器将这些图形格式转化为HDL文件,如Mentor Graphics公司的Renoir,Xilinx公司的Foundation Series都带有将状态转换图翻译成HDL文本的设计工具。在这方面,Summit公司(现在已经合并为Innoveda)的图形化界面友好程度较高,且可以导出相应的HDL格式。
从图3中可以看到有三处可以由Modelsim进行仿真:第一处是寄存器传输级(RTL)仿真,此级仿真是对设计的语法和基本功能进行验证(不含时序信息);第二处是针对特定的FPGA厂有技术的仿真,此级伪真是在综合后、实现前而进行的功能级仿真,功能级仿真一般验证综合后是否可以得到设计者所需要的正确功能;第三处仿真是门级仿真,此级仿真是针对门级时序进行的仿真,门级仿真体现出由于布局布线而产生的实际延时。
在RTL仿真阶段,应该建立一个测试台。此测试台可以在整个FPGA流程中进行仿真验证(RTL级、功能级、时序门级)。测试台不但提供测试激励与接收响应信息,而且可以测试HDL仿真流程中的关键功能(如运算部件输出值的正确性等)。测试台的产生可以直接使用文本编程得到,也可以使用图形化工具输入,再由软件翻译为HDL格式,例如使用HDL Bencher软件利用其良好的波形输入界面输入测试激励,再由其自动转化为HDL格式而得到。
在功能级仿真阶段,一般验证综合后是否仍与RTL级仿真结果相同。
在门级仿真阶段,由于已经针对具体的FPGA厂家技术进行了功能级仿真,因此可以通过布局布线得到标准延格式下的时序信息进行门级仿真。
Mentor Graphics公司的Modelsim是业界较好的仿真工具,其仿真功能强大,且图形化界面友好,而且具有结构、信号、波形、进程、数据流等窗口。将 FPGA设计(以HDL方式)输入后进行编译即可进行前仿真,其最新版本Modelsim SE/Plus 5.5支持VHDL与Verilog HDL混合仿真。在仿真时可以编写HDL激励文件或执行组模式方式。组模式方式类似批处理方式,可以连续执行事先在文件中写好的多个执行命令,这对重新仿真或重复执行多个命令特别有效。在仿真过程中可以执行性能分析与代码覆盖分析。性能分析在程序代码执行过程中可以分析出各部分代码执行时占用整个执行时间的百分率。在此信息下,设计者可以找到设计的瓶颈并通过优化代码减少仿真时间。代码覆盖分析可以使设计者确切知道在测试台上正在进行的代码位置,以方便设计者调试。
由Modelsim进行仿真,需要导出VHDL或Verilog HDL网表。此网表是由针对特定FPGA器件的基本单元组成的。这些基本单元在FPGA厂家提供的厂家库中含有其定义和特性,且厂家一般提供其功能的 VHDL或Verilog VDL库。因此,在Modelsim下进行仿真,需要设置厂家库信息。如使用Altera公司的Apex20ke系列,需要将 Apex20ke_atoms.v(或.vhd)与Apex20ke_component.v文件设置或编译到工程项目的对应库中。除网表外,还需要布局布线输出的标准延时文件(sdf),将sdf文件加入仿真可以在窗口化界面设置加入,或通过激励指定。如使用Verilog HDL时加入反标语句$sdf_annotate(“”,Top)通过参数路径指定即可。
在综合阶段,应利用设计指定的约束文件将RTL级设计功能实现并优化到具有相等功能且具有单元延时(但不含时序信息)的基本器件中,如触发器、逻辑门等,得到的结果是功能独立于FPGA的网表。它不含时序信息,可作为后续的布局布线使用。使用FPGA Compiler II进行综合后可以导出EDIF网络。
在实际阶段,主要是利用综合后生成的EDIF网表并基于FPGA内的基本器件进行布局布线。可以利用布线工具Foundation Series选用具体器件(如Virtex系列器件)进行布局布线加以实现,也可以使用布线工具Quartus选用Apex20ke系列器件进行布局布线加以实现,同时输出相应的VHDL或Verilog HDL格式,以便在Modelsim下进行仿真。
关于其它阶段,因篇幅关系,在此不再述。
在数字系统设计的今天,利用多种EDA工具进行处理,同时使用FPGA快速设计专用系统或作为检验手段已经成为数字系统设计中不可或缺的一种方式,了解并熟悉其设计流血应成为现今电子工程师的一种必备知识。