zhongqian 2008-6-5 04:41 PM
开放性32位RISC处理器IP核的比较与分析
[align=center]开放性32位RISC处理器IP核的比较与分析[/align][table=97%][tr][td=1,1,120][日期:2008-03-26][/td][td]来源:论文网 作者:刘军 郭立 郑东飞 白雪飞[/td][td=1,1,100][字体:[color=#0000ff]大[/color] [color=#0000ff]中[/color] [color=#0000ff]小[/color]] [/td][/tr][/table] 比较和分析了LEON2,OpenRISC1200,NiosII 等3 种开放性RISC 处理器IP 核的结构特点, 然后分以三种处理器为核心在[url=http://www.chinaeda.cn/edu/f_gao.html][color=#800080]FPGA[/color][/url] 平台上构建了一个评测系统。 采用Dhrystone 2.1 基准测试程序评测了它们的性能最后在0.18um 的CMOS工艺下进行了综合, 给出了它们在ASIC 平台下面积和频率的比较。
[b] 引言
[/b]
随着VLSI设计技术和深亚微米制造技术的飞速发展, SOC (System on Chip ) 技术逐渐成为了集成电路设计的主流技术。SOC 已经在便携式手持设备、无线网络终端和多媒体娱乐设备等领域得到了广泛的应用。
高性能的处理器核是SOC设计中最为关键和核心的部分。绝大多数SOC 的处理器都采用了RISC体系结构。RISC 处理器具有指令效率高、电路面积小和功率消耗低等特点, 满足了SOC 高性能、低成本和低功耗的设计要求。目前在SOC 设计中广泛使用的32bit RISC 处理器, 如[url=http://www.chinaeda.cn/edu/gaoji.html][color=#800080]ARM[/color][/url] 公司的[url=http://www.chinaeda.cn/edu/gaoji.html][color=#800080]ARM[/color][/url] 处理器, IBM 的PowerPC 处理器,MIPS 公司的MIPS 处理器,Motorola 的MCore 处理器, Tensilica 公司的Xtensa 处理器等均属于商业内核, 使用者必须支付相对昂贵的授权费。
近年来开放源代码运动迅速发展, 开放性源码的概念已经从软件领域(如[url=http://bbs.chinaeda.cn/list.asp?boardid=73][color=#0000ff]Linux[/color][/url], Gcc,MySQL 等)扩展到了硬件领域, 出现了像OpenCores 这样专门发布免费的IP核源代码的组织。本文比较和分析了三种“免费”的开放性32bit 处理器内核: GaislerResearch 公司的LEON2, OpenCores 组织公布的OpenRISC1200 和Altera 公司的NiosII。这三种开放性处理器凭借其高性能、低成本, 良好的可配置性和完善的开发环境, 受到了学术界和工业界的普遍重视。
[b] LEON2 [/b]
LEON 系列32位RISC 处理器核的第一个版本是 EON1, 它是由欧洲航天局(European SpaceAgency) 主持设计开发的。LEON1 的设计初衷是为了使欧洲能够摆脱在航空航天高性能[url=http://www.chinaeda.cn/edu/jiuye_1.html][color=#800080]嵌入式[/color][/url]处理器上对美国的严重依赖。以Jiri Gaisler为首的设计团队在完成LEON1 后从欧洲航天局独立出来, 成立了Gaisler Research 公司, 相继推出了LEON2 和LEON3 处理器。LEON 系列处理器软核均以RTL级VHDL 源代码形式免费公布, 使用者可以在GNULGPL (Library General Public License ) 下对其源代码进行使用和研究。LEON 系列处理器在结构上有很高的一致性和继承性, 我们选用比较稳定的L EON221.0.222xst 版本进行研究分析。其结构框图如图1所示:
[align=center][img]http://image.mcuol.com/News/080325140832340.gif[/img][/align][align=center]图1 LEON2 结构框图[/align] LEON2 的整数处理单元是5 级流水线设计, 采用了SPARCV8 ( IEEE-1754) 指令和体系结构, 具有分离的数据Cache和指令Cache。LEON2 的整数单元包括一个可选的16×16的MAC 单元, 能够完成基本的[url=http://www.chinaeda.cn/edu/dsp.html][color=#800080]dsp[/color][/url]运算, 同时还提供了浮点运算单元(FPU)的接口和协处理器(CP)的接口, 可以扩展浮点运算和[url=http://www.chinaeda.cn/edu/dsp.html][color=#800080]dsp[/color][/url]处理。
LEON2 选用了[url=http://www.chinaeda.cn/edu/gaoji.html][color=#800080]ARM[/color][/url]公司的AMBA2.0 片上总线标准, 用于连接内存控制器(MemoryController ) , 定时器( Timers ) , 中断控制器( IrqCtrl) ,UART 接口, PCI 接口, 10/100M 以太网接口等模块。L EON 2 同时还提供了一个调试支持单元(Debug Support Unit) 和一个调试串口(DebugSerial Link) , 用于支持片内调试。
LEON2 的一个非常重要的特点就是具有很好的可配置性。使用者根据自己的需要, 通过一个用tcltk 脚本编写的图形化界面, 对LEON2 内核的绝大多数模块进行配置, 比如可以配置Cache 的大小和访问方式, 是否支持硬件乘?除法, 是否需要内存管理单元(MMU), PCI 接口, 以太网接口等。
Gaisler Research 公司提供了比较完善的基于L EON 2 的GNU 软件开发环境。使用者可以使用TSIM 或GRMON进行LEON 内核的调试仿真。 ECCS 是专门针对LEON 的交叉编译系统, 可以进行C/C+ + 的编译和调试。SnapGear[url=http://bbs.chinaeda.cn/list.asp?boardid=73][color=#0000ff]Linux[/color][/url] 是基于LC[url=http://bbs.chinaeda.cn/list.asp?boardid=73][color=#0000ff]Linux[/color][/url] 的实时[url=http://bbs.chinaeda.cn/list.asp?boardid=73][color=#0000ff]Linux[/color][/url] 内核, 它的LEON 版提供了对LEON 处理器的全面支持, 可以支持MMU和NOMMU等不同配置方案。
[b] OpenRISC1200 [/b]
OpenRISC1000系列处理器是开放IP 核源代码组织Opencores 公布的32*64位处理器软核。使用者可以在GNULGPL 下免费使用其RTL 级的Verilog源代码。OpenRISC1000 系列处理器有很多版本, 我们选用了目前最新的OpenRISC1200 进行研究分析, 其结构如图2所示:
[align=center][img]http://image.mcuol.com/News/080325140833111.gif[/img][/align][align=center]图2 OpenRISC1200 结构框图[/align] OpenRISC1200 采用了自主设计的OpenRISC1000 体系结构和自定义的ORBIS32 指令集。OpenRISC1200 是Harvard 结构设计, 拥有一个5 级流水线的整数单元。OpenRISC1200 有一个32×32 的MAC 单元, 具备基本的[url=http://www.chinaeda.cn/edu/dsp.html][color=#800080]dsp[/color][/url]处理功能。
OpenRISC1200 还可以根据需要自定义用户指令。OpenRISC1200 具有1K~64K 可配置大小的数据Cache 和指令Cache 以及可供选择的内存管理单元。OpenRISC1200 同时还提供了一个用于降低功耗的电源管理单元(PowerManager) 和一个支持片内调试的调试单元(Debug Unit)。OpenRISC1200 采用了Silicore 公司提出的W ISHBON E 开放性总线标准, 包括一个数据W ISHBON E 接口和一个指令W ISHBON E 接口。总线管理模块(Traffic Cop ) 将内存控制器, 调试单元,UART 接口, PCI 接口, Ethernet 接口等模块连接在一起。OpenRISC1200 具有较好的可配置性, 使用者可以根据自己的需要配置Cache 的大小, 是否使用MMU , 并可以定制自定义的指令。不过目前OpenRISC1200 还没有图形化的配置界面, 使用者必须根据需要修改配置定义文件or1200 defines.v。
OpenRISC1200 有完善的软件开发环境(SDK)和操作系统的支持。使用者可以通过包括Sourcenavigator, Gcc, Binu tills, Gdb 等在内的GNUToolchian 工具方便的进行基于OpenRISC1200 内核的编码、编译和调试。
同时,OpenRISC1200 拥有专门的仿真器Or1k sim , 可以进行OpenRISC1200 的仿真。OpenRISC1200 还支持[url=http://bbs.chinaeda.cn/list.asp?boardid=73][color=#0000ff]Linux[/color][/url], LC[url=http://bbs.chinaeda.cn/list.asp?boardid=73][color=#0000ff]Linux[/color][/url],RTEMS, RedHaeCos 等多种操作系统。
[b]NiosII
[/b]
Nios 系列处理器是Altera 公司推出的基于RISC 体系结构的通用[url=http://www.chinaeda.cn/edu/jiuye_1.html][color=#800080]嵌入式[/color][/url]处理器软核, 它是Altera 的可编程逻辑和可编程片上系统(SoPC) 设计综合解决方案的核心部分。Altera 前后推出了两代Nios 系列处理器:Nios 和Nios II。Nios 是其第一代产品, 是准32bit 的RISC 处理器, 具有16bit 指令集和16*32 bit 数据通路。NiosII是第二代完全32bitRISC 处理器, 具有32bit 的指令集、数据通路和地址空间。我们选用了NiosII 进行比较和分析。图3是典型的基于NiosII的系统。
[align=center][img]http://image.mcuol.com/News/080325140833542.gif[/img][/align][align=center] 图3 典型的基于NiosII的系统[/align] NiosII处理器是5级流水线设计, 采用数据和指令分离的Harvard 结构。NiosII 拥有自己专用的体系结构与指令集, 支持32bit 的硬件乘除法指令,有32 个通用寄存器。用户还可以根据自己的需要自定义最多256 条指令。
NiosII 采用了Altera 公司自己的Avalon 片内总线标准, 用于连接定时器, UART 接口, LCD 接口, 内存控制器和以太网接口等片内模块。NiosII 同时还提供了一个Debug 模块, 支持JTAG 在线调试。Altera 公司为NiosII 提供了极为完善的软硬件开发环境。NiosII 处理器方案是基于HDL 源码构建的,提供了三种性能和资源消耗不同的基本软核:NiosII/f (快速型) , NiosII/s (标准型) 和NiosII/e( 经济型)。通过QuartusII 开发软件中的SOPCBuilder 系统开发工具, 使用者可以在任何一种软核的基础上方便的配置符合自己的需要NiosII 内核。
Altera 公司同时为NiosII 提供了基于GNUC/C++toolchain和EclipseIDE 的软件开发环境。用户可以在这个开发环境下方便的完成编码、仿真和调试等工作。NiosII 的开发套件内免费提供了一个Luc/OS2II 的实时操作系统支持, 同时NiosII 还支持LC[url=http://bbs.chinaeda.cn/list.asp?boardid=73][color=#0000ff]Linux[/color][/url],Nucleus Plus, KROS 等第三方操作系统。和上面所提到的LEON2 和OpenRISC1200 两种完全开放的处理器内核不同,NiosII 内核属于“半开放”的内核。用户可以免费获得NiosII 的开发平台, 不过NiosII 只支持Altera 的Stratix 和Cyclone器件。用户只能在Altera 的[url=http://www.chinaeda.cn/edu/f_gao.html][color=#800080]FPGA[/color][/url] 芯片上免费使用NiosII, 而且无法获得NiosII 的HDL 源代码。另外设计者若要在ASIC 设计中使用NiosII 内核, 则需要向Altera 公司支付一定的授权费用。
[b] 性能评测与比较
[/b]
相同处理器内核在不同工艺、不同结构配置下性能会有较大的差别。为保证评测的客观性, 我们在相同工艺, 相同结构配置下对三种处理器内核分别在[url=http://www.chinaeda.cn/edu/f_gao.html][color=#800080]FPGA[/color][/url] 和ASIC 两个平台上, 从性能和面积两个角度进行了比较和分析。
目前[url=http://www.chinaeda.cn/edu/jiuye_1.html][color=#800080]嵌入式[/color][/url]处理器并没有统一的性能测试标准, 我们选择了当前各个[url=http://www.chinaeda.cn/edu/jiuye_1.html][color=#800080]嵌入式[/color][/url]处理器提供厂商广泛采用的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) 作为[url=http://www.chinaeda.cn/edu/f_gao.html][color=#800080]FPGA[/color][/url] 的硬件测试平台, 分别评测LEON2,OpenRISC1200 和NiosII 在[url=http://www.chinaeda.cn/edu/f_gao.html][color=#800080]FPGA[/color][/url]上的性能。为保证评测结果的准确性, 我们将三种处理器配置成为大体相当的评测系统, 如图4 所示。编译好的Dh rystone 程序将被下载到板上的SRAM 中运行, 运行的结果通UART 或JTAG 端口输出到PC终端。定时器(Timer) 是Dhrystone 程序运行所需的计时设备。由于体系结构的差异, 各个处理器在有些部分的实现细节并不完全和图4 相同(比如L EON 2使用了两个UART , 分别用于调试和输出, 而OpenRISC1200 和NiosII 则选择使用一个JTAG 接口进行调试) , 但其大体结构都是相同的。同时我们还在三种处理器核内均实现了32×32bit 的硬件乘除法指令。
[align=center][img]http://image.mcuol.com/News/080325140833703.gif[/img][/align][align=center]图4 [url=http://www.chinaeda.cn/edu/f_gao.html][color=#800080]FPGA[/color][/url] 平台评测系统[/align] 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 的[url=http://www.chinaeda.cn/edu/f_gao.html][color=#800080]FPGA[/color][/url] 中,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 的[url=http://www.chinaeda.cn/edu/f_gao.html][color=#800080]FPGA[/color][/url] 中, 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下, 测得[url=http://www.chinaeda.cn/edu/f_gao.html][color=#800080]FPGA[/color][/url] 中的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 的[url=http://www.chinaeda.cn/edu/f_gao.html][color=#800080]FPGA[/color][/url] 器件是免费的, 因此我们仅对比了LEON2和OpenRISC1200 两种完全开放性内核。我们使用中芯国际( SMIC ) 的Rapid Compiler 完成Registerfile 中所需的双口SRAM 和Cache 模块所需的单口SRAM 的设计, 并使用Synopsys 公司Design Compiler 和SMIC 的0.18 Lm 的标准单元库完成了两种内核RTL 代码的综合和优化。相当占用了152904 个门单元, 最差条件下的最高频率为160MHz。OpenRISC1200 共使用了148455 个门单元, 最差条件下的最高频率为125MHz。显然LEON2 的运行频率更高, 但其所占的面积也相对更大。
[align=center][img]http://image.mcuol.com/News/080325140833874.gif[/img][/align] 图5 四种处理器性能对比图
[b] 结论 [/b]
本文从结构和性能两个方面比较了LEON2,OpenRISC1200 和NiosII三种32位RISC处理器内核, 概括如表1所示。
[align=center][img]http://image.mcuol.com/News/080325140834045.gif[/img][/align] 通过以上比较和分析可以看出, LEON2 和OpenRISC1200 主要是面向ASIC 设计, 它们具有开放的源代码以及相关ASIC 平台开发的支持。其中由于LEON2 处理器得到了欧洲航天局的资助, 其开发文档和技术支持也相对更为完善。虽然NiosII在Altera 的器件上具有良好的性能并且Altera 公司提供了完善的文档和技术支持, 但是由于NiosII 只能应用于Altera 的器件, 所以其使用范围受到了一定的限制。