将处理器集成入FPGA的整合之道
引言
现有的FPGA设计策略只是将FPGA看作一个单个元件,且需要依靠HDL输入(HDL capture)和仿真的手段来进行元件设计和验证。而在将处理器集成入FPGA,试图在可编程部件中成就一个完全内嵌的
系统时,其所呈现出的复杂性是现有方法无法有效解决的。
若想对嵌入到FPGA中基于处理器的整个数字系统进行输入、运行及调试,工程技术人员需要有一个集合各种工程软硬件设计工具,在一个集成化的FPGA执行环境中协调工作的理想设计平台。
本文概述了开发这种系统所必须面对的各种设计挑战,并讲解了Altium公司的最新电子设计环境Nexar如何为FPGA设计提供一种全新的方法。这种方法不仅可将处理器有效地集成入FPGA之中,而且成为一种挖掘现有以及未来大容量、低成本FPGA部件应用潜力的系统级FPGA设计策略。
复杂度提升所带来的问题
一直以来,像FPGA这样的大容量可编程部件都是用于组成逻辑块的,实质上FPGA就是用于研制单一用途的元件,然后与其他现成的元件组合在一起构建一个完整的嵌入式系统。这种工作对于一个含有数万设计门栅的FPGA来讲已经足够了。然而依照摩尔定律,FPGA在成本不断降低的同时其容量也有了大幅的提升,现今的FPGA堪称是一个内含百万级门栅,集成有嵌入式处理器和外设元件,具有可执行整个数字系统工作能力的设计平台,其成本却已不再是上百美元,而是下降到了仅仅数十美元的水平。 现在市场上已有很多此种类型的FPGA,但是为什么工程技术人员没有急于将这些部件应用于设计当中呢?原因很简单—没有合适的设计工具和设计策略。
绝大多数传统的FPGA设计方法是,采用某种形式的硬件描述语言(HDL)在寄存器状态下将整个FPGA作为一个单个元件来进行设计。而且,传统的方法依赖大量的HDL仿真来达到对设计的工作状况进行验证的目的。 在研制FPGA中的组合逻辑块时,采用这种设计方法非常有用,但由于必须进行寄存器寻址,随着FPGA容量的增加以及所用逻辑器件的进一步增多,寄存器级的复杂性使得设计中采用HDL/仿真方法就变得非常烦琐。只要看一下含有处理器以及高阶外设功能的典型嵌入式应用产品就会发现,其电路结构中所特有的复杂性使得传统意义上的FPGA 设计方式不再可行。
虽然这种复杂度可以在一种程度上通过解决分级构造中的问题,搜寻、组合已经过预先测试的IP块,将基于HDL源代码的大模块连在一起以增加层的复杂性来克服,但由于基于HDL组合逻辑的较大模块需要许多行代码,并要知道什么是能集成在设计中的有效源代码,工程技术人员需要对代码的工作流程有一定的了解。
随着设计复杂度的提高,采用传统的HDL/仿真方法来进行FPGA产品开发时,其复杂性所导致的一系列问题就显现了出来。将FPGA当做一种孤立元件进行开发时,行之有效的实施和验证策略在应对系统级集成时受到了严峻的挑战。要想在FPGA平台上进行高效优质的系统级设计,就必须有一种全新的思路和方法。
借鉴线路板设计的经验
线路板级系统的设计为我们提供了有用的经验和设计灵感。通常情况下,为百万级基本门栅的复合系统是无需耗用大量仿真周期的。这是因为复杂的系统已溶入到高阶元件设计之中了,而元件可以很简单地在一个图形环境中连接在一起以便构建起整套系统。门栅和寄存器级的复杂性被元器件有效地掩盖和回避了,这使得工程技术人员无需具备任何有关元件基本结构方面的知识,就可以相对快速且容易地进行整个系统的开发工作。
工程技术人员在从事线路板级的设计时,需要有传统HDL设计流程所要求的更高抽象概念。他们可将元件放置入原理图中,并进行布线以设定整个系统的连接性。电路的功能性单元 — 元件 — 被看做是“黑盒子”。
如果将这种方法引入到FPGA的内部设计之中,将FPGA看做是一个通过元件互连来构建系统的平台,而不是简单地看做是一个独立的复合元件,会是一种更大规模的设计流程。
Altium Limited公司新近推出的设计系统(Nexar)正是应用了这种方式。 工程技术人员可将现有的线路板级嵌入式系统设计知识直接应用于可编程部件的开发之中。Nexar的独特之处在于它并非试图将传统的HDL流程按比例提升到系统级的水平,而是将HDL与基于原理图的线路板设计方法相结合,集二者之优势以实现系统级的设计开发。
设计输入所要面对的挑战
一直以来,FPGA都被当做是用在较大系统中的单一用途元件,是与其他采用分立、现成元件的主要功能块如处理器一起工作的。这种单一用途的元件可以用于集合大量的组合逻辑或者胶合逻辑,也可以充当一种特殊的元件,如网络摄像机用图像编码器,它具备复杂的大规模数据转换功能。
用途单一的元件设计通常采用硬件描述语言(HDL)进行设计输入,这会非常有效,如VHDL或Verilog,但采用原理图编辑器等图形工具则差强人意。
然而,在将整个电路中的功能块连接在一起时,HDL的效能低于图形工具。要想高效优质地完成FPGA上嵌入式系统的设计,一个必要的条件就是能在一个设计中将HDL和原理图方法结合起来使用。
Nexar采用了一种叫做“混合模式”的设计输入(design capture)方法来应对这种挑战,它支持在一项设计中应用原理图和HDL两种设计方式(采用VHDL语言)。这样工程技术人员可根据工作的特定需要来选用最适当的方法。在构建整个系统设计并需要对处理器和外部部件进行连接时,可采用原理图输入(schematic capture)的方式。当需要开发一种用做系统元件
的大容量逻辑块时,则可采用VHDL描述的方法。这种混合模式的输入方法为在FPGA平台上同时支持系统和元件级设计提供了一种理想环境。
需要使用元件的原理图
如果拥有一个支持原理图/HDL混合设计输入方式的设计环境,但没有能够置放于原理图中的合适现成的FPGA元件,也就没有多大的意义了。作为一个“FPGA-可即用”元件,其在原理图上的表示符号必须有一个与之相对应的器件型号或内核,这个型号或内核要能在目标FPGA中例证说明。在FPGA和ASIC设计中,这些可即用的硅晶元件通常被称为IP内核(虚拟元件)。
要设计一个元件分离的嵌入式系统,工程技术人员采用分销商可随时供货的现成元件就可以了。 但要设计并运行一个FPGA平台上开发的嵌入式系统,搜寻具有相应功能的元件会是很困难的。IP内核是可集成入整个系统设计的HDL源文件。然而要找到、购买并获得这类IP的专利使用权是非常耗费时间且困难的事情。而且,以HDL形式提供的IP必须作为整体设计的一部分进行合成并加以验证。由于要花时间将IP写入系统HDL描述中去,因而会进一步拖长开发的时间。
立即可用的 IP元件库
若干个IP元件库作为整个系统的一个组成部分集合在Nexar中,以作为原理图输入过程中所需的部件被随时调用。这些元件并非像其他许多基于方框图的FPGA设计工具所提供的,只是一些简单的低阶布尔门栅。另外还有很多不同的复杂处理器内核和高阶外部器件,如:CAN控制器、VGA 控制器、计时器以及存储元件等。这些元件库再配合一套全面的原理图输入环境,可为在FPGA上进行基于处理器的系统设计提供很大的便利。
所提供的库元件并非源级HDL,而更多的是好多种不同目标FPGA架构进行预先合成和验证的。进行系统合成时,合适指标的低阶元件排线表列被当做黑盒子通过合成引擎,并同系统连接信息一起传给FPGA厂商的布局及布线工具以便进行FPGA内部整合。由于只需要对元件块和用HDL格式生成的各种胶合逻辑功能的连接状况进行安排,系统级的合成工作可以很快地开始进行。而且,由于设计的主要部分 — 内含IP元件已经通过了验证,因而没有必要再进行大量的HDL级仿真来对电路功能的运作状况进行验证。
将各种处理器内核和外设部件封装入预先合成的模块之中,不仅能够降低系统集成工作的复杂程度,而且还提供了一种能直观反映与工程技术人员目前所采用的基于元件的设计方式相类似的设计流程。这种IP提供方式还使系统元件可适用于不同的FPGA部件架构,这让Nexar系统设计可在各种零部件和任何一家FPGA厂商的产品之间轻松实现转移。
嵌入式软件开发
所有以处理器为主体的电子设计都需要配备软件来实现其相应的功能。而要开发这类软件,工程技术人员必须有一种可与处理器相匹配的编译器。
采用嵌入式代码的产品一般都需要在实时环境中工作,且硬件资源通常都很有限 (包括存储器),在这种情况下,嵌入式开发工具就必须能够提供高质量、小体积的代码,且有必要针对处理器进行优化配置,并能支持交互式的调试工作。
为满足嵌入式软件设计工具的这些基本需要,Nexar集成了多个嵌入式编译器和调试器(基于Altium公司的TASKING嵌入式软件开发技术)以用于所供IP元件处理器内核的开发。不仅如此,Nexar还包含了一套全面集成硬件开发环境的完整软件开发系统,以便用于构建整个系统的软硬件能够同步开发。
运用Nexus嵌入式处理器调试接口标准(IEEE-ISTO 5001-1999),可实现与嵌入到FPGA中的处理器进行通信。由Nexar提供的所有处理器内核都针对这一标准而专门设计,并且可提供广泛的片上调试功能。这为在系统中运作的处理器内核实现全面的源级调试提供了可能。Nexar提供的各种编译器都以Altium公司最尖端的Viper编译器的框架为基础构建,并针对预先备好的内核进行了特别的优化配置,以确保可提供高质量的代码。
设计验证
工程技术人员在设计嵌入式系统时,采用的都是一些分立的、基本没有进行过系统仿真的现成元件。他们宁愿通过构建一个试制的原型来调试系统,并交替使用嵌入式软件调试工具和测试仪器来进行测试,比如逻辑分析仪。然而一旦嵌入式系统元件集成入FPGA之中,要想用实际的仪器探查和监测电路就不再可能了。
对FPGA设计进行原型试制已不是什么新概念,目前市面上已有很多种这样的FPGA开发线路板件。但是要想借助一个较大型设计的试制原型,在FPGA开发线路板上对电路的运行状况进行测试是根本不可能的。 传统的FPGA开发板件只是用于将FPGA上用途单一的元器件看做是独立于系统而进行设计和测试的, 而并非用做对嵌入式系统进行整体测试的。
要想获得一个能够对整个基于系统的微处理器进行设计、调试的FPGA开发系统,工程技术人员需要一个真正的执行平台,而不仅仅是一个开发线路板。Nexar中最重要的组成部分就是一个名为NanoBoard的硅晶元件
电路实验板, 它可让工程技术人员在产品开发期间以交互的方式进行真正的物理设计,并为实现交互式的系统级调试和验证提供了便利。 由于与Nexar软件环境保持了一致性,工程技术人员能够在NanoBoard开发与试验环境下,在目标FPGA中集成并运行基于处理器的嵌入式系统, 实现硬件和嵌入式代码的交互式编译、下载和调试。
这种“burn & learn”的方法可提高设计的迭代周期,并加快设计验证的步伐,同时由于这是软件实际应用于硬件中执行工作的,工程技术人员能够非常肯定地证实设计确实可以工作,而不是应用仿真的方法看看设计是否应该可以工作。
要想将这种“burn & learn”的方法付诸于工作当中,工程技术人员需要能够知道到底在FPGA中会出什么问题。Nexar内含一组可在原理图状态下放置入设计的“虚拟仪器”,这使得可以掌握一切。一旦设计在NanoBoard上进行,工程技术人员就可以通过Nexar环境与这些虚拟仪器进行通信,以达到测试和监测电路性能的目的。
这些虚拟仪器不仅能够模拟并提供与其实现设备一样的功能,而且可以用交互的方法对在FPGA中工作的电路进行测试。采用JTAG边界扫描技术的这种仪器可提供一个FPGA内部实时视图, 在一步步进行电路运行时,可对信号状态进行观测。与仪器的通信和设计的调试工作都可采用Nexus调试协议来进行。Nexar还可以借助边界扫描提供一个反映电路运作期间,FPGA各接脚的信号状态的瞬态图。通过边界扫描获得的数值又可映射到原来的原理图中,以便显示调试过程中任一阶段各个信号线的状况或总线的数值。虚拟仪器和部件边界扫描的配合使用不仅能够获得电路运行的各项综合性信息,而且还为在系统级状态下实现软硬件的交互式调试提供了方便。
一套完整的 LiveDesign平台
每一位设计过基于处理器的数字系统的工程技术人员,都对整个系统调试的困难性有非常深刻的印象。工程技术人员首先必须尽快做好硬件的首次修订,以便为嵌入式软件开发者留出足够的开发空间。一旦到了这个阶段,设计工作就变得不好把握了,需要捕捉硬件设计的各种问题,采用代价更为昂贵的PCB板修订来解决,亦或是试图通过软件来回避。
Nexar不但具备有在FPGA上进行全部嵌入式系统设计所需的各种功能,并且还将这些功能和工具以一种方便工程技术人员应用的方式集合在一起,让他们将精力集中在高阶设计流程的开发改进上,而不是把时间浪费在低级别的琐碎事务上,如:在不同工具间调用设计数据、在不同设计环境中工作、应对如何实现设计工具与正开发的硬件对接等。
一旦软硬件设计进入到首次原型试制的阶段,设计的工作便可转入NanoBoard上来进行了,而不必制造出一个真实的物理原型来。工程技术人员可在NanoBoard中获得设计所需要的各种虚拟仪器,探查FPGA接脚的状态,调试、重新编译并重新下载更新的代码-所有的工作都可通过一个Nexar应用接口来完成。由于整个设计迭代的周期只需几分钟的时间,因而可以快速地探测出软硬件的不同执行情况。
所有的设计工作都可通过Nexar的一个接口来控制。工程技术人员可借助这个接口进行软硬件设计的编译,针对FPGA布局和布线的需要进行合成,通过FPGA厂商工具实施远程布局和布线工艺,而且还可将设计下载至NanoBoard之中, 所有工作都可在短短的几分钟之内完成。
Nexar环境中的软硬件设计和调试流程如图1所示,其交互式特性让工程技术人员获得了一种从事设计的全新方法-工程技术人员可在整个设计周期中与在实际硬件中运行的真正软件实现交互。Altium将这种方式称之为LiveDesign,这便是Nexar以及其所构建的平台所具有的优势所在。
结语
Nexar引入了一种新型的元件级、立即可用的IP交付使用机制,以方便将系统级设计中基于原理图的设计输入方式应用于FPGA平台之中。其内含的NanoBoard-可重新配置的系统工具平台-可让工程设计人员以一种交互的方式对整个工艺进行设计和验证, 从而消除了由于采用耗时费力且难度极高的系统级仿真所带来的种种设计障碍。
将NanoBoard与虚拟仪器和边界扫描配合使用,便成为了一套完备的LiveDesign开发环境,它不但能够降低在FPGA中实现整套嵌入式系统运作的复杂性,而且还为应用最新一代大容量、低成本FPGA部件实现整套系统的运作提供了无限的潜能