配置参数 UDP 反馈功能设计说明_20260629

1. 背景意义

为了让上位机能够及时确认配置是否被载板接收、是否被系统实际应用,本次新增配置参数 UDP 反馈功能。该功能在配置更新完成后,自动将原始配置和当前应用配置封装成 UDP 数据包,通过原有 SFP/UDP 发送链路反馈给上位机。

该功能的意义是:

  • 上位机可以检查配置下发是否成功。
  • 上位机可以对比 raw 配置和 active 配置,判断配置是否被系统接受并应用。
  • 系统可以在不增加额外调试接口的情况下,通过网络反馈当前配置状态。
  • 后续可以扩展为主动查询配置状态,即上位机发送 Get Config / Get Gain 指令后载板返回配置状态。

2. 设计目标

本功能的设计目标如下:

  1. 在基础配置更新完成后,自动反馈基础配置状态。
  2. 在 PGA 增益倍率配置完成后,自动反馈 PGA 配置状态。
  3. 反馈内容同时包含原始配置参数和当前应用配置参数。
  4. 采集数据 UDP 包和配置反馈 UDP 包共用SFP+发送接口,通过仲裁模块选择发送源。
  5. 配置反馈包优先级高于采集数据包,但不会打断正在发送中的采集数据 UDP 包。

3. 整体设计框架

新增功能整体链路如下:

config_set / pga_config_set
        |
        | cfg_update_valid / raw_pga_cfg_valid
        v
config_feedback_packet_gen
        |
        | 100MHz AXIS feedback packet
        v
config_feedback_udp_transmit
        |
        | 156MHz UDP TX source
        v
udp_tx_arb_mux
        |
        | arbitrated UDP TX stream
        v
UDP_IP_MAC
        |
        v
SFP / Ethernet / 上位机

原工程中,采集数据发送链路为:

ad_data_blob_generator
        |
        v
blob_fifo_udp_transmit
        |
        v
UDP_IP_MAC

新增功能后,blob_fifo_udp_transmit 不再直接驱动 UDP_IP_MAC,而是作为一路 UDP 源接入仲裁模块:

blob_fifo_udp_transmit        \
                               -> udp_tx_arb_mux -> UDP_IP_MAC
config_feedback_udp_transmit  /

其中:

  • config_set / pga_config_set负责锁存配置信息,并将PS端和UDP传输的配置整合为统一端口输出。
  • config_feedback_packet_gen负责处理反馈UDP包封装打包。
  • config_feedback_udp_transmit 负责配置反馈 UDP 包。
  • udp_tx_arb_mux 负责在两路 UDP 源之间进行选择。
  • UDP_IP_MAC 继续负责 UDP/IP/MAC 封装和 SFP 发送。

4. 模块功能与逻辑细节

4.1 config_set

config_set 是基础配置参数处理模块。

它负责接收 PS 端和 UDP 端输入的基础配置参数,包括:

  • sample_rate
  • total_sample_num
  • sample_point_num
  • module0_maskmodule4_mask
  • sample_coef
  • job_id
  • stream_mode

该模块输出两类配置:

  • raw_cfg_*:原始配置参数。
  • active_cfg_*:当前应用配置参数。

当基础配置完成合法更新后,模块输出:

cfg_update_valid

该信号用于触发基础配置反馈包生成。

4.2 pga_config_set

pga_config_set 是 PGA 增益倍率配置处理模块。

它负责接收 UDP 或 PS 端输入的 PGA 配置信息,包括:

  • 配置来源 *_pga_cfg_src
  • 目标子卡编号 pga_target_id
  • 配置通道数 pga_channel_count
  • 8 个 32 位 PGA 增益数据 pga_gain0pga_gain7

该模块同样输出两类配置:

  • raw_pga_*:原始 PGA 配置。
  • active_pga_*:当前应用 PGA 配置。

其中,raw_pga_* 用于记录系统收到的 PGA 配置,active_pga_* 用于记录经过子卡合法性检查后实际应用的 PGA 配置。

当原始 PGA 配置完整接收并锁存后,模块输出:

raw_pga_cfg_valid

该信号用于触发 PGA 配置反馈包生成。

4.3 config_feedback_packet_gen

config_feedback_packet_gen 是配置反馈包组包模块,工作在 clk_100mhz 时钟域。

