FPGA技术调研报告0805杨学齐200892128一、FPGA的系统设计概述系统设计在整个设计中是非常关键的,它直接影响到后面的工作时间、质量和效率,同时也关系到最后产品的质量(包括实现的功能、稳定性,测试、使用、维护和升级是否方便等等)。系统设计的必要性表现在它不仅能够从整体上描述系统,而且还表现在它能够在设计前期阶段就能发现理论和设计原理上的错误和缺陷并进行设计方案的修改和优化,而系统仿真是一个有效的方法,它使系统设计从定性描述走向定量描述,更具体、更具体、更轻易发现细节题目和缺陷。假如不重视系统设计,必然要在调试阶段花费更多的时间,而且会对以后的工程应用、产品维护、市场拓展等方面付出代价,这是不可取的。此外,具体的系统设计方案会使得分配模块的设计任务变得更轻易和明确,便于项目开发的治理。系统设计采用自顶向下的设计方法,根据系统的设计要求,首先对系统的结构和功能进行定义,主要包括(对一个具体设计不一定都包括):系统功能描述,技术参数定义,模块划分及其功能描述(即方框图描述),通讯协议,软硬件协同实现方案,系统数据流、控制流(包括状态机)和存储方案,复位和时钟方案(即同步方案),IP使用方案,测试方案(包括仿真时要用到的测试激励和在电路板上的测试方案),各模块的接口信号定义(包括时序关系)及其连接,寄存器定义和FPGA引脚信号定义等等,然后使用高级语言或者VHDL、VerilogHDL硬件描述语言进行算法行为描述和系统行为仿真,最后完成系统设计方案。系统设计流程由此可见,一个完整的系统设计方案不仅需要定性描述(即系统功能和模块功能描述、参数定义、方框图、模块划分和接口信号定义、时序图、可行性论证等),而且应该有定量描述,即含有具体的算法说明、系统行为描述代码和系统仿真结果等。事实上,对一个简单的设计,系统方案只做到定性描述也可以,即不做系统行为描述与仿真,各模块内的算法可以由承担该模块的设计者完成,模块设计可以直接从RTL级(RegisterTransportLevel:寄存器传输级)开始,系统仿真直接从功能仿真开始二、FPGA设计流程2.1设计流程图图1.1说明:逻辑仿真器主要指modelsim,Verilog-XL等。逻辑综合器主要指LeonardoSpectrum、Synplify、FPGAExpress/FPGACompiler等。FPGA厂家工具指的是如Altera的Max+PlusII、QuartusII,Xilinx的Foundation、Alliance、ISE4.1等。(1)设计定义(2)HDL实现(3)功能仿真(4)逻辑综合(5)前仿真(6)布局布线(7)后仿真(9)在系统测试逻辑仿真器逻辑综合器FPGA厂家工具逻辑仿真器逻辑仿真器(8)静态时序分析2.2关键步骤的实现2.2.1功能仿真图2.1说明:“调用模块的行为仿真模型”指的是RTL代码中引用的由厂家提供的宏模块/IP,如Altera提供的LPM库中的乘法器、存储器等部件的行为模型。2.2.2逻辑综合图2.2说明:“调用模块的黑盒子接口”的导入,是由于RTL代码调用了一些外部模块,而这些外部模块不能被综合或无需综合,但逻辑综合器需要其接口的定义来检查逻辑并保留这些模块的接口。RTL代码逻辑仿真器调用模块的行为仿真模型测试数据测试程序(testbench)RTL代码逻辑综合器调用模块的黑盒子接口设置综合目标和约束条件EDIF网表(netlist)HDL网表(netlist)2.2.3前仿真图2.3说明:一般来说,对FPGA设计这一步可以跳过不做,但可用于debug综合有无问题。2.2.4布局布线图2.4逻辑综合器HDL网表(netlist)逻辑仿真器测试数据调用模块的行为仿真模型测试程序(testbench)逻辑综合器EDIF网表(netlist)FPGA厂家工具调用模块的综合模型设置布局布线约束条件HDL网表(netlist)SDF文件(标准延时格式)下载/编程文件2.2.5后仿真(时序仿真)图2.5三、在FPGA中植入嵌入式系统3.1嵌入式系统与FPGA电子产品的开发同样需要在尽量嵌入更多智能设计和创建、实现并测试应用程序所需的时间之间寻找平衡。电子设计不断朝抽象度更高的方向发展,以确保能有效解决越来越复杂的设计问题。在采用微处理器和数字设计的范例中,可以将一些设计从硬连接器件转移到易于移植和易于更新的软件领域,这样就可以在一个“软”环境中处理复杂问题。在整个设计过程中,“软”环境一直都很灵活且容易改变。如今,由于可编程器件(如FPGA)容量大、性能高、成本相对较低的特性,这种平衡又在发生变化,以前硬件设计元素(如处理器及其外围器件和逻辑块)也可以转移到软领域。因此,在整个开发周期内,灵活性可能更大,更改关键设计也更加方便,比如可以更改软件与硬件实现之间的功能分区,甚至更改处理器的选择。与大量使用分立的现有处理器开发嵌入式系统相比,目前开发基于FPGA的处理器应用程序的做法仍很少。尽管FPGA已确实广泛应用于与嵌入式系统处理器密切相关的外围逻辑中,但除了可编程设计之外,处理器及其重要外围器件仍保持着导线连接。FPGA厂家工具HDL网表(netlist)SDF文件(标准延时格式)逻辑仿真器测试数据FPGA基本单元仿真模型测试程序(testbench)图3.1说明:随着用户买得起的高性能可编程器件的问世,设计工程师可将相当部分的硬件设计从硬连线平台转移到“软”环境中,从而节省设计时间、简化电路板设计并降低制造成本。部分原因来自于成本。FPGA的体积大、性能高,尽管能提供一个处理器的应用平台,但与性能相当的分立MCU相比,它也更加昂贵。因此,采用FPGA方案所产生的额外费用限制了FPGA方案的应用范围。不过最近,赛灵思Spartan-3系列等器件消除了价格上的限制,当这些器件与合适的基于FPGA的处理器内核相结合时,成本与收益的平衡将被打破。即使价格不再是限制FPGA作为主流嵌入式系统平台的唯一障碍,但仍存在另一个更难处理的问题,即我们需要改变对可编程逻辑器件的总体看法。我们不能仅仅把它们看成集成逻辑块的有效方法,而是需要扩大视野范围,重新评估在器件(如FPGA)可重新配置的情况下我们对整个设计过程的看法。3.2对“界面友好”开发模型的需求如果在更大范围内审度与嵌入式设计相关的FPGA现象,线索也许就在于微处理器本身的历史。微处理器最初用于计算器,后来用于个人电脑。当器件价格只占一小部分产品成本时,随着技术的进步,用户界面友好的开发模型开始得到广泛应用(如高级编程语言C语言的应用)。由于软件具有很好的灵活性和强大功能,所以它们可以创建一种新的设计模式,该模式可以自由创建和修改大部分系统功能而无需重新设计硬件。采用C语言编写嵌入式应用程序,意味着众多设计工程师可以获得其强大功能和灵活性,这促使基于处理器的嵌入式设计成为电子产品的主流设计。FPGA可以大大增加系统中“软”器件的数量,从而具有类似于引发设计革命的潜力。正如前文所述,大型可编程器件现在的价格使之足以与离散处理器系统竞争。为推动设计工程师采用FPGA器件作为嵌入式应用平台,需要一种用户界面友好的开发方法。该方法既容易被大多数工程师理解,又能方便地将处理器、外围硬件和软件轻松集成在可编程平台中。除此之外,一种在板极设计过程中集成FPGA设计的方法,可以让用户轻松应对在新的“软”设计模型中发生的变化。图3.2说明:嵌入式产品智能包括软件以及包含在FPGA中的软连接系统器件,PCB仅成为器件智能连接外部世界的一个平台。但当我们把FPGA看作系统平台时,在HDL领域获得必需的系统器件(例如处理器与外围器件),并在寄存器转换级实现它们的过程十分复杂。对那些目前还不是FPGA专家的大多数工程师来说,这是一个令人生畏的过程。但是,工程师在板级上开发同样复杂的设计系统不会遇到这些困难,因为在板级上,系统的复杂性表现在用来创建设计的现有器件上,而工程师只是简单地使用这些器件,并不需要了解其内在复杂性。因此,挖掘FPGA作为主流嵌入式系统平台的潜能,关键就在于提供当前板级设计与基于FPGA的系统设计之间的无缝转换。3.3未来的设计工具与嵌入式智能设计解决方案供应商Altium公司提供的电子产品开发系统AltiumDesigner,近年来引领着设计工具的发展趋势。AltiumDesigner为FPGA提供图形输入环境,其中包含高级FPGA器件库。这些器件包括一系列处理器内核和外围器件,它们为大量目标FPGA器件提供预综合。由于器件是现成的,所以创建系统硬件几乎成了“拖放”操作。这个系统包含自行设计、免费的32位处理器TSK3000,该处理器可被用于大量FPGA器件及其它系列产品中。其它能支持的运行平台包括赛灵思MicroBlaze内核和内嵌于VirtexIIPro器件中的硬PowerPC处理器。AltiumDesigner广泛使用免费的开放式Wishbone处理器互连总线。为便于处理器和外围器件的互连,它还提供多个可配置总线连接器件。基于Wishbone的封装内核可用于MicroBlaze和PowerPC等处理器,并且可以重新定位处理器之间的设计而无需重新设计该系统。一个通用的编译引擎和集成工具链在软件层支持这个过程。这种方案的优势是嵌入式开发人员可以为他们的应用软件选择最合适的运行平台。他们可以采用TSK3000开始设计,如果以后需要更高性能,则可以将设计移植到PowerPC,或者移植到MicroBlaze解决方案。AltiumDesigner系统最基本的优势在于,任何硬件开发商都可以利用现有技术,将系统复杂度由板级设计转移到“软”的可编程逻辑领域。这使得大量的设计工程师可从硬连接系统器件中解脱出来,并能发挥在快速变化的硬件和软件环境中进行设计所带来的优势。设计流程朝“软件”方向的转变始于低成本微处理器的供应。由于FPGA技术的进步,这种转变正走向一个新的阶段。如今,电子产品的大部分智能主要取决于嵌入式软件。通过FPGA,嵌入式智能将跨越可编程平台中的软件和软连接器件(图3.2),这种可能性将刺激FPGA的广泛使用,并为未来电子产品的开发奠定基础。四、逻辑综合的一些原则HDL代码综合后电路质量的好坏主要取决于三个方面:RTL实现是否合理、对厂家器件特点的理解和对综合器掌握的程度。参考[10]中有比较全面的讨论。4.1.关于LeonardoSpectrumLeonardoSpectrum对综合的控制能力比较强,但使用也略为复杂,故需要在使用前尽量熟悉其功能,才能取得较好的综合结果。当出现综合结果不能满足约束条件时,不要急于修改设计源文件,应当通过综合器提供的时序和面积分析命令找出关键所在,然后更改综合控制或修改代码。在LeonardoSpectrum2000.1b以前的版本输出的.v网表都不能用于仿真。4.2大规模设计的综合分块综合当设计规模很大时,综合也会耗费很多时间。如果设计只更改某个模块时,可以分块综合。如有设计top.v包含a.v和b.v两个模块,当只修改a.v的话,可以先单独综合b.v,输出其网表b.edf,编写一个b模块的黑盒子接口b_syn.v,每次修改a.v后只综合top.v、a.v、b_syn.v,将综合后的网表和b.edf送去布线,可以节约综合b模块的时间。采用脚本命令当设计规模比较大时,综合控制也许会比较复杂,可以考虑采用脚本控制文件的方式进行综合控制,modelsim、LeonardoSpectrum和Quartus都支持TCL(ToolCommandLanguage)语言,采用脚本控制可以提供比图形界面更灵活和更方便的控制手段。4.3必须重视工具产生的警告信息综合工具对设计进行处理可能会产生各种警告信息,有些是可以忽略的,但设计者应该尽量去除,不去除必须确认每条警告的含义,避免因此使设计的实现产生隐患。这个原则对仿真和布局布线同样适用。4.4调用模块的黑盒子(Blackbox)方法使用黑盒子方法的原因主要有两点:一是HDL代码中调用了一些FPGA厂家提供的模块(如