開(kāi)放性32位RISC處理器IP核的比較與分析
隨著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所示:
圖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所示:
圖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)。
圖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 的硬件乘除法指令。
圖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ì)更大。
圖5 四種處理器性能對(duì)比圖
結(jié)論
本文從結(jié)構(gòu)和性能兩個(gè)方面比較了LEON2,OpenRISC1200 和NiosII三種32位RISC處理器內(nèi)核, 概括如表1所示。
通過(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 的器件, 所以其使用范圍受到了一定的限制。