该模块接收:

  • 基础配置反馈触发:get_config_req
  • PGA 配置反馈触发:get_pga_gain_req
  • raw_cfg_*
  • active_cfg_*
  • raw_pga_*
  • active_pga_*
  • subcard_mask
  • working_state

当前顶层连接中:

get_config_req   = cfg_update_valid
get_pga_gain_req = raw_pga_cfg_valid

该模块生成两类反馈包:

  1. 基础配置反馈包。
  2. PGA 增益倍率反馈包。

每个反馈包长度固定为 96 字节:

16 字节 Frame Header + 80 字节 Payload

模块内部将反馈包锁存为 12 个 64 位 word:

config_udp_packet[0:11]
pga_udp_packet[0:11]

包头Frame Header定义:

偏移 字段 长度(字节) 说明
0 magic 4 固定为 0x44444151 ,ASCII 为 DDAQ
4 version 2 协议版本编号,当前版本为16'd1
6 config_type 1 参数类型,区分基础参数和PGA增益倍率参数
7 payload_len 4 负载长度
11 reserved 5 暂留

其中,包头里面,参数类型分为Send_Config = 8'd1,Send_PGA_Gain = 8'd2。

基础参数配置:

基础参数,首先传输原始配置参数,然后传输当前应用配置参数。另外,子卡其他相关信息同样通过该包传输。

偏移 字段 长度(字节) 说明
0 subcard_mask 1 子卡掩码,实际为5位,仅使用该字节的末5位,从低位到高位分别表示对应子卡aurora连接情况
1 working_state 1 载板工作状态
2 raw_cfg_src 1 原始配置参数来源,8'd1表示CFG_SRC_UDP,通过上位机发送的配置;8'd2表示CFG_SRC_PS,通过PS端传输过来的配置
3 reserved0 1 暂留
4 raw_cfg_sample_rate 4 原始采样率配置
8 raw_cfg_total_sample_num 4 原始总采样点数配置
12 raw_cfg_sample_point_num 4 原始Blob包采样点数量
16 raw_cfg_module0_mask 4 0号子卡32通道原始采样掩码配置
20 raw_cfg_module1_mask 4 1号子卡32通道原始采样掩码配置
24 raw_cfg_module2_mask 4 2号子卡32通道原始采样掩码配置
28 raw_cfg_module3_mask 4 3号子卡32通道原始采样掩码配置
32 raw_cfg_module4_mask 4 4号子卡32通道原始采样掩码配置
36 raw_cfg_sample_coef 1 原始降采样倍率配置
37 raw_cfg_job_id 1 原始任务编号配置
38 raw_cfg_stream_mode 1 原始工作模式配置
39 reserved1 1 暂留,用于4字节对齐
40 active_cfg_src 1 当前应用配置参数来源,8'd1表示CFG_SRC_UDP,通过上位机发送的配置;8'd2表示CFG_SRC_PS,通过PS端传输过来的配置
41 reserved2 3 暂留
44 active_cfg_sample_rate 4 当前应用采样率配置
48 active_cfg_total_sample_num 4 当前应用总采样点数配置
52 active_cfg_sample_point_num 4 当前应用Blob包采样点数量
56 active_cfg_module0_mask 4 0号子卡32通道当前应用采样掩码配置
60 active_cfg_module1_mask 4 1号子卡32通道当前应用采样掩码配置
64 active_cfg_module2_mask 4 2号子卡32通道当前应用采样掩码配置
68 active_cfg_module3_mask 4 3号子卡32通道当前应用采样掩码配置
72 active_cfg_module4_mask 4 4号子卡32通道当前应用采样掩码配置
76 active_cfg_sample_coef 1 当前应用降采样倍率配置
77 active_cfg_job_id 1 当前应用任务编号配置
78 active_cfg_stream_mode 1 当前应用工作模式配置
79 reserved3 1 暂留,用于4字节对齐

PGA增益倍率配置:

