吳 衛,曹元將
(中國船舶集團有限公司第八研究院,南京 211153)
隨著各種硬件設備的性能指標不斷提升,其接口數據傳輸設計也越來越復雜,因此硬件設備數據傳輸接口的故障檢測變得越來越重要,采用先進的故障檢測技術能大大提高硬件設備的維修效率和故障隔離率,一旦正在工作的數據傳輸通道出現故障,系統BIT能夠立即檢測到該故障,快速進行故障定位,縮短了維修時間,因此硬件設備數據傳輸接口的良好可測試性對于獲得高任務可靠性具有重要意義[1-3]。
本系統硬件平臺主要由同在一個VPX機箱中的多塊FPGA處理板和一塊故檢接口板組成,各FPGA處理板與故檢接口板通過背板的I2C總線連接。FPGA處理板搭載一片FPGA芯片和ARM芯片;故檢接口板搭載一片ARM芯片。數據傳輸接口故障檢驗工作流程如圖1所示。各FPGA處理板上的FPGA芯片對傳輸接口進行故障檢測,并將故檢結果通過UART串口送往本板ARM芯片,各FPGA處理板上的ARM芯片收到故檢信息后都通過背板的I2C總線送往故檢接口板上的ARM芯片,再由故檢接口板上的ARM芯片通過千兆網將故檢信息傳輸到上位機進行后續匯總處理及故障顯示。

圖1 數據傳輸接口故障檢測數據流示意
FPGA硬件接口主要有RS422、RocketIO以及RapidIO等接口形式。
RS422信號有效性檢測只能結合具體使用功能進行接口有效性監測,這里針對RS422傳輸匿影通道控制脈沖功能進行故障檢測設計。
在匿影功能中,通道高電平有效比例過高通常會過度抑制輸出,或通道沒有高電平信號導致電磁兼容屏蔽功能失效,本文采用定時統計高電平點數的方式有效監測RS422。
2.1.1 統計計算方法
統計T時間內RS422接口中高電平點數,即根據板卡時鐘讀取T時間內高電平次數總和。在監測周期到來時,根據占空比門限、計數器是否溢出判斷RS422接口是否異常,流程如圖2所示。

圖2 RS422接口異常判斷軟件流程
高電平次數總和采用26位計數器,在每個時鐘下時間計數器加1:當高電平時,高電平計數器加1;當時間計數器為0x3FFFFFF時,比較高電平計數值的高8位與占空比門限,以此判定通路是否正常,并且利用功能監測輸出高電平計數值的高8位。
這時在50 M時鐘下,時間計數器從0計到0x3FFFFFF的時間約為1.34 s。高8位輸出有效值在[0,255],量綱為0.004,即輸出8位信息表示高電平有效占比,占比可從0到1,按照0.004的間隔精度表示。
2.1.2 參數化設計
可配置參數建議:高電平計數門限上限、高電平計數門限下限和輸出位數(默認為8位,可以根據實際情況靈活修改)。
當板卡啟動初始化時,必須配置占空比上限、占空比下限和輸出位數3個變量。
默認高電平計數門限上限204(對應占空比0.8),高電平計數門限下限0(對應占空比0);當高電平計數高8位大于204或小于0時,輸出RS422傳輸異常。計數門限默認值可以根據實際情況靈活修改。
2.1.3 監測輸出信息
根據系統應用情況,定義多個字節用于在RS422接口監測結果輸出。每個字節最多可以表示8路RS422狀態,每路RS422信息監測結果按位定義輸出,1表示RS422穩定,0表示RS422故障。該狀態用ARM監測輸出。
通過檢測rxnotintable的狀態變化次數判定當前光纖鏈路狀態。當光纖鏈路穩定時,valid=1,表明當前接收數據有效;當光纖鏈路不穩定時,valid=0,表明當前接收數據可能存在誤碼,建議丟棄當前數據包。
光纖鏈路監測是在監測周期內(秒級)統計valid狀態在多次時鐘周期下的變化次數,共有3種狀態:
當鏈路不通時,變化次數為0,且最近時鐘周期下valid狀態為0;
當鏈路不穩定時,變化次數>0,最近時鐘周期下valid狀態不確定;
當鏈路穩定時,變化次數=0,最近時鐘周期下valid狀態為1。
2.2.1 統計計算方法
在每個時鐘周期下,RocketIO鏈路狀態按圖3狀態機執行。

圖3 RocketIO鏈路異常判斷狀態機
在光纖監測周期內統計valid變化次數。在監測結果發送時鐘周期,獲取valid變化次數及當前valid狀態,判斷光纖鏈路狀態并輸出,具體如圖4所示。

