王 樂,趙 剛,孫偉龍
(北方自動控制技術研究所,太原 030006)
由于計算機處理器速度和外圍設備速度的不斷提高,在眾多實驗環境中需要高速數據互連介質,用于通信的介質需能夠實現長距離傳遞可靠的數據[1-2]。為了突破所有這些限制,需保證互連技術是串行且異步的。與其他技術相比,光纖通道是具有更高數據速率的互連技術[3]。光纖通道支持不同的協議,以不同的速率傳輸數據,如音頻和視頻[4]。光纖通道的高帶寬和減少的干擾特性使其具有進行高速通信的優勢[5-6]。航空電子環境需要高速互連介質來在終端系統之間傳輸大量數據。根據航空電子環境(AE)的要求,光纖通道委員會(FC)在航空電子環境中提供了子協議FPGA[6]。目前,光纖通道已被用作航空電子總線以及專用總線,以實現較高的數據速率,從而在單元之間傳輸數據和視頻[7-8]。航空電子環境需要高速互連介質來在終端系統之間傳輸大量數據。根據航空電子環境(AE)的要求,光纖通道委員會(FC)在航空電子環境中提供了子協議FPGA[9]。目前,光纖通道既用作航空電子總線,又用作高數據速率的專用總線,以在設備之間傳輸數據和視頻[10]。FPGA 是協議和配置文件的集合,指定了光纖通道在設備中的應用,用于商業和軍事航空航天領域[8-9]。
基于以上情況,結合航空電子系統的通信需求,提出了一種基于以太網的航空電子環境數據協議的設計方法,該方法通過FPGA 平臺端系統中實現,具備并發執行能力,同時考慮了錯誤檢測機制,將錯誤檢測機制嵌入到協議設計中,以驗證其在端系統中數據接收的完整性。
FPGA 協議提供了不同的服務類別,即1 類,2類,3 類和6 類。這些服務類別的主要區別在于兩個通信端口之間通信服務的分配和保留。
1 類是專用的連接服務,提供兩個端口之間的專用連接。這是一個基于確認的協議。
2 類不是專用的連接服務。它是在幀邊界具有結構多路復用的服務。
3 類是一種連接少且未經確認的服務。
6 類是專用的連接服務,具有多播連接功能。單個源端口將與多個目標端口形成專用連接。
FPGA 協議應包含最大2 148 個字節的幀。該框架將由5 個字段組成,包括:幀開始(SOF)、幀頭、數據字段、CRC、幀結束(EOF)。
為了維持適當的鏈路,應該在幀之間發送空閑的原始信號(理想幀)。FC_AE 幀的幀結構如圖1 所示。

圖1 FPGA 幀結構
描述:
1)幀開始(SOF)
幀起始定界符是一個有序集和多個定界符,用于序列控制。SOF 分隔符通常由SOFX 表示,其中X表示使用該分隔符的特定類。
2)擴展頭
擴展頁眉是框架的可選頁眉。如果存在擴展的標頭,則緊隨其后是SOF 分隔符。擴展頭的存在是由幀頭定義的。擴展頭用于在框架中添加額外的功能。
3)幀頭
如果擴展頭不可用,則幀頭將緊隨SOF 分隔符。幀頭用于控制鏈接操作,設備協議傳輸,還用于檢測序列中丟失的幀或亂序幀。
4)有效載荷
需要從一個終端系統發送到另一終端系統的數據打包在此有效負載字段中。每幀有效負載的最大為2 112 Byte。
5)CRC
CRC 是幀的循環冗余校驗。標頭的開始和標頭的結束不包括在CRC 計算中。CRC 是一個4 Byte的字,是為擴展頭(如果存在)、幀頭和有效載荷計算的。CRC 用于幀的錯誤處理。
6)幀尾(EOF)
EOF 分隔符是一個4 Byte 字,是一個有序集,緊跟在幀的CRC 字段之后有多個EOF 定界符用于序列控制。
在這種類型的服務中,目標可以丟棄源發送的多個幀而無需任何確認。流控制框架不屬于此類服務。實現數據幀通信序列以建立通信。數據幀有兩種類型。初始化幀在兩個NX_port 之間創建通信電路,而普通數據幀則將信息從源端口傳輸到目標端口。
初始化幀的結構如圖2 所示。

