1. 程式人生 > 其它 >ZCU111/ZynqMP/Zynq ultrascale+ RFSoC/MPSoC 1G/2.5G Ethernet PCS/PMA or SGMII IP核使用——反轉訊號線極性

ZCU111/ZynqMP/Zynq ultrascale+ RFSoC/MPSoC 1G/2.5G Ethernet PCS/PMA or SGMII IP核使用——反轉訊號線極性

誤以為我的裝置與XX裝置的正負定義是反的,即RX-與RX+;TX-與TX+反轉。所以找到了一些辦法進行反轉極性。後來發現用不到,就先存個檔。

後來發現只反了RX路,還是用到了

1G/2.5G Ethernet PCS/PMA or SGMIIip core 及相關

這個過程中,讀了很多的文件,大概理清楚這個ip core是個何方神聖。

Zynq PS GEM 連線關係

正常的網路的裝置是由MAC+PHY組成,而ZYNQ的PS的GEM就可以認為是MAC控制器,MAC控制器工作在資料鏈路層,用於產生MAC幀。之後MAC晶片可以通過多種介面[GMII RGMII SGMII]將資料傳送給PHY晶片,PHY晶片將資料調製到傳輸介質上。

ZynqMP的GEM (gigabit Ethernet controller)的框圖如下,可以通過PCS連線到PS-GTR,轉為SGMII;或者通過GMII to RGMII Adapter轉為RGMII 通過MIO接出;或者通過EMIO將GMII接入到FPGA當中。

XX裝置是通過第一種方式,用GTR實現了SGMII介面,然後將其直接連線到了聯結器上,這樣就需要我在PL實現SGMII介面與其直接對接。

IP核是個PHY

在MAC與PHY之間有一個叫做MDIO的介面,這個介面其實就是MAC與PHY交換控制和狀態訊號的介面,主要利用這個介面對PHY進行配置,PHY的MDIO的暫存器是在IEEE規範中進行定義的,這裡詳見

乙太網的phy暫存器分析

自動協商

自動協商要求聯結器件的雙方均具有自動協商的功能,自動協商工作在物理層,是PHY晶片提供的功能,但是XX裝置相當於MAC直連,所以並不具備自動協商的能力,所以需要1g/2.5g pcs/pma 來關閉自動協商功能。

那麼問題來了,如果關閉了自動協商,IP核怎麼知道自己工作在什麼頻率下呢?
這就要靠MDIO通道來傳遞控制資訊。
在petalinux下可以選擇編譯ethtool來控制乙太網的速率。需要在使用GE之前執行下面命令

ethtool -s eth0 speed 1000 duplex full autoneg off

GTR的功能 (PMA與PCS的概念)

除錯也需要知己知彼,我花了一晚上的時間瞭解GTR相關的東西。主要集中在

UG1085

physical medium attachment (PMA) 在主要負責檢測連線狀態
physical coding sublayer (PCS) 主要負責資料的互動


關於1g/2.5g ethernet pcs/pma or sgmii 與 GTY的關係

根據Vivado生成檔案可以看出,1g/2.5g ethernet pcs/pma or sgmii在其內部呼叫了PL的GTY,檢視GTY的手冊,GTY是可以通過配置引腳的高低電平來反轉收發的正負極性的。

再檢視1g/2.5g ethernet pcs/pma or sgmii的PG,找到了GTY配置引腳的在1g/2.5g ethernet pcs/pma or sgmii的對映。

這個兩個配置引腳被定義在Transceiver Control埠中。

使能Transceiver Control

1g/2.5g ethernet pcs/pma or sgmii的配置中,Standard選卡,勾選additional transceiver debug and status ports

然後會出現DRP介面和Transceiver Control埠,這時需要給DRP設定時鐘,與IP核相同,和DRP的資料全部置0

https://forums.xilinx.com/t5/Other-FPGA-Architecture/DRP-usage-in-GTX-Transceiver-Wizard/td-p/468478

最後將gt_rxpolaritygt_txpolarity中你希望交換極性的埠置1即可反轉訊號線極性了!