王 珊,張建志
(1.中國電子科技集團公司第五十四研究所,河北石家莊050081;2.空軍駐石家莊地區軍事代表室,河北石家莊050081)
基于FPGA的動態可重構系統,可在運行時動態改變系統部分邏輯電路的功能,而不影響其他邏輯電路的正常運行,既充分發揮了硬件的高效性,又提供了軟件的編程靈活性[1]。隨著FPGA的廣泛應用,特別是將其應用于較為偏僻區域時,傳統的FPGA可重構技術就顯現出諸多不便。隨著網絡技術的不斷發展,支持遠程動態重構,具有在線更新和維護能力的嵌入式系統越來越多地應用在無人值守或特殊環境中。在系統中運用動態可重構系統設計及互聯網可重構邏輯(Internet Reconfigurable Logic,IRL)設計技術,實現對軟/硬件任務的遠程更新和配置,極大地方便了可重構系統的設計過程和更新維護過程[2,3]。可重構系統通常在兩種情況下對FPGA進行重新配置[4]:① FPGA邏輯功能需要改變,例如功能升級;②FPGA配置數據發生錯誤而導致功能失效,如在空間輻射環境下的單粒子翻轉(Single Event Upsets,SEU)效應導致配置數據錯誤或勘正錯誤。本文實現了在PowePC+FPGA的異構多核體系結構上的遠程動態可重構的嵌入式系統設計,在軟硬件無縫集成的基礎上提出了基于Vxworks操作系統的硬件透明編程框架,給出了具體的硬件平臺設計和軟件設計流程,實現了FPGA動態可重構和FPGA配置數據的可回讀。
20世紀70年代末,前蘇聯計算機專家Suetlana P.Kartashev 和 Steven I.Kartashev 博士就提出了動態可重構的系統結構的概念,但直到2000年以后,FPGA的動態重構研究才在國際上得到了越來越多的關注[5]。就目前來說,可重構系統的劃分有很多種,并沒有完全定型。FPGA動態重構根據重構面積的不同,可以分為全局重構和局部重構。動態全局重構是指重新配置FPGA的全部邏輯,重構過程中,計算的中間結果必須存放在額外的存儲區中,直到新的功能全部下載完為止,重構前后電路相互獨立,沒有關聯[6]。動態局部重構是指重新配置FPGA的部分區域,重構過程中,FPGA沒有重構部分的工作狀態不受影響,減小重構范圍和單元數目,可以大大縮短重構時間。
動態重構實現通常有兩種方法:Off-Chip重構和Context重構[5]。Off-Chip重構是通過外圍接口將配置信息傳送到芯片配置存儲器的一種重構方式。而對于具有多重Context結構的DR-FPGA是通過更新配置存儲器和片上Context存儲器的部分或全部配置信息進行Context重構的。Off-Chip重構時,在外部邏輯的控制下,配置信息通過遠程以太網傳送到配置存儲器(Configuration Memory,CM)中,CM再將配置信息加載到FPGA內部的邏輯單元(Logic Cell,LC)中,對芯片邏輯進行全局或局部的功能修改。本設計采用基于模塊化設計方法對FPGA局部重構,將部分不需要更改的邏輯功能劃分到固定模塊中,需要更改的部分邏輯功能劃分到可重構模塊中。固定模塊內部實現了對外接口的控制邏輯功能,PowerPC的Flash擴展功能等不需要更改的邏輯功能。可重構模塊內實現數據處理算法,對于不同外設輸入的數據采用不同的數據處理算法,即FPGA的重構模塊局部重構一次,數據處理算法更換一次。
在VxWorks嵌入式實時操作系統的基礎上,建立硬件透明編程平臺,在實現遠程動態可重構之前,先對硬件進行預配置,獲得硬件運算加速,降低重構帶來的開銷,從而提高系統性能。在該平臺中,可將動態可重構資源,像軟件資源一樣加載和釋放,使其既具有軟件的靈活性,又具有專用集成電路的高效性。硬件透明編程操作系統的體系結構,把動態可重構計算系統作為一組由微處理器和硬件加速器組成的共享內存的混合處理單元,其編程模型為程序員提供一個類似于常規軟件開發環境的接口[7]。軟件任務運行在中央處理器(Central Processing U-nit,CPU)上,硬件任務運行在FPGA上。本系統的架構分為4層[8,9]:① 應用層:為設計者提供軟件函數庫、硬件的函數庫和應用程序接口(Application Program Interface,API)。其中硬件函數是對系統中的硬件加速器進行操作的函數。每個硬件加速器都有一個加速器調用函數,當需要使用某個硬件加速器時,調用相應的硬件函數。硬件函數分為3個部分:對參數進行標準化處理;調用系統函數從用戶態進入管理態,對硬件進行管理和配置,并取得設備地址;將設備地址作為參數,通過設備驅動程序,傳遞給硬件加速器,并對硬件加速器進行發射,最后從結果寄存器中取回相應計算結果。②操作系統層:為進程通信、同步和硬件函數調用提供機制和支持,并跟蹤和管理可重構資源,為網絡通信提供TCP/IP協議棧。③軟硬件結合層:包括硬件任務配置控制器(簡稱配置控制器)和硬件任務管理數據庫(簡稱任務管理)。其中配置控制器是與FPGA配置方式密切相關的控制器,當收到調度器的配置命令后,從配置數據庫中取出對應FPGA的配置數據,完成其配置。任務管理用來存放事先由綜合工具綜合,并存儲在非易失存儲器中的FPGA的配置數據。④硬件層:包括硬件線程和硬件線程接口。硬件線程的創建通常是通過對FPGA的配置來實現,創建代價較高,通常在毫秒級,甚至在秒級,對于VxWorks實時操作系統來說必須考慮。但是硬件線程通常創建后就獨占相應計算資源,不必進行任務切換。可重構資源的大小決定了硬件線程的數量。硬件透明編程模型如圖1所示。

