鄧 哲,張偉功,朱曉燕,杜 瑞
(首都師范大學北京市高可靠嵌入式系統技術工程研究中心,北京 100048)
目前,高可靠嵌入式冗余計算機已被廣泛地應用于鐵路機車控制、電力控制、化工冶煉、航空航天等重要民生領域中,安全性與可靠性成為其發展的重要指標[1-2]。總線作為其內部各個功能部件相互連接的紐帶,對系統的可靠性、體積、重量都有重要的影響?,F行常用的總線,諸如 PCI、PCI-E、Rapid-IO、Space-Wire[3]等,對于冗余容錯高可靠計算機系統而言,具有以下不足之處,不能很好地滿足高可靠嵌入式計算機系統在小型化、高速通信、訪問靈活性及冗余容錯等方面的發展需求:
(1)以PCI總線為代表的并行總線,速率很難進一步提高,總線信號數量多,不利于小型化和冗余容錯應用。同時,這類總線普遍存在單點故障失效問題,可靠性低;隨著設備量的增加,負載能力下降,可擴展性差[4]。
(2)PCI Express、Space-Wire、Rapid-IO[5-7]等高速串行總線采用LVDS信號傳送方式,只能支持點對點的直接通信,如果需要在多個部件(設備)之間進行通信,必須通過路由器或交換器進行轉接,在增加了設備的同時,通信可靠性也受到路由器件的嚴重制約。這些總線大多采用靜態結構,不能支持對通道故障的動態容錯,沒有解決傳統并行總線存儲的單點故障失效問題。
動態可重構高速串行總線(UM-BUS)是一種面向高可靠應用的高速串行總線。它采用基于 M-LVDS信號傳輸的總線型拓撲結構,支持最多 30個總線節點的直接互連;采用多通道(lane)并發傳輸技術提高總線傳輸帶寬;采用動態重構技術實時檢測通道故障與節點故障,通過將數據動態均衡地分配到有效通道上,實現動態容錯。與傳統總線相比,UM-BUS總線具有以下主要特點:
(1)具有總線工作狀態的自檢測命令,實現故障狀態的在線實時動態監測,為高速總線數據傳輸冗余容錯管理提供通道健康狀態的信息屬性。
(2)多通道 MLVDS可以作為超高帶寬背板總線實現多模塊信息互聯、高性能并聯計算機大數據流高速互聯總線以及新型數據處理系統公共資源的高速共享數據通道。
(3)屬于一種新型高速高可靠的容錯總線,總線為信息提供最大的傳輸帶寬的同時,還具有容錯機制,可以靈活地進行動態總線重構,允許在多重通道故障的情況下,仍能滿足數據的可靠傳輸。
(4)可變帶寬,可變字長數據傳輸交換的自適應機制,可以方便地構建數據處理系統新型的拓撲結構,能夠靈活適應不同節點設備或不同板卡的不同帶寬的要求。
(5)設有專用公共中斷請求線,具有專門的中斷優先權仲裁模式,為及時傳輸關鍵數據和實時控制信號提供快速響應。
動態可重構總線是一種面向高可靠應用的高速串行總線,可實時檢測通道故障,通過動態重構實現故障容錯。本文為解決故障狀態下的總線數據動態重構問題,設計一種動態可重構總線數據傳輸管理方法。
UM-BUS采用基于M-LVDS[8]技術的多節點、智能動態冗余的多通道總線拓撲結構,節點直接連接,不需要路由、轉接器,如圖1所示,其中,m表示總線上的節點數,最大節點數為32;n表示通信通道數,最大通道數為 32路。在節點間通信過程中,如果某幾條通道出現故障,可自動屏蔽無效通道,在剩余有效通道上進行通信。

圖1 總線拓撲結構
在總線通信過程中,采取數據包的形式交互信息。數據傳輸格式分為長包數據和短包數據,數據幀格式如圖2所示。
其中,短包數據只包含數據頭部分。長包格式用于大量數據的傳輸,短包格式主要是用于控制類數據的傳輸或少量數據傳輸。

