何賓,王瑜
(北京化工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,北京 100029)
隨著嵌入式處理需求的快速增長,單處理器系統(tǒng)復(fù)雜度太高且計(jì)算能力不足的缺點(diǎn)不能滿足需求,嵌入式系統(tǒng)架構(gòu)開始轉(zhuǎn)向多處理器的協(xié)同工作,這樣針對同一系統(tǒng)的多任務(wù)需求,協(xié)同工作的處理器可以充分完成各自管轄的不同功能應(yīng)用。近年來,F(xiàn)PGA以其高邏輯集成度和內(nèi)嵌的高性能硬件模塊的優(yōu)勢,使得功能強(qiáng)大的芯片多處理(CMP)解決方案成為現(xiàn)實(shí),如今關(guān)鍵問題是如何高效地將各種IP核互聯(lián)在一起,構(gòu)成復(fù)雜的系統(tǒng),實(shí)現(xiàn)多核處理器的設(shè)計(jì)。
本文提出了將3個(gè)可編程的32位微處理器軟核MicroBlaze內(nèi)嵌到FPGA芯片上,實(shí)現(xiàn)了一個(gè)運(yùn)行在FPGA上的基于多處理器軟核的可編程片上系統(tǒng),并對采用PLB總線與FSL總線連接處理器,實(shí)現(xiàn)核間通信進(jìn)行了比較。一個(gè)FPGA芯片內(nèi)部可以使用主從兩個(gè)或多個(gè)MicroBlaze處理器,而FPGA最大的特點(diǎn)就是能夠縮短產(chǎn)品開發(fā)的周期,它的可編程配置特性可以將系統(tǒng)開發(fā)的風(fēng)險(xiǎn)降到最低。而Xilinx公司的MicroBlaze軟核處理器的優(yōu)點(diǎn)在于,不像ARM是由固定的硬芯片來實(shí)現(xiàn),用戶可以根據(jù)實(shí)際系統(tǒng)的需求添加必要的外設(shè)來實(shí)現(xiàn)基于MicroBlaze的嵌入式可編程片上系統(tǒng),從而提高了設(shè)計(jì)的靈活性。
系統(tǒng)整體架構(gòu)如圖1所示。本系統(tǒng)是基于MicroBlaze的三核系統(tǒng),采用嵌入3個(gè)32位處理器軟核MicroBlaze的SOPC是由Xilinx公司提供的Spartan-3E芯片[1]。

