倪建軍 , 李 濤 , 王建宇
(1.中國空間技術研究院 北京 100086;2.北京空間機電研究所 北京 100076)
隨著實時型相機成像系統獲取圖像數據量的迅速增加,使得相機傳輸圖像數據的碼率迅速增長,相應地對成像電路的數據傳輸系統也提出了更高的要求。高性能的數據傳輸系統迫切需要高可靠、高傳輸速率的數據傳輸技術來解決實時型相機數據傳輸問題[1-2]。
目前,處理器的數據處理速率已遠高于外部數據總線傳輸速率。增加并行總線寬度可以提高芯片與芯片之間、背板與背板之間的數據吞吐量,但是總線數目的增多及傳輸速率的加快會使PCB布線的難度提高,并且增加了信號的延時或偏移。高速串行總線接口技術成為提高數據傳輸帶寬的有效解決途徑[3-4]。
為了解決上述問題,文章選用了外置SerDes器件TLK2711。系統之間正常通信,必須制定相應的協議。雖然符合規范的標準協議傳輸的速度和精度非常高,但是這些標準協議提供許多不同類型的服務,其結果是有大量的通信冗余數據,惡化了延時性能。如XILINX公司就針對自己FPGA內嵌的Rocket IO制定了串行互聯AURORA協議,但該協議幀格式的定義存在弊端,會導致系統資源的浪費[5]。為了提高系統的可靠性與設備的可重復性并減少系統資源的占有率,文章設計了基于TLK2711的簡單可靠的全雙工通信協議。
文中以SerDes器件TLK2711為研究對象,TLK2711是吉比特高速收發器件家族的成員之一,支持1.6 Gbps到2.7 Gbps的串行數據率,提供超過2.16 Gbps的信號帶寬,可應用于超高速、點對點的雙向傳輸系統中。它采用的64引腳的VQFP封裝,2.5 V的電壓供電。TLK2711具有如下特點[6-7]:
1)串行傳輸速率為 1.6 Gbps到 2.7 Gbps,支持背板、銅線和光纖轉換器接口;
2)采用2.5 V供電,具有360 mW的低處理功耗;
3)支持片內8B/10B編解碼和逗號對齊(CommaAlignment);
4)串行輸出擺動可調,接收差分輸入門限最低可達200 mV;
5)輸入低速參考時鐘,片內PLL提供時鐘綜合;
6)支持熱插拔保護,滿足工業溫度范圍,有高等級器件。
TLK2711除上述特點外還具有一些其他的特點,如采用了單端信號,因此不需要參考電壓,而信號的傳送或接收也只需要一個片內的時鐘合成電路,降低了成本和功耗。TLK2711的原理如圖1所示。
TLK2711將發送的16位數據與控制碼TKLSB與TKMSB經8B/10B編碼器產生10位有效數據傳到2:1的多路復用器,然后送到串行器,完成數據從并行到串行的轉換,最后經帶有預加重功能的發送器發送出去。TLK2711的接收基本上是其發送數據的逆過程。

圖1 TLK2711原理框圖Fig.1 Block diagram of TLK2711
SerDes本身是相當靈活的設備,為了啟動SerDes,首先要定義對齊序列、線路編碼方法、物理鏈路,之后數據才可在兩個收發器間相互傳送。但是所傳送的數據的含義還需要有更詳細的定義,這就是協議存在的意義。什么數據傳送到何處,數據的含義是什么,數據中需要插入什么特殊位,什么樣的數據可以被丟棄,這些都需要預先定義一個協議來完成收發雙方的相互協調。因此,為了保證鏈路上的數據正確的傳輸到接收端,并且被接收設備正確的解析,需要定義合理的傳輸協議。根據傳輸的特點和設計的實際需要,協議制定需要盡量減少協議的傳輸開銷,簡化收發雙方的握手過程。
文章制定的是全雙工的點對點鏈路層串行協議,不存在尋址交換和復雜的上層應用,因此本文對于尋址交換不做考慮。,主要考慮的是:數據幀傳輸、鏈路初始化和鏈路管理。如圖2所示是高速串行雙工協議系統,整個協議只考慮了OSI(開放系統互連)參考模型中的鏈路層和物理層。

圖2 高速串行協議模型Fig.2 High-speed serial protocol model
由TLK2711與高速連接器等構成通訊協議的物理層,實現發送數據的編解碼與串并轉換。即,將數據鏈路層給出的數據字節轉換成可在物理介質上傳輸的合適信號,同樣也負責將從物理介質上接收到的信號轉換成可向數據鏈路層傳遞的數據字節。
其中FPGA實現數據鏈路層的功能,完成物理子通道的初始化、完成發送數據的幀封裝、將接收到的數據進行解析幀處理、同時為上層協議提供簡單的用戶接口。圖3是高速串行通訊鏈路層協議的結構框圖,我們設計的協議力求鏈路層兩端的接口簡單明了,有利于用戶對協議的操作。
對于應用層,用戶可以不去了解協議的具體內容,只提供自己所要傳輸的數據即可,其他的傳輸功能都由鏈路層和物理層來完成,這樣簡化了用戶的設計。

