倪建軍 , 李 濤 , 王建宇
(1.中國空間技術(shù)研究院 北京 100086;2.北京空間機電研究所 北京 100076)
隨著實時型相機成像系統(tǒng)獲取圖像數(shù)據(jù)量的迅速增加,使得相機傳輸圖像數(shù)據(jù)的碼率迅速增長,相應地對成像電路的數(shù)據(jù)傳輸系統(tǒng)也提出了更高的要求。高性能的數(shù)據(jù)傳輸系統(tǒng)迫切需要高可靠、高傳輸速率的數(shù)據(jù)傳輸技術(shù)來解決實時型相機數(shù)據(jù)傳輸問題[1-2]。
目前,處理器的數(shù)據(jù)處理速率已遠高于外部數(shù)據(jù)總線傳輸速率。增加并行總線寬度可以提高芯片與芯片之間、背板與背板之間的數(shù)據(jù)吞吐量,但是總線數(shù)目的增多及傳輸速率的加快會使PCB布線的難度提高,并且增加了信號的延時或偏移。高速串行總線接口技術(shù)成為提高數(shù)據(jù)傳輸帶寬的有效解決途徑[3-4]。
為了解決上述問題,文章選用了外置SerDes器件TLK2711。系統(tǒng)之間正常通信,必須制定相應的協(xié)議。雖然符合規(guī)范的標準協(xié)議傳輸?shù)乃俣群途确浅8?,但是這些標準協(xié)議提供許多不同類型的服務,其結(jié)果是有大量的通信冗余數(shù)據(jù),惡化了延時性能。如XILINX公司就針對自己FPGA內(nèi)嵌的Rocket IO制定了串行互聯(lián)AURORA協(xié)議,但該協(xié)議幀格式的定義存在弊端,會導致系統(tǒng)資源的浪費[5]。為了提高系統(tǒng)的可靠性與設備的可重復性并減少系統(tǒng)資源的占有率,文章設計了基于TLK2711的簡單可靠的全雙工通信協(xié)議。
文中以SerDes器件TLK2711為研究對象,TLK2711是吉比特高速收發(fā)器件家族的成員之一,支持1.6 Gbps到2.7 Gbps的串行數(shù)據(jù)率,提供超過2.16 Gbps的信號帶寬,可應用于超高速、點對點的雙向傳輸系統(tǒng)中。它采用的64引腳的VQFP封裝,2.5 V的電壓供電。TLK2711具有如下特點[6-7]:
1)串行傳輸速率為 1.6 Gbps到 2.7 Gbps,支持背板、銅線和光纖轉(zhuǎn)換器接口;
2)采用2.5 V供電,具有360 mW的低處理功耗;
3)支持片內(nèi)8B/10B編解碼和逗號對齊(CommaAlignment);
4)串行輸出擺動可調(diào),接收差分輸入門限最低可達200 mV;
5)輸入低速參考時鐘,片內(nèi)PLL提供時鐘綜合;
6)支持熱插拔保護,滿足工業(yè)溫度范圍,有高等級器件。
TLK2711除上述特點外還具有一些其他的特點,如采用了單端信號,因此不需要參考電壓,而信號的傳送或接收也只需要一個片內(nèi)的時鐘合成電路,降低了成本和功耗。TLK2711的原理如圖1所示。
TLK2711將發(fā)送的16位數(shù)據(jù)與控制碼TKLSB與TKMSB經(jīng)8B/10B編碼器產(chǎn)生10位有效數(shù)據(jù)傳到2:1的多路復用器,然后送到串行器,完成數(shù)據(jù)從并行到串行的轉(zhuǎn)換,最后經(jīng)帶有預加重功能的發(fā)送器發(fā)送出去。TLK2711的接收基本上是其發(fā)送數(shù)據(jù)的逆過程。
圖1 TLK2711原理框圖Fig.1 Block diagram of TLK2711
SerDes本身是相當靈活的設備,為了啟動SerDes,首先要定義對齊序列、線路編碼方法、物理鏈路,之后數(shù)據(jù)才可在兩個收發(fā)器間相互傳送。但是所傳送的數(shù)據(jù)的含義還需要有更詳細的定義,這就是協(xié)議存在的意義。什么數(shù)據(jù)傳送到何處,數(shù)據(jù)的含義是什么,數(shù)據(jù)中需要插入什么特殊位,什么樣的數(shù)據(jù)可以被丟棄,這些都需要預先定義一個協(xié)議來完成收發(fā)雙方的相互協(xié)調(diào)。因此,為了保證鏈路上的數(shù)據(jù)正確的傳輸?shù)浇邮斩?,并且被接收設備正確的解析,需要定義合理的傳輸協(xié)議。根據(jù)傳輸?shù)奶攸c和設計的實際需要,協(xié)議制定需要盡量減少協(xié)議的傳輸開銷,簡化收發(fā)雙方的握手過程。
文章制定的是全雙工的點對點鏈路層串行協(xié)議,不存在尋址交換和復雜的上層應用,因此本文對于尋址交換不做考慮。,主要考慮的是:數(shù)據(jù)幀傳輸、鏈路初始化和鏈路管理。如圖2所示是高速串行雙工協(xié)議系統(tǒng),整個協(xié)議只考慮了OSI(開放系統(tǒng)互連)參考模型中的鏈路層和物理層。
圖2 高速串行協(xié)議模型Fig.2 High-speed serial protocol model
由TLK2711與高速連接器等構(gòu)成通訊協(xié)議的物理層,實現(xiàn)發(fā)送數(shù)據(jù)的編解碼與串并轉(zhuǎn)換。即,將數(shù)據(jù)鏈路層給出的數(shù)據(jù)字節(jié)轉(zhuǎn)換成可在物理介質(zhì)上傳輸?shù)暮线m信號,同樣也負責將從物理介質(zhì)上接收到的信號轉(zhuǎn)換成可向數(shù)據(jù)鏈路層傳遞的數(shù)據(jù)字節(jié)。
其中FPGA實現(xiàn)數(shù)據(jù)鏈路層的功能,完成物理子通道的初始化、完成發(fā)送數(shù)據(jù)的幀封裝、將接收到的數(shù)據(jù)進行解析幀處理、同時為上層協(xié)議提供簡單的用戶接口。圖3是高速串行通訊鏈路層協(xié)議的結(jié)構(gòu)框圖,我們設計的協(xié)議力求鏈路層兩端的接口簡單明了,有利于用戶對協(xié)議的操作。
對于應用層,用戶可以不去了解協(xié)議的具體內(nèi)容,只提供自己所要傳輸?shù)臄?shù)據(jù)即可,其他的傳輸功能都由鏈路層和物理層來完成,這樣簡化了用戶的設計。
圖3 鏈路層協(xié)議結(jié)構(gòu)框圖Fig.3 Block diagram of Link layer protocol
為了確保數(shù)據(jù)在協(xié)議通道中正確傳輸,必須在通道中傳輸一些控制信息。協(xié)議將定義的這些控制字符稱為協(xié)議原語。本協(xié)議用8B/10B編碼中的K字符和D字符組合來實現(xiàn)數(shù)據(jù)的發(fā)送與接收控制功能,表1給出了協(xié)議中自定義的協(xié)議原語。
表1 控制字符Tab.1 Control characters
系統(tǒng)上電后需要對SerDes進行初始化來建立一個有效鏈路,這樣SerDes才能進行正確的數(shù)據(jù)收發(fā)。鏈路初始化過程中非常重要的一點就是數(shù)據(jù)對齊。在SerDes中,當并行數(shù)據(jù)經(jīng)串行器變?yōu)榇袛?shù)據(jù)時,與并行數(shù)據(jù)相關(guān)的字符邊界就會丟失。當串行數(shù)據(jù)經(jīng)解串器恢復為并行數(shù)據(jù)時,必須依賴數(shù)據(jù)對齊,鏈路才能夠識別出與并行數(shù)據(jù)相關(guān)的字符邊界。
SerDes采用掃描搜尋特定的比特序列,即comma字符序列實現(xiàn)數(shù)據(jù)對齊功能。comma檢測電路通過掃描匹配comma字符序列來同步數(shù)據(jù)流,如果找到,解串器調(diào)整字符邊界以匹配檢測到的comma字符序列。掃描是連續(xù)進行的,一旦對齊確定,所有后續(xù)的comma字符均會發(fā)現(xiàn)對齊已確定。TLK2711僅識別包含了字符特征的序列 (b0011111或者b1100000)的控制字符作為識別數(shù)據(jù)邊界的comma碼。而在8B/10B編碼中,包含了具有字符特征的序列(b0011111或者b1100000)僅有 K28.1、K28.5 和 K28.7,因此在協(xié)議中,定義唯一的同步字符/SP/為/D5.6/K28.5/作為對齊字符。TLK2711的comma檢測電路通過檢測/K28.5/字符序列將接收到的串行數(shù)據(jù)對齊到它原始的10 bit邊界處,之后解碼器將10 bit數(shù)據(jù)轉(zhuǎn)換成8 bit數(shù)據(jù)。
本次協(xié)議的邏輯實現(xiàn)是采用VHDL硬件語言描述,協(xié)議邏輯分為3個模塊:發(fā)送模塊、接收模塊、控制模塊。如上述圖3協(xié)議鏈路層接口中所示,鏈路雙方的初始化過程是協(xié)議的關(guān)鍵所在,不但要保證正確實現(xiàn)收發(fā)鏈路的同步,還要能夠正確判斷通訊過程中出現(xiàn)的錯誤,并正確處理,使數(shù)據(jù)交換能夠順利實現(xiàn)。
鏈路初始化過程是通過收發(fā)雙方鏈路交互協(xié)議定義的原語來實現(xiàn)的,主要用到同步字符原語(/SP/)、同步應答字符原語(/SPA/)以及空閑字符原語(/IDLE/)。協(xié)議中設計了復位狀態(tài)、初始化狀態(tài)、鏈路檢測狀態(tài)與鏈路同步狀態(tài)4個狀態(tài),如圖4所示。
圖4 鏈路初始化過程Fig.4 Link initialization process
在系統(tǒng)上電、復位或數(shù)據(jù)在傳輸過程中發(fā)生鏈路中斷都會使鏈路置于復位狀態(tài),引起鏈路的重新初始化。在復位狀態(tài)下,鏈路上的/SPA/應答標志位Spa_OK與鏈路同步標志位Lane_OK均為低,表明鏈路沒有收到應答字符,鏈路也沒有建立。之后會轉(zhuǎn)入初始化狀態(tài),初始化狀態(tài)分為兩個子狀態(tài),即Inital_state1與Inital_state2。在Initial_state1中,發(fā)送端會不斷發(fā)送同步字符/SP/,當接收端連續(xù)收到32個/SP/時,會置/SPA/應答標志位Spa_OK為高,之后轉(zhuǎn)入Inital_state2。在Inital_state2中,發(fā)送端就會發(fā)80個連續(xù)的同步應答字符/SPA/與176個連續(xù)的同步字符/SP/的組合碼,這樣做的目的是保證對方鏈路能夠有效的收到32個同步字符/SP/或16個/SPA/。當接收端在應答狀態(tài)下收到了連續(xù)16個同步應答字符/SPA/,則鏈路同步標志位Lane_OK置高,鏈路進入同步狀態(tài)Syn_state中,表明鏈路已建立。在Syn_state中,首先發(fā)送80個同步應答字符/SPA/,之后再發(fā)進行數(shù)據(jù)的正常收發(fā)。
實際中收、發(fā)鏈路是不可能同時建立,即必有先后順序,所以鏈路雙方不論誰先建立,先建立的鏈路再發(fā)一定數(shù)量的同步應答字符/SPA/,這樣做的目的是使得另外一條鏈路在應答狀態(tài)下能有效收到16個同步應答字符,如果鏈路還沒有建立,可能就是鏈路出現(xiàn)問題,會由鏈路檢測狀態(tài)來處理。
在鏈路檢測狀態(tài)下,即圖4中Lane_detect_state。如果鏈路在一定時間內(nèi)沒有收到幀頭/SF/、幀尾/EF/或空閑字符/IDLE/,說明收、發(fā)鏈路必有一條沒建立,要重新進入復位狀態(tài)。如果鏈路收到是無效的字符K0.0和K31.7,即Rxd=?‘FFFF’或‘0000’且 RKLSB 與 RKMSB 均為高,則說明鏈路可能是發(fā)生誤碼,也可能是遇到物理連接中斷等問題,分別處理誤碼和連接中斷兩種錯誤會提高協(xié)議的效率。所以在Lane_detect_state下如果連續(xù)三次接收到有效的數(shù)據(jù),那么認為出現(xiàn)的錯誤是誤碼,則鏈路重新跳轉(zhuǎn)到同步狀態(tài)Syn_state,否則當累計收到3次的無效數(shù)據(jù),則認為是鏈路發(fā)生嚴重的鏈接錯誤,鏈路會重新進入復位狀態(tài)以便重新建立鏈接。
對于協(xié)議的上層應用來說,數(shù)據(jù)幀的發(fā)送是有間隙的,為了保持鏈路的激活狀態(tài),發(fā)送端在沒有數(shù)據(jù)幀發(fā)送請求時,會不斷向鏈路發(fā)送空閑字符(IDLE),接收方識別IDEL字符后,作拋棄處理。
本次雙工協(xié)議的測試硬件互聯(lián)如圖5所示,采用4根2米長的同軸電纜互聯(lián)。為了簡單明了,鏈路雙方發(fā)送漸變數(shù),圖6是使用ChipScope抓取的數(shù)據(jù)傳輸圖。圖中(a)是鏈路初始化過程接收端的時序圖,鏈路在Spa_OK高有效之前,鏈路接收到的碼字是不穩(wěn)定的,當收到32個同步字符后(即十六進制C5BC),Spa_OK會置高,之后收到16個同步應答字符(即十六進制2CBC),Lane_OK置為高有效,高有效之后還會收到一段同步應答碼字,然后轉(zhuǎn)入正常數(shù)據(jù)收發(fā)。圖(b)是圖(a)放大后的時序圖,十六進制5CFB為幀頭,后面為漸變數(shù)。
圖5 協(xié)議測試互聯(lián)系統(tǒng)Fig.5 Protocol testing interconnected system
圖6 鏈路建立過程中數(shù)據(jù)的收發(fā)圖Fig.6 Link establishment process of sending and receiving data
在對TLK2711做誤碼率測試時,當鏈路雙發(fā)建立后,鏈路雙方發(fā)送偽隨機數(shù)。通過接收端進行監(jiān)控收到的數(shù)據(jù)是否為所發(fā)送的數(shù)據(jù)。我們在控制器FPGA中作誤碼計數(shù)器,對誤碼標志位進行計數(shù),來統(tǒng)計傳輸數(shù)據(jù)的誤碼率。
測試時,發(fā)送時鐘為125 MHz,串行數(shù)據(jù)率為2.5 Gbps,用時 2 小時,發(fā)送數(shù)據(jù)總量 2.5×2×3 600×109=1.8×1 013 bit。接收端誤碼標志位一直為高,表明發(fā)送的偽隨機數(shù)均被正確接收,沒有出現(xiàn)無碼。所以誤碼率BER=出錯位數(shù)/總傳輸位數(shù)<1/1.8×1013=5.56×10-14。
針對并行總線在數(shù)據(jù)吞吐量與總線寬度提高出現(xiàn)的問題,實時型成像電路系統(tǒng)對數(shù)據(jù)誤碼率小,系統(tǒng)小型化與通用化的需求,文章采用SerDes器件TLK2711可以有效解決空間相機數(shù)據(jù)傳輸容量的與誤碼率的問題。
同時,針對相機成像系統(tǒng)對數(shù)據(jù)傳輸?shù)母呖煽啃砸?,文章制定的全雙工通信協(xié)議盡量做到最簡化,實測無碼率低于10-12,可靠性高。同時,簡單可靠的協(xié)議有效的減少了研發(fā)所占用的時間,減少維護工作量,提高了設備的利用率。
[1]張達,徐抒巖.高速CCD圖像數(shù)據(jù)光纖傳輸系統(tǒng)[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圖像數(shù)據(jù)處理與傳輸系統(tǒng)設計[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的通用高速串行互連協(xié)議設計[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].單片機與嵌入式系統(tǒng)應用,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的高速串行傳輸接口的設計與實現(xiàn)[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.