程照強(qiáng),劉淑芬
(北京控制工程研究所,北京 100190)
SpaceWire[1]是由ESA推出的專門面向航天應(yīng)用的高速總線,它以IEEE 1355-1995和LVDS標(biāo)準(zhǔn)(ANSI/TIA/EIA-644)為基礎(chǔ),同時(shí)在錯(cuò)誤處理方面有更好的支持.其基本特點(diǎn)是串行、高速(200Mbit/s)、全雙工.SpaceWire CODEC(encoderdecoder)是SpaceWire協(xié)議控制器的主要組成部分,主要完成對(duì)數(shù)據(jù)的編碼發(fā)送和解碼接收.SpaceWire CODEC的組成中包含寄存器以及存儲(chǔ)器單元,這些單元存儲(chǔ)著系統(tǒng)的狀態(tài)、控制信息、數(shù)據(jù)等,在空間環(huán)境中高能粒子的影響下容易發(fā)生單粒子翻轉(zhuǎn)(SEU,single event upset)、單粒子功能中斷(SEFI,single event functional interrupt)等,尤其在基于FPGA的實(shí)現(xiàn)方式中,這些存儲(chǔ)單元更容易受到SEU、SEFI的影響.為了保證產(chǎn)品在軌正常工作,必須對(duì)SpaceWire CODEC進(jìn)行容錯(cuò)設(shè)計(jì)以減緩SEU、SEFI等單粒子效應(yīng)的影響.
SpaceWire CODEC包括協(xié)議中的信號(hào)層(不包含其中LVDS接口部分)、字符層、交換層和數(shù)據(jù)包層.SpaceWire CODEC由發(fā)送先進(jìn)先出數(shù)據(jù)緩存器(FIFO,first in first out memory)、接收 FIFO、發(fā)送器、接收器以及主控制器5部分組成.發(fā)送及接收FIFO主要用來(lái)實(shí)現(xiàn)主機(jī)和SpaceWire CODEC的數(shù)據(jù)交換;發(fā)送器則是按照主控制器的要求,對(duì)相應(yīng)的字符進(jìn)行編碼并發(fā)送;接收器則主要實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行解碼和錯(cuò)誤檢測(cè);主控制器主要用來(lái)控制數(shù)據(jù)傳輸,包括鏈路控制、錯(cuò)誤恢復(fù)、控制發(fā)送器發(fā)送數(shù)據(jù)以及接收器接收數(shù)據(jù)等功能.SpaceWire CODEC結(jié)構(gòu)簡(jiǎn)圖如圖1所示.
圖1 SpaceWire CODEC結(jié)構(gòu)簡(jiǎn)圖Fig.1 Block diagram of SpaceWire CODEC
SpaceWire自身提供了一些容錯(cuò)措施,包括:在信號(hào)層中采用DS(Data-Strobe)編碼,該編碼可以很好地消除時(shí)鐘偏移,減小或者補(bǔ)償數(shù)據(jù)偏移;在字符層增加奇偶校驗(yàn)位(每10位數(shù)據(jù)至少有1位奇偶校驗(yàn)位),通過(guò)信息冗余來(lái)提高數(shù)據(jù)傳輸?shù)目煽啃?在數(shù)據(jù)包層,通過(guò)正常數(shù)據(jù)包結(jié)束符(EOP,normal end of packet)和錯(cuò)誤數(shù)據(jù)包結(jié)束符(EEP,error end of packet)來(lái)區(qū)分正確的數(shù)據(jù)包以及錯(cuò)誤的數(shù)據(jù)包;在交換層能夠檢測(cè)到的錯(cuò)誤以及這些錯(cuò)誤的處理方法如表1所述,交換層是實(shí)現(xiàn)SpaceWire錯(cuò)誤檢測(cè)和恢復(fù)的主要協(xié)議層;在網(wǎng)絡(luò)層中,采用自適應(yīng)群組路由(GAR,group adaptive routing),其目的之一是實(shí)現(xiàn)冗余路由、冗余鏈接,當(dāng)?shù)竭_(dá)目標(biāo)節(jié)點(diǎn)的某條鏈接出現(xiàn)故障時(shí),可以通過(guò)網(wǎng)絡(luò)中的其他鏈接到達(dá)目標(biāo)節(jié)點(diǎn),從而提高網(wǎng)絡(luò)的容錯(cuò)能力.
表1 中,ErrorReset、Started、Run 是SpaceWire主狀態(tài)機(jī)的三個(gè)狀態(tài),Time-Code、FCT(flow control token)、ESC(Escape)、EEP、EOP、NULL 則 是SpaceWire中規(guī)定的字符,N-Chars(Normal-Characters)指EEP、EOP和數(shù)據(jù)字符.表1中的錯(cuò)誤恢復(fù)過(guò)程是基于端到端的SpaceWire鏈接來(lái)實(shí)現(xiàn)的.具體的恢復(fù)過(guò)程以A、B兩個(gè)端點(diǎn)之間的鏈接為例:當(dāng)A端主控制器的狀態(tài)寄存器跳轉(zhuǎn)到一個(gè)非法的狀態(tài)(如發(fā)生SEU,A端檢測(cè)到錯(cuò)誤的情況類似)時(shí),A端主控制器將控制A端發(fā)送器停止發(fā)送任何數(shù)據(jù),鏈接B端的接收器在850ns內(nèi)接收不到任何有效的數(shù)據(jù),將產(chǎn)生一個(gè)斷開(kāi)鏈接錯(cuò)誤,并將此錯(cuò)誤通知給B端的主控制器,B端主控制器在接收到斷開(kāi)鏈接錯(cuò)誤后,控制B端發(fā)送器停止發(fā)送任何數(shù)據(jù),這將在A端造成一個(gè)鏈接斷開(kāi)錯(cuò)誤,至此,A、B兩端之間的鏈接完全斷開(kāi),并重新開(kāi)始建立鏈接,如果建立鏈接條件不成立,那么A、B兩端將一直嘗試建立鏈接,直到A、B兩端非使能(停止建立鏈接)或建立鏈接的條件成立;如果建立鏈接條件成立,鏈接重新建立,恢復(fù)數(shù)據(jù)傳輸,A、B之間的鏈接完成一個(gè)錯(cuò)誤恢復(fù)過(guò)程.B端檢測(cè)到錯(cuò)誤的情況和A端類似.此外,當(dāng)A、B之間的鏈接出現(xiàn)故障時(shí),可以通過(guò)路由、冗余的鏈接找到從A到B進(jìn)行數(shù)據(jù)傳輸?shù)钠渌溄?
SpaceWire沒(méi)有規(guī)定SpaceWire CODEC內(nèi)部的容錯(cuò)能力,其發(fā)送/接收FIFO本身不具有任何錯(cuò)誤檢測(cè)、恢復(fù)的能力;發(fā)送器對(duì)數(shù)據(jù)進(jìn)行發(fā)送時(shí),增加奇偶校驗(yàn)位,提高數(shù)據(jù)傳輸?shù)目煽啃?接收器具有較強(qiáng)的檢錯(cuò)能力,可以檢測(cè)到表1中的各種錯(cuò)誤,將錯(cuò)誤信息傳遞給主控制器.主控制器通過(guò)控制鏈接來(lái)實(shí)現(xiàn)錯(cuò)誤恢復(fù).
SpaceWire的容錯(cuò)能力體現(xiàn)在基于端到端的鏈接,SpaceWire CODEC具有一定的錯(cuò)誤檢測(cè)能力,但這不足以保證在惡劣的空間環(huán)境中實(shí)現(xiàn)可靠的數(shù)據(jù)傳輸,具體表現(xiàn)在以下幾個(gè)方面:
①SpaceWire CODEC僅在發(fā)送數(shù)據(jù)時(shí)增加奇偶校驗(yàn)位,在發(fā)送/接收FIFO中,沒(méi)有任何保證數(shù)據(jù)可靠性的措施.FIFO作為SpaceWire CODEC和主機(jī)之間的緩沖區(qū),用來(lái)存儲(chǔ)待發(fā)送/接收到的數(shù)據(jù)、命令、控制信息,是容易受SEU、SEFI影響的部分,不采取容錯(cuò)措施有可能導(dǎo)致發(fā)送/接收到的數(shù)據(jù)、命令發(fā)生錯(cuò)誤并造成嚴(yán)重的后果;
②SpaceWire CODEC的容錯(cuò)策略側(cè)重在檢測(cè)到錯(cuò)誤后,采用基于端到端的錯(cuò)誤恢復(fù)機(jī)制實(shí)現(xiàn)錯(cuò)誤恢復(fù),而不是SpaceWire CODEC自身來(lái)糾正檢測(cè)到的錯(cuò)誤,在空間環(huán)境中SpaceWire CODEC的實(shí)現(xiàn)載體如果受到空間輻射的影響,將影響系統(tǒng)的可靠性;
③SpaceWire基于端到端的錯(cuò)誤恢復(fù)機(jī)制,并非能糾正檢測(cè)到的所有錯(cuò)誤;當(dāng)SpaceWire CODEC中的一些寄存器,如寄存器中的[Linkable]位(鏈接建立使能位)發(fā)生了翻轉(zhuǎn),只能通過(guò)對(duì)寄存器中的[Linkable]位進(jìn)行重新設(shè)置,否則鏈接將無(wú)法建立;
④SpaceWire CODEC這種基于鏈接的錯(cuò)誤檢測(cè)、恢復(fù)方法需要占用網(wǎng)絡(luò)的時(shí)間資源和帶寬資源.以錯(cuò)誤恢復(fù)時(shí)間為20μs、傳輸速率為100Mbit/s計(jì)算,那么在鏈接恢復(fù)的過(guò)程至少有2000bit的數(shù)據(jù)無(wú)法處理,這不僅會(huì)造成鏈接阻塞,影響數(shù)據(jù)的正常傳輸,對(duì)系統(tǒng)的實(shí)時(shí)性也將產(chǎn)生影響.
根據(jù)以上分析,為適應(yīng)惡劣的空間環(huán)境,有必要對(duì)SpaceWire CODEC中的FIFO、狀態(tài)機(jī)、寄存器等容易受SEU、SEFI影響的部分進(jìn)行容錯(cuò)設(shè)計(jì).
表1 交換層出錯(cuò)類型以及處理方法Tab.1 Error types and their handling ways in exchange level
FIFO作為CODEC和主機(jī)之間的緩沖單元,需要存儲(chǔ)的數(shù)據(jù)包括8位數(shù)據(jù)和1位控制信息標(biāo)志位.檢錯(cuò)糾錯(cuò)(EDAC,error detect and correct)是FIFO的有效容錯(cuò)設(shè)計(jì)方法.
本文通過(guò)實(shí)現(xiàn)Hsiao[2-3]編碼,使FIFO具有糾一檢二的能力.與擴(kuò)展Hamming編碼相比,Hsiao編碼具有以下優(yōu)點(diǎn):①編解碼速度快,校驗(yàn)矩陣中每行“1”的個(gè)數(shù)相等,這說(shuō)明用于產(chǎn)生每位校驗(yàn)位的電路延時(shí)幾乎相等,不僅速度快,而且便于優(yōu)化;②電路面積小,校驗(yàn)矩陣中的“1”表示硬件電路中參與XOR運(yùn)算的相關(guān)數(shù)據(jù)位,Hsiao編碼中所用到的XOR比擴(kuò)展Hamming編碼的要少,這不僅能減小面積,同時(shí)能降低功耗;③Hsiao編碼4位錯(cuò)誤的檢測(cè)概率高于擴(kuò)展Hamming編碼.
Hsiao編碼最重要的是校驗(yàn)矩陣即H矩陣的構(gòu)造,H矩陣應(yīng)滿足:
①每列中有奇數(shù)個(gè)“1”,無(wú)相同列;
②每行中“1”的個(gè)數(shù)盡可能相等;
③“1”的總個(gè)數(shù)盡可能少.
上述條件保證了編碼的最小距離是4,可實(shí)現(xiàn)糾一檢二,但是校驗(yàn)矩陣卻不唯一.以本文中的FIFO為例,(14,9)分組碼的H矩陣有C(10,9)=10種選擇,不同的矩陣對(duì)電路的性能影響是不同的,目前尚無(wú)有效的選擇算法,本文選擇了表2所示的校驗(yàn)矩陣.
當(dāng)出現(xiàn)兩位數(shù)據(jù)錯(cuò)誤時(shí),具體的處理方法如下:將錯(cuò)誤信號(hào)返回給更高層,同時(shí)將數(shù)據(jù)中的原有數(shù)據(jù)直接輸出.這樣的考慮是基于:①檢測(cè)到兩位錯(cuò)誤,這兩位錯(cuò)誤并非一定出現(xiàn)在有效數(shù)據(jù)位,也有可能在校驗(yàn)位出錯(cuò),甚至出錯(cuò)的兩位都在校驗(yàn)位;②傳輸層、應(yīng)用層如果也采取相應(yīng)的措施,完全有可能糾正此錯(cuò)誤;③可以由應(yīng)用層根據(jù)數(shù)據(jù)的不同應(yīng)用來(lái)決定如何處理.
表2 Hsiao碼校驗(yàn)矩陣Tab.2 Check matrix of Hsiao coding
采用Hsiao編碼使FIFO具有糾一檢二的能力,實(shí)現(xiàn)EDAC后FIFO的結(jié)構(gòu)如圖2所示.
SpaceWire主控制器狀態(tài)機(jī)(FSM,finite state machine)是SpaceWire CODEC電路中的重要組成部分,主要用來(lái)完成鏈接建立、鏈路維護(hù)、鏈路控制以及錯(cuò)誤處理等,其容錯(cuò)能力、可靠性直接影響到總線的正常工作.
SpaceWire主控制器狀態(tài)機(jī)包括ErrorReset、ErrorWait、Ready、Started、Connecting、Run 6 個(gè)狀態(tài),除了在鏈接建立過(guò)程中要經(jīng)過(guò)ErrorReset、ErrorWait、Ready、Started、Connecting這 5 個(gè)狀態(tài)之外,一旦鏈接建立,其狀態(tài)機(jī)的狀態(tài)將一直保持Run狀態(tài),直到鏈接終止或者出現(xiàn)錯(cuò)誤.
圖2 帶有檢錯(cuò)糾錯(cuò)功能的FIFO結(jié)構(gòu)圖Fig.2 Block diagram of FIFO with EDAC
對(duì)正常運(yùn)行的SpaceWire網(wǎng)絡(luò)來(lái)說(shuō),幾乎所有接口的主狀態(tài)機(jī)都運(yùn)行在Run狀態(tài).為保證數(shù)據(jù)的可靠傳輸,狀態(tài)機(jī)處在Run狀態(tài)時(shí)要采取更加有效的容錯(cuò)設(shè)計(jì)方法,同時(shí)增強(qiáng)在其他狀態(tài)時(shí)的檢錯(cuò)能力,借助SpaceWire自身的錯(cuò)誤恢復(fù)能力實(shí)現(xiàn)錯(cuò)誤恢復(fù).本文對(duì)主控制器狀態(tài)機(jī)采用下列方案進(jìn)行容錯(cuò)設(shè)計(jì):
①狀態(tài)機(jī)采用 One-Hot編碼[4],可有效地提高電路的速度和可靠性;
②One-Hot編碼正常狀態(tài)只有一個(gè)觸發(fā)器的狀態(tài)為1,其余態(tài)皆為0,根據(jù)這個(gè)特點(diǎn),對(duì)當(dāng)前狀態(tài)機(jī)寄存器增加奇偶判斷,來(lái)有效地檢測(cè)合法狀態(tài)到非法狀態(tài)之間的轉(zhuǎn)化;
③增加一個(gè)前態(tài)寄存器,在主狀態(tài)機(jī)的轉(zhuǎn)換關(guān)系中,任何狀態(tài)到達(dá)ErrorReset都是合法的;除了Error-Reset狀態(tài)之外,其他任何狀態(tài)只能由一個(gè)狀態(tài)轉(zhuǎn)換而來(lái);在到達(dá)當(dāng)前狀態(tài)時(shí),首先判斷前一個(gè)狀態(tài)是否對(duì)應(yīng),以此來(lái)防止合法狀態(tài)之間的非法轉(zhuǎn)化(如ErrorWait跳轉(zhuǎn)到Started就是一個(gè)非法的轉(zhuǎn)化);
④設(shè)置rflag標(biāo)志,在到達(dá)Run狀態(tài)時(shí),對(duì)當(dāng)前的狀態(tài)寄存器采取刷新的策略,保證狀態(tài)機(jī)在Run狀態(tài)時(shí),有更高的可靠性.同時(shí)對(duì)rflag標(biāo)志位進(jìn)行刷新,防止錯(cuò)誤的積累而導(dǎo)致rflag判斷出錯(cuò).
本文對(duì)主狀態(tài)機(jī)采用 One-Hot編碼、帶有EDAC功能的二進(jìn)制編碼[5]以及本文所采用的方法進(jìn)行對(duì)比(僅對(duì)主控制器進(jìn)行綜合),如表3所示.
由表3可知,狀態(tài)機(jī)采用EDAC編碼,增加了額外的解碼電路、編碼電路,因而需要較多的邏輯資源,對(duì)頻率會(huì)產(chǎn)生影響;One-Hot編碼需要較多的觸發(fā)器資源,邏輯資源則相對(duì)較少;本文采用的方法資源開(kāi)銷較小,并可以達(dá)到較高的頻率.
表3 主控制器狀態(tài)機(jī)3種不同設(shè)計(jì)方法對(duì)比Tab.3 Comparison of three different design methods for master controller FSM
寄存器作為SpaceWire CODEC的重要組成單元,其中暫存著協(xié)議執(zhí)行過(guò)程中的重要數(shù)據(jù),它的可靠性至關(guān)重要.由于設(shè)計(jì)中的寄存器分布比較分散,不適合采用冗余編碼方案,因此本文對(duì)SpaceWire CODEC中所有寄存器采用空時(shí)三模冗余(ST-TMR,space-time triple modular redundancy)[6]設(shè)計(jì).
圖3 空時(shí)三模冗余結(jié)構(gòu)示意圖Fig.3 Block diagram of ST-TMR
采用ST-TMR不僅可以防止單一寄存器發(fā)生SEU而導(dǎo)致數(shù)據(jù)失效,同時(shí)由于ST-TMR采用了硬件冗余和時(shí)間冗余相結(jié)合的技術(shù),寄存器前一級(jí)的組合邏輯上的單粒子瞬時(shí)干擾(SET,single event transient)也可以被濾除.ST-TMR能夠有效減輕組合邏輯的SET和時(shí)序邏輯的SEU.如圖3所示,STTMR容錯(cuò)方法通過(guò)在組合邏輯的下一級(jí)時(shí)序邏輯上使用帶延遲的多級(jí)時(shí)鐘,可以在不同時(shí)刻采樣組合邏輯的輸出,利用該時(shí)間差,濾除組合邏輯有可能發(fā)生的SET.
實(shí)現(xiàn)ST-TMR首先是要生成帶有時(shí)延的時(shí)鐘.在FPGA中可以通過(guò)插入buffer來(lái)實(shí)現(xiàn),本文采用xc4vlx200型FPGA中的BUFIO緩沖單元來(lái)實(shí)現(xiàn),延時(shí)約為 380ps.實(shí)現(xiàn)兩級(jí)延時(shí)為 760ps.當(dāng)采用100MHz的時(shí)鐘頻率時(shí),這一延時(shí)為時(shí)鐘周期的7.6%,對(duì)時(shí)序的影響較小,當(dāng)采用的時(shí)鐘頻率更高時(shí),影響將加大.
在Modelsim6.2g下,通過(guò)對(duì)寄存器、信號(hào)進(jìn)行強(qiáng)制賦值來(lái)實(shí)現(xiàn)對(duì)SpaceWire CODEC中寄存器的故障注入;在TestBench中,通過(guò)一個(gè)故障注入的進(jìn)程來(lái)實(shí)現(xiàn)對(duì)某些信號(hào)的強(qiáng)制賦值,在30001ns時(shí),強(qiáng)制將狀態(tài)寄存器的狀態(tài)更改為一個(gè)非法的狀態(tài)“110000”,持續(xù)時(shí)間為100ns.分別對(duì)容錯(cuò)設(shè)計(jì)前后的CODEC注入故障,可以看到在圖4中,由于注入故障,導(dǎo)致?tīng)顟B(tài)寄存器直接回到 ErrorReset(“000001”)狀態(tài),鏈接斷開(kāi);在圖5中注入同樣的故障,在故障結(jié)束后,狀態(tài)寄存器仍然在 Run(“100000”)狀態(tài),鏈接并沒(méi)有受到故障的影響,仍然進(jìn)行正常的數(shù)據(jù)傳輸.在對(duì)數(shù)據(jù)進(jìn)行EDAC編碼后、寫入FIFO之前以及在從FIFO中讀出數(shù)據(jù)進(jìn)行EDAC解碼之前,隨機(jī)的注入一位、兩位故障來(lái)實(shí)現(xiàn)對(duì)FIFO的故障注入.故障注入的結(jié)果表明,容錯(cuò)設(shè)計(jì)能有效地屏蔽注入的故障.
采用容錯(cuò)設(shè)計(jì)的SpaceWire CODEC在Vitrex-4系列開(kāi)發(fā)板上實(shí)現(xiàn),其物理測(cè)試鏈接示意圖如圖6所示.通過(guò)和SpaceWire標(biāo)準(zhǔn)接口建立鏈接,能夠正確地發(fā)送、接收各種字符以及斷開(kāi)鏈接后恢復(fù)鏈接.驗(yàn)證結(jié)果表明采用容錯(cuò)設(shè)計(jì)后的SpaceWire CODEC功能正確.
圖6 SpaceWire物理測(cè)試鏈接示意圖Fig.6 Interconnection of SpaceWire test
容錯(cuò)設(shè)計(jì)是提高產(chǎn)品可靠性的有效途徑,產(chǎn)品設(shè)計(jì)過(guò)程中需要在各個(gè)環(huán)節(jié)采取容錯(cuò)措施.本文分析了SpaceWire協(xié)議的容錯(cuò)性能,并對(duì) SpaceWire CODEC的容錯(cuò)設(shè)計(jì)方法及驗(yàn)證情況進(jìn)行了介紹.通過(guò)對(duì)SpaceWire CODEC中的FIFO、狀態(tài)機(jī)和寄存器進(jìn)行相應(yīng)的容錯(cuò)設(shè)計(jì),從整體上提高了SpaceWire CODEC的容錯(cuò)能力.仿真結(jié)果表明容錯(cuò)設(shè)計(jì)有效,測(cè)試結(jié)果表明容錯(cuò)設(shè)計(jì)的SpaceWire CODEC功能正確.
[1 ] Steve P.Space engineering spacewire-links,nodes,routers and networks[S].ESA-ESTEC ,2008
[2] Hsiao M Y.A class of optimal minimum odd-weight-column SEC-DED codes[J].IBM Journal of R & D,1970,14:395-401
[3] Ghosh S,Basu S,Touba N A.Reducing power consumption in memory ECC checkers[C].IEEE International Test Conference,Charlotte,Oct 26-28,2004
[4] Kumar N.Automated FSM error correction for single event upsets[C].Military and Aerospace Programmable Logic Devices International Conference,Washington D.C,2004
[5] Shailesh N.A comparison of fault-tolerant state machine architecture for space-borne electronics[J].IEEE Transactions on Reliability,1996,45(1):109-113
[6] Chen W,Gong R.Two new space-time triple modular redundancy techniques for improving fault tolerance of computer systems[C].The 6thIEEE International Conference on Computer and Information Technology,Washington D C,Sep.2006