我用 cyclone10GX 和 phy marvell 88E1518 在 RGMII 模式下构建了一个定制板。我也有类似的硬件在 RGMII 模式下使用 cycloneIII 和 marvell 88E1111 工作正常。
它未能运行由 1Gb 的完整硬件 UDP/IP 堆栈组成的相同设计。
我在接收路径上的 DDIO 和 phy 的 RX_CLK 之后启用了一个 signaltap 探针。该时钟为 IOPLL 供电,驱动 FPGA 内的所有内容。
令人惊讶的是,输入时钟 RX_CLK 下降了一些周期并使 PLL 解锁。
我不断检查一些 MDIO 寄存器以了解发生了什么。寄存器 10 第 0 页告诉它出现了 IDLE 错误,尽管我没有特别做任何事情。根据我对 802.3 的了解,IDLE 是 2 个数据包之间所需的数据包间间隙。在数据表的第 41 页中,它说:
在 1000BASE-T 模式下,对接收空闲流进行分析,以便考虑扰码器种子、4 对之间的偏移、对交换顺序以及对的极性。校准后,4D PAM 5 符号将转换为 9 位符号,然后将其解扰为 8 位数据值。如果解扰器由于任何原因失去锁定,则链路被关闭并在自动协商完成后重新开始校准
我不知道在哪里检查错误。如果有人对可能发生的事情有所了解,我将非常感谢您的帮助。
约翰