王 樂,趙 剛,孫偉龍
(北方自動控制技術(shù)研究所,太原 030006)
由于計算機處理器速度和外圍設(shè)備速度的不斷提高,在眾多實驗環(huán)境中需要高速數(shù)據(jù)互連介質(zhì),用于通信的介質(zhì)需能夠?qū)崿F(xiàn)長距離傳遞可靠的數(shù)據(jù)[1-2]。為了突破所有這些限制,需保證互連技術(shù)是串行且異步的。與其他技術(shù)相比,光纖通道是具有更高數(shù)據(jù)速率的互連技術(shù)[3]。光纖通道支持不同的協(xié)議,以不同的速率傳輸數(shù)據(jù),如音頻和視頻[4]。光纖通道的高帶寬和減少的干擾特性使其具有進行高速通信的優(yōu)勢[5-6]。航空電子環(huán)境需要高速互連介質(zhì)來在終端系統(tǒng)之間傳輸大量數(shù)據(jù)。根據(jù)航空電子環(huán)境(AE)的要求,光纖通道委員會(FC)在航空電子環(huán)境中提供了子協(xié)議FPGA[6]。目前,光纖通道已被用作航空電子總線以及專用總線,以實現(xiàn)較高的數(shù)據(jù)速率,從而在單元之間傳輸數(shù)據(jù)和視頻[7-8]。航空電子環(huán)境需要高速互連介質(zhì)來在終端系統(tǒng)之間傳輸大量數(shù)據(jù)。根據(jù)航空電子環(huán)境(AE)的要求,光纖通道委員會(FC)在航空電子環(huán)境中提供了子協(xié)議FPGA[9]。目前,光纖通道既用作航空電子總線,又用作高數(shù)據(jù)速率的專用總線,以在設(shè)備之間傳輸數(shù)據(jù)和視頻[10]。FPGA 是協(xié)議和配置文件的集合,指定了光纖通道在設(shè)備中的應(yīng)用,用于商業(yè)和軍事航空航天領(lǐng)域[8-9]。
基于以上情況,結(jié)合航空電子系統(tǒng)的通信需求,提出了一種基于以太網(wǎng)的航空電子環(huán)境數(shù)據(jù)協(xié)議的設(shè)計方法,該方法通過FPGA 平臺端系統(tǒng)中實現(xiàn),具備并發(fā)執(zhí)行能力,同時考慮了錯誤檢測機制,將錯誤檢測機制嵌入到協(xié)議設(shè)計中,以驗證其在端系統(tǒng)中數(shù)據(jù)接收的完整性。
FPGA 協(xié)議提供了不同的服務(wù)類別,即1 類,2類,3 類和6 類。這些服務(wù)類別的主要區(qū)別在于兩個通信端口之間通信服務(wù)的分配和保留。
1 類是專用的連接服務(wù),提供兩個端口之間的專用連接。這是一個基于確認的協(xié)議。
2 類不是專用的連接服務(wù)。它是在幀邊界具有結(jié)構(gòu)多路復用的服務(wù)。
3 類是一種連接少且未經(jīng)確認的服務(wù)。
6 類是專用的連接服務(wù),具有多播連接功能。單個源端口將與多個目標端口形成專用連接。
FPGA 協(xié)議應(yīng)包含最大2 148 個字節(jié)的幀。該框架將由5 個字段組成,包括:幀開始(SOF)、幀頭、數(shù)據(jù)字段、CRC、幀結(jié)束(EOF)。
為了維持適當?shù)逆溌?,?yīng)該在幀之間發(fā)送空閑的原始信號(理想幀)。FC_AE 幀的幀結(jié)構(gòu)如圖1 所示。
圖1 FPGA 幀結(jié)構(gòu)
描述:
1)幀開始(SOF)
幀起始定界符是一個有序集和多個定界符,用于序列控制。SOF 分隔符通常由SOFX 表示,其中X表示使用該分隔符的特定類。
2)擴展頭
擴展頁眉是框架的可選頁眉。如果存在擴展的標頭,則緊隨其后是SOF 分隔符。擴展頭的存在是由幀頭定義的。擴展頭用于在框架中添加額外的功能。
3)幀頭
如果擴展頭不可用,則幀頭將緊隨SOF 分隔符。幀頭用于控制鏈接操作,設(shè)備協(xié)議傳輸,還用于檢測序列中丟失的幀或亂序幀。
4)有效載荷
需要從一個終端系統(tǒng)發(fā)送到另一終端系統(tǒng)的數(shù)據(jù)打包在此有效負載字段中。每幀有效負載的最大為2 112 Byte。
5)CRC
CRC 是幀的循環(huán)冗余校驗。標頭的開始和標頭的結(jié)束不包括在CRC 計算中。CRC 是一個4 Byte的字,是為擴展頭(如果存在)、幀頭和有效載荷計算的。CRC 用于幀的錯誤處理。
6)幀尾(EOF)
EOF 分隔符是一個4 Byte 字,是一個有序集,緊跟在幀的CRC 字段之后有多個EOF 定界符用于序列控制。
在這種類型的服務(wù)中,目標可以丟棄源發(fā)送的多個幀而無需任何確認。流控制框架不屬于此類服務(wù)。實現(xiàn)數(shù)據(jù)幀通信序列以建立通信。數(shù)據(jù)幀有兩種類型。初始化幀在兩個NX_port 之間創(chuàng)建通信電路,而普通數(shù)據(jù)幀則將信息從源端口傳輸?shù)侥繕硕丝凇?/p>
初始化幀的結(jié)構(gòu)如圖2 所示。
圖2 初始化幀的幀結(jié)構(gòu)
初始化幀的SOF 定界符是SOF 啟動(Sofi)。該幀建立兩個端口之間的通信。標頭包含序列ID,源ID 和目標ID 的信息。由于該幀是第1 幀,因此,該幀的序列計數(shù)為0。標頭中的其余字段填充有適當?shù)男畔?,以將該幀表示為? 幀。由于第1 幀是通信初始化幀,因此,它不包含數(shù)據(jù)。為不包括SOF 和EOF 分隔符的完整幀計算CRC,并將其填充在CRC字段中。EOF 字段包含EOFn3 的值,該值指示幀的正常結(jié)束。此幀中使用的EOF 并不表示通信終止。
普通幀的SOF 定界符為SOF 普通類3(SOFn3)。該值表示該幀是數(shù)據(jù)幀。標頭中的序列計數(shù)(SEQ_CNT)字段(標準)指示序列中當前幀的計數(shù)。數(shù)據(jù)幀由標題和有效載荷字段組成。有效負載字段填充有要傳輸?shù)侥繕私K端系統(tǒng)的數(shù)據(jù)。為報頭和有效載荷計算CRC。CRC 被打包在幀中的有效載荷字段之后。EOF 字段由幀定界符的末尾組成,它可以代表幀的正常端或端口之間通信序列的端接。
光纖通道數(shù)據(jù)發(fā)送器設(shè)計的框圖如圖3 所示。臺式計算機被用作實現(xiàn)的數(shù)據(jù)源。在主機系統(tǒng)中會生成有效載荷,以及應(yīng)通過光纖通道幀發(fā)送的標頭信息。數(shù)據(jù)以UDP 數(shù)據(jù)包的形式生成,這些數(shù)據(jù)包從主機系統(tǒng)發(fā)送到FPGA。
圖3 TX 設(shè)計模塊
主機系統(tǒng)用于以UDP 數(shù)據(jù)包的形式生成數(shù)據(jù)并發(fā)送到FPGA。主機與FPGA 之間的通信是通過以太網(wǎng)鏈路建立的。
1)數(shù)據(jù)包生成:Visual Studio 用作生成以太網(wǎng)數(shù)據(jù)包的軟件開發(fā)平臺。在Windows 平臺上打開并配置了基于以太網(wǎng)的套接字,以建立以太網(wǎng)鏈接。一旦配置了套接字,就可以通過套接字將數(shù)據(jù)傳輸?shù)紽PGA。
2)生成數(shù)據(jù)包:產(chǎn)生UDP 數(shù)據(jù)包的流程圖如圖4 所示??梢酝ㄟ^以太網(wǎng)發(fā)送的最大有效負載大小為1 472 Byte。如果數(shù)據(jù)大于1 472 Byte,則應(yīng)將數(shù)據(jù)分段并通過多個數(shù)據(jù)包傳輸。
主機生成的以太網(wǎng)數(shù)據(jù)包(UDP)由FPGA 板接收。
主機系統(tǒng)應(yīng)將其他數(shù)據(jù)包連同UDP 數(shù)據(jù)包一起發(fā)送到FPGA。接收到的數(shù)據(jù)必須經(jīng)過驗證,以區(qū)分目標UDP 數(shù)據(jù)包與其他幀。驗證是通過對照板IP 地址和端口號檢查UDP 幀中的目標IP 地址和端口號來完成的。當IP 地址和端口號匹配時,幀應(yīng)被視為有效的UDP 幀。
UDP 數(shù)據(jù)包中的數(shù)據(jù)字段是面向字節(jié)的(8位),需要轉(zhuǎn)換為字格式(32 位)才能將數(shù)據(jù)從UDP數(shù)據(jù)包映射到FC_AE 幀。由轉(zhuǎn)換器模塊完成向32位的轉(zhuǎn)換。轉(zhuǎn)換器模塊在時鐘的每個上升沿接收字節(jié)數(shù)據(jù)。該模塊將數(shù)據(jù)的每4 個字節(jié)與第4 個時鐘脈沖的上升沿連接在一起。這4 個字節(jié)(32 位)的數(shù)據(jù)作為輸出發(fā)送。
來自轉(zhuǎn)換模塊的32 位字數(shù)據(jù)流在有效載荷FIFO 中進行緩沖。
每個接收到的數(shù)據(jù)包的狀態(tài)都存儲在狀態(tài)FIFO 中。狀態(tài)FIFO 指示有效載荷FIFO 中是否存在有效的載荷數(shù)據(jù)包數(shù)據(jù)。
此外,將從轉(zhuǎn)換器模塊獲得的有效數(shù)據(jù)存儲在數(shù)據(jù)FIFO 中。在每個VAL ID SHIame 的末尾,SHIame 的狀態(tài)存儲在狀態(tài)FIFO 中。根據(jù)FIFO 中空間的可用性執(zhí)行將數(shù)據(jù)和狀態(tài)寫入相應(yīng)FIFO 的操作。光纖通道幀打包器模塊監(jiān)視狀態(tài)FIFO,以生成FC 幀。
圖4 生成UDP 數(shù)據(jù)包的流程圖
圖5 FC_AE 幀打包器
FPGA 幀的字段包括SOF、標頭、有效負載、CRC 和EOF。根據(jù)狀態(tài)FIFO 中狀態(tài)信息的可用性,生成FC 幀。狀態(tài)FIFO 為空表示有效載荷FIFO 中的數(shù)據(jù)不可用。打包器將生成空閑字,以在數(shù)據(jù)幀不可用期間維持端端口之間的連接性。3 類服務(wù)是在光纖通道協(xié)議上實現(xiàn)的。下頁表1 顯示了第3 類服務(wù)支持的幀和信號。
打包器模塊生成表1 中所示的幀。此模塊生成32 位的數(shù)據(jù)(TX-Data)和4 位的特殊字符指示符(TX-KC HAR)。4b KCHAR 對于8b/10b 編碼是必需的。
表1 在CLASS3 服務(wù)中使用的幀
打包器模塊中的每個狀態(tài)如下:
1)SOF 生成
從主機獲取的數(shù)據(jù)中有效載荷的第32 位字包含有關(guān)要生成的幀類型的信息。根據(jù)該值,此模塊將為不同類型的幀生成必要的SOF 分隔符類型。
2)標頭生成器
有關(guān)基于光纖通道的協(xié)議幀的標頭信息存儲在數(shù)據(jù)FIFO 中。標頭生成模塊從數(shù)據(jù)FIFO 中讀取數(shù)據(jù),并將其打包為光纖通道數(shù)據(jù)幀的標頭字段。
3)有效負載處理程序
可以通過基于光纖通道的數(shù)據(jù)協(xié)議幀發(fā)送的最大有效負載大小為2 112 Byte。有效負載處理程序從有效負載FIFO 讀取數(shù)據(jù),直到數(shù)據(jù)包的末尾。有效負載處理程序從有效負載FIFO 中讀取一個數(shù)據(jù)包數(shù)據(jù),以生成一個光纖通道幀。數(shù)據(jù)FIFO 上幀數(shù)據(jù)的最后一個字由最后一個識別信號加起來表示。
4)EOF 生成
從主機獲得的數(shù)據(jù)中有效載荷的第1 個32位字包含有關(guān)要生成的幀類型的信息。根據(jù)該值,此模塊會為不同類型的幀生成必要的EOF 定界符類型。
5)R_RD Y 生成器
打包器模塊根據(jù)接收模塊的請求生成READY信號。當接收器準備好接收幀時,它請求打包器模塊生成R-ROY 信號。發(fā)送器向接收器發(fā)送確認,作為就緒信號生成的指示。
6)打包器的Control_flow
打包器工作的狀態(tài)序列如圖6 所示。
圖6 打包程序的狀態(tài)圖
打包器保持空閑狀態(tài),直到數(shù)據(jù)FIFO 中的有效數(shù)據(jù)可用為止。初始化幀是根據(jù)數(shù)據(jù)FIFO 中有效數(shù)據(jù)的可用性生成的。初始化幀的結(jié)構(gòu)如圖3 所示。在生成初始化幀之后,打包器等待R_RDY 信號的接收以依次生成下一幀。在從接收器打包器接收到R_RDY 信號后,將開始生成順序的下一個數(shù)據(jù)幀,其結(jié)構(gòu)如圖4 所示。該循環(huán)持續(xù)進行,直到發(fā)送該序列中的最后一個數(shù)據(jù)幀為止。打包器輪詢來自接收器的請求,以生成R_RDY。在生成空閑字期間生成就緒信號。數(shù)據(jù)序列完成后,打包器將保持空閑狀態(tài),直到要生成幀的下一個數(shù)據(jù)序列可用為止。
CRC 是緊隨數(shù)據(jù)字段之后的4 Byte 字。此CRC字段用于在接收方檢查幀的數(shù)據(jù)完整性。SOF 和EOF 分隔符不包括在CRC 計算中。
通常將CRC 計算為原始傳輸位到標準多項式的模2 除法的余數(shù)。用于計算CRC 的標準多項式,如式(1)所示。
并行CRC 計算方法用于CRC 計算。FC_AE 幀中CRC 計算的機制如圖7 所示。
圖7 CRC 計算
在檢測到SOF 分隔符后,CRC 引擎將根據(jù)SOF分隔符之后的32 位數(shù)據(jù)開始計算CRC。為標頭和數(shù)據(jù)字段計算CRC。根據(jù)當前計算的CRC 和幀中的下一個32 位來計算下一個CRC 位。重復此過程,直至檢測到EOF 分隔符。在檢測到EOF 定界符后,CRC 引擎將停止計算CRC 的過程,并生成最終的CRC 值。最終的CRC 值緊隨數(shù)據(jù)字段之后和EOF字段之前。
通過光纖通道傳輸?shù)臄?shù)據(jù)以8b/10b 編碼格式進行編碼。Xilinx MGT 模塊中的8b/10b 編碼器用于實現(xiàn)編碼機制。8b/10b 編碼器每8 位數(shù)據(jù)生成10 位數(shù)據(jù)。32 位數(shù)據(jù)以及4 位特殊字符指示符作為編碼器模塊的輸入。轉(zhuǎn)換器將32 位數(shù)據(jù)編碼為40 位數(shù)據(jù)。轉(zhuǎn)換后的數(shù)據(jù)被饋送到串行器模塊,該模塊將并行數(shù)據(jù)輸入轉(zhuǎn)換為高速串行數(shù)據(jù)。
本節(jié)介紹通過基于光纖通道的幀在兩個端口之間的通信機制。
實現(xiàn)的設(shè)計協(xié)議序列處理如圖8 所示。源將初始幀發(fā)送到光纖網(wǎng)。在檢查Frame 標頭中的目標ID后,F(xiàn)abric 會將框架路由到相應(yīng)的目標端口。基于結(jié)構(gòu)緩沖區(qū)中用于接收幀空間的可用性,它以R_RDY基本信號進行響應(yīng)。類似地,目標端口根據(jù)目標端口中緩沖區(qū)的可用性以R_RDY 信號響應(yīng)光纖網(wǎng)絡(luò)。接收到源端口的R_RDY 信號后,它會將其幀結(jié)構(gòu)如圖4 所示的數(shù)據(jù)幀發(fā)送到結(jié)構(gòu),結(jié)構(gòu)將幀發(fā)送到目標端口。
圖8 協(xié)議順序
如果源端口中沒有任何數(shù)據(jù)或目標端口尚未準備好接收數(shù)據(jù),則端口之間的通信將暫停。源端口以終止幀類型發(fā)送序列中的最后一幀,以指示序列中的最后一幀。
圖9 和圖10 顯示了用于協(xié)議實施的工具捕獲的樣本幀。
圖9 顯示了為實現(xiàn)協(xié)議而生成的初始化幀,該幀開始了端系統(tǒng)之間的通信。起始幀定界符值為“BCB55656”,這表明生成的幀是初始化幀。幀結(jié)束定界符為“BCB5F5F5”,表示幀的正常結(jié)束。
圖9 初始化框架
圖10 數(shù)據(jù)框
圖10 表示用于協(xié)議實現(xiàn)的數(shù)據(jù)幀,該協(xié)議幀結(jié)束了系統(tǒng)之間的通信。結(jié)束幀中的開始幀分隔符是“BCB53636”,它表示正常的開始幀。分隔符的末尾是“BCB57575”,它指示終端系統(tǒng)之間的通信終止。
本文提出了一種基于以太網(wǎng)的航空電子環(huán)境數(shù)據(jù)協(xié)議的設(shè)計方法。該方法在FPGA 平臺端系統(tǒng)中實現(xiàn)傳輸,具備并發(fā)執(zhí)行能力,同時考慮了錯誤檢測機制,以確保在終端系統(tǒng)中接收到數(shù)據(jù)的完整性。該協(xié)議在數(shù)據(jù)傳輸方面表現(xiàn)出極大的優(yōu)勢,具有高速、并發(fā)性的特點,特別是在高速應(yīng)用中,經(jīng)測試,協(xié)議中的數(shù)據(jù)傳輸速度約為1 Gb/s。其實驗結(jié)果表明這是一個高效經(jīng)濟的方法。