馬小霞,李 園,賈露娟,郭 睿
(蘭州空間技術物理研究所,蘭州 730000)
現場可編輯門陣列(field-programmable gate array,FPGA)是當今數字系統(tǒng)設計的主要硬件平臺,而Xilinx公司是最早也是最大的FPGA生產商,其芯片設計技術、開發(fā)軟件和相關解決方案在業(yè)界擁有廣泛的客戶群[1]。其研制的SRAM型FPGA由于具有低成本、良好的重配置和較短的開發(fā)周期等特點,在航空航天嵌入式領域取得了廣泛應用[2]。尤其側重于高性能應用,性能滿足各類高端應用的Virtex系列FPGA。
由于SRAM型FPGA在高輻射環(huán)境中極易受單粒子翻轉(single event upset,SEU)的影響,造成FPGA邏輯錯誤和功能中斷[3-5],因此在空間應用時必須對其采取加固措施。目前,使用最廣泛的加固技術是配置刷新加三模冗余。三模冗余技術通過對3個相同的電路進行集成,然后對其運算結果進行表決[6],保證即使其中有一個電路出現錯誤也不會影響結果的正確性。
TMRTool 9.2i是Xilinx公司與桑迪亞國家實驗室合作,針對Virtex系列FPGA專門設計的一款三模冗余實現工具,僅需要簡單的設置,便可實現軟件模塊自動三模。根據TMRTool開發(fā)流程,工具修改綜合后網表信息,修正后的網表文件作為輸入再進行布局布線,最終實現FPGA軟件。本文主要分析TMRTool對Virtex-II FPGA XQR2V3000網表文件的修正過程及修正前后軟件布局布線結果差異,旨在了解三模冗余工具的處理機理,在電路設計和TMRTool使用時進行正確處理,防止軟件經三模冗余處理后工作異常。
TMRTool開發(fā)流程如圖1所示,其中Step2是影響軟件三模冗余前后布局布線結果的重要步驟。
圖1 TMRTool 開發(fā)流程[7]Fig.1 TMRTool development flow
TMRTool開發(fā)流程分為4步:
第1步:導入綜合后的.ngc/.ngo網表文件。導入文件層次結構與設計層次一致。
第2步:編輯三模冗余類型和實現屬性。綜合工具將可綜合的VHDL文件或Verilog文件編譯成由與門、或門、非門、RAM、寄存器等基本邏輯單元組成的邏輯連接網表,以這些基本邏輯單元或基本邏輯單元的組合為模塊按照三模冗余要求設置部件為相應的類型。每個部件可選擇Don’t touch、Coverage、Standard、Custom四種類型。同時,工具支持選擇XTMR實現屬性。
第3步:實現三模冗余。工具按照屬性設置和三模類型實現自動三模。
第4步:輸出實現文件。
在未設置屬性時,TMRTool工具按照默認屬性設置實現三模冗余,但不同的處理屬性設置導致TMRTool對網表信息的修正結果不同,以此為輸入的布局布線結果不同。
實現XTMR屬性包括可選擇的處理步驟和處理設置。處理設置包括設計類型Design Type設置、Vcc/Gnd信號獲得方式Power Source設置,默認三模輸出類型Default Output XTMR Type以及是否移除移位寄存器,本文不做具體含義解釋,重點介紹處理步驟含義。
處理步驟具體包括以下5步,實現三模冗余時,TMRTool根據是否勾選依次進行各步處理,默認TMRTool全部勾選。
針對Virtex-II FPGA,ISE庫提供了多種類型的寄存器組件,如FD_1、FDC、FDP等,但布局布線時,所有的寄存器組件均映射到配置邏輯(CLB/Slice)寄存器,CLB只有一種類型的寄存器。
該步操作使寄存器未使用的輸入端口被綁定到FPGA內部半鎖結構電路上,使其具有確定的邏輯連接。
半鎖結構電路不占用布線資源但其對SEU敏感且無法用配置回讀的方式進行檢測[8-9],因此在空間應用時需移除該結構。TMRTool修改網表文件使寄存器未使用的輸入端口連接至可靠的邏輯電平Vcc/Gnd上代替半鎖結構。
Vcc/Gnd的獲得方式有3種,具體如下:
1)連接至邏輯1的引腳;
2)連接至邏輯0的引腳;
3)內部結構獲得。所有Xilinx產品均設計了Vcc/Gnd[8]。
通過寄存器替換和Vcc/Gnd提取操作,TMRTool移除了半鎖結構,同時使得寄存器未使用端口連接至確定的邏輯電平Vcc/Gnd。
該步操作的作用是重命名設計部件名稱使得設計中所有的部件名稱唯一化,防止因部件名稱重復引起三模冗余操作異常。
經1.1-1.3步預處理后,網表文件具備了三模冗余的狀態(tài),TMRTool將按照指定的三模冗余類型和XTMR屬性實現設計三模冗余。除部件三模冗余類型被設為Don’t touch的情況外,設計中部件被復制3份,同時插入表決器和反饋邏輯,以表決器輸出作為部件的最終輸出。
經三模冗余后,設計中增加了一些空的結構,該結構可能在布局布線時引起異常。經該步處理,設計中多余的結構將被移除。
綜上,根據TMRTool開發(fā)流程、XTMR屬性設置和三模類型,TMRTool修改了網表信息,以TMRTool輸出的EDIF文件作為輸入進行布局布線,最終實現具備三模冗余容錯的FPGA軟件設計。
下面在布局布線屬性設置相同的情況下對比TMRTool處理前后軟件的布局布線結果和最終實現結果。
布局布線使軟件映射至網表約定的FPGA器件對應位置。Virtex系列FPGA器件結構復雜,但組成結構固定。Virtex-II器件每個CLB/Slice包含兩個LUT和兩個寄存器[10],如圖2所示??梢詫⑵渑渲脼榉植际絉AM、移位寄存器SRL、查找表LUT、觸發(fā)器FF或鎖存器LATCH使用。其中寄存器的接口如圖3所示。
圖2 Virtex-II Slice結構[11]Fig.2 Virtex-II Slice configuration
圖3 Virtex-II Slice中寄存器/鎖存器結構[11]Fig.3 Register / Latch configuration in a slice
每個寄存器包括一個數據輸出端口Q,一個數據輸入端口D,一個時鐘端口CK,一個片選端口CE,SR端和REV端均為寄存器的置位/復位端[10-11]。所有寄存器共用SR和REV。根據SR和REV連接狀態(tài)及寄存器屬性,每個寄存器可以被設置處于7種工作模式,如表1所列。
表1 寄存器初始狀態(tài)說明Tab.1 Register initial status under different mode
1)寄存器在配置或全局初始化后的狀態(tài)由INIT0和INIT1屬性確定。
2)SR強制寄存器進入SRHIGH或SRLOW屬性指定的狀態(tài)。
3)當SR被使用時,REV強制寄存器進入相反的狀態(tài)。
當CLB/Slice被配置為寄存器且軟件設計了復位時,經布局布線后寄存器的連接狀態(tài)發(fā)生改變,如圖4和圖5所示,綠色表示端口連接了信號,紅色表示端口未連接信號。經TMRTool工具處理后的寄存器REV引腳至internal_gnd,該信號由邏輯電平Vcc/Gnd決定。
綜上可知,TMRTool影響寄存器的初始工作狀態(tài)。
圖4 未經TMRTool處理時寄存器端口連接Fig.4 Register port connection status before TMRTool processing
圖5 經TMRTool處理后寄存器端口連接Fig.5 Register port connection status after TMRTool processing
基于Xilinx ISE9.2.03i集成開發(fā)環(huán)境設計一個試驗系統(tǒng)驗證TMRTool對FPGA功能的影響。
系統(tǒng)框架如圖6所示,系統(tǒng)功能如下:當DSP將FPGA激勵控制寄存器置為“0x000000AA”時,FPGA按圖7輸出脈沖,控制繼電器吸合或斷開,從而實現激勵器伸縮桿的伸出或縮回;若DSP寫其他值則FPGA不響應;若本次動作時序未執(zhí)行完畢則不響應下一條繼電器控制指令。在上電或復位狀態(tài)下,FPGA不輸出控制信號,默認輸出信號為低電平,繼電器不動作。FPGA復位信號由DSP給出。
圖6 試驗系統(tǒng)框架圖Fig.6 Testing system diagram
使用Verilog語言實現該FPGA試驗程序。如圖7所示,設計中控制信號jiq_ctrl_en、計時寄存器、DSP寫數據保存寄存器及其他內部寄存器初值或復位值均為0;當條件1)、條件2)和條件3)均滿足時置jiq_ctrl_en為1并開始計時;當1600ms計時結束,置jiq_ctrl_en為0并清除計時,等待下次條件滿足。在jiq_ctrl_en為1時,軟件根據計時寄存器的值輸出高脈沖,控制繼電器動作。因此jiq_ctrl_en的狀態(tài)變化是影響FPGA功能的關鍵。
圖7 試驗程序設計Fig.7 Testing software design
將該試驗程序按圖1流程進行不同的處理,查看jiq_ctrl_en寄存器的端口連接情況及繼電器動作情況,詳見表2和表3所列。
表2 TMRTool工具不同處理操作下寄存器端口連接狀態(tài)Tab.2 Register port connection status under different TMRTool’s operations
表3 TMRTool工具不同處理操作下繼電器動作情況Tab.3 Relays status under different TMRTool’s operations
從試驗結果可知,經TMRTool處理后系統(tǒng)響應與需求不符。首先,系統(tǒng)加電FPGA配置完成后,若無復位,理論上系統(tǒng)應處于上電默認狀態(tài)。在DSP未進行寫操作時,繼電器不動作。但實際上,在無復位信號的3.7s內,繼電器發(fā)生了非預期的動作;第二,移除半鎖操作改變了jiq_ctrl_en寄存器REV端口的連接狀態(tài);第三,FPGA復位時機和Vcc/Gnd引腳連接與系統(tǒng)上電狀態(tài)有關;第四,當不三模冗余時,系統(tǒng)響應與需求一致。根據Virtex-II FPGA寄存器工作模式,當SR使用但無效時,REV強制寄存器進入與初值相反的狀態(tài),導致jiq_ctrl_en寄存器上電后直接輸出邏輯1,時序控制計數器開始計數,進而FPGA輸出控制脈沖,繼而導致繼電器動作,系統(tǒng)功能出現與需求不符的現象,說明三模冗余影響寄存器的初始工作狀態(tài)。
使用TMRTool實現FPGA軟件三模冗余容錯處理時,除3倍基本邏輯單元和插入表決器,工具還改變了所有寄存器未使用端口的連接狀態(tài)。SR和REV作為寄存器的置位/復位端,其連接狀態(tài)直接決定了寄存器的初始狀態(tài)。SR和REV端口連接狀態(tài)的改變,改變了軟件的上電狀態(tài),導致軟件進入非預期初始態(tài),不受控制地直接輸出非法時序,存在使設備異常動作的風險。
在航天領域,要求設備上電都有明確的初始狀態(tài),因此,在使用TMRTool進行三模冗余時,硬件設備必須滿足工具應用需求,確保電路上有3個FPGA引腳連接至固定電平,同時TMRTool工具屬性設置以及約束文件引腳綁定與電路設計一致,防止三模冗余引入上電狀態(tài)異常問題。