偏移 字段 长度(字节) 说明
0 subcard_mask 1 子卡掩码,实际为5位,仅使用该字节的末5位,从低位到高位分别表示对应子卡aurora连接情况
1 working_state 1 载板工作状态
2 raw_cfg_src 1 原始配置参数来源,8'd1表示CFG_SRC_UDP,通过上位机发送的配置;8'd2表示CFG_SRC_PS,通过PS端传输过来的配置
3 reserved0 1 暂留
4 raw_pga_target_id 1 原始配置PGA增益倍率参数配置子卡编号
5 raw_pga_channel_count 1 原始配置PGA增益倍率通道数
6 reserved1 2 暂留
8 raw_pga_gain_0_7 8 原始通道0到7的PGA增益倍率配置
16 raw_pga_gain_8_15 8 原始通道8到15的PGA增益倍率配置
24 raw_pga_gain_16_23 8 原始通道16到23的PGA增益倍率配置
32 raw_pga_gain_24_31 8 原始通道24到31的PGA增益倍率配置
40 active_cfg_src 1 当前应用配置参数来源,8'd1表示CFG_SRC_UDP,通过上位机发送的配置;8'd2表示CFG_SRC_PS,通过PS端传输过来的配置
41 reserved2 3 暂留
44 active_pga_target_id 1 当前应用PGA增益倍率参数配置子卡编号
45 active_pga_channel_count 1 当前应用PGA增益倍率通道数
46 reserved3 2 暂留,用于8字节对齐
48 active_pga_gain_0_7 8 当前应用通道0到7的PGA增益倍率配置
56 active_pga_gain_8_15 8 当前应用通道8到15的PGA增益倍率配置
64 active_pga_gain_16_23 8 当前应用通道16到23的PGA增益倍率配置
72 active_pga_gain_24_31 8 当前应用通道24到31的PGA增益倍率配置

数据输出

当触发信号到来时,模块会将当前输入参数锁存进对应数组,避免发送过程中配置参数变化导致同一个 UDP 包内出现新旧参数混合。

该模块通过 AXIS 接口输出反馈包:

m_udp_payload_axis_tdata
m_udp_payload_axis_tkeep
m_udp_payload_axis_tvalid
m_udp_payload_axis_tready
m_udp_payload_axis_tlast
m_udp_payload_axis_tuser

同时输出:

m_udp_tx_en
m_udp_payload_len

其中 m_udp_tx_en 用于通知后级模块开始发送一个反馈 UDP 包。

4.4 config_feedback_udp_transmit

config_feedback_udp_transmit 是配置反馈 UDP 跨时钟与发送接口整理模块。

它连接在:

config_feedback_packet_gen
        ↓
config_feedback_udp_transmit

之间。

该模块输入侧工作在 clk_100mhz,输出侧工作在 clk_156mhz

输入侧接收 config_feedback_packet_gen 输出的 AXIS 数据流:

s_udp_payload_axis_*
s_udp_tx_en

模块内部使用 axis_async_fifo 完成跨时钟传输:

FRAME_FIFO = 1

也就是说,模块按 tlast 标记的一整个 AXIS frame 进行跨时钟缓存。

输出侧生成一组 UDP TX 源信号:

m_udp_hdr_valid
m_udp_hdr_ready
m_udp_payload_length
m_udp_payload_axis_*

这些信号工作在 clk_156mhz,后续接入 udp_tx_arb_mux

模块状态机包括:

UDP_IDLE
UDP_SEND_HEADER
UDP_SEND_PAYLOAD
UDP_SEND_END

基本流程:

  1. UDP_IDLE:等待 s_udp_tx_en 跨时钟同步后的触发。
  2. UDP_SEND_HEADER:拉高 m_udp_hdr_valid,等待后级 m_udp_hdr_ready
  3. UDP_SEND_PAYLOAD:从异步 FIFO 读取 payload,并通过 AXIS 输出。
  4. UDP_SEND_END:一包发送完成,回到空闲状态。

该模块不包含 ARP 状态机。ARP 或静态 MAC 相关逻辑由统一的 UDP_IP_MAC 发送链路负责。

4.5 udp_tx_arb_mux

udp_tx_arb_mux 是 UDP 发送仲裁模块,工作在 clk_156mhz 时钟域。

它有两路输入:

  1. 配置反馈 UDP 源feedback_udp_*,来自 config_feedback_udp_transmit
  2. 采集数据 UDP 源blob_udp_*,来自 blob_fifo_udp_transmit

它输出一路仲裁后的 UDP TX 信号:

tx_udp_*

连接到 UDP_IP_MAC

目前仲裁策略为固定优先级,配置反馈包优先级高于采集数据包。