圖2 數據包格式
UM-BUS通信協議劃分為3個獨立層次,從上至下依次分別為:處理層,數據鏈路層,物理層。數據鏈路層又分為傳輸緩沖層和傳輸子層。數據的傳輸過程如圖3所示。在發送端,從上層接口處獲得的數據包在處理層構建,存儲到數據緩沖層。在傳輸子層,根據有效通道情況對數據包動態均衡地分配到通道上,在物理層,對分組數據包進行收發的包裝,經過8 bit/10 bit編解碼轉換成比特流傳送。在接收端,8 bit/10 bit解碼器將10 bit數據轉換成8 bit數據,傳輸子層對數據進行動態組織,存儲到數據緩沖層,經過處理層處理交付上層。總線的目標是實現在最多32個通道實現并發傳輸,單通道速率達到100 Mb/s,為實現該目標,在進行大量數據傳輸時,每秒需要處理320 MB的數據,總線工作時鐘為100 Hz,每個時鐘周期需要處理4 Byte的數據,即需要在每個時鐘周期處理4個通道的數據,因此,采用四體FIFO結構對數據進行緩沖存儲,每個FIFO位寬為1 Byte。在將4個緩沖存儲體與不定數目通道進行數據傳輸映射時,如果采用固定結構,則具有邏輯簡單的優點,但對于某一條或幾條通道發生故障,數據無法均勻地分配通道上,不能實現總線的重構。為此,本文設計一種基于矩陣開關的數據傳輸管理方法,利用通道故障狀態表,通過 4×32矩陣開關數據傳輸管理陣列動態管理4個緩沖區與不定數目通道的數據傳輸,使數據均衡的分配到有效通道上,實現故障狀態下數據的動態重構。

圖3 數據傳輸過程
數據傳輸管理部分位于傳輸子層,在發送時,負責將數據緩沖區數據動態均衡地分配到最多 32條物理通道上,在接收時,負責將通道數據正確地存儲到數據緩沖區中。在設計過程中,需要解決如下問題:
(1)動態可重構總線最大通道數為32通道,不考慮在通信過程中鏈路斷開2次以上的情況,可用通道情況具有232?1種情況。需要將存儲體與不定數量的通道進行動態映射。
(2)在32個通道都有效的情況下,接收端32通道中的數據幾乎同時到達物理層的存儲區域,由于采用8b/10b編碼方式,每個數據需要經過10個時鐘周期到達另一端,每10個周期傳送32 Byte的數據,需要在10個時鐘周期內將32個通道對應物理層存儲區域中的數據存入處理層存儲區域。
(3)為滿足 UM-BUS的傳輸速率,適應總線的數據傳輸格式,同時便于對數據進行存儲,需要對數據緩沖層進行合理設計。
本文對數據緩沖層進行如下設計:短包數據和命令頭部分采用獨立的I/O區域進行存儲,長包數據主體數據區采用存儲緩沖區域存儲。數據緩沖采用為雙口存儲方式,采用四體FIFO用于在長包數據傳輸過程中緩沖主體數據,其長度固定為1 024 Byte。通常的處理器接口是32位,所以,從CPU該存儲區域是一個32位的存儲體,存儲體深度為256 Byte。由于物理層采用8b/10b的編碼方式,對于任一通道,每次向物理層傳輸或存儲數據時操作一個字節的數據,對應物理層與存儲區的操作也是每次操作一個字節的數據,因此從物理層看該存儲區域是一個4×256 Byte的四體FIFO存儲器,如圖4所示。

圖4 四體存儲結構
將存儲體數據發送到有效通道上,根據通道故障信息表,采用輪詢方式發送。如果此時所有通道均有效,則將存儲空間第1個字節的數據發送到1號通道,第2個字節發送到2號通道,依此類推,直到最后一個字節發送完畢或通道出現故障。如果通道中某幾路出現故障,則將所有有效通道按照通道號排列,采用上述輪詢方式發送數據。假設當前有效通道為8路,存儲器向物理層通道上發送數據發送過程如圖 5所示。將物理層通道的數據存儲到存儲體時,按照字節的順序進行存儲,但每條通道的數據存儲到哪個存儲區域中是不固定的,由有效通道數決定,每條通道的數據在存儲空間中對應的存儲位置情況應滿足如下公式:

其中,lm表示存儲空間每片存儲區存儲位置序號,規定存儲體1序號為1,依次3號存儲體序號為 3,4號存儲區序號為0;em表示上一次存儲的數據在存儲體中的位置序號,該值初始值為0,每往任意存儲區存儲一個數據該值加 1;vm表示通道中有效通道的個數;c表示總通道的循環次數,初始值為 1,每當所有通道都輪詢一遍,該值加1。