圖3 鏈路層協議結構框圖Fig.3 Block diagram of Link layer protocol
為了確保數據在協議通道中正確傳輸,必須在通道中傳輸一些控制信息。協議將定義的這些控制字符稱為協議原語。本協議用8B/10B編碼中的K字符和D字符組合來實現數據的發送與接收控制功能,表1給出了協議中自定義的協議原語。

表1 控制字符Tab.1 Control characters
系統上電后需要對SerDes進行初始化來建立一個有效鏈路,這樣SerDes才能進行正確的數據收發。鏈路初始化過程中非常重要的一點就是數據對齊。在SerDes中,當并行數據經串行器變為串行數據時,與并行數據相關的字符邊界就會丟失。當串行數據經解串器恢復為并行數據時,必須依賴數據對齊,鏈路才能夠識別出與并行數據相關的字符邊界。
SerDes采用掃描搜尋特定的比特序列,即comma字符序列實現數據對齊功能。comma檢測電路通過掃描匹配comma字符序列來同步數據流,如果找到,解串器調整字符邊界以匹配檢測到的comma字符序列。掃描是連續進行的,一旦對齊確定,所有后續的comma字符均會發現對齊已確定。TLK2711僅識別包含了字符特征的序列 (b0011111或者b1100000)的控制字符作為識別數據邊界的comma碼。而在8B/10B編碼中,包含了具有字符特征的序列(b0011111或者b1100000)僅有 K28.1、K28.5 和 K28.7,因此在協議中,定義唯一的同步字符/SP/為/D5.6/K28.5/作為對齊字符。TLK2711的comma檢測電路通過檢測/K28.5/字符序列將接收到的串行數據對齊到它原始的10 bit邊界處,之后解碼器將10 bit數據轉換成8 bit數據。
本次協議的邏輯實現是采用VHDL硬件語言描述,協議邏輯分為3個模塊:發送模塊、接收模塊、控制模塊。如上述圖3協議鏈路層接口中所示,鏈路雙方的初始化過程是協議的關鍵所在,不但要保證正確實現收發鏈路的同步,還要能夠正確判斷通訊過程中出現的錯誤,并正確處理,使數據交換能夠順利實現。
鏈路初始化過程是通過收發雙方鏈路交互協議定義的原語來實現的,主要用到同步字符原語(/SP/)、同步應答字符原語(/SPA/)以及空閑字符原語(/IDLE/)。協議中設計了復位狀態、初始化狀態、鏈路檢測狀態與鏈路同步狀態4個狀態,如圖4所示。

圖4 鏈路初始化過程Fig.4 Link initialization process
在系統上電、復位或數據在傳輸過程中發生鏈路中斷都會使鏈路置于復位狀態,引起鏈路的重新初始化。在復位狀態下,鏈路上的/SPA/應答標志位Spa_OK與鏈路同步標志位Lane_OK均為低,表明鏈路沒有收到應答字符,鏈路也沒有建立。之后會轉入初始化狀態,初始化狀態分為兩個子狀態,即Inital_state1與Inital_state2。在Initial_state1中,發送端會不斷發送同步字符/SP/,當接收端連續收到32個/SP/時,會置/SPA/應答標志位Spa_OK為高,之后轉入Inital_state2。在Inital_state2中,發送端就會發80個連續的同步應答字符/SPA/與176個連續的同步字符/SP/的組合碼,這樣做的目的是保證對方鏈路能夠有效的收到32個同步字符/SP/或16個/SPA/。當接收端在應答狀態下收到了連續16個同步應答字符/SPA/,則鏈路同步標志位Lane_OK置高,鏈路進入同步狀態Syn_state中,表明鏈路已建立。在Syn_state中,首先發送80個同步應答字符/SPA/,之后再發進行數據的正常收發。
實際中收、發鏈路是不可能同時建立,即必有先后順序,所以鏈路雙方不論誰先建立,先建立的鏈路再發一定數量的同步應答字符/SPA/,這樣做的目的是使得另外一條鏈路在應答狀態下能有效收到16個同步應答字符,如果鏈路還沒有建立,可能就是鏈路出現問題,會由鏈路檢測狀態來處理。
在鏈路檢測狀態下,即圖4中Lane_detect_state。如果鏈路在一定時間內沒有收到幀頭/SF/、幀尾/EF/或空閑字符/IDLE/,說明收、發鏈路必有一條沒建立,要重新進入復位狀態。如果鏈路收到是無效的字符K0.0和K31.7,即Rxd=?‘FFFF’或‘0000’且 RKLSB 與 RKMSB 均為高,則說明鏈路可能是發生誤碼,也可能是遇到物理連接中斷等問題,分別處理誤碼和連接中斷兩種錯誤會提高協議的效率。所以在Lane_detect_state下如果連續三次接收到有效的數據,那么認為出現的錯誤是誤碼,則鏈路重新跳轉到同步狀態Syn_state,否則當累計收到3次的無效數據,則認為是鏈路發生嚴重的鏈接錯誤,鏈路會重新進入復位狀態以便重新建立鏈接。
對于協議的上層應用來說,數據幀的發送是有間隙的,為了保持鏈路的激活狀態,發送端在沒有數據幀發送請求時,會不斷向鏈路發送空閑字符(IDLE),接收方識別IDEL字符后,作拋棄處理。
本次雙工協議的測試硬件互聯如圖5所示,采用4根2米長的同軸電纜互聯。為了簡單明了,鏈路雙方發送漸變數,圖6是使用ChipScope抓取的數據傳輸圖。圖中(a)是鏈路初始化過程接收端的時序圖,鏈路在Spa_OK高有效之前,鏈路接收到的碼字是不穩定的,當收到32個同步字符后(即十六進制C5BC),Spa_OK會置高,之后收到16個同步應答字符(即十六進制2CBC),Lane_OK置為高有效,高有效之后還會收到一段同步應答碼字,然后轉入正常數據收發。圖(b)是圖(a)放大后的時序圖,十六進制5CFB為幀頭,后面為漸變數。