圖1 硬件透明編程模型
采用PowerPC MPC8349微處理器為主控CPU,主要執行網絡控制等各種控制任務,其程序存儲在Flash中。復雜可編程邏輯器件(Complex Programmable Logic Device,CPLD)和FPGA均選用Xilinx公司的芯片,其中FPGA為Virtex-5系列芯片(Virtex-5 XC5VSX50T),該系列FPGA基于SRAM工藝,具有配置邏輯可重構,配置數據可回讀功能。配置時采用SelectMAP模式,FPGA在配置時鐘的上升沿接收8位配置數據,同時也可以通過此接口回讀出FPGA的配置數[10,11]。此配置模式具有速度快,重構時間短的優點。CPLD作為控制讀寫PowerPC、配置FPGA和回讀FPGA配置數據的接口電路。遠程動態可重構系統硬件平臺如圖2所示。4個功能寄存器:編程寄存器、配置寄存器、監測寄存器和回讀寄存器的邏輯框圖如圖3所示。

圖2 遠程動態可重構系統硬件平臺

圖3 CPLD內部邏輯
CPLD內部寄存器配置表如表1所示。
①編程寄存器的地址偏移為0x00,使用數據線的DB[2∶0]位分別為 CS、WRITE和 PROGRAM 信號輸出,用來完成啟動FPGA配置時序的功能。
②配置寄存器的地址偏移為0x02,使用DB[15∶8]位作為FPGA的配置數據位,DB[0]位為FPGA的配置時鐘CCLK,用來從PowerPC數據線上接收配置數據,傳給 FPGA的專用配置數據線DATA[7∶0]。
③監測寄存器的地址偏移為0x04,將數據線的DB[1∶0]位作為DONE和INIT信號的輸入。PowerPC開始給FPGA配置數據前,檢測INIT信號,當INIT信號出現上升沿時開始傳送FPGA的配置數據;配置完成時,PowerPC檢查FPGA的配置狀態。當DONE信號變為高電平時,表明配置成功,否則說明配置失敗,重新配置FPGA。
④回讀寄存器的地址偏移為0x06,在回讀FPGA時,PowerPC先將編程寄存器中的CS和WRITE置低,然后通過配置寄存器向FPGA發送回讀命令,隨后經編程寄存器中的CS和WRITE信號置高,進入回讀時序:利用配置寄存器的DB[0]產生讀時鐘CCLK,在上升沿時,FPGA輸出配置數據,存儲到回讀寄存器中。最后PowerPC從回讀寄存器中讀出FPGA數據。

