來源:數(shù)字站
設計的靈魂是算法,而FPGA的終點是時序,首先還是幫韓老師推薦一下他將要發(fā)布關于FPGA時序約束的書籍。易靈思FPGA在資源利用達到百分之八十左右能跑到500MHz,實力怎么就不需要過多贅述了。
如果要在Xilinx的FPGA上使用萬兆以太網(wǎng)通信,大致有三種方法構建協(xié)議棧。第一種使用GTX等Serdes作為底層的PHY,上層通過HDL實現(xiàn)構建MAC和IP層,這種方式難度會比較大,底層需要完成PHY層的設計,最終我想通過這種方式實現(xiàn)萬兆以太網(wǎng)的搭建。
第二種是通過Xilinx提供的10G PCS PMA作為底層的PHY,用戶通過HDL實現(xiàn)MAC層和IP層的設計。難度相比第一種會低一點,能夠清晰的學習到MAC層、IP層、ARP協(xié)議、ICMP協(xié)議、UDP協(xié)議內容。
第三種是使用Xilinx提供帶有MAC層的IP,這種方式用戶只需要閱讀手冊,給IP提供收發(fā)的數(shù)據(jù)即可,沒有什么難度,對于學習沒啥作用。
目前先通過10G PCS PMA作為PHY層,熟悉MAC層以及之上的設計,整個協(xié)議跑通之后,在把底層的PHY用GTX取代,從而實現(xiàn)第一種設計。
01概括10GBASE-R/KR
下圖是10G PCS PMA的使用原理,上層通過XGMII接口與用戶邏輯的MAC層交互數(shù)據(jù)(MAC層可以用戶自己設計,也可以使用官方的MAC層IP),接收的用戶數(shù)據(jù)經(jīng)過內部PCS PMA處理后,通過Serdes接口輸出到光纖,與接收端的設備進行通信。
圖1 使用XGMII接口連接到MAC內核的內核
10G PCS PMA可以通過參數(shù)設置該PHY層工作在10GBASE-R還是10GBASE-KR的模式下。
下圖是10GBASE-R的內部框圖,10G以太網(wǎng)使用64B66B進行編碼,10GBASE-R內核其實就是在Serdes的基礎上封裝得到的。如果看過前文GTX自定義64B66B的PHY層協(xié)議設計的同學,關于下面的設計應該會比較熟悉。
同樣都包含加擾、解擾、接收端字對齊、變速器等等,這里的64B66B編碼和解碼模塊應該是將XGMII接口協(xié)議轉換為Serdes 64B66B的接口協(xié)議。
圖2 10GBASE-R內核框圖
在接收端有一個彈性緩沖器(Elastic Buffer),深度為32個字(1個字包含64位數(shù)據(jù)和8位控制字符),起到時鐘糾正的作用。
允許在緩沖區(qū)溢出(和字被丟棄)之前最多存儲64個時鐘校正(CC)序列,緩沖器通常填充到一半,然后當超過一半時刪除CC序列,當?shù)陀谝话霑r插入CC序列。
因此,在半滿狀態(tài)下,可以(保守地)接受額外的360 KB數(shù)據(jù)(以+200 ppm的速率接收),而不會丟失任何數(shù)據(jù)。
10GBASE-KR內核框圖如下所示,相比10GBASE-R內核增加了鏈路訓練模塊以及可選的自動協(xié)商(AN)和前向糾錯(FEC)功能,以支持背板上的10 Gb/s數(shù)據(jù)流。
圖3 10GBASE-KR內核框圖
02XGMII接口時序
在前文講解過XGMII接口并不適用于芯片之間的高速通信,但是在FPGA內部是一個比較好用的接口,因為FPGA內部數(shù)據(jù)位寬大一點是沒有太大關系的。
前文講解的芯片間的XGMII接口如下所示,接收端和發(fā)送端采用32位雙沿傳輸?shù)臄?shù)據(jù)線通信。
圖4 芯片間的XGMII接口
但是FPGA內部邏輯只支持單沿傳輸,因此10G PCS PMA給用戶提供的XGMII接口是單沿傳輸數(shù)據(jù)的。為了保證帶寬不變,收發(fā)數(shù)據(jù)位寬有64位和32位兩種可選,其中10GBASE-KR只支持64位數(shù)據(jù)位寬。
2.164位數(shù)據(jù)位寬
下表是64位數(shù)據(jù)位寬的XGMII端口信號,8位控制位??刂莆坏母唠娖奖硎緮?shù)據(jù)信號對應字節(jié)為控制位,低電平表示數(shù)據(jù)信號對應字節(jié)為數(shù)據(jù)位。
表1 64位的MAC端接口端口
信號名 | I/O | 含義 |
xgmii_txd[63:0] | I | 發(fā)送端接口數(shù)據(jù)信號。 |
xgmii_txc[7:0] | I | 發(fā)送端的控制信號,高電平指示控制位,低電平指示數(shù)據(jù)位。 |
xgmii_rxd[63:0] | O | 接收端接口數(shù)據(jù)信號。 |
xgmii_rxc[7:0] | O | 接收端的控制信號,高電平指示控制位,低電平指示數(shù)據(jù)位。 |
下圖是通過64位接口發(fā)送數(shù)據(jù)幀的時序,數(shù)據(jù)幀的開始由起始字符(下圖中通道4的/S/)表示,后面5、6和7字節(jié)發(fā)送數(shù)據(jù)字符。
萬兆以太網(wǎng)規(guī)定起始位/S/可以位于第一字節(jié),也可以位于第四字節(jié)。
圖中的I是空閑字符,注意在xgmii_txd對應字節(jié)為控制字符時,xgmii_txc對應的控制位為高電平。在xgmii_txd對應字節(jié)為數(shù)據(jù)字符時,xgmii_txc對應的控制位為低電平。
由下圖可知,XGMII接口先傳輸?shù)妥止?jié)數(shù)據(jù),后傳輸高字節(jié)數(shù)據(jù)。因此起始字符所在數(shù)據(jù)的低5字節(jié)為控制字符,發(fā)送起始字節(jié)/S/后,開始傳輸數(shù)據(jù),高三字節(jié)為數(shù)據(jù),對應的xgmii_txc的值為8’h1f。
圖5 64位xgmii發(fā)送數(shù)據(jù)接口時序
因為以太網(wǎng)可以傳輸任意字節(jié)包長的數(shù)據(jù),停止位可以出現(xiàn)在任意字節(jié)的位置,上圖中的/T/字符表示停止位。
在數(shù)據(jù)傳輸過程中,還可以發(fā)送/E/表示該字段是錯誤數(shù)據(jù),如下圖所示,這種情況一般不會使用。
圖6 64位xgmii發(fā)送數(shù)據(jù)接口時序
接收數(shù)據(jù)端口時序如下圖所示,下圖中是起始位處于第0字節(jié)的情況。
圖7 64位xgmii接收數(shù)據(jù)接口時序
下表將上述字符對應的取值列出,其中起始位S的值為8’hfb,停止位T的值為8’hfd,空閑字符I的取值為8’h07,且都是控制字符。
表2 XGMII字符的部分列表
名稱(縮寫) | 取值(Hex) | 控制字符取值 |
數(shù)據(jù)位(D) | [8’h00,8’hff] | 0 |
空閑位(I) | 8’h07 | 1 |
起始位(S) | 8’hfb | 1 |
停止位(T) | 8’hfd | 1 |
錯誤位(E) | 8’hfe | 1 |
手冊中給出了發(fā)送通道的延時(數(shù)據(jù)從輸入xgmii_txd[63:0]傳輸?shù)絞t_txd[31:0]消耗的時間,不包括高速收發(fā)器內部的延時)。7系列FPGA的延遲為20個txoutclk周期,使能FEC功能后延時增加到26個txoutclk周期。
接收方向的延遲(數(shù)據(jù)從gt_rxd[31:0]傳輸?shù)絰gmii_rxd[63:0]上的時間)主要取決于彈性緩沖器的填充水平。延遲標稱值為27.75個coreclk周期,當彈性緩沖達到最大時,延時為41.26個coreclk周期,延時這部分了解即可。
2.232位數(shù)據(jù)位寬
下表是32位數(shù)據(jù)位寬的XGMII接口信號,4位控制位,高電平表示數(shù)據(jù)信號對應字節(jié)為控制位,低電平表示數(shù)據(jù)信號對應字節(jié)為數(shù)據(jù)位。
表2 32位的MAC端接口端口
信號名 | I/O | 含義 |
xgmii_txd[31:0] | I | 發(fā)送端接口數(shù)據(jù)信號。 |
xgmii_txc[3:0] | I | 發(fā)送端的控制信號,高電平指示控制位,低電平指示數(shù)據(jù)位。 |
xgmii_rxd[31:0] | O | 接收端接口數(shù)據(jù)信號。 |
xgmii_rxc[3:0] | O | 接收端的控制信號,高電平指示控制位,低電平指示數(shù)據(jù)位。 |
下圖是32位XGMII接口傳輸數(shù)據(jù)幀的時序,開始字符/S/只能出現(xiàn)在第1字節(jié),后面的3字節(jié)為傳輸數(shù)據(jù)。數(shù)據(jù)傳輸完成后,發(fā)送停止位/T/,其余時間使用空閑字符填充。
圖8 通過32位XGMII接口的正常幀傳輸
接收端口的時序如下所示,與發(fā)送端口的時序基本一致,不過多贅述。
圖9 通過32位XGMII接口接收幀
7系列器件發(fā)送通道上XGMII接口的延遲(數(shù)據(jù)從輸入xgmii_txd[31:0]傳輸?shù)絞t_txd[31:0]消耗的時間)為14個txoutclk周期。
而接收通道的延時范圍在44.6~72個coreclk周期,具體取值取決于接收端彈性緩沖器當前的填充數(shù)據(jù)個數(shù)。
64位的數(shù)據(jù)端口的時鐘頻率為156.25MHz,而32位數(shù)據(jù)位寬的時鐘頻率為312.5MHz。FPGA內部常用大位寬數(shù)據(jù)接口,降低時鐘頻率,獲得更好的時序,因此接口數(shù)據(jù)位寬選擇64位會比較好。
03內核時鐘分析
只要使用高速IP,就繞不開時鐘,并且繞不開GTX的時鐘,這也是前面在講解GTX的時候,深度分析其時鐘的原因。只要熟悉GTX內部各個時鐘的關系,其余上層IP的時鐘架構都很簡單。
如果XGMII的數(shù)據(jù)接口選擇64位,則7系列的FPGA必須給高速收發(fā)器提供156.25MHz的差分參考時鐘(refclk_p/refclk_n端口)。如果是32位數(shù)據(jù)接口,則必須提供312.5 MHz的差分參考時鐘。
下圖是該IP的內核時鐘結構,其中紅框部分可以放置在示例工程中。內核時鐘作為用戶接口的時鐘信號,就是輸入的差分參考時鐘信號。
圖10 內核時鐘架構
為什么上圖中TXOUTCLK為322.26MHz?通過這個時鐘生成uxrclk和usrclk2?
首先萬兆以太網(wǎng)的是指在進行64B66B編碼前的數(shù)據(jù)傳輸速率為10Gbps,經(jīng)過64B66B編碼之后,速率變?yōu)?0Gbps / (64 / 66) = 10.3125Gbps,即萬兆以太網(wǎng)的線速率為10.3125Gbps。
在前面講解GTX的64B66B編碼時,如下圖所示,高速收發(fā)器的PCS內部并行數(shù)據(jù)傳輸?shù)奈粚挒?2位,即可算出usrclk的頻率應該為10.3125Gbps / 32 = 322.265625 M Hz ≈ 322.26 MHz。
圖11 GTX內部傳輸數(shù)據(jù)位寬
此處的TXOUTCLK通過BUFG之后直接作為txusrclk和txusrclk2,沒有經(jīng)過MMCM分頻處理,還可以推測出高速收發(fā)器接收和發(fā)送的數(shù)據(jù)位寬同為32位。
為什么有上述推導,原因在講GTX的時候都詳解過,10G PCS PMA也不過是在GTX上封裝而來,底層的時鐘關系是不會變的,吃透GTX時鐘關系即可以吃透所有上層高速IP的時鐘關系。
現(xiàn)在已經(jīng)講解過Aurora、SRIO、10G PCS PMA的時鐘架構都遵循GTX的時鐘架構規(guī)則,后續(xù)的JESD204B依舊如此。
04其余接口
10G PCS PMA作為一個PHY層設計,內部也有很多的寄存器,用戶可以通過MDIO設置內部寄存器的數(shù)值。但是一般保持默認即可,因此該接口的時序不做講解,在講解千兆網(wǎng)接口時,詳解過MDIO接口時序,可以參考。
另外該IP可以通過DRP接口動態(tài)配置參數(shù),如果不需要使用DRP接口,則將drp接口的所有信號與core_to_gt_drp接口對應信號相連,并將drp_req連接到drp_gnt,允許內核在需要時訪問DRP,如下圖所示。
圖12 DRP接口連接(無需訪問)
05IP的功能信號與調試信號
下圖是一個光纖接口的原理圖,其中tx_fault、MODDEF0、LOS(信號丟失)都上拉到VCC,且沒有連接到FPGA的管腳。
而10G PCS PMA建議將signal_detect(MODDEF0或非LOS)信號連接到VCC,tx_fault信號連接到GND。因此在調用IP時,直接把signal_detect賦值為1,tx_fault賦值為0,不與引腳相連。
同時10G PCS PMA提供了一個tx_disable信號,可以直接連接到光口。
圖13 光口原理圖
該IP的發(fā)送端和接收端都有復位完成指示信號,reset_counter_done表示配置完成后已經(jīng)過了500 ns。
另外還有一些10GBASE-R的控制信號和狀態(tài)信號,如下表所示。特別注意仿真加速信號,在仿真開始時,必須給該信號提供一個上升沿(先拉低至少100ns后拉高),才能加速仿真,否則可能仿真半個小時也跑不出結果。
表3 控制端口信號
信號 | I/O | 含義 |
core_status[7:0] | O | [0]:PCS同步完成,[7:1]保留。 |
sim_speedup_control | I | 上升沿加速仿真。 |
pma_pmd_type[2:0] | I | 定義PMA/PMD類型,3’b111(10g base-SR),3’b110(10g base-LR),3’b101(10g base-ER)。 |
該IP還有一些控制信號configuration_vector[535:0]和狀態(tài)信號status_vector[447:0]。這兩個寄存器的每一位都有其特定含義,但用戶只需要關注一些常用的數(shù)據(jù)位即可,其余的寄存器在使用時可以通過手冊查看。
表4 部分狀態(tài)及控制信號
信號 | I/O | 含義 |
configuration_vector[0] | I | 使能PMA回環(huán)模式。 |
configuration_vector[512] | I | 設置PMA鏈接狀態(tài)。 |
configuration_vector[516] | I | 設置PCS鏈接狀態(tài)。 |
status_vector[18] | O | 接收端的PMA連接狀態(tài)。 |
status_vector[226] | O | 接收端的PCS連接狀態(tài)。 |
關于10G PCS PMA的講解到此結束了,通過以上介紹,足夠簡單使用該IP,后文將通過該IP構建萬兆以太網(wǎng)的PHY層。
-
FPGA
+關注
關注
1642文章
21918瀏覽量
611980 -
以太網(wǎng)
+關注
關注
40文章
5547瀏覽量
174193 -
接口
+關注
關注
33文章
8885瀏覽量
152972 -
光纖
+關注
關注
19文章
4050瀏覽量
74445 -
Xilinx
+關注
關注
73文章
2179瀏覽量
123909
原文標題:詳解Xilinx的10G PCS PMA IP
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
10G光模塊知識:全面介紹10G光模塊類型、參數(shù)
10G光模塊百科:詳解10G光模塊分類和應用
ISE 14.7中的IP核許可證警告
ten_gig_eth_pcs_pma沒有許可證,IP合成失敗
為什么連接到PCS PMA核心的10-GMAC核心不起作用?
以太網(wǎng)100Base-X PCS/PMA如何實現(xiàn)
如何在主板上使用EMAC + PCS / PMA的設計?
使用VC 707開發(fā)板創(chuàng)建了一個10G基礎PCS PMA內核如何檢查回路?
基于FPGA的光口通信開發(fā)案例|基于FPGA Kintex-7 SFP+光口的10G UDP網(wǎng)絡通信開發(fā)案例
如何調試10G/25G以太網(wǎng)IP自協(xié)商/Link Training

評論