圖5 協議測試互聯系統Fig.5 Protocol testing interconnected system

圖6 鏈路建立過程中數據的收發圖Fig.6 Link establishment process of sending and receiving data
在對TLK2711做誤碼率測試時,當鏈路雙發建立后,鏈路雙方發送偽隨機數。通過接收端進行監控收到的數據是否為所發送的數據。我們在控制器FPGA中作誤碼計數器,對誤碼標志位進行計數,來統計傳輸數據的誤碼率。
測試時,發送時鐘為125 MHz,串行數據率為2.5 Gbps,用時 2 小時,發送數據總量 2.5×2×3 600×109=1.8×1 013 bit。接收端誤碼標志位一直為高,表明發送的偽隨機數均被正確接收,沒有出現無碼。所以誤碼率BER=出錯位數/總傳輸位數<1/1.8×1013=5.56×10-14。
針對并行總線在數據吞吐量與總線寬度提高出現的問題,實時型成像電路系統對數據誤碼率小,系統小型化與通用化的需求,文章采用SerDes器件TLK2711可以有效解決空間相機數據傳輸容量的與誤碼率的問題。
同時,針對相機成像系統對數據傳輸的高可靠性要求,文章制定的全雙工通信協議盡量做到最簡化,實測無碼率低于10-12,可靠性高。同時,簡單可靠的協議有效的減少了研發所占用的時間,減少維護工作量,提高了設備的利用率。
[1]張達,徐抒巖.高速CCD圖像數據光纖傳輸系統[J].光學精密工程,2009,17(3):670-673.ZHANG Da,XU Shu-yan.High-speed CCD image data fiber transmission system[J].Optics and Precision Engineering,2009,17(3):670-673.
[2]張貴祥,金光,鄭亮亮,等.高速多通道CCD圖像數據處理與傳輸系統設計[J].液晶與顯示,2011,26(3):397-403.ZHANG Gui-xiang,JIN Guang,ZHEN Liang-liang,etal.Design of high-speed and multi-channel CCD image data processing and transmission system[J].Chinese Journal of Liquid Crystal and Displays,2011,26(3):397-403.
[3]高志,黃生葉.基于FPGA的通用高速串行互連協議設計[J].計算機測量與控制,2009,17(9):1826-1829.GAO Zhi,HUANG Sheng-ye.Design of high-speed serial interconnection protocalbased on FPGA[J].Computer Measurement&Control,2009,17(9):1826-1829.
[4]吳威,蘇海冰.RocketIO的高速串行通道設計與驗證[J].單片機與嵌入式系統應用,2008(2):9-11.WU Wei,SHU Hai-bing.Design and validation of high-speed serialchannelbasedonRocketIO[J].Microcontroller&Embedded Systems,2008(2):9-11.
[5]杜旭,于洋,黃建.基于FPGA的高速串行傳輸接口的設計與實現[J].計算機工程與應用,2007,43(12):94-96.DU Xu,YU Yang,HUANG jian.Design and implementation of high-speed serial transmission interface based on FPAG[J].Computer Engineering and Applications,2007,43(12):94-96.
[6]Texas Instruments.TLK2711 1.6 to 2.7Gbps transceiver datasheet[Z].2001.
[7]George J,Yu P,Koga R.Single event effects and total dose test results for TI TLK2711 transceiver[J].IEEE REDW,2008:69-75.