名称:AD7321和DAC0832驱动VHDL代码Quartus仿真
软件:Quartus
语言:Verilog
代码功能:AD7321和DAC0832驱动VHDL代码
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译

4. RTL图
5. 仿真文件(vwf文件)
6. 仿真图
部分代码展示:
library ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --AD7321控制模块 ENTITY AD7321 IS PORT ( clk : IN STD_LOGIC; AD_CS : OUT STD_LOGIC;--AD信号 AD_DOUT : IN STD_LOGIC;--AD信号 AD_SCLK : OUT STD_LOGIC;--AD信号 AD_DIN : OUT STD_LOGIC;--AD信号 AD_data : OUT STD_LOGIC_VECTOR(11 DOWNTO 0)--AD7321采样值 ); END AD7321; ARCHITECTURE behave OF AD7321 IS SIGNAL AD7321_data : STD_LOGIC_VECTOR(14 DOWNTO 0):="000000000000000"; SIGNAL state : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; SIGNAL SCLK_buf : STD_LOGIC := '0'; SIGNAL AD_data_buf : STD_LOGIC_VECTOR(11 DOWNTO 0); BEGIN --状态机控制AD7321时序 PROCESS (clk) variable CS_cnt:integer:= 0; BEGIN IF (clk'EVENT AND clk = '1') THEN CASE state IS WHEN "01" =>--CS状态 CS_cnt:=CS_cnt+1; IF (CS_cnt >= 10) THEN--CS状态程序10周期 state <= "10"; ELSE state <= "01"; END IF; IF (CS_cnt>2) THEN AD_CS <= '1';--输出CS高电平,否则低电平 ELSE AD_CS <= '0'; END IF; WHEN "10" =>--clear CS_cnt:=0; state <= "11"; AD_CS <= '0'; WHEN "11" =>--SCK状态 CS_cnt:=CS_cnt+1; IF (CS_cnt >= 31) THEN--SCK状态持续32周期 state <= "00"; ELSE state <= "11"; END IF; WHEN "00" =>--采样结束 CS_cnt:=0; state <= "01"; WHEN OTHERS => END CASE; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (state = "11") THEN--SCK状态 SCLK_buf <= NOT SCLK_buf;--产生SCLK_buf,取反,32周期变为16个时钟 ELSE SCLK_buf <= '1'; END IF; END IF; END PROCESS; --SCLK_buf上升沿读取SDO的值 PROCESS (SCLK_buf) BEGIN IF (SCLK_buf'EVENT AND SCLK_buf = '1') THEN AD7321_data <= AD7321_data(13 DOWNTO 0) & AD_DOUT;--SCLK_buf上升沿读取AD_DOUT的值放入最低位 END IF; END PROCESS;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=917
阅读全文
501