圖1 三核處理器互連架構(gòu)Fig.1 Interconnect architecture of three processor
在本系統(tǒng)中,2個(gè)MicroBlaze軟核協(xié)同處理工作,核間采用PLBv46總線互連,并利用系統(tǒng)自帶的XPS_Mailbox核實(shí)現(xiàn)核間的通信,第2個(gè)核與第3個(gè)核之間采用FSL總線實(shí)現(xiàn)點(diǎn)對點(diǎn)的通信。在核不多的情況下,采用共享內(nèi)存結(jié)構(gòu)可以有效地減少核間的通信量,避免數(shù)據(jù)一致性的問題。本系統(tǒng)中,數(shù)據(jù)傳送到第1個(gè)核,第1個(gè)核與第2個(gè)核之間進(jìn)行通信,第2個(gè)核再將數(shù)據(jù)發(fā)送給第3個(gè)核,并通過PC機(jī)超級(jí)終端接收UART的輸出,得到輸出信息,經(jīng)過分析和比較,可以對系統(tǒng)進(jìn)行調(diào)試和最后結(jié)果的驗(yàn)證。
Spartan-3E是Xilinx公司在Spartan-3成功的基礎(chǔ)上改進(jìn)的產(chǎn)品,提供了比Spartan-3更多的I/O端口和更低的單位成本,是Xilinx公司性價(jià)比最高的FPGA芯片。其應(yīng)用廣泛:支持32位RISC處理器;支持DDR接口的應(yīng)用;內(nèi)嵌Xilinx的MicroBlaze軟核,可用于嵌入式系統(tǒng)的開發(fā);支持基于Ethernet網(wǎng)絡(luò)的應(yīng)用。本系統(tǒng)采用的FPGA芯片是XC3S500E-4FG320。
一般而言,由于嵌入式系統(tǒng)涉及了軟件和硬件的開發(fā)以及兩者的綜合設(shè)計(jì),因此其開發(fā)是較為復(fù)雜的。Xilinx為了簡化基于FPGA的嵌入式開發(fā)流程,提供了功能強(qiáng)大、操作簡單的工具ISE和EDK。
EDK(Embedded Development Kit)是XILINX公司針對FPGA內(nèi)部32位嵌入式處理器開發(fā)而推出的工具套件。EDK的工具包中集成了硬件平臺(tái)產(chǎn)生器(platgen)、軟件平臺(tái)產(chǎn)生器(libgen)、仿真模型生成器(simgen)、軟件編譯器(GNU)和軟件調(diào)試(GDB)等工具,同時(shí)配有豐富的可重用IP核,利用其集成開發(fā)環(huán)境XPS(Xilinx Platform Studio)可以方便、快速地完成嵌入式系統(tǒng)開發(fā)的整個(gè)流程。該開發(fā)流程主要分為硬件開發(fā)流程和軟件開發(fā)流程,整個(gè)流程如圖2所示。其中,嵌入式處理器硬件系統(tǒng)的構(gòu)建由微處理器硬件規(guī)范(MHS)文件定義,用于描述硬件系統(tǒng)結(jié)構(gòu),定義處理器類型、總線接口、外設(shè)接口、中斷處理和地址空間;軟件系統(tǒng)結(jié)構(gòu)由微處理器軟件規(guī)范(MSS)文件定義,用于裝載軟件庫、驅(qū)動(dòng)程序和文件系統(tǒng)。Data2BRAM 的作用是把軟件代碼文件 (*.Elf)、FPGA位流文件(*.bit)和塊存儲(chǔ)器(BRAM)初始化數(shù)據(jù)文件(*.bmm)轉(zhuǎn)換成新的 FPGA 位流文件(*.bit)和存儲(chǔ)器數(shù)據(jù)文件(*.mem)[2]。

圖2 EDK開發(fā)流程Fig.2 Development process of EDK
2.2.1 MicroBlaze軟核
MicroBlaze處理器是Xilinx公司針對嵌入式處理器開發(fā)應(yīng)用推出的一種32位嵌入式處理器內(nèi)核,采用RISC架構(gòu)和哈佛結(jié)構(gòu)的32位指令和數(shù)據(jù)總線,可以全速執(zhí)行存儲(chǔ)在片上存儲(chǔ)器和外部存儲(chǔ)器中的程序,并訪問其中的數(shù)據(jù)。簡單但靈活性強(qiáng),與其他外設(shè)IP核及用戶IP核一起,可以完成片上可編程系統(tǒng)芯片(SOPC)的設(shè)計(jì)。MicroBlaze處理器的內(nèi)部結(jié)構(gòu)如圖3所示[3]。

