ADS8364及AD5758芯片驱动设计VHDL代码Quartus仿真

名称:ADS8364及AD5758芯片驱动设计VHDL代码Quartus仿真(文末获取)

软件:Quartus

语言:VHDL

代码功能:

ADS8364及AD5758芯片驱动设计

本设计的要求如下:ADS8364输入,(5400-输入)9 (仿真时=学号后3位),AD5758输出。

1.工程文件

2.程序文件

3.程序编译

资源消耗

系统主频:50MHz

电路功耗:58.83mW

4.RTL图

5.管脚分配(约束)

6.仿真图

乘法器仿真

Testbench(仿真脚本)

仿真图

十六机制显示

十进制显示

串口收发仿真

Testbench(仿真脚本)

仿真图

数据处理模块仿真

Testbench(仿真脚本)

仿真图

十六进制显示

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--AD5758控制模块
ENTITY AD5758 IS
   PORT (
      clk_da      : IN STD_LOGIC;
      rst_n       : IN STD_LOGIC;
      data        : IN STD_LOGIC_VECTOR(15 DOWNTO 0);--AD5758输入数字量
      ad1         : OUT STD_LOGIC;--AD5758端口
      ad0         : OUT STD_LOGIC;--AD5758端口
      da_reset_n  : OUT STD_LOGIC;--AD5758端口
      da_ldac_n   : OUT STD_LOGIC;--AD5758端口
      da_sync_n   : OUT STD_LOGIC;--AD5758端口
      da_sclk     : OUT STD_LOGIC;--AD5758端口
      da_sdi      : OUT STD_LOGIC --AD5758端口
   );
END AD5758;
ARCHITECTURE RTL OF AD5758 IS
   type state_type is(  
      s_reset     ,
      s_wait      ,
      s_sync      ,
      s_stop      
   );
   SIGNAL state    : state_type;
   SIGNAL crc      : STD_LOGIC_VECTOR(7 DOWNTO 0);
   SIGNAL da_data  : STD_LOGIC_VECTOR(31 DOWNTO 0);
   
   SIGNAL wait_cnt : STD_LOGIC_VECTOR(7 DOWNTO 0);
   SIGNAL sync_cnt : STD_LOGIC_VECTOR(7 DOWNTO 0);
   SIGNAL stop_cnt : STD_LOGIC_VECTOR(7 DOWNTO 0);
   SIGNAL crc_reg_d : STD_LOGIC_VECTOR(7 DOWNTO 0);
   SIGNAL crc_reg_q : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
--输出定值
   da_ldac_n <= '0';
   ad1 <= '0';
   ad0 <= '0';
--状态机控制
   PROCESS (clk_da, rst_n)
   BEGIN
      IF ((NOT(rst_n)) = '1') THEN
         state <= s_reset;
      ELSIF (clk_da'EVENT AND clk_da = '1') THEN
         CASE state IS
            WHEN s_reset =>
               state <= s_wait;
            WHEN s_wait =>
               IF (wait_cnt > "00110010") THEN
                  state <= s_sync;
               END IF;
            WHEN s_sync =>
               IF (sync_cnt > "00100000") THEN
                  state <= s_stop;
               END IF;
            WHEN s_stop =>
               IF (stop_cnt > "00001010") THEN
                  state <= s_sync;
               END IF;
            WHEN OTHERS =>
               state <= s_wait;
         END CASE;
      END IF;
   END PROCESS;
   
   --等待计时
   PROCESS (clk_da, rst_n)
   BEGIN
      IF ((NOT(rst_n)) = '1') THEN
         wait_cnt <= "00000000";
      ELSIF (clk_da'EVENT AND clk_da = '1') THEN
         IF (state = s_wait) THEN
            wait_cnt <= wait_cnt + "00000001";
         ELSE
            wait_cnt <= "00000000";
         END IF;
      END IF;
   END PROCESS;
源代码

点击下方的公众号卡片获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值