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