• 方案介绍
  • 相关推荐
申请入驻 产业图谱

AD9248 双通道采集驱动 Verilog Vivado 电路设计方案

19小时前
225
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称:AD9248 双通道采集驱动 Verilog Vivado

软件:Vivado

语言:Verilog

功能介绍

本设计实现 AD9248 双通道 ADCFPGA 采集驱动,面向需要快速验证 AD9248 数据接口、采样时钟输出和在线数据观察的应用场景。工程使用 Verilog 编写,在 Vivado 环境下完成综合、实现和 bit 文件生成,可作为 ADC 前端采集板调试、双通道并行采样验证以及后续数据处理模块接入的基础工程。

核心功能包括为 AD9248 的 A/B 两个通道提供同源采样时钟,接收两路 14 位并行采样数据,并同步采集 ORA/ORB 溢出状态信号。设计中通过 `card_power_en` 输出使能前端采集卡电源,便于上电后直接进行 ADC 接口联调。

采集数据在 65MHz 时钟域下寄存一次后送入 ILA 在线逻辑分析仪,用户可以在 Vivado Hardware Manager 中直接观察 A 通道数据、B 通道数据以及对应的溢出标志状态。该结构适合用于硬件通路确认、ADC 输出数据稳定性观察和后续算法模块接入前的原始数据验证。

运行环境

开发语言:Verilog

开发软件:Vivado

顶层模块:ad9248_driver

主要 IP:clk_wiz_0 时钟 IP、ila_0 在线逻辑分析仪 IP

工程形态:Vivado FPGA 工程,已生成实现结果和 bit 文件。

设计思路

设计以 FPGA 系统时钟 `sysclk_i` 作为输入时钟,先通过 Vivado Clocking Wizard IP 生成 65MHz 时钟 `clk65m`。该时钟一方面输出到 `ad9248_clka` 和 `ad9248_clkb`,为 AD9248 的 A/B 两路通道提供采样驱动时钟;另一方面作为 FPGA 内部采样寄存和 ILA 观测的工作时钟,使外部 ADC 时序和内部数据捕获保持在同一时钟域内。

AD9248 的 A 通道数据 `ad9248_da[13:0]` 与 B 通道数据 `ad9248_db[13:0]` 在 `clk65m` 上升沿分别寄存到 `ad9248_da_r` 和 `ad9248_db_r`。这种一级寄存方式可以把 ADC 并行输出稳定地锁存到 FPGA 内部,为后续滤波、缓存、总线传输或显示处理提供清晰的数据入口。

调试部分采用 ILA 在线逻辑分析仪,将两路 14 位采样数据和两个溢出指示信号同时接入探针。调试时不需要额外编写串口或显示输出逻辑,即可在 Vivado 中查看实时采集波形和数值变化,适合 ADC 接口初次点亮、时钟频率确认、数据线连接检查以及输入信号变化观察。

模块结构

`ad9248_driver` 为顶层模块,接口包括 100MHz 系统时钟输入、AD9248 A/B 通道采样时钟输出、A/B 两路 14 位数据输入、ORA/ORB 溢出标志输入以及前端采集卡电源使能输出。

`clk_wiz_0` 用于由系统时钟产生 65MHz ADC 工作时钟,输出时钟同时连接到 AD9248 的 CLKA/CLKB 和内部采样逻辑。

`ila_0` 用于在线观察寄存后的 A/B 通道采样数据及 ORA/ORB 状态,便于在板级调试阶段直接查看 ADC 采集结果。

开发板验证

本设计带有管脚约束文件并配套开发板实物相关图片,Vivado 工程已完成实现流程并生成 bit 文件,可用于开发板上进行 AD9248 双通道采集链路验证。板级验证重点包括 65MHz 采样时钟输出、前端电源使能、A/B 两路并行数据采集以及 ILA 在线观察采样数据和溢出标志。

AD9248 双通道采集驱动 Verilog Vivado 开发板验证图片 (2).jpg

AD9248 双通道采集驱动 Verilog Vivado 开发板验证图片 (1).jpg

仿真图/仿真说明/设计文档图片

工程包含 Vivado 生成的 clk_wiz_0 与 ila_0 相关仿真脚本目录,可用于按 Vivado IP 流程进行参考验证。当前内容以板级在线调试和 ILA 观测为主。

部分代码

以下展示顶层模块 ad9248_driver 的部分代码,完整源码请下载压缩包查看。

module ad9248_driver(
input wire sysclk_i,//100MHz
output wire ad9248_clka,
input wire ad9248_ora,
input wire [13:0] ad9248_da,

output wire ad9248_clkb,
input wire ad9248_orb,
input wire [13:0] ad9248_db,
output wire card_power_en
);
assign card_power_en = 1\'b1;//使能FEP电源

//使用PLL产生65M的时钟提供给AD9248使用
wire clk65m;
clk_wiz_0 clk_wiz_ad(
.clk_out1(clk65m), 
.clk_in1(sysclk_i)
);

assign ad9248_clka = clk65m;
assign ad9248_clkb = clk65m;

reg [13:0] ad9248_da_r,ad9248_db_r;


//对采集的数据寄存一次
always@(posedge clk65m)begin
ad9248_da_r <= ad9248_da;
ad9248_db_r <= ad9248_db;
end

//用ILA在线逻辑分析仪查看数据
ila_0 ila_db (
.clk(clk65m),
.probe0(ad9248_da_r),
.probe1(ad9248_ora),
.probe2(ad9248_db_r),
.probe3(ad9248_orb)
);

endmodule

代码文件(付费下载)

相关推荐