FPGA萌新上路
我习惯分成硬件、FPGA逻辑、软件驱动三层来筛。硬件上,先量电源和复位,尤其PHY芯片的供电和复位时序要满足手册要求。用示波器测一下FPGA给PHY的REFCLK,以及PHY返回给FPGA的RX_CLK,看看频率对不对,抖动大不大。SGMII或Serdes的线有没有等长,信号质量如何。
FPGA逻辑层,先用环回测试隔离问题。把MAC的TX直接连到RX,在FPGA内部自发自收,如果这样都丢包,那问题肯定在FPGA设计里,比如CRC错误或者时钟纠正没做好。如果内部环回OK,再对外和PHY对接。这时候ILA就派上大用场了,在AXI-Stream或自定义接口上插入探针,同时抓取发送和接收路径的数据。设置一个触发条件,比如连续几个时钟cycle的valid为高但ready为低,这可能就是背压导致的数据被丢弃。
软件和系统层面,别忘了操作系统可能有offload特性,比如TCP校验和卸载,如果你的FPGA硬件不支持,反而会导致问题。在Linux下可以用ethtool命令关闭这些特性试试。另外,MTU设置不一致也会导致分片和丢包。
工具配合上,我一般是在电脑端用Wireshark持续抓包,同时在FPGA端用ILA设置一个与Wireshark抓到的特定错误包(比如checksum error)相关联的触发条件。两边的时间戳当然对不上,但可以通过包内容(比如一个特定的payload)来关联,看看这个包在FPGA侧发出时状态是否正常。
