祝 平,朱 巖,安軍社,江源源,周 莉
(1.中國科學(xué)院 國家空間科學(xué)中心 復(fù)雜航天系統(tǒng)電子信息技術(shù)重點(diǎn)實(shí)驗(yàn)室, 北京 100190;2. 中國科學(xué)院大學(xué), 北京 100049)
隨著空間技術(shù)的飛速發(fā)展,星上任務(wù)的規(guī)模和復(fù)雜度也相應(yīng)地提升,面對星上各類載荷設(shè)備越來越多的數(shù)據(jù)量,需要考慮不同數(shù)據(jù)源的傳輸需求和載荷設(shè)備之間靈活的互聯(lián)方案。傳統(tǒng)的控制器局域網(wǎng)絡(luò)(Controller Area Network, CAN) 總線、1553 B越來越難以滿足空間任務(wù)的發(fā)展需求。2003年,歐空局提出的SpaceWire總線協(xié)議支持全雙工點(diǎn)對點(diǎn)和靈活的路由組網(wǎng),但傳輸速度最高只有400 Mbit/s。
針對航天傳輸任務(wù)中的諸多需求,2019年歐空局在SpaceWire總線的基礎(chǔ)上提出了面向高速傳輸?shù)男乱淮咚倩ヂ?lián)總線網(wǎng)絡(luò)SpaceFibre[1]的標(biāo)準(zhǔn)。SpaceFibre支持點(diǎn)對點(diǎn)全雙工傳輸,采用8 B/10 B編碼,單通道速率最高可達(dá)6.25 Gbit/s,多通道傳輸速率可達(dá)50 Gbit/s,支持光纖和電纜傳輸;支持路由網(wǎng)絡(luò)結(jié)構(gòu),拓?fù)潇`活,能夠?qū)崿F(xiàn)各類星載設(shè)備的互聯(lián)。同時(shí)SpaceFibre能夠在網(wǎng)絡(luò)層兼容SpaceWire,實(shí)現(xiàn)已有SpaceWire設(shè)備的平穩(wěn)升級。
SpaceFibre技術(shù)在國外的研究開始較早,逐漸成為國際上星載總線技術(shù)的研究熱點(diǎn)。英國鄧迪大學(xué)的Parks等[2-4]研發(fā)了基于各類抗輻照和商業(yè)FPGA的SpaceFibre節(jié)點(diǎn)知識產(chǎn)權(quán)(Intellectual Property,IP)核和路由IP,以及路由設(shè)備SUNRISE及配套的測試分析儀STAR Fire和STAR Fire MK3[5],并設(shè)計(jì)了一款抗輻照的SpaceFibre超高速串行接口VHiSSI[6],完成了測試和流片。德國比勒費(fèi)爾德大學(xué)的Jungewelter等[7]和瑞典Cobham Gaisler公司的Siegle等[8]也研制了相關(guān)的節(jié)點(diǎn)IP。日本電氣股份有限公司的Hiroki等[9]在研發(fā)的新型納米橋現(xiàn)場可編程門陣列(NanoBridge Filed Programmable Gate Array,NBFPGA)上實(shí)現(xiàn)了SpaceFibre傳輸來自光學(xué)傳感器和合成孔徑雷達(dá)的高清圖像,并在“創(chuàng)新衛(wèi)星技術(shù)驗(yàn)證項(xiàng)目”中進(jìn)行了驗(yàn)證。
國內(nèi)對SpaceWire技術(shù)的研究較成熟,對 SpaceFibre技術(shù)的研究尚處于起步階段。上海創(chuàng)景計(jì)算機(jī)系統(tǒng)有限公司的徐曙清等[10]對SpaceWire和SpaceFibre的研究現(xiàn)狀進(jìn)行了概述。北京航空航天大學(xué)的伊小素等[11]針對SpaceFibre的服務(wù)質(zhì)量(Quality of Service, QoS)機(jī)制進(jìn)行了仿真研究,張春熹等[12]對SpaceFibre的即插即用技術(shù)進(jìn)行了性能分析。
本文通過研究SpaceFibre網(wǎng)絡(luò)協(xié)議,針對SpaceFibre網(wǎng)絡(luò)中的關(guān)鍵問題和技術(shù),提出一種SpaceFibre總線節(jié)點(diǎn)的系統(tǒng)設(shè)計(jì)方案。為了解決多路虛擬通道的流量控制申請沖突,提出了輪詢仲裁算法;針對QoS調(diào)度機(jī)制中諸多參數(shù)和變量的計(jì)算比較,設(shè)計(jì)了一個(gè)能高效進(jìn)行QoS參數(shù)計(jì)算并完成QoS調(diào)度的狀態(tài)機(jī);針對復(fù)雜的錯(cuò)誤檢測隔離恢復(fù)(Fault Detection Isolation and Recovery, FDIR)機(jī)制設(shè)計(jì)了一個(gè)并行的分區(qū)存儲架構(gòu)和重發(fā)控制算法,能實(shí)現(xiàn)備份的清除和重發(fā),降低了處理延遲;針對各類數(shù)據(jù)的循環(huán)冗余校驗(yàn)碼和偽隨機(jī)序列的生成,設(shè)計(jì)了對應(yīng)的并行處理方案。最后搭建仿真平臺,通過仿真驗(yàn)證和板上測試,結(jié)果表明本文設(shè)計(jì)方案實(shí)現(xiàn)了SpaceFibre總線節(jié)點(diǎn)的功能,串行傳輸速度可達(dá)3.125 Gbit/s,滿足實(shí)際高速數(shù)據(jù)傳輸需求。
SpaceFibre協(xié)議棧包括物理層、通道層、多通道層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層以及管理層,協(xié)議棧框架如圖1所示。
圖1 SpaceFibre協(xié)議棧Fig.1 Protocol of SpaceFibre
物理層主要實(shí)現(xiàn)數(shù)據(jù)的串并轉(zhuǎn)換、串行收發(fā)以及時(shí)鐘恢復(fù),傳輸介質(zhì)可采用光纖或者電纜;通道層主要通過鏈路初始化狀態(tài)機(jī)以及通道控制字實(shí)現(xiàn)鏈路的連接,并完成8 B/10 B編解碼、字符同步字同步、時(shí)鐘矯正等功能;多通道層主要實(shí)現(xiàn)多通道的控制,提高數(shù)據(jù)傳輸?shù)耐掏侣?;?shù)據(jù)鏈路層主要實(shí)現(xiàn)對多路數(shù)據(jù)的管理調(diào)度發(fā)送和接收,為虛擬通道和廣播通道提供流量控制、QoS服務(wù)、FDIR錯(cuò)誤恢復(fù)以及數(shù)據(jù)編號、組幀解幀等功能;網(wǎng)絡(luò)層主要通過虛擬網(wǎng)絡(luò)的劃分實(shí)現(xiàn)路由各個(gè)端口虛擬通道之間的數(shù)據(jù)交換和路由;管理層主要實(shí)現(xiàn)各層命令參數(shù)的配置和狀態(tài)的讀取。
相比SpaceWire總線,SpaceFibre在傳輸性能和傳輸速度上都有很大的提升,其性能對比見表1。SpaceFibre采用多路虛擬通道機(jī)制,能夠?qū)崿F(xiàn)對多路數(shù)據(jù)的傳輸;引入QoS機(jī)制,為各類數(shù)據(jù)流提供不同帶寬和優(yōu)先級的管理調(diào)度和傳輸服務(wù);傳輸過程中為數(shù)據(jù)流提供確認(rèn),傳輸錯(cuò)誤時(shí)能實(shí)現(xiàn)基于FDIR的錯(cuò)誤恢復(fù),并提供有保障的高可靠傳輸服務(wù)。由于其優(yōu)越的性能,SpaceFibre成為星載互聯(lián)總線技術(shù)的研究熱點(diǎn),有重要的研究意義。
表 1 SpaceWire和SpaceFibre性能對比
通過對SpaceFibre網(wǎng)絡(luò)協(xié)議的研究,提出了一種基于FPGA的單通道SpaceFibre總線節(jié)點(diǎn)的系統(tǒng)設(shè)計(jì)方案。其中,數(shù)據(jù)鏈路層包括4路虛擬通道,通道層為單通道,物理層傳輸速度可達(dá)3.125 Gbit/s。FPGA內(nèi)部提供了豐富的可編程邏輯資源,集成了高速串行接口吉比特收發(fā)器(Gigabit Transceiver X, GTX)核,便于編程實(shí)現(xiàn)和靈活移植,具備一定的通用性。節(jié)點(diǎn)系統(tǒng)涉及數(shù)據(jù)鏈路層、通道層、物理層以及管理層,架構(gòu)如圖2所示。
圖2 SpaceFibre節(jié)點(diǎn)系統(tǒng)設(shè)計(jì)方案Fig.2 System design scheme of SpaceFibre node
物理層采用FPGA的GTX IP實(shí)現(xiàn)。在配置GTX IP時(shí),參考時(shí)鐘為125 MHz,數(shù)據(jù)位寬設(shè)置為32位,串行速率可設(shè)置為3.125 Gbit/s,對應(yīng)的GTX用戶時(shí)鐘為78.125 MHz。同時(shí)GTX實(shí)現(xiàn)了通道層的部分功能,如8 B /10 B編解碼、字符及字同步、時(shí)鐘矯正等功能。
通道層功能包括通道層控制功能和GTX所實(shí)現(xiàn)的通道層部分功能。通道層控制功能包括通道初始化狀態(tài)機(jī)、通道字插入以及通道字檢測。通道初始化狀態(tài)機(jī)通過INIT1、INIT2以及INIT3控制字三次握手成功后,在ACTIVE狀態(tài)下進(jìn)行穩(wěn)定的數(shù)據(jù)收發(fā)。通道字插入根據(jù)狀態(tài)機(jī)指令生成通道控制字,并發(fā)送來自數(shù)據(jù)鏈路層的數(shù)據(jù)字。通道字檢測根據(jù)接收到的通道控制字生成狀態(tài)機(jī)指令,同時(shí)把接收的數(shù)據(jù)字傳輸?shù)綌?shù)據(jù)鏈路層。
數(shù)據(jù)鏈路層主要包括發(fā)送模塊、接收模塊,以及鏈路復(fù)位模塊。
發(fā)送模塊發(fā)送來自上層的數(shù)據(jù)和廣播信息。由介質(zhì)訪問控制(Media Access Control,MAC)模塊實(shí)現(xiàn)多路輸出虛擬通道(Virtual Channel, VC),基于QoS機(jī)制的調(diào)度,對三類重要數(shù)據(jù),即數(shù)據(jù)幀、廣播幀和流量控制字(Flow Control Token,F(xiàn)CT)按照發(fā)送順序依次編號,進(jìn)行基于循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check,CRC)的組幀。在數(shù)據(jù)發(fā)送的同時(shí),備份到錯(cuò)誤恢復(fù)緩存,以便接收方接收錯(cuò)誤時(shí)進(jìn)行重發(fā)恢復(fù)。數(shù)據(jù)復(fù)用模塊按照數(shù)據(jù)優(yōu)先級順序?qū)?shù)據(jù)進(jìn)行搶占式發(fā)送,無數(shù)據(jù)發(fā)送時(shí)發(fā)送空閑幀。
接收模塊主要進(jìn)行數(shù)據(jù)的接收,并根據(jù)接收狀態(tài)生成確認(rèn)控制字和非確認(rèn)控制字(ACKnowledge/Negative ACKnowledge,ACK/NACK)。當(dāng)廣播幀、數(shù)據(jù)幀以及FCT控制字正確接收時(shí),生成ACK發(fā)送到發(fā)送方,以刪除發(fā)送方錯(cuò)誤恢復(fù)緩存中已成功接收的備份;當(dāng)接收時(shí)發(fā)生CRC錯(cuò)誤或序列號錯(cuò)誤,錯(cuò)誤恢復(fù)控制模塊生成NACK發(fā)送到發(fā)送方,以請求發(fā)送方的錯(cuò)誤恢復(fù)緩存進(jìn)行備份重發(fā)恢復(fù)。當(dāng)接收數(shù)據(jù)從輸入虛擬通道緩存中被讀走,向發(fā)送方發(fā)送FCT,告知空出的接收緩存空間,實(shí)現(xiàn)流量的控制。
鏈路復(fù)位模塊通過接收管理層的復(fù)位命令,實(shí)現(xiàn)了鏈路復(fù)位的控制,完成各層的復(fù)位。
管理層包括命令配置模塊和狀態(tài)讀取模塊,分別對各層的命令配置寄存器進(jìn)行實(shí)時(shí)的配置,對狀態(tài)寄存器進(jìn)行實(shí)時(shí)的讀取。
SpaceFibre節(jié)點(diǎn)的數(shù)據(jù)鏈路層支持多路虛擬通道,通過FCT控制字實(shí)現(xiàn)對每個(gè)VC的流量控制:每當(dāng)被從輸入VC中讀取64個(gè)數(shù)據(jù)字后,接收方都會向數(shù)據(jù)發(fā)送方發(fā)送一個(gè)FCT,每個(gè)FCT攜帶對應(yīng)的VC編號;發(fā)送方收到FCT后,被告知在接收方相應(yīng)的輸入VC中空出了緩存空間,可繼續(xù)發(fā)送數(shù)據(jù),實(shí)現(xiàn)VC的流量控制。
由于多路輸入VC中的數(shù)據(jù)可以同時(shí)被讀出,會存在多路輸入VC同時(shí)有空閑并同時(shí)向發(fā)送方提出FCT發(fā)送申請,因此會產(chǎn)生FCT發(fā)送申請沖突。為了解決多路VC的FCT發(fā)送申請沖突,對多路VC采用了輪詢仲裁算法,輪詢仲裁算法按照默認(rèn)的輪詢順序,對各路VC的FCT發(fā)送申請沖突依次完成仲裁。FCT輪詢仲裁算法步驟如下所示。
步驟1:初始化設(shè)置默認(rèn)輪詢順序。
步驟2:收到多個(gè)VC的FCT申請,按輪詢順序響應(yīng)第一順位申請,發(fā)送對應(yīng)的申請F(tuán)CT_req(i)。
步驟3:收到FCT已發(fā)送確認(rèn)FCT_ack(i),根據(jù)輪詢順序置i+1為第一順位。
步驟4:響應(yīng)申請直至發(fā)送完所有申請。
QoS機(jī)制通過配置QoS參數(shù)實(shí)現(xiàn)對各個(gè)VC中數(shù)據(jù)的調(diào)度,為各路VC中的數(shù)據(jù)提供不同質(zhì)量的傳輸服務(wù)。QoS機(jī)制主要由MAC模塊實(shí)現(xiàn),過程如下:在滿足發(fā)送條件的VC中選擇優(yōu)先級最高的VC中的數(shù)據(jù)進(jìn)行組幀發(fā)送,每發(fā)送完一段數(shù)據(jù)幀后,更新各個(gè)VC的優(yōu)先級并進(jìn)行下一輪發(fā)送。由于QoS機(jī)制涉及諸多參數(shù)和變量,在每幀數(shù)據(jù)被發(fā)送調(diào)度之前需要對各參數(shù)變量進(jìn)行計(jì)算和比較,因此參數(shù)變量的計(jì)算和比較的效率關(guān)系到數(shù)據(jù)幀的傳輸效率。
若節(jié)點(diǎn)中存在i個(gè)VC,每個(gè)VC都會被分配對應(yīng)的QoS參數(shù):一個(gè)優(yōu)先權(quán)R[i],一個(gè)帶寬預(yù)留比例BwPer[i],以及一個(gè)64位寬的時(shí)間片調(diào)度表TimeSlot[i]。優(yōu)先權(quán)R[i]=0時(shí)優(yōu)先等級最高;預(yù)留帶寬比例是為該VC所預(yù)留的可用帶寬比例;時(shí)間片調(diào)度表中的01序列指示了當(dāng)前時(shí)間片中該VC是否具有發(fā)送權(quán);時(shí)間片長度可由上層網(wǎng)絡(luò)定義。QoS變量包括帶寬信用(BwCredit)和優(yōu)先級(Precedence),其中優(yōu)先權(quán)和優(yōu)先級的換算公式如式(1)所示;帶寬信用和帶寬預(yù)留比例,以及每次VC發(fā)送的數(shù)據(jù)量相關(guān),如式(2)所示;優(yōu)先級為優(yōu)先權(quán)和帶寬信用之和,綜合考量了各個(gè)VC的優(yōu)先權(quán)等級和剩余的帶寬信用情況,如式(3)所示,各參數(shù)如表2所示。
Priority[i]=2B(Q-1-R[i])+B
(1)
(2)
Precedence[i]=Priority[i]+BwCredit[i]
(3)
為了高效地進(jìn)行QoS調(diào)度,設(shè)計(jì)了一個(gè)處理狀態(tài)機(jī):每次調(diào)度前,先選出當(dāng)前時(shí)間片內(nèi)允許發(fā)送數(shù)據(jù)的VC發(fā)送申請,比較各VC的優(yōu)先級,并選出優(yōu)先級最高的VC進(jìn)行組幀發(fā)送;在該VC發(fā)送數(shù)據(jù)的同時(shí)統(tǒng)計(jì)所有VC鏈路上的AvailableBw[n]和該VC發(fā)送的數(shù)據(jù)字UsedBw[i],數(shù)據(jù)段發(fā)送截止時(shí)數(shù)據(jù)發(fā)送量也已計(jì)數(shù)完畢;最后在發(fā)送幀尾時(shí)進(jìn)行QoS變量計(jì)算更新,以進(jìn)行下一輪的優(yōu)先級比較和調(diào)度,實(shí)現(xiàn)了與數(shù)據(jù)發(fā)送的并行處理。各QoS參數(shù)由管理層寫入,變量的計(jì)算和比較各占一個(gè)時(shí)鐘周期,發(fā)生在數(shù)據(jù)幀幀頭和幀尾的發(fā)送過程,對數(shù)據(jù)幀的發(fā)送幾乎無延遲。QoS狀態(tài)機(jī)流程如圖3所示。
表2 QoS公式參數(shù)
圖3 QoS狀態(tài)機(jī)流程Fig.3 QoS state machine flow
FDIR機(jī)制對已發(fā)送的重要數(shù)據(jù)進(jìn)行備份,以便進(jìn)行數(shù)據(jù)的錯(cuò)誤恢復(fù)。SpaceFibre中三類重要數(shù)據(jù)分別為廣播幀、FCT和數(shù)據(jù)幀,優(yōu)先級依次降低,如圖4所示。在發(fā)送方發(fā)送數(shù)據(jù)時(shí),對各類數(shù)據(jù)按照發(fā)送序列號Tx_seq編號依次備份,按優(yōu)先級搶占式發(fā)送。接收方若成功接收數(shù)據(jù),則發(fā)送正確確認(rèn)控制字ACK;若數(shù)據(jù)接收錯(cuò)誤,則發(fā)送錯(cuò)誤確認(rèn)控制字NACK。ACK和NACK均攜帶接收方已成功接收的序列號Rx_seq,發(fā)送方收到ACK(Rx_seq)后清除備份中Tx_seq小于等于Rx_seq的備份,即刪除接收方已成功接收的數(shù)據(jù)備份;收到NACK(Rx_seq)后先清除已成功接收的數(shù)據(jù)備份,再對未成功接收的數(shù)據(jù)備份按照優(yōu)先級進(jìn)行重發(fā)恢復(fù),重發(fā)序號從Rx_seq+1開始,備份重新進(jìn)行校驗(yàn)組幀。
由于三類數(shù)據(jù)格式不同,發(fā)送時(shí)按照優(yōu)先級搶占式發(fā)送,發(fā)送編號混雜,給按優(yōu)先級重發(fā)恢復(fù)帶來困難;在清除和重發(fā)時(shí),需要對比接收序列號Rx_seq和各備份的發(fā)送序列號Tx_seq的大小,而發(fā)送序列號均在各備份的幀尾,直接比較會導(dǎo)致延時(shí)過大。因此,需要設(shè)計(jì)合理的存儲結(jié)構(gòu)和重發(fā)控制算法。
圖4 SpaceFibre的重要數(shù)據(jù)格式Fig.4 Important data format of SpaceFibre
為了提高FDIR的處理效率,本文提出了一種邊發(fā)邊備的并行分區(qū)存儲架構(gòu),按數(shù)據(jù)類型對備份進(jìn)行分區(qū)存儲,在數(shù)據(jù)發(fā)送的同時(shí)進(jìn)行備份。同時(shí),針對該并行分區(qū)存儲架構(gòu),提出了FDIR機(jī)制的主控狀態(tài)機(jī)和一種高效的存儲分區(qū)重發(fā)控制算法,實(shí)現(xiàn)對不同數(shù)據(jù)類型的備份、清除和快速重發(fā)恢復(fù)。
邊發(fā)邊備的并行分區(qū)存儲架構(gòu)按照數(shù)據(jù)優(yōu)先級對三類數(shù)據(jù)進(jìn)行分區(qū)備份,在數(shù)據(jù)正常組幀發(fā)送的同時(shí)備份到各自的存儲分區(qū),備份操作對數(shù)據(jù)發(fā)送不會造成延遲。當(dāng)收到ACK/NACK進(jìn)行備份清除或錯(cuò)誤重發(fā)恢復(fù)時(shí),根據(jù)不同數(shù)據(jù)形式設(shè)計(jì)了并行分區(qū)存儲的內(nèi)部架構(gòu),如圖5所示。
圖5 并行分區(qū)存儲架構(gòu)Fig.5 Parallel partitioned storage architecture
對于廣播幀和數(shù)據(jù)幀,雖幀長不同但幀格式相似,故存儲分區(qū)架構(gòu)相同,分區(qū)內(nèi)部包括備份緩存和標(biāo)識緩存。其中,備份緩存用來存放數(shù)據(jù)備份,標(biāo)識緩存用來存放備份標(biāo)識。當(dāng)每幀數(shù)據(jù)存入備份緩存時(shí),對應(yīng)的地址指針更新以指示該備份的存儲地址,同時(shí)該備份對應(yīng)的備份標(biāo)識也存入標(biāo)識緩存。為了高效地識別備份,設(shè)計(jì)了備份標(biāo)識結(jié)構(gòu):{重發(fā)標(biāo)識+備份幀尾地址+備份發(fā)送序列號}。重發(fā)標(biāo)識是為了區(qū)分備份緩存未重發(fā)的數(shù)據(jù)和已重發(fā)且又再次被備份到緩存中的數(shù)據(jù),從而避免多次重發(fā);備份幀尾地址是對幀的存儲位置進(jìn)行標(biāo)識,當(dāng)收到ACK/NACK進(jìn)行備份清除時(shí),以便及時(shí)地釋放備份中的緩存空間;備份發(fā)送序列號是為了在備份清除時(shí)無須讀出完整數(shù)據(jù)備份,即可進(jìn)行序列號比較。
對于FCT控制字備份,由于僅有一個(gè)數(shù)據(jù)字,序列號便于讀取比較,故為了節(jié)省存儲資源,僅設(shè)置一個(gè)FCT緩存,同時(shí)為了區(qū)分已重發(fā)數(shù)據(jù)和未重發(fā)數(shù)據(jù),F(xiàn)CT備份數(shù)據(jù)的高位加入重發(fā)標(biāo)識。
針對該并行分區(qū)存儲架構(gòu),設(shè)計(jì)了FDIR機(jī)制主控狀態(tài)機(jī),狀態(tài)機(jī)如圖6所示。針對各備份分區(qū)內(nèi)部的存儲架構(gòu),提出了重發(fā)控制算法,實(shí)現(xiàn)了各個(gè)分區(qū)的正確備份清除和錯(cuò)誤備份重發(fā)恢復(fù)。重發(fā)控制算法步驟如下所示。
圖6 FDIR主控狀態(tài)機(jī)Fig.6 Main state machine of FDIR
步驟1:收到ACK/NACK,得到Rx_seq,與各分區(qū)中備份的Tx_seq比較,各分區(qū)并行執(zhí)行備份刪除:對數(shù)據(jù)幀和廣播幀分區(qū)中的標(biāo)識緩存,若Tx_seq≤Rx_seq,則刪除該備份的標(biāo)識,同時(shí)更新該備份數(shù)據(jù)緩存中的地址指針以釋放緩存空間;對于FCT分區(qū),直接比較備份緩存中的Tx_seq和Rx_seq, 若Tx_seq≤Rx_seq,則直接刪除備份。當(dāng)分區(qū)的備份數(shù)據(jù)Tx_seq>Rx_seq時(shí),無須刪除備份。
步驟2:數(shù)據(jù)備份清除完畢后,若主控狀態(tài)是ACK,則返回正常備份狀態(tài);若主控狀態(tài)是NACK,則進(jìn)入數(shù)據(jù)重發(fā)狀態(tài)。
步驟3:在數(shù)據(jù)重發(fā)時(shí),先翻轉(zhuǎn)重發(fā)標(biāo)識,更新發(fā)送序列號Tx_seq=Rx_seq。首先根據(jù)優(yōu)先級重發(fā)廣播幀,重發(fā)的同時(shí)備份重發(fā)數(shù)據(jù)和備份標(biāo)識,當(dāng)備份標(biāo)識中的重發(fā)標(biāo)識均為翻轉(zhuǎn)后的重發(fā)標(biāo)識時(shí)說明重發(fā)結(jié)束,緩存中均為重發(fā)數(shù)據(jù);然后重發(fā)FCT,重發(fā)的同時(shí)備份FCT,當(dāng)備份標(biāo)識中的重發(fā)標(biāo)識均為翻轉(zhuǎn)后的重發(fā)標(biāo)識說明重發(fā)結(jié)束;最后重發(fā)數(shù)據(jù)幀,重發(fā)過程同廣播幀。
步驟4:重發(fā)結(jié)束后,返回?cái)?shù)據(jù)正常備份狀態(tài)。
通過重發(fā)控制算法,在清除備份時(shí)無須從緩存中依次讀出備份,僅需刪除標(biāo)識緩存中的備份標(biāo)識,并更新備份的地址指針,即可釋放備份的緩存空間,操作簡單高效,提高了備份緩存的利用率。同時(shí),各分區(qū)在接收正常數(shù)據(jù)備份的過程中,能夠并行地執(zhí)行備份清除操作,對數(shù)據(jù)的正常發(fā)送無延遲影響。在錯(cuò)誤重發(fā)時(shí),通過重發(fā)控制算法能夠?qū)Ω黝悢?shù)據(jù)按照優(yōu)先級依次重發(fā),并可以對重發(fā)后的數(shù)據(jù)再次備份,利用重發(fā)標(biāo)識能有效地區(qū)分原有備份和重發(fā)備份。針對不同的數(shù)據(jù)格式設(shè)計(jì)了不同的備份分區(qū)存儲架構(gòu)和重發(fā)控制算法,提升了FDIR的數(shù)據(jù)處理效率。
3.4.1 并行CRC
SpaceFibre中數(shù)據(jù)幀、廣播幀、FCT及其他控制字均需要進(jìn)行CRC校驗(yàn),其中數(shù)據(jù)幀CRC校驗(yàn)生成式為G(X)=X16+X12+X5+ 1,原理如圖7所示,CRC校驗(yàn)范圍包括32位的幀頭、32位的數(shù)據(jù)以及高16位的幀尾。廣播幀的CRC生成式為G(X) =X8+X2+X+ 1,CRC校驗(yàn)范圍包括32位的幀頭、32位的數(shù)據(jù)以及高24位的幀尾。FCT及其他控制字為一個(gè)32位的數(shù)據(jù)字,CRC校驗(yàn)范圍均為高24位,CRC生成式與廣播幀相同。
圖7 CRC16計(jì)算原理Fig.7 Principle of CRC16
由于串行CRC算法需要占用多個(gè)時(shí)鐘周期才能得到多位數(shù)據(jù)的CRC,若通過對串行CRC校驗(yàn)進(jìn)行時(shí)鐘倍頻,會因頻率過高導(dǎo)致系統(tǒng)不穩(wěn)定;采用查表法則會占用過多的存儲資源,通過對CRC算法的比較[13-15],選擇采用基于公式遞推法的并行CRC算法,能夠在一個(gè)時(shí)鐘下實(shí)現(xiàn)多位數(shù)據(jù)的CRC計(jì)算。以數(shù)據(jù)幀為例,若32位的數(shù)據(jù)為D[i](i=0,…,31),在第1個(gè)時(shí)鐘時(shí)對D[0]進(jìn)行校驗(yàn),可以計(jì)算出該時(shí)鐘下各CRC寄存器的表達(dá)式C[i](i=0,…,15);以此類推,即可得到32個(gè)時(shí)鐘后,對32位數(shù)據(jù)進(jìn)行CRC校驗(yàn)后的各CRC寄存器表達(dá)式C[i]。故根據(jù)CRC寄存器的初始值和各表達(dá)式,即可完成在一個(gè)時(shí)鐘下32位數(shù)據(jù)的并行CRC計(jì)算。
由于不同數(shù)據(jù)格式的CRC校驗(yàn)范圍不同,如數(shù)據(jù)幀既需要對32位數(shù)據(jù)進(jìn)行CRC計(jì)算,又需要對幀尾的16位數(shù)據(jù)進(jìn)行CRC計(jì)算,僅采用32位并行CRC表達(dá)式不能滿足校驗(yàn)需求。故針對不同數(shù)據(jù)特征設(shè)計(jì)了不同的CRC校驗(yàn)方案:對數(shù)據(jù)幀采用了基于CRC16的32位數(shù)據(jù)和16位數(shù)據(jù)的組合并行CRC算法;對廣播幀采用了基于CRC8的32位數(shù)據(jù)和24位數(shù)據(jù)的組合并行CRC算法;對FCT等控制字采用基于CRC8的24位數(shù)據(jù)并行CRC。采用不同的組合并行CRC算法,一個(gè)時(shí)鐘即可對多位數(shù)據(jù)進(jìn)行CRC校驗(yàn),校驗(yàn)時(shí)能應(yīng)對數(shù)據(jù)校驗(yàn)長度的變化,提高了節(jié)點(diǎn)的數(shù)據(jù)處理效率。
3.4.2 并行偽隨機(jī)碼
在SpaceFibre中,空閑幀的內(nèi)部由32位寬的偽隨機(jī)數(shù)組成,偽隨機(jī)數(shù)的生成式為G(X)=X16+X5+X4+X3+1。不同于CRC校驗(yàn),偽隨機(jī)碼的生成無須數(shù)據(jù)輸入,僅需偽隨機(jī)寄存器的串行輸出序列。但若串行計(jì)算偽隨機(jī)碼則會占用過多的時(shí)鐘周期,采用倍頻會導(dǎo)致高速系統(tǒng)不穩(wěn)定,故借鑒CRC校驗(yàn)中的方法,采用并行的公式遞推法。由于沒有外部輸入,因此32位偽隨機(jī)序列的表達(dá)式可以只由偽隨機(jī)序列的初始值I(i)(i= 0,…,15)表示。16位的偽隨機(jī)序列寄存器表達(dá)式為L(i)(i= 0,…,15),輸出32位的偽隨機(jī)序列表達(dá)式依次為P(i)(i= 0,…,31)。
偽隨機(jī)碼計(jì)算原理如圖8所示,輸出偽隨機(jī)碼P(i)即為每個(gè)時(shí)鐘偽隨機(jī)序列寄存器L(15)。以一個(gè)字節(jié)的偽隨機(jī)碼為例,第1個(gè)時(shí)鐘后P(0)=L(15)=I(15);第2個(gè)時(shí)鐘后P(1)=L(15)=I(14),…,P(8)=L(15)=I(8)。通過遞推可以看出,在已知偽隨機(jī)序列的初始值I(i)的情況下,只需依次求得8個(gè)時(shí)鐘下所有L(15)的表達(dá)式,即可一次性求得一個(gè)并行的8位并行偽隨機(jī)碼。經(jīng)過8個(gè)時(shí)鐘后,偽隨機(jī)序列寄存器的表達(dá)式如下:
(4)
圖8 PRBS計(jì)算原理Fig.8 Principle of PRBS
由于需要計(jì)算一組32位的偽隨機(jī)序列碼,為了便于進(jìn)行公式推導(dǎo),32位偽隨機(jī)序列的表達(dá)式可以分為4個(gè)字節(jié)的偽隨機(jī)序列。在第2個(gè)字節(jié)的偽隨機(jī)碼計(jì)算時(shí),以上述第1個(gè)字節(jié)經(jīng)過8個(gè)時(shí)鐘后的偽隨機(jī)序列寄存器的值作為第2個(gè)字節(jié)推導(dǎo)時(shí)的初始值,再次對第2個(gè)字節(jié)進(jìn)行如第1個(gè)字節(jié)的推導(dǎo)過程,求出8個(gè)時(shí)鐘下P(i)(i=8,…,15)的值。通過重復(fù)上述迭代推導(dǎo),最終可以獲得32個(gè)時(shí)鐘內(nèi),每個(gè)時(shí)鐘下各個(gè)輸出的偽隨機(jī)數(shù)表達(dá)式P(0)~P(31)。因此,在一個(gè)時(shí)鐘下,通過計(jì)算32位偽隨機(jī)碼的表達(dá)式,可以一次得出并行的32位偽隨機(jī)碼,提高了空閑幀中偽隨機(jī)碼的計(jì)算效率。此外,32個(gè)時(shí)鐘周期后的偽隨機(jī)序列寄存器的值可以作為下一個(gè)32位偽隨機(jī)碼計(jì)算的初始值I(i)(i=0,…,15),將其直接代入偽隨機(jī)碼表達(dá)式P(i)即可計(jì)算下一個(gè)32位偽隨機(jī)碼序列。迭代計(jì)算簡單,表達(dá)式利用初始值寄存器和邏輯門表示,節(jié)省了時(shí)鐘資源。
為了驗(yàn)證節(jié)點(diǎn)系統(tǒng)的設(shè)計(jì)方案,采用自頂向下的方法使用Verilog硬件描述語言完成了節(jié)點(diǎn)的設(shè)計(jì),以ModelSim10.5作為仿真平臺,對節(jié)點(diǎn)間的數(shù)據(jù)傳輸、FCT申請的輪詢仲裁、虛擬通道的QoS調(diào)度、FDIR機(jī)制以及數(shù)據(jù)的并行處理等關(guān)鍵功能進(jìn)行了仿真分析。
在數(shù)據(jù)傳輸時(shí)例化兩個(gè)節(jié)點(diǎn),并為發(fā)送方的4個(gè)虛擬通道構(gòu)造4路數(shù)據(jù)源,搭建一個(gè)雙節(jié)點(diǎn)的收發(fā)系統(tǒng)。將4路數(shù)據(jù)源分別寫入4個(gè)對應(yīng)的輸出虛擬通道,經(jīng)過發(fā)送方QoS調(diào)度、數(shù)據(jù)編號組幀以及GTX發(fā)送,在接收方通過GTX接收、數(shù)據(jù)校驗(yàn)解幀以及寫入對應(yīng)的輸入虛擬通道等操作后,從接收方對應(yīng)的輸入虛擬通道讀出。數(shù)據(jù)收發(fā)如圖9所示,在兩個(gè)節(jié)點(diǎn)之間實(shí)現(xiàn)了對應(yīng)虛擬通道之間的數(shù)據(jù)傳輸功能。
圖9 數(shù)據(jù)的發(fā)送和接收Fig.9 Sending and receiving of data
在輸入虛擬通道中,當(dāng)各路緩存中的數(shù)據(jù)同時(shí)被讀走后產(chǎn)生了FCT申請沖突,為了解決該沖突,對FCT申請進(jìn)行輪詢仲裁。FCT輪詢仲裁如圖10所示,當(dāng)4路VC同時(shí)出現(xiàn)FCT申請沖突時(shí),依次受理了VC0、VC1、VC2、VC3的FCT申請,實(shí)現(xiàn)了輪詢仲裁功能,處理了FCT的發(fā)送申請沖突。
圖10 FCT申請輪詢仲裁Fig.10 Polling arbitration of FCT request
在基于QoS調(diào)度過程中,為了給不同數(shù)據(jù)流提供不同質(zhì)量的傳輸服務(wù),需要為各路VC配置不同的QoS參數(shù)。給出一種QoS參數(shù)配置方案:VC0、VC1、VC2和VC3的優(yōu)先權(quán)分別為R[0]=0,R[1]=1,R[2]=2,R[3]=3;帶寬百分比BwPer[0]=10%,BwPer[1]=20%,BwPer[2]=20%,BwPer[3]=25%,VC的調(diào)度表TimeSlot[i]均設(shè)置為全1,帶寬信用限制B=10 000。QoS調(diào)度仿真如圖11所示,MAC模塊先選擇最高優(yōu)先級VC0中的數(shù)據(jù)發(fā)送,并按照優(yōu)先級依次發(fā)送VC1、VC2、VC3中的數(shù)據(jù)。數(shù)據(jù)發(fā)送后各VC對應(yīng)的帶寬信用BwCredit降低,而各VC的優(yōu)先級Precedence也隨之降低;數(shù)據(jù)不發(fā)送時(shí),帶寬信用和優(yōu)先級緩慢增長。各QoS參數(shù)變化規(guī)律符合式(2)和式(3),滿足QoS的調(diào)度規(guī)則,同時(shí)QoS參數(shù)計(jì)算和比較對每幀數(shù)據(jù)的發(fā)送幾乎無延遲影響,為各路數(shù)據(jù)源的傳輸提供了QoS服務(wù)。
圖11 QoS調(diào)度仿真Fig.11 Simulation of QoS scheduling
在基于FDIR機(jī)制進(jìn)行錯(cuò)誤重發(fā)時(shí),結(jié)合重發(fā)控制算法,該分區(qū)存儲架構(gòu)能實(shí)現(xiàn)高效的重發(fā)恢復(fù)。當(dāng)發(fā)送方發(fā)送Tx_seq分別為2、3、4、5、6、7號數(shù)據(jù)幀的同時(shí),進(jìn)行了數(shù)據(jù)備份。接收方在成功接收2、3、4號后產(chǎn)生接收錯(cuò)誤,并發(fā)送錯(cuò)誤確認(rèn)NACK(Rx_seq=4),即已正確接收序號為前4的數(shù)據(jù)。發(fā)送方通過重發(fā)控制算法比較Tx_seq和Rx_seq,刪除了標(biāo)識緩存中的標(biāo)識釋放備份緩存,并重發(fā)了備份緩存中未成功接收的5、6、7號數(shù)據(jù)幀。通過與普通重發(fā)控制算法的對比,如圖12所示,在對序號為2、3、4的數(shù)據(jù)備份進(jìn)行清除時(shí),僅用3個(gè)時(shí)鐘即可實(shí)現(xiàn)備份的刪除,并成功重發(fā)了后續(xù)備份,降低了3個(gè)數(shù)據(jù)幀長的延時(shí),實(shí)現(xiàn)了高效的錯(cuò)誤重發(fā)恢復(fù)。
(a) 重發(fā)控制算法(a) Retransmission control algorithm
在數(shù)據(jù)的并行處理中,通過計(jì)算CRC的32位并行表達(dá)式,實(shí)現(xiàn)了一個(gè)時(shí)鐘內(nèi)完成32位數(shù)據(jù)的CRC校驗(yàn),其他CRC計(jì)算同理。通過計(jì)算推導(dǎo)出的并行32位偽隨機(jī)序列寄存器和并行偽隨機(jī)序列的輸出表達(dá)式,實(shí)現(xiàn)了一個(gè)時(shí)鐘即可計(jì)算出32位并行的偽隨機(jī)數(shù)。并行數(shù)據(jù)計(jì)算如圖13所示,并行的數(shù)據(jù)處理方案提高了節(jié)點(diǎn)的數(shù)據(jù)處理效率。
(a) 并行CRC計(jì)算(a) CRC parallel computation
最后,在Xilinx XC6VLX240T-2FFG1156 FPGA上實(shí)現(xiàn)了SpaceFibre節(jié)點(diǎn)系統(tǒng)的設(shè)計(jì)方案。通過搭建測試平臺,把節(jié)點(diǎn)IP分別例化到兩塊Virtex-6官方評估板的 FPGA上,利用串行光纖實(shí)現(xiàn)了節(jié)點(diǎn)間的高速數(shù)據(jù)傳輸,板上主時(shí)鐘頻率為78.125 MHz,串行傳輸速率可達(dá)3.125 Gbit/s。該節(jié)點(diǎn)傳輸性能可以滿足在大容量存儲等高速數(shù)傳項(xiàng)目中的傳輸要求。其資源占用情況如表3所示。
表3 Virtex-6 XC6VLX240T資源占用
SpaceFibre總線網(wǎng)絡(luò)能夠提供基于QoS機(jī)制和FDIR機(jī)制的高速數(shù)據(jù)傳輸,網(wǎng)絡(luò)拓?fù)潇`活,成了未來航天高速總線網(wǎng)絡(luò)的研究熱點(diǎn)。本文在對SpaceFibre協(xié)議研究的基礎(chǔ)上提出了一種基于FPGA的SpaceFibre總線終端節(jié)點(diǎn)的系統(tǒng)設(shè)計(jì)方案,并針對節(jié)點(diǎn)中的關(guān)鍵問題和技術(shù),設(shè)計(jì)實(shí)現(xiàn)了FCT申請輪詢仲裁、基于QoS機(jī)制的調(diào)度處理、基于FDIR機(jī)制的錯(cuò)誤重發(fā)恢復(fù)以及數(shù)據(jù)并行處理等關(guān)鍵技術(shù);最后給出了數(shù)據(jù)傳輸和各個(gè)關(guān)鍵技術(shù)的仿真測試結(jié)果,驗(yàn)證了節(jié)點(diǎn)的功能,為后續(xù)SpaceFibre總線網(wǎng)絡(luò)進(jìn)一步實(shí)現(xiàn)和在軌應(yīng)用奠定了技術(shù)基礎(chǔ)。