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

10G光模塊知識(shí):全面介紹10G光模塊類型、參數(shù)
10G光模塊百科:詳解10G光模塊分類和應(yīng)用
ISE 14.7中的IP核許可證警告
ten_gig_eth_pcs_pma沒有許可證,IP合成失敗
為什么連接到PCS PMA核心的10-GMAC核心不起作用?
以太網(wǎng)100Base-X PCS/PMA如何實(shí)現(xiàn)
如何在主板上使用EMAC + PCS / PMA的設(shè)計(jì)?
使用VC 707開發(fā)板創(chuàng)建了一個(gè)10G基礎(chǔ)PCS PMA內(nèi)核如何檢查回路?
基于FPGA的光口通信開發(fā)案例|基于FPGA Kintex-7 SFP+光口的10G UDP網(wǎng)絡(luò)通信開發(fā)案例
如何調(diào)試10G/25G以太網(wǎng)IP自協(xié)商/Link Training

處理以太網(wǎng)幀以及IP,UDP和ARP的模塊
如何使用1G/10G/25GSwitching以太網(wǎng)IP切換速率

評論