楊 燕,黃宇平
(1.廣西師范學院數學科學學院,廣西 南寧530001;2.廣西機電職業技術學院電氣工程系,廣西 南寧 530007)
隨著數字電路系統設計的規模增大,復雜性提高,系統運行的可靠性問題日益引人注目。特別在一些特殊的應用場合,例如電子設備需要長期工作且運行環境惡劣、技術人員又無法及時提供維修的場合,對于系統自適應能力的要求就更為迫切。人們希望在故障發生后,系統能夠自動檢測出錯誤,并啟動系統的自修復機制以完成錯誤的修正,從而維持系統的正常運行。
基于SRAM編程的FPGA不僅使在系統可編程(ISP)和在系統可重新編程(ISR)得以實現,而且使FPGA動態可重構技術得以創立。基于FPGA的數字電子系統的動態重構特點,為系統故障特別是不可預料故障的動態修復,提供了實現的可能性。
對于隨機故障的具有容錯能力的數字系統的研究,是容錯系統的一個不可忽視的主要研究方向,目前國內已有學者提出利用基于SRAM技術的現場可編程門陣列FPGA,通過芯片重新布局布線及網表數據重載,實現邏輯功能的現場重構和修改,而正是這種系統內的動態重構特點,為系統內的隨機故障,特別是對于不可預料故障的動態修復,提供了實現的可能性。
而國外則另辟蹊徑,從硬件電路的角度出發,嘗試將進化算法與可編程器件有機結合起來,構成了“仿生硬件”(進化型仿生硬件和胚胎型仿生硬件)。進化型仿生硬件,可以通過進化來或得滿足給定要求的電路和系統結構,進而使系統可自動地、實時地調整其內部結構,以適應內部條件和外部環境的改變。而胚胎型仿生硬件,則能像生物一樣自繁殖和自修復。
本文針對目前國內外在自適應、自修復領域的研究成果及研究方向,主要分析FPGA電子器件實現容錯的基本原理,方法并對該技術的發展趨勢給出了展望。
提高系統可靠性的基本方法,有故障預防和故障容錯。
故障預防,是抑制故障的產生;而容錯,則是指系統運行出現錯誤時,依靠內部容錯機制仍能繼續保持其正常工作。
容錯系統最基本的設計方法,是利用冗余的邏輯資源來屏蔽故障對系統的影響。但對于不可預料的故障,根本無法用若干有限模型去描述,傳統的冗余模塊的容錯設計也無能為力。
對于隨機故障的具有容錯能力的數字系統的研究,是容錯系統的一個不可忽視的主要研究方向。實時電路重構,是解決隨機故障容錯的最佳方案。實時電路重構,就是在電子系統的工作狀態下,動態改變電路的結構。這主要是通過對系統中的可編程器件,進行重配置或部分重配置來實現的。利用這一技術設計的可重構系統,能輕而易舉地將系統軟件實現和系統硬件實現的優點合二為一。
在可重構系統中,硬件信息(可編程器件的配置信息)也可以像軟件程序一樣,被動態調用或修改。這樣既保留了硬件計算的性能,又兼具軟件的靈活性。形象地說,可重構系統就是把硬件軟件化,使硬件可以像軟件一樣被使用。
可重構系統的重構方式,按重構粒度的大小不同,可分為模塊級重構和元件級重構。
(1)模塊級重構。此時,將改變某一個或若干個子模塊的結構,不僅需要電路邏輯的改變,連線資源也需重新進行分配。通常此類重構時,系統可能需要系統暫停工作,故存在靈活性不足的缺陷,使得此類重構不適合應用于在線系統自修復的場合。
(2)元件級重構。在重構時僅改變若干元件的邏輯功能。通常情況下,重構時連線資源的分配狀況不作修改,重構時系統可以邊重構邊工作。這種重構系統設計復雜,但靈活性大,能充分發揮出硬件運算的效率,較適合應用于在線修復。
可重構系統還可按照重新配置方式的不同,分為動態可重構(圖2)和靜態可重構(圖1)。
(1)靜態重構。必須中斷當前系統運行任務,來進行新的數據流配置,主要針對具有重構能力但配置數據時速度較慢的器件。

圖1 靜態重構系統
(2)動態重構。在改變電路的功能同時,仍然可以保證電路的動態接續。動態重構可以使FPGA內的硬件資源實現分時復用,提高了FPGA資源的使用率。

圖2 動態重構系統
可重構系統還可就其實現重構的面積不同,分為全局重構和局部重構。
(1)全局重構。對FPGA器件或系統能且只能進行全部的重新配置,在配置過程中,計算的中間結果,必須取出存放在額外的存儲區,直到新的配置功能全部下載完為止,重構前后電路相互獨立,沒有關聯。
(2)局部重構。對重構器件或系統的一部分進行重新配置,而在此過程中,其余部分的工作狀態不受影響。這種重構方式減小了重構范圍和單元數目,從而可以大大縮短重構時間,具有相當的優勢。圖3給出了一種典型的FPGA部分動態重構的應用示意圖。

