载板UDP网络交流地址配置测试情况_20260709

1. 设计目标

本功能用于支持载板 UDP 通讯地址的运行时配置,减少因更换上位机或载板地址变化而重新生成 bit 文件的需求。

设计目标主要包括:

  • 支持载板本机 MAC、IP、UDP 端口配置。
  • 支持上位机目标 MAC、IP、UDP 端口配置。
  • 支持上位机通过 UDP 指令发现载板、查询网络配置状态、配置目标地址和载板本机地址。
  • 支持载板通过UDP指令获取指令来源地址,对配置指令的上位机进行反馈。
  • 区分原始配置 raw 和当前实际应用配置 active,便于上位机确认配置是否被接收和应用。
  • 为后续 PS 端配置文件、上位机 CLI/GUI 配置和网络状态反馈功能预留接口。

2. 实现方案

  1. 完成载板与上位机之间交流的指令协议,确定指令格式(中能聚控完成);
  2. 完成上位机指令的接收、解析;
  3. 完成上位机广播发现载板的功能;
  4. 完成上位机UDP包传输的的地址配置信息的存储和应用;
  5. 完成上位机非地址配置UDP包的UDP包来源地址识别,用于反馈上位机指令。

3. 模块设计

本次功能在原有 UDP 收发链路基础上,新增和修改了以下模块,用于完成网络地址配置 UDP 包的识别、解析和后续地址管理。

3.1 UDP_IP_MAC

UDP_IP_MAC 是原有 UDP/IP/MAC 封装与解析模块。本次修改主要增加了动态网络地址配置接口,使模块不再只能使用固件中写死的源地址和目的地址。

新增的动态地址输入主要包括:

  • cfg_net_addr_valid
  • cfg_src_mac
  • cfg_src_ip
  • cfg_src_port
  • cfg_dst_mac
  • cfg_dst_ip
  • cfg_dst_port

其中 cfg_src_* 表示载板本机地址,cfg_dst_* 表示上位机目标地址。后续这些信号将由 addr_config_gen 输出,用来动态控制 UDP 包发送时使用的源地址和目的地址。

同时,UDP_IP_MAC 也需要向外输出接收到的 UDP 包真实来源地址,例如源 MAC、源 IP 和源 UDP 端口。该信息用于 DISCOVER 指令中载板学习上位机地址。

3.2 udp_rx_dispatcher

udp_rx_dispatcher 用于接收 UDP_IP_MAC 输出的 UDP payload AXIS 数据,并根据 DDAQ 公共包头中的 cmd_id 对 UDP 包进行分流。

该模块会按照 udp_config_driver 中一致的方式对 AXIS 数据进行字节序整理,然后解析公共包头,判断当前 UDP 包属于哪一类指令:

  • 普通系统配置、采集控制指令:转发给 udp_config_driver
  • 网络地址配置指令:转发给 net_addr_config_recv
  • 非法指令或不支持指令:丢弃

通过这个模块,原有系统配置指令和新增网络地址配置指令可以共用同一条 UDP 接收链路。

3.3 net_addr_config_recv

net_addr_config_recv 用于解析网络地址配置相关 UDP 指令。该模块接收 udp_rx_dispatcher 分流后的 AXIS 数据和 UDP 包来源信息,解析出具体的网络地址配置参数。

目前支持解析 5 类网络地址配置指令:

  • DISCOVER
  • GET_NET_INFO
  • SET_HOST_ADDR
  • SET_BOARD_ADDR
  • CONFIRM_BOARD_ADDR

模块解析完成后,会在 STATE_EMIT_EVENT 状态下拉高一个周期的 valid 信号,例如:

  • discover_req_valid
  • get_net_info_req_valid
  • host_addr_cfg_valid
  • board_addr_cfg_valid
  • board_addr_confirm_valid

同时,模块也会输出公共命令信息 net_cmd_*,包括命令 ID、目标载板编号、UDP 包真实来源地址等。后续 addr_config_gen 根据这些输出进行实际地址配置管理。

3.4 addr_config_gen

addr_config_gen 是网络地址配置管理模块。该模块后续用于接收 net_addr_config_recv 的解析结果,并根据指令类型更新载板本机地址和上位机目标地址。

该模块设计上需要同时维护两类配置:

  • raw:原始配置,记录最新接收到的配置内容
  • active:当前实际应用配置,表示系统正在使用的地址

该模块完成的主要任务包括:

  • 系统复位后加载默认载板地址和默认上位机地址
  • 处理 DISCOVER 指令,并在允许学习时绑定上位机地址
  • 处理 GET_NET_INFO 指令,触发网络地址状态反馈
  • 处理 SET_HOST_ADDR 指令,配置上位机目标地址
  • 处理 SET_BOARD_ADDR 指令,配置载板本机地址
  • 处理 CONFIRM_BOARD_ADDR 指令,完成 pending 地址配置的确认或取消
  • 输出 cfg_src_*cfg_dst_*UDP_IP_MAC

