王 珊,張建志
(1.中國電子科技集團(tuán)公司第五十四研究所,河北石家莊050081;2.空軍駐石家莊地區(qū)軍事代表室,河北石家莊050081)
基于FPGA的動(dòng)態(tài)可重構(gòu)系統(tǒng),可在運(yùn)行時(shí)動(dòng)態(tài)改變系統(tǒng)部分邏輯電路的功能,而不影響其他邏輯電路的正常運(yùn)行,既充分發(fā)揮了硬件的高效性,又提供了軟件的編程靈活性[1]。隨著FPGA的廣泛應(yīng)用,特別是將其應(yīng)用于較為偏僻區(qū)域時(shí),傳統(tǒng)的FPGA可重構(gòu)技術(shù)就顯現(xiàn)出諸多不便。隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,支持遠(yuǎn)程動(dòng)態(tài)重構(gòu),具有在線更新和維護(hù)能力的嵌入式系統(tǒng)越來越多地應(yīng)用在無人值守或特殊環(huán)境中。在系統(tǒng)中運(yùn)用動(dòng)態(tài)可重構(gòu)系統(tǒng)設(shè)計(jì)及互聯(lián)網(wǎng)可重構(gòu)邏輯(Internet Reconfigurable Logic,IRL)設(shè)計(jì)技術(shù),實(shí)現(xiàn)對(duì)軟/硬件任務(wù)的遠(yuǎn)程更新和配置,極大地方便了可重構(gòu)系統(tǒng)的設(shè)計(jì)過程和更新維護(hù)過程[2,3]??芍貥?gòu)系統(tǒng)通常在兩種情況下對(duì)FPGA進(jìn)行重新配置[4]:① FPGA邏輯功能需要改變,例如功能升級(jí);②FPGA配置數(shù)據(jù)發(fā)生錯(cuò)誤而導(dǎo)致功能失效,如在空間輻射環(huán)境下的單粒子翻轉(zhuǎn)(Single Event Upsets,SEU)效應(yīng)導(dǎo)致配置數(shù)據(jù)錯(cuò)誤或勘正錯(cuò)誤。本文實(shí)現(xiàn)了在PowePC+FPGA的異構(gòu)多核體系結(jié)構(gòu)上的遠(yuǎn)程動(dòng)態(tài)可重構(gòu)的嵌入式系統(tǒng)設(shè)計(jì),在軟硬件無縫集成的基礎(chǔ)上提出了基于Vxworks操作系統(tǒng)的硬件透明編程框架,給出了具體的硬件平臺(tái)設(shè)計(jì)和軟件設(shè)計(jì)流程,實(shí)現(xiàn)了FPGA動(dòng)態(tài)可重構(gòu)和FPGA配置數(shù)據(jù)的可回讀。
20世紀(jì)70年代末,前蘇聯(lián)計(jì)算機(jī)專家Suetlana P.Kartashev 和 Steven I.Kartashev 博士就提出了動(dòng)態(tài)可重構(gòu)的系統(tǒng)結(jié)構(gòu)的概念,但直到2000年以后,F(xiàn)PGA的動(dòng)態(tài)重構(gòu)研究才在國際上得到了越來越多的關(guān)注[5]。就目前來說,可重構(gòu)系統(tǒng)的劃分有很多種,并沒有完全定型。FPGA動(dòng)態(tài)重構(gòu)根據(jù)重構(gòu)面積的不同,可以分為全局重構(gòu)和局部重構(gòu)。動(dòng)態(tài)全局重構(gòu)是指重新配置FPGA的全部邏輯,重構(gòu)過程中,計(jì)算的中間結(jié)果必須存放在額外的存儲(chǔ)區(qū)中,直到新的功能全部下載完為止,重構(gòu)前后電路相互獨(dú)立,沒有關(guān)聯(lián)[6]。動(dòng)態(tài)局部重構(gòu)是指重新配置FPGA的部分區(qū)域,重構(gòu)過程中,F(xiàn)PGA沒有重構(gòu)部分的工作狀態(tài)不受影響,減小重構(gòu)范圍和單元數(shù)目,可以大大縮短重構(gòu)時(shí)間。
動(dòng)態(tài)重構(gòu)實(shí)現(xiàn)通常有兩種方法:Off-Chip重構(gòu)和Context重構(gòu)[5]。Off-Chip重構(gòu)是通過外圍接口將配置信息傳送到芯片配置存儲(chǔ)器的一種重構(gòu)方式。而對(duì)于具有多重Context結(jié)構(gòu)的DR-FPGA是通過更新配置存儲(chǔ)器和片上Context存儲(chǔ)器的部分或全部配置信息進(jìn)行Context重構(gòu)的。Off-Chip重構(gòu)時(shí),在外部邏輯的控制下,配置信息通過遠(yuǎn)程以太網(wǎng)傳送到配置存儲(chǔ)器(Configuration Memory,CM)中,CM再將配置信息加載到FPGA內(nèi)部的邏輯單元(Logic Cell,LC)中,對(duì)芯片邏輯進(jìn)行全局或局部的功能修改。本設(shè)計(jì)采用基于模塊化設(shè)計(jì)方法對(duì)FPGA局部重構(gòu),將部分不需要更改的邏輯功能劃分到固定模塊中,需要更改的部分邏輯功能劃分到可重構(gòu)模塊中。固定模塊內(nèi)部實(shí)現(xiàn)了對(duì)外接口的控制邏輯功能,PowerPC的Flash擴(kuò)展功能等不需要更改的邏輯功能??芍貥?gòu)模塊內(nèi)實(shí)現(xiàn)數(shù)據(jù)處理算法,對(duì)于不同外設(shè)輸入的數(shù)據(jù)采用不同的數(shù)據(jù)處理算法,即FPGA的重構(gòu)模塊局部重構(gòu)一次,數(shù)據(jù)處理算法更換一次。
在VxWorks嵌入式實(shí)時(shí)操作系統(tǒng)的基礎(chǔ)上,建立硬件透明編程平臺(tái),在實(shí)現(xiàn)遠(yuǎn)程動(dòng)態(tài)可重構(gòu)之前,先對(duì)硬件進(jìn)行預(yù)配置,獲得硬件運(yùn)算加速,降低重構(gòu)帶來的開銷,從而提高系統(tǒng)性能。在該平臺(tái)中,可將動(dòng)態(tài)可重構(gòu)資源,像軟件資源一樣加載和釋放,使其既具有軟件的靈活性,又具有專用集成電路的高效性。硬件透明編程操作系統(tǒng)的體系結(jié)構(gòu),把動(dòng)態(tài)可重構(gòu)計(jì)算系統(tǒng)作為一組由微處理器和硬件加速器組成的共享內(nèi)存的混合處理單元,其編程模型為程序員提供一個(gè)類似于常規(guī)軟件開發(fā)環(huán)境的接口[7]。軟件任務(wù)運(yùn)行在中央處理器(Central Processing U-nit,CPU)上,硬件任務(wù)運(yùn)行在FPGA上。本系統(tǒng)的架構(gòu)分為4層[8,9]:① 應(yīng)用層:為設(shè)計(jì)者提供軟件函數(shù)庫、硬件的函數(shù)庫和應(yīng)用程序接口(Application Program Interface,API)。其中硬件函數(shù)是對(duì)系統(tǒng)中的硬件加速器進(jìn)行操作的函數(shù)。每個(gè)硬件加速器都有一個(gè)加速器調(diào)用函數(shù),當(dāng)需要使用某個(gè)硬件加速器時(shí),調(diào)用相應(yīng)的硬件函數(shù)。硬件函數(shù)分為3個(gè)部分:對(duì)參數(shù)進(jìn)行標(biāo)準(zhǔn)化處理;調(diào)用系統(tǒng)函數(shù)從用戶態(tài)進(jìn)入管理態(tài),對(duì)硬件進(jìn)行管理和配置,并取得設(shè)備地址;將設(shè)備地址作為參數(shù),通過設(shè)備驅(qū)動(dòng)程序,傳遞給硬件加速器,并對(duì)硬件加速器進(jìn)行發(fā)射,最后從結(jié)果寄存器中取回相應(yīng)計(jì)算結(jié)果。②操作系統(tǒng)層:為進(jìn)程通信、同步和硬件函數(shù)調(diào)用提供機(jī)制和支持,并跟蹤和管理可重構(gòu)資源,為網(wǎng)絡(luò)通信提供TCP/IP協(xié)議棧。③軟硬件結(jié)合層:包括硬件任務(wù)配置控制器(簡稱配置控制器)和硬件任務(wù)管理數(shù)據(jù)庫(簡稱任務(wù)管理)。其中配置控制器是與FPGA配置方式密切相關(guān)的控制器,當(dāng)收到調(diào)度器的配置命令后,從配置數(shù)據(jù)庫中取出對(duì)應(yīng)FPGA的配置數(shù)據(jù),完成其配置。任務(wù)管理用來存放事先由綜合工具綜合,并存儲(chǔ)在非易失存儲(chǔ)器中的FPGA的配置數(shù)據(jù)。④硬件層:包括硬件線程和硬件線程接口。硬件線程的創(chuàng)建通常是通過對(duì)FPGA的配置來實(shí)現(xiàn),創(chuàng)建代價(jià)較高,通常在毫秒級(jí),甚至在秒級(jí),對(duì)于VxWorks實(shí)時(shí)操作系統(tǒng)來說必須考慮。但是硬件線程通常創(chuàng)建后就獨(dú)占相應(yīng)計(jì)算資源,不必進(jìn)行任務(wù)切換??芍貥?gòu)資源的大小決定了硬件線程的數(shù)量。硬件透明編程模型如圖1所示。
圖1 硬件透明編程模型
采用PowerPC MPC8349微處理器為主控CPU,主要執(zhí)行網(wǎng)絡(luò)控制等各種控制任務(wù),其程序存儲(chǔ)在Flash中。復(fù)雜可編程邏輯器件(Complex Programmable Logic Device,CPLD)和FPGA均選用Xilinx公司的芯片,其中FPGA為Virtex-5系列芯片(Virtex-5 XC5VSX50T),該系列FPGA基于SRAM工藝,具有配置邏輯可重構(gòu),配置數(shù)據(jù)可回讀功能。配置時(shí)采用SelectMAP模式,F(xiàn)PGA在配置時(shí)鐘的上升沿接收8位配置數(shù)據(jù),同時(shí)也可以通過此接口回讀出FPGA的配置數(shù)[10,11]。此配置模式具有速度快,重構(gòu)時(shí)間短的優(yōu)點(diǎn)。CPLD作為控制讀寫PowerPC、配置FPGA和回讀FPGA配置數(shù)據(jù)的接口電路。遠(yuǎn)程動(dòng)態(tài)可重構(gòu)系統(tǒng)硬件平臺(tái)如圖2所示。4個(gè)功能寄存器:編程寄存器、配置寄存器、監(jiān)測(cè)寄存器和回讀寄存器的邏輯框圖如圖3所示。
圖2 遠(yuǎn)程動(dòng)態(tài)可重構(gòu)系統(tǒng)硬件平臺(tái)
圖3 CPLD內(nèi)部邏輯
CPLD內(nèi)部寄存器配置表如表1所示。
①編程寄存器的地址偏移為0x00,使用數(shù)據(jù)線的DB[2∶0]位分別為 CS、WRITE和 PROGRAM 信號(hào)輸出,用來完成啟動(dòng)FPGA配置時(shí)序的功能。
②配置寄存器的地址偏移為0x02,使用DB[15∶8]位作為FPGA的配置數(shù)據(jù)位,DB[0]位為FPGA的配置時(shí)鐘CCLK,用來從PowerPC數(shù)據(jù)線上接收配置數(shù)據(jù),傳給 FPGA的專用配置數(shù)據(jù)線DATA[7∶0]。
③監(jiān)測(cè)寄存器的地址偏移為0x04,將數(shù)據(jù)線的DB[1∶0]位作為DONE和INIT信號(hào)的輸入。PowerPC開始給FPGA配置數(shù)據(jù)前,檢測(cè)INIT信號(hào),當(dāng)INIT信號(hào)出現(xiàn)上升沿時(shí)開始傳送FPGA的配置數(shù)據(jù);配置完成時(shí),PowerPC檢查FPGA的配置狀態(tài)。當(dāng)DONE信號(hào)變?yōu)楦唠娖綍r(shí),表明配置成功,否則說明配置失敗,重新配置FPGA。
④回讀寄存器的地址偏移為0x06,在回讀FPGA時(shí),PowerPC先將編程寄存器中的CS和WRITE置低,然后通過配置寄存器向FPGA發(fā)送回讀命令,隨后經(jīng)編程寄存器中的CS和WRITE信號(hào)置高,進(jìn)入回讀時(shí)序:利用配置寄存器的DB[0]產(chǎn)生讀時(shí)鐘CCLK,在上升沿時(shí),F(xiàn)PGA輸出配置數(shù)據(jù),存儲(chǔ)到回讀寄存器中。最后PowerPC從回讀寄存器中讀出FPGA數(shù)據(jù)。
表1 CPLD內(nèi)部寄存器配置
對(duì)于FPGA動(dòng)態(tài)部分重構(gòu)而言,其配置比特流相對(duì)于完全重構(gòu)要小很多,在部分重構(gòu)時(shí),未重構(gòu)部分仍然能夠繼續(xù)工作,這樣會(huì)使重構(gòu)的時(shí)間減少。設(shè)FPGA的重構(gòu)時(shí)間為t,配置時(shí)鐘頻率為f,配置數(shù)據(jù)的字節(jié)數(shù)為n,那么重構(gòu)時(shí)間t=n/f。
本嵌入式平臺(tái)中,PowerPC MPC8349提供的配置時(shí)鐘頻率為33 MHz,配置文件大小為2.38 MB(2 502 534 bytes),F(xiàn)PGA一次全部配置時(shí)間約為76 ms。對(duì)可重構(gòu)模塊來說,只需要部分配置比特流數(shù)據(jù)大小為193 324 bytes,重構(gòu)時(shí)間約為59 ms??梢奆PGA部分重構(gòu)比完全重構(gòu)所需要的重構(gòu)時(shí)間要少。
本系統(tǒng)中FPGA配置數(shù)據(jù)的傳輸是在TCP/IP協(xié)議的基礎(chǔ)上實(shí)現(xiàn)的,客戶端與服務(wù)器端建立連接之前要經(jīng)過“三次握手”的過程,保證客戶與服務(wù)器之間的連接是面向連接的,為數(shù)據(jù)傳輸提供可靠保證[12]。PowerPC MPC8349自帶了2個(gè)以太網(wǎng)控制器TSEC(Three-Speed Ethernet Controller),作為以太網(wǎng)接口與外部的PHY芯片相連接。計(jì)算機(jī)端是在Windows環(huán)境下基于Socket編程,編寫一個(gè)簡單的客戶端程序,由計(jì)算機(jī)通過網(wǎng)絡(luò)向系統(tǒng)發(fā)送FPGA配置數(shù)據(jù),供系統(tǒng)重構(gòu)使用。在嵌入式系統(tǒng)端,利用VxWorks操作系統(tǒng)提供的Socket函數(shù)庫,編寫一個(gè)服務(wù)器端程序,用來接收計(jì)算機(jī)上的客戶端發(fā)送來的FPGA配置數(shù)據(jù),并把接收的數(shù)據(jù)存放在數(shù)據(jù)Flash中供PowerPC配置FPGA用。
為了防止配置數(shù)據(jù)在傳輸過程中發(fā)生丟失,如突然掉電和網(wǎng)絡(luò)突然斷開等意外情況,需要在Flash中建立一個(gè)數(shù)據(jù)備份區(qū)、一個(gè)數(shù)據(jù)使用區(qū)和一個(gè)數(shù)據(jù)是否傳輸完成標(biāo)志over_flag。數(shù)據(jù)備份區(qū)存放接收過程中的數(shù)據(jù),數(shù)據(jù)使用區(qū)存放正常配置使用的數(shù)據(jù)。當(dāng)TCP開始傳輸?shù)谝话鼣?shù)據(jù)時(shí),將over_flag置為0,表示配置數(shù)據(jù)還沒有傳輸完畢,此時(shí)數(shù)據(jù)全部存放在FLash的數(shù)據(jù)備份區(qū)中;直到系統(tǒng)將所有配置數(shù)據(jù)傳輸完畢后,將備份區(qū)中的數(shù)據(jù)搬移到數(shù)據(jù)使用區(qū)中,然后將over_flag置為1,表示以后可以用新的數(shù)據(jù)對(duì)FPGA進(jìn)行配置。當(dāng)異常發(fā)生時(shí),只要系統(tǒng)檢測(cè)over_flag不為1,就不會(huì)將數(shù)據(jù)備份區(qū)中不完整的配置數(shù)據(jù)搬移到數(shù)據(jù)使用區(qū)中,出現(xiàn)FPGA重構(gòu)錯(cuò)誤。
面向連接套接字的配置數(shù)據(jù)收發(fā)簡單流程如圖4所示。PowerPC從FPGA的回讀寄存器中讀出配置數(shù)據(jù),通過TCP/IP通信協(xié)議將數(shù)據(jù)傳送到計(jì)算機(jī)中,進(jìn)行保存。通過將FPGA的回讀數(shù)據(jù)和原始配置數(shù)據(jù)進(jìn)行比較,判斷配置數(shù)據(jù)是否存在單粒子翻轉(zhuǎn)效應(yīng)。若有錯(cuò)誤發(fā)生,則重新配置FPGA,從而提高系統(tǒng)的可靠性。
圖4 基于TCP/IP的配置數(shù)據(jù)收發(fā)流程
對(duì)遠(yuǎn)程動(dòng)態(tài)可重構(gòu)的嵌入式系統(tǒng)展開了研究,提出了一種基于VxWorks的硬件透明編程框架。統(tǒng)一的實(shí)時(shí)多任務(wù)編程模型可以有效縮短可重構(gòu)系統(tǒng)的設(shè)計(jì)周期,基于TCP/IP的遠(yuǎn)程重構(gòu)功能也為系統(tǒng)提供了更多靈活性??苫刈x功能可以有效地避免網(wǎng)絡(luò)噪聲、網(wǎng)絡(luò)傳輸引起的錯(cuò)誤,同時(shí)也是一種抗單粒子翻轉(zhuǎn)的有效措施。
可重構(gòu)處理技術(shù)是一種全新的信息處理方法,對(duì)提高電子信息系統(tǒng)的自適應(yīng)能力、可靠性有重要的實(shí)際意義。
[1] DEHON A,WAWRZYNET J.Reconfigurable Computing:What,Why,and Implications for Design Automation[C]∥New Orleans USA:Proc.of the 36th ACM/IEEE Design Automation Conference,1999:610 -615.
[2] 侯 方,王 穎,周學(xué)功,等.支持遠(yuǎn)程動(dòng)態(tài)重構(gòu)的嵌入式系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程,2012,38(7):213 -216.
[3] 王浩波,郭金鵬.星載環(huán)境下可重構(gòu)技術(shù)分析[J].無線電工程,2012,42(1):40 -42.
[4] 周盛雨,孫輝先,陳曉敏,等.實(shí)現(xiàn)FPGA回讀功能的可重構(gòu)系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程,2007,33(12):270-271.
[5] 谷 鑾,徐貴力,王友仁.FPGA動(dòng)態(tài)可重構(gòu)理論及其研究進(jìn)展[J].計(jì)算機(jī)測(cè)量與控制,2007,15(11):1 415-1 418.
[6] 周盛雨,孫輝先,陳曉敏,等.基于FPGA的動(dòng)態(tài)可重構(gòu)系統(tǒng)實(shí)現(xiàn)[J].電子器件,2007,30(2):646 -650.
[7] 鄒 袆,吳 強(qiáng),趙遠(yuǎn)寧.支持動(dòng)態(tài)可重構(gòu)硬件透明編程的預(yù)配置調(diào)度[J].計(jì)算機(jī)工程與應(yīng)用,2008,44(27):52-55.
[8] 周 博,王石記,邱衛(wèi)東,等.SHUM_UCOS_基于統(tǒng)一多任務(wù)模型可重構(gòu)系統(tǒng)的實(shí)時(shí)操作系統(tǒng)[J].計(jì)算機(jī)學(xué)報(bào),2006,29(2):208 -218.
[9] 王 偉,宮玉梅,曹 征.面向自重構(gòu)系統(tǒng)的軟硬件協(xié)同透明編程模型[J].科技信息,2011(22):665-667.
[10]張承暢,嚴(yán)單貴,楊力生,等.基于XCF32P的多 FPGA配置方案[J].計(jì)算機(jī)工程,2010,36(15):260 -261.
[11]屈 杰,朱光喜,譚 力,等.基于網(wǎng)絡(luò)和PowerPC系統(tǒng)的FPGA遠(yuǎn)程配置[J].無線電通信技術(shù),2008,34(1):45-47.
[12]劉永恩,王俊芳.FPGA遠(yuǎn)程升級(jí)技術(shù)的分析與實(shí)現(xiàn)[J].無線電工程,2012,42(9):48-60.