状态机包括:

ARB_IDLE
ARB_FEEDBACK
ARB_BLOB

逻辑如下:

  1. ARB_IDLE 状态下,如果 feedback_udp_hdr_valid 为高,则选择配置反馈源。
  2. 如果没有配置反馈包,而 blob_udp_hdr_valid 为高,则选择采集数据源。
  3. 一旦选择某一路,就锁定该路直到当前 UDP 包的 payload 最后一拍完成握手:
tvalid && tready && tlast
  1. 未被选中的源不会收到 hdr_readypayload_axis_tready,因此不会弹出 FIFO 数据。

这种设计保证了:

  • 不会在一个 UDP 包中间切换数据源。
  • 配置反馈包不会打断正在发送中的采集数据包。
  • 当前采集包发送完成后,若反馈包等待发送,则优先发送反馈包。

4.6 blob_fifo_udp_transmit

blob_fifo_udp_transmit 是原工程已有的采集数据 UDP 发送模块。

本次修改后,它不再直接连接 UDP_IP_MAC,而是输出到 blob_tx_udp_* 信号,再接入 udp_tx_arb_mux

其功能保持不变:

  • 接收 ad_data_blob_generator 输出的采集数据 AXIS。
  • 完成采集数据跨时钟。
  • 生成采集数据 UDP 发送接口。

4.7 UDP_IP_MAC

UDP_IP_MAC 是原工程已有的 UDP/IP/MAC 发送与接收模块。

本次新增功能仍然复用该模块,不新增独立 MAC 或 UDP 发送通路。

新增功能后,UDP_IP_MAC 的发送输入来自:

udp_tx_arb_mux

而不是只来自 blob_fifo_udp_transmit

5. 仿真测试结果

本节记录 config_feedback_chain_tb 对配置参数 UDP 反馈链路的仿真测试结果。该仿真主要用于验证从配置参数更新、反馈包封装、跨时钟发送,到 UDP TX 仲裁输出的完整链路是否能够按照预期工作。

5.1 测试目标

本次仿真测试的目标如下:

  1. 验证基础配置参数更新后,系统能够自动触发配置反馈包发送。
  2. 验证 PGA 增益倍率配置完成后,系统能够自动触发 PGA 配置反馈包发送。
  3. 验证 config_feedback_packet_gen 输出的 AXIS payload 能够被 config_feedback_udp_transmit 正确跨时钟缓存并输出。
  4. 验证 udp_tx_arb_mux 能够在配置反馈 UDP 源和采集数据 blob UDP 源之间正确仲裁。
  5. 验证最终 tx_udp_payload_axis_* 输出不会丢包、混包,且每个 UDP 包均以 tlast 正确结束。

5.2 检查项

本次仿真重点检查以下信号和现象:

  • s_status_good_framem_status_good_frame:确认反馈包已经作为完整 AXIS frame 写入并跨时钟释放。
  • s_status_overflowm_status_overflow:确认 FIFO 深度调整后不再出现反馈包溢出。
  • feedback_hdr_valid / feedback_hdr_ready:确认反馈 UDP 包头请求被下游接受。
  • arb_state:确认仲裁器在反馈包发送时进入 1,在 blob 包发送时进入 2
  • tx_udp_payload_axis_tvalid / tx_udp_payload_axis_tready:确认最终 AXIS payload 正常握手。
  • tx_udp_payload_axis_tlast:确认每个 UDP payload 都有且仅有一个结束标记。
  • tx_udp_payload_axis_tdata / tx_udp_payload_axis_tkeep:确认反馈包和 blob 包在最终输出端能够区分,且 tkeep 在有效 payload 周期为 8'hff

5.3 激励条件

