芯路恒电子技术论坛

 找回密码
 立即注册

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

热搜: 合集

ACFL3432 DDR4 缓存 UDP 传输实验说明

配套工程:ACFL3432_UDP\acfl3432_udp_ddr4 工程环境:Vivado 2026.1 目标器件:xcsu200p-sbva1024-2-e 文档版本:V1.1

acfl3432_udp_ddr4.zip

1. 实验目的

本实验使用 SU200P 开发板和 ACFL3432 双通道高速 ADC 模块完成以下内容:

  1. 通过 SPI 初始化 CM3432,并由 FPGA 向模块提供 250 MHz 差分采样时钟;
  2. 通过 UDP 命令设置采集通道、采集字节数、抽取系数和 ADC 寄存器;
  3. 将单通道、双通道或测试斜坡数据写入板载 DDR4;
  4. 采集结束后从 DDR4 读回数据,并通过 ETH2千兆以太网以 UDP 数据报发送到电脑;
  5. 使用网络抓包和上位机波形检查传输完整性与板级采集结果。

本工程为纯 FPGA 逻辑设计。数据为先完成指定长度的采集与 DDR4 缓存,再开始 UDP 发送。

2. 实验平台与工程文件

2.1 硬件和软件

实验需要准备以下设备:

  • SU200P 开发板及配套电源;
  • ACFL3432 双通道 14 位 250 MSPS ADC 模块;
  • JTAG 下载器;
  • 千兆网线和带千兆网口的电脑;
  • 信号发生器和同轴连接线;
  • Vivado 2026.1;
  • UDP测试上位机。

ACFL3432模块实物图

<kbd>ACFL3432 模块实物图</kbd>

ACFL3432 通过 FMC_LPC 接口与 FPGA 连接。模块的两路模拟输入、差分采样时钟、返回 DCO、14 位差分数据和 SPI 配置信号均从该接口引出。

ACFL3432模块FMC接口

<kbd>ACFL3432 模块 FMC_LPC 接口</kbd>

2.2 主要工程文件

<samp>工程文件说明</samp>

文件作用
acfl3432_udp_ddr4.xprVivado 工程入口
...\rtl\acfl3432_udp_ddr4.v综合顶层,连接 ADC、DDR4、GMII、命令控制和调试 LED
...\rtl\udp_command_rx.v接收并校验以太网、IPv4 和 UDP 报文,解析 8 字节控制帧
...\rtl\acfl_control.v保存采集参数,控制 SPI、采集启动和返回数据
...\rtl\acfl_input.vACFL3432 差分 DCO 与数据输入,形成 A、B 两路 14 位数据
...\rtl\acfl_capture.v通道选择、抽取、字节打包和 128 位数据输出
...\rtl\capture_axi.v通过 128 位 AXI4 将数据写入 DDR4,再按原地址读回
...\rtl\udp_capture_tx.v将读回数据按最大 1472 字节分成 UDP 数据报
...\ip\ddr4_0\ddr4_0.xciSU200P 板载 DDR4 控制器配置
...\ip\adc_clock_ip\adc_clock_ip.xci266.67 MHz 输入、50 MHz/250 MHz 输出及动态重配置时钟 IP
...\constraints\board_gmii.xdc系统时钟、复位、ETH2、LED 和 GMII 时序约束
...\constraints\ddr4_su200p.xdcSU200P 板载 DDR4 管脚约束
...\constraints\fmc_lpc_user.xdc当前 ACFL3432 FMC_LPC 管脚与电平约束
...\constraints\adc_fabric_250.xdc250 MHz DCO 和 ADC 数据输入时序模型
bit\acfl3432_udp_ddr4.pdi当前发布目录中的器件下载文件

fmc_lpc_user.xdc 是本工程的板卡专用约束。不可直接用于其他 Zynq 开发板的 FMC 管脚表;修改子卡、插槽或 VADJ 后,应重新核对 P/N 管脚、电平标准和相对 DCO 时序。

3. 系统结构与关键配置

3.1 数据通路

mermaid-diagram

<kbd>ACFL3432 DDR4 缓存 UDP 传输结构</kbd>