圖2 初始化幀的幀結構
初始化幀的SOF 定界符是SOF 啟動(Sofi)。該幀建立兩個端口之間的通信。標頭包含序列ID,源ID 和目標ID 的信息。由于該幀是第1 幀,因此,該幀的序列計數為0。標頭中的其余字段填充有適當的信息,以將該幀表示為第1 幀。由于第1 幀是通信初始化幀,因此,它不包含數據。為不包括SOF 和EOF 分隔符的完整幀計算CRC,并將其填充在CRC字段中。EOF 字段包含EOFn3 的值,該值指示幀的正常結束。此幀中使用的EOF 并不表示通信終止。
普通幀的SOF 定界符為SOF 普通類3(SOFn3)。該值表示該幀是數據幀。標頭中的序列計數(SEQ_CNT)字段(標準)指示序列中當前幀的計數。數據幀由標題和有效載荷字段組成。有效負載字段填充有要傳輸到目標終端系統的數據。為報頭和有效載荷計算CRC。CRC 被打包在幀中的有效載荷字段之后。EOF 字段由幀定界符的末尾組成,它可以代表幀的正常端或端口之間通信序列的端接。
光纖通道數據發送器設計的框圖如圖3 所示。臺式計算機被用作實現的數據源。在主機系統中會生成有效載荷,以及應通過光纖通道幀發送的標頭信息。數據以UDP 數據包的形式生成,這些數據包從主機系統發送到FPGA。

圖3 TX 設計模塊
主機系統用于以UDP 數據包的形式生成數據并發送到FPGA。主機與FPGA 之間的通信是通過以太網鏈路建立的。
1)數據包生成:Visual Studio 用作生成以太網數據包的軟件開發平臺。在Windows 平臺上打開并配置了基于以太網的套接字,以建立以太網鏈接。一旦配置了套接字,就可以通過套接字將數據傳輸到FPGA。
2)生成數據包:產生UDP 數據包的流程圖如圖4 所示。可以通過以太網發送的最大有效負載大小為1 472 Byte。如果數據大于1 472 Byte,則應將數據分段并通過多個數據包傳輸。
主機生成的以太網數據包(UDP)由FPGA 板接收。
主機系統應將其他數據包連同UDP 數據包一起發送到FPGA。接收到的數據必須經過驗證,以區分目標UDP 數據包與其他幀。驗證是通過對照板IP 地址和端口號檢查UDP 幀中的目標IP 地址和端口號來完成的。當IP 地址和端口號匹配時,幀應被視為有效的UDP 幀。
UDP 數據包中的數據字段是面向字節的(8位),需要轉換為字格式(32 位)才能將數據從UDP數據包映射到FC_AE 幀。由轉換器模塊完成向32位的轉換。轉換器模塊在時鐘的每個上升沿接收字節數據。該模塊將數據的每4 個字節與第4 個時鐘脈沖的上升沿連接在一起。這4 個字節(32 位)的數據作為輸出發送。
來自轉換模塊的32 位字數據流在有效載荷FIFO 中進行緩沖。
每個接收到的數據包的狀態都存儲在狀態FIFO 中。狀態FIFO 指示有效載荷FIFO 中是否存在有效的載荷數據包數據。
此外,將從轉換器模塊獲得的有效數據存儲在數據FIFO 中。在每個VAL ID SHIame 的末尾,SHIame 的狀態存儲在狀態FIFO 中。根據FIFO 中空間的可用性執行將數據和狀態寫入相應FIFO 的操作。光纖通道幀打包器模塊監視狀態FIFO,以生成FC 幀。

圖4 生成UDP 數據包的流程圖

圖5 FC_AE 幀打包器
FPGA 幀的字段包括SOF、標頭、有效負載、CRC 和EOF。根據狀態FIFO 中狀態信息的可用性,生成FC 幀。狀態FIFO 為空表示有效載荷FIFO 中的數據不可用。打包器將生成空閑字,以在數據幀不可用期間維持端端口之間的連接性。3 類服務是在光纖通道協議上實現的。下頁表1 顯示了第3 類服務支持的幀和信號。
打包器模塊生成表1 中所示的幀。此模塊生成32 位的數據(TX-Data)和4 位的特殊字符指示符(TX-KC HAR)。4b KCHAR 對于8b/10b 編碼是必需的。

表1 在CLASS3 服務中使用的幀
打包器模塊中的每個狀態如下:
1)SOF 生成
從主機獲取的數據中有效載荷的第32 位字包含有關要生成的幀類型的信息。根據該值,此模塊將為不同類型的幀生成必要的SOF 分隔符類型。
2)標頭生成器
有關基于光纖通道的協議幀的標頭信息存儲在數據FIFO 中。標頭生成模塊從數據FIFO 中讀取數據,并將其打包為光纖通道數據幀的標頭字段。
3)有效負載處理程序
可以通過基于光纖通道的數據協議幀發送的最大有效負載大小為2 112 Byte。有效負載處理程序從有效負載FIFO 讀取數據,直到數據包的末尾。有效負載處理程序從有效負載FIFO 中讀取一個數據包數據,以生成一個光纖通道幀。數據FIFO 上幀數據的最后一個字由最后一個識別信號加起來表示。
4)EOF 生成
從主機獲得的數據中有效載荷的第1 個32位字包含有關要生成的幀類型的信息。根據該值,此模塊會為不同類型的幀生成必要的EOF 定界符類型。
5)R_RD Y 生成器
打包器模塊根據接收模塊的請求生成READY信號。當接收器準備好接收幀時,它請求打包器模塊生成R-ROY 信號。發送器向接收器發送確認,作為就緒信號生成的指示。
6)打包器的Control_flow
打包器工作的狀態序列如圖6 所示。

