本文为上下连载的上篇,探讨了日益增加的可供选择的硬件加速方案,并说明不具备硬件背景的设计师如何得益于不断发展的开发工具。
------------------------------------------
要 点
·软件威力与硬件威力恰如串行操作与并行操作。
·定制的硬件加速逻辑不过是许多系统性能加速方法之一。
·硬件加速工具针对供缺乏硬件背景的设计师使用,并越来越好用。
·选择指令扩展还是选择定制协处理器逻辑,取决于设计的硬件需求。
供设计师实现定制硬件加速的选择方案和开发工具正在不断演进。定制硬件加速是一种使并行处理实现起来愈加可行的方法,它能使性能、功耗和成本三者平衡,并将它们推进到一个新境界。生产处理器的Stretch公司首席技术官Albert Wang解释说:“本公司之所以近推出一种采用集成的可重新配置硬件加速技术的软件可编程处理器,乃是因为在满足当今前卫的计算密集应用系统设计需求方面,达到性能要求的时间至关重要。”
这篇连载文章的上篇概述了硬件加速项目工作、可供选择的方案和工具,也说明了分析软件、确定需要加速的硬件以及实现硬件加速的过程。下篇将刊于2005年3月的本刊,它将集中讨论各种硬件加速工具。这些工具能在系统模型或软件源区上直接进行操作,因为提供了一个附加的抽象层。
设计效率和开发生产率是嵌入式系统设计师考虑的重要因素。在本文的描述中,设计效率反映一个设计在达到其处理性能要求和满足其定时、功耗及成本约束条件方面的优劣程度。由于复杂性对于竞争对手来说是一道障碍,所以能满足复杂的性能要求与约束条件的嵌入式设计可为开发小组识别并提供标新立异增值功能的机会。如果一个设计达不到足够复杂性的要求,也就难以提供独特而又标新立异的增值功能,因为竞争对手可以很快仿效并将各种的想法整合到其自己的产品中。
然而,这道复杂性障碍是暂时的,因为竞争对手将会集中力量来与你的想法对抗。如果你不能迅速而充分地调整你的产品功能和成本,于竞争对手的工作,你就会丧失率先上 市的优势。开发生产率会抵消设计效率。它不仅包含完成当前设计和实施工作所需的时间和资源,而且还包含开发成果在无可避免的后续项目中的可重用性。如果你的开发过程和工具在提取你设计成果的非标新立异部分并使之自动化方面不能优于竞争对手的开发过程和工具,你就可能为你的竞争对手在创新方面超越你打开了方便之门。你可能不得不在这些非标新立异细节上比你的竞争对手花费更多的宝贵开发时间和资源。
ASIC是一种可以针对某种系统优化的半导体器件,只实现某种系统为满足一些要求而所需的那些功能。ASIC能够地平衡性能、成本和功耗要求,不过其实现需要较长的开发周期以及大量的一次性工程成本,如果功能要求演变很快,就难以收回这些成本。
可编程平台处于这个领域的另一端。这些平台侧重于生产率而不是效率,并要同时顾及可重用性和灵活性,以便快速修改或替代代码或逻辑,实现新功能。软件可编程系统能高效地实现顺序处理,但是在进行并行处理时效率很低。可编程硬件系统在实现并行操作方面有杰出表现,但是在进行顺序操作时通常不如软件可编程系统效率高。软件还擅长于整合抽象层,而硬件则出于成本效益和可重用性方面的考虑而无法做到。例如,为了适应一种不同的但功能上等效的硬件,你可能会重新设计硬件,适用于这样一个系统的软件却可能不得不在新旧两种配置下运行。结果,软件可抽象功能上不明显的硬件的微小变化。
软件可编程系统和硬件可编程系统所用的开发工具具有根本性的差别。由于每一种可编程功能具有主导的顺序性或并行性,软件工程师和硬件工程师使用的工具要为系统行为提供适当而又不同可视化。Xilinx公司负责DSP设计工具与方法的总监Jim Hwang说,HDL开发人员在从事信号处理应用的开发人员中占一小部分。他解释道,DSP领域的大多数设计师都使用C和Matlab。按照Jim Hwang的说法,诸如DSP系统生成器之类开发工具“可减少那些不懂VHDL的应用开发人员和系统体系结构设计师使用基于FPGA的产品的障碍”。许多支持定制硬件加速的公司都在为提供工具和器件而投入大量开发资源,这些工具和器件使得非硬件工程师(例如系统设计师和软件工程师)能用软件实现像硬件加速那样的并行性。
在本次实践项目进行的早期,EDN不得不做出有关该项目范围的决定。该项目可能有一个范围狭小的重点,从而在一个平台上深入研究某个算法的加速过程;也可能研究几种体系结构和工具产品,广泛探讨硬件加速技术(从而在每个体系结构上花费较少的时间)。现在越来越多的公司提供或支持硬件加速技术,为了更好地突出这些公司的方法,我们选择了一条比较广泛而又较为浅显的途径。仅仅在近的几个月内,就有两家公司宣布推出首批产品。Poseidon Design Systems公司推出的工具能直接根据标准ANSI C源代码合成专用的硬件加速器,而Stretch公司推出的目录处理器系列和工具集能根据ANSI C源代码实现硬件加速。
我们花时间在Altera、ARC、Atmel、MIPS、Tensilica和Xilinx等公司工作平台上实现他们选择的算法的硬件加速。在其各自的场所执行这项任务缓解了时间上的约束,同时简化了我们许可申请和配置各种开发环境的工作;这还意味着厂商的工程人员可以在整个过程中对我们进行指导。 每家公司都在不知道其它公司的选择的情况下选择一种算法来进行加速。因此,每家公司可能选择其经验多的、能验证其体系结构和工具如何支持每种加速的分析和实现方法的算法加速技术。由于不鼓励在两家公司之间使用共同的算法加速,项目工作得以更好地专注于过程、工具和体系结构机制,从而避免比较各种加速工作效率的诱惑(参见附文《性能比较》)。
Altera公司提供可编程逻辑器件、相关软件工具和IP(知识产权)软件模块。其Excalibur器件将一个ARM922T处理器(可工作于200 MHz)和Apex 20KE FPGA体系结构组合在一起。就本项目而言,编程目标和加速目标都是32位Nios和Nios II两种软处理器芯核,这两种芯核可驻留在Altera公司的Stratix、Cyclone和HardCopy FPGA器件内。Nios II芯核有三种配置,全都支持定制指令。标准配置的Nios II/s可平衡性能和尺寸(成本)。经济型配置的Nios II/e以性能为代价实现小的芯核(大约为Nios II/s标准芯核尺寸的一半),并保持与Nios II ISA(指令集体系结构)的兼容性。Nios II/f配置追求处理性能而使芯核尺寸。Altera公司的SOPC(可编程单片系统)Builder系统开发工具能够利用MathWorks公司的Matlab和Simulink来开发和实现算法设计,并将其移植到HDL文件,以便供Quartus II设计软件一起使用。
ARC公司特许使用可配置和预配置的处理器芯核和IP芯核以及开发软件、仿形工具和一套实时操作系统。其可配置的处理器芯核支持任选的DSP扩展,并可以从4级流水线ARCtangent-A4体系结构扩展到7级流水线ARC 700体系结构。这些芯核都是可合成和可配置的,因此设计师可以扩展ISA。
本项目的目标是32位ARCtangent-A4处理器,但也侧重于使用ARC 600处理器时本项目有何不同之处(突出的就是更长的指令流水线和附加的ALU/DSP扩展)。加速工作专注于实现一个作为定制指令的分组报头处理功能。ARChitect配置工具可配置这些芯核和Extension Instruction Automation工具套件,以便将Verilog指令扩展纳入流水线中。这种工具能自动插入所有控制信号和结构,以便将你的指令纳入流水线中并创建一个可供ARChitect工具套件使用的指令库。
我们在几乎所有公司都采用32位体系结构。不过,在Atmel公司,我们探究了一种与一个FPSLIC(现场可编程系统级集成电路)器件上的FPGA集成在一起的8位AVR微处理器芯核。使用8位器件的硬件加速在于降低处理成本,而不在获得一种的高性能算法。本项目侧重于像一个火刑(fire-and-forget)外设处理器那样对一个数据块进行CRC(循环冗余检验)。这种AVR芯核是不可配置的,所以ISA也不能扩展,但是FPGA使设计师能实现像AVR的协处理器或外设那样的硬件加速。Atmel公司的System Designer环境包含FPGA开发工具、AVR工作室工具和协同验证工具,从而能同时进行硬件和软件的开发和调试。
MIPS Technologies公司特许使用32位和64位处理器体系结构和芯核。其Pro Series处理器芯核系列的CorExtend功能,允许设计师增加和集成专有指令,并使硬件与芯核紧密耦合。我们专注于内含CorExtend功能的MIPS32 24Kc Pro处理器芯核。本项目涉及到实现和验证一个对数据块进行计算的UDI(用户定义指令)。为了实现这个UDI,设计师在Verilog RTL中制造一个CorExtend模块并将其与处理器芯核集成在一起。MIPS公司的软件工具包包括软件开发环境和MIPSsim软件仿真器。MIPSsim利用一个API来创建定制的CorExtend扩展库,所以你可以在MIPSsim上增加任何UDI,进行功能仿真和周期精确仿真。
Tensilica公司的可配置、可扩展和可合成的处理器芯核强调配置体系结构的预定义元件和构建新指令和硬件执行部件。该公司的Xtensa Processor Generator可为每一种处理器配置生成一个软件开发环境,其中包括操作系统支持。其Xtensa V处理器芯核是引人关注的对象。(Xtensa LX芯核未及时供货支持本项目。)在Tensilica公司进行的实践活动专注于实现计算指令扩展,其中有一种指令扩展所用的数据比数据流结构在一个周期内能支持的还多。为了创建指令扩展,工程师可以使用TIE(Tensilica Instruction Extension)语言和编译程序。TIE语言是由Verilog语言和C语言混合而成的,用以描述包括多周期和流水线指令在内的定制指令。TIE编译程序生成各种文件,以便定制软件工具链,扩展指令集仿真器及C建模环境,评估用于处理器配置和定制指令的硬件资源。
Xilinx公司提供可编程逻辑器件、先进的集成电路(IC)、知识产权(IP)和软件设计工具。我们在Xilinx公司使用装入Virtex和Spartan FPGA器件的32位MicroBlaze软处理器芯核。Xilinx公司还提供8位PicoBlaze软芯核和PowerPC 405硬芯核。加速工作专注于为MP3实现作为定制逻辑模块或外设的功能。MicroBlaze不支持定制指令扩展,但是,借助一个FSL(快速单工链路)接口或CoreConnect芯片级外设总线,它确实支持用户定义的作为外设或协处理器的硬件加速。FSL接口在MicroBlaze寄存器堆和定制加速逻辑之间提供一个等待时间很短的专用接口。其嵌入式开发工具包和Xilinx Platform Studio为生成MicroBlaze和PowerPC设计提供一个集成环境。
各种选择
有时候,设计师要求一个时间性强的算法的执行速度比软件能处理的速度更快。在这种情况下,他们可以尝试通过以下方法加速算法的性能:重组算法;把更多的数据存储器用于解决问题,例如使用一个查寻表;或者在手工编码的装置中实现算法。设计师可以使用更快的处理器,将问题分配给多个处理引擎,或者使用应用优化的处理器体系结构,例如集成有专用硬件加速器的ASSP(专用标准产品)。设计师甚至可能考虑创建其自己的定制指令或硬件加速器。
为一个算法分配存储器等处理器资源可以提高该算法的速度,但是需要在硬件资源方面进行权衡。使用芯片内而不是芯片外存储也会在性能上产生质的区别。将算法作为手工编码装置来实现,就会使设计师保持使用一个固定的ISA处理器,但却会将他与该处理器紧密地捆绑在一起。使用更快的处理器可能引发功耗增大等负面影响。把设计重新分配给多个处理引擎,例如采用一个微处理器和一个DSP ,就允许设计师使用适合于各组功能的器件,但却会增加复杂度。ASSP可为特定应用实现的外设和硬件加速功能。然而,采用ASSP会使产品标新立异富有挑战性,因为ASSP的目标范围很狭小,会被竞争对手获取。特许使用IP(知识产权)芯核来加速算法可能是行得通的,但是,这些芯核是可以特许使用的,所以也会被竞争对手获得。因此,ASSP不是一种使产品标新立异的部件。
定制硬件加速是一种实现并行处理的越来越可行的方法。而且,就某些并行操作来说,定制硬件加速与软件实现方法相比,能使性能提高一到两个数量级。你可以利用一个连接到标准处理器的独立FPGA实现定制硬件加速。包括Altera公司、Atmel公司、QuickLogic公司、Stretch公司和Xilinx公司在内的几家处理器供应商提供一种在一块芯片上集成有FPGA的处理器。愈来愈多的软件供应商,如AccelChip公司、Altera公司、Celoxica公司、Critical Blue公司、Poseidon Design Systems公司、Stretch公司和Xilinx公司,正在提供使没有受过全面硬件设计培训的设计师易于使用硬件加速的软件工具。将加速功能整合到应用软件中常常要用编译程序固有的特性或在线汇编代码代替源代码。
设计师可以将定制硬件加速作为一个与处理器体系结构紧密联系的定制指令来实现。定制指令是处理器的ALU(算术逻辑部件,图1)的有效扩展。定制指令逻辑与处理器时钟速率有关,并必须提供控制信号,以便在定制逻辑的关键通道过长时停止流水线运行或实现一条定制流水线。如果存在数据相关性,则设计师可能需要使定制指令多周期化或流水线化。如果设计师需要访问的数据超过ALU数据通道容量(通常为两个操作数和一个结果),则他们就无法高效地实现适用于数据密集算法的定制指令,除非处理器体系结构支持局部存储、寄存器和数据访问机制。
另一种实现硬件加速的方法就是通过一个数据接口(例如存储器控制器),将一种与处理器松散联系的定制逻辑模块用作协处理器或外设(图2)。协处理器执行处理器以外的逻辑运算,因此关键的通道定时问题不会直接影响处理器芯核的时钟至时钟操作。然而,这些问题会对你的系统的整个操作产生影响。协处理器还能在无需处理器介入的情况下访问系统中的其它外设或存储器。
过 程
尽管我们工作在一种可能是高度受控的、跟实验室一样的演示环境中,每一个实践活动都有某种程度的故障检修乐趣。在一次实践活动期间,一台工作站死机了,谁也不太温文尔雅。然而,这种故障也确实说明了我们的实践活动是断断续续的。在另一次实践活动中,出现过一次驱动器与工具版本的不匹配,不过这一次的责任在于将设计代码移植到了一个新的工具版本和一个不同的目标上。
常见的故障检修问题是由人工修改代码或配置文件引起的。由于这些实践活动处理的都是“简单的”例子,我们没有执行严格的版本控制。然而,这种做法终被证明是一个错误。构建、执行和简介每一种配置都意味着要使用间接的支持文件,因此,很容易在这里或那里忘掉一次修改。脚本文件终在弄清情况方面发挥了作用。
研究不同体系结构和工具组的时间有限,不允许本项目探究整个EDA工具链。例如,我们没有时间等待物理合成工具完成其操作,所以我们实际上只是讨论那部分过程而已。适合于本项目的通用硬件加速设计流程侧重于确定和创建硬件加速并将其纳入到协同仿真环境中(图3)。
每一次实践活动都从仅仅用软件实现算法开始。仿真工具是任何协同开发工具套件中至关重要的组件;通过使用仿真和简介工具,我们可以确定软件瓶颈。适合于硬件加速的备选操作有:允许多个顺序操作合并,以便由一组输入产生一组输出的操作;允许你对一组独立输入进行并行计算以产生独立输出的操作。
在确定哪种代码要加速并决定是否将加速作为定制指令或协处理器来实现之后,设计师必须创建硬件设计。一些工具(将由本项目第二部分探讨)有助于由源代码直接生成硬件加速或使这一过程自动化。设计师如果手工实现加速模块,就要生成VHDL或Verilog文件。然而,如果他们正在使用Tensilica公司的工具套件,那就要通过TIE组件创建加速指令/模块。
为了使用新的(或修改的)加速逻辑,设计师需要在协同仿真工具中将这种加速逻辑实例化并修改算法软件。使用一个定制指令可能涉及到在原始代码中插入或代入编译程序固有的特性或在线汇编语句。为了访问一个定制协处理器或外设,设计师可能需要增加使用驱动器或API的代码。在重新构建系统之后,设计师要对系统进行协同仿真并对性能和行为进行简介。这个过程要反复进行,有可能对以前实现的加速逻辑进行改进,直到系统设计达到性能指标为止。这一过程中的下一个步骤是使用验证测试程序验证加速逻辑RTL的功能,随后进行门电路一级的定时验证。如果测试表明设计达到了所有的功能要求和设计要求,设计师就可以继续进行剩余的硬件流程。
开发工具正在不断演进之中,从而使可互换的硬件和软件模块可供不具备硬件背景的设计师使用。要使使用性能更佳的硬件实现方法而不使用软件实现方法的决定符合应用需求。如果对软件算法进行简化也符合要求,则设计师就可能不希望发生重复产生硬件成本。例如,如果设计师在其系统中有未使用的存储器,则构建一个查寻表就可防止实现硬件加速器资源的额外成本发生。另一方面,设计师还能利用硬件加速来降低系统总成本,同时,实现一个运行时可重配置系统可能会产生更大的成本效益(参见附文《可重新配置的加速》)。
参考文献
A. Danek, M, P Honzik, J Kadlec, R Matsousek, Z Pohl, “Reconfigurable System-on-a-Programmable-Chip Platform,” Seventh IEEE Workshop on Design and Diagnostics of Electronic Circuits and Systems, April 2004.
-------------------------------------------------------------------------------------------
附文一:性能比较
本次实践项目的早期计划阶段,EDN考虑过比较同一种算法在各种体系结构上的加速差异。但是,由于没有那种应用空间对于每一种体系结构来说是通用的,而且可能很快就会变成一种苹果与桔子的比较,所以我们放弃了这种想法。
接下来我们想到了比较和论述每种系统在其前后的性能参数。不过,尽管这种比较可能有用,却也容易得出不完整和不恰当的结论。例如,在使用Atmel的产品加速CRC(循环冗余校验)算法时,硬件实现的算法执行速度比原来的软件实现快23倍。软件实现是一种循环驱动CRC,而与表驱动CRC来比较加速差异就降低了性能比较的价值。经过更长的时间和更大的努力,我们可以改善硬件实现的性能。类似的情况对于每一种加速工作都存在。
值得注意的是,不要将坏情况的软件实现与情况的硬件实现相比较。在测量硬件性能时,它是一个独立执行部件,而软件性能则是一个更大整体的一部分。例如,存储器构成,或处理器高速缓存的容量大小,或者寄存器文件,都会对一种算法的性能产生影响;因此,一些系统支持对这些类型的体系结构特性的可配置性。 要避免为了补偿在不合适的处理器体系结构上执行的软件而实施硬件加速,这一点非常重要。例如,无论处理器包含MAC(乘法/累加)单元还是具有适宜的数据总线结构,都会对一个信号处理算法的软件性能产生重大影响。我们在Tensilica公司取得的经验可以使大家理解这一点,当时我们实现了一个5操作数加法器,要求的数据比总线结构在一个时钟周期内能够支持的更多。另一个例子是在一个微处理器上实现流式DSP功能,该微处理器包含硬件MAC单元但不能处理流式数据负载。
-----------------------------------------------------------------------------------------
附文二:可重新配置的加速
可重新配置的平台是缩小设计尺寸并降低设计成本的一种方法,而且它允许设计人员在一个嵌入式设计中用软件实现使用硬件加速器的好处。一些系统(包括来自Morpho Technologies公司的一种系统)可以在一个时钟周期内重新配置其逻辑,以便对特定作业进行加速。一些基于FPGA的系统可以支持系统的运行时重配置;不过,其重配置需要多个时钟周期。
Reconf项目 (www.reconf.org) 正在力图证明一个针对动态FPGA重配置的透明基础结构(参考文献A)。这种努力不仅解决了FPGA器件的实际动态再配置性,而且提供了必要的开发工具支持。Atmel公司的AT94K FPSLIC(现场可编程系统级集成电路)就是针对当前项目的示范器件。它支持运行时重配置,这依赖于其重配置部分FPGA而不影响器件其它部分工作的能力。Atmel公司的Figaro设计实现工具本来并不支持部分重配置,因此,为了针对各种必要的协处理器范围,该项目规定了生成比特流的一个特殊的实现规程。
为了访问并使用这些协处理器中的每一个(在本例中为不同的浮点运算),应用软件调用一个CallFPGA函数。由于FPGA太小而无法同时容纳所有运算,FPGA利用一种在该FPGA包含一个重新配置控制器的基础结构在50毫秒之内按需重新配置协处理器。
同样,Stretch公司的ISEF(指令集扩展结构)也支持运行时重新配置,其方法是将该ISEF划分为两个可动态装载的部分。这种设置使得该器件能够在很多时钟周期内对ISEF的一部分进行重新配置,同时该器件的其余部分继续正常工作。
Reconf的示范和Stretch公司的产品说明了一位不熟悉数字电路设计的应用编程人员如何能够在依赖处理器的可编程逻辑结构中利用多种加速运算。