圖3 MicroBlaze內(nèi)部結(jié)構(gòu)框圖Fig.3 Internal block diagram of MicroBlaze
2.2.2 硬件平臺(tái)搭建步驟及其設(shè)置
利用Xilinx公司提供的嵌入式開發(fā)工具EDK中的基本系統(tǒng)創(chuàng)建器(Base System Builder,BSB)向?qū)砜焖賱?chuàng)建一個(gè)工程。通過進(jìn)入XPS圖形用戶界面,在系統(tǒng)的組件面板中,通過Bus interface子窗口建立硬件單元與總線的連接,在硬件單元上單擊鼠標(biāo)右鍵,可配置其參數(shù)、閱讀相應(yīng)的數(shù)據(jù)手冊以及查看底層代碼。通過Ports子窗口配置端口參數(shù),包括頂層模塊和各個(gè)子模塊的端口,并可對其重命名。單擊相應(yīng)信號(hào)行Net列的下拉框,可選擇連接的網(wǎng)表名。通過Address子窗口設(shè)置硬件單元的絕對地址和大小,用戶還可設(shè)置指令緩存(ICache)和數(shù)據(jù)緩存(DCache)的位置。
2.2.3 PLBv46總線
通過Xilinx公司128bit寬度的PLB總線可將多個(gè)PLB主設(shè)備和PLB從設(shè)備連接到整個(gè)PLB系統(tǒng)中。PLB總線結(jié)構(gòu)包括總線控制單元、看門狗計(jì)時(shí)器、讀/寫數(shù)據(jù)通路以及獨(dú)立的地址空間,此外,還帶有一個(gè)可選的DCR從接口來訪問總線錯(cuò)誤狀態(tài)寄存器。PLB總線的主要特點(diǎn)包括以下幾點(diǎn):
1)支持任意數(shù)目的PLB主設(shè)備。
2)可支持128 bit、64 bit及32 bit位寬的從設(shè)備和主設(shè)備。3)仲裁時(shí)間小于3個(gè)周期。
4)PLB地址流水線技術(shù),支持共享總線模式或端到端的配置模式。
5)自帶PLB看門狗計(jì)時(shí)器。
6)效率遠(yuǎn)高于OPB總線,特別是在大吞吐量應(yīng)用場合。
此外,PLB總線支持單拍讀寫8位、16位、32位數(shù)據(jù)傳輸和低延時(shí)的PLB點(diǎn)到點(diǎn)拓?fù)浣Y(jié)構(gòu)。PLB總線橋的功能就是將2個(gè)獨(dú)立的PLB總線連接起來,實(shí)現(xiàn)外設(shè)資源的共享[4]。
2.2.4 FSL總線
FSL_V20快速單鏈接(FSL)總線是一個(gè)基于FIFO的單向點(diǎn)對點(diǎn)通信總線,可用來連接FPGA上的任意兩個(gè)帶有FSL總線接口的設(shè)計(jì)元素并提供兩者間的快速通信信道。Xilinx MicroBlaze處理器最多可支持8個(gè)FSL主設(shè)備接口和8個(gè)FSL從設(shè)備接口。這些接口被用于處理器的寄存器堆和FPGA片內(nèi)的硬件之間的數(shù)據(jù)傳輸,單個(gè)數(shù)據(jù)傳輸操作消耗的CPU時(shí)間不超過2個(gè)時(shí)鐘周期[4]。
FSL總線具備以下主要特征:
1)實(shí)現(xiàn)了單向的、點(diǎn)對點(diǎn)的、基于FIFO的通信;
2)提供了不共享的、無需仲裁的通信機(jī)制,可以用于在帶有FSL接口的主設(shè)備和從設(shè)備之間快速傳送數(shù)據(jù);
3)提供了額外的控制位用于注釋被傳輸數(shù)據(jù),這個(gè)控制位對于從設(shè)備有多種用途,例如,將被傳輸數(shù)據(jù)作為一個(gè)控制字解碼,或者用這個(gè)位來標(biāo)識(shí)一個(gè)數(shù)據(jù)幀的起始或結(jié)束;
4)支持的FIFO深度最小為1,最大為8 k;
5)支持同步和異步2種FIFO模式,這允許FSL的主從端能以不同的速率工作;
6)支持2種FIFO實(shí)現(xiàn)方式:雙端口Block RAM或LUT RAM,SRL16移位寄存器。
本系統(tǒng)處理器間通信采取的方案為:處理器1與處理器2之間通過XPS_mailbox核實(shí)現(xiàn),處理器2與處理器3之間的雙向通信通過一對FSL總線實(shí)現(xiàn),一個(gè)核負(fù)責(zé)發(fā)送,另一個(gè)核負(fù)責(zé)接收,不存在阻塞而導(dǎo)致無法運(yùn)行的問題。處理器核間的FSL總線相當(dāng)于一個(gè)簡單的基于FSL的數(shù)據(jù)通道FIFO_LINK。它用VHDL語言描述的實(shí)現(xiàn)過程如下:
architecture example of fifo_link is begin
FSL_M_Data<=FSL_S_Data;
FSL_M_Write<=FSL_S_Exists and(not FSL_M_Full);FSL_S_Read<=FSL_S_Exists and(not FSL_M_Full);
End architecture example;
2.3.1 內(nèi)存地址的映射
在多核處理器的設(shè)計(jì)中,任何一個(gè)共享內(nèi)存必須進(jìn)行地址映射。本系統(tǒng)在FPGA內(nèi)部的BRAM中放置了共享代碼,其中,軟件應(yīng)用程序接口與系統(tǒng)的設(shè)備通過平臺(tái)工作室(XPS)設(shè)備驅(qū)動(dòng),首先在將要運(yùn)行的應(yīng)用程序名處右擊,選中“Mark to Initialize BRAMs”,然后再右擊應(yīng)用程序名,點(diǎn)擊“Generate Linker Script”,對鏈接腳本文件進(jìn)行合理的設(shè)置。本系統(tǒng)鏈接腳本文件各個(gè)段配置如表1所示,實(shí)驗(yàn)表明,該配置能夠滿足系統(tǒng)實(shí)際運(yùn)行要求及代碼的高效執(zhí)行[5]。