圖6 打包程序的狀態圖
打包器保持空閑狀態,直到數據FIFO 中的有效數據可用為止。初始化幀是根據數據FIFO 中有效數據的可用性生成的。初始化幀的結構如圖3 所示。在生成初始化幀之后,打包器等待R_RDY 信號的接收以依次生成下一幀。在從接收器打包器接收到R_RDY 信號后,將開始生成順序的下一個數據幀,其結構如圖4 所示。該循環持續進行,直到發送該序列中的最后一個數據幀為止。打包器輪詢來自接收器的請求,以生成R_RDY。在生成空閑字期間生成就緒信號。數據序列完成后,打包器將保持空閑狀態,直到要生成幀的下一個數據序列可用為止。
CRC 是緊隨數據字段之后的4 Byte 字。此CRC字段用于在接收方檢查幀的數據完整性。SOF 和EOF 分隔符不包括在CRC 計算中。
通常將CRC 計算為原始傳輸位到標準多項式的模2 除法的余數。用于計算CRC 的標準多項式,如式(1)所示。

并行CRC 計算方法用于CRC 計算。FC_AE 幀中CRC 計算的機制如圖7 所示。

圖7 CRC 計算
在檢測到SOF 分隔符后,CRC 引擎將根據SOF分隔符之后的32 位數據開始計算CRC。為標頭和數據字段計算CRC。根據當前計算的CRC 和幀中的下一個32 位來計算下一個CRC 位。重復此過程,直至檢測到EOF 分隔符。在檢測到EOF 定界符后,CRC 引擎將停止計算CRC 的過程,并生成最終的CRC 值。最終的CRC 值緊隨數據字段之后和EOF字段之前。
通過光纖通道傳輸的數據以8b/10b 編碼格式進行編碼。Xilinx MGT 模塊中的8b/10b 編碼器用于實現編碼機制。8b/10b 編碼器每8 位數據生成10 位數據。32 位數據以及4 位特殊字符指示符作為編碼器模塊的輸入。轉換器將32 位數據編碼為40 位數據。轉換后的數據被饋送到串行器模塊,該模塊將并行數據輸入轉換為高速串行數據。
本節介紹通過基于光纖通道的幀在兩個端口之間的通信機制。
實現的設計協議序列處理如圖8 所示。源將初始幀發送到光纖網。在檢查Frame 標頭中的目標ID后,Fabric 會將框架路由到相應的目標端口。基于結構緩沖區中用于接收幀空間的可用性,它以R_RDY基本信號進行響應。類似地,目標端口根據目標端口中緩沖區的可用性以R_RDY 信號響應光纖網絡。接收到源端口的R_RDY 信號后,它會將其幀結構如圖4 所示的數據幀發送到結構,結構將幀發送到目標端口。

圖8 協議順序
如果源端口中沒有任何數據或目標端口尚未準備好接收數據,則端口之間的通信將暫停。源端口以終止幀類型發送序列中的最后一幀,以指示序列中的最后一幀。
圖9 和圖10 顯示了用于協議實施的工具捕獲的樣本幀。
圖9 顯示了為實現協議而生成的初始化幀,該幀開始了端系統之間的通信。起始幀定界符值為“BCB55656”,這表明生成的幀是初始化幀。幀結束定界符為“BCB5F5F5”,表示幀的正常結束。

圖9 初始化框架

圖10 數據框
圖10 表示用于協議實現的數據幀,該協議幀結束了系統之間的通信。結束幀中的開始幀分隔符是“BCB53636”,它表示正常的開始幀。分隔符的末尾是“BCB57575”,它指示終端系統之間的通信終止。
本文提出了一種基于以太網的航空電子環境數據協議的設計方法。該方法在FPGA 平臺端系統中實現傳輸,具備并發執行能力,同時考慮了錯誤檢測機制,以確保在終端系統中接收到數據的完整性。該協議在數據傳輸方面表現出極大的優勢,具有高速、并發性的特點,特別是在高速應用中,經測試,協議中的數據傳輸速度約為1 Gb/s。其實驗結果表明這是一個高效經濟的方法。