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

AD7606 八通道采集串口输出 FPGA 设计 Verilog Quartus

06/29 16:35
228
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称:AD7606 八通道采集串口输出 FPGA 设计 Verilog Quartus

软件:Quartus

语言:Verilog

开发板/平台:Cyclone IV FPGA开发板

功能介绍

本设计实现 AD7606 八通道 ADC 采集与串口输出功能,顶层模块为 ad706_test,使用 50MHz 系统时钟和低有效复位信号,完成 AD7606 控制接口、采样数据接收、电压换算以及 UART 数据发送等逻辑。设计面向 FPGA 数据采集应用,可用于学习 AD7606 并行接口时序控制、多通道采样数据组织和串口上传流程。

AD7606 接口部分包含 ad_data、ad_busy、first_data 等输入信号,以及 ad_os、ad_cs、ad_rd、ad_reset、ad_convstab 等控制输出信号。FPGA 通过转换启动、片选、读使能和复位控制完成 ADC 数据读取,并输出 8 路 16bit 采样结果。

采样数据进入电压转换模块后,被转换为各通道对应的 BCD 电压数据,同时提供每一路的正负号标志。随后 UART 模块将 8 路电压结果按串口方式发送,便于上位机或串口调试工具查看采集结果。整体结构清晰,适合在现有工程基础上扩展显示、存储、通信协议或进一步的数据处理功能。

运行环境

开发语言:Verilog

开发软件:Quartus

工程顶层:ad706_test

目标平台:Cyclone IV FPGA开发板

主要接口:AD7606 并行采样接口、UART 串口发送接口

设计思路

设计采用分层模块化结构,将 AD7606 时序控制、电压换算和串口发送拆分为独立模块,顶层 ad706_test 负责各模块之间的数据连接和控制信号组织。这样可以降低多通道 ADC 采集系统的调试难度,也方便单独修改采样控制、数值转换或串口输出格式。

AD7606 模块负责面向芯片的底层控制逻辑。它根据 busy 和 first_data 等反馈信号协调转换启动与数据读取过程,将外部 16bit 并行采样数据整理为 ch1 至 ch8 共 8 路通道数据输出。过采样倍率选择信号 ad_os 也在该接口模块中统一输出,便于根据实际采样需求配置 AD7606 工作方式。

volt_cal 模块承担采样值到电压显示数据的转换工作。顶层将 8 路原始采样值送入该模块,输出 ch1_dec 至 ch8_dec 的 20bit 电压数据,以及 ch1_sig 至 ch8_sig 的符号标志。该结构适合后续对接数码管、LCD、串口帧格式或其他显示通信模块。

UART 模块负责把换算后的多通道电压结果发送出去。顶层为 UART 提供 50MHz 时钟、复位信号、8 路 BCD 电压数据和符号标志,最终通过 tx 输出串口数据。整体数据路径为“AD7606 采样读取 -> 电压换算 -> UART 输出”,逻辑链路明确,便于进行工程移植和二次开发。

模块结构

顶层模块:ad706_test

主要模块包括:

ad7606:AD7606 采样控制与 8 路数据读取模块,输出 ch1 到 ch8 的 16bit 采样数据。

volt_cal:电压转换模块,将 8 路 ADC 原始数据转换为对应的 BCD 电压数据,并输出正负号标志。

uart:串口发送控制模块,接收各通道电压数据并通过 tx 输出。

uarttx:UART 发送底层模块。

bcd:BCD 数值转换相关模块。

clkdiv:时钟分频相关模块。

开发板验证

工程包含 Quartus 管脚约束与分配文件,可用于 Cyclone IV FPGA开发板的硬件验证。AD7606 数据线、控制线以及 UART 收发接口均通过工程约束进行 FPGA 管脚分配,适合结合开发板和 AD7606 模块进行实际采集测试。

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

工程包含 Quartus 编译输出文件以及 ModelSim 仿真相关生成文件,可作为综合、时序和仿真流程参考。未包含单独的波形截图说明。

部分代码

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

module ad706_test(
   input        clk,                  //50mhz
	input        rst_n,
	
	input [15:0] ad_data,            //ad7606 采样数据
	input        ad_busy,            //ad7606 忙标志位 
   input        first_data,         //ad7606 第一个数据标志位 	    
	output [2:0] ad_os,              //ad7606 过采样倍率选择
	output       ad_cs,              //ad7606 AD cs
	output       ad_rd,              //ad7606 AD data read
	output       ad_reset,           //ad7606 AD reset
	output       ad_convstab,        //ad7606 AD convert start
	
	input        rx,
	output       tx
		

    );


wire [15:0] ad_ch1;
wire [15:0] ad_ch2;
wire [15:0] ad_ch3;
wire [15:0] ad_ch4;
wire [15:0] ad_ch5;
wire [15:0] ad_ch6;
wire [15:0] ad_ch7;
wire [15:0] ad_ch8;

