首页 > 其他分享 >基于FPGA的AD7303/ADCS7476模拟数字转换VHDL开发

基于FPGA的AD7303/ADCS7476模拟数字转换VHDL开发

时间:2022-11-26 21:23:27浏览次数:67  
标签:STD ADCS7476 END FPGA VHDL clk adc LOGIC rst

目录

一、理论基础

二、核心程序

三、测试结果


 

一、理论基础

在Altera NIOS板上设计和实现一个格式转换系统,该系统读取模拟输入,将其转换为数字数据,然后将其反向转换为模拟格式。这将通过使用SPI MCP3202 12位A/D转换器进行模拟输入来实现,以生成数字数据流,然后使用Analog Devices 8位SPI AD7303 D/A转换器将数字数据用于生成模拟输出。数字输出还通过中间的低通滤波器(FIR)。分配给我的采样频率和截止频率分别为23 kHz和2.3 kHz。

12bit位宽的ADCS7476,根据技术文档datasheet可知:

 

 

主要接口包括CS片选接口,SCLK时钟,SDATA数据,然后这个芯片是2路信号,然后我这里接口都预留了,然后实际用一个就可以了。

      他的时序如下所示:

 

 然后看AD7303。

 

 这个的话,确实得按这个状态图进行设计。通过状态机的方式实现。

二、核心程序


LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY adcs7476 IS
PORT (
clk : IN STD_LOGIC;
rst : IN STD_LOGIC;
adc_cs_b : OUT STD_LOGIC;
adc_clk : OUT STD_LOGIC;
adc_data0 : IN STD_LOGIC;
adc_data1 : IN STD_LOGIC;
v0 : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
v1 : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
rdy : OUT STD_LOGIC;
delay : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
count : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)
);
END adcs7476;
ARCHITECTURE trans OF adcs7476 IS
SIGNAL tmp0 : STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL tmp1 : STD_LOGIC_VECTOR(11 DOWNTO 0);
-- Declare intermediate signals for referenced outputs
SIGNAL adc_cs_b_Reg1 : STD_LOGIC;
SIGNAL adc_clk_Reg0 : STD_LOGIC;
SIGNAL v0_Reg5 : STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL v1_Reg6 : STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL rdy_Reg4 : STD_LOGIC;
SIGNAL delay_Reg3 : STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL count_Reg2 : STD_LOGIC_VECTOR(6 DOWNTO 0);
BEGIN
-- Drive referenced outputs
adc_cs_b <= adc_cs_b_Reg1;
adc_clk <= adc_clk_Reg0;
v0 <= v0_Reg5;
v1 <= v1_Reg6;
rdy <= rdy_Reg4;
delay <= delay_Reg3;
count <= count_Reg2;
PROCESS (clk, rst)
BEGIN
IF (rst = '1') THEN
delay_Reg3 <= "00000000000000000000000000000000";
ELSIF (clk'EVENT AND clk = '1') THEN
IF (delay_Reg3 = "00000000000000000000000000000010") THEN
delay_Reg3 <= "00000000000000000000000000000000";
ELSE
delay_Reg3 <= delay_Reg3 + "00000000000000000000000000000001";
END IF;
END IF;
END PROCESS;
PROCESS (clk, rst)
BEGIN
IF (rst = '1') THEN
count_Reg2 <= "0000000";
ELSIF (clk'EVENT AND clk = '1') THEN
IF (delay_Reg3 = "00000000000000000000000000000000") THEN
IF (count_Reg2 = "0101110") THEN
count_Reg2 <= "0000000";
ELSE
count_Reg2 <= count_Reg2 + "0000001";
END IF;
END IF;
END IF;
END PROCESS;
PROCESS (clk, rst)
BEGIN
IF (rst = '1') THEN
adc_cs_b_Reg1 <= '0';
adc_clk_Reg0 <= '0';
rdy_Reg4 <= '0';
ELSIF (clk'EVENT AND clk = '1') THEN
IF (count_Reg2 < "0100000") THEN
adc_cs_b_Reg1 <= '0';
ELSE
adc_cs_b_Reg1 <= '1';
END IF;
IF (count_Reg2 = "0100000") THEN
rdy_Reg4 <= '1';
ELSE
rdy_Reg4 <= '0';
END IF;
adc_clk_Reg0 <= count_Reg2(0);
END IF;
END PROCESS;
PROCESS (clk, rst)
BEGIN
IF (rst = '1') THEN
tmp0 <= "000000000000";
tmp1 <= "000000000000";
ELSIF (clk'EVENT AND clk = '1') THEN
IF (delay_Reg3 = "00000000000000000000000000000000") THEN
IF (((NOT(adc_clk_Reg0)) = '1' OR adc_cs_b_Reg1 = '1') = true) THEN
tmp0 <= tmp0;
ELSE
tmp0 <= (tmp0(10 DOWNTO 0) & adc_data0);
END IF;
IF (((NOT(adc_clk_Reg0)) = '1' OR adc_cs_b_Reg1 = '1') = true) THEN
tmp1 <= tmp1;
ELSE
tmp1 <= (tmp1(10 DOWNTO 0) & adc_data1);
END IF;
END IF;
END IF;
END PROCESS;
PROCESS (clk, rst)
BEGIN
IF (rst = '1') THEN
v0_Reg5 <= "000000000000";
v1_Reg6 <= "000000000000";
ELSIF (clk'EVENT AND clk = '1') THEN
IF (delay_Reg3 = "00000000000000000000000000000000") THEN
IF (rdy_Reg4 = '1') THEN
v0_Reg5 <= tmp0;
ELSE
v0_Reg5 <= v0_Reg5;
END IF;
IF (rdy_Reg4 = '1') THEN
v1_Reg6 <= tmp1;
ELSE
v1_Reg6 <= v1_Reg6;
END IF;
END IF;
END IF;
END PROCESS;
END trans;

三、测试结果

ADCS7476然后位宽是12位,根据这些信息,我们的测试仿真结果如下所示:

 

 AD7303

 

 A28-63

标签:STD,ADCS7476,END,FPGA,VHDL,clk,adc,LOGIC,rst
From: https://www.cnblogs.com/matlabfpga/p/16928321.html

相关文章

  • FPGA+MPU+MCU三芯合一!米尔全自动血细胞分析仪解决方案
    全自动血细胞分析仪是医院临床检验应用非常广泛的仪器之一,用来检测红细胞、血红蛋白、白细胞、血小板等项目。是基于电子技术和自动化技术的全自动智能设备,功能齐全,操作简单......
  • 【FPGA & Verilog】手把手教你实现一个DDS信号发生器
    信号发⽣器的设计与实现1.输出波形:⽅波(占空⽐50%)、锯⻮波、三⻆波、脉冲信号(占空⽐连续可调)、正弦波、任意波等2.输出频率:100KHz3.波形选择:使⽤拨码开关选择 思路......
  • 学fpga(从verilog到hls)
            hls,全称为highlevelsynthesis。也就是说从更高一级的语言来完成电路的综合。从前,编写fpga只有一个方法,都是编写verilog类似的硬件语言。但是如何用c、c++......
  • 学fpga(在线verilog编程)
        很多编程不方便的同学,可以利用在线工具进行编程。比如现在,https://hdlbits.01xz.net/wiki/Main_Page这个网站就非常不错,适合暂时还没有安装quartus、vivado的同......
  • Going Deeper with Embedded FPGA Platform for Convolutional Neural Network
    题目:GoingDeeperwithEmbeddedFPGAPlatformforConvolutionalNeuralNetwork日期&会议:Proceedingsofthe2016ACM/SIGDAInternationalSymposiumonField-Prog......
  • FPGA HC-SR04
    moduledistance(clock,clr_n,trig,echo,out_dis);inputclock,clr_n;//时钟信号复位信号inputecho;//测距模块outputregtrig;//测距模块outputregout_dis;//......
  • DSP+FPGA评估板 TI TMS320C6657 1.25GHz-DSP原理图
         TI公司的TMS320C6655/57是不定点/浮点数字信号处理器(DSP),基于KeyStone多核架构,内核速度高达1.25GHz,集成了各种包括C66x内核,存储器子系统,外设和加速器在内的各......
  • FPGA ——防止信号被优化(转载)
    转载:https://blog.csdn.net/weixin_46062412/article/details/125299437Quartus对这种情况的处理是增加约束,共有2种情况:a,需要保留的信号类型是wire在定......
  • 【幅频均衡带通滤波器】基于FPGA的幅频均衡带通滤波器的
    1.软件版本matlab2013b,quartusii121.2.本算法理论知识带通滤波器在数字幅频均衡功率放大器中一个重要的组成部分,在介绍带通滤波器之前,我们首先来详细介绍一下数字幅频......
  • XC5VLX30T-2FF323I(XC5VLX30T-1FF323C) FPGA Virtex-5 LXT可编程器件
    概述Virtex-5FPGA有-3,-2,-1速度等级,其中-3具有最高的性能。Virtex-5FPGA直流和交流特性指定为商业和工业级别。除工作温度范围外,除非另有说明,所有直流和交流电气参数对于......