開(kāi)放性32位RISC處理器IP核的比較與分析
引言
本文引用地址:http://www.ex-cimer.com/article/81134.htm隨著VLSI設(shè)計(jì)技術(shù)和深亞微米制造技術(shù)的飛速發(fā)展, SOC (System on Chip ) 技術(shù)逐漸成為了集成電路設(shè)計(jì)的主流技術(shù)。SOC 已經(jīng)在便攜式手持設(shè)備、無(wú)線網(wǎng)絡(luò)終端和多媒體娛樂(lè)設(shè)備等領(lǐng)域得到了廣泛的應(yīng)用。
高性能的處理器核是SOC設(shè)計(jì)中最為關(guān)鍵和核心的部分。絕大多數(shù)SOC 的處理器都采用了RISC體系結(jié)構(gòu)。RISC 處理器具有指令效率高、電路面積小和功率消耗低等特點(diǎn), 滿足了SOC 高性能、低成本和低功耗的設(shè)計(jì)要求。目前在SOC 設(shè)計(jì)中廣泛使用的32bit RISC 處理器, 如ARM 公司的ARM 處理器, IBM 的PowerPC 處理器,MIPS 公司的MIPS 處理器,Motorola 的MCore 處理器, Tensilica 公司的Xtensa 處理器等均屬于商業(yè)內(nèi)核, 使用者必須支付相對(duì)昂貴的授權(quán)費(fèi)。
近年來(lái)開(kāi)放源代碼運(yùn)動(dòng)迅速發(fā)展, 開(kāi)放性源碼的概念已經(jīng)從軟件領(lǐng)域(如Linux, Gcc,MySQL 等)擴(kuò)展到了硬件領(lǐng)域,出現(xiàn)了像OpenCores 這樣專門發(fā)布免費(fèi)的IP核源代碼的組織。本文比較和分析了三種“免費(fèi)”的開(kāi)放性32bit 處理器內(nèi)核: GaislerResearch 公司的LEON2, OpenCores 組織公布的OpenRISC1200 和Altera 公司的NiosII。這三種開(kāi)放性處理器憑借其高性能、低成本, 良好的可配置性和完善的開(kāi)發(fā)環(huán)境, 受到了學(xué)術(shù)界和工業(yè)界的普遍重視。
LEON2
LEON 系列32位RISC 處理器核的第一個(gè)版本是 EON1, 它是由歐洲航天局(European SpaceAgency) 主持設(shè)計(jì)開(kāi)發(fā)的。LEON1 的設(shè)計(jì)初衷是為了使歐洲能夠擺脫在航空航天高性能嵌入式處理器上對(duì)美國(guó)的嚴(yán)重依賴。以Jiri Gaisler為首的設(shè)計(jì)團(tuán)隊(duì)在完成LEON1 后從歐洲航天局獨(dú)立出來(lái), 成立了Gaisler Research 公司, 相繼推出了LEON2 和LEON3 處理器。LEON 系列處理器軟核均以RTL級(jí)VHDL 源代碼形式免費(fèi)公布, 使用者可以在GNULGPL (Library General Public License ) 下對(duì)其源代碼進(jìn)行使用和研究。LEON 系列處理器在結(jié)構(gòu)上有很高的一致性和繼承性,我們選用比較穩(wěn)定的L EON221.0.222xst 版本進(jìn)行研究分析。其結(jié)構(gòu)框圖如圖1所示:
![LEON2 結(jié)構(gòu)框圖](http://21ic.com/news/upload/2008_04/080402100117671.jpg)
圖1 LEON2 結(jié)構(gòu)框圖
LEON2 的整數(shù)處理單元是5 級(jí)流水線設(shè)計(jì), 采用了SPARCV8 ( IEEE-1754) 指令和體系結(jié)構(gòu), 具有分離的數(shù)據(jù)Cache和指令Cache。LEON2 的整數(shù)單元包括一個(gè)可選的16×16的MAC 單元, 能夠完成基本的DSP運(yùn)算, 同時(shí)還提供了浮點(diǎn)運(yùn)算單元(FPU)的接口和協(xié)處理器(CP)的接口, 可以擴(kuò)展浮點(diǎn)運(yùn)算和DSP處理。
LEON2 選用了ARM公司的AMBA2.0 片上總線標(biāo)準(zhǔn), 用于連接內(nèi)存控制器(MemoryController ) , 定時(shí)器( Timers ) , 中斷控制器( IrqCtrl) ,UART 接口, PCI 接口, 10/100M 以太網(wǎng)接口等模塊。L EON 2 同時(shí)還提供了一個(gè)調(diào)試支持單元(Debug Support Unit) 和一個(gè)調(diào)試串口(DebugSerial Link) ,用于支持片內(nèi)調(diào)試。
LEON2 的一個(gè)非常重要的特點(diǎn)就是具有很好的可配置性。使用者根據(jù)自己的需要, 通過(guò)一個(gè)用tcltk 腳本編寫的圖形化界面, 對(duì)LEON2 內(nèi)核的絕大多數(shù)模塊進(jìn)行配置, 比如可以配置Cache 的大小和訪問(wèn)方式, 是否支持硬件乘?除法,是否需要內(nèi)存管理單元(MMU), PCI 接口, 以太網(wǎng)接口等。
Gaisler Research 公司提供了比較完善的基于L EON 2 的GNU 軟件開(kāi)發(fā)環(huán)境。使用者可以使用TSIM 或GRMON進(jìn)行LEON 內(nèi)核的調(diào)試仿真。 ECCS 是專門針對(duì)LEON 的交叉編譯系統(tǒng), 可以進(jìn)行C/C+ + 的編譯和調(diào)試。SnapGearLinux 是基于LClinux 的實(shí)時(shí)Linux 內(nèi)核, 它的LEON 版提供了對(duì)LEON 處理器的全面支持, 可以支持MMU和NOMMU等不同配置方案。
OpenRISC1200
OpenRISC1000系列處理器是開(kāi)放IP 核源代碼組織Opencores 公布的32*64位處理器軟核。使用者可以在GNULGPL 下免費(fèi)使用其RTL 級(jí)的Verilog源代碼。OpenRISC1000 系列處理器有很多版本, 我們選用了目前最新的OpenRISC1200 進(jìn)行研究分析, 其結(jié)構(gòu)如圖2所示:
![OpenRISC1200 結(jié)構(gòu)框圖](http://21ic.com/news/upload/2008_04/080402100117672.jpg)
圖2 OpenRISC1200 結(jié)構(gòu)框圖
Op enRISC1200 采用了自主設(shè)計(jì)的OpenRISC1000 體系結(jié)構(gòu)和自定義的ORBIS32 指令集。OpenRISC1200 是Harvard 結(jié)構(gòu)設(shè)計(jì), 擁有一個(gè)5 級(jí)流水線的整數(shù)單元。OpenRISC1200 有一個(gè)32×32 的MAC 單元, 具備基本的DSP處理功能。
OpenRISC1200 還可以根據(jù)需要自定義用戶指令。OpenRISC1200 具有1K~64K 可配置大小的數(shù)據(jù)Cache 和指令Cache 以及可供選擇的內(nèi)存管理單元。OpenRISC1200 同時(shí)還提供了一個(gè)用于降低功耗的電源管理單元(PowerManager) 和一個(gè)支持片內(nèi)調(diào)試的調(diào)試單元(Debug Unit)。OpenRISC1200 采用了Silicore 公司提出的W ISHBON E 開(kāi)放性總線標(biāo)準(zhǔn), 包括一個(gè)數(shù)據(jù)W ISHBON E 接口和一個(gè)指令W ISHBON E 接口。總線管理模塊(Traffic Cop ) 將內(nèi)存控制器, 調(diào)試單元,UART 接口, PCI 接口, Ethernet 接口等模塊連接在一起。OpenRISC1200 具有較好的可配置性, 使用者可以根據(jù)自己的需要配置Cache 的大小, 是否使用MMU ,并可以定制自定義的指令。不過(guò)目前OpenRISC1200 還沒(méi)有圖形化的配置界面, 使用者必須根據(jù)需要修改配置定義文件or1200 defines.v。
OpenRISC1200 有完善的軟件開(kāi)發(fā)環(huán)境(SDK)和操作系統(tǒng)的支持。使用者可以通過(guò)包括Sourcenavigator, Gcc, Binu tills, Gdb 等在內(nèi)的GNUToolchian 工具方便的進(jìn)行基于OpenRISC1200 內(nèi)核的編碼、編譯和調(diào)試。同時(shí),OpenRISC1200 擁有專門的仿真器Or1k sim , 可以進(jìn)行OpenRISC1200 的仿真。OpenRISC1200 還支持Linux, LClinux,RTEMS, RedHaeCos 等多種操作系統(tǒng)。
NiosII
Nios 系列處理器是Altera 公司推出的基于RISC 體系結(jié)構(gòu)的通用嵌入式處理器軟核, 它是Altera 的可編程邏輯和可編程片上系統(tǒng)(SoPC) 設(shè)計(jì)綜合解決方案的核心部分。Altera 前后推出了兩代Nios 系列處理器:Nios 和Nios II。Nios 是其第一代產(chǎn)品, 是準(zhǔn)32bit 的RISC 處理器, 具有16bit 指令集和16*32 bit 數(shù)據(jù)通路。NiosII是第二代完全32bitRISC 處理器, 具有32bit 的指令集、數(shù)據(jù)通路和地址空間。我們選用了NiosII 進(jìn)行比較和分析。圖3是典型的基于NiosII的系統(tǒng)。
![典型的基于NiosII的系統(tǒng)](http://21ic.com/news/upload/2008_04/080402100117673.jpg)
圖3 典型的基于NiosII的系統(tǒng)
NiosII處理器是5級(jí)流水線設(shè)計(jì), 采用數(shù)據(jù)和指令分離的Harvard 結(jié)構(gòu)。NiosII 擁有自己專用的體系結(jié)構(gòu)與指令集, 支持32bit 的硬件乘除法指令,有32 個(gè)通用寄存器。用戶還可以根據(jù)自己的需要自定義最多256 條指令。
NiosII 采用了Altera 公司自己的Avalon 片內(nèi)總線標(biāo)準(zhǔn), 用于連接定時(shí)器, UART 接口, LCD 接口,內(nèi)存控制器和以太網(wǎng)接口等片內(nèi)模塊。NiosII 同時(shí)還提供了一個(gè)Debug 模塊, 支持JTAG 在線調(diào)試。Altera 公司為NiosII 提供了極為完善的軟硬件開(kāi)發(fā)環(huán)境。NiosII 處理器方案是基于HDL 源碼構(gòu)建的,提供了三種性能和資源消耗不同的基本軟核:NiosII/f (快速型) , NiosII/s (標(biāo)準(zhǔn)型) 和NiosII/e( 經(jīng)濟(jì)型)。通過(guò)QuartusII 開(kāi)發(fā)軟件中的SOPCBuilder 系統(tǒng)開(kāi)發(fā)工具, 使用者可以在任何一種軟核的基礎(chǔ)上方便的配置符合自己的需要NiosII 內(nèi)核。
Altera 公司同時(shí)為NiosII 提供了基于GNUC/C++toolchain和EclipseIDE 的軟件開(kāi)發(fā)環(huán)境。用戶可以在這個(gè)開(kāi)發(fā)環(huán)境下方便的完成編碼、仿真和調(diào)試等工作。NiosII 的開(kāi)發(fā)套件內(nèi)免費(fèi)提供了一個(gè)Luc/OS2II 的實(shí)時(shí)操作系統(tǒng)支持, 同時(shí)NiosII 還支持LClinux,Nucleus Plus, KROS 等第三方操作系統(tǒng)。和上面所提到的LEON2 和OpenRISC1200 兩種完全開(kāi)放的處理器內(nèi)核不同,NiosII 內(nèi)核屬于“半開(kāi)放”的內(nèi)核。用戶可以免費(fèi)獲得NiosII 的開(kāi)發(fā)平臺(tái),不過(guò)NiosII 只支持Altera 的Stratix 和Cyclone器件。用戶只能在Altera 的FPGA 芯片上免費(fèi)使用NiosII,而且無(wú)法獲得NiosII 的HDL 源代碼。另外設(shè)計(jì)者若要在ASIC 設(shè)計(jì)中使用NiosII 內(nèi)核, 則需要向Altera 公司支付一定的授權(quán) 費(fèi)用。
性能評(píng)測(cè)與比較
相同處理器內(nèi)核在不同工藝、不同結(jié)構(gòu)配置下性能會(huì)有較大的差別。為保證評(píng)測(cè)的客觀性, 我們?cè)谙嗤に嚕?相同結(jié)構(gòu)配置下對(duì)三種處理器內(nèi)核分別在FPGA 和ASIC 兩個(gè)平臺(tái)上, 從性能和面積兩個(gè)角度進(jìn)行了比較和分析。
目前嵌入式處理器并沒(méi)有統(tǒng)一的性能測(cè)試標(biāo)準(zhǔn), 我們選擇了當(dāng)前各個(gè)嵌入式處理器提供廠商廣泛采用的DhrystoneV2.1 Benchmark評(píng)測(cè)標(biāo)準(zhǔn)。DhrystoneV2.1Benchmark 是Reinhold Weicker編寫的用于測(cè)試系統(tǒng)的整數(shù)處理能力的測(cè)試程序,它有公開(kāi)的源代碼和測(cè)試結(jié)果。
DhrystoneV2.1Benchmark 是由C語(yǔ)言編寫, 包括各種賦值語(yǔ)句, 控制語(yǔ)句, 過(guò)程調(diào)用和參數(shù)傳送, 整數(shù)運(yùn)算及邏輯操作等。在不同的處理器平臺(tái)上運(yùn)行Dhrystone 測(cè)試程序, 得到Dhrystoneper Second 的參數(shù)值, 并以VAX-11/780 為參照值, 換算出Dhrystone 2.1VAXMIPS (DMIPS) 的值。因?yàn)閂AX-11/780 的測(cè)試結(jié)果為1757 個(gè)Dhrystoneper Second,將其作為參照, 得出DMIPS = (Dhrystoneper Second/1757。因?yàn)樘幚砥鞯男阅芘c工作頻率密切相關(guān),在不同工作頻率下測(cè)算出的DMIPS 是不同的, 所以通常使用DMIPS/MHz 作為標(biāo)準(zhǔn), 評(píng)估各個(gè)處理器的結(jié)構(gòu)優(yōu)劣和性能高低。
我們選用Altera 的Cyclone 開(kāi)發(fā)板(EP1C20F400C7) 作為FPGA 的硬件測(cè)試平臺(tái),分別評(píng)測(cè)LEON2,OpenRISC1200 和NiosII 在FPGA上的性能。為保證評(píng)測(cè)結(jié)果的準(zhǔn)確性,我們將三種處理器配置成為大體相當(dāng)?shù)脑u(píng)測(cè)系統(tǒng), 如圖4 所示。編譯好的Dh rystone 程序?qū)⒈幌螺d到板上的SRAM 中運(yùn)行,運(yùn)行的結(jié)果通UART 或JTAG 端口輸出到PC終端。定時(shí)器(Timer) 是Dhrystone 程序運(yùn)行所需的計(jì)時(shí)設(shè)備。由于體系結(jié)構(gòu)的差異,各個(gè)處理器在有些部分的實(shí)現(xiàn)細(xì)節(jié)并不完全和圖4 相同(比如L EON 2使用了兩個(gè)UART , 分別用于調(diào)試和輸出, 而OpenRISC1200 和NiosII 則選擇使用一個(gè)JTAG 接口進(jìn)行調(diào)試) , 但其大體結(jié)構(gòu)都是相同的。同時(shí)我們還在三種處理器核內(nèi)均實(shí)現(xiàn)了32×32bit 的硬件乘除法指令。
![FPGA 平臺(tái)評(píng)測(cè)系統(tǒng)](http://21ic.com/news/upload/2008_04/080402100117674.jpg)
圖4 FPGA 平臺(tái)評(píng)測(cè)系統(tǒng)
LEON2 的源代碼中提供了在各種器件如Xilinx,A ctel 等上的綜合支持。不過(guò)LEON2 沒(méi)有提供對(duì)Altera 器件和相應(yīng)開(kāi)發(fā)板的支持, 因此必須要首先編寫添加tech_ cyclone. vhd 文件,并修改源代碼中target.vhd 和tech_map.vhd 文件。然后使用QuartusII 進(jìn)行綜合的結(jié)果顯示: LEON2 使用了11702 個(gè)邏輯單元(Logic Elements) 和242748 內(nèi)存位(Memory Bits) ,其最高頻率可達(dá)61.95MHz。在25MHz 和50MHz 的FPGA 中,LEON2 可以分別達(dá)到35398.2 和72289.2 Dhrystoneper Second。即在25 MHz 下LEON2 可達(dá)到20.15DMIPS, 在50MHz下為41.14DMIPS,相當(dāng)于0.82 DMIPS/MHz。
OpenRISC1200 的源代碼中提供了對(duì)Altera 器件的支持,因此只需修改其代碼, 配置成所需要的系統(tǒng)構(gòu)架。由于OpenRISC1200 采用的是WISHBONE片上總線,所以還要專門給板上的SRAM寫一個(gè)W ISHBONE 的接口。QuartusII 的綜合結(jié)果顯示OpenRISC1200 共使用了9624 個(gè)邏輯單元和217344內(nèi)存位, 其最高頻率可達(dá)46. 02MHz。在25MHz 的FPGA 中, OpenRISC1200 可達(dá)到32918.2Dhrystoneper Second, 即18.74DMIPS。其性能相當(dāng)于0.75 DMIPS/MHz。Nios是Altera 公司專門針對(duì)Cyclone 和Stratix 器件設(shè)計(jì)的處理器。Quartus中的SOPC Builder 系統(tǒng)開(kāi)發(fā)工具, 可以方便的配置出符合要求的NiosII 處理器。Quartus 的綜合結(jié)果顯示Nios 共消耗了6615 個(gè)邏輯單元和181248 內(nèi)存位, 最高頻率為65.78MHz。在50MHz下, 測(cè)得FPGA 中的NiosII 為69915.8 Dhrystoneper Second, 相當(dāng)39.79DMIPS, 其性能為0.80DMIPS/MHz。為了進(jìn)行縱向的對(duì)比,我們還評(píng) 測(cè)Nios 的性能。Nios 共需4535 個(gè)邏輯單元和231424個(gè)內(nèi)存位, 最高頻率為61.65MHz。在50MHz 下Nios 可以達(dá)到18.88 DMIPS, 其性能為0.37DMIPS/MHz。顯然NiosII比Nios在性能上有了很大的提高。
圖5 給出了幾種處理器的性能對(duì)比圖。顯然三種32 位處理器的性能比指令集為16 位的準(zhǔn)32 位Nios 處理器高出很多。在三種32 位處理器中,LEON2 的性能最好為0.82, 但其相應(yīng)的所耗的資源也最多。和LEON2 相比,OpenRISC1200 的性能稍差為0.75, 但其所占用的邏輯單元也較少。N io s處理器的測(cè)試性能可達(dá)0.80, 而且其所消耗的邏輯單元僅為L(zhǎng)EON2 的57%。這是由于Nios 針對(duì)Cyclone 器件進(jìn)行過(guò)專門的優(yōu)化, 導(dǎo)致了Nios 在Cyclone 器件上的出色表現(xiàn)。為了使比較更加全面和深入, 我們還對(duì)評(píng)測(cè)系統(tǒng)進(jìn)行了ASIC 平臺(tái)上的對(duì)比。由于NiosII 并不提供源代碼,僅針對(duì)Altera 的FPGA 器件是免費(fèi)的, 因此我們僅對(duì)比了LEON2和OpenRISC1200 兩種完全開(kāi)放性內(nèi)核。我們使用中芯國(guó)際( SMIC ) 的Rapid Compiler 完成Registerfile 中所需的雙口SRAM 和Cache 模塊所需的單口SRAM 的設(shè)計(jì), 并使用Synopsys 公司Design Compiler 和SMIC 的0.18 Lm 的標(biāo)準(zhǔn)單元庫(kù)完成了兩種內(nèi)核RTL 代碼的綜合和優(yōu)化。相當(dāng)占用了152904 個(gè)門單元, 最差條件下的最高頻率為160MHz。OpenRISC1200 共使用了148455 個(gè)門單元, 最差條件下的最高頻率為125MHz。顯然LEON2 的運(yùn)行頻率更高, 但其所占的面積也相對(duì)更大。
![四種處理器性能對(duì)比圖](http://21ic.com/news/upload/2008_04/080402100117675.jpg)
圖5 四種處理器性能對(duì)比圖
結(jié)論
本文從結(jié)構(gòu)和性能兩個(gè)方面比較了LEON2,OpenRISC1200 和NiosII三種32位RISC處理器內(nèi)核, 概括如表1所示。
![結(jié)構(gòu)和性能兩個(gè)方面](http://21ic.com/news/upload/2008_04/080402100117676.jpg)
通過(guò)以上比較和分析可以看出, LEON2 和OpenRISC1200 主要是面向ASIC 設(shè)計(jì),它們具有開(kāi)放的源代碼以及相關(guān)ASIC 平臺(tái)開(kāi)發(fā)的支持。其中由于LEON2 處理器得到了歐洲航天局的資助,其開(kāi)發(fā)文檔和技術(shù)支持也相對(duì)更為完善。雖然NiosII在Altera 的器件上具有良好的性能并且Altera 公司提供了完善的文檔和技術(shù)支持,但是由于NiosII 只能應(yīng)用于Altera 的器件, 所以其使用范圍受到了一定的限制。
評(píng)論