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