楊 春 楊光倫 馬振球 王一民
(北京全路通信信號研究設計院有限公司,北京 100073)
在日益復雜的現代列車控制系統中,以往單純的繼電控制已很難滿足要求,因而可編程電子器件得到更廣泛應用。然而可編程電子器件的復雜性使得在設計和使用中可能會出現難以預知的錯誤和故障進而威脅系統的安全性,因此必須采取嚴格的流程管控和適當的設計策略來保證系統的安全運行[1~4]。
在目前的列車控制系統中,FPGA/CPLD等可編程邏輯器件使用越來越多,FPGA/CPLD的設計流程與基于軟件的微處理器系統類似,可以參考EN50129[2]和EN50128[3]等相關標準來保證設計活動,將FPGA芯片看作硬件,而將FPGA代碼設計看作軟件,通過軟件設計和硬件設計的相關流程方法來保證FPGA的功能安全性。但是FPGA/CPLD與微處理器又有很大的區別,微處理器的硬件功能固定,而FPGA/CPLD的硬件邏輯功能是由可編程的查找表、互聯矩陣、可編程IO以及其他嵌入式模塊來實現,需要考慮實際運行中的時序、SEE(single event effect)[5]等相關問題,因此FPGA/CPLD的安全設計需要額外的考慮,需要參考DO-254[4]與IEC61508[1]等相關標準。
FPGA基本上都是由基本的可編程邏輯單元和可編程互聯線組成,每個邏輯單元由查找表,寄存器以及選擇器組成,查找表可用來實現基本的組合邏輯,通過編程將這些查找表、寄存器,選擇器連接起來可以實現任意的組合邏輯和時序邏輯;另外FPGA中也會嵌入一些硬IP核,如嵌入式RAM塊、乘法器、PLL、微處理器硬核等,通過可編程互聯線將這些模塊連接起來,并接上可編程IO,就可以實現設計者想要的復雜功能。
根據控制邏輯單元功能及連線的配置存儲器的實現方法FPGA可分為:反熔絲型FPGA、EEPROM/FLASH型FPGA和SRAM型FPGA。其中EEPROM/FLASH型FPGA和SRAM型FPGA是可以多次編程的,反熔絲型FPGA和EEPROM/FLASH型FPGA是非易失的,掉電后能保持邏輯配置不丟失,而SRAM型FPGA是易失的,需要外部配置FLASH在每次上電時對FPGA進行重新配置。目前SRAM型FPGA技術是最先進,使用最廣泛的,但SRAM型FPGA易受SEE和電源等因素影響導致運行時配置發生改變,因此使用SRAM型FPGA時需要考慮這些故障的檢測。
決定FPGA實際功能的是FPGA配置數據或位流以及運行時的寄存器及內部RAM塊等,這些都是由設計者通過計算機輔助設計工具產生或配置的。早期的FPGA設計通過原理圖的形式將各個邏輯單元畫出由CAD工具產生配置FPGA的位流,隨著設計的復雜性不斷提高和可移植性考慮,現在基本都是通過硬件編程設計語言VHDL或Verilog HDL來實現的,因此FPGA配置數據產生的流程與軟件開發的流程類似。典型的FPGA開發流程如圖1所示。

