FPGA之ADS8344驱动程序

本文详细介绍了在FPGA中实现ADS8344驱动程序的过程,包括ADS8344简介、模块代码分析、仿真过程及结果。作者在仿真中观察到信号的正确变化,但未进行板级验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FPGA之ADS8344驱动程序*

前言

在学习完小梅老师的《线性序列机与TLV1544驱动设计》后,本人受到小梅老师“用线性序列机”设计AD/DA驱动程序的启发后开始渴望掌握这种方法,于是开始拿“ADS8344”练手。

ADS8344简介

   ADS8344是采用20引脚QSDP封装或SSOP封装的芯片,是一个高速、低功耗、16位逐次逼近型ADC。(咱就做个简单的简介,更详细内容可以去参考ASD8344的数据手册)

时序图

模块代码分析

端口定义代码

module ADS8344(
      Clk,
		Rst_n,
		
		Do_Conv,     //开始转换使能信号
		ADS_CHSEL,   //模拟通道选择、模拟输入方式选择和功率管理选择信号
		ADS_DONE,    //转换完成信号
		
		ADS_DATA,
		DATA_Valid,  //数据有效信号,转换完成的有效数据给ADS_DATA
		
		ADS8344_CS,
		ADS8344_DCLK,
		ADS8344_DIN,
		ADS8344_BUSY,
		ADS8344_DOUT
		);

端口类型定义

input Clk;
		input Rst_n;
		input Do_Conv;
		
		input [7:0]ADS_CHSEL;
		
		output reg [15:0]ADS_DATA;
		output reg ADS_DONE;
		output reg DATA_Valid;
		
		output reg ADS8344_CS;
		output reg ADS8344_DCLK;
		output reg ADS8344_DIN;
		input   ADS8344_BUSY;
		input   ADS8344_DOUT;

定义两个寄存器,ADS_RDATA用于寄存ADS_DOUT转换输出的数据,LSM_CNT为9位的序列计数器

	reg [15:0]ADS_RDATA; //ADS8344_DOUT输出的数据先寄存在ADS_RDATA,当DATA_Valid为1时数据给ADS_DATA
	reg [8:0]LSM_CNT;   //序列计数器

复位

always@(posedge Clk or negedge Rst_n )
		   if(!Rst_n) 
			  LSM_CNT<=9'd0;
			else if((LSM_CNT<301)&&Do_Conv)   
			  LSM_CNT<=LSM_CNT+1'b1;
			else if(LSM_CNT==301)
			  LSM_CNT<=9'd0;
always@(posedge Clk or negedge Rst_n )
		    if(!Rst_n)
			   begin 
				  ADS8344_CS<=1'b1;
		        ADS8344_DCLK<=1'b0;
		        ADS8344_DIN<=1'b0;
				  ADS_DONE<=1'b0;
				  ADS_RDATA[15:0]<=16'd0;
				  DATA_Valid<=1'b0;
				  ADS_DATA<=16'd0;
				end 

当复位为1时(Rst_n==1’b1),开始执行程序,判断序列机LSM_CNT状态,根据其状态执行其相应状态下的语句。LSM_CNT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值