跳到主要内容FPGA 基于 AD7606 的 8 通道高速同步采集系统设计与 Verilog 实现 | 极客日志编程语言
FPGA 基于 AD7606 的 8 通道高速同步采集系统设计与 Verilog 实现
AD7606 是一款 16 位 8 通道同步采样 ADC。系统设计涵盖 FPGA 驱动、顶层接口、时钟复位、SPI 控制逻辑、数据解析及 ILA 调试实践。采用串行 SPI 模式,通过状态机管理转换与读取时序,支持双 CONVST 实现真正同步采样。代码示例展示 Verilog 模块实例化与信号处理,提供过采样、动态量程切换等优化建议,适用于工业控制与高精度数据采集场景。
筑梦师1 浏览 概述
在工业控制、电力监测、医疗设备、雷达信号处理等高精度多通道数据采集场景中,ADI 公司的 AD7606 几乎成了行业标配。它是一款 16 位、8 通道、真差分输入、同步采样 ADC,最高支持 200 kSPS 采样率,内置抗混叠滤波器和可编程增益,极大简化了前端模拟电路设计。
如何用 FPGA 高效驱动 AD7606,并实现稳定可靠的数据读取?这是本文要深入剖析的核心问题。
系统架构
AD7606 关键特性
- 8 通道同步采样(CH0~CH7)
- 16 位分辨率,±5V 或±10V 输入范围(由 RANGE 引脚控制)
- 并行/串行输出模式(本设计采用串行 SPI 模式)
CONVST A/B:启动 A 组/B 组转换(可独立或同时触发)BUSY:转换忙信号,高电平有效CS + SCLK + DoutA/DoutB:双数据流 SPI 接口注意:AD7606 在串行模式下,一次读取需 96 个 SCLK 周期(8 通道 × 16 位 = 128 位?错!实际为双通道并行输出,故仅需 64 位 × 2 = 128 位?不!正确理解见后文)。
- DoutA 输出 CH0~CH3(4 通道 × 16 位 = 64 位)
- DoutB 输出 CH4~CH7(4 通道 × 16 位 = 64 位)
- 因此总共需要 128 个 SCLK 周期完成全部 8 通道读取。
顶层模块接口
module ad7606_top(
input clk_in1_p, // 差分时钟正端(如 100MHz)
input clk_in1_n, // 差分时钟负端
output pen_o, // 板载电源使能(常拉高)
input ad_busy_i, // AD7606 忙信号
output ad_cs_o, // 片选
output ad_sclk_o, // SPI 时钟
output ad_rst_o, // AD7606 复位(低有效)
output ad_convsta_o,// CONVST A
output ad_convstb_o,// CONVST B
output ad_range_o, // 量程选择(0: ±10V, 1: ±5V)
input ad_out_a_i, // DoutA
input ad_out_b_i // DoutB
);
说明:该接口设计简洁规范,符合工业级 FPGA 工程命名习惯(_i 输入,_o 输出),且预留了调试信号(如 ILA 探针),体现专业素养。
时钟与复位
差分时钟转单端 & PLL 使用
wire clk100M, locked;
clk_wiz_0 clk_7606_inst (
.clk_out1(clk100M),
.locked(locked),
.clk_in1_n(clk_in1_n),
.clk_in1_p(clk_in1_p)
);
- 使用 Xilinx Clocking Wizard IP 核将外部差分时钟(如 100MHz LVDS)转换为内部单端时钟。
- locked 信号用于生成异步复位同步释放(ARSR)的复位信号。
复位逻辑设计
assign ad_rst_i = !locked;
- 当 PLL 未锁定时,ad_rst_i = 1,复位整个 AD7606 控制逻辑。
- ad_rst_o 输出到 AD7606 的 RESET 引脚(低有效),故在子模块中会取反。
调试建议:务必在上电初期确保 locked=1 后再启动采集,否则 SPI 时序可能紊乱。
核心控制逻辑
虽然本文未给出 uispi7606.v 源码,但从实例化参数可推断其功能:
uispi7606 #(
.SPI_DIV(10'd5), // SCLK 分频系数 → 实际 SCLK = 100MHz / (2*(5+1)) ≈ 8.33MHz
.T5US_DIV(10'd999) // 5us 延时计数(用于 CONVST 脉宽或 CS 建立时间)
) uispi7606_inst (
.ad_clk_i(clk100M),
.ad_rst_i(!locked),
.ad_busy_i(ad_busy_i),
.ad_cs_o(ad_cs_o),
.ad_sclk_o(ad_sclk_o),
.ad_rst_o(ad_rst_o),
.ad_convsta_o(ad_convsta_o),
.ad_convstb_o(ad_convstb_o),
.ad_range_o(ad_range_o),
.ad_out_a_i(ad_out_a_i),
.ad_out_b_i(ad_out_b_i),
.ad_out_a(ad_out_a), // [63:0] 组合后的 CH0~CH3
.ad_out_b(ad_out_b), // [63:0] 组合后的 CH4~CH7
.ad_cap_en(ad_cap_en) // 采集使能标志(用于 ILA 触发)
);
关键设计亮点
- 双 CONVST 控制:同时拉高 ad_convsta_o 和 ad_convstb_o,实现 8 通道真正同步采样。
- SPI 时钟可配置:通过 SPI_DIV 灵活调整 SCLK 速率,适配不同 PCB 走线长度。
- 自动状态机管理:内部应包含'空闲→启动转换→等待 BUSY↓→读取数据'状态机。
- 数据拼接:将串行输入的 bit 流重组为 64 位并行数据(每 16 位一通道)。
性能提示:AD7606 最大 SCLK 频率为 20MHz(串行模式),此处 8.33MHz 完全满足要求,且留有余量。
数据解析
通道数据拆分
wire [15:0] ad_ch1 = ad_out_a[63:48]; // CH0
wire [15:0] ad_ch2 = ad_out_a[47:32]; // CH1
wire [15:0] ad_ch3 = ad_out_a[31:16]; // CH2
wire [15:0] ad_ch4 = ad_out_a[15: 0]; // CH3
wire [15:0] ad_ch5 = ad_out_b[63:48]; // CH4
wire [15:0] ad_ch6 = ad_out_b[47:32]; // CH5
wire [15:0] ad_ch7 = ad_out_b[31:16]; // CH6
wire [15:0] ad_ch8 = ad_out_b[15: 0]; // CH7
说明:虽然命名为 ch1~ch8,但实际对应 AD7606 的 V1~V8(即 CH0~CH7),注意文档一致性。
数据格式说明
- 16 位二进制补码(Two's Complement)
- 满量程对应:
- ±10V:0x7FFF = +10V, 0x8000 = -10V
- ±5V:0x7FFF = +5V, 0x8000 = -5V
后续可接 FIFO、DDR3 缓存或通过 UART/ETH 上传至上位机。
在线调试
ila_0 ila_debug (
.clk(ad_clk_i),
.probe0(ad_cap_en),
.probe1(ad_ch1), .probe2(ad_ch2), ..., .probe8(ad_ch8),
.probe9(ad_convsta_o), .probe10(ad_convstb_o),
.probe11(ad_busy_i)
);
- 使用 Xilinx Integrated Logic Analyzer (ILA) 实时捕获:
- 所有 8 通道 ADC 数据
- 控制信号(CONVST、BUSY)
- 采集使能标志
调试技巧:触发条件设为 ad_cap_en == 1,可精准捕获一次完整采集周期。观察 BUSY 下降沿是否对齐 CS 拉低,验证时序正确性。
工程优化
- 增加过采样(OS)支持
注释掉的.ad_os_o 可扩展为 3 位过采样控制(1x, 2x, 4x...512x),提升 ENOB。
- 动态量程切换
将 ad_range_o 改为寄存器控制,实现软件可配置±5V/±10V。
- 添加 FIFO 缓存
避免高速采集时数据丢失,尤其当后级处理较慢时。
- 跨时钟域处理(CDC)
若 ad_clk_i 与系统主时钟不同频,需用 FIFO 或握手协议传递数据。
- 功耗优化
在空闲时拉低 CONVST,使 AD7606 进入低功耗模式。
相关免费在线工具
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
- HTML转Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
- JSON 压缩
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
- JSON美化和格式化
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online