高潤蓮 ,周 晴
(1.中國科學院大學北京100190;2.中國科學院國家空間科學中心,北京100190)
隨著計算機技術、數據通訊技術和網絡技術的發展,信息時代數據量的爆炸增長給存儲傳輸技術的發展提供了良好的機遇,如何對數據進行安全快速遠距離的存儲、傳輸、管理以及使用成為了現代通信存儲技術的主要要求。而對于航空航天電子系統而言,也同樣面臨著對數據通信在可靠性、數據吞吐率、實時性等方面越來越高的要求,目前光纖通道通信網絡已成為新一代航空電子系統的主流技術[1-2]。
光纖通道作為代替現代航空電子總線的網絡,具有高帶寬、低延遲、拓撲靈活、長距離傳輸,支持多種上層協議[3]。目前對于光纖通道的研究只要集中于對協議的研究和協議框架的設計:文獻[4]提出一種基于光纖通道接口通用驅動程序的設計方案;文獻[5]提出光纖通道現狀和發展趨勢;文獻[6]提出光纖通道與MIL-STD-1553協議兼容性設計方案;文獻[7]提出一種光纖通道協議分析與接口卡設計方案。
文中主要講述基于光纖通道FC-AE-1553協議的數據收發系統的設計,以及各模塊作用進行說明。采用Xilinx的Virtex-4實現FC-0、FC-1以及部分的FC-2層的功能,通過上板調試,從而實現點對點數據傳輸通信,經過實驗證明,該數據收發系統方案可行。
光纖通道 OSI(OpenSystem Inter-connection)模型分為5層[8-9],分為兩個部分:物理和信號層,上層協議層,如圖1所示。物理和信號層包括FC-0,FC-1,FC-2層,上層協議層包括FC-3,FC-4層。其中物理層由傳輸介質、發送機和接收機及其接口組成;編碼層采用8B/10B編碼;協議層規定了端到端數據塊的傳輸機制;通用服務層提供了一組對FC節點上的多個N端口通用的服務。FC提供支持多種ULP(Upper Layer Protocal)的方法。
光纖通道協議規定在光纖通道中傳輸的3個級別的數據結構:交換,序列和幀。交換是數據傳輸的最高層,一次交換表示兩個節點之間的一次信息交互過程,可包含一個或多個序列的傳輸。序列是一個數據報或者分組,一個序列可以包含一個或多個幀。幀是網絡中兩個節點進行信息交互的基本數據單元。FC-AE-1553幀格式由一個SOF、幀內容和EOF組成[10-11]。幀內容包括幀頭、0-2112字節數據字段和32位CRC校驗碼。另外,光纖通道定義了3種服務類[12]。這些服務類按N端口間通信回路的配置和保持方法,以及系統的傳輸完整性要求來區分:第1類服務是建立專用連接的服務。這類服務通過在兩個N端口間建立連接,保證獲得最大帶寬;第2類服務是一種按幀大小傳輸的、帶有交換網多路復用幀的無連接服務。如果沒有交換網,則這種服務就變成一種特殊的點對點服務。在沒有鏈路錯誤時,交換網能保證給出交付成功或交付失敗的通知;第3類服務是一種按幀大小傳輸的、帶有交換網多路復用幀的無連接服務。第3類服務只支持無確認幀的交付。其中目的N端口在收到有效數據幀時不發送任何確認鏈路控制幀,所有確認都是由ULP確定和實現的。為了數據的快速傳輸,本論文采用第3類服務,只支持無確認幀的交付,目的N端口在收到有效數據幀時不發送任何確認鏈路控制幀。
本方案是針對1.062 5 Gbps的光纖速率設計的,系統總體方案如圖1所示。該系統主要由發送緩存、接收緩存、發送模塊、接收模塊、端口狀態機、流量控制模塊和光模塊組成,除光模塊以外的其他模塊都由FPGA完成。本方案FPGA采用Xilinx公司Virtex-4系列的XC4VFX60芯片,該芯片包含16個RocketIO模塊。RocketIO為622 Mb/s到6.5 Gb/s波特率的全雙工串行收發器[13],可以實現數據的高速串行傳輸。光模塊采用Eoptolink公司的EOLP-1380-10芯片,該芯片支持1.062 5 Gbps到8.5 Gbps的數據傳輸。參考時鐘來自外部晶振,選用的是泰藝公司的OT-M-212.5M的差分晶振,輸出波形為方波,輸出電壓為3.3 V。