FPGA設計實現的主要流程如下。
1)HDL設計:通過HDL描述語言完成各個模塊及整體的功能和結構描述。
2)綜合:通過FPGA綜合工具,將描述硬件功能的HDL文件翻譯成有邏輯門、寄存器、連接線以及其他硬件單元組成的硬件結構網表文件。
3)布局布線:通過FPGA布局布線工具將綜合后產生的網表文件映射到實際的FPGA邏輯單元,產生配置FPGA的位流。
4)下載:通過FPGA下載電纜將FPGA配置位流下載到FPGA芯片和FPGA配置FLASH中,實現FPGA的硬件功能。
為了驗證FPGA設計的正確性,還有一套相應的驗證流程:
1)功能仿真:通過ModelSim等邏輯仿真工具測試HDL模塊對不同輸入組合的響應是否符合設計需求。
2)前仿真:通過邏輯仿真工具,測試綜合后的FPGA網表是否符合設計需求。
3)后仿真:通過邏輯仿真工具,測試在加入時序參數后的FPGA網表是否滿足設計需求。
4)在系統測試:下載后通過實際的硬件測試驗證FPGA功能的正確實現。
在列車控制系統中,FPGA的故障可能會威脅到整個系統的安全運行,應根據FPGA故障模型采取抑制措施,根據FPGA的開發和使用流程可知,FPGA故障有以下兩個來源:
1)系統故障:由于需求、設計錯誤、FPGA配置數據生成錯誤、下載錯誤、配置加載錯誤導致;
2)隨機故障:由于運行過程中出現的FPGA芯片硬件隨機失效以及外界環境干擾導致的隨機錯誤。
目前FPGA設計都是基于HDL語言,由于HDL語言是一種非形式化的低層次語言,使得HDL設計的大小和復雜性增加,從而增加了產生設計bug的可能性。HDL類似于軟件設計語言,但是又有所不同,HDL是一種并行語言,其實現的功能最終是通過硬件來實現的,因此除了采用類似軟件驗證的方法外,還需考慮硬件實現的問題,需要通過時序分析和在系統測試來進一步驗證設計的正確性。為了避免FPGA的設計錯誤,可以采用以下方法。
1)代碼走查及評審:通過人工走讀的方式檢查代碼中可能出現的錯誤;
2)功能仿真:通過大量的測試案例,對代碼進行足夠覆蓋率的測試,從而檢查出潛在的錯誤;
3)時序分析:通過時序分析檢查設計的時序性能是否滿足要求,同時保證設計有一定的時序裕量;
4)高層次語言及形式化方法:通過高層次語言如system-C等使得硬件描述更加簡潔從而減少設計錯誤,采用形式化語言實現,并通過形式化方法證明設計對需求規范的符合性[6];
5)差異化編程:通過不同的開發者開發,或采用不同的語言或算法來實現多套設計,通過比較來檢測故障,從而采取措施使系統達到故障安全[7];
6)錯誤檢測:對系統的輸出和狀態進行監督,探測到系統處于故障狀態時采取措施使系統處于故障-安全態。
FPGA設計的實現過程基本都是由FPGA設計工具自動完成的,因此需要對FPGA設計工具進行分析,對產生的結果進行驗證,防止FPGA實現過程中的方法有:
1)時序分析:通過時序分析模擬硬件的實際時序性能,從而使實現的硬件不出現亞穩態等時序問題;
2)仿真:采用ModelSim等其他工具對FPGA設計實現各個階段的結果進行驗證,保證實現的正確性;
3)在系統測試:通過實際的硬件測試,測試FPGA配置的正確性和實際硬件工作的穩定性。
FPGA是大規模集成電路的一種,因此在運行中也會產生類似其他集成電路的失效情況,同時SRAM類型的FPGA易受SSE效應影響,處理FPGA硬件失效的方法如下。
1)硬件冗余:采用多片獨立的FPGA芯片或同一FPGA芯片中的不同區域實現同一個功能模塊,并保證它們的相對獨立性,通過比較多個冗余模塊的運行結果來發現硬件失效進而實現故障-安全處理。常見的2模冗余、3模冗余電路,可采用人工編碼方式或mentor precision等工具軟件實現;
2)錯誤檢測:通過獨立的監督電路(如FPGA內置的CRC32測試電路)對FPGA進行監督或對FPGA進行運行時測試,及時發現硬件失效進而實現故障安全處理;
3)失效模式及影響危害分析(FMECA):對FPGA實現的各個模塊進行FMECA分析,對可能出現的各種故障情況給出處理措施從而達到故障安全;
4)故障注入測試:通過修改FPGA的配置位流等故障注入方式,查看FPGA運行結果從而論證設計的故障安全性;
5)環境壓力測試:通過高低溫,振動試驗來測試FPGA設計在惡劣環境下的穩定性。
這里給出的FPGA設計實例是一個應答器編碼系統,其系統結構如圖2所示,該系統主要由兩片CPU芯片和兩片FPGA芯片組成,CPU從外部總線接收需要編碼的原始數據,傳遞給FPGA,FPGA完成編碼后,將編碼結果返還給CPU,CPU將編碼后的應答器報文通過外部總線發送出去。

該系統中的兩片CPU會將兩片FPGA的編碼結果進行比較,若比較不一致將不會向總線發送編碼結果,從而在FPGA發生隨機硬件失效時停止輸出實現故障-安全。每片FPGA完成編碼后,會對編碼結果進行譯碼,同時將編碼結果和譯碼結果返還給CPU,CPU將譯碼結果與原始數據進行比較,若比較不一致也不會向外部總線發送編碼結果,實現了對FPGA的錯誤檢測,從而在FPGA編碼出錯時停止輸出實現故障-安全。該方法既能檢測隨機失效,也能檢測潛在的設計錯誤,同時運行過程中CPU會對FPGA進行運行時測試,進一步提高FPGA隨機失效的檢測率。
實現該FPGA設計的項目活動,嚴格執行EN50129和EN50128規定的系統及軟件設計生命周期,同時參考了DO-254、IEC61508所規定的設計流程與方法,采用verilog HDL語言進行模塊化結構化設計,并對FPGA HDL設計進行了模塊測試(僅包括仿真)及集成測試(包括仿真及在系統測試),模塊測試語句覆蓋率、分支覆蓋率、條件覆蓋率、狀態機狀態覆蓋率、狀態跳轉覆蓋率均達到100%,對FPGA設計進行了FMECA分析,證實設計在預知的故障模式下保證安全輸出。
在FPGA/CPLD設計中,將FPGA芯片視為電子硬件,將FPGA HDL項目視為軟件,采用EN50128、EN50129、IEC61508和DO-254等標準規定的設計流程和設計策略,同時考慮FPGA的自身特點,采用相關的故障及錯誤防護措施,可以使FPGA設計達到列車控制系統應用的安全完整性要求。
[1] IEC Standards.Functional safety of electrical/electronic/programmable electronic safety-related systems[S]. IEC 61508 (Part 0, 2005; Parts 1-7, 2002).
[2] European Standards. Railway applications-Communication, signaling and processing systems-Safety related electronic systems for signaling[S].EN 50129 (2003).
[3] European Standards. Railway applications—Communication, signaling and processing systems—Software for railway control and protection systems[S]. EN 50128 (2011).
[4] RTCA SC-180. DESIGN ASSURANCE GUIDANCE FOR AIRBORNE ELECTRONIC HARDWARE[S]. RTCA/DO-254(2000).
[5] V.Asenek,C.Underwood,R.Velazco,et al. SEU induced errors observed in microprocessor systems[J]. IEEE Trans.on Nuclear Science, 1998,45(6):2876-2883.
[6] Jerker Hammarberg Simin Nadjm-Tehrani.Development of Safety-Critical Reconfigurable Hardware with Esterel[J]. Electronic Notes in Theoretical Computer Science,2003,80:219-234.
[7] Romuald Girardey,Michael Hübner,Jürgen Becker. Mixed-Signal Diverse Redundant System for Safety Critical Applications in FPGA[J]. IEEE Annual Symposium on VLSI,2010:469-470.