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

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

08/25 10:50
400
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-2409131A22OA.doc

共1个文件

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

软件:Quartus

语言:VHDL

代码功能:

ADS8364及AD5758芯片驱动设计

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

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

演示视频:

设计文档:

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;

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

  • 2-2409131A22OA.doc
    下载

相关推荐