性能评测与比较
相同处理器内核在不同工艺、不同结构配置下性能会有较大的差别。为保证评测的客观性, 我们在相同工艺, 相同结构配置下对三种处理器内核分别在FPGA 和ASIC 两个平台上, 从性能和面积两个角度进行了比较和分析。
目前嵌入式处理器并没有统一的性能测试标准, 我们选择了当前各个嵌入式处理器提供厂商广泛采用的DhrystoneV2.1 Benchmark评测标准。DhrystoneV2.1Benchmark 是Reinhold Weicker编写的用于测试系统的整数处理能力的测试程序,它有公开的源代码和测试结果。
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在性能上有了很大的提高。