当前阶段,addr_config_gen 已经创建PS端的端口框架,先优先实现 PL 端 UDP 配置逻辑,PS 端配置端口先保留。

3.5 udp_config_driver 修改说明

本次功能中,基础参数配置指令解析模块,udp_config_driver 也需要配合修改。原因是:普通基础参数配置指令虽然不属于网络地址配置指令,但系统仍然需要知道这条配置指令来自哪一台上位机。

实际使用中,如果上位机 A 发送基础参数配置指令,那么载板完成配置后,参数反馈 UDP 包就应该优先发送回上位机 A,而不是继续发送到需要发送采集数据包的上位机地址。

因此,udp_config_driver 需要在解析基础参数配置、采集控制、PGA 配置等普通 UDP 指令时,同步获取该 UDP 包的真实来源地址,包括:

  • 源 MAC 地址
  • 源 IP 地址
  • 源 UDP 端口

这些来源地址来自 UDP_IP_MAC 输出的 UDP 接收 metadata,并通过 udp_rx_dispatcher 或顶层连接传递给配置解析链路。

该逻辑的目标是:

  • 当上位机发送普通系统配置指令后,载板可以识别当前指令来源。
  • 后续配置反馈包可以临时或动态发送回该指令来源上位机。
  • 避免多上位机或更换上位机时,反馈包仍然发往旧的固定地址。

也就是说,系统里存在两类会影响 UDP 反馈目标地址的来源:

  1. 网络地址配置指令,例如 DISCOVERSET_HOST_ADDR
  2. 普通系统配置指令,例如基础参数配置、PGA 配置、采集控制配置。

前者由 net_addr_config_recvaddr_config_gen 处理;后者需要 udp_config_driver 在解析普通配置指令时记录来源地址,并将该来源地址提供给后续地址管理或反馈发送逻辑。

整体上,UDP_IP_MAC 的目标上位机地址不再只是固定参数,而应该能够根据最近一次有效配置指令来源进行更新或临时切换,从而保证“谁发配置,反馈就回给谁”。

3.6 整体连接关系

新增网络地址配置功能的整体数据流如下:

UDP_IP_MAC
  |--> udp_rx_dispatcher
      |--> udp_config_driver
      |       |--> UDP_IP_MAC 动态地址暂时修改
      |--> net_addr_config_recv
              |--> addr_config_gen
                      |--> UDP_IP_MAC 动态地址配置输入

其中,udp_config_driver 继续负责原有系统参数配置和采集控制指令;net_addr_config_recvaddr_config_gen 负责新增网络地址配置指令。

4. 测试结果

4.1 上位机配置载板UDP包交流发送地址

该测试用于检查,在载板未更新网络地址配置,上位机不知晓载板地址前,载板是否能够正确识别上位机发送的地址配置广播 UDP 包,并根据UDP包的来源地址进行相应的处理。

上位机发送广播 DISCOVER UDP 包,载板收到后解析出上位机的源 MAC、源 IP 和源 UDP 端口,并将这些信息传递给 addr_config_gen

为避免载板初始地址刚好和上位机地址匹配,载板初始目标地址设置为:

- MAC: 00:11:22:33:44:55
- IP: 192.168.1.1
- UDP Port: 5000

经过配置后,观察ILA抓取信号,如图:

图中,载板的目标mac地址显示为6c:b3:11:21:c5:37,目标ip地址显示为192.169.1.100,目标udp端口显示为8010,符合上位机网络配置。

之后完成基础参数配置后,点击上位机的采集起始按钮,上位机通过ff:conf抓包后,可以在wireshark里面看到对应的采集数据包,由此可见,完成配置后,载板可以将参数传输到上位机。

测试结果说明,载板已经正确识别了上位机发送的UDP包来源地址,并将其作为新的目标地址。

4.2 载板反馈上位机参数配置指令

该测试用于检查,在载板收到上位机的参数配置指令后,是否能够正确识别该指令的来源地址,并将反馈包发送回该来源地址。

继续上一次测试,但是在上位机完成载板的目标地址配置后,更改上位机的网络配置。然后,上位机发送参数配置指令,载板收到后解析出上位机的源 MAC、源 IP 和源 UDP 端口,并将这些信息传递给 udp_config_driver

经过测试后,观察ILA抓取信号,如图:

图中,载板的目标mac地址显示为6c:b3:11:21:c5:37,目标ip地址显示为192.168.2.100,目标udp端口显示为8010,符合上位机网络配置。

但是后续发现存在问题。配置完成后,系统并没有回归到上位机第一次配置的目标地址,而是继续使用了基础参数配置的UDP包源地址。由于地址没有复原,旧地址对应上位机将无法接受载板的采集数据UDP包,这个问题不符合预期,需要修改。

5. 后续改进计划

  • 优化地址配置逻辑,确保在不同配置指令下,能够正确按需更新和恢复目标地址
  • 完善PS端的配置端口,确保PS端也能正确接收和应用网络地址配置
  • 由于载板自己的地址设计为优先PS端配置,因此需要在PS端对接完成后,再才方便测试载板源地址配置

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