鄧 哲,張偉功,朱曉燕,杜 瑞
(首都師范大學(xué)北京市高可靠嵌入式系統(tǒng)技術(shù)工程研究中心,北京 100048)
目前,高可靠嵌入式冗余計算機已被廣泛地應(yīng)用于鐵路機車控制、電力控制、化工冶煉、航空航天等重要民生領(lǐng)域中,安全性與可靠性成為其發(fā)展的重要指標(biāo)[1-2]??偩€作為其內(nèi)部各個功能部件相互連接的紐帶,對系統(tǒng)的可靠性、體積、重量都有重要的影響?,F(xiàn)行常用的總線,諸如 PCI、PCI-E、Rapid-IO、Space-Wire[3]等,對于冗余容錯高可靠計算機系統(tǒng)而言,具有以下不足之處,不能很好地滿足高可靠嵌入式計算機系統(tǒng)在小型化、高速通信、訪問靈活性及冗余容錯等方面的發(fā)展需求:
(1)以PCI總線為代表的并行總線,速率很難進(jìn)一步提高,總線信號數(shù)量多,不利于小型化和冗余容錯應(yīng)用。同時,這類總線普遍存在單點故障失效問題,可靠性低;隨著設(shè)備量的增加,負(fù)載能力下降,可擴展性差[4]。
(2)PCI Express、Space-Wire、Rapid-IO[5-7]等高速串行總線采用LVDS信號傳送方式,只能支持點對點的直接通信,如果需要在多個部件(設(shè)備)之間進(jìn)行通信,必須通過路由器或交換器進(jìn)行轉(zhuǎn)接,在增加了設(shè)備的同時,通信可靠性也受到路由器件的嚴(yán)重制約。這些總線大多采用靜態(tài)結(jié)構(gòu),不能支持對通道故障的動態(tài)容錯,沒有解決傳統(tǒng)并行總線存儲的單點故障失效問題。
動態(tài)可重構(gòu)高速串行總線(UM-BUS)是一種面向高可靠應(yīng)用的高速串行總線。它采用基于 M-LVDS信號傳輸?shù)目偩€型拓?fù)浣Y(jié)構(gòu),支持最多 30個總線節(jié)點的直接互連;采用多通道(lane)并發(fā)傳輸技術(shù)提高總線傳輸帶寬;采用動態(tài)重構(gòu)技術(shù)實時檢測通道故障與節(jié)點故障,通過將數(shù)據(jù)動態(tài)均衡地分配到有效通道上,實現(xiàn)動態(tài)容錯。與傳統(tǒng)總線相比,UM-BUS總線具有以下主要特點:
(1)具有總線工作狀態(tài)的自檢測命令,實現(xiàn)故障狀態(tài)的在線實時動態(tài)監(jiān)測,為高速總線數(shù)據(jù)傳輸冗余容錯管理提供通道健康狀態(tài)的信息屬性。
(2)多通道 MLVDS可以作為超高帶寬背板總線實現(xiàn)多模塊信息互聯(lián)、高性能并聯(lián)計算機大數(shù)據(jù)流高速互聯(lián)總線以及新型數(shù)據(jù)處理系統(tǒng)公共資源的高速共享數(shù)據(jù)通道。
(3)屬于一種新型高速高可靠的容錯總線,總線為信息提供最大的傳輸帶寬的同時,還具有容錯機制,可以靈活地進(jìn)行動態(tài)總線重構(gòu),允許在多重通道故障的情況下,仍能滿足數(shù)據(jù)的可靠傳輸。
(4)可變帶寬,可變字長數(shù)據(jù)傳輸交換的自適應(yīng)機制,可以方便地構(gòu)建數(shù)據(jù)處理系統(tǒng)新型的拓?fù)浣Y(jié)構(gòu),能夠靈活適應(yīng)不同節(jié)點設(shè)備或不同板卡的不同帶寬的要求。
(5)設(shè)有專用公共中斷請求線,具有專門的中斷優(yōu)先權(quán)仲裁模式,為及時傳輸關(guān)鍵數(shù)據(jù)和實時控制信號提供快速響應(yīng)。
動態(tài)可重構(gòu)總線是一種面向高可靠應(yīng)用的高速串行總線,可實時檢測通道故障,通過動態(tài)重構(gòu)實現(xiàn)故障容錯。本文為解決故障狀態(tài)下的總線數(shù)據(jù)動態(tài)重構(gòu)問題,設(shè)計一種動態(tài)可重構(gòu)總線數(shù)據(jù)傳輸管理方法。
UM-BUS采用基于M-LVDS[8]技術(shù)的多節(jié)點、智能動態(tài)冗余的多通道總線拓?fù)浣Y(jié)構(gòu),節(jié)點直接連接,不需要路由、轉(zhuǎn)接器,如圖1所示,其中,m表示總線上的節(jié)點數(shù),最大節(jié)點數(shù)為32;n表示通信通道數(shù),最大通道數(shù)為 32路。在節(jié)點間通信過程中,如果某幾條通道出現(xiàn)故障,可自動屏蔽無效通道,在剩余有效通道上進(jìn)行通信。
圖1 總線拓?fù)浣Y(jié)構(gòu)
在總線通信過程中,采取數(shù)據(jù)包的形式交互信息。數(shù)據(jù)傳輸格式分為長包數(shù)據(jù)和短包數(shù)據(jù),數(shù)據(jù)幀格式如圖2所示。
其中,短包數(shù)據(jù)只包含數(shù)據(jù)頭部分。長包格式用于大量數(shù)據(jù)的傳輸,短包格式主要是用于控制類數(shù)據(jù)的傳輸或少量數(shù)據(jù)傳輸。
圖2 數(shù)據(jù)包格式
UM-BUS通信協(xié)議劃分為3個獨立層次,從上至下依次分別為:處理層,數(shù)據(jù)鏈路層,物理層。數(shù)據(jù)鏈路層又分為傳輸緩沖層和傳輸子層。數(shù)據(jù)的傳輸過程如圖3所示。在發(fā)送端,從上層接口處獲得的數(shù)據(jù)包在處理層構(gòu)建,存儲到數(shù)據(jù)緩沖層。在傳輸子層,根據(jù)有效通道情況對數(shù)據(jù)包動態(tài)均衡地分配到通道上,在物理層,對分組數(shù)據(jù)包進(jìn)行收發(fā)的包裝,經(jīng)過8 bit/10 bit編解碼轉(zhuǎn)換成比特流傳送。在接收端,8 bit/10 bit解碼器將10 bit數(shù)據(jù)轉(zhuǎn)換成8 bit數(shù)據(jù),傳輸子層對數(shù)據(jù)進(jìn)行動態(tài)組織,存儲到數(shù)據(jù)緩沖層,經(jīng)過處理層處理交付上層??偩€的目標(biāo)是實現(xiàn)在最多32個通道實現(xiàn)并發(fā)傳輸,單通道速率達(dá)到100 Mb/s,為實現(xiàn)該目標(biāo),在進(jìn)行大量數(shù)據(jù)傳輸時,每秒需要處理320 MB的數(shù)據(jù),總線工作時鐘為100 Hz,每個時鐘周期需要處理4 Byte的數(shù)據(jù),即需要在每個時鐘周期處理4個通道的數(shù)據(jù),因此,采用四體FIFO結(jié)構(gòu)對數(shù)據(jù)進(jìn)行緩沖存儲,每個FIFO位寬為1 Byte。在將4個緩沖存儲體與不定數(shù)目通道進(jìn)行數(shù)據(jù)傳輸映射時,如果采用固定結(jié)構(gòu),則具有邏輯簡單的優(yōu)點,但對于某一條或幾條通道發(fā)生故障,數(shù)據(jù)無法均勻地分配通道上,不能實現(xiàn)總線的重構(gòu)。為此,本文設(shè)計一種基于矩陣開關(guān)的數(shù)據(jù)傳輸管理方法,利用通道故障狀態(tài)表,通過 4×32矩陣開關(guān)數(shù)據(jù)傳輸管理陣列動態(tài)管理4個緩沖區(qū)與不定數(shù)目通道的數(shù)據(jù)傳輸,使數(shù)據(jù)均衡的分配到有效通道上,實現(xiàn)故障狀態(tài)下數(shù)據(jù)的動態(tài)重構(gòu)。
圖3 數(shù)據(jù)傳輸過程
數(shù)據(jù)傳輸管理部分位于傳輸子層,在發(fā)送時,負(fù)責(zé)將數(shù)據(jù)緩沖區(qū)數(shù)據(jù)動態(tài)均衡地分配到最多 32條物理通道上,在接收時,負(fù)責(zé)將通道數(shù)據(jù)正確地存儲到數(shù)據(jù)緩沖區(qū)中。在設(shè)計過程中,需要解決如下問題:
(1)動態(tài)可重構(gòu)總線最大通道數(shù)為32通道,不考慮在通信過程中鏈路斷開2次以上的情況,可用通道情況具有232?1種情況。需要將存儲體與不定數(shù)量的通道進(jìn)行動態(tài)映射。
(2)在32個通道都有效的情況下,接收端32通道中的數(shù)據(jù)幾乎同時到達(dá)物理層的存儲區(qū)域,由于采用8b/10b編碼方式,每個數(shù)據(jù)需要經(jīng)過10個時鐘周期到達(dá)另一端,每10個周期傳送32 Byte的數(shù)據(jù),需要在10個時鐘周期內(nèi)將32個通道對應(yīng)物理層存儲區(qū)域中的數(shù)據(jù)存入處理層存儲區(qū)域。
(3)為滿足 UM-BUS的傳輸速率,適應(yīng)總線的數(shù)據(jù)傳輸格式,同時便于對數(shù)據(jù)進(jìn)行存儲,需要對數(shù)據(jù)緩沖層進(jìn)行合理設(shè)計。
本文對數(shù)據(jù)緩沖層進(jìn)行如下設(shè)計:短包數(shù)據(jù)和命令頭部分采用獨立的I/O區(qū)域進(jìn)行存儲,長包數(shù)據(jù)主體數(shù)據(jù)區(qū)采用存儲緩沖區(qū)域存儲。數(shù)據(jù)緩沖采用為雙口存儲方式,采用四體FIFO用于在長包數(shù)據(jù)傳輸過程中緩沖主體數(shù)據(jù),其長度固定為1 024 Byte。通常的處理器接口是32位,所以,從CPU該存儲區(qū)域是一個32位的存儲體,存儲體深度為256 Byte。由于物理層采用8b/10b的編碼方式,對于任一通道,每次向物理層傳輸或存儲數(shù)據(jù)時操作一個字節(jié)的數(shù)據(jù),對應(yīng)物理層與存儲區(qū)的操作也是每次操作一個字節(jié)的數(shù)據(jù),因此從物理層看該存儲區(qū)域是一個4×256 Byte的四體FIFO存儲器,如圖4所示。
圖4 四體存儲結(jié)構(gòu)
將存儲體數(shù)據(jù)發(fā)送到有效通道上,根據(jù)通道故障信息表,采用輪詢方式發(fā)送。如果此時所有通道均有效,則將存儲空間第1個字節(jié)的數(shù)據(jù)發(fā)送到1號通道,第2個字節(jié)發(fā)送到2號通道,依此類推,直到最后一個字節(jié)發(fā)送完畢或通道出現(xiàn)故障。如果通道中某幾路出現(xiàn)故障,則將所有有效通道按照通道號排列,采用上述輪詢方式發(fā)送數(shù)據(jù)。假設(shè)當(dāng)前有效通道為8路,存儲器向物理層通道上發(fā)送數(shù)據(jù)發(fā)送過程如圖 5所示。將物理層通道的數(shù)據(jù)存儲到存儲體時,按照字節(jié)的順序進(jìn)行存儲,但每條通道的數(shù)據(jù)存儲到哪個存儲區(qū)域中是不固定的,由有效通道數(shù)決定,每條通道的數(shù)據(jù)在存儲空間中對應(yīng)的存儲位置情況應(yīng)滿足如下公式:
其中,lm表示存儲空間每片存儲區(qū)存儲位置序號,規(guī)定存儲體1序號為1,依次3號存儲體序號為 3,4號存儲區(qū)序號為0;em表示上一次存儲的數(shù)據(jù)在存儲體中的位置序號,該值初始值為0,每往任意存儲區(qū)存儲一個數(shù)據(jù)該值加 1;vm表示通道中有效通道的個數(shù);c表示總通道的循環(huán)次數(shù),初始值為 1,每當(dāng)所有通道都輪詢一遍,該值加1。
圖5 分組收發(fā)過程
3.3.1 開關(guān)矩陣映射結(jié)構(gòu)
UM-BUS采用四體 FIFO,每次可同時存取的最大字節(jié)數(shù)為4,使得物理層的通道每次最多并行存取4個數(shù)據(jù),因此,本文定義一個 4×32的開關(guān)矩陣結(jié)構(gòu),每個時鐘周期將 4個 FIFO存儲體與矩陣固定4行對應(yīng)通道進(jìn)行映射,每個存儲體與本周期對應(yīng)的4個通道中某一條對應(yīng)是不定的,由之前周期的對應(yīng)關(guān)系和通道有效情況決定。如圖6所示,對16條通道的 5通道~7通道、12通道~14通道注入故障,在第1周期,4個FIFO存儲體對應(yīng)矩陣的0通道~3通道,在剛開始傳輸數(shù)據(jù)時,由于之前沒有映射關(guān)系,并且本周期4條通道都有效,因此存儲體1~4順序?qū)?yīng) 0通道~3通道;第 2周期,由于之前的映射關(guān)系為一一對應(yīng),且只有4通道有效,因此FIFO1對應(yīng)通道4,其他FIFO不進(jìn)行存取操作;在第3周期,由于上一周期的映射中FIFO2~4沒有進(jìn)行映射,且本周期4個通道都有效,因此FIFO2對應(yīng)通道8,F(xiàn)IFO3對應(yīng)通道9,F(xiàn)IFO4對應(yīng)通道10,F(xiàn)IFO1對應(yīng)通道11,依次類推。
圖6 開關(guān)矩陣映射模型
3.3.2 基于流水線的數(shù)據(jù)傳輸控制
通過流水線方式實現(xiàn)上述矩陣映射過程,并進(jìn)行數(shù)據(jù)傳輸控制??紤]到數(shù)據(jù)緩沖區(qū)和物理層存儲區(qū)域均采用FIFO,在每次向FIFO發(fā)送一個讀信號,需要延遲一個周期,數(shù)據(jù)才能夠讀出,因此,每次發(fā)出讀信號后,需要延遲一個時鐘周期才能夠執(zhí)行寫入操作。同時,由于每個周期進(jìn)行4個存儲體和通道的映射時,都需要知道上一周期的映射情況,對此,本文采用 2級流水線對數(shù)據(jù)傳輸過程進(jìn)行控制,如圖 7所示。
圖7 流水線結(jié)構(gòu)
以物理層通道的數(shù)據(jù)存入4個FIFO存儲體為例:在狀態(tài) 1讀出 0通道~3通道有效通道的數(shù)據(jù),并計算第 0通道~3通道有效通道的數(shù)據(jù)存儲位置,在狀態(tài)2,向這4組通道中有效通道存儲區(qū)寫入數(shù)據(jù),同時向 4通道~5通道的有效通道存儲區(qū)發(fā)出讀信號,并計算4個通道有效通道數(shù)據(jù)的存儲位置,依次類推。每周期傳輸?shù)淖止?jié)數(shù)是不固定的,其值和本周期所進(jìn)行存儲操作的有效通道數(shù)目相同。四體FIFO中數(shù)據(jù)發(fā)送到通道過程與上述過程類似。
所有的狀態(tài)形成環(huán)路對通道和4個FIFO存儲體進(jìn)行映射和存取控制,這個過程是通過狀態(tài)機實現(xiàn)的,狀態(tài)機轉(zhuǎn)換示意圖如圖8所示。
圖8 傳輸控制轉(zhuǎn)換示意圖
在 idle狀態(tài)下,如果物理層或者處理層通知開始進(jìn)行數(shù)據(jù)動態(tài)重構(gòu),跳轉(zhuǎn)到狀態(tài)1。以物理層通道上的數(shù)據(jù)向四體FIFO存儲為例,在狀態(tài)1計算0通道~3通道的數(shù)據(jù)存入哪個FIFO存儲體,如果此時,0通道~3通道的數(shù)據(jù)準(zhǔn)備好,所存入FIFO不滿則跳轉(zhuǎn)到狀態(tài)2,并且,向物理層存儲區(qū)域發(fā)送讀信號,在下一個周期將數(shù)據(jù)輸出,并向存入的FIFO存儲體發(fā)送寫信號;否則繼續(xù)等待。在狀態(tài)2計算4通道~7通道的數(shù)據(jù)存入哪個 FIFO存儲體,如果此時,4通道~7通道的數(shù)據(jù)準(zhǔn)備好,并且所存入FIFO不滿則跳轉(zhuǎn)到狀態(tài)3,并且,向物理層存儲區(qū)域發(fā)送讀信號,在下一個周期將數(shù)據(jù)輸出,并向存入的FIFO存儲體發(fā)送寫信號;否則繼續(xù)等待,依次類推。在任意狀態(tài)下,如果收到傳輸停止標(biāo)志信號,則跳轉(zhuǎn)到idel狀態(tài)。四體FIFO中數(shù)據(jù)發(fā)送通道的過程類似。
以8通道動態(tài)可重構(gòu)總線為驗證,隨機地向第7通道和第3通道注入故障。如圖3所示的動態(tài)可重構(gòu)總線數(shù)據(jù)傳輸過程,在隨機注入故障、進(jìn)行通道檢測后,得到故障狀態(tài)信息表,處理層重新發(fā)送1 024 Byte數(shù)據(jù)到4個FIFO存儲體,存儲完成后通知傳輸子層進(jìn)行數(shù)據(jù)動態(tài)重構(gòu),傳輸子層根據(jù)故障狀態(tài)信息表將數(shù)據(jù)均衡地分配到有效通道上進(jìn)行傳輸,在接收端,傳輸子層將有效通道的數(shù)據(jù)動態(tài)組織存入FIFO存儲體中,通信過程得到恢復(fù)。在 Modelsim軟件下的仿真結(jié)果如圖 9所示,dpi(0)~dpi(8)為 8個通道得到經(jīng)動態(tài)分配后的數(shù)據(jù),dpiw為8個通道的寫信號??梢钥闯觯ǖ莱霈F(xiàn)故障后,4個 FIFO存儲體的數(shù)據(jù),根據(jù)通道資源表動態(tài)分配到物理層中有效通道上,通信得到恢復(fù)。
圖9 數(shù)據(jù)動態(tài)分配到物理層的有效通道
將上述數(shù)據(jù)傳輸管理模塊應(yīng)用在 32路動態(tài)可重構(gòu)總線中,采用SPARTAN-6系列FPGA進(jìn)行實現(xiàn),占用 1 248個 SLICE,最高頻率可達(dá) 214 MHz。在8通道UM-BUS總線中,實測通信速率達(dá)到了100 Mb/s通道,可進(jìn)行最多7個通道故障動態(tài)容錯。UM-BUS 與高速總線的技術(shù)指標(biāo)對比如表1所示。
表1 高速串行總線與UM-BUS的技術(shù)指標(biāo)對比特征