?

基于FPGA 的高速串行收發器TLK2711全雙工通信協議設計

2023-10-17 08:32杜建鵬
電氣傳動自動化 2023年5期
關鍵詞:發送數據通信協議接收端

杜建鵬

(甘肅電器科學研究院,甘肅蘭州 730900)

隨著計算機技術和通信技術的發展,系統級的互聯已達到Gbps 的傳輸速率。并行傳輸技術可以提高芯片與芯片之間、背板與背板之間的數據吞吐量,但總線數呈的增多及傳輸速率的加快會使PCB 布線的難度提高,并且增加了信號的延時和偏移[1-2]。而串行傳輸技術充分利用傳輸媒體的信道容量,可減少所需的連接器引腳數目、降低芯片外圍引腳數、設備及電纜布線更為簡單、系統抗干擾能力更強[3],因此串行傳輸技術重新返回到高速傳輸領域并迅速取代了傳統的并行傳輸技術[4]。8b/10b編碼SerDes 是目前許多高速串行總線采用的編碼機制和結構,如PCI Express、光纖通道、TLK2711等。其中TLK2711 作為高速串行總線的物理層,被廣泛用于空間遙感以及衛星圖像的數據傳輸系統中[5-7]。系統之間的數據傳輸必須制定相應的協議。雖然符合規范的標準協議(如XILINX 公司為自己FPGA 內嵌的Rocket IO 制定的AURORA 協議)傳輸速度和精度非常高,但是這些標準協議具有大量通信冗余數據和格式定義弊端,會導致通信延時和系統資源浪費。因此,為了提高系統的可靠性和節約系統資源,本文基于FPGA+TLK2711 平臺設計了一種輕量級的高速串行全雙工通信協議,該協議為點對點鏈路層串行協議,經測試可實現1.6Gbps~2.7Gbps 的可靠串行數據傳輸。

1 TLK2711 芯片簡介

TLK2711 是千兆高速收發器,可用于高速點對點的雙向數據傳輸系統。TLK2711 在發送端將并行信號轉換為高速串行信號,在接收端高速串行信號被轉換為并行信號,也被稱為SerDes(SERializer/DESerializer)收發器,其工作原理如圖1 所示。在發送端,TLK2711 將輸入的16 位數據(TXD0~TXD15)分為兩個字節,在TKLSB 和TKMSB 信號的配合下送入兩個8b/10b 編碼器進行編碼,產生的10 位數據經多路復用器進入串行器,最后通過具有預加重功能的發送器以差分信號的方式輸出。在接收端,TLK2711 接收到串行差分信號,首先通過恢復時鐘對數據進行同步,其次通過解串器進行串并轉換,利用兩個獨立的逗點檢測(Comma Detect)和8b/10b 解碼器完成數據解碼和字對齊,最后輸出16 位并行數據(RXD0~RXD15)以及RKLSB 和RKMSB 信號。圖中LOOPEN為環回使能信號,使能后可以進行環回測試;PRBSEN 為偽隨機測試使能信號,可利用芯片中的偽隨機數發生器產生偽隨機信號,進行測試;PRE 為預加重使能信號。

圖1 TLK2711 原理框圖

2 高速串行數據傳輸接口設計

高速串行數據傳輸接口如圖2 所示,TLK2711與高速連接器構成通信協議的物理層,實現收發數據的編解碼與串并轉換。FPGA 則實現數據鏈路層功能,完成通道的初始化、發送數據的幀封裝、接收數據的解封裝,同時為上層用戶提供簡單的通信接口。

圖2 高速串行數據傳輸接口

3 全雙工通信協議設計

3.1 高速串行通信協議模型