控制命令从 ETH2的接收时钟域进入。采样数据由 ACFL3432 返回的 DCO 驱动,在采样时钟域完成通道选择和 128 位打包,经异步 FIFO 进入 DDR4 用户时钟域。全部数据写入 DDR4 并收到最后一个成功的 AXI 写响应后,工程才从地址 0 开始读回;随后通过第二个异步 FIFO 送入 125 MHz GMII 域并发往电脑。

3.2 DDR4 和时钟参数

<samp>关键 IP 参数</samp>

项目当前工程值
DDR4 器件MT40A512M16TB-062E
DDR4 物理位宽16 bit
DDR4 容量1 GiB
DDR4 参考时钟266.67 MHz
DDR4 数据速率2400 MT/s
DDR4 用户时钟300 MHz
AXI4 数据/地址/ID 位宽128 bit / 30 bit / 4 bit
AXI 突发最多 16 拍,即 256 字节
GMII 时钟125 MHz
ADC 输出时钟250 MHz 差分时钟

DDR4 IP 的参数负责匹配板载存储器,capture_axi.v 负责组织实际的写入和读回。当前设计从 DDR4 地址 0 开始使用,最大命令长度为 0x40000000 字节。实际调试应从 16 KiB 或更小的数据量开始,不要直接进行 1 GiB 采集。

3.3 ADC 初始化和数据格式

上电后,acfl_spi_config.v 依次写入以下寄存器,然后执行 0x00FF = 0x01 使配置生效:

地址数据用途
0x00140x05选择二进制补码输出格式
0x00170x80当前工程的 DCO 延时设置
0x000B0x00沿用参考初始化值
0x00180x0F沿用参考初始化值
0x00160x00LVDS 交织 A/B 输出,DCO 不反相
0x00FF0x01同步更新配置

CM3432 是 14 位 ADC,原始补码的有效位为 bit 13:0,其中 bit 13 是符号位。当前 acfl_capture.v 使用 {2'b0, adc_a}{2'b0, adc_b} 将原始码装入 16 位小端容器,因此传输字的 bit 15:14 固定为 0。这里传输的是零扩展后的 14 位原始码,并不是已经完成符号扩展的标准 16 位补码。

如果工程要直接输出标准 16 位补码,RTL 应改为 {{2{adc_a[13]}}, adc_a}{{2{adc_b[13]}}, adc_b},使负数的 bit 15:14 都复制原始符号位。现有工程未采用这种格式,因此上位机必须先保留低 14 位,再根据 bit 13 手动符号扩展。

双通道模式按 A低字节、A高字节、B低字节、B高字节 排列。现有数据格式可按以下方式解析:

raw = low_byte | (high_byte << 8)
raw = raw & 0x3FFF
if raw & 0x2000:
    raw = raw - 0x4000

