名称:AD7606驱动代码设计VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
AD7606B输入
(4800-输入)/8(仿真时=学号后3位),
PWM输出
(600=100%)
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 仿真图
整体仿真图
AD7606模块
计算模块
PWM模块
部分代码展示:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
--AD7606模块
ENTITY AD7606 IS
PORT (
sys_clk : IN STD_LOGIC;--时钟
reset : IN STD_LOGIC;--复位
RD_n : OUT STD_LOGIC;--AD引脚
CONVST : OUT STD_LOGIC;--AD引脚
ADRESET : OUT STD_LOGIC;--AD引脚
CS_n : OUT STD_LOGIC;--AD引脚
BUSY : IN STD_LOGIC;--AD引脚
DB_IN : IN STD_LOGIC_VECTOR(15 DOWNTO 0);--AD值引脚
OS : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--AD引脚
DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)--采样值
);
END AD7606;
ARCHITECTURE RTL OF AD7606 IS
SIGNAL AD_state: STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL div_count : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL CONVST_signal : STD_LOGIC;
SIGNAL read_en : STD_LOGIC;
SIGNAL RD_END : STD_LOGIC;
SIGNAL count : STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL VIM_CNT : STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
OS <= "000";
ADRESET <= NOT reset ;
--AD状态控制
PROCESS (sys_clk, reset)
BEGIN
IF (reset = '0') THEN
AD_state <= "000";
div_count <= "00000000";
ELSIF (sys_clk'EVENT AND sys_clk = '1') THEN
CASE AD_state IS
WHEN "000" =>
IF (div_count = "01100100") THEN
div_count <= "00000000";--计数到100
ELSE
div_count <= div_count + "00000001";
END IF;
IF (div_count = "01100100") THEN---控制采样率,为系统时钟的100分频
AD_state <= "001";
END IF;
WHEN "001" =>
IF (CONVST_signal = '1') THEN--检测CONVST
AD_state <= "010";
END IF;
WHEN "010" =>
IF (BUSY= '0') THEN
AD_state <= "011";--检测BUSY
END IF;
WHEN "011" =>--读数
AD_state <= "100";
WHEN "100" =>
IF (RD_END = '1') THEN--读完成
AD_state <= "000";
END IF;
WHEN OTHERS =>
AD_state <= "000";
END CASE;
阅读全文
683