误以为我的设备与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即可反转信号线极性了!