UDP-MAC-IP-PHY构建与发送流程分析

AD-Blob-UDP

  • 基于ZCU106例程,准备将例程中的代码重新设计为module,包括UDP-IP-MAC moduleUDP NET PHY module。主要可设置参数为PHY层以上参数,即UDP-IP-MAC的参数:

    • MAC地址,包括source macdestination mac

    • IP地址,包括source IPdestination IP

    • 端口号,包括source portdestination port

    • 网关IP,默认为192.168.1.1

    • 子网掩码,默认为255.255.255.0

    • UDP数据包长度暂不作为设置参数,因为考虑到实际发送数据时以一个slice为单位,最后一个slice的长度不一定与之前的slice长度一致,因为需要作为一个变量进行设置。

  • 由于UDP NET PHY使用了Zynq ultrascale内部的UltraScale FPGAs Transceivers Wizard,因此还需要将例程中与该IP有关的文件全部复制到工程文件下。原有工程必须在Linux下使用make命令进行生成,而在cygwin中无法通过make命令生成。现有工程可以直接在windows下运行。

  • 完成工程生成后进行行为仿真,发现该网络协议栈的发送流程如下:

    • tx_udp_hdr_ready 与 tx_udp_hdr_valid同时为高时,首先发送一个ARP请求包,如下。在目标电脑收到ARP包并进行ARP回复后,后续才能进行UDP数据包的发送。后续除非电脑端更换IP地址等设置,否则FPGA端不需要进行ARP请求 。 ARP
    • 之前对整个工程分析时发现,并未提供ICMP报文的处理,因为该机制的存在,在UDP协议栈成功收到ARP回复包后,电脑端用ARP -a指令即可看到FPGA上的网络栈,即192.168.1.28, MAC:02 00 00 00 00 00。该机制可一定程度上代替Ping功能,即以ARP报文代替ICMP报文ARP_GET
  • 根据以上流程,发送流程可以为:首先发送ARP请求包,当收到电脑端ARP回复包后,表示整个网路通畅,可以进行后续操作,即slice数据发送。


本文章使用limfx的vscode插件快速发布