劉華鋒
【摘 要】常規高速LVDS接口協議中,預置的同步序列會占用報文容量,且需在收端手工調整時鐘數據對齊關系,降低了開發效率及平臺間的兼容性。本文給出了一種基于8B/10B編碼的,具有自動對齊功能的高速LVDS接口,并在Xilinx Virtex-7 FPGA平臺上進行了接口測試,結果表明該接口可在600Mbps下穩定、可靠地傳輸數據。
【關鍵詞】高速LVDS接口;8B/10B;FPGA
中圖分類號: TP274.1 文獻標識碼: A 文章編號: 2095-2457(2018)09-0099-002
DOI:10.19694/j.cnki.issn2095-2457.2018.09.046
Design and Implementation of High Speed LVDS Interface Based on FPGA
LIU Hua-feng
(The 20th Research Institute,CETC, Xian, Shaanxi, China)
【Abstract】In the conventional high speed LVDS interface protocol, the preset synchronization sequence will occupy the message capacity, and it is necessary to align the clock and the data manually at the receiving end, which will reduce the development efficiency and the compatibility between the platforms. In this paper, a high speed LVDS interface based on 8B/10B coding is presented, with which alignment can be accomplished automatically. The interface test on the Xilinx Virtex-7 FPGA platform shows that the interface can transmit data steadily and reliably under 600Mbps.
【Key words】High speed LVDS interface;8B/10B;FPGA
0 引言
隨著信息技術的進步,各行各業所產生的數據量越來越大,對數據傳輸速率的要求也越來越高。為了保證信號的傳輸質量及抗干擾特性,數字電路往往采用高速串行總線來傳輸高速信號。其中,現場可編程門陣列(FPGA)內部所集成的高速收發器,速率最高可達到十幾個Gbps。然而,大部分數字系統中串行總線速率達到幾百Mbps即可滿足需求,且低端系列的FPGA芯片內部并未集成高速收發器;相比而言,低電壓差分信號傳輸(LVDS)[1]技術具有高速率、低噪聲、低功耗、低電流驅動等特點,且容易在FPGA中實現,性價比高,因此在常規高速數字傳輸系統中得到了廣泛的應用。
LVDS是一種總線標準,在FPGA中實現LVDS總線時,一般需要自定義傳輸協議。對于低速業務來說(小于200Mbps),對數據進行過采并約定自定義同步序列即可完成收端數據同步及數據解析。當數據速率較高時,需要采用FPGA內部集成SelectIO資源來手工調整數據與時鐘的對齊關系,以確保數據的正確傳輸;該方法的不足之處在于手工調整對齊關系時會導致程序可移植性差,在不同的硬件電路間無法完全通用;此外,采用自定義同步序列進行數據同步時,會占用報文信息容量,報文內部再無法傳送與同步序列相同的信息。為了解決上述的問題,本文在傳統LVDS實現方法的基礎上,引入了8B/10B編碼,設計了基于8B/10B編碼的自動對齊狀態機,并在Xilinx Virtex-7平臺上設計實現了600Mbps的高速LVDS接口。
1 8B/10B編碼及總線互聯平臺
1.1 8B/10B編碼
8B/10B編碼由IBM公司于1983年發明并應用于其200M互連系統中,該編碼中的“0”、“1”數量基本一致,且連續的“0”或“1”不超過5位,因此該編碼具備保持DC平衡的特性,可避免鏈路產生DC失調[1]。數據經過8B/10B編碼后,在接收端能夠被正確復原;此外,10位傳送代碼可以支持所有的256種8位組合,且剩余組合中的一些編碼可以構成K碼等特殊控制碼字,用于輔助接收端進行還原,及早發現傳輸錯誤,并抑制錯誤繼續發生。
1.2 總線互聯平臺
在信號處理領域,為了同時兼顧處理速度與控制便捷性,硬件平臺往往采用CPU結合高性能FPGA的架構[2],本文的LVDS接口設計所基于的硬件平臺架構如圖1所示,該平臺由一片DSP及一片Xilinx Virtex-7 FPGA組成,DSP及FPGA之間采用32位EMIF總線通信,FPGA端雙口RAM對數據位寬進行轉換,并通過600M LVDS高速總線通信。該平臺所設計的LVDS接口是2入2出,其中一對用于傳輸同步時鐘,另外一對用于傳輸高速串行數據。
該LVDS總線上運行的是自定義串行協議,8bit并行數據經過8B/10B編碼、串并轉換后,以DDR方式輸出;對于收到的串行數據,要經過串并轉換、自動對齊、8B/10B解碼后方可轉換為用戶數據。下面對該協議的組成架構進行詳細介紹,包含發送單元及接收單元。
2 發送單元
發送單元的目標是將用戶數據轉換成串行數據并輸出,傳統LVDS自定義協議中,需要占用用戶數據中的特定碼字以完成收端同步,這種機制會損耗用戶報文容量,且鏈路中未含有任何編碼,無法應對總線上產生的誤碼。為解決這一問題,本文在傳輸協議中引入了8B/10B編碼,8B/10B編碼可增加鏈路的抗干擾特性[3],且編碼中空余的控制碼字可用于收端同步,發送單元的具體實現流程如圖2所示。
發送單元中,用戶數據輸入時,要先根據數據及使能生成K碼脈沖,即在一幀數據的頭部及尾部添加K碼,并在添加K碼的地方生成K脈沖(本文中,頭部的K碼為K28.5,尾部的K碼為K29.7);隨后,將K脈沖及數據進行8B/10B編碼,編碼后的數據需經過串并轉換后方可輸出。
FPGA內部的SelectIO資源具有強大的功能,因此,串并轉換可通過FPGA內部的OSERDES資源來實現,OSERDES可配置為SDR或DDR模式,由于協議中采用的高速時鐘為300M,而編碼后的并行數據達到了600Mbps,故將OSERDES配置為DDR模式輸出。對于Virtex- 7 系列FPGA來說,單個OSERDES僅支持8:1的數據串并轉換,為了轉換10bit的編碼后數據,需將兩個OSERDES進行級聯,級聯關系通過SHIFTIN及SHIFTOUT管腳控制。經過級聯后,可完成對編碼后數據的串并轉換,串行數據及隨路時鐘經過單端轉差分后輸出至FPGA外部端口上。
3 接收單元
接收單元的目標是將線上的串行數據轉換為并行用戶數據并輸出,其主要由時鐘分頻、時鐘數據對齊、串并轉換及8B/10B解碼等模塊組成,具體實現流程如圖3所示。
收端收到隨路時鐘后,首先通過FPGA內部時鐘資源BUFR將其分頻為60M時鐘,并應用該時鐘來解析數據;但由于電路布線等外界因素的影響,收端的時鐘與數據往往無法對齊[4],因此,收端的串行數據需與時鐘對齊后方可解析出正確的并行數據。對于FPGA來說,應用SelectIO中的IDELAY即可調整時鐘數據的對齊關系,IDELAY具備64 tap的延時單元,其延遲分辨率為參考時鐘周期(5ns)的1/64,可滿足本設計的延時需求。
從圖3中可知,收端串行數據直接輸入IDELAY,IDELAY的輸出經過兩級ISERDES后轉換成了10bit并行數據,并行數據不僅輸入了8B/10B解碼模塊,還輸入了Bit_align_Machine模塊。Bit_align_Machine模塊是動態對齊的核心模塊,其輸出的bitslip信號可用于調整ISERDES輸出的并行數據順序,ice_delay和inc_delay信號可用于控制IDELAY的延時量。該模塊首先通過動態掃眼的方式將整個通道的眼圖進行覆蓋測試,并恢復到眼圖的中心,保證通道的傳輸質量;隨后,檢測特定訓練序列的同步特性,輸出bitslip信號來調整并行數據的順序,保證并行數據的正確性[5]。本設計中采用0x346作為同步序列,該碼字為8B/10B編碼表中空余部分的碼字,并未占用報文容量。
對齊完成后,Bit_align_Machine會將data_aligned信號拉高,此時,將并行數據進行8B/10B解碼、剪除K碼后即可得到正確的用戶數據。
接收單元的設計避免了因手工調整延時而導致的開發效率低,在不同硬件平臺間兼容性差等問題,動態調整了時鐘數據的延時關系,提升了通用性。
4 平臺驗證
為對自定義LVDS高速接口協議進行驗證,將該協議在Vivado2015.3上進行綜合、布局布線并生成bit文件,將bit文件在本文1.2節所述平臺上運行,通過chipscope抓取發射接收時序,結果如圖4所示。
從圖4中可以看出,發端用戶數據添加K碼后生成了K脈沖及K碼數據,經過8B/10B編碼后形成10bit編碼數據;收端data_align信號拉高,且(下轉第115頁)(上接第100頁)正確的進行了解碼、恢復了用戶數據。此外,在DSP端加載測試程序,通過大量隨機數對該接口協議進行了測試,結果如圖5所示。從圖5中可以看出,經過2000多萬包的隨機數測試后,未出現丟包、錯包的情況;
FPGA抓包及DSP測試結果表明:本文所設計的高速LVDS接口傳輸速率可達到600Mbps且功能穩定、正常。
5 結論
本文在FPGA平臺上設計實現了一種基于8B/10B編碼的可自動對齊LVDS高速接口協議。該協議應用編碼表中剩余控制碼字進行收端同步,避免了同步序列占用報文容量;且自動對齊功能能夠提升開發效率及接口協議在各平臺間的兼容性。測試結果表明:本文所設計的高速LVDS接口協議能夠穩定、可靠的傳輸數據,速率可達到600Mbps。
【參考文獻】
[1]Widmer A X, Franaszek P A. A DC-balanced, partitioned-block, 8B/10B transmission code[J]. Ibm J.res.develop, 1983, 27(5):440-451.
[2]王戰江. 基于DSP和FPGA為核心的通信信號處理硬件平臺設計[D]. 電子科技大學, 2011.
WANG Zhan-jiang. Design of communication signal processing hardware platform based on DSP and FPGA[D].University of Electronic Science and Technology of China,2011.
[3]馬建國, 張禹, 劉紀洲. 圖像采集系統中LVDS信號交流耦合傳輸設計[J]. 激光與紅外, 2016, 46(11):1404-1407.
MA Jian-guo, ZHANG Yu, LIU Ji-zhou. Design of LVDS AC coupling data transmission in image collection system[J].LASER & INFRARED, 2016, 46(11):1404-1407.
[4]李向陽. 多通道LVDS的實現及傳輸錯誤處理[J]. 小型微型計算機系統, 2005, 26(8):1436-1440.
LI Xiang-yang. Multi-Channel LVDS and Transmission Error Handling[J].MINI-MICRO SYSTEMS, 2005, 26(8):1436-1440.
[5]李大鵬, 李雯, 王曉華. 基于FPGA的高速LVDS接口的實現[J]. 航空計算技術, 2012, 42(5):115-118.
LI Da-peng, LI Wen, WANG Xiao-hua. Implementation of High Speed LVDS Interface Based on FPGA[J].Aeronautical Computing Technique, 2012, 42(5):115-118.