AD7321代码SPI接口模数转换连接DAC0832输出verilog

名称:AD7321代码12位ADC,SPI接口模数转换连接DAC0832输出

软件:QuartusII

语言:VHDL

代码功能:

使用VHDL语言编写代码,实现AD7321的控制,将模拟信号转换为数字信号,再经过处理后,将数据通过DAC0832转换为模拟信号输出

AD7321输入,(2000-输入)/6(仿真输出=009),DAC0832输出。

要求:有vhdl代码(详尽注释),有fpga连线图,有完整功能仿真结果,有方案分析。

演示视频:AD7321代码12位ADC,SPI接口模数转换连接DAC0832输出

FPGA代码Verilog/VHDL代码资源下载网:www.hdlcode.com

代码下载:

AD7321代码12位ADC,SPI接口模数转换连接DAC0832输出(代码在文末付费下载)软件:QuartusII语言:VHDL代码功能:使用VHDL语言编写代码,实现AD7321的控制,将模拟信号转换为数字信号,再经过处理后,将数据通过DAC0832转换为模拟信号输出AD7321输入,(2000-输入)/6(仿真输出=009),DAC0832输出。要求:有vhdl代码(详尽注释),有fp名称:AD7321代码12位ADC,SPI接口模数转换连接DAC0832输出(代码在文末付费下载)软件:QuartusII语言:VHDL代码功能:使用VHDL语言编写代码,实现AD7321的控制,将模拟信号转换为数字信号,再经过处理后,将数据通过DAC0832转换为模拟信号输出AD7321输入,(2000-输入)/6(仿真输出=009),DAC0832输出。要求:有vhdl代码(详尽注释),有fpicon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=219

部分代码展示

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--AD控制模块,输出011110011010
ENTITY AD7321 IS
   PORT (
      clk     : IN STD_LOGIC;--时钟
      rst     : IN STD_LOGIC;--复位
      CS_n    : OUT STD_LOGIC;--AD控制信号
      SCLK    : OUT STD_LOGIC;--AD控制信号
      DOUT    : IN STD_LOGIC;--AD控制信号
      DIN     : OUT STD_LOGIC;--AD控制信号
      DB      : OUT STD_LOGIC_VECTOR(11 DOWNTO 0)--输出AD值
   );
END AD7321;
ARCHITECTURE behaval OF AD7321 IS
   TYPE State_type IS (s_init, s_cs_h, s_sclk, s_end);  -- 定义状态
   SIGNAL state : State_type;
   SIGNAL cs_h_cnt : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000";--CS计数
   SIGNAL sclk_cnt : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";--sclk计数
BEGIN
--状态机控制
   PROCESS (clk, rst)
   BEGIN
      IF (rst = '1') THEN--复位
         state <= s_init;
      ELSIF (clk'EVENT AND clk = '1') THEN--时钟上升沿
         CASE state IS
            WHEN s_init =>--初始状态
               state <= s_cs_h;
            WHEN s_cs_h =>--cS高电平状态
               IF (cs_h_cnt >= "1010") THEN--计数10个时钟
                  state <= s_sclk;
               END IF;
            WHEN s_sclk =>--SCLK状态
               IF (sclk_cnt >= "00100000") THEN--计数32时钟
                  state <= s_end;--结束
               END IF;
            WHEN s_end =>--结束状态
               state <= s_init;
            WHEN OTHERS =>
         END CASE;
      END IF;
   END PROCESS;
   
   --根据状态控制CS信号
   PROCESS (clk, rst)
   BEGIN
      IF (rst = '1') THEN
         CS_n <= '1';--复位
      ELSIF (clk'EVENT AND clk = '1') THEN--时钟上升沿
         IF (state = s_cs_h) THEN--CS高电平状态
            CS_n <= '1';--输出高电平
         ELSIF (state = s_sclk) THEN--SCLK状态
            CS_n <= '0';--输出低电平
         END IF;
      END IF;
   END PROCESS;
   
   --根据状态控制SCLK信号
   PROCESS (clk, rst)
   BEGIN
      IF (rst = '1') THEN
         SCLK <= '1';--复位
      ELSIF (clk'EVENT AND clk = '1') THEN--时钟上升沿
         IF (state = s_sclk) THEN--SCLK状态
            SCLK <= NOT(sclk_cnt(0));--SCLK输出sclk_cnt(0)取反信号作为SCLK
         ELSIF (state = s_end) THEN
            SCLK <= '1';
         END IF;
      END IF;
   END PROCESS;

设计文档:

设计文档.doc

1. 工程文件

2. 程序文件

连线图

3. 程序编译

4. RTL图

5. 仿真图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值