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

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

09/16 10:13
274
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24101QP54Y60.doc

共1个文件

名称:ADS8364及AD5758驱动设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

ADS8364及AD5758驱动设计

本设计的要求如下:ADS8364输入,(5400-输入)/9 (仿真时=学号后3位),AD5758输出。根据要求,使用FPGA主控芯片,需要先控制ADS8364将模拟信号转换为数字信号,再在FPGA内进行数字信号处理,处理方式为(5400-输入)/9,得到计算结果后,再通过AD5758芯片将其转换为模拟信号输出。

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

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 仿真图

整体仿真图

分频模块

ADS8364模块

AD5758模块

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
-- 定义AD5758实体  
ENTITY AD5758 IS  
   PORT (  
      clk_in    : IN STD_LOGIC;            -- 输入时钟信号  
      rst_in    : IN STD_LOGIC;            -- 输入复位信号  
      data_in  : IN STD_LOGIC_VECTOR(15 DOWNTO 0);  -- 输入的16位数据  
      da_addr   : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);  -- 输出的2位地址信号  
      da_sync   : OUT STD_LOGIC;           -- 输出的同步信号  
      da_sclk   : OUT STD_LOGIC;           -- 输出的串行时钟信号  
      da_reset  : OUT STD_LOGIC;           -- 输出的复位信号  
      da_ldac   : OUT STD_LOGIC;           -- 输出的加载DAC信号  
      da_sdi    : OUT STD_LOGIC           -- 输出的串行数据输入信号  
   );  
END AD5758;  
  
-- 定义behave架构  
ARCHITECTURE behave OF AD5758 IS  
   SIGNAL AD5758_spi_data : STD_LOGIC_VECTOR(31 DOWNTO 0);  -- SPI数据信号,32位  
   SIGNAL send_data : STD_LOGIC_VECTOR(31 DOWNTO 0);        -- 发送数据信号,32位  
   SIGNAL crc : STD_LOGIC_VECTOR(7 DOWNTO 0);               -- CRC校验值,8位  
   SIGNAL crc_value : STD_LOGIC_VECTOR(7 DOWNTO 0);         -- CRC期望值或计算值,8位  
   SIGNAL state_cnt : STD_LOGIC_VECTOR(1 DOWNTO 0);         -- 状态计数器,2位  
   SIGNAL wait_time : INTEGER;                             -- 等待时间计数器  
   SIGNAL work_window : INTEGER;                           -- 工作窗口计数器  
BEGIN  
  
   -- 处理时钟和复位信号,更新状态计数器  
   PROCESS (clk_in, rst_in)  
   BEGIN  
      IF ((NOT(rst_in)) = '1') THEN          -- 当复位信号
         state_cnt <= "00";                  -- 初始化状态计数器为"00"  
      ELSIF (clk_in'EVENT AND clk_in = '1') THEN  -- 当检测到时钟上升沿时  
         CASE state_cnt IS                  -- 根据状态计数器的值进行状态转换  
            WHEN "00" =>  
               state_cnt <= "01";            -- 状态从"00"转到"01"  
            WHEN "01" =>  
               IF (wait_time > 40) THEN      -- 如果等待时间大于40  
                  state_cnt <= "10";         -- 状态转到"10"  
               ELSE  
                  state_cnt <= "01";         -- 否则保持在"01"状态  
               END IF;  
            WHEN "10" =>  
               IF (work_window > 32) THEN    -- 如果工作窗口大于32  
                  state_cnt <= "11";         -- 状态转到"11"  
               ELSE  
                  state_cnt <= "10";         -- 否则保持在"10"状态  
               END IF;  
            WHEN OTHERS => null;             -- 对于其他情况,不执行任何操作  
         END CASE;  
      END IF;  
   END PROCESS;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1229

  • 2-24101QP54Y60.doc
    下载

相关推荐