工程包含 FPGA 内部递增斜坡测试数据,位于 acfl_capture.v。该模块中的 ramp[13:0] 在采样时钟域递增;当通道选择为 0 时,wire [15:0] a = {2'b0, (ch == 0 ? ramp : adc_a)} 选择斜坡值代替 A 通道输入。通道 0 适合先检查 DDR4、UDP 和电脑接收程序,不依赖模拟输入是否正确。

4. UDP 命令与采样数据

4.1 网络参数

<samp>默认网络参数</samp>

项目当前工程值
FPGA 端口ETH2,板上接口 J2
FPGA IPv4192.168.0.2
FPGA MAC00-0A-35-01-FE-C0
FPGA UDP 端口5000
建议电脑 IPv4192.168.0.3
建议子网掩码255.255.255.0

FPGA 逻辑不实现 ARP 应答。电脑网卡设为静态地址后,还需要以管理员身份为 FPGA 添加静态项。将命令中的网卡名称“以太网”替换为电脑实际显示的名称:

netsh interface ipv4 add neighbors "以太网" 192.168.0.2 00-0a-35-01-fe-c0

上位机必须保持发送命令时使用的 UDP socket 打开。FPGA 会把采样数据返回到该命令报文的源 MAC、源 IP 和源端口,而不是固定返回到某个电脑端口。

4.2 控制帧格式

每条命令固定为 8 字节:

55 A5 CMD D3 D2 D1 D0 F0

CMD 为命令号,D3..D0 组成 32 位大端参数。一个 UDP 数据报中可以依次放置多条完整命令;不要把同一条 8 字节命令拆到两个 UDP 数据报中。

<samp>命令说明</samp>

CMD功能参数说明
00开始一次采集数据字段忽略;启动前必须先设置通道和字节数
01通道选择0 测试斜坡,1 A 通道,2 B 通道,3 双通道
02采集字节数单通道必须为偶数,双通道必须为 4 的整数倍;范围 10x40000000
03采样速率divider+1 个 DCO 周期取一次数据;
04保存 ADC 寄存器写入值低 24 位为 16 位寄存器地址和 8 位数据;在 CMD00 时写入并执行 0x00FF=0x01

当输入 DCO 为 250 MHz 时,理论数据选取速率为:

<p align="center"><strong>f_select = 250 MHz ÷ (divider + 1)</strong></p>

该式只表示采样数据的抽取节拍,不代表当前工程已经通过 250 MHz 的实现时序和板级数据正确性验证。

4.3 双通道 4K 点命令示例

双通道每个采样点组占 4 字节。若每通道采集 4096 点,总字节数为:

<p align="center"><strong>4096 × 2 字节 × 2 通道 = 16384 字节 = 0x00004000</strong></p>

基础测试可按以下顺序发送命令。建议把五条命令连续放在同一个 40 字节 UDP 数据报中,并把开始命令放在最后:

55 A5 01 00 00 00 03 F0    # 双通道
55 A5 02 00 00 40 00 F0    # 总字节数 16384
55 A5 03 00 00 00 18 F0    # divider = 24,有效选取速率约 10 MSPS
55 A5 04 00 00 14 05 F0    # 保持补码输出格式
55 A5 00 00 00 00 00 F0    # 开始采集

在 250 MHz DCO 下,divider=24 对应约 10 MSPS 的有效数据选取速率。4096 点覆盖约 409.6 μs,便于同时观察 10 kHz 和 20 kHz 输入波形。

采集完成后,FPGA 发送不带私有包头的原始字节流。单个 UDP 有效载荷最大为 1472 字节,因此 16384 字节应收到 12 个 UDP 数据报:前 11 包各 1472 字节,最后一包 192 字节。

UDP 数据中没有包序号、总长度字段或重传机制。上位机应统计数据报数量和总字节数,并在发生丢包时明确报错;不能仅凭绘出了波形就判断数据完整。

5. 板级验证

5.1 断电连接

所有模块插拔和跳线调整均应在断电状态下完成。

  1. 将 ACFL3432 正确插入FMC_LPC 接口;
  2. 将FMC VADJ 设置为 1.5 V,并再次核对板卡说明和跳线位置;
  3. 将信号发生器接到待测 ADC 通道,起始测试使用幅度较低且不超过模块允许范围的正弦波;
  4. 将电脑千兆网口通过网线连接到 SU200P 的 ETH2/J2;
  5. 连接 JTAG 下载器和开发板电源,然后上电。

5.2 下载 PDI

  1. 打开 acfl3432_udp_ddr4.xpr
  2. 进入 Open Hardware Manager
  3. 选择 Open Target → Auto Connect
  4. 确认识别到 xcsu200p
  5. 选择 Program Device,下载 bit\acfl3432_udp_ddr4.pdi
  6. 如 Vivado 要求指定 probes 文件,可同时选择同目录下的 acfl3432_udp_ddr4.ltx

默认 DEBUG_LEDS=1 时,4 个调试 LED 的逻辑含义如下:

LED顶层逻辑含义预期逻辑状态
LED1 led[0]系统心跳约每秒翻转一次
LED2 led[1]系统复位已释放初始化后为 1
LED3 led[2]DP83867 千兆链路建立千兆连接正常后为 1
LED4 led[3]当前链路会话至少接收过一个合法 UDP 包首个合法命令后为 1

LED 只能帮助定位复位、链路和命令接收阶段,不能证明 DDR4 数据正确或 ADC 波形正确。

图片待补 2: Vivado Hardware Manager 下载成功界面,以及下载后 4 个调试 LED 的实物状态。

5.3 电脑网络设置

  1. 将与 J2 相连的电脑网卡设为 192.168.0.3,掩码设为 255.255.255.0,网关留空;
  2. 确认网卡协商速度为 1.0 Gbps;
  3. 添加 192.168.0.2 → 00-0A-35-01-FE-C0 静态项;
  4. 允许上位机通过 Windows 防火墙收发 UDP;
  5. 上位机绑定一个确定的本地 IPv4 和 UDP 端口,然后从同一个 socket 向 192.168.0.2:5000 发送命令并接收返回数据。

仅执行 ping 192.168.0.2 不能验证本工程,因为 FPGA 逻辑未实现 ICMP 回显。

5.4 双通道 25 kHz 正弦波和 50 kHz 三角波测试

按以下参数设置双通道实验:

项目设置
A 通道输入25 kHz 正弦波,直流偏置为 0,Vpp +-2.5
B 通道输入50 kHz 三角波,直流偏置为 0,Vpp +-2.5
通道选择双通道
采样数量16K
总字节数65536字节,即 0x00004000
抽取参数divider=24,250 MHz DCO 下约为 10 MSPS
UDP 返回长度12 个数据报,总计 16384 字节

信号发生器的两路输出应与 ACFL3432 共地。先确认输入幅度没有超过模块允许范围,再发送第 4.3 节的双通道命令。10 MSPS 下每点间隔约 0.1 μs,4096 点覆盖约 409.6 μs。

若 A、B 两路波形相同、通道顺序颠倒、周期数明显不符或总字节数不足,可尝试修改ACFL3432寄存器或检查是否丢包。

6. 常见问题

6.1 LED3 没有进入千兆链路状态

检查网线、电脑网卡是否支持千兆、自动协商是否开启,以及是否连接到 J2/ETH2。工程只按千兆 GMII 工作,百兆链路不能作为本实验的替代测试。

6.2 LED3 正常但 LED4 不置位

检查电脑静态 IP、静态项、目标地址 192.168.0.2:5000 和防火墙。命令必须包含完整的 55 A5 ... F0 帧;FPGA 还会校验以太网 FCS、IPv4 头校验和、分片标志和 UDP 长度。

6.3 LED4 已置位但没有返回采样数据

先使用通道 0 的内部斜坡数据和较小字节数测试返回路径。开始命令要求 DDR4 校准、ADC 时钟锁定、ADC 接收复位释放和 SPI 初始化均处于就绪状态。双通道字节数不是 4 的整数倍、单通道字节数不是偶数或长度超过 1 GiB 时,开始命令会被判为无效。

6.4 收到的数据长度不足

UDP 不重传,且本工程没有为数据包添加序号。检查上位机 socket 接收缓冲、处理速度和每个数据报的长度;从 16 KiB 开始逐步增加,不要直接使用大数据量。实收总字节数不足时,本次采集不能判为通过。

6.5 两路数据相同或波形异常

先检查进入 UDP/DDR4 之前的 sample_asample_brise_datafall_data。若这些原始信号已经相同,问题位于 ADC 输出模式、FMC 接线、DCO 相位或 FPGA 输入采样位置,不在 UDP 分包或 DDR4 读回。不要通过关闭输入时序检查或添加错误的 false_path 来制造实现通过。

6.6 250 MSPS 实现时序不通过

当前接收结构为 XP5 差分输入缓冲、BUFG 和逻辑区双沿触发器。应以最新实现的 Timing Summary、输入延时模型和板上原始数据为判断依据。若不满足时序,应降低采样时钟或重新设计专用 I/O 采样结构,并重新完成实现和板级测试。

7. 总结

本工程实现了 ACFL3432 命令控制、内部斜坡测试、单/双通道采集、DDR4 缓存和 UDP 回传,发布目录中存在 PDI、BIT 和 LTX 文件。

最终实验结论还需要补齐最新实现时序、SU200P 实物连接、UDP 数据完整性,以及 A 通道 10 kHz 正弦波和 B 通道 20 kHz 三角波的实际采集结果。板级数据齐全后,应删除本说明中的图片占位,并将预期现象与实际测量结果逐项对照。

QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

GMT+8, 2026-9-22 00:40 , Processed in 0.026212 second(s), 12 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

返回顶部