本文設計的是在FPGA 中實現的全雙工點對點鏈路層串行通信協議,不存在尋址交換和復雜的上層應用,主要功能為鏈路初始化和同步、數據幀傳輸和鏈路管理。圖3 為高速串行通信協議的模型。模型包括TLK2711_logic_ctrl 模塊、TLK2711_tx_ctrl模塊、TLK2711_rx_ctrl 模塊和FIFO 數據緩存模塊。TLK2711_logic_ctrl 模塊主要為上層用戶提供環回測試、偽隨機測試及預加重功能接口,為了簡化應用,可將這些信號設置為芯片正常工作時的狀態。數據發送功能主要由TLK2711_tx_ctrl 模塊和發送端FIFO 實現,上層應用將發送數據寫入FIFO,當寫完一幀數據后,使能tx_start_en 信號,TLK2711_tx_ctrl模塊將FIFO 中的數據讀出組幀后發送出去,數據幀長由wrcnt[10:0]信號給定。數據接收功能主要由TLK2711_rx_ctrl 模塊實現,當接收到有效數據,TLK2711_rx_ctrl 模塊對數據進行解幀,將解幀后的數據寫入接收端FIFO,供上層應用讀取,每當接收完一個完整的數據幀,TLK2711_rx_ctrl 模塊給出數據幀接收完畢信號(received_end 信號)通知上層應用,并給出接收數據幀長。

圖3 高速串行通信協議模型

3.2 協議原語及狀態切換

3.2.1 協議原語

為了保證數據的正確傳輸,需要傳輸一些控制信息,這些定義的控制信息稱為協議原語。本協議采用8b/10b 中的K 字符和D 字符組合實現數據發送與接收的控制功能。SerDes 通過掃描搜尋cmoma 字符序列實現數據對齊功能。根據技術手冊,TLK2711僅識別包含字符特征序列b0011111 或b1100000的控制字符作為識別數據邊界的comma 碼。在8b/10b中僅有K28.1、K28.5 和K28.7 包含這些字符特征序列,因此定義D5.6/K28.5 為同步字符,D12.1/K28.5 為同 步應 答 字 符,D10.2/K28.5 為 空 閑 字 符,K28.2/K27.7 為幀頭標識,K29.7/K30.7 為幀尾標識。

3.2.2 狀態切換

系統上電后需要對SerDes 進行初始化和同步來建立一個有效鏈路,這樣SerDes 才能進行正確的數據收發。鏈路同步由TLK2711_tx_ctrl 模塊和TLK2711_rx_ctrl 模塊共同完成,最終鏈路應答標志Spa_ok 和鏈路同步標志Lane_ok 均為高電平,表示鏈路同步, 可以進行數據的收發。TLK2711_tx_ctrl 模塊和TLK2711_rx_ctrl 模塊功能均由狀態機實現,具體的狀態切換如下:

(1)鏈路初始化狀態

系統上電、復位或數據在傳輸過程中發生鏈路中斷都會使鏈路重新初始化。首先發送端會不斷發送同步字符D5.6/K28.5,當接收端連續收到32 個同步字符時,會置鏈路應答標志位Spa_OK為高。

(2)鏈路同步狀態

發送端再次發送80 個連續的同步應答字符D12.1/K28.5 與176 個 連 續 的 同 步 字 符D5.6/K28.5,以保證接收端能夠有效的收到32 個同步字符D5.6/K28.5 或16 個同步應答字符D12.1/K28.5。當 接收端在應答狀態下收到了連續的16個同步應答字符D12.1/K28.5,則鏈路同步標志Lane_OK 置高,鏈路進入同步狀態。

(3)收發數據狀態

在同步狀態下,發送數據首先發送幀頭K28.2/K27.7,接下來發送數據,發送數據結束后發送幀尾K29.7/K30.7,之后進入空閑(IDEL)狀態。

(4)空閑狀態

在空閑狀態下,發送端不斷發送空閑字符D10.2/K28.5,以保持鏈路的建立。 當需要發送數據時,轉入收發數據狀態。

(5)鏈路檢測狀態

如果鏈路在一定時間內沒有收到幀頭、幀尾、空閑字符、同步字符和同步應答字符,說明收發鏈路必有一條沒有建立,重新進入鏈路初始化狀態。如果鏈路收到無效字符k0.0 和K31.7(即0x0000或0xFFFF),且RKLSB 與RKMSB 均為高,連續三次,鏈路即重新進入初始化狀態。

3.3 全雙工串行通信協議實現

協議的FPGA 邏輯實現采用VHDL 硬件描述語言,由tlk2711_logic_ctrl_ENT 模塊、tlk2711_tx_ctrl模塊、tlk2711_rx_ctrl 模塊和內置發送端TLK2711_FIFO組成,如圖4 所示。

圖4 全雙工串行通信協議

