何賓,王瑜
(北京化工大學 信息科學與技術學院,北京 100029)
隨著嵌入式處理需求的快速增長,單處理器系統(tǒng)復雜度太高且計算能力不足的缺點不能滿足需求,嵌入式系統(tǒng)架構開始轉向多處理器的協(xié)同工作,這樣針對同一系統(tǒng)的多任務需求,協(xié)同工作的處理器可以充分完成各自管轄的不同功能應用。近年來,F(xiàn)PGA以其高邏輯集成度和內(nèi)嵌的高性能硬件模塊的優(yōu)勢,使得功能強大的芯片多處理(CMP)解決方案成為現(xiàn)實,如今關鍵問題是如何高效地將各種IP核互聯(lián)在一起,構成復雜的系統(tǒng),實現(xiàn)多核處理器的設計。
本文提出了將3個可編程的32位微處理器軟核MicroBlaze內(nèi)嵌到FPGA芯片上,實現(xiàn)了一個運行在FPGA上的基于多處理器軟核的可編程片上系統(tǒng),并對采用PLB總線與FSL總線連接處理器,實現(xiàn)核間通信進行了比較。一個FPGA芯片內(nèi)部可以使用主從兩個或多個MicroBlaze處理器,而FPGA最大的特點就是能夠縮短產(chǎn)品開發(fā)的周期,它的可編程配置特性可以將系統(tǒng)開發(fā)的風險降到最低。而Xilinx公司的MicroBlaze軟核處理器的優(yōu)點在于,不像ARM是由固定的硬芯片來實現(xiàn),用戶可以根據(jù)實際系統(tǒng)的需求添加必要的外設來實現(xiàn)基于MicroBlaze的嵌入式可編程片上系統(tǒng),從而提高了設計的靈活性。
系統(tǒng)整體架構如圖1所示。本系統(tǒng)是基于MicroBlaze的三核系統(tǒng),采用嵌入3個32位處理器軟核MicroBlaze的SOPC是由Xilinx公司提供的Spartan-3E芯片[1]。
圖1 三核處理器互連架構Fig.1 Interconnect architecture of three processor
在本系統(tǒng)中,2個MicroBlaze軟核協(xié)同處理工作,核間采用PLBv46總線互連,并利用系統(tǒng)自帶的XPS_Mailbox核實現(xiàn)核間的通信,第2個核與第3個核之間采用FSL總線實現(xiàn)點對點的通信。在核不多的情況下,采用共享內(nèi)存結構可以有效地減少核間的通信量,避免數(shù)據(jù)一致性的問題。本系統(tǒng)中,數(shù)據(jù)傳送到第1個核,第1個核與第2個核之間進行通信,第2個核再將數(shù)據(jù)發(fā)送給第3個核,并通過PC機超級終端接收UART的輸出,得到輸出信息,經(jīng)過分析和比較,可以對系統(tǒng)進行調(diào)試和最后結果的驗證。
Spartan-3E是Xilinx公司在Spartan-3成功的基礎上改進的產(chǎn)品,提供了比Spartan-3更多的I/O端口和更低的單位成本,是Xilinx公司性價比最高的FPGA芯片。其應用廣泛:支持32位RISC處理器;支持DDR接口的應用;內(nèi)嵌Xilinx的MicroBlaze軟核,可用于嵌入式系統(tǒng)的開發(fā);支持基于Ethernet網(wǎng)絡的應用。本系統(tǒng)采用的FPGA芯片是XC3S500E-4FG320。
一般而言,由于嵌入式系統(tǒng)涉及了軟件和硬件的開發(fā)以及兩者的綜合設計,因此其開發(fā)是較為復雜的。Xilinx為了簡化基于FPGA的嵌入式開發(fā)流程,提供了功能強大、操作簡單的工具ISE和EDK。
EDK(Embedded Development Kit)是XILINX公司針對FPGA內(nèi)部32位嵌入式處理器開發(fā)而推出的工具套件。EDK的工具包中集成了硬件平臺產(chǎn)生器(platgen)、軟件平臺產(chǎn)生器(libgen)、仿真模型生成器(simgen)、軟件編譯器(GNU)和軟件調(diào)試(GDB)等工具,同時配有豐富的可重用IP核,利用其集成開發(fā)環(huán)境XPS(Xilinx Platform Studio)可以方便、快速地完成嵌入式系統(tǒng)開發(fā)的整個流程。該開發(fā)流程主要分為硬件開發(fā)流程和軟件開發(fā)流程,整個流程如圖2所示。其中,嵌入式處理器硬件系統(tǒng)的構建由微處理器硬件規(guī)范(MHS)文件定義,用于描述硬件系統(tǒng)結構,定義處理器類型、總線接口、外設接口、中斷處理和地址空間;軟件系統(tǒng)結構由微處理器軟件規(guī)范(MSS)文件定義,用于裝載軟件庫、驅動程序和文件系統(tǒng)。Data2BRAM 的作用是把軟件代碼文件 (*.Elf)、FPGA位流文件(*.bit)和塊存儲器(BRAM)初始化數(shù)據(jù)文件(*.bmm)轉換成新的 FPGA 位流文件(*.bit)和存儲器數(shù)據(jù)文件(*.mem)[2]。
圖2 EDK開發(fā)流程Fig.2 Development process of EDK
2.2.1 MicroBlaze軟核
MicroBlaze處理器是Xilinx公司針對嵌入式處理器開發(fā)應用推出的一種32位嵌入式處理器內(nèi)核,采用RISC架構和哈佛結構的32位指令和數(shù)據(jù)總線,可以全速執(zhí)行存儲在片上存儲器和外部存儲器中的程序,并訪問其中的數(shù)據(jù)。簡單但靈活性強,與其他外設IP核及用戶IP核一起,可以完成片上可編程系統(tǒng)芯片(SOPC)的設計。MicroBlaze處理器的內(nèi)部結構如圖3所示[3]。
圖3 MicroBlaze內(nèi)部結構框圖Fig.3 Internal block diagram of MicroBlaze
2.2.2 硬件平臺搭建步驟及其設置
利用Xilinx公司提供的嵌入式開發(fā)工具EDK中的基本系統(tǒng)創(chuàng)建器(Base System Builder,BSB)向導來快速創(chuàng)建一個工程。通過進入XPS圖形用戶界面,在系統(tǒng)的組件面板中,通過Bus interface子窗口建立硬件單元與總線的連接,在硬件單元上單擊鼠標右鍵,可配置其參數(shù)、閱讀相應的數(shù)據(jù)手冊以及查看底層代碼。通過Ports子窗口配置端口參數(shù),包括頂層模塊和各個子模塊的端口,并可對其重命名。單擊相應信號行Net列的下拉框,可選擇連接的網(wǎng)表名。通過Address子窗口設置硬件單元的絕對地址和大小,用戶還可設置指令緩存(ICache)和數(shù)據(jù)緩存(DCache)的位置。
2.2.3 PLBv46總線
通過Xilinx公司128bit寬度的PLB總線可將多個PLB主設備和PLB從設備連接到整個PLB系統(tǒng)中。PLB總線結構包括總線控制單元、看門狗計時器、讀/寫數(shù)據(jù)通路以及獨立的地址空間,此外,還帶有一個可選的DCR從接口來訪問總線錯誤狀態(tài)寄存器。PLB總線的主要特點包括以下幾點:
1)支持任意數(shù)目的PLB主設備。
2)可支持128 bit、64 bit及32 bit位寬的從設備和主設備。3)仲裁時間小于3個周期。
4)PLB地址流水線技術,支持共享總線模式或端到端的配置模式。
5)自帶PLB看門狗計時器。
6)效率遠高于OPB總線,特別是在大吞吐量應用場合。
此外,PLB總線支持單拍讀寫8位、16位、32位數(shù)據(jù)傳輸和低延時的PLB點到點拓撲結構。PLB總線橋的功能就是將2個獨立的PLB總線連接起來,實現(xiàn)外設資源的共享[4]。
2.2.4 FSL總線
FSL_V20快速單鏈接(FSL)總線是一個基于FIFO的單向點對點通信總線,可用來連接FPGA上的任意兩個帶有FSL總線接口的設計元素并提供兩者間的快速通信信道。Xilinx MicroBlaze處理器最多可支持8個FSL主設備接口和8個FSL從設備接口。這些接口被用于處理器的寄存器堆和FPGA片內(nèi)的硬件之間的數(shù)據(jù)傳輸,單個數(shù)據(jù)傳輸操作消耗的CPU時間不超過2個時鐘周期[4]。
FSL總線具備以下主要特征:
1)實現(xiàn)了單向的、點對點的、基于FIFO的通信;
2)提供了不共享的、無需仲裁的通信機制,可以用于在帶有FSL接口的主設備和從設備之間快速傳送數(shù)據(jù);
3)提供了額外的控制位用于注釋被傳輸數(shù)據(jù),這個控制位對于從設備有多種用途,例如,將被傳輸數(shù)據(jù)作為一個控制字解碼,或者用這個位來標識一個數(shù)據(jù)幀的起始或結束;
4)支持的FIFO深度最小為1,最大為8 k;
5)支持同步和異步2種FIFO模式,這允許FSL的主從端能以不同的速率工作;
6)支持2種FIFO實現(xiàn)方式:雙端口Block RAM或LUT RAM,SRL16移位寄存器。
本系統(tǒng)處理器間通信采取的方案為:處理器1與處理器2之間通過XPS_mailbox核實現(xiàn),處理器2與處理器3之間的雙向通信通過一對FSL總線實現(xiàn),一個核負責發(fā)送,另一個核負責接收,不存在阻塞而導致無法運行的問題。處理器核間的FSL總線相當于一個簡單的基于FSL的數(shù)據(jù)通道FIFO_LINK。它用VHDL語言描述的實現(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)存地址的映射
在多核處理器的設計中,任何一個共享內(nèi)存必須進行地址映射。本系統(tǒng)在FPGA內(nèi)部的BRAM中放置了共享代碼,其中,軟件應用程序接口與系統(tǒng)的設備通過平臺工作室(XPS)設備驅動,首先在將要運行的應用程序名處右擊,選中“Mark to Initialize BRAMs”,然后再右擊應用程序名,點擊“Generate Linker Script”,對鏈接腳本文件進行合理的設置。本系統(tǒng)鏈接腳本文件各個段配置如表1所示,實驗表明,該配置能夠滿足系統(tǒng)實際運行要求及代碼的高效執(zhí)行[5]。
表1 程序各段配置空間Tab.1 Configuration space of programming sections
2.3.2 核間通信
1)共享內(nèi)存的通信 多個處理核之間的通信可以使用進程間通信機制、共享內(nèi)存或中斷。共享內(nèi)存是最基本的實現(xiàn)不同核上的線程間通信的機制(隊列和消息)。在內(nèi)存中有一個共享的全局變量或數(shù)據(jù)結構,則在處理器中的軟件可以輕易地更新該變量的值,且對于其他處理器是可見的。所有這一切需要的是變量的地址或指向共享區(qū)域的指針。
在兩個處理器處理共享資源的時候,為了對處理器的工作進行同步,避免出現(xiàn)共同資源占用的沖突,造成功能實現(xiàn)混亂,采用了XPS_Mutex核。對于共享資源,如一些常見的外設和對內(nèi)存的共享訪問,經(jīng)常需要進行同步。XPS Mutex模式提供了一些可配置的內(nèi)存映射互斥寄存器,它包括一個權值部分和一個處理器編號的組成部分。為了獲得Mutex,處理器寫入了一個軟件分配的處理器ID,該ID與互斥寄存器和權值0相對應。Mutex判斷兩個同時訪問Mutex的處理器,并在互斥寄存器中存儲獲勝處理器寫下來的權值。如果Mutex已經(jīng)被鎖住,Mutex中的權值不會改變。每個處理器用讀回Mutex的權值與自己的處理器ID進行比較,以驗證該處理器有沒有獲得Mutex。
當Mutex成功掛載到系統(tǒng)中,程序開始會出現(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)”對處理器進行解鎖[6]。
2)消息的傳遞原理 利用XPS_Mailbox核來傳遞兩個處理器通信時需要的信息和握手信號。XPS Mailbox硬件最初是在硬件設計部分描述的,它的軟件驅動程序在處理器之間可以幫助提供消息傳遞功能。該軟件的API是面向read()和write()調(diào)用的,因此軟件可以將郵箱看作是發(fā)送和接收的一個串行訪問的文件。該軟件庫提供阻塞和非阻塞的API版本。Mailbox是從一個或多個發(fā)送者傳輸信息到一個接收者的方案。它形成一種渠道,通過這個渠道信息從發(fā)送者端排列進入一個FIFO流,然后到達接收端,它可以被看作成兩核之間一個簡單的TCP/IP形式的信息通道。
Xilinx利用XPS Maibox核實現(xiàn)核間的通信,該核具有以下幾個特點:
①每一個Mailbox核都有一對Mailbox FIFO,一個用來發(fā)送數(shù)據(jù),另一個用來從特定的處理器接收數(shù)據(jù)。
②FIFO的深度由用戶定義。
③FIFO利用的是分配的RAM或是BRAM資源。
④每一個Mailbox都有一對連接處理器用來通信的接口。雖然,多處理器都可以連接到接口上,但是推薦的方法是每一個Mailbox連接2個處理器[6]。
Xilinx的XPS Mailbox核適于中小規(guī)模的數(shù)據(jù)傳輸(數(shù)據(jù)一般小于100 Bytes)。發(fā)送端處理器需要從本地或外部內(nèi)存復制整條信息,再將其寫入FIFO;接收端處理器將信息復制到內(nèi)存之中。在拷貝的過程中處理器浪費了一定的時間。
當信息到達Mailbox時,Mailbox接收端發(fā)送一個中斷;當Mailbox不能再接收信息的時候,這個中斷是無效的,中斷控制器上可以使中斷無效,且可以選擇開或者關閉,所以,發(fā)送端與接收端的通信可以是同步的,也可以是異步的。
當Mailbox配置成功時會出現(xiàn)“#include和#include”。前者是Mailbox的函數(shù)庫,后者是中斷的函數(shù)庫。在程序調(diào)用Mailbox時需要用語句“XMbox mbox;”對其進行引用。對于Mailbox的初始化,使用語句如下:
“cfg=XMbox_LookupConfig (MBOX_INTR_ID);
XMbox_CfgInitialize (&mbox,cfg,cfg->BaseAddress);”
對于異步消息傳遞功能允許一個處理器上的軟件去前行,而不必浪費在一個旋轉環(huán)數(shù)據(jù)到達的郵箱,從而隔離了從具有其他時間臨界任務執(zhí)行的快速接收機到緩慢發(fā)送者。異步消息傳遞功能也可以用作處理器間中斷的一種形式。
在系統(tǒng)工程中更新比特流,將比特流下載到目標FPGA芯片中,經(jīng)綜合、編譯后,運行應用程序,進行調(diào)試。通過串口連接到目標板上應用系統(tǒng)中的XMD調(diào)試接口,在超級終端窗口查看觀察結果。超級終端的配置為:每秒位數(shù)(B)=9600,數(shù)據(jù)位(D)=8,奇偶校驗(P)=無,停止位(S)=1,數(shù)據(jù)流控制(F)=無。
核間共享內(nèi)存的調(diào)試結果如圖4所示。
圖4 DDR_SDRAM存儲器測試結果Fig.4 Testing result of DDR_SDRAM memorizer
核間消息傳遞的調(diào)試結果如圖5、圖6所示。
圖5 處理器發(fā)送數(shù)據(jù)顯示結果Fig.5 Display result of Processor sending datas
圖6 處理器接收數(shù)據(jù)顯示結果Fig.6 Display result of processor receiving datas
由調(diào)試結果知,系統(tǒng)可以正常工作,滿足設計需求。
通過實驗調(diào)試結果得知,基于Xilinx MicroBlaze多核系統(tǒng)的嵌入式系統(tǒng)開發(fā)[7],提高了系統(tǒng)的性能,由于MicroBlaze軟核的可移植性,增加了系統(tǒng)設計的靈活性。文中將多個MicroBlaze軟核嵌入到FPGA芯片中,得知多核比單核的性能有了顯著地提高,且驗證了PLB總線和FSL總線混連處理器的可行性,提高了核間的通信速度,降低了系統(tǒng)的開發(fā)成本,且表明該系統(tǒng)的設計具有一定的實用性。
[1]李劍陽,付宇卓,劉婷.基于MicroBlaze多核系統(tǒng)的設計及在FPGA 上的實現(xiàn)[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嵌入式處理器的硬件加速模塊設計[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外設IP核設計[J].單片機與嵌入式系統(tǒ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ā)實用教程[M].北京:清華大學出版社,2008.
[5]王爾申,張淑芳,張芝賢.基于Xilinx MicroBlaze的嵌入式GPS 接收機研究[J].通信技術,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架構的設計方法與實現(xiàn)[D].大連:大連理工大學,2009.
[7]蔡勉,田健生.向多核平臺移植操作系統(tǒng)的研究[J].現(xiàn)代電子技術,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.