摘要:介紹了龍芯2號增強型處理器(以下簡稱龍芯2E)配套北橋的總體架構(gòu)、模塊互連以及各個模塊的設(shè)計和優(yōu)化工作。測試結(jié)果表明,優(yōu)化使龍芯2E系統(tǒng)的FTP上傳帶寬提升了36.6%,系統(tǒng)的整體性能達到了Intel Pentium4 1.4 GHz的水平并足以勝任各種格式流媒體的解碼和播放。
關(guān)鍵詞:北橋; 芯片組; 龍芯; Wishbone; 互連外圍設(shè)備
中圖分類號:TP302文獻標志碼:A
文章編號:1001-3695(2007)12-0249-04
提高計算機的整體性能一直是人們追求的目標。在計算機系統(tǒng)中,CPU是計算核心,芯片組則是數(shù)據(jù)通路的核心。芯片組控制著CPU和大部分設(shè)備和數(shù)據(jù)的交互,它的性能對計算機整體性能起著至關(guān)重要的影響。
PC芯片組一般是南北橋架構(gòu)。北橋靠近CPU,主要連接高速設(shè)備,如內(nèi)存、顯示芯片、千兆網(wǎng)絡(luò)等,要求提供高帶寬低延時的數(shù)據(jù)通路。南橋遠離CPU,主要連接低速設(shè)備,如硬盤、鍵盤、鼠標、軟盤等,要求提供高度集成的功能。也有芯片組在單芯片中集成了南北橋功能,如nVIDIA公司的nForce3和nForce4芯片組。但單芯片組驗證復(fù)雜,應(yīng)用上缺乏靈活性,所以在市場占有率上不如南北橋架構(gòu)的芯片組。
對于龍芯2E處理器[1]而言,設(shè)計自己的高性能北橋有迫切的需要。龍芯2E處理器一直使用MARVELL公司的GT 64240北橋芯片。此款芯片價格較高,使龍芯系統(tǒng)成本居高不下,嚴重阻礙了龍芯的推廣。最新的龍芯2E片內(nèi)集成了內(nèi)存控制器,使用了自己定義的系統(tǒng)接口,所以必須設(shè)計自己的高性能北橋。
1實驗平臺
本文在無特殊說明時,使用的實驗平臺為:龍芯2E北橋的設(shè)計和驗證采用Altera公司的Cyclone Ⅱ EP2C35C7 FPGA,綜合布局布線等工具均使用Altera公司的QuartusⅡ 6.0軟件;處理器為龍芯2號增強型,片內(nèi)集成64 KB指令cache、64 KB數(shù)據(jù)cache和512 KB二級cache,處理器內(nèi)部集成內(nèi)存控制器,其他設(shè)備的訪存操作通過處理器完成;南橋為VIA公司的VT82C686B;外部時鐘頻率66 MHz,CPU工作于10倍外頻。
2龍芯2E北橋的結(jié)構(gòu)設(shè)計
2.1總體架構(gòu)與模塊互連
筆者采用自頂向下的分模塊設(shè)計的方法設(shè)計龍芯2E北橋。龍芯2E北橋主要由四個模塊組成,即CPU接口模塊、PCI橋模塊、寄存器模塊和local I/O模塊。
北橋內(nèi)部各模塊使用Wishbone總線[3]交叉開關(guān)方式互連。Wishbone總線由Silicore公司提出,優(yōu)點是硬件結(jié)構(gòu)簡單、互連吞吐高效,而且公開、免費,所以廣泛用于片內(nèi)系統(tǒng)設(shè)計中。筆者使用32 bit地址總線和64 bit數(shù)據(jù)總線互連,具有很高的傳輸帶寬,而且交叉開關(guān)的互連方式使得吞吐率和并行性提高,整個系統(tǒng)也具有良好的擴展性。整個龍芯2E北橋的結(jié)構(gòu)和連接如圖1所示。
北橋的主要模塊中,CPU接口模塊既是Wishbone主設(shè)備也是Wishbone從設(shè)備;PCI橋模塊分為PCI target和PCI master兩個部分,PCI target是Wishbone主設(shè)備,PCI master是Wishbone從設(shè)備;寄存器模塊、local I/O模塊是Wishbone從設(shè)備。Wishbone主、從設(shè)備分別遵守Wishbone協(xié)議中master interface和slave interface規(guī)范[3]。
因為處理器內(nèi)部集成了內(nèi)存控制器,所以CPU接口模塊除了負責(zé)處理CPU發(fā)出的對外設(shè)的讀寫請求,還要處理PCI模塊發(fā)出的DMA請求;PCI橋模塊實現(xiàn)了北橋和PCI設(shè)備的連接;寄存器模塊實現(xiàn)了中斷和北橋配置功能;local I/O模塊實現(xiàn)了對ROM和串口的訪問。
每個從設(shè)備都有一個仲裁邏輯決定從設(shè)備響應(yīng)哪個主設(shè)備的請求。筆者定義了一個三位的仲裁寄存器。其中兩位為1,一位為0,此寄存器在每個時鐘周期循環(huán)移位。如果沒有競爭,那么發(fā)起操作的主設(shè)備立即獲得訪問權(quán);如果存在競爭,三位仲裁寄存器的最低位為1時CPU獲得訪問權(quán),否則PCI target模塊獲得訪問權(quán)。這種實現(xiàn)下CPU有2/3的概率獲得訪問權(quán),PCI target有1/3的概率獲得訪問權(quán),筆者用很簡單的實現(xiàn)方式保證了在優(yōu)先響應(yīng)CPU的情況下PCI target不會餓死。
2.2龍芯2E系統(tǒng)接口和北橋CPU接口模塊
龍芯2E處理器片內(nèi)集成了內(nèi)存控制器。其系統(tǒng)總線的定義是在MIPS R10000[4]處理器接口上變化而來的。龍芯2E系統(tǒng)接口支持1~8 Byte讀寫和32 Byte的塊讀寫請求,與R10000接口主要的不同在請求號和流控的處理上。龍芯2E接口可以支持八個outstanding的請求,每個請求均有一個惟一的請求號,由接收請求的一方顯示釋放。北橋和CPU維護各自的請求號隊列,通過請求號來區(qū)別不同請求的數(shù)據(jù),并通過是否有空閑的請求號來進行流控。
龍芯2E處理器以前的龍芯2系列處理器接口均使用SysAD總線協(xié)議[5]。SysAD不能同時發(fā)出多個讀寫操作,即當一個操作正在被執(zhí)行時,后續(xù)的操作均不會被執(zhí)行,直到該操作執(zhí)行結(jié)束,這是一個完全串行化的過程。而龍芯2E系統(tǒng)接口支持多個outstanding的請求,有更好的并行性和更高的效率。多個outstanding請求也使北橋可以更靈活地做一些優(yōu)化工作。
龍芯2E系統(tǒng)接口還支持uncached block write操作。一般而言,對于uncached的地址,CPU可以進行字節(jié)、半字、字的寫操作;只有對于cached的地址,才可以進行一個cache行的塊寫操作。而龍芯2E支持uncached block write,可以將連續(xù)的uncached地址的多個寫操作合并成一個塊操作完成,大大提高了uncached寫操作的效率。
龍芯2E北橋CPU接口模塊結(jié)構(gòu)如圖2所示。它主要完成三個功能,即總線使用權(quán)的仲裁、處理CPU發(fā)出的讀寫請求和處理PCI設(shè)備發(fā)起的DMA讀寫請求。對于CPU接口發(fā)出的命令和數(shù)據(jù),首先寫入模塊內(nèi)部的命令數(shù)據(jù)隊列中,并通過Wishbone master接口按隊列中的順序發(fā)起Wishbone總線上的操作,將數(shù)據(jù)與命令送到目標模塊;讀返回數(shù)據(jù)先存入讀數(shù)據(jù)返回隊列中,并通過CPU接口順序返回。對PCI橋模塊通過Wishbone slave接口發(fā)起的DMA讀寫請求,直接向CPU接口發(fā)出命令,并寫出數(shù)據(jù)或?qū)PU接口返回的數(shù)據(jù)直接返回給PCI橋。北橋CPU接口模塊的仲裁邏輯決定系統(tǒng)接口的總線使用權(quán)和負責(zé)請求號的管理,競爭總線使用權(quán)的是CPU、北橋的DMA命令和北橋返回CPU讀數(shù)據(jù)。
2.3PCI橋模塊
龍芯2E北橋中PCI橋模塊由PCI master和PCI target兩個模塊組成。它實現(xiàn)了PCI接口協(xié)議,負責(zé)連接系統(tǒng)中的PCI設(shè)備。PCI master模塊處理CPU對北橋PCI配置空間的訪問和CPU對PCI設(shè)備的訪問。PCI target接收PCI設(shè)備發(fā)起的請求,包括DMA操作和對PCI配置空間的訪問,轉(zhuǎn)換為Wishbone總線的操作。圖3為PCI橋模塊的結(jié)構(gòu)圖。
PCI target模塊的主要功能是提供PCI設(shè)備訪問內(nèi)存的DMA通道。在實際應(yīng)用中,網(wǎng)絡(luò)、硬盤等最常用的設(shè)備均使用DMA操作。因為DMA的性能對系統(tǒng)的性能有很大影響,所以PCI target模塊是進行性能優(yōu)化的重點。
本文提出了一種可以廣泛用于兩級總線傳輸時提高數(shù)據(jù)傳輸效率的機制[2]。筆者在Wishbone master中加入了兩個寫緩沖區(qū)和一個讀緩沖區(qū)。為了便于描述,兩個寫緩沖區(qū)分別命名為寫緩沖區(qū)1、2。寫操作時,Wishbone master子模塊先在寫緩沖區(qū)1中寫數(shù)據(jù),直到寫完所有內(nèi)容或?qū)懢彌_區(qū)1滿。此時Wishbone master在Wishbone總線上發(fā)起寫操作,將寫緩沖區(qū)1中的數(shù)據(jù)寫到目標模塊中去,與此同時,繼續(xù)把PCIW_FIFO中的數(shù)據(jù)寫到寫緩沖區(qū)2中。當傳送完寫緩沖區(qū)1內(nèi)容時,切換兩個寫緩沖區(qū)的角色,開始傳送寫緩沖區(qū)2中準備好的數(shù)據(jù)并將PCIW_FIFO中的數(shù)據(jù)寫到寫緩沖區(qū)1中。如此反復(fù),直到把PCIW_FIFO中的數(shù)據(jù)都傳送完。讀操作時,Wishbone master子模塊把讀到的數(shù)據(jù)放進讀緩沖區(qū),并將緩沖區(qū)中的數(shù)據(jù)不斷寫入PCIR_FIFO中,直到緩沖區(qū)滿;等到緩沖區(qū)有一半的數(shù)據(jù)被寫入PCIR_FIFO,它開始繼續(xù)讀取下一部分的數(shù)據(jù)。在此過程中如果PCI target interface子模塊發(fā)出停止信號,則停止讀取下一部分的數(shù)據(jù)。這種機制的優(yōu)點是讀、寫FIFO的控制邏輯相對簡單,能以較小的FIFO深度在PCI總線上獲得理想的傳輸效率,而且寫數(shù)據(jù)在寫FIFO中停留的時間短,可以盡早地在Wishbone總線上發(fā)起寫操作,降低了數(shù)據(jù)傳輸?shù)难舆t。
PCI master模塊的工作原理與PCI target模塊類似,不再贅述。
3性能測試和優(yōu)化
作為整個龍芯2E系統(tǒng)中的核心部件,北橋的性能直接影響著整個計算機系統(tǒng)的性能,所以從設(shè)計初就明確要設(shè)計高性能的北橋。在滿足功能測試之后,筆者對系統(tǒng)進行了性能測試,并根據(jù)測試結(jié)果分析進行了多項優(yōu)化。
3.1CPU接口模塊的優(yōu)化
在處理器接口只能執(zhí)行一個操作的情況下,CPU接口模塊Wishbone slave interface接到PCI橋的DMA讀請求時,向CPU接口發(fā)出一個塊讀命令。當這個塊讀數(shù)據(jù)返回完成后,如果PCI橋仍處于讀請求狀態(tài),則CPU接口模塊繼續(xù)向CPU發(fā)出下一個塊讀命令并返回讀數(shù)據(jù)。如此往復(fù),直到PCI橋撤銷讀請求。龍芯2E系統(tǒng)接口支持多個outstanding請求,在PCI橋的DMA讀請求時,可以每次向CPU接口發(fā)起多個讀命令。這樣下一個讀的等待周期與上一個讀的數(shù)據(jù)返回周期重合,實現(xiàn)了兩個讀的流水化,提高了CPU接口的并行度和向PCI橋返回讀數(shù)據(jù)的效率。但如果發(fā)出的讀命令過多,超過DMA讀的需要,就會造成CPU接口的浪費。所以每次發(fā)出適當個數(shù)的讀命令才能達到最佳性能,筆者通過實驗來確定這個最佳值。
筆者首先在CPU接口模塊設(shè)計了多個寄存器,統(tǒng)計一段時間內(nèi)需要在CPU接口發(fā)起1、2、3和多于三個塊讀命令的DMA讀請求數(shù)各有多少,統(tǒng)計結(jié)果如表1所示。可以看出,需要在CPU接口發(fā)起一個或多于三個塊讀命令的DMA讀請求可以忽略,需要兩個塊讀命令的請求比需要三個塊讀命令的請求高出兩個數(shù)量級。可以推斷每次向CPU接口上發(fā)出兩個讀命令時性能最佳;發(fā)出的讀命令數(shù)增多會造成CPU接口帶寬浪費,性能變低。
本文實現(xiàn)了每次發(fā)出一至四個讀命令的CPU接口模塊并進行FTP帶寬測試。測試環(huán)境是龍芯2E平臺,直連一臺debian系統(tǒng)的x86主機,測試結(jié)果如圖4所示,數(shù)據(jù)單位為Mbps。可以看出,每次發(fā)出兩個讀命令時帶寬最高。與發(fā)一個讀命令相比,F(xiàn)TP上傳帶寬提高了17.86%,F(xiàn)TP下載帶寬也略有提升。這與根據(jù)表1的統(tǒng)計得出的推斷吻合。與推斷不同的是,發(fā)出四個讀命令時FTP上傳帶寬略高于發(fā)出三個讀命令。這是因為在測試時龍芯2E平臺沒有進行其他操作,不會有別的操作來與DMA讀競爭請求號;而且CPU接口的帶寬遠高于PCI帶寬,所以CPU接口的帶寬浪費不會對測試性能造成影響。但是當系統(tǒng)負荷重,CPU接口除DMA讀之外的操作頻繁時,發(fā)出過多讀命令的浪費對系統(tǒng)性能造成的影響會凸現(xiàn),每次發(fā)出兩個讀命令的實現(xiàn)優(yōu)勢會更明顯。
3.2PCI橋的優(yōu)化
從表1中可看出,PCI橋發(fā)出的DMA讀請求中,需要向CPU接口發(fā)出兩個塊讀命令的請求最多。而在實際應(yīng)用中,PCI設(shè)備DMA讀操作需要的數(shù)據(jù)遠遠超過兩個塊讀返回的64 Byte,這說明PCI橋有優(yōu)化的空間。
PCI協(xié)議中DMA讀操作有三種,分別是memory read、memory read line和memory read multiple。這三種讀語義一樣,但memory read line表示設(shè)備希望取回一個cache行的數(shù)據(jù),而memory read multiple表示設(shè)備希望取回多個cache行的數(shù)據(jù)。為了防止讀回多余數(shù)據(jù),在PCI橋的實現(xiàn)中筆者對三種DMA讀操作設(shè)置了不同的讀數(shù)據(jù)上限。表1說明了PCI橋在PCI總線上收到的基本是memory read和memory read line命令。雖然設(shè)備實際上需要的可能是多個cache行的數(shù)據(jù),但發(fā)出的卻不是memory read multiple的命令,PCI橋在memory read和memory read line的讀數(shù)據(jù)上限時即發(fā)出disconnect操作,設(shè)備必須重新申請PCI總線使用權(quán)并發(fā)起DMA操作。這使得DMA讀請求不能達到最好的性能。
當memory read和memory read line讀數(shù)據(jù)上限提高時,DMA讀操作性能得到了明顯改善。圖5是設(shè)置memory read和memory read line的不同讀數(shù)據(jù)上限時FTP測試的結(jié)果,數(shù)據(jù)單位是Mbps。設(shè)置合適的上限時,F(xiàn)TP上傳帶寬提高了15.93%,F(xiàn)TP下載速度也略有提升。
在提高memory read和memory read line讀數(shù)據(jù)上限后,筆者重新測試了CPU接口模塊在每次收到DMA讀時發(fā)出不同讀命令個數(shù)的FTP帶寬。圖6是測試結(jié)果,數(shù)據(jù)單位是Mbps。可以看出,盡管讀數(shù)據(jù)上限提高使得每次DMA讀請求需要CPU發(fā)出的讀命令基本都超過三個,但每次發(fā)出更多的讀命令和兩個讀命令相比性能并沒有改善。這是因為兩個讀命令返回的數(shù)據(jù)在PCI接口上的返回時間足夠CPU接口模塊取回下一個數(shù)據(jù),所以在PCI總線上數(shù)據(jù)可以連續(xù)返回,每次發(fā)出更多的讀命令已經(jīng)沒有意義,而且還可能造成數(shù)據(jù)的浪費。
CPU接口模塊和PCI橋模塊的總的優(yōu)化結(jié)果如表2所示。
3.3龍芯2E系統(tǒng)的性能
SPEC CPU 2000[6,8]基準測試是一套評估處理器性能的軟件,包括CINT 2000和CFP 2000兩個子項目,分別用于測量與對比計算機定點和浮點運算的性能。它考察的是計算機系統(tǒng)的整體性能。筆者對龍芯2E系統(tǒng)進行了SPEC 2000測試。測試平臺為1 GHz龍芯2E處理器, Altera公司的Stratix Ⅱ EP2S30C8工業(yè)級FPGA實現(xiàn)的北橋,外部時鐘頻率83.3 MHz。測試結(jié)果如圖7、8所示,SPEC CINT 2000和SPEC CFP 2000均為503分,達到了Intel P4 1.4 GHz的水平。
流媒體性能也是計算機系統(tǒng)性能中人們重點關(guān)注的對象。筆者在龍芯2E平臺上用MPlayer播放由MPlayer官方網(wǎng)站[7]提供的測試視頻流。其格式涵蓋MPEG-1、MPEG-2和MPEG-4。測試所用XWindows的分辨率為1 280×1 024,顯卡為ATI-Mach64。測試表明視頻流可以順暢播放,并且在Benchmark模式下記錄表3的數(shù)據(jù)(Benchmark模式是指MPlayer的一種無須與音頻同步的全速測試播放模式)。可以看出,2E系統(tǒng)實際可以達到的解碼速率遠遠超過正常播放需要的幀速率,在實際播放時,CPU計算能力還有很大的剩余。
其中:VC時間表示播放時的視頻解碼時間;解碼幀速率為播放幀數(shù)除以解碼時間VC。
4結(jié)束語
筆者以高性能為目標設(shè)計了龍芯2E北橋,并針對各個模塊和整個系統(tǒng)的互連結(jié)構(gòu)作了仔細的優(yōu)化,并起到了明顯的效果。FTP測試結(jié)果表明,經(jīng)過優(yōu)化,龍芯2E北橋在DMA上的性能有明顯的提升,其中上傳帶寬提高36.6%;SPEC 2000測試結(jié)果表明,龍芯2E系統(tǒng)的整體性能已經(jīng)達到了P4 1.4 GHz的水平;流媒體測試表明,2E系統(tǒng)足以勝任各種格式流媒體的播放。
下一步筆者的工作將分成兩個方面:一方面是高速接口設(shè)計,在北橋中集成PCI-Express、千兆網(wǎng)卡等以滿足高端應(yīng)用的需求;另一個方面是低成本方向,在北橋中集成IDE、LPC、RTC等功能,這樣可以省去南橋芯片,進一步降低系統(tǒng)的成本,使龍芯在我國低成本信息化道路上更好地發(fā)揮作用。
參考文獻:
[1]HU Wei-wu, ZHANG Fu-xin, LI Zu-song. Micro-architecture of the Godson-2 processor[J]. Journal of Computer Science and Technology, 2005,20(2):243-249.
[2]蔡飛,胡明昌,曾洪博,等.一種控制兩種不同速度總線間數(shù)據(jù)傳送的方法:中國,200510086446.1[P].2006.
[3]Wishbone system-on-chip(SOC) interconnection architecture for por-table IP cores revision B3[S].Minneapolis: Silicore Corporation, 2001.
[4]HEINRICH J. MIPS R10000 users’ manual[K].Mountain View, California: MIPS Technologies Inc, 1996:80-125.
[5]RM7000 family user manual[K].[S.l.]: PMC-Sierra Corporation, 2001:167-246.
[6]HENNING J L. SPEC CPU2000: measuring CPU performance in the new millennium[J]. Computer, 2000,33(7):28-35.
[7]MPlayer home page[EB/OL].[2006].http://www.mplayerhq.hu.
[8]Standard performance evaluation corporation home page[EB/OL].[2006].http://www.spec.org.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”