表1 程序各段配置空間Tab.1 Configuration space of programming sections
2.3.2 核間通信
1)共享內(nèi)存的通信 多個(gè)處理核之間的通信可以使用進(jìn)程間通信機(jī)制、共享內(nèi)存或中斷。共享內(nèi)存是最基本的實(shí)現(xiàn)不同核上的線程間通信的機(jī)制(隊(duì)列和消息)。在內(nèi)存中有一個(gè)共享的全局變量或數(shù)據(jù)結(jié)構(gòu),則在處理器中的軟件可以輕易地更新該變量的值,且對于其他處理器是可見的。所有這一切需要的是變量的地址或指向共享區(qū)域的指針。
在兩個(gè)處理器處理共享資源的時(shí)候,為了對處理器的工作進(jìn)行同步,避免出現(xiàn)共同資源占用的沖突,造成功能實(shí)現(xiàn)混亂,采用了XPS_Mutex核。對于共享資源,如一些常見的外設(shè)和對內(nèi)存的共享訪問,經(jīng)常需要進(jìn)行同步。XPS Mutex模式提供了一些可配置的內(nèi)存映射互斥寄存器,它包括一個(gè)權(quán)值部分和一個(gè)處理器編號(hào)的組成部分。為了獲得Mutex,處理器寫入了一個(gè)軟件分配的處理器ID,該ID與互斥寄存器和權(quán)值0相對應(yīng)。Mutex判斷兩個(gè)同時(shí)訪問Mutex的處理器,并在互斥寄存器中存儲(chǔ)獲勝處理器寫下來的權(quán)值。如果Mutex已經(jīng)被鎖住,Mutex中的權(quán)值不會(huì)改變。每個(gè)處理器用讀回Mutex的權(quán)值與自己的處理器ID進(jìn)行比較,以驗(yàn)證該處理器有沒有獲得Mutex。
當(dāng)Mutex成功掛載到系統(tǒng)中,程序開始會(huì)出現(xiàn)“#include
“cfg= XMutex_LookupConfig (XPAR_XPS_MUTEX_0_DEVICE_ID);
XMutex_LookupConfig(XPAR_XPS_MUTEX_0_DEVICE_I D);”
利 用 “XMutex_Lock_CPU (XMutex*InstancePtr,u8 MutexNumber,u8 CPUID)” 函數(shù)對處理器加鎖。 利用“XMutex_Unlock_CPU(XMutex*InstancePtr,u8 MutexNumber,u8 CPUID)”對處理器進(jìn)行解鎖[6]。
2)消息的傳遞原理 利用XPS_Mailbox核來傳遞兩個(gè)處理器通信時(shí)需要的信息和握手信號(hào)。XPS Mailbox硬件最初是在硬件設(shè)計(jì)部分描述的,它的軟件驅(qū)動(dòng)程序在處理器之間可以幫助提供消息傳遞功能。該軟件的API是面向read()和write()調(diào)用的,因此軟件可以將郵箱看作是發(fā)送和接收的一個(gè)串行訪問的文件。該軟件庫提供阻塞和非阻塞的API版本。Mailbox是從一個(gè)或多個(gè)發(fā)送者傳輸信息到一個(gè)接收者的方案。它形成一種渠道,通過這個(gè)渠道信息從發(fā)送者端排列進(jìn)入一個(gè)FIFO流,然后到達(dá)接收端,它可以被看作成兩核之間一個(gè)簡單的TCP/IP形式的信息通道。
Xilinx利用XPS Maibox核實(shí)現(xiàn)核間的通信,該核具有以下幾個(gè)特點(diǎn):
①每一個(gè)Mailbox核都有一對Mailbox FIFO,一個(gè)用來發(fā)送數(shù)據(jù),另一個(gè)用來從特定的處理器接收數(shù)據(jù)。
②FIFO的深度由用戶定義。
③FIFO利用的是分配的RAM或是BRAM資源。
④每一個(gè)Mailbox都有一對連接處理器用來通信的接口。雖然,多處理器都可以連接到接口上,但是推薦的方法是每一個(gè)Mailbox連接2個(gè)處理器[6]。
Xilinx的XPS Mailbox核適于中小規(guī)模的數(shù)據(jù)傳輸(數(shù)據(jù)一般小于100 Bytes)。發(fā)送端處理器需要從本地或外部內(nèi)存復(fù)制整條信息,再將其寫入FIFO;接收端處理器將信息復(fù)制到內(nèi)存之中。在拷貝的過程中處理器浪費(fèi)了一定的時(shí)間。
當(dāng)信息到達(dá)Mailbox時(shí),Mailbox接收端發(fā)送一個(gè)中斷;當(dāng)Mailbox不能再接收信息的時(shí)候,這個(gè)中斷是無效的,中斷控制器上可以使中斷無效,且可以選擇開或者關(guān)閉,所以,發(fā)送端與接收端的通信可以是同步的,也可以是異步的。
當(dāng)Mailbox配置成功時(shí)會(huì)出現(xiàn)“#include和#include”。前者是Mailbox的函數(shù)庫,后者是中斷的函數(shù)庫。在程序調(diào)用Mailbox時(shí)需要用語句“XMbox mbox;”對其進(jìn)行引用。對于Mailbox的初始化,使用語句如下:
“cfg=XMbox_LookupConfig (MBOX_INTR_ID);
XMbox_CfgInitialize (&mbox,cfg,cfg->BaseAddress);”
對于異步消息傳遞功能允許一個(gè)處理器上的軟件去前行,而不必浪費(fèi)在一個(gè)旋轉(zhuǎn)環(huán)數(shù)據(jù)到達(dá)的郵箱,從而隔離了從具有其他時(shí)間臨界任務(wù)執(zhí)行的快速接收機(jī)到緩慢發(fā)送者。異步消息傳遞功能也可以用作處理器間中斷的一種形式。
在系統(tǒng)工程中更新比特流,將比特流下載到目標(biāo)FPGA芯片中,經(jīng)綜合、編譯后,運(yùn)行應(yīng)用程序,進(jìn)行調(diào)試。通過串口連接到目標(biāo)板上應(yīng)用系統(tǒng)中的XMD調(diào)試接口,在超級(jí)終端窗口查看觀察結(jié)果。超級(jí)終端的配置為:每秒位數(shù)(B)=9600,數(shù)據(jù)位(D)=8,奇偶校驗(yàn)(P)=無,停止位(S)=1,數(shù)據(jù)流控制(F)=無。
核間共享內(nèi)存的調(diào)試結(jié)果如圖4所示。