圖5 分組收發過程
3.3.1 開關矩陣映射結構
UM-BUS采用四體 FIFO,每次可同時存取的最大字節數為4,使得物理層的通道每次最多并行存取4個數據,因此,本文定義一個 4×32的開關矩陣結構,每個時鐘周期將 4個 FIFO存儲體與矩陣固定4行對應通道進行映射,每個存儲體與本周期對應的4個通道中某一條對應是不定的,由之前周期的對應關系和通道有效情況決定。如圖6所示,對16條通道的 5通道~7通道、12通道~14通道注入故障,在第1周期,4個FIFO存儲體對應矩陣的0通道~3通道,在剛開始傳輸數據時,由于之前沒有映射關系,并且本周期4條通道都有效,因此存儲體1~4順序對應 0通道~3通道;第 2周期,由于之前的映射關系為一一對應,且只有4通道有效,因此FIFO1對應通道4,其他FIFO不進行存取操作;在第3周期,由于上一周期的映射中FIFO2~4沒有進行映射,且本周期4個通道都有效,因此FIFO2對應通道8,FIFO3對應通道9,FIFO4對應通道10,FIFO1對應通道11,依次類推。

圖6 開關矩陣映射模型
3.3.2 基于流水線的數據傳輸控制
通過流水線方式實現上述矩陣映射過程,并進行數據傳輸控制??紤]到數據緩沖區和物理層存儲區域均采用FIFO,在每次向FIFO發送一個讀信號,需要延遲一個周期,數據才能夠讀出,因此,每次發出讀信號后,需要延遲一個時鐘周期才能夠執行寫入操作。同時,由于每個周期進行4個存儲體和通道的映射時,都需要知道上一周期的映射情況,對此,本文采用 2級流水線對數據傳輸過程進行控制,如圖 7所示。

圖7 流水線結構
以物理層通道的數據存入4個FIFO存儲體為例:在狀態 1讀出 0通道~3通道有效通道的數據,并計算第 0通道~3通道有效通道的數據存儲位置,在狀態2,向這4組通道中有效通道存儲區寫入數據,同時向 4通道~5通道的有效通道存儲區發出讀信號,并計算4個通道有效通道數據的存儲位置,依次類推。每周期傳輸的字節數是不固定的,其值和本周期所進行存儲操作的有效通道數目相同。四體FIFO中數據發送到通道過程與上述過程類似。
所有的狀態形成環路對通道和4個FIFO存儲體進行映射和存取控制,這個過程是通過狀態機實現的,狀態機轉換示意圖如圖8所示。

圖8 傳輸控制轉換示意圖
在 idle狀態下,如果物理層或者處理層通知開始進行數據動態重構,跳轉到狀態1。以物理層通道上的數據向四體FIFO存儲為例,在狀態1計算0通道~3通道的數據存入哪個FIFO存儲體,如果此時,0通道~3通道的數據準備好,所存入FIFO不滿則跳轉到狀態2,并且,向物理層存儲區域發送讀信號,在下一個周期將數據輸出,并向存入的FIFO存儲體發送寫信號;否則繼續等待。在狀態2計算4通道~7通道的數據存入哪個 FIFO存儲體,如果此時,4通道~7通道的數據準備好,并且所存入FIFO不滿則跳轉到狀態3,并且,向物理層存儲區域發送讀信號,在下一個周期將數據輸出,并向存入的FIFO存儲體發送寫信號;否則繼續等待,依次類推。在任意狀態下,如果收到傳輸停止標志信號,則跳轉到idel狀態。四體FIFO中數據發送通道的過程類似。
以8通道動態可重構總線為驗證,隨機地向第7通道和第3通道注入故障。如圖3所示的動態可重構總線數據傳輸過程,在隨機注入故障、進行通道檢測后,得到故障狀態信息表,處理層重新發送1 024 Byte數據到4個FIFO存儲體,存儲完成后通知傳輸子層進行數據動態重構,傳輸子層根據故障狀態信息表將數據均衡地分配到有效通道上進行傳輸,在接收端,傳輸子層將有效通道的數據動態組織存入FIFO存儲體中,通信過程得到恢復。在 Modelsim軟件下的仿真結果如圖 9所示,dpi(0)~dpi(8)為 8個通道得到經動態分配后的數據,dpiw為8個通道的寫信號??梢钥闯觯ǖ莱霈F故障后,4個 FIFO存儲體的數據,根據通道資源表動態分配到物理層中有效通道上,通信得到恢復。

圖9 數據動態分配到物理層的有效通道
將上述數據傳輸管理模塊應用在 32路動態可重構總線中,采用SPARTAN-6系列FPGA進行實現,占用 1 248個 SLICE,最高頻率可達 214 MHz。在8通道UM-BUS總線中,實測通信速率達到了100 Mb/s通道,可進行最多7個通道故障動態容錯。UM-BUS 與高速總線的技術指標對比如表1所示。

表1 高速串行總線與UM-BUS的技術指標對比特征