誤以為我的設備與XX設備的正負定義是反的,即RX-與RX+;TX-與TX+反轉。所以找到了一些辦法進行反轉極性。后來發現用不到,就先存個檔。
后來發現只反了RX路,還是用到了
1G/2.5G Ethernet PCS/PMA or SGMII ip 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_rxpolarity
和gt_txpolarity
中你希望交換極性的端口置1即可反轉信號線極性了!