DhrystoneV2.1Benchmark 是由C语言编写, 包括各种赋值语句, 控制语句, 过程调用和参数传送, 整数运算及逻辑操作等。在不同的处理器平台上运行Dhrystone 测试程序, 得到Dhrystoneper Second 的参数值, 并以VAX-11/780 为参照值, 换算出Dhrystone 2.1VAXMIPS (DMIPS) 的值。因为VAX-11/780 的测试结果为1757 个Dhrystoneper Second, 将其作为参照, 得出DMIPS = (Dhrystoneper Second/1757。因为处理器的性能与工作频率密切相关, 在不同工作频率下测算出的DMIPS 是不同的, 所以通常使用DMIPS/MHz 作为标准, 评估各个处理器的结构优劣和性能高低。
我们选用Altera 的Cyclone 开发板(EP1C20F400C7) 作为FPGA 的硬件测试平台, 分别评测LEON2,OpenRISC1200 和NiosII 在FPGA上的性能。为保证评测结果的准确性, 我们将三种处理器配置成为大体相当的评测系统, 如图4 所示。编译好的Dh rystone 程序将被 下载 到板上的SRAM 中运行, 运行的结果通UART 或JTAG 端口输出到PC终端。定时器(Timer) 是Dhrystone 程序运行所需的计时设备。
由于体系结构的差异, 各个处理器在有些部分的实现细节并不完全和图4 相同(比如L EON 2使用了两个UART , 分别用于调试和输出, 而OpenRISC1200 和NiosII 则选择使用一个JTAG 接口进行调试) , 但其大体结构都是相同的。同时我们还在三种处理器核内均实现了32×32bit 的硬件乘除法指令。
图4 FPGA 平台评测系统
LEON2 的源代码中提供了在各种器件如Xilinx,A ctel 等上的综合支持。不过LEON2 没有提供对ALTEra 器件和相应开发板的支持, 因此必须要首先编写添加tech_ cyclone. vhd 文件, 并修改源代码中target.vhd 和tech_map.vhd 文件。然后使用QuartusII 进行综合的结果显示: LEON2 使用了11702 个逻辑单元(LogIC Elements) 和242748 内存位(Memory Bits) , 其最高频率可达61.95MHz。在25MHz 和50MHz 的FPGA 中,LEON2 可以分别达到35398.2 和72289.2 Dhrystoneper Second。即在25 MHz 下LEON2 可达到20.15DMIPS, 在50MHz下为41.14DMIPS, 相当于0.82 DMIPS/MHz。
OpenRISC1200 的源代码中提供了对Altera 器件的支持, 因此只需修改其代码, 配置成所需要的系统构架。由于OpenRISC1200 采用的是WISHBONE片上总线, 所以还要专门给板上的SRAM写一个W ISHBONE 的接口。QuartusII 的综合结果显示OpenRISC1200 共使用了9624 个逻辑单元和217344内存位, 其最高频率可达46. 02MHz。在25MHz 的FPGA 中, OpenRISC1200 可达到32918.2Dhrystoneper Second, 即18.74DMIPS。其性能相当于0.75 DMIPS/MHz。Nios是Altera 公司专门针对Cyclone 和Stratix 器件设计的处理器。Quartus中的SOPC Builder 系统开发工具, 可以方便的配置出符合要求的NiosII 处理器。
Quartus 的综合结果显示Nios 共消耗了6615 个逻辑单元和181248 内存位, 最高频率为65.78MHz。在50MHz下, 测得FPGA 中的NiosII 为69915.8 Dhrystoneper Second, 相当39.79DMIPS, 其性能为0.80DMIPS/MHz。为了进行纵向的对比, 我们还评测Nios 的性能。Nios 共需4535 个逻辑单元和231424个内存位, 最高频率为61.65MHz。在50MHz 下Nios 可以达到18.88 DMIPS, 其性能为0.37DMIPS/MHz。显然NiosII比Nios在性能上有了很大的提高。
图5 给出了几种处理器的性能对比图。显然三种32 位处理器的性能比指令集为16 位的准32 位Nios 处理器高出很多。在三种32 位处理器中,LEON2 的性能最好为0.82, 但其相应的所耗的资源也最多。和LEON2 相比,OpenRISC1200 的性能稍差为0.75, 但其所占用的逻辑单元也较少。N io s处理器的测试性能可达0.80, 而且其所消耗的逻辑单元仅为LEON2 的57%。这是由于Nios 针对Cyclone 器件进行过专门的优化, 导致了Nios 在Cyclone 器件上的出色表现。为了使比较更加全面和深入, 我们还对评测系统进行了ASIC 平台上的对比。由于NiosII 并不提供源代码, 仅针对Altera 的FPGA 器件是免费的, 因此我们仅对比了LEON2和OpenRISC1200 两种完全开放性内核。我们使用中芯国际( SMIC ) 的Rapid Compiler 完成Registerfile 中所需的双口SRAM 和Cache 模块所需的单口SRAM 的设计, 并使用Synopsys 公司Design Compiler 和SMIC 的0.18 Lm 的标准单元库完成了两种内核RTL 代码的综合和优化。相当占用了152904 个门单元, 最差条件下的最高频率为160MHz。OpenRISC1200 共使用了148455 个门单元, 最差条件下的最高频率为125MHz。显然LEON2 的运行频率更高, 但其所占的面积也相对更大。
图5 四种处理器性能对比图
结论
本文从结构和性能两个方面比较了LEON2,OpenRISC1200 和NiosII三种32位RISC处理器内核, 概括如表1所示。
通过以上比较和分析可以看出, LEON2 和OpenRISC1200 主要是面向ASIC 设计,
它们具有开放的源代码以及相关ASIC 平台开发的支持。其中由于LEON2 处理器得到了欧洲航天局的资助, 其开发文档和技术支持也相对更为完善。虽然NiosII在ALTEra 的器件上具有良好的性能并且Altera 公司提供了完善的文档和技术支持, 但是由于NiosII 只能应用于Altera 的器件, 所以其使用范围受到了一定的限制。