圖1 光纖通訊控制FPGA
本系統主要由發送模塊、接收模塊、端口狀態機、流量控制模塊、RocketIO和光模塊組成。發送模塊完成組幀、CRC校驗、8b/10b編碼等功能;接收模塊完成逗號檢測、8b/10b解碼、解幀等功能;端口狀態機完成鏈路狀態之間的轉換功能;流量控制模塊完成兩端口之間流量的控制;光模塊實現電信號與光信號的相互轉換,通過光纖傳輸光信號。
發送模塊具體框圖如圖2所示。Tx_buffer通過FIFO實現,將要發送的數據輸入到發送緩存,通過Tx_control模塊來確定端口此時處于發送數據幀、原語序列還是原語信號的狀態。其中原語序列來自端口狀態機,原語信號來自流量控制模塊,幀內容來自發送緩存。當端口狀態機處于激活狀態時,Tx_control模塊控制Tx_buffer的讀使能(rd_en)有效,從而將數據從Tx_buffer中讀出;CRC32模塊用來計算數據的校驗碼,采用32位數據并行校驗的方法[14];EOF_Polarity模塊用來計算數據幀結尾的RD值,從而確定EOF的值;Tx_SOF_Select模塊用來確定SOF的值,不同的服務類型SOF的值不同。Tx_control將數據組幀,幀格式如圖2所示。Demux_32to8模塊將32位的數據解復用為8位串行數據,以便數據進行8b/10b編碼,將編碼后的值送入RocketIO進行并串轉換。
接收模塊具體框圖如圖3所示。接收到的串行數據經過RocketIO的串并轉換模塊轉換為并行數據后,通過Decoder_10b/8b模塊進行解碼,解碼得到的數據經過復用(Mux_8to32)之后送入原語檢測模塊(Prim_check)和字同步模塊(Word_syn)。Prim_check模塊的主要功能檢測接收到的數據是原語信號、原語序列還是傳輸的數據,從而送到相應模塊進行處理,其中原語信號送到流量控制模塊,原語序列送到端口狀態機模塊,而傳輸數據送到CRC校驗模塊(Calibration_crc32)和接收緩存模塊(rx_buffer)。另外通過監測數據的幀起始與結束標識符,判斷數據幀是否完整及數據幀的長度。Calibration_crc32模塊主要負責為將接收的數據(不包括SOF和EOF)進行CRC校驗,從而判斷數據在傳輸過程中是否出現錯誤。rx_buffer模塊負責緩存接收到的數據幀(包括SOF和EOF),通過Rx_control模塊來控制數據幀的寫入。Word_syn模塊負責判斷硬件模塊是否字同步,如果接收端接收到的位流的傳輸字與發送端發送的傳輸字一樣,那么應實現傳輸字同步,條件滿足時進入同步獲取狀態,從而使端口狀態機(PSM)一直處于激活狀態。State_Register模塊主要功能是記錄每一幀數據幀的長度以及對應的錯誤類型(如果傳輸過程中出現錯誤),主要包括無效傳輸字、CRC校驗錯誤、無效EOF、數據幀不完整及幀長度溢出這幾種錯誤。

圖2 發送模塊框圖

圖3 接收模塊框圖
根據FC-AE-1553協議規定,在端口進行正常通信之前,端口狀態機要處于激活狀態。協議定義了一系列的原語序列用于表示端口狀態,并且詳細敘述了端口狀態機的實現方法。原語序列是一個連續重復發送的有序集,若端口遇到了特殊情況,或一個端口的接收機邏輯碰到了特定的條件,就發送原語序列。如圖4為端口狀態機的狀態轉移圖[15]。當端口上電或復位后,處于未激活狀態,需要通過光纖協議定義的握手機制恢復到激活(上線)狀態。光纖通道協議規定使用的原語序列協議有3種,分別為:鏈路初始化協議、鏈路失效協議和鏈路復位協議[16]。當端口檢測到同步丟失時間超過R_T_TOV,或不在離線狀態時檢測到信號丟失時,端口應執行鏈路失效協議。具體實現步驟如下:1)當A端口中存在鏈路失效條件時,端口應發送NOS(Not Operational Primitive Sequence)并進入NOS發送狀態;2)B端口接收到NOS時,進入NOS接收狀態,發送OLS(Offline Primitive Sequence);3)A端口接收到OLS,進入OLS接收狀態,發送LR(Link Reset Primitive Sequence);4)B端口接收到LR時,進入LR接收狀態 ,發 送 LRR( Link Reset Response Primitive Sequence);5)A端口接收到LRR時,進入LRR接收狀態,發送 IDLE(Idle Word);6)B端口接收到IDLE時,退出LR接收狀態進入激活狀態,A端口在接收到IDLE時,也退出LRR接收狀態進入激活狀態。同理,鏈路初始化協議和鏈路復位協議執行過程如圖5所示。圖5為這3個原語序列的恢復過程和層次,通過這3層結構端口可以最后達到激活狀態[17],從而確保端口之間能夠進行數據傳輸。

圖4 端口狀態機狀態轉移圖

圖5 鏈路恢復協議的3層結構
流量控制是FC-2層的控制過程,用于跟蹤N端口之間、N端口與交換網之間幀的傳輸。流控制分為端到端流控制和緩沖區到緩沖區流控制。本論文使用第3類幀,只使用緩沖區到緩沖區流控制。緩沖區到緩沖區流量控制管理見表1所示[9]。信用是分配給傳輸端口的接收緩沖區的數量。信用計數由序列啟動方進行管理。首先確定對方的信用即對方可以接收多少幀數據。每發送一幀數據信用計數(Credit_CNT)加1,直到加到信用規定的最大值為止。在這種情況下,信用計數代表序列接收方還沒有確認的重要數據幀的數目。當序列啟動方接收到來自接收方的
R_RDY(32’hbc954a4a)信號時,信用計數減 1,序列啟動方可繼續發送數據。