tlk2711_logic_ctrl_ENT 模塊主要對TLK2711的控制信號進行了統一管理,包括LCKREFN 信號、TESTEN 信號、LOOPEN 信號、PRBSEN 信號和PRE 信號。該模塊接收系統復位信號(rst_n),并產生整個邏輯的復位信號(rst_n),同時將ENABLE置為低電平,延時100ms,使TLK2711 芯片復位。

tlk2711_tx_ctrl 模塊主要實現數據的發送和對TLK2711 芯片發送端口的控制。當接收到tx_start_en信號的上升沿,只要發送FIFO 不為空,就讀取FIFO 中的數據組幀后進行發送,發送數據長度由tx_start_en 信號的上升沿時,wrcnt[10:0]的值決定。發送數據必須保證鏈路在初始化后同步的狀態下進行,數據幀格式如表1 所示??梢钥吹綆^和幀尾只占用整個數據幀中的4 個字節,因此該協議屬于輕量級的串行數據傳輸協議。

表1 數據幀格式

tlk2711_rx_ctrl 模塊主要實現數據的接收和解幀,將解幀后的數據寫入外置接收FIFO。接收數據前需進行鏈路的初始化和同步。同時,接收端實現鏈路的檢測功能,當判斷鏈路失效后,重新進入復位模式,進行鏈路的初始化和同步。Spa_ok和Lane_ok 為鏈路應答標志和鏈路同步標志,傳輸至tlk2711_tx_ctrl 模塊,作為鏈路初始化和同步的標志信號。

4 測試與驗證

4.1 仿真測試

利用ModelSim 工具對高速串行通信協議進行仿真測試,上電后發送端通過先后發送同步字符和同步應答字符,接收端連續收到相應字符后,最終置鏈路應答標志位Spa_OK 和鏈路同步標志Lane_OK 為高電平,鏈路進入同步狀態。

在鏈路同步狀態下,當接收到tx_start_en 信號,發送模塊將FIFO 中的數據讀出,并增加幀頭0x5CFB 和幀尾0xFCFE 后進行發送。

當接收到幀頭0x5CFB,將后續接收數據寫入FIFO,直到接收到幀尾0xFCFE,發出接收完畢信號received_end 信號。接收數據期間計數接收到的數據個數,接收數據完畢將數據長度通過data_length輸出。

4.2 實物測試

利用Microsemi 公司的SmartFusion2 SOC 平臺構建多通道數據獲取系統,采集到的數據通過由TLK2711 構建的串行數據通道輸出。系統有兩路TLK2711 構建的串行數據通道和一路千兆以太網接口,測試時將兩路串行數據通道的收發接口通過同軸線纜互聯,即采集數據由一路串行數據通道發送,再由另一路串行數據通道接收,最后數據通過千兆以太網上傳至上位機。通過測試系統能夠實現高速可靠數據全雙工傳輸,設置系統時鐘為80MHz~135MHz 的范圍,系統數據傳輸速率能夠達到1.6Gbps~2.7Gbps。在FPGA 中進行了誤碼計數設計,通過接收端進行監控收到的數據是否為所發送的數據。測試時發送時鐘為135MHz,串行數據率為2.7Gbps,發送數據量為1000Gb,將數據分為10000 個數據幀,發送完畢沒有出現誤碼。所以誤碼率BER=出錯位數/總傳輸位數<1/1012=10-12。

5 結論

本文以SerDes 器件TLK2711 作為串行數據傳輸的物理層,在FPGA 中設計串行數據通信協議的鏈路層,實現了一種輕量級的高速高可靠串行數據通信協議。進行了功能仿真和實物測試,經測試該通信協議在TLK2711 硬件的基礎上能夠實現最高2.7Gbps 的數據傳輸速率,誤碼率小于10-12。本設計將為高速數據系統的設計和驗證提供重要參考。

猜你喜歡
發送數據通信協議接收端
移動自組網中MAC層協議研究
基于擾動觀察法的光通信接收端優化策略
頂管接收端脫殼及混凝土澆筑關鍵技術
一種設置在密閉結構中的無線電能傳輸系統
基于多接收線圈的無線電能傳輸系統優化研究
基于馬爾科夫鏈的LoRaWAN網絡節點性能分析
帶標記方式的CRDSA++協議性能分析*
基于Z-Stack通信協議棧的紅外地溫采集電路設計
使用IPSec安全傳輸數據
基于DMX512通信協議的多路轉發器設計與研究
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合