ACM2108 采集 DDR4 缓存网口发送实验说明
配套工程:
acm2108_ddr4_udp开发板:SU200P(xcsu200p-sbva1024-2-e) 工程环境:Vivado 2026.1 文档版本:V1.1
1. 实验内容
本实验使用 ACM2108 模块自带的两路 DAC 产生测试信号,经短同轴线接入同一模块的两路 ADC。FPGA 接收 ADC 数据,先写入 SU200P 板载 DDR4,待指定长度的数据全部写入后再读出,并通过千兆网口以 UDP 数据报发送给电脑。测试不需要外部信号发生器,也不包含仿真操作。
板上按键切换 DAC 波形和频率;模块上的旋钮电位器可调节对应 DAC 模拟输出端的电压。观察旋钮调节前后的 ADC 采集波形,是本实验的板级验证重点之一。
2. 实验设备与连接
- SU200P 开发板、ACM2108 模块、配套电源和 JTAG 下载器;
- 适配模块接口的短同轴线,用于
DAC0 → ADC0、DAC1 → ADC1,或使用杜邦线短接排针; - 千兆网线及具有千兆网口的电脑;
- 可选示波器或信号发生器,用于先确认 DAC 输出电压及旋钮调节范围或给ADC模块输入模拟信号;
- Vivado 2026.1,以及能够收发 UDP 并显示或保存采样数据的电脑程序。

<kbd>ACM2108 模块实物图</kbd>
ACM2108 板上有两路 8 位 ADC 和两路 8 位 DAC;与 FPGA 相连的是 2×20 排针。DAC0/1、ADC0/1 指模块的模拟接口,不是 FPGA 排针上的数字数据引脚。模块原理图 ACM2108.pdf 中,两路 DAC 输出链路分别配置旋钮电位器 Rj1、Rj2。

2.1 断电接线
- 关闭开发板电源,再安装 ACM2108。不得带电插拔。
- 用短同轴线/杜邦线连接 ACM2108 的
DAC0模拟输出与ADC0模拟输入;双通道测试时,再连接DAC1与ADC1。只连接对应的信号接口,不要将 DAC 输出接到 GND 接口。 - 将电脑千兆网口连接到对应网口(本工程为板上 J2/ETH2),连接 JTAG 和电源。
- 初次上电后,若有示波器,先量测两路 DAC 输出;调节旋钮时从较小输出开始,确认电压不超过 ADC 模块允许输入范围、波形没有削顶,再执行回环采集。参考模块资料给出的模拟输入范围为 ±5 V,实际接线仍应以手中模块版本和实测为准。
3. 工程文件与数据通路
| 文件 | 作用 |
|---|---|
acm2108_ddr4_udp/acm2108_ddr4_udp.xpr | Vivado 工程入口 |
...srcs/sources_1/new/acm2108_ddr4_udp.v | 综合顶层,连接 ADC、DAC、DDR4、GMII 和调试 LED |
...srcs/sources_1/new/acm2108_dac.v、DDS_Module.v | 按键切换 DDS 输出模式,并驱动两路 DAC |
...srcs/sources_1/new/acm2108_capture.v | ADC 通道选择、抽取和 128 位数据打包 |
...srcs/sources_1/new/acm2108_control.v | UDP 命令参数与采集状态控制 |
...srcs/sources_1/new/capture_axi.v | DDR4 的 128 位 AXI4 写入和读回 |
...srcs/sources_1/new/udp_capture_tx.v | 原始数据的 UDP 分包发送 |
...srcs/sources_1/ip/ddr4_0/ddr4_0.xci | 板载 DDR4 控制器 IP |
...srcs/sources_1/ip/acm2108_clocks/acm2108_clocks.xci | ADC 和 DAC 时钟 IP |
...srcs/constrs_1/new/acm2108_user.xdc、dac_key.xdc | ACM2108 数据/时钟引脚与 DAC 切换按键约束 |
...srcs/constrs_1/new/board_gmii.xdc、ddr4_su200p.xdc | 开发板网口、系统时钟及 DDR4 约束 |
acm2108_ddr4_udp/bit/acm2108_ddr4_udp.pdi | 工程目录现有下载文件 |

