1.2 FPGA的设计方法与要求 1.2.1现代数字系统的设计方法 传统的数字系统设计一般是采用搭积木式的方法进行,即由器件搭成电路板,由电路板搭成数字系统。系统常用的“积木块”是固定功能的标准集成电路,如 74/54系列(TTL)、4000/4500系列(CMOS)芯片和一些固定功能的大规模集成电路。设计者根据需要选择合适的器件,由器件组成电路板,最后完成系统设计。传统的数字系统设计只能对电路板进行设计,通过设计电路板来实现系统功能。
1.2.1现代数字系统的设计方法 进入到20世纪90年代以后, EDA(电子设计自动化)技术的发展和普及给数字系统的设计带来了革命性的变化。在器件方面,可编程逻辑器件飞速发展。利用EDA工具,采用可编程逻辑器件,正在成为数字系统设计的主流。
采用可编程逻辑器件通过对器件内部的设计来实现系统功能,是一种基于芯片的设计方法。设计者可以根据需要定义器件的内部逻辑和管脚,将电路板设计的大部分工作放在芯片的设计中进行,通过对芯片设计实现数字系统的逻辑功能。灵活的内部功能块组合、管脚定义等,可大大减轻电路设计和电路板设计的工作量和难度,有效地增强设计的灵活性,提高工作效率。同时采用可编程逻辑器件,设计人员在实验室可反复编程,修改错误,以期尽快开发产品,迅速占领市场。基于芯片的设计方法可以减少芯片的数量,缩小系统体积,降低能源消耗,提高系统的性能和可靠性。
采用可编程逻辑器件芯片和EDA软件,在实验室里就可以完成数字系统的设计和生产。可以实现无芯片EDA公司,专业从事IP模块生产。也可以实现无生产线集成电路设计公司的运作。可以说,当今的数字系统设计已经离不开可编程逻辑器件和EDA设计工具。
1. EDA技术 (1)EDA技术的内涵 EDA(Electronics Design Automation)即电子设计自动化。现在数字系统设计依靠手工已经无法满足设计要求,设计工作需要在计算机上采用EDA技术完成。EDA技术以计算机硬件和系统软件为基本工作平台,采用EDA通用支撑软件和应用软件包,在计算机上帮助电子设计工程师完成电路的功能设计、逻辑设计、性能分析、时序测试直至 PCB(印刷电路板)的自动设计等。在EDA软件的支持下,设计者完成对系统功能的进行描述,由计算机软件进行处理得到设计结果。利用EDA设计工具,设计者可以预知设计结果,减少设计的盲目性,极大地提高设计的效率。
(1)EDA技术的内涵 EDA通用支撑软件和应用软件包涉及到电路和系统、数据库、图形学、图论和拓扑逻辑、计算数学、优化理论等多学科,EDA软件的技术指标有自动化程度,功能完善度,运行速度,操作界面,数据开放性和互换性(不同厂商的EDA软件可相互兼容)等。 EDA技术包括电子电路设计的各个领域:即从低频电路到高频电路、从线性电路到非线性电路、从模拟电路到数字电路、从分立电路到集成电路的全部设计过程,涉及到电子工程师进行产品开发的全过程,以及电子产品生产的全过程中期望由计算机提供的各种辅助工作。
(2) EDA技术的基本特征 采用高级语言描述,具有系统级仿真和综合能力是EDA技术的基本特征。与这些基本特征有关的几个概念是: ①并行工程和“自顶向下”设计方法 ②硬件描述语言(HDL) ③逻辑综合与优化 ④开放性和标准化 ⑤库(Library)
①并行工程和“自顶向下”设计方法 并行工程是一种系统化的、集成化的、并行的产品及相关过程的开发模式(相关过程主要指制造和维护)。这一模式使开发者从一开始就要考虑到产品生存周期的质量、成本、开发时间及用户的需求等等诸多方面因素。” “自顶向下”(Top→down)的设计方法从系统级设计入手,在顶层进行功能方框图的划分和结构设计;在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述;在功能一级进行验证,然后用逻辑综合优化工具生成具体的门级逻辑电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。“ Top→down”设计方法有利于在早期发现产品结构设计中的错误,提高设计的一次成功率,在EDA技术中被广泛采用。
②硬件描述语言(HDL) 用硬件描述语言进行电路与系统的设计是当前EDA技术的一个重要特征。硬件描述语言突出优点是:语言的公开可利用性;设计与工艺的无关性;宽范围的描述能力;便于组织大规模系统的设计;便于设计的复用和继承等。与原理图输入设计方法相比较,硬件描述语言更适合规模日益增大的电子系统。硬件描述语言使得设计者在比较抽象的层次上描述设计的结构和内部特征,是进行逻辑综合优化的重要工具。目前最常用的IEEE标准硬件描述语言有VHD L和Verilog-HDL。
③逻辑综合与优化 逻辑综合功能将高层次的系统行为设计自动翻译成门级逻辑的电路描述,做到了设计与工艺的独立。优化则是对于上述综合生成的电路网表,根据布尔方程功能等效的原则,用更小、更快的综合结果替代一些复杂的逻辑电路单元,根据指定的目标库映射成新的网表。
④开放性和标准化 EDA系统的框架是一种软件平台结构,它为不同的EDA工具提供操作环境。框架提供与硬件平台无关的图形用户界面以及工具之间的通信、设计数据和设计流程的管理,以及各种与数据库相关的服务项目等。一个建立了符合标准的开放式框架结构EDA系统,可以接纳其他厂商的EDA工具一起进行设计工作。框架作为一套使用和配置EDA软件包的规范,可以实现各种EDA工具间的优化组合,将各种EDA工具集成在一个统一管理的环境之下,实现资源共享。 EDA框架标准化和硬件描述语言等设计数据格式的标准化可集成不同设计风格和应用的要求导致各具特色的 EDA工具在同一个工作站上。集成的EDA系统不仅能够实现高层次的自动逻辑综合、版图综合和测试码生成,而且可以使各个仿真器对同一个设计进行协同仿真,进一步提高了EDA系统的工作效率和设计的正确性。
⑤库(Library) 库是支持EDA工具完成各种自动设计过程的关键。EDA设计公司与半导体生产厂商紧密合作、共同开发了各种库,如逻辑模拟时的模拟库、逻辑综合时的综合库、版图综合时的版图库、测试综合时的测试库等等,这些库支持EDA工具完成各种自动设计。
(3)EDA的基本工具 EDA工具的整体概念是电子系统设计自动化。EDA的物理工具完成和解决设计中如芯片布局、印刷电路板布线、电气性能分析,设计规则检查等问题的物理工具。基于网表、布尔逻辑、传输时序等概念的逻辑工具,设计输入采用原理图编辑器或硬件描述语言进行,利用EDA系统完成逻辑综合、仿真、优化等过程,生成网表或VHDL、Verilog-HDL的结构化描述。细分有:编辑器、仿真器、检查/分析工具、优化/综合工具等。
文字编辑器在系统级设计中用来编辑硬件系统的描述语言如VHDL和Verilog-HDL,在其他层次用来编辑电路的硬件描述语言文本如SPICE的文本输入。 图形编辑器用于硬件设计的各个层次。在版图级,图形编辑器用来编辑表示硅工艺加工过程的几何图形。在高于版图层次的其他级,图形编辑器用来编辑硬件系统的方框图、原理图等。典型的原理图输入工具包括基本单元符号库(基本单元的图形符号和仿真模型)、原理图编辑器的编辑功能、产生网表的功能3个组成部分。
仿真器又称模拟器,用来帮助设计者验证设计的正确性。在硬件系统设计的各个层次都要用到仿真器。在数字系统设计中,硬件系统由数字逻辑器件以及它们之间的互连来表示。仿真器的用途是确定系统的输入/输出关系,所采用的方法是把每一个数字逻辑器件映射为一个或几个过程,把整个系统映射为由进程互连构成的进程网络,这种由进程互连组成的网络就是设计的仿真模型。
检查/分析工具在集成电路设计的各个层次都会用到。在版图级,采用设计规则检查工具来保证版图所表示的电路能被可靠地制造出来。在逻辑门级,检查/分析工具用来检查是否有违反扇出规则的连接关系。时序分析器用来检查电路中的最大和最小延时。 优化/综合工具可以将硬件的高层次描述转换为低层次描述,也可以将硬件的行为描述转换为结构描述,转换过程通常伴随着设计的某种改进。如在逻辑门级,可用逻辑最小化来对布尔表达式进行简化。在寄存器级,优化工具可用来确定控制序列和数据路径的最优组合。
2. 现代数字系统的设计方法 现代数字系统的设计采用“ Top→down”(自顶向下)设计方法,设计步骤如右边图1.2.1所示。
在“ Top→down”(自顶向下)的设计方法中,设计者首先需要对整个系统进行方案设计和功能划分,拟订采用一片或几片专用集成电路ASIC来实现系统的关键电路,系统和电路设计师亲自参与这些专用集成电路的设计,完成电路和芯片版图,再交由IC工厂投片加工,或者采用可编程ASIC(例如 CPLD和 FPGA)现场编程实现。
在“ Top→down”(自顶向下)的设计中,行为设计确定该电子系统或VLSI芯片的功能、性能及允许的芯片面积和成本等。结构设计根据系统或芯片的特点,将其分解为接口清晰、相互关系明确、尽可能简单的子系统,得到一个总体结构。这个结构可能包括算术运算单元、控制单元、数据通道、各种算法状态机等。逻辑设计把结构转换成逻辑图,设计中尽可能采用规则的逻辑结构或采用经过考验的逻辑单元或模块。电路设计将逻辑图转换成电路图,一般都需进行硬件仿真,以最终确定逻辑设计的正确性。版图设计将电路图转换成版图,如果采用可编程器件就可以在可编程器件的开发工具时进行编程制片。
图1.2.2 “ Top→down”(自顶向下)设计系统硬件的过程 利用HDL语言,采用“ Top→down”(自顶向下)设计方法的设计系统硬件电路,一般分为三个步骤,如图1.2.2所示。 图1.2.2 “ Top→down”(自顶向下)设计系统硬件的过程
①行为描述: 对系统进行行为描述的目的是在系统设计的初始阶段,通过对系统行为描述的仿真来发现系统设计中存在的问题。在行为描述阶段,考虑的是系统的结构及其工作过程是否能达到系统设计规格书的要求,并不考虑其实际的操作和算法用什么方法来实现。行为描述是对整个系统的数学模型的描述,其设计与器件工艺无关。
②寄存器传输描述RTL (又称数据流描述)将行为方式描述的HDL程序,采用RTL方式描述,导出系统的逻辑表达式,再用仿真工具对RTL方式描述的程序进行仿真。如果仿真通过,就可以利用逻辑综合工具进行综合了。
③逻辑综合 利用逻辑综合工具,将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表),也可将综合结果以逻辑原理图方式输出。此后再对逻辑综合结果在门电路级上进行仿真,并检查定时关系,如果一切正常,那么系统的硬件设计基本结束。
2. 现代数字系统的设计方法 如果在某一层上仿真发现问题,就应返回上一层,寻找和修改相应的错误,然后再向下继续未完的工作。 2. 现代数字系统的设计方法 如果在某一层上仿真发现问题,就应返回上一层,寻找和修改相应的错误,然后再向下继续未完的工作。 由逻辑综合工具产生门级网络表后,在最终完成硬件设计时,还可以有两种选择:一种是由自动布线程序将网络表转换成相应的ASIC芯片的制造工艺,定制ASIC芯片;第二种是将网络表转换成相应的PLD编程码点,利用PLD完成硬件电路的设计。
利用HDL语言,采用“ Top→down”(自顶向下)设计方法具有以下优点: ③采用HDL语言设计系统硬件电路时,主要的设计文件是用HDL语言编写的源程序,也可以将HDL语言编写的源程序转换成电原理图形式输出,降低了硬件电路设计难度,。 ④用HDL语言的源程序作为归档文件资料量小,便于保存,可继承性好。
1.2.2 优秀FPGA设计的重要特征 FPGA可以替代其它PLD或者各种中小规模数字逻辑芯片在数字系统中广泛应用。FPGA也是实现具有不同逻辑功能ASIC的有效的方法。FPGA是进行原型设计最理想的载体,原型机的最初框架和实现通过FPGA来验证,可以降低成本、缩短开发周期。利用FPGA的可重配置功能,可以在使用过程中,在不改变所设计的设备的硬件电路情况下,改变设备的功能。 优秀的FPGA设计与系统需求文档(SRD,System Requirement Document)和客户的规范保持一致。一个优秀的FPGA设计不仅仅必须要达到客户和系统的基本要求,而且需要具有可读性、可重复性和可测性这三个重要的特征。
可读性好要求: ①FPGA设计的原理图和硬件描述语言设计应该包含有足够详细的注释; ②每张原理图之间的关系以及硬件描述的模块之间的互连关系的详细说明; ③各个模块的详细说明。
1. 可读性 例如,状态机的文档应当包含状态图或功能描述。布尔方程的实现过程也应该写在文档中,甚至应当写在源代码里面,包括简化前的或简化后的布尔方程。FPGA的设计文档也应该包含用户自己创建的约束文件,还应该说明在设计、实现和验证阶段使用的各个输出文件。例如在综合后,应当说明网表文件的硬件描述语言类型、目的等。 许多研究机构的研究表明:投入一定的时间写好文档,可以在调试、测试和维护设计过程中节省大量的时间。一个具有好文档的和经过验证的电路设计,可以很容易地被重用,可以大大的节省开发时间。
2. 可重复性 可重复性要求: FPGA设计应该保证如果不同的设计者从不同部位开始,并重新进行布局布线等,应该可以得到同样的结果。没有这个保证,验证以及其他形式的设计测试就毫无价值。因为设计师显然不希望在设计里出现这样的情况,器件具有相同的输入输出管脚和功能,但是由于布局布线的差异,最后时序却不一样。但是如果在实现的过程中,没有让系统设计软件的参数或选项保持一致,这种情况就会发生。因此FPGA的文档就应包括必要的信息,即软件开发系统的版本号、软件的各个选项及参数设置。
关于FPGA设计的可重复性,有两点应该注意:一是随机数种子,二是布局布线编辑情况。随机数种子是一个由系统时钟生成的n位随机数,用来初始化自动布局布线进程(APR,Automatic Place and Route).如果在执行 APR过程前没有指定这个随机数种子,那么每次运行 APR就会得到不同的结果。同样,在APR之后,可能需要人工进行修改或完善,这些人工修改的过程或参数都应该以文档的方式记录下来,包括布局布线编辑器的选项和参数设置。如果不这样做,最终的实现就会因人而异,整个系统的性能也变得不稳定,甚至无法评估。
3.可测性 可测性也是优秀的FPGA设计的一个重要特征。FPGA的开发商以及系统工程师都应该考虑这个因素。从 FPGA厂商的角度来看,由于 FPGA是基于静态RA M来研制的,加上专为测试而开发的专用功能,通常可以保证FPGA本身100%的故障覆盖率。系统级的测试要求工程师对整个设计流程以及系统架构都要很清楚。