表1 緩沖區到緩沖區流量控制管理
收發器的工作原理是發送端按照一定的計算規則產生的CRC校驗碼被插入到準備發送的并行數據中,經過8B/10B編碼(8B/10B編碼可根據需要選擇),寫入發送FIFO,然后將其轉換成差分信號發送出去[18]。接收端通過接收器接收串行差分信號,在時鐘數據恢復電路的作用下,從串行數據流中恢復出時鐘信號,該時鐘信號用于串/并轉換,在comma檢測和對齊模塊的作用下,將數據對齊進行串并轉換,輸出的并行數據經過8B/10B解碼(可根據需要選擇,與發送端選擇一致),依據需要用彈性緩沖器實現通道綁定和時鐘修正,經過CRC模塊校驗后并行輸出。本方案中只使用RocketIO中的PMA(physical media attachment)部分。
本論文對光纖通道數據收發系統光纖通訊控制FPGA進行仿真,通過chipscope抓取波形如圖6所示,tx2_top_module模塊的frame_out表示發送端發出的數據幀,rx2_module模塊的frame_in為接收端接收到的數據幀。由圖6(a)可以看出,當有一幀數據從接收FIFO取出后,接收端發送原語信號R_RDY進行原語控制。圖(b)(c)為圖(a)放大后的時序圖,可以看出接收端接收到的數據幀與發送端發送的數據幀完全相同,數據幀由幀頭、數據、CRC和幀尾組成。32’hbc95b5b5為空閑信號,每一幀數據之間必須有5個以上的空閑信號。當接收到原語信號R_RDY(32’hbc954a4a) 時 ,信 用 量 計 數credit_cnt_reg減1;當發送端每發送一幀數據,信用量計數credit_cnt_reg加1。通過上板調試表明數據收發系統功能正確,沒有出現丟幀或錯誤的現象,串行時鐘頻率達到1.062 5 Gb/s。
文中設計并實現了基于光纖通道數據收發系統,完成了FC-AE-1553協議的FC-0、FC-1和部分FC-2層的功能,通過使用RocketIO使數據串行傳輸速率達到1.062 5 Gb/s,實現點對點傳輸。與傳統1553B總線協議1 Mb的傳輸速率[19]相比較,在速度上有質的提高。
[1]楊現萍,段亞.FC-AE-1553總線數據處理技術研究[J].現代電子技術,2011,34(12):29-32.
[2]鳳雷,馮收,喬家慶,等.FC-AE-1553設備光纖接口電路的設計與實現[J].電子測量技術,2012,35(7):62-65.
[3]田澤,徐文龍,許恒,等.FC光纖通道技術研究綜述[J].電子技術應用,2016(9):143-146.
[4]許里,馮國仕,李璞.光纖通道接口通用驅動程序設計與實現[J].通信技術,2014,47(11):1343-1346.
[5]王樹占,李娟艷,王佳敏.光纖通信技術的現狀及發展趨勢[J].電子制作,2015(8):149.

圖6 數據收發系統發送與接收數據對比圖
[6]曹素芝,張善從.光纖通道與MIL-STD-1553協議的兼容性設計[J].計算機測量與設制,2010,18(7):1624-1626.
[7]張志,翟正軍.航空電子光纖通道協議分析與接口卡設計[J].測控技術,2010(2):99-101.
[8]FCIA Editor.GEN 6-Sixth Generation Fibre Channel[S].2014.
[9]ANSI INCITS.Fibre Channel-Physical and Signal Interface(FC-PH)REV4[S].1994.
[10]ANSI INCITS.Fibre Channel-Avionics Enviroment(FC-AE)REV2.4[S],2002.
[11]ANSI INCITS.Fibre Channel-Avionics Enviroment(FC-AE)REV2.6[S],2002.
[12]黃浩益,熊華剛.GJB 6410.1-2008.中華人民共和國軍用標準[S].
[13]Virtex-4 RocketIO Multi-Gigabit Transceiver User Guide[M].2008.
[14]杜瑞,張偉功,鄧哲,等.新型總線中并行CRC算法的設計與實現[J].計算機工程與設計,2013,34(1):131-135.
[15]冷悅.FC-AE-1553協議的硬件系統設計[D].成都:電子科技大學,2010.
[16]宣亮亮.基于PC機和FPGA的光纖通道接口適配器的研究與實現[D].南昌:南昌航空大學,2010.
[17]鳳雷,馮收,喬家慶,等.FC-AE-1553設備光纖接口電路的設計與實現[J].電子測量技術,2012,35(7):62-65.
[18]蘇秀妮.基于RocketIO高速串行通信接口的研究與實現[D].西安:西安電子科技大學,2013.
[19]徐貴賢.1553B總線簡介及其實現[J].通信技術,2011,44(5):166-168.