圖4 DDR_SDRAM存儲(chǔ)器測試結(jié)果Fig.4 Testing result of DDR_SDRAM memorizer
核間消息傳遞的調(diào)試結(jié)果如圖5、圖6所示。

圖5 處理器發(fā)送數(shù)據(jù)顯示結(jié)果Fig.5 Display result of Processor sending datas

圖6 處理器接收數(shù)據(jù)顯示結(jié)果Fig.6 Display result of processor receiving datas
由調(diào)試結(jié)果知,系統(tǒng)可以正常工作,滿足設(shè)計(jì)需求。
通過實(shí)驗(yàn)調(diào)試結(jié)果得知,基于Xilinx MicroBlaze多核系統(tǒng)的嵌入式系統(tǒng)開發(fā)[7],提高了系統(tǒng)的性能,由于MicroBlaze軟核的可移植性,增加了系統(tǒng)設(shè)計(jì)的靈活性。文中將多個(gè)MicroBlaze軟核嵌入到FPGA芯片中,得知多核比單核的性能有了顯著地提高,且驗(yàn)證了PLB總線和FSL總線混連處理器的可行性,提高了核間的通信速度,降低了系統(tǒng)的開發(fā)成本,且表明該系統(tǒng)的設(shè)計(jì)具有一定的實(shí)用性。
[1]李劍陽,付宇卓,劉婷.基于MicroBlaze多核系統(tǒng)的設(shè)計(jì)及在FPGA 上的實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2009,26(7):160-163.LI Jian-yang,FU Yu-zhuo,LIU Ting.Design multi-core system using MicroBlaze and realize on the FPGA[J].Microelectronics& Computer,2009,26(7):160-163.
[2]陳銳,徐建華,蔣亞東.MicroBlaze嵌入式處理器的硬件加速模塊設(shè)計(jì)[J].微處理機(jī),2009(5):3-6.CHEN Rui,XU Jian-hua,JIANG Ya-dong.Design of hardware accelerator in MicroBlaze embedded processor [J].Microprocessors,2009(5):3-6.
[3]王玉峰,胥保華.基于FSL總線的UART外設(shè)IP核設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008(2):45-47.WANG Yu-feng,XU Bao-hua.Design of UART peripheral IP core based on FSL[J].Microcontrollers&Embedded Systems,2008(2):45-47.
[4]田耘,徐文波.Xilinx FPGA開發(fā)實(shí)用教程[M].北京:清華大學(xué)出版社,2008.
[5]王爾申,張淑芳,張芝賢.基于Xilinx MicroBlaze的嵌入式GPS 接收機(jī)研究[J].通信技術(shù),2010,43(10):28-30.WANG Er-shen,ZHANG Shu-fang,ZHANG Zhi-xian.Study on embedded GPS receiver based on Xilinx MicroBlaze[J].Communication Technology,2010,43(10):28-30.
[6]張益嘉.一種基于FPGA的MPSoC架構(gòu)的設(shè)計(jì)方法與實(shí)現(xiàn)[D].大連:大連理工大學(xué),2009.
[7]蔡勉,田健生.向多核平臺(tái)移植操作系統(tǒng)的研究[J].現(xiàn)代電子技術(shù),2010(05):182-184.CAI Mian,TIAN Jian-sheng.Research on transplanting of operating system to multi-core environment[J].Modern Electronics Technique,2010(05):182-184.