IC技术讲座是本刊2005年推出的全新技术类栏目。为了让工程师在设计开发中完善和拓展基础理论与系统知识,丰富应用经验,《世界电子元器件》和m.188betcom手机版
联合清华大学等知名院校共同创办了这个栏目,特约知名学者、教授以及著名半导体公司的应用工程师撰写,以系列讲座的方式对热点IC技术进行全面而系统的介绍,涵盖最新技术要点。最先开设的讲座将围绕三大课题:DSP、FPGA和嵌入式系统,每个课题都将连载6期。
概述
随着器件规模、功能以及可靠性的不断提高,FPGA在现代数字系统中的应用日渐广泛。采用FPGA设计数字电路已经成为数字电路系统领域的主要设计方式之一。
FPGA设计是指使用相应的EDA开发软件对FPGA器件进行开发的过程。 最早的设计方法是自底向上的,即首先确定库中可用的元件,再使用这些元件进行模块的设计,完成各模块后进行连接,从而形成整个系统。最后经过调试和测量来考察系统是否达到所需的性能指标。
随着技术和需求的发展,自底向上的方法已经不能适应复杂数字系统的设计。目前广泛使用的是自顶向下的设计方法和流程:首先从系统设计入手,在顶层进行功能划分和结构设计,并用硬件描述语言对高层次的系统行为进行描述,在系统级采用仿真手段验证设计的正确性,之后再逐级设计下一层的结构,用综合优化工具生成具体门电路的网表。这种逐级进行设计和验证的方法可以及早发现问题并修改系统设计,缩短开发周期、节约成本。
FPGA设计流程
FPGA设计的一般流程如图1所示,包括设计准备、设计输入、功能仿真、设计处理、时序仿真、器件编程与测试几个步骤。 图1
FPGA设计的一般流程(略)
设计准备 在数字系统设计之前,首先要进行方案论证、系统设计、器件选择等准备工作。设计人员根据任务的功能和性能指标需求,对器件的资源、成本以及功耗等方面进行折衷,选择合适的设计方案和FPGA器件。 设计描述与输入 设计输入就是指设计人员将所设计的系统或电路以开发软件要求的某种形式表示出来,并输入计算机的过程。设计描述和设计输入通常使用图形和硬件描述语言两种形式。 图形输入方式 图形方式的设计输入主要是使用EDA软件进行原理图、状态图、波形图等图形的编辑和修改。
原理图输入方式是一种最直接的设计描述方式,使用元件库中的元件画出系统或电路的原理图,符合人们的思维习惯。这种设计输入方式要求设计人员具有丰富的硬件知识、熟悉FPGA器件的结构。主要优点是系统结构清晰直观、便于信号的观察和电路的调整;缺点是设计效率低,产品升级、FPGA器件更换、EDA软件更换时需要重新输入原理图,而硬件描述语言输入方式就没有这方面的问题。
状态图主要用来通过图形方式设计有限状态机。图形化的有限状态机设计具有简单、直观、快捷等特点。波形输入方式主要是用来建立和编辑波形设计文件,以及输入仿真向量和功能测试向量。 硬件描述语言输入方式 硬件描述语言输入方式使用文本进行设计描述,包括普通硬件描述语言和行为级硬件描述语言。比较有代表性的普通硬件描述语言是ABEL,它支持逻辑方程、真值表、状态机等逻辑表达方式,主要用于简单可编程逻辑器件的设计输入。
行为级硬件描述语言是目前常用的高层硬件描述语言,主要有VHDL和Verilog
HDL两个IEEE标准。其突出优点有:逻辑设计与具体工艺无关,使设计人员在系统设计、逻辑验证阶段确定方案的可行性;行为级描述,便于设计大规模、复杂的数字系统;具有很强的逻辑描述和仿真功能,输入效率高;在不同的FPGA器件和EDA软件之间的转换比较方便;不必对底层的电路和FPGA器件结构非常熟悉。 功能仿真 功能仿真也称为前仿真或行为仿真。用户所设计的电路在综合之前应该首先进行逻辑功能的验证,这种仿真没有器件内部逻辑单元和连线的实际延时信息,只是初步验证系统的逻辑功能。
为了能够完成功能仿真,需要先使用波形编辑器或硬件描述语言,来建立仿真时需要的波形文件和测试向量(尽可能包含所有可能影响设计功能的输入信号的组合)。仿真结果将以波形图的方式直观显示在计算机屏幕上,并生成报告。从中设计者可以观察到各个信号的变化,以判断电路是否实现了预期的功能。如果发现错误,则应该返回设计输入阶段进行逻辑设计的修改。 设计处理 确定设计描述的功能无误后,就可以使用EDA软件对设计描述和相应的性能约束进行处理,设计处理是FPGA设计开发中的重要环节。在设计处理的过程中,EDA软件对设计输入文件进行语法和设计规则检查、逻辑简化、优化、综合、适配、布局布线、时间参数提取,最后产生器件编程用的数据文件。
首先,EDA软件对设计输入进行语法和设计规则检查,然后简化和优化逻辑方程,通过综合和适配将优化后的设计映射到器件相应的逻辑单元中,生成网表文件。布局布线将映射产生的物理单元在目标器件上进行放置和连接,并提取相应的时间参数。时间参数提取将生成当前设计的含有时间参数的网表,用于时序仿真。另外,时间参数提取输出的时序报告可以反映当前设计是否满足时序约束。
设计处理的效果主要取决于设计者的风格和综合工具的能力。使用EDA软件进行设计处理时需要注意:首先,最优化的目标可以是速度、资源、功耗等,这些指标时相互制约的。其次,目前综合器所支持的硬件描述语言的语法是有限的,过于抽象的语法还无法综合。因此,设计者应该具有良好的硬件描述语言编码风格。 时序仿真 时序仿真又称为后仿真或延时仿真,是高速FPGA设计过程中必不可少的仿真验证阶段。由于不同FPGA器件内部的延时不一样,不同的布局布线方案也将影响电路各部分的延时,这些延时可能会导致系统和电路功能的变化。因此在设计处理以后,需要对系统和各模块进行时序仿真,分析时序关系,检查和消除竞争冒险、并对器件的实际工作性能进行估计。
由于时序仿真中需要参考的参数非常多,因此将比功能仿真花费的时间长。时序仿真中使用了电路延时的最坏情况,因此,通过时序仿真验证之后的设计一般都能够在实际器件上正确运行。 器件编程与测试 器件编程也可以称为配置。时序仿真完成之后,就可以使用EDA软件生成FPGA器件编程时所需的数据文件。器件的编程就是将编程数据下载到相应的FPGA器件中去。
器件编程需要满足一定的条件,如编程电压、编程时序、编程算法等。一次性编程的FPGA需要专用的编程器完成器件的编程工作,基于SRAM的FPGA可以由EPROM或其他存储器件进行配置。在线可编程的FPGA器件不需要专门的编程器,仅需要一根编程下载电缆和相应的编程软件。 器件在编程结束后,还可以对器件进行校验、加密等操作工作。对于支持JTAG技术,具有边界扫描测试BST(Boundary-Scan
Testing)能力和在线编程能力的器件来说,编程和测试过程都比较方便。 FPGA设计的要求
作为一个优秀的FPGA设计,必须具有以下几方面特征: 满足系统的设计规范和性能要求 满足用户对系统性能指标和设计规范的需求,是一个FPGA设计成功的最基本要求。 源代码可读性高 可读性好的FPGA设计(原理图或硬件描述语言描述的源文件)应该包含有足够的说明和注释信息,比如,各个模块的说明、每张原理图之间的关系、硬件描述的模块之间的互连关系等等。另外,状态机设计的文档应该包括状态图或功能描述,布尔方程的实现过程也应该写在源代码中。 可读性好的设计在调试、测试和维护上将节省大量的时间,已经经过验证的电路很容易重用,节省开发时间。 完备的开发文档 为了保证FPGA设计的可重复性,设计文档除了详尽的系统设计说明之外,还必须包括一些其他的必要信息,比如软件开发系统的版本号、软件的各个选项及参数设置。另外,各种操作和修改的过程都应该以文档的方式记录下来。如果不这样做,最终的实现就会因人而异、因开发系统而异,整个系统的性能也变得不稳定,甚至无法评估。 FPGA设计的基本原则
在EDACN的FPGA技术论坛上,一些经验丰富的设计人员总结了FPGA设计中几条非常重要的基本原则,现列举如下,供大家参考借鉴。 硬件资源与处理能力的折衷 在设计中,可以通过并行处理来提高处理能力,而并行的硬件将消耗更多的FPGA内部资源;也可以通过模块复用来降低硬件资源的消耗,带来的结果就是系统运行速度的降低。在具体设计中,应该根据系统性能指标的要求,在资源消耗和处理能力之间取得合理的折衷,在保证系统功能和性能的同时降低资源消耗,从而降低功耗和成本。
硬件思想 应该明确FPGA逻辑设计所采用的硬件描述语言与软件语言(如C,C++等)是有本质区别的。在使用硬件描述语言进行FPGA设计时,不应该片面追求代码的整洁,简短。而正确的编码方法是:首先要对所需实现的硬件电路的结构与连接有十分清晰的理解和设想,然后再用适当的HDL语句表达出来即可。 系统原则 在FPGA设计中,应该对设计的全局在宏观上进行合理的安排,比如时钟域、模块复用、约束、面积、速度等问题。这些系统上的考虑不仅关系到是否能够最大程度地发挥项目成员的协同设计能力,而且直接决定着设计的综合、实现效果和相关的操作时间。
模块化设计是系统原则的一个很好的体现,它不仅仅是一种设计工具,它更是一种设计思路、设计方法,它是自顶向下、模块划分、分工协作设计思路的集中体现,是当代大型复杂系统的推荐设计方法,目前很多的EDA厂商都提高了模块化设计工具。 同步设计原则 目前的商用FPGA都是面向同步电路设计而优化的,其上实现异步电路并不能充分体现出异步电路应有的优势。而同步时序电路可以很好地避免毛刺,因此,提倡在设计中全部使用同步逻辑电路。
FPGA设计新发展 随着FPGA的门数、速度、结构复杂度、各种IP核供应等方面的不断进步、数字系统设计规模超越几百万门,更多的设计者将混合使用系统级和平台级的FPGA器件及其内部嵌入的处理器、存储器或数字信号处理器。FPGA设计的要求也必须作出相应的变化,从而使设计者能够使用FPGA器件实现更复杂、更高速的系统。
在通常的FPGA设计中,首先是整个系统进行架构,然后再把硬件部分设计交给硬件工程师进行寄存器转移级(RTL)设计,软件部分设计交给软件工程师采用C++语言等进行编程。但随着设计规模的扩大,芯片复杂度及性能需求的提高,使用传统方法将面临很多困难。因此,FPGA模块化设计和系统级设计概念正在不断得到发展和改进。 分层次的模块化设计方法
分层次的、基于模块的设计方法将系统分为多个层次,采用模块作为基本设计单元,实现系统的开发和设计。在这种设计流程中,设计者面对的是各种不同层次的功能模块,这样就为复杂的几百万门级系统的设计和处理提供了更高的抽象级别以及更灵活的实现方式。
分层次的模块化设计方法具有很多优点。满足了缩短市场响应时间,同时降低成本的需求。首先,基于模块的设计方法在设计实现中引入了最大程度的并行性,使顶层设计和单个模块设计能同时进行;其次,这种方法使得设计者更容易进行设计复用,包括设计模块和IP核的复用。 电子系统级(ESL)设计与验证方法学 ESL设计是能够让电子系统设计工程师以紧密耦合方式开发、优化和验证复杂系统架构和嵌入式软件的一套方法学,它还提供寄存器传输级实现的验证基础。
ESL的目标是系统级模型的协同软硬件设计。在过去几年中,ESL设计被认为是一个很难达到的目标。然而目前,业界在ESL设计上已经取得了一定的进展。随着SystemC已提交给IEEE
P1666工作组,SystemC如今已被接受并成为广泛使用的系统级建模标准。目前已有许多世界领先的系统和半导体公司采用ESL设计,为产品提供必需的先进功能和高性能。电路规模越大、复杂度越高,ESL设计方法和工具所能显示的优势就越高。
|