本次测试用于确认从 ad_data_blob_generator 到 blob_fifo_udp_transmit,再到 UDP payload AXI-Stream 输出链路是否能够正确输出数据包。
重点检查内容:
b64_data_gen 持续输出 b64_data 和 b64_valid 后,ad_data_blob_generator 是否能够生成 UDP payload 数据。
blob_fifo_udp_transmit 内部 FIFO 是否有数据读出。
UDP payload 的 tvalid/tready/tlast/tkeep/tdata 是否符合 AXI-Stream 传输规则。
输出包长度、包头字段和采样点数量是否符合设计参数。
当前测试参数如下:
参数 | 值 | 说明 |
|---|---|---|
|
| 连续采集模式 |
|
| 连续采集模式下无意义 |
|
| 一个 blob 包含 1024 个采样点 |
插入子卡 | 子卡 1、子卡 4 | 子卡群 0 到 4 中仅这两张插入 |
子卡 mask |
| 两张子卡均打开 32 通道 |
有效通道数 |
|
|
单通道数据宽度 |
|
|
单采样点数据量 |
|
|
|
|
|
slice header 长度 |
| 两个 64-bit header word |
单包可用数据区 |
|
|
单包采样点数 |
|
|
ILA 观察到 UDP payload AXI-Stream 输出存在有效传输:

第 514 周期检测到 tx_udp_payload_axis_tvalid && tx_udp_payload_axis_tready 同时为高,表示第一个有效 beat 被接收。
第 755 周期检测到最后一个 tx_udp_payload_axis_tvalid && tx_udp_payload_axis_tready 周期,同时 tx_udp_payload_axis_tlast 为高。
第 514、515 周期传输两个 64-bit 包头。
后续周期传输采样数据。
tkeep 在有效传输期间为 8'hff。
tvalid/tkeep/tdata 比 tready 提前约 2 个时钟周期拉高,但在 tready 拉高前数据保持稳定。
AXI-Stream 的实际传输条件为:
tvalid && tready
因此 tvalid 先于 tready 拉高本身不构成错误。只要 tready=0 期间 tdata/tkeep/tlast/tuser 保持稳定,即符合 AXI-Stream backpressure 规则。
有效传输周期为第 514 到第 755 周期,包含首尾:
beat_count = 755 - 514 + 1 = 242
每个 beat 为 64 bit,即 8 byte:
packet_payload_bytes = 242 * 8 = 1936 byte
根据设计参数计算:
channel_num = 64
bytes_per_sample_point = 64 * 2 = 128 byte
samples_per_packet = floor((2016 - 16) / 128) = 15
expected_packet_bytes = 16 + 15 * 128 = 1936 byte
测试观测包长 1936 byte 与设计计算值一致。
本次抓取到的两个 64-bit 包头如下:
header word 0 = 64'h000004002252db0c
header word 1 = 64'h000000020140000f
ad_data_blob_generator 中第一个 header word 生成逻辑为:
{data_blob_sa_len, data_blob_sa_cnt}
解析结果:
字段 | 十六进制 | 十进制 | 说明 |
|---|---|---|---|
|
|
| 一个 blob 的采样点数 |
|
| - | 当前累计采样计数 |
其中 data_blob_sa_len = 1024 与测试参数一致。
data_blob_sa_cnt 当前为累计计数值。现有代码中该计数不会在每个 blob 后归零,因此出现较大数值不代表包头错误。
ad_data_blob_generator 中第二个 header word 生成逻辑为:
{24'd0, job_id, sample_coef, channel_num, m_data_slice_sa_len_reg}
解析结果:
字段 | 十六进制 | 十进制 | 说明 |
|---|---|---|---|
保留字段 |
|
| 固定填 0 |
|
|
| 当前任务 ID |
|
|
| 降采样系数 |
|
|
| 有效通道数 |
|
|
| 当前 slice 包含采样点数 |
该 header word 与当前测试参数一致。
总有效 beat 数:
242 beat
其中前两个 beat 为 16 byte 包头:
data_beat_count = 242 - 2 = 240
data_bytes = 240 * 8 = 1920 byte
每个采样点为:
64 channel * 2 byte = 128 byte
因此当前包包含采样点数:
sample_points_in_packet = 1920 / 128 = 15
该结果与 m_data_slice_sa_len_reg = 15 一致。
对于一个完整 blob:
1024 = 68 * 15 + 4
因此理论上一个 blob 会拆分为:
68 个满包,每包 15 个采样点;
1 个尾包,包含 4 个采样点;
总包数为 69。
本次截图对应的是一个 15 点满包。
根据本次 ILA 波形和参数计算:
UDP payload AXI-Stream 已经有连续有效输出。
包长度为 1936 byte,与设计计算值一致。
两个 64-bit 包头字段解析正确。
当前包传输了 15 个采样点,与包头中的 m_data_slice_sa_len_reg = 15 一致。
tvalid/tkeep/tdata 先于 tready 拉高约 2 个时钟周期,该现象符合 AXI-Stream backpressure 机制,不是严重问题;实际传输仍应以 tvalid && tready 同时为高的周期为准。
综合判断:本次测试中,单个满包的 UDP payload 输出行为基本符合设计预期。
本文章使用limfx的vscode插件快速发布