表1 CPLD內部寄存器配置
對于FPGA動態部分重構而言,其配置比特流相對于完全重構要小很多,在部分重構時,未重構部分仍然能夠繼續工作,這樣會使重構的時間減少。設FPGA的重構時間為t,配置時鐘頻率為f,配置數據的字節數為n,那么重構時間t=n/f。
本嵌入式平臺中,PowerPC MPC8349提供的配置時鐘頻率為33 MHz,配置文件大小為2.38 MB(2 502 534 bytes),FPGA一次全部配置時間約為76 ms。對可重構模塊來說,只需要部分配置比特流數據大小為193 324 bytes,重構時間約為59 ms。可見FPGA部分重構比完全重構所需要的重構時間要少。
本系統中FPGA配置數據的傳輸是在TCP/IP協議的基礎上實現的,客戶端與服務器端建立連接之前要經過“三次握手”的過程,保證客戶與服務器之間的連接是面向連接的,為數據傳輸提供可靠保證[12]。PowerPC MPC8349自帶了2個以太網控制器TSEC(Three-Speed Ethernet Controller),作為以太網接口與外部的PHY芯片相連接。計算機端是在Windows環境下基于Socket編程,編寫一個簡單的客戶端程序,由計算機通過網絡向系統發送FPGA配置數據,供系統重構使用。在嵌入式系統端,利用VxWorks操作系統提供的Socket函數庫,編寫一個服務器端程序,用來接收計算機上的客戶端發送來的FPGA配置數據,并把接收的數據存放在數據Flash中供PowerPC配置FPGA用。
為了防止配置數據在傳輸過程中發生丟失,如突然掉電和網絡突然斷開等意外情況,需要在Flash中建立一個數據備份區、一個數據使用區和一個數據是否傳輸完成標志over_flag。數據備份區存放接收過程中的數據,數據使用區存放正常配置使用的數據。當TCP開始傳輸第一包數據時,將over_flag置為0,表示配置數據還沒有傳輸完畢,此時數據全部存放在FLash的數據備份區中;直到系統將所有配置數據傳輸完畢后,將備份區中的數據搬移到數據使用區中,然后將over_flag置為1,表示以后可以用新的數據對FPGA進行配置。當異常發生時,只要系統檢測over_flag不為1,就不會將數據備份區中不完整的配置數據搬移到數據使用區中,出現FPGA重構錯誤。
面向連接套接字的配置數據收發簡單流程如圖4所示。PowerPC從FPGA的回讀寄存器中讀出配置數據,通過TCP/IP通信協議將數據傳送到計算機中,進行保存。通過將FPGA的回讀數據和原始配置數據進行比較,判斷配置數據是否存在單粒子翻轉效應。若有錯誤發生,則重新配置FPGA,從而提高系統的可靠性。

圖4 基于TCP/IP的配置數據收發流程
對遠程動態可重構的嵌入式系統展開了研究,提出了一種基于VxWorks的硬件透明編程框架。統一的實時多任務編程模型可以有效縮短可重構系統的設計周期,基于TCP/IP的遠程重構功能也為系統提供了更多靈活性。可回讀功能可以有效地避免網絡噪聲、網絡傳輸引起的錯誤,同時也是一種抗單粒子翻轉的有效措施。
可重構處理技術是一種全新的信息處理方法,對提高電子信息系統的自適應能力、可靠性有重要的實際意義。
[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] 侯 方,王 穎,周學功,等.支持遠程動態重構的嵌入式系統設計[J].計算機工程,2012,38(7):213 -216.
[3] 王浩波,郭金鵬.星載環境下可重構技術分析[J].無線電工程,2012,42(1):40 -42.
[4] 周盛雨,孫輝先,陳曉敏,等.實現FPGA回讀功能的可重構系統設計[J].計算機工程,2007,33(12):270-271.
[5] 谷 鑾,徐貴力,王友仁.FPGA動態可重構理論及其研究進展[J].計算機測量與控制,2007,15(11):1 415-1 418.
[6] 周盛雨,孫輝先,陳曉敏,等.基于FPGA的動態可重構系統實現[J].電子器件,2007,30(2):646 -650.
[7] 鄒 袆,吳 強,趙遠寧.支持動態可重構硬件透明編程的預配置調度[J].計算機工程與應用,2008,44(27):52-55.
[8] 周 博,王石記,邱衛東,等.SHUM_UCOS_基于統一多任務模型可重構系統的實時操作系統[J].計算機學報,2006,29(2):208 -218.
[9] 王 偉,宮玉梅,曹 征.面向自重構系統的軟硬件協同透明編程模型[J].科技信息,2011(22):665-667.
[10]張承暢,嚴單貴,楊力生,等.基于XCF32P的多 FPGA配置方案[J].計算機工程,2010,36(15):260 -261.
[11]屈 杰,朱光喜,譚 力,等.基于網絡和PowerPC系統的FPGA遠程配置[J].無線電通信技術,2008,34(1):45-47.
[12]劉永恩,王俊芳.FPGA遠程升級技術的分析與實現[J].無線電工程,2012,42(9):48-60.