圖4 RocketIO鏈路異常判斷軟件流程
2.2.2 參數化設計
光纖狀態檢測涉及的參數包括:
(1)監測時間間隔,建議1 s;
(2)在監測時間間隔內,依據valid狀態變化次數判定光纖接口不穩定的門限值,通常設置為0,即valid有變化就判定為鏈路不穩定;該門限參數越大,表示對鏈路不穩定的容忍度越大;
(3)在IDLE狀態中,監測rxnotintable狀態的時鐘計數器門限,建議256或512;該參數影響傳輸鏈路從不穩定到穩定狀態轉換的嚴格程度,數值越大,表明對鏈路不穩定的容忍度越差,丟棄的數據越多。在IDLE狀態下,通常后續處理的數據不進行輸出,因此這個門限對應的時間通常不超過數據包周期;
(4)SYNC1狀態轉IDLE狀態,監測rxnotintable=1統計次數門限,建議3~5之間;該參數影響傳輸鏈路從穩定到不穩定狀態轉換的嚴格程度,數值越大,表明對鏈路不穩定的容忍度越好,鏈路導致的異常數據不會對系統影響太大;
(5)SYNC1狀態轉SYNC狀態,監測狀態的時鐘計數器門限,建議256或512。
注意事項:建議同時長時間(連續開機大于1 h)統計rxnotintable=1的次數,該次數用來表征光纖總體的穩定情況,例如通常情況下連續開機12 h,rxnotintable=1的總次數為50左右,若出現該次數統計為500,發生明顯變化,說明鏈路狀態有變化,須關注,這一點可作為健康管理中的監測項目。
2.2.3 監測輸出信息
根據系統應用情況,定義多個字節用來在光纖接口監測結果輸出,每個字節最多可以表示8路光纖狀態,每路光纖信息監測結果按位定義輸出,1表示光纖穩定,0表示光纖故障。該狀態用ARM監測輸出。
針對詳細的接口監測信息、每路光纖valid變化次數及當前時鐘周期下valid狀態,用4位輸出狀態信息。輸出4位信息填充方式如圖5所示(當狀態次數變化統計值大于7時,低3位填寫7)。

圖5 4位信息填充方式
在RapidIO初始化及通信過程中對3個狀態量進行監測,以判斷鏈路穩定性情況:
(1)port_initialized,鏈路兩端物理鏈路是否通,port_initialized=1表示成功;
(2)link_initialized,鏈路兩端通信協議是否一致,link_initialized=1表示協議一致;
(3)port_error,在通信過程中對誤碼、丟包等信息綜合后的判定狀態,port_error=1表示通訊過程中的鏈路故障。
在之前關于RapidIO鏈路的故障排查中,當初始化正常后,通信過程中port_initialized和link_initialized一般不會出現問題,但建議在通訊過程中保持監測,并根據狀態判斷鏈路穩定性。
2.3.1 統計計算方法
在監測時段內,根據RapidIO內核中port_initialized、link_initialized和port_error的狀態統計,實現RapidIO鏈路監測。
當傳輸鏈路穩定時,在秒級宏觀統計下,port_initialized、link_initialized和port_error狀態變化次數為0,且當前時鐘周期下port_initialized、link_initialized狀態為1,port_error狀態為0。
其他均為鏈路不穩定。
在RapidIO監測周期內,統計port_initialized、link_initialized和port_error變化次數。在達到監測周期時,根據狀態變化次數及當前狀態判別鏈路穩定性,并發送監測結果。具體流程如圖6所示。

圖6 RapidIO鏈路監測軟件流程
RapidIO鏈路穩定性判斷(流程如圖7所示):

圖7 RapidIO鏈路穩定性判斷軟件流程
鏈路穩定:port_initialized、link_initialized和port_error狀態變化次數為0,且最近時鐘周期下port_ini-tialized和link_initialized狀態為1,port_error狀態為0;鏈路不穩定:不滿足上述RapidIO鏈路穩定判定條件的,滿足下面任一條件,即為鏈路不穩定:
(1)port_initialized狀態變化次數大于0;
(2)link_initialized狀態變化次數大于0;
(3)port_error狀態變化次數大于0;
(4)port_initialized狀態變化次數都為0,且最近時鐘周期下port_initialized狀態為0;
(5)link_initialized狀態變化次數都為0,且最近時鐘周期下link_initialized狀態為0;
(6)port_error狀態變化次數都為0,且最近時鐘周期下port_error狀態為1。
2.3.2 參數化設計
RapidIO狀態檢測涉及的參數包括監測時間間隔,建議1 s。
在監測時間間隔內,port_initialized、link_initialized和port_error變化次數門限不建議參數化,通常狀態發生變化就可以判斷為鏈路不穩定。
2.3.3 監測輸出信息
根據系統應用情況,定義多個字節用來監測RapidIO接口,每個字節最多可以表示8路RapidIO狀態,每路RapidIO信息監測結果按位定義輸出,1表示RapidIO接口穩定,0表示RapidIO接口故障。該狀態用ARM監測輸出。
port_initialized、link_initialized和port_error變化次數及當前時鐘周期下的狀態用狀態監測通道輸出。每路RapidIO接口用兩個字節輸出詳細狀態檢測信息,port_initialized、link_initialized和port_error分別用4位輸出狀態信息,剩余4位保留。輸出4位信息填充方式如圖5所示(當狀態次數變化統計值大于7時,低3位填寫7)。
隨著硬件設備日益復雜和用戶對設備全周期綜合保障需求的提高,硬件設備數據傳輸接口故障檢測變得越來越重要。本文根據目前硬件平臺故障檢測技術發展狀況,給出了數據傳輸接口的故障檢測設計方法,該設計能夠在各硬件平臺中實現,并為設備故障定位,為維修保障提供有力的技術支撐。