<kbd>ACM2108 工程链路:SW12 控制 DAC 波形,双路 DAC→ADC 回环采集,经 DDR4 缓存后由 UDP 回传</kbd>
acm2108_clocks 由 266.67 MHz 系统时钟产生约 50 MHz ADC 时钟和约 125 MHz DAC 时钟。当前顶层将同一 DDS 数据同时输出到 DA0_Data、DA1_Data,因此两路 DAC 的数字波形和频率相同;两路模拟输出电压可分别用相应旋钮调节。ADC 时钟分别送到两路 ADC,采集数据先写完 DDR4,收到最后一次写响应后才开始读回及网络发送。DDR4 IP 采用 MT40A512M16TB-062E、16 位器件接口、128 位 AXI4 数据接口。
3.1 DAC 波形切换
上电或复位后的默认模式为约 1.25 kHz 正弦波。开发板丝印 SW12 的普通按键连接到 key_in(约束管脚 F25),每次有效按下切换一个模式,同一频率依次为正弦波、方波、三角波,然后进入下一档频率。工程设置的频率档位约为 1.25 kHz、12.5 kHz、62.5 kHz、125 kHz、625 kHz、1.25 MHz、6.25 MHz、12.5 MHz。首次验证建议保持默认低频正弦波;高频档位的实际模拟幅度和形状需用仪器确认,不能仅凭 DDS 频率字判断。
旋钮调节的是模块 DAC 模拟输出电压,不是 FPGA 的采样率或 DDS 频率。调节后应重新发起一次采集,比较回传数据的幅度;若出现平顶或平底,应减小输出电压并检查 ADC 是否饱和。
4. UDP 控制与采样数据
4.1 网络参数
| 项目 | 当前工程值 |
|---|---|
| FPGA IP / MAC | 192.168.0.2 / 00-0A-35-01-FE-C0 |
| FPGA UDP 端口 | 5000 |
| 建议电脑 IP / 掩码 | 192.168.0.3 / 255.255.255.0 |
| 网口工作方式 | 千兆 GMII;命令源 IP、MAC、端口作为回传目标 |
电脑网卡设为静态 IP,并确认协商速率为 1.0 Gbps。工程未实现 ARP 应答,Windows 上需以管理员权限添加静态邻居项;将“以太网”换成电脑的实际网卡名称:
netsh interface ipv4 add neighbors "以太网" 192.168.0.2 00-0a-35-01-fe-c0
当前工程不提供 ICMP 回显,无法进行ping 操作。
4.2 命令格式
每条命令为 8 字节,D3..D0 是 32 位大端参数:
55 A5 CMD D3 D2 D1 D0 F0
| CMD | 功能 | 参数 |
|---|---|---|
00 | 开始一次采集 | 数据字段忽略;必须先设置通道和有效字节数 |
01 | 选择通道 | 0 内部斜坡、1 ADC0、2 ADC1、3 双通道 |
02 | 设置总采集字节数 | 不超过 0x40000000;单通道为偶数,双通道为 4 的整数倍 |
03 | 设置采样速率 | 每个对应 ADC 时钟周期取一个样本或双通道样本组 |
4.3 数据格式
ADC 原始数据为 8 位。工程对原码执行 adc ^ 8'h80,将结果补齐至16位,每个 16 位容器的低 8 位,高 8 位固定为 0。字节序为低字节在前。双通道每个时刻依次发送 ADC0、ADC1。
FPGA 每个 UDP 数据报最多发送 1472 字节有效载荷。报文中没有包序号或重传信息;总字节数或包长不符时,本次接收不能判为完整。
5. 板级操作与预期现象
5.1 下载并检查链路
- 用 Vivado 打开
acm2108_ddr4_udp/acm2108_ddr4_udp.xpr,核对顶层与约束文件。 - 在 Hardware Manager 识别器件后,下载
acm2108_ddr4_udp/bit/acm2108_ddr4_udp.pdi;需要 probes 文件时选择同目录的.ltx。 - 默认
DEBUG_LEDS=1时,led[0]是心跳,led[1]表示系统复位已释放,led[2]表示千兆链路建立,led[3]表示当前链路会话已接收过合法 UDP 包。这些是 FPGA 的逻辑含义,LED 实际亮灭极性须结合开发板核对;LED 正常不能代替波形和数据完整性检查。
5.2 首次采集:DAC 回环
按下三次按键,保持 DAC 12.5 kHz 正弦波,确认模拟连接线已分别连接。通道采集 4096 点,采样速率35M。双通道共 4096 × 1 通道 × 2 字节 = 8192 字节 = 0x00002000。可将以下四条命令放在一个 UDP 数据报中,开始命令放最后:
55 A5 01 00 00 00 03 F0 # 双通道
55 A5 02 00 00 20 00 F0 # 总字节数 8192
55 A5 03 00 00 00 01 F0 # divider=1,约 35 MSa/s
55 A5 00 00 00 00 00 F0 # 开始采集
电脑应从 FPGA 的 192.168.0.2:5000 收到合计 8192 字节原始数据。数据应呈约 12.5 kHz 的正弦波。
<img src="images\acm2108_ddr4_udp_v1\QQ20260918-180001.png" style="zoom:80%;" />
5.3 旋钮与按键观察
- 保持
DAC0 → ADC0、DAC1 → ADC1,只缓慢调节 DAC0 对应旋钮,再采集一次。预期 ADC0 幅度随 DAC0 输出电压改变;ADC1 应基本保持原状态。然后对 DAC1 对应旋钮重复,检查 ADC1 的变化。旋钮和通道对应关系应以当前模块丝印及实物测量确认。 - 将旋钮调回不削顶的位置,按一次开发板的 SW12,重新采集。默认正弦波的下一模式应为同频方波;再按一次应为同频三角波。每次按键后重新发送开始命令,而不必重新下载 FPGA。
- 如需核实频率切换,可通过按键进行切换;高频测试时按实际波形合理调整
divider和采集窗口。
6. 常见问题与记录
| 现象 | 优先检查 |
|---|---|
| 无千兆链路 | J2/ETH2、网线、电脑网卡 1.0 Gbps 协商、复位和电源 |
有链路但 led[3] 不变化 | 静态 IP/ARP 项、目的端口 5000、Windows 防火墙、命令完整 8 字节格式 |
| 接收不到数据 | 同一 socket 是否仍在监听、DDR4 校准、命令顺序与字节数是否合法;先用较小字节数和通道 0 斜坡排查 |
| 波形恒定或削顶 | DAC→ADC 模拟连线、旋钮位置、DAC 输出实测电压、ADC 输入允许范围 |
| 双通道数据相同且旋钮不能分别改变幅度 | 核对两根线是否各自连接同号通道,及采集程序是否按每 4 字节拆为 ADC0/ADC1 |
| 总字节数不足 | UDP 接收缓冲和处理速度、丢包;本工程无包序号及重传,须重新采集 |
记录板级结果时,至少保存:两路 DAC→ADC 接线照片、DAC 输出电压或示波器读数、命令参数、实收数据报数与字节数、双通道波形、旋钮调节前后对比及当前 Vivado 实现时序摘要。没有这些记录时,只能称上述现象为预期,不能将 PDI 存在或 LED 状态视为完整验证通过。

