徐笑然(北京全路通信信號研究設計院有限公司,北京 100073)
鐵路信號設備對其功能安全性有很高的要求。應答器傳輸單元(Balise Transm ission M odu le, BTM)是列車自動防護系統(tǒng)(ATP)的關鍵設備,在BTM的設計中,其軟件多采用雙套具有差異性設計的代碼來實現(xiàn)安全的“二取二”功能。BTM解碼單元的系統(tǒng)框圖如圖1所示。
BTM的解碼單元為單CPU、雙套差異軟件設計。CPU從“FPGA通道1”和“FPGA通道2”分別讀取由FPGA解碼的兩路獨立報文,然后通過兩套具有差異設計的代碼進行取二比較。如果兩組報文完全一致,則輸出;若不一致,則將所有報文的比特位置1,作為異常報文,向ATP報告錯誤。
報文共830 bit,占用104 By te。按照一般的代碼設計,多字節(jié)比較流程如圖2所示。
比較過程是一個循環(huán)體,循環(huán)次數(shù)是需要比較的字節(jié)個數(shù)。首先讀取兩份報文各自的第1字節(jié),然后比較是否一致。如果一致,則再取下一字節(jié)繼續(xù)比較,直到循環(huán)結(jié)束條件滿足;如果不一致,則退出循環(huán),將報文所有字節(jié)置為0x FF。
而基于“差異放大”的比較方法的原則是,將最微小的差異放大到最大的狀態(tài)。也就是說,如果兩組數(shù)據(jù)即使只有1個比特位的不同,經(jīng)過差異放大,最終的比較結(jié)果是全部字節(jié)完全不同。這種方法非常適合用于非常嚴格的數(shù)據(jù)比較,只允許完全一致,不允許任何偏差。而BTM的報文比較就是這種情況。
“差異放大”比較方法在編碼實現(xiàn)時,完全采用數(shù)學運算的方式,沒有如圖2所示的條件分支語句。其運算過程如圖1、3所示。
[A]和[B]是待比較的兩組數(shù)據(jù),分別有N個字節(jié)。首先將兩個數(shù)組的對應字節(jié),進行“按位異或”操作,得到等長的N字節(jié)結(jié)果數(shù)組[R]。[R]能夠表示
徐笑然,男,碩士畢業(yè)于清華大學,工程師。主要研究方向包括嵌入式軟硬件設計、軟硬件安全功能設計等,曾參與ATP研發(fā)、BTM研發(fā)等項目。兩個數(shù)組的一致性程度,如果[A]和[B]內(nèi)容完全一致,則[R]的所有字節(jié)均為0;否則,[R]中必定存在不為0的字節(jié)。第二步,將數(shù)組[R]的每個字節(jié)相互進行“按位或”操作,共N-1步位或操作,最終得到一個字節(jié)r。r是[R]的縮影,如果[R]的所有字節(jié)均為0,則r=0;否則r≠0。第三步,將字節(jié)r進行“差異放大”,得到rF。所謂“差異放大”,即如果r中存在等于1的比特位(r≠0),則在放大操作后,rF的所有字節(jié)全為1(rF=0x FF);如果r中不存在等于1的比特位(r=0),則在放大操作后,rF的值仍為0,因為無論對0如何進行放大,結(jié)果還是0。這一步就是“差異放大”的關鍵步驟,即使r僅有一個比特為1,在操作后就放大為所有字節(jié)全為1;有且只有r=0,則rF=0,即0對于放大操作是無效的。最后一步,將rF復制N次,形成數(shù)組[RF],使[RF]的每個字節(jié)等于rF,然后將[RF]與原始數(shù)據(jù)[A]或[B]進行對應字節(jié)的位或操作。由于[RF]的取值只有兩種情況:全0或全1,因此最后的輸出結(jié)果數(shù)組[C]=[A],或[C]=[RF]。至此,通過一系列算法實現(xiàn)了與圖2傳統(tǒng)流程設計等效的結(jié)果。
差異放大過程是:通過兩次循環(huán),將r逐位右移、左移,在此過程中再與r自身進行“位或”操作。由于“位或”操作會最大限度地保留比特“1”,因此就將r中等于1的比特位擴散到所有的比特位;如果r的全部比特位均為0,則此操作之后r仍等于0。
與傳統(tǒng)的比較算法相比,基于“差異放大”的數(shù)據(jù)一致性比較算法具有如下優(yōu)點。
1)它是一個純數(shù)學運算的過程,代碼實現(xiàn)時無邏輯分支語句,極大降低了代碼白盒測試時MC/DC覆蓋率的復雜度。
2)由于完全采用了數(shù)學運算,因此可以很容易進行數(shù)學建模,通過Sim u lin k等工具自動生成代碼,降低了人為編寫代碼而引入b ug的可能;同時,易于使用可編程邏輯器件來實現(xiàn)比較功能,增加了功能實現(xiàn)的手段。
3)算法執(zhí)行時間固定,代碼的行為具有確定性。
在使用差異放大比較算法時,需要注意的內(nèi)容如下。
1)如果不使用形如Sim u link等工具自動生成代碼,則需要詳細的設計文檔來說明代碼的意圖,因為代碼本身很難明確地顯示出整個運算的目的和功能。
2)在大部分情況下,代碼的執(zhí)行時間比傳統(tǒng)比較方法要長。
在實際應用中,差異放大比較算法與傳統(tǒng)的比較算法可以分別用于雙套差異軟件的A、B代碼設計里,使雙套代碼在算法設計階段就產(chǎn)生較大的差異性,能夠很好地保證雙套代碼對共因故障的檢出率。
[1] EN50128-2011 :Railway applications —Communication, signaling and processing systems—Software for railway control and protection systems[S].
[2] IEC61508-2010:Functional safety of electrical/electronic/programmable electronic safety-related systems-Part 6: Guidelines on the application of IEC 61508-2 and IEC 61508-3[S].
[3] DO-178B:Software Considerations in Airborne Systems and Equipment Certification.