仿真文件 config_feedback_chain_tb.v 中设置的主要激励如下:

  1. UDP 来源基础参数配置:采样率为 2_000_000,总采样点数为 4096,blob 内采样点数为 1024,插入子卡 0、2、4 的通道掩码为 32'hffff_ffff,任务 ID 为 8'd1,降采样倍率为 8'd1,工作模式为单次采集模式。
  2. PS 来源基础参数配置:采样率为 20_000_000,总采样点数为 4096,blob 内采样点数为 1024,5 块子卡掩码均配置为 32'hffff_ffff,任务 ID 为 8'd1,降采样倍率为 8'd1,工作模式为连续采集模式。
  3. UDP 来源 PGA 配置:目标子卡为 0 号子卡,通道数为 32,8 个串行增益 word 均为 32'h0101_0101
  4. PS 来源 PGA 配置:目标子卡为未插入的 1 号子卡,通道数为 32,8 个串行增益 word 均为 32'h0202_0202
  5. 在第 4 组 PGA 测试前,仿真额外调用 start_blob_packet(16'd128),模拟一路采集数据 blob UDP 包进入仲裁器,用于验证反馈包和采集数据包共用 UDP TX 输出时的仲裁行为。

因此,本次最终输出应包含 5 个 UDP payload frame:4 个配置反馈相关数据包,以及 1 个仿真注入的 blob 数据包。

5.4 仿真波形

配置反馈链路仲裁仿真结果

图中展示了 udp_tx_arb_mux 输出侧以及 blob 输入侧的关键信号。截图对应的波形中,arb_state 按照数据源选择在 012 之间切换,其中:

  • arb_state = 0 表示仲裁器空闲。
  • arb_state = 1 表示当前选中配置反馈 UDP 源。
  • arb_state = 2 表示当前选中采集数据 blob UDP 源。

可以看到,波形中 arb_state 多次进入 1,对应 4 次配置反馈包输出;同时出现一次 arb_state = 2,对应 testbench 中主动注入的 128 字节 blob 数据包。该 blob 包的输出数据带有 b10b_0000 前缀,与仿真激励中 blob_tdata <= {32'hb10b_0000, ...} 的构造方式一致,因此可以确认该包来自模拟采集数据源,而不是额外多发的配置反馈包。

5.5 通过判据

结合波形可以确认以下结果:

  1. 最终 tx_udp_payload_axis_tlast 共出现 5 次,和预期的 4 个配置反馈包加 1 个 blob 包一致。
  2. 配置反馈包发送期间,arb_state1,说明 udp_tx_arb_mux 正确选择了反馈 UDP 源。
  3. blob 包发送期间,arb_state2,且 blob 输入侧 blob_udp_payload_axis_tvalidblob_udp_payload_axis_tready 完成握手,说明仲裁器能够正常切换到采集数据源。
  4. 所有有效输出周期中,tx_udp_payload_axis_tvalidtx_udp_payload_axis_tready 能够完成握手,tx_udp_payload_axis_tkeep8'hff,说明 payload 数据宽度有效。
  5. tx_udp_payload_axis_tlast 在每个数据帧末尾产生,说明输出 UDP payload frame 边界正确。
  6. 反馈包和 blob 包在输出端没有交叠,arb_state 在一个 payload frame 结束前保持对应源选择,说明 udp_tx_arb_mux 没有发生混包。

因此,本次仿真结果可以证明:配置参数 UDP 反馈链路能够完成反馈包生成、跨时钟缓存、UDP TX 接口整理以及与采集数据包的发送仲裁;在当前激励条件下,输出包数量、数据源选择和 AXIS 帧结束标记均符合预期,仿真测试通过。

6. 实机测试

本节记录配置参数 UDP 反馈功能在实机联调中的 ILA 抓取结果。实机测试分为两个项目:

  • 基础参数配置反馈测试。
  • PGA 增益倍率配置反馈测试。

6.1 基础参数配置实机测试

6.1.1 测试目标

本测试用于验证基础参数配置反馈链路,目标如下:

  1. 验证上位机下发基础配置参数后,载板能够自动生成配置反馈 UDP payload。
  2. 验证反馈包中的 raw 配置能够记录上位机实际下发的配置参数。
  3. 验证反馈包中的 active 配置能够反映载板当前实际应用配置,未插入子卡对应的通道掩码应被清零。
  4. 验证最终送入 UDP_IP_MACtx_udp_payload_axis_* 输出满足 AXIS 时序要求。

6.1.2 测试条件

本测试由上位机通过 UDP 下发基础配置参数,主要配置如下:

  • 采样率:1_000_000
  • 总采样点数:4096
  • blob 中采样点数:1024
  • 降采样倍率:1
  • 5 块子卡下发通道掩码均为 32'hffff_ffff
  • 采集模式:连续采集模式
  • 实际插入子卡:0、2、4 号子卡
  • 未插入子卡:1、3 号子卡

因此,raw 原始配置中 0 到 4 号子卡掩码均应保持 32'hffff_ffff;active 当前应用配置中,0、2、4 号子卡掩码应为 32'hffff_ffff,1、3 号子卡掩码应被清零为 32'h0000_0000

6.1.3 预期输出

基础配置反馈包长度固定为 96 字节,对应 12 个 64-bit AXIS beat。若下游 tx_udp_payload_axis_tready 持续为高,则 tx_udp_payload_axis_tvalid 应连续保持有效 12 个发送周期,tx_udp_payload_axis_tkeep 在有效周期内应为 8'hfftx_udp_payload_axis_tlast 应只在最后一个 beat 拉高。

按照当前封包逻辑,本次配置对应的关键数据应包含:

  • raw_cfg_src = 8'd1,表示配置来源为 UDP。
  • subcard_mask = 5'b10101,在 payload 中对应低 5 位为 5'h15
  • raw_cfg_sample_rate = 32'd1_000_000,封装后在 64-bit 输出中以字节序调整后的 40 42 0f 00 形式出现。
  • raw 子卡掩码均为 ffff_ffff
  • active 子卡掩码为 module0/module2/module4 = ffff_ffffmodule1/module3 = 0000_0000

6.1.4 ILA 抓取波形与结论

实机 ILA 抓取的基础配置反馈 UDP payload 波形

图中抓取的是最终送入 UDP_IP_MACtx_udp_payload_axis_* 信号。可以看到:

  1. tx_udp_payload_axis_tvalid 在反馈包发送期间拉高。
  2. tx_udp_payload_axis_tready 同步为高,说明每个有效 beat 均完成 AXIS 握手。
  3. tx_udp_payload_axis_tkeep 在有效发送周期为 8'hff,说明每个 64-bit beat 的 8 个字节全部有效。
  4. tx_udp_payload_axis_tlast 在本次 payload 末尾产生单周期高电平,说明 96 字节 UDP payload 的帧边界正确。
  5. tx_udp_payload_axis_tdata 在有效区间连续输出 12 个 64-bit beat,其中可观察到字段与预期结果一致。

结合本次测试条件,ILA 波形中反馈包的 AXIS 握手、tkeeptlast 以及关键 tdata 字段均符合预期,说明实机下发基础配置后,载板能够正确输出配置反馈 UDP payload。

6.2 PGA 增益倍率配置实机测试

6.2.1 测试目标

本测试用于验证 PGA 增益倍率配置反馈链路,目标如下:

  1. 验证上位机下发 PGA 增益倍率配置后,载板能够自动生成 PGA 配置反馈 UDP payload。
  2. 验证目标子卡未插入时,raw PGA 配置仍然记录上位机实际下发内容。
  3. 验证目标子卡未插入时,active PGA 配置不会被本次无效配置覆盖,而是保持上一次合法 PGA 配置。
  4. 验证 PGA 配置反馈包中 raw_pga_gain*active_pga_gain* 的输出内容符合当前 RTL 封包逻辑。
  5. 验证最终送入 UDP_IP_MACtx_udp_payload_axis_* 输出满足 AXIS 时序要求。

6.2.2 测试条件

测试前,载板子卡插入状态仍为:

  • 实际插入子卡:0、2、4 号子卡
  • 未插入子卡:1、3 号子卡
  • subcard_mask = 5'b10101

首先,对 0 号子卡下发一次合法 PGA 配置,使 active PGA 配置更新为 0 号子卡配置。该配置内容如下:

  • 目标子卡:0 号子卡
  • 通道数:32
  • 通道 0:0.125,编码为 8'h00
  • 通道 1:0.5,编码为 8'h02
  • 通道 2:1,编码为 8'h03
  • 通道 3:2,编码为 8'h04
  • 通道 4 到 31:0.125,编码为 8'h00

随后,对 1 号子卡下发一次 PGA 配置。由于 1 号子卡未插入,该配置只应更新 raw PGA 配置,不应覆盖 active PGA 配置。该配置内容如下:

  • 目标子卡:1 号子卡
  • 通道数:32
  • 通道 0:0.125,编码为 8'h00
  • 通道 1:0.25,编码为 8'h01
  • 通道 2:0.5,编码为 8'h02
  • 通道 3:1,编码为 8'h03
  • 通道 4:2,编码为 8'h04
  • 通道 5 到 31:0.125,编码为 8'h00

6.2.3 预期输出

PGA 配置反馈包长度同样固定为 96 字节,对应 12 个 64-bit AXIS beat。若下游 tx_udp_payload_axis_tready 持续为高,则 tx_udp_payload_axis_tvalid 应连续保持有效 12 个发送周期,tx_udp_payload_axis_tkeep 在有效周期内应为 8'hfftx_udp_payload_axis_tlast 应只在最后一个 beat 拉高。

第二次配置 1 号未插入子卡后,raw PGA 配置应记录本次配置:

raw_pga_target_id     = 8'd1
raw_pga_channel_count = 8'd32
raw_pga_cfg_src       = 8'd1
raw_pga_gain0         = 32'h00010203
raw_pga_gain1         = 32'h04000000
raw_pga_gain2~7       = 32'h00000000

active PGA 配置应保持上一次 0 号子卡合法配置:

active_pga_target_id     = 8'd0
active_pga_channel_count = 8'd32
active_pga_cfg_src       = 8'd1
active_pga_gain0         = 32'h00020304
active_pga_gain1~7       = 32'h00000000

因此,按当前 config_feedback_packet_gen 的 64-bit tdata 显示方式,关键 beat 预期如下:

beat2 = 64'h00002001_00010115
beat3 = 64'h04000000_00010203
beat7 = 64'h00002000_00000001
beat8 = 64'h00000000_00020304

其中,beat2 表示 raw PGA 配置元信息,beat7 表示 active PGA 配置元信息。beat7 = 64'h00002000_00000001 说明当前实际应用 PGA 配置仍然是 0 号子卡、32 通道、UDP 来源,符合 1 号子卡未插入时 active 配置不更新的预期。

需要注意,ILA 中 tx_udp_payload_axis_tdata[63:0] 按高位到低位显示,因此可看到类似 {raw_pga_gain1, raw_pga_gain0} 的显示形式。实际 UDP payload 的字节偏移仍应以 AXIS byte lane 发送顺序为准。

6.2.4 ILA 抓取波形与结论

实机 ILA 抓取的 PGA 增益倍率反馈 UDP payload 波形

图中抓取的是最终送入 UDP_IP_MACtx_udp_payload_axis_* 信号。可以看到:

  1. tx_udp_payload_axis_tvalid 在 PGA 反馈包发送期间拉高。
  2. tx_udp_payload_axis_tready 同步为高,说明每个有效 beat 均完成 AXIS 握手。
  3. tx_udp_payload_axis_tkeep 在有效发送周期为 8'hff,说明每个 64-bit beat 的 8 个字节全部有效。
  4. tx_udp_payload_axis_tlast 在本次 payload 末尾产生单周期高电平,说明 96 字节 UDP payload 的帧边界正确。
  5. tx_udp_payload_axis_tdata 中可观察到 beat7 = 64'h00002000_00000001,说明 active PGA 配置保持为此前 0 号子卡合法配置。
  6. raw PGA 相关 beat 中可观察到本次 1 号子卡配置对应的 gain 编码字段,说明 raw PGA 配置已经记录上位机最新下发内容。

结合本次测试条件,ILA 波形中 raw PGA 配置、active PGA 配置、AXIS 握手、tkeeptlast 均符合预期,说明实机下发 PGA 增益倍率配置后,载板能够正确输出 PGA 配置反馈 UDP payload;同时,目标子卡未插入时,系统能够保持 active PGA 配置不被无效配置覆盖。

7. 总结

本次新增功能实现了配置参数状态自动 UDP 反馈的完整结构。

它能够在基础配置或 PGA 配置完成后,将系统当前记录的原始配置和当前应用配置封装成 UDP 数据包,并通过原有 UDP/SFP 发送链路反馈给上位机。

新增功能主要由以下模块组成:

  • config_feedback_packet_gen:配置反馈包组包。
  • config_feedback_udp_transmit:反馈包跨时钟与 UDP TX 接口整理。
  • udp_tx_arb_mux:配置反馈包与采集数据包的 UDP 发送仲裁。

该功能与原有采集数据发送链路共用 UDP_IP_MAC,通过仲裁模块将两路数据输入合并为一路,并保证配置反馈包和采集数据包不会混包。


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