wire [19:0] ch1_dec;
wire [19:0] ch2_dec;
wire [19:0] ch3_dec;
wire [19:0] ch4_dec;
wire [19:0] ch5_dec;
wire [19:0] ch6_dec;
wire [19:0] ch7_dec;
wire [19:0] ch8_dec;

wire [7:0] ch1_sig;
wire [7:0] ch2_sig;
wire [7:0] ch3_sig;
wire [7:0] ch4_sig;
wire [7:0] ch5_sig;
wire [7:0] ch6_sig;
wire [7:0] ch7_sig;
wire [7:0] ch8_sig;


ad7606 u1(
	.clk              (clk),
	.rst_n            (rst_n),
	.ad_data          (ad_data),
	.ad_busy          (ad_busy),	
	.first_data       (first_data),	
	.ad_os            (ad_os),	
	.ad_cs            (ad_cs),
	.ad_rd            (ad_rd),	
	.ad_reset         (ad_reset),
	.ad_convstab      (ad_convstab),
	.ad_ch1           (ad_ch1),           //ch1 ad data 16bit
	.ad_ch2           (ad_ch2),           //ch2 ad data 16bit
	.ad_ch3           (ad_ch3),           //ch3 ad data 16bit
	.ad_ch4           (ad_ch4),           //ch4 ad data 16bit
	.ad_ch5           (ad_ch5),           //ch5 ad data 16bit
	.ad_ch6           (ad_ch6),           //ch6 ad data 16bit
	.ad_ch7           (ad_ch7),           //ch7 ad data 16bit
	.ad_ch8           (ad_ch8)            //ch8 ad data 16bit

	
    );

/**********电压转换程序***********/
volt_cal u2(
	.clk              (clk),
	.ad_reset         (ad_reset),
	.ad_ch1           (ad_ch1),           //ch1 ad data 16bit (input)
	.ad_ch2           (ad_ch2),           //ch2 ad data 16bit (input)
	.ad_ch3           (ad_ch3),           //ch3 ad data 16bit (input)
	.ad_ch4           (ad_ch4),           //ch4 ad data 16bit (input)
	.ad_ch5           (ad_ch5),           //ch5 ad data 16bit (input)
	.ad_ch6           (ad_ch6),           //ch6 ad data 16bit (input)
	.ad_ch7           (ad_ch7),           //ch7 ad data 16bit (input)
	.ad_ch8           (ad_ch8),           //ch8 ad data 16bit (input)
	
	.ch1_dec           (ch1_dec),         //ch1 ad voltage (output)
	.ch2_dec           (ch2_dec),         //ch2 ad voltage (output)
	.ch3_dec           (ch3_dec),         //ch3 ad voltage (output)
	.ch4_dec           (ch4_dec),         //ch4 ad voltage (output)
	.ch5_dec           (ch5_dec),         //ch5 ad voltage (output)
	.ch6_dec           (ch6_dec),         //ch6 ad voltage (output)
	.ch7_dec           (ch7_dec),         //ch7 ad voltage (output)
	.ch8_dec           (ch8_dec),         //ch8 ad voltage (output)
	
   .ch1_sig           (ch1_sig),         //ch1 ad 正负 (output)
	.ch2_sig           (ch2_sig),         //ch2 ad 正负 (output)
	.ch3_sig           (ch3_sig),         //ch3 ad 正负 (output)
	.ch4_sig           (ch4_sig),         //ch4 ad 正负 (output)
	.ch5_sig           (ch5_sig),         //ch5 ad 正负 (output)
	.ch6_sig           (ch6_sig),         //ch6 ad 正负 (output)
	.ch7_sig           (ch7_sig),         //ch7 ad 正负 (output)
	.ch8_sig           (ch8_sig)          //ch8 ad 正负 (output)
	
    );

/**********AD数据Uart串口发送程序***********/
uart u3(
		.clk50           		    (clk),	
		.reset_n           		 (rst_n),	

		.ch1_dec                 (ch1_dec),         //ad1 BCD voltage
		.ch2_dec                 (ch2_dec),         //ad2 BCD voltage
		.ch3_dec                 (ch3_dec),         //ad3 BCD voltage
		.ch4_dec                 (ch4_dec),         //ad4 BCD voltage
		.ch5_dec                 (ch5_dec),         //ad5 BCD voltage
		.ch6_dec                 (ch6_dec),         //ad6 BCD voltage
		.ch7_dec                 (ch7_dec),         //ad7 BCD voltage
		.ch8_dec                 (ch8_dec),         //ad8 BCD voltage		
	
		.ch1_sig                 (ch1_sig),          //ch1 ad 正负
		.ch2_sig                 (ch2_sig),          //ch2 ad 正负
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

相关推荐