圖3 局部動態可重構應用
FPGA局部動態可重構技術的特征,就是將整體按功能或按時序分解為不同的組合,并根據實際需要,分時對芯片進行局部動態重構,以較少的硬件資源實現較大的時序系統整體功能。圖3給出一種典型的FPGA局部動態可重構。
由圖4可以看出,在外部邏輯的控制下,可以實時動態地對芯片邏輯實現局部重構。通過控制布局、布線的資源,實現系統的動態重構。

圖4 典型的FPGA局部動態可重構原理圖
Xilinx的Virtex系列支持局部重構。Virtex-2和Virtex-2 Pro重構存儲介質可被看作是長方形的bit陣列(array),該陣列由1 bit寬、整個陣列高的垂直幀(frame)組成,該幀(圖5)是存儲介質局部可重構的最小單元。

圖5 Virtex FPGA重構存儲幀
EAPR (Early-Access Partial Reconfiguration)是Xilinx推薦的一種DPR(dynamical Partial Reconfiguration)設計方法,基于EAPR的動態可重構方法的設計流程(圖6)包括:
(1)頂層模塊設計和綜合。頂層模塊描述必須只包括使用黑盒子實例化的I/O、時鐘緩存、靜態模塊、局部重構模塊、總線宏以及信號聲明;
(2)靜態模塊的設計與綜合。靜態模塊是在動態可重構執行時間狀態不變的模塊,因此這一步與傳統硬件描述語言設計方法一樣,但是靜態模塊不能包括任何時鐘和復位邏輯,在綜合時不加入I/O緩存;
(3)每個可重配置子模塊的設計和綜合。每個局部重構子模塊要保證沒有時鐘邏輯,并且具有相同的端口定義和實體名字。
除了傳統的I/O端口位置約束,還要對頂層的時鐘緩存添加位置約束,對可重構區域添加面積約束,還可以添加布局布線和時序約束,在可重構區域的邊界添加總線宏的位置約束。
實現靜態模塊產生的信息,將用于可重構模塊的實現階段,所以必須首先完成靜態模塊的實現。實現靜態模塊包括3個步驟:轉換、映射和布局布線。
在靜態模塊實現之后,每個局部重構子模塊必須分別進行實現。
局部重構設計流程的最后一步,是合并頂層、靜態模塊和重構模塊。在合并這一步中,從重構模塊和靜態模塊中建立一個完整的設計。
下載bit流文件到開發板上運行驗證。

圖6 EAPR的動態可重構方法的設計流程
隨著FPGA的發展,超大規模、高速低耗的FPGA不斷推陳出新,新一代的FPGA集成了中央處理器或數字處理器內核,可在同一片FPGA上進行軟硬件協同設計。FPGA的動態局部重構技術有以下發展趨勢。
(1)重構粒度單元更小。目前最新的Xilinx Virtex-4系列和Virtex-5系列的最小重構單元做的更小,其每個最小單元只有13l2 bit,可以在垂直方向設計多個動態重構模型,提高設計的靈活性。
(2)FPGA實時重構。隨著片上操作系統技術的成熟,越來越多的FPGA片內包含著嵌入式處理器核,通過嵌入式處理器核利用內部配置端口,不僅可以使動態重構設計更加靈活,而且可以提高動態重構的下載速度,這種特性對于實時任務的處理尤為重要。例如,Xilinx FPGA推出了內部配置接口ICAP(Internal Reconfiguration Access Ports),該端口具有兩條并行的輸入輸出數據通道。當ICAP接口和片內處理器相互配合,就可以設計一個具有自控能力的動態重構系統。
國外動態可重構研究比較多,如自重構可適應FIR濾波器的設計和軟件無線電設計等。國內動態可重構研究相對較少,目前動態局部可重構技術發展的水平,遠沒有達到成熟的地步,但是動態局部可重構技術自身具有的優勢,使得這一領域成為FPGA研究的熱點問題,相信未來此技術會有廣闊的應用前景。
致謝
本研究得到廣西師范學院基礎研究基金資助。
[1]谷 鑾,徐貴力,王友仁,等.FPGA動態可重構理論及其研究進展[J].計算機測量與控制,2007,15(11):1415-1418.
[2]吳冬冬,楊曉君,劉新春,等.一種基于FPGA的可重構計算系統設計[J].計算機工程與應用,2006,42(21):74-77.
[3]羅毅輝,李仁發,熊曙初.可重構計算系統的研究與應用[J].計算機應用研究,2006,23(1):154-156.
[4]覃祥菊,朱明程,張太鎰,等.FPGA動態可重構技術原理及實現方法分析[J].電子器件,2004,21(2):277-282.
[5]蔡啟先,蔡洪波,黃曉璐,等.基于的動態可重構體系結構[J].計算機應用,2006,26(7):1741-1743.
[6]Lohn J,Hornby G.Evolvable Hardware:Using Evolutionary Computation to Design and Optimize Hardware Systems[J].IEEE Computational Intelligence Magazine,2006,1(1):19-27.