楊 春 楊光倫 馬振球 王一民
(北京全路通信信號(hào)研究設(shè)計(jì)院有限公司,北京 100073)
在日益復(fù)雜的現(xiàn)代列車控制系統(tǒng)中,以往單純的繼電控制已很難滿足要求,因而可編程電子器件得到更廣泛應(yīng)用。然而可編程電子器件的復(fù)雜性使得在設(shè)計(jì)和使用中可能會(huì)出現(xiàn)難以預(yù)知的錯(cuò)誤和故障進(jìn)而威脅系統(tǒng)的安全性,因此必須采取嚴(yán)格的流程管控和適當(dāng)?shù)脑O(shè)計(jì)策略來(lái)保證系統(tǒng)的安全運(yùn)行[1~4]。
在目前的列車控制系統(tǒng)中,F(xiàn)PGA/CPLD等可編程邏輯器件使用越來(lái)越多,F(xiàn)PGA/CPLD的設(shè)計(jì)流程與基于軟件的微處理器系統(tǒng)類似,可以參考EN50129[2]和EN50128[3]等相關(guān)標(biāo)準(zhǔn)來(lái)保證設(shè)計(jì)活動(dòng),將FPGA芯片看作硬件,而將FPGA代碼設(shè)計(jì)看作軟件,通過(guò)軟件設(shè)計(jì)和硬件設(shè)計(jì)的相關(guān)流程方法來(lái)保證FPGA的功能安全性。但是FPGA/CPLD與微處理器又有很大的區(qū)別,微處理器的硬件功能固定,而FPGA/CPLD的硬件邏輯功能是由可編程的查找表、互聯(lián)矩陣、可編程IO以及其他嵌入式模塊來(lái)實(shí)現(xiàn),需要考慮實(shí)際運(yùn)行中的時(shí)序、SEE(single event effect)[5]等相關(guān)問(wèn)題,因此FPGA/CPLD的安全設(shè)計(jì)需要額外的考慮,需要參考DO-254[4]與IEC61508[1]等相關(guān)標(biāo)準(zhǔn)。
FPGA基本上都是由基本的可編程邏輯單元和可編程互聯(lián)線組成,每個(gè)邏輯單元由查找表,寄存器以及選擇器組成,查找表可用來(lái)實(shí)現(xiàn)基本的組合邏輯,通過(guò)編程將這些查找表、寄存器,選擇器連接起來(lái)可以實(shí)現(xiàn)任意的組合邏輯和時(shí)序邏輯;另外FPGA中也會(huì)嵌入一些硬IP核,如嵌入式RAM塊、乘法器、PLL、微處理器硬核等,通過(guò)可編程互聯(lián)線將這些模塊連接起來(lái),并接上可編程IO,就可以實(shí)現(xiàn)設(shè)計(jì)者想要的復(fù)雜功能。
根據(jù)控制邏輯單元功能及連線的配置存儲(chǔ)器的實(shí)現(xiàn)方法FPGA可分為:反熔絲型FPGA、EEPROM/FLASH型FPGA和SRAM型FPGA。其中EEPROM/FLASH型FPGA和SRAM型FPGA是可以多次編程的,反熔絲型FPGA和EEPROM/FLASH型FPGA是非易失的,掉電后能保持邏輯配置不丟失,而SRAM型FPGA是易失的,需要外部配置FLASH在每次上電時(shí)對(duì)FPGA進(jìn)行重新配置。目前SRAM型FPGA技術(shù)是最先進(jìn),使用最廣泛的,但SRAM型FPGA易受SEE和電源等因素影響導(dǎo)致運(yùn)行時(shí)配置發(fā)生改變,因此使用SRAM型FPGA時(shí)需要考慮這些故障的檢測(cè)。
決定FPGA實(shí)際功能的是FPGA配置數(shù)據(jù)或位流以及運(yùn)行時(shí)的寄存器及內(nèi)部RAM塊等,這些都是由設(shè)計(jì)者通過(guò)計(jì)算機(jī)輔助設(shè)計(jì)工具產(chǎn)生或配置的。早期的FPGA設(shè)計(jì)通過(guò)原理圖的形式將各個(gè)邏輯單元畫出由CAD工具產(chǎn)生配置FPGA的位流,隨著設(shè)計(jì)的復(fù)雜性不斷提高和可移植性考慮,現(xiàn)在基本都是通過(guò)硬件編程設(shè)計(jì)語(yǔ)言VHDL或Verilog HDL來(lái)實(shí)現(xiàn)的,因此FPGA配置數(shù)據(jù)產(chǎn)生的流程與軟件開(kāi)發(fā)的流程類似。典型的FPGA開(kāi)發(fā)流程如圖1所示。
FPGA設(shè)計(jì)實(shí)現(xiàn)的主要流程如下。
1)HDL設(shè)計(jì):通過(guò)HDL描述語(yǔ)言完成各個(gè)模塊及整體的功能和結(jié)構(gòu)描述。
2)綜合:通過(guò)FPGA綜合工具,將描述硬件功能的HDL文件翻譯成有邏輯門、寄存器、連接線以及其他硬件單元組成的硬件結(jié)構(gòu)網(wǎng)表文件。
3)布局布線:通過(guò)FPGA布局布線工具將綜合后產(chǎn)生的網(wǎng)表文件映射到實(shí)際的FPGA邏輯單元,產(chǎn)生配置FPGA的位流。
4)下載:通過(guò)FPGA下載電纜將FPGA配置位流下載到FPGA芯片和FPGA配置FLASH中,實(shí)現(xiàn)FPGA的硬件功能。
為了驗(yàn)證FPGA設(shè)計(jì)的正確性,還有一套相應(yīng)的驗(yàn)證流程:
1)功能仿真:通過(guò)ModelSim等邏輯仿真工具測(cè)試HDL模塊對(duì)不同輸入組合的響應(yīng)是否符合設(shè)計(jì)需求。
2)前仿真:通過(guò)邏輯仿真工具,測(cè)試綜合后的FPGA網(wǎng)表是否符合設(shè)計(jì)需求。
3)后仿真:通過(guò)邏輯仿真工具,測(cè)試在加入時(shí)序參數(shù)后的FPGA網(wǎng)表是否滿足設(shè)計(jì)需求。
4)在系統(tǒng)測(cè)試:下載后通過(guò)實(shí)際的硬件測(cè)試驗(yàn)證FPGA功能的正確實(shí)現(xiàn)。
在列車控制系統(tǒng)中,F(xiàn)PGA的故障可能會(huì)威脅到整個(gè)系統(tǒng)的安全運(yùn)行,應(yīng)根據(jù)FPGA故障模型采取抑制措施,根據(jù)FPGA的開(kāi)發(fā)和使用流程可知,F(xiàn)PGA故障有以下兩個(gè)來(lái)源:
1)系統(tǒng)故障:由于需求、設(shè)計(jì)錯(cuò)誤、FPGA配置數(shù)據(jù)生成錯(cuò)誤、下載錯(cuò)誤、配置加載錯(cuò)誤導(dǎo)致;
2)隨機(jī)故障:由于運(yùn)行過(guò)程中出現(xiàn)的FPGA芯片硬件隨機(jī)失效以及外界環(huán)境干擾導(dǎo)致的隨機(jī)錯(cuò)誤。
目前FPGA設(shè)計(jì)都是基于HDL語(yǔ)言,由于HDL語(yǔ)言是一種非形式化的低層次語(yǔ)言,使得HDL設(shè)計(jì)的大小和復(fù)雜性增加,從而增加了產(chǎn)生設(shè)計(jì)bug的可能性。HDL類似于軟件設(shè)計(jì)語(yǔ)言,但是又有所不同,HDL是一種并行語(yǔ)言,其實(shí)現(xiàn)的功能最終是通過(guò)硬件來(lái)實(shí)現(xiàn)的,因此除了采用類似軟件驗(yàn)證的方法外,還需考慮硬件實(shí)現(xiàn)的問(wèn)題,需要通過(guò)時(shí)序分析和在系統(tǒng)測(cè)試來(lái)進(jìn)一步驗(yàn)證設(shè)計(jì)的正確性。為了避免FPGA的設(shè)計(jì)錯(cuò)誤,可以采用以下方法。
1)代碼走查及評(píng)審:通過(guò)人工走讀的方式檢查代碼中可能出現(xiàn)的錯(cuò)誤;
2)功能仿真:通過(guò)大量的測(cè)試案例,對(duì)代碼進(jìn)行足夠覆蓋率的測(cè)試,從而檢查出潛在的錯(cuò)誤;
3)時(shí)序分析:通過(guò)時(shí)序分析檢查設(shè)計(jì)的時(shí)序性能是否滿足要求,同時(shí)保證設(shè)計(jì)有一定的時(shí)序裕量;
4)高層次語(yǔ)言及形式化方法:通過(guò)高層次語(yǔ)言如system-C等使得硬件描述更加簡(jiǎn)潔從而減少設(shè)計(jì)錯(cuò)誤,采用形式化語(yǔ)言實(shí)現(xiàn),并通過(guò)形式化方法證明設(shè)計(jì)對(duì)需求規(guī)范的符合性[6];
5)差異化編程:通過(guò)不同的開(kāi)發(fā)者開(kāi)發(fā),或采用不同的語(yǔ)言或算法來(lái)實(shí)現(xiàn)多套設(shè)計(jì),通過(guò)比較來(lái)檢測(cè)故障,從而采取措施使系統(tǒng)達(dá)到故障安全[7];
6)錯(cuò)誤檢測(cè):對(duì)系統(tǒng)的輸出和狀態(tài)進(jìn)行監(jiān)督,探測(cè)到系統(tǒng)處于故障狀態(tài)時(shí)采取措施使系統(tǒng)處于故障-安全態(tài)。
FPGA設(shè)計(jì)的實(shí)現(xiàn)過(guò)程基本都是由FPGA設(shè)計(jì)工具自動(dòng)完成的,因此需要對(duì)FPGA設(shè)計(jì)工具進(jìn)行分析,對(duì)產(chǎn)生的結(jié)果進(jìn)行驗(yàn)證,防止FPGA實(shí)現(xiàn)過(guò)程中的方法有:
1)時(shí)序分析:通過(guò)時(shí)序分析模擬硬件的實(shí)際時(shí)序性能,從而使實(shí)現(xiàn)的硬件不出現(xiàn)亞穩(wěn)態(tài)等時(shí)序問(wèn)題;
2)仿真:采用ModelSim等其他工具對(duì)FPGA設(shè)計(jì)實(shí)現(xiàn)各個(gè)階段的結(jié)果進(jìn)行驗(yàn)證,保證實(shí)現(xiàn)的正確性;
3)在系統(tǒng)測(cè)試:通過(guò)實(shí)際的硬件測(cè)試,測(cè)試FPGA配置的正確性和實(shí)際硬件工作的穩(wěn)定性。
FPGA是大規(guī)模集成電路的一種,因此在運(yùn)行中也會(huì)產(chǎn)生類似其他集成電路的失效情況,同時(shí)SRAM類型的FPGA易受SSE效應(yīng)影響,處理FPGA硬件失效的方法如下。
1)硬件冗余:采用多片獨(dú)立的FPGA芯片或同一FPGA芯片中的不同區(qū)域?qū)崿F(xiàn)同一個(gè)功能模塊,并保證它們的相對(duì)獨(dú)立性,通過(guò)比較多個(gè)冗余模塊的運(yùn)行結(jié)果來(lái)發(fā)現(xiàn)硬件失效進(jìn)而實(shí)現(xiàn)故障-安全處理。常見(jiàn)的2模冗余、3模冗余電路,可采用人工編碼方式或mentor precision等工具軟件實(shí)現(xiàn);
2)錯(cuò)誤檢測(cè):通過(guò)獨(dú)立的監(jiān)督電路(如FPGA內(nèi)置的CRC32測(cè)試電路)對(duì)FPGA進(jìn)行監(jiān)督或?qū)PGA進(jìn)行運(yùn)行時(shí)測(cè)試,及時(shí)發(fā)現(xiàn)硬件失效進(jìn)而實(shí)現(xiàn)故障安全處理;
3)失效模式及影響危害分析(FMECA):對(duì)FPGA實(shí)現(xiàn)的各個(gè)模塊進(jìn)行FMECA分析,對(duì)可能出現(xiàn)的各種故障情況給出處理措施從而達(dá)到故障安全;
4)故障注入測(cè)試:通過(guò)修改FPGA的配置位流等故障注入方式,查看FPGA運(yùn)行結(jié)果從而論證設(shè)計(jì)的故障安全性;
5)環(huán)境壓力測(cè)試:通過(guò)高低溫,振動(dòng)試驗(yàn)來(lái)測(cè)試FPGA設(shè)計(jì)在惡劣環(huán)境下的穩(wěn)定性。
這里給出的FPGA設(shè)計(jì)實(shí)例是一個(gè)應(yīng)答器編碼系統(tǒng),其系統(tǒng)結(jié)構(gòu)如圖2所示,該系統(tǒng)主要由兩片CPU芯片和兩片F(xiàn)PGA芯片組成,CPU從外部總線接收需要編碼的原始數(shù)據(jù),傳遞給FPGA,F(xiàn)PGA完成編碼后,將編碼結(jié)果返還給CPU,CPU將編碼后的應(yīng)答器報(bào)文通過(guò)外部總線發(fā)送出去。
該系統(tǒng)中的兩片CPU會(huì)將兩片F(xiàn)PGA的編碼結(jié)果進(jìn)行比較,若比較不一致將不會(huì)向總線發(fā)送編碼結(jié)果,從而在FPGA發(fā)生隨機(jī)硬件失效時(shí)停止輸出實(shí)現(xiàn)故障-安全。每片F(xiàn)PGA完成編碼后,會(huì)對(duì)編碼結(jié)果進(jìn)行譯碼,同時(shí)將編碼結(jié)果和譯碼結(jié)果返還給CPU,CPU將譯碼結(jié)果與原始數(shù)據(jù)進(jìn)行比較,若比較不一致也不會(huì)向外部總線發(fā)送編碼結(jié)果,實(shí)現(xiàn)了對(duì)FPGA的錯(cuò)誤檢測(cè),從而在FPGA編碼出錯(cuò)時(shí)停止輸出實(shí)現(xiàn)故障-安全。該方法既能檢測(cè)隨機(jī)失效,也能檢測(cè)潛在的設(shè)計(jì)錯(cuò)誤,同時(shí)運(yùn)行過(guò)程中CPU會(huì)對(duì)FPGA進(jìn)行運(yùn)行時(shí)測(cè)試,進(jìn)一步提高FPGA隨機(jī)失效的檢測(cè)率。
實(shí)現(xiàn)該FPGA設(shè)計(jì)的項(xiàng)目活動(dòng),嚴(yán)格執(zhí)行EN50129和EN50128規(guī)定的系統(tǒng)及軟件設(shè)計(jì)生命周期,同時(shí)參考了DO-254、IEC61508所規(guī)定的設(shè)計(jì)流程與方法,采用verilog HDL語(yǔ)言進(jìn)行模塊化結(jié)構(gòu)化設(shè)計(jì),并對(duì)FPGA HDL設(shè)計(jì)進(jìn)行了模塊測(cè)試(僅包括仿真)及集成測(cè)試(包括仿真及在系統(tǒng)測(cè)試),模塊測(cè)試語(yǔ)句覆蓋率、分支覆蓋率、條件覆蓋率、狀態(tài)機(jī)狀態(tài)覆蓋率、狀態(tài)跳轉(zhuǎn)覆蓋率均達(dá)到100%,對(duì)FPGA設(shè)計(jì)進(jìn)行了FMECA分析,證實(shí)設(shè)計(jì)在預(yù)知的故障模式下保證安全輸出。
在FPGA/CPLD設(shè)計(jì)中,將FPGA芯片視為電子硬件,將FPGA HDL項(xiàng)目視為軟件,采用EN50128、EN50129、IEC61508和DO-254等標(biāo)準(zhǔn)規(guī)定的設(shè)計(jì)流程和設(shè)計(jì)策略,同時(shí)考慮FPGA的自身特點(diǎn),采用相關(guān)的故障及錯(cuò)誤防護(hù)措施,可以使FPGA設(shè)計(jì)達(dá)到列車控制系統(tǒng)應(yīng)用的安全完整性要求。
[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.