基于FPGA的AD7705输入设计VHDL代码Quartus仿真
名称:基于FPGA的AD7705输入设计VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
AD7705输入,(4000-输入)7(仿真输出=学号后3位),8位∪ART发送输出。
每位交一个pdf文档,联系应用井至少比较一种不同方案进行方案分析。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件

2. 程序文件





3. 程序编译

4. RTL图

5. 仿真图
AD7705模块仿真


--042=(4000-x)/7
--x=3706
--==0000111001111010
数据拆分模块仿真


分频模块

UART发送模块


部分代码展示:
-042=(4000-x)/7 --x=3706 --==0000111001111010 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; USE ieee.std_logic_arith.all; --AD7705驱动 ENTITY AD7705_driver IS PORT ( clk_in : IN STD_LOGIC; reset_n : IN STD_LOGIC;--系统复位信号,低有效 AD_data_out : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);--输出AD数据 AD_DRDY_n : IN STD_LOGIC;--AD7705 AD_dout : IN STD_LOGIC;--AD7705 AD_CS : OUT STD_LOGIC;--AD7705 AD_clk : OUT STD_LOGIC;--AD7705 AD_din : OUT STD_LOGIC--AD7705 ); END AD7705_driver; ARCHITECTURE behave OF AD7705_driver IS type state_type is( s_reset ,--FFFF s_communicate_clkreg ,--8'h20 s_clk_reg ,--8'h03 s_communicate_setreg ,--8'h10 s_set_reg ,--8'h40 s_communicate_datareg ,--8'h38,读通道1 s_read_data ,--读数16bit s_wait_DRDY --等待DRDY==0 ); SIGNAL state :state_type:=s_reset; --定义寄存器 SIGNAL communicate_clkreg : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00100000"; SIGNAL clk_reg : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000011"; SIGNAL communicate_setreg : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00010000"; SIGNAL set_reg : STD_LOGIC_VECTOR(7 DOWNTO 0) := "01000000"; SIGNAL communicate_datareg : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00111000"; SIGNAL cycle_cnt : integer := 0; SIGNAL AD_clk_reg : STD_LOGIC := '0'; SIGNAL AD_clk_reg_cnt : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL clk_en : STD_LOGIC := '0'; SIGNAL AD_din_reg : STD_LOGIC := '0'; SIGNAL AD_clk_reg_buf : STD_LOGIC := '0'; SIGNAL AD_clk_reg_down : STD_LOGIC; SIGNAL AD_clk_reg_rise : STD_LOGIC; SIGNAL AD_data : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0000000000000000"; SIGNAL result : INTEGER := 0; --计算结果 BEGIN AD_CS <= '0';--CS保持低电平 --AD_clk最大5M,上升沿读写 PROCESS (clk_in) BEGIN IF (clk_in'EVENT AND clk_in = '1') THEN IF (reset_n = '0') THEN AD_clk_reg_cnt <= "00000000"; ELSIF (AD_clk_reg_cnt = "00001001") THEN--使用5M时钟,50/5=10; AD_clk_reg_cnt <= "00000000"; ELSE AD_clk_reg_cnt <= AD_clk_reg_cnt + "00000001"; END IF; END IF; END PROCESS; --50M分频为5MHz PROCESS (clk_in) BEGIN IF (clk_in'EVENT AND clk_in = '1') THEN IF (AD_clk_reg_cnt >= "00000101") THEN AD_clk_reg <= '1'; ELSE AD_clk_reg <= '0'; END IF; END IF; END PROCESS; AD_clk <= AD_clk_reg AND clk_en;--5M AD_din <= AD_din_reg AND clk_en; PROCESS (clk_in) BEGIN IF (clk_in'EVENT AND clk_in = '1') THEN AD_clk_reg_buf <= AD_clk_reg; END IF; END PROCESS; AD_clk_reg_down <= NOT(AD_clk_reg) AND AD_clk_reg_buf;--AD_clk_reg的下降沿 AD_clk_reg_rise <= AD_clk_reg AND NOT(AD_clk_reg_buf);--AD_clk_reg的上升沿 --初始化及读取AD值状态机 PROCESS (clk_in) BEGIN IF (clk_in'EVENT AND clk_in = '1') THEN IF (reset_n = '0') THEN state <= s_reset; cycle_cnt <= 0; clk_en <= '0'; communicate_clkreg <= "00100000"; clk_reg <= "00000011"; communicate_setreg <= "00010000"; set_reg <= "01000000"; communicate_datareg <= "00111000
代码文件(付费下载):
![]()
![]()
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 基于FPGA的AD7705输入设计VHDL代码Quartus仿真
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 基于FPGA的AD7705输入设计VHDL代码Quartus仿真