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

AD7321代码12位ADC,SPI接口模数转换连接DAC0832输出

04/29 13:28
1137
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1-23102R2255K56.doc

共1个文件

名称:AD7321代码12位ADCSPI接口模数转换连接DAC0832输出(代码在文末付费下载)

软件:QuartusII

语言:VHDL

代码功能:

使用VHDL语言编写代码,实现AD7321的控制,将模拟信号转换为数字信号,再经过处理后,将数据通过DAC0832转换为模拟信号输出。

AD7321输入,(2000-输入)/6(仿真输出=009),DAC0832输出。

要求:有vhdl代码(详尽注释),有fpga连线图,有完整功能仿真结果,有方案分析。

演示视频:

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

部分代码展示

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???USE?ieee.std_logic_unsigned.all;
--AD控制模块,输出011110011010
ENTITY?AD7321?IS
???PORT?(
??????clk?????:?IN?STD_LOGIC;--时钟
??????rst?????:?IN?STD_LOGIC;--复位
??????CS_n????:?OUT?STD_LOGIC;--AD控制信号
??????SCLK????:?OUT?STD_LOGIC;--AD控制信号
??????DOUT????:?IN?STD_LOGIC;--AD控制信号
??????DIN?????:?OUT?STD_LOGIC;--AD控制信号
??????DB??????:?OUT?STD_LOGIC_VECTOR(11?DOWNTO?0)--输出AD值
???);
END?AD7321;
ARCHITECTURE?behaval?OF?AD7321?IS
???TYPE?State_type?IS?(s_init,?s_cs_h,?s_sclk,?s_end);??--?定义状态
???SIGNAL?state?:?State_type;
???SIGNAL?cs_h_cnt?:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000";--CS计数
???SIGNAL?sclk_cnt?:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";--sclk计数
BEGIN
--状态机控制
???PROCESS?(clk,?rst)
???BEGIN
??????IF?(rst?=?'1')?THEN--复位
?????????state?<=?s_init;
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN--时钟上升沿
?????????CASE?state?IS
????????????WHEN?s_init?=>--初始状态
???????????????state?<=?s_cs_h;
????????????WHEN?s_cs_h?=>--cS高电平状态
???????????????IF?(cs_h_cnt?>=?"1010")?THEN--计数10个时钟
??????????????????state?<=?s_sclk;
???????????????END?IF;
????????????WHEN?s_sclk?=>--SCLK状态
???????????????IF?(sclk_cnt?>=?"00100000")?THEN--计数32时钟
??????????????????state?<=?s_end;--结束
???????????????END?IF;
????????????WHEN?s_end?=>--结束状态
???????????????state?<=?s_init;
????????????WHEN?OTHERS?=>
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???--根据状态控制CS信号
???PROCESS?(clk,?rst)
???BEGIN
??????IF?(rst?=?'1')?THEN
?????????CS_n?<=?'1';--复位
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN--时钟上升沿
?????????IF?(state?=?s_cs_h)?THEN--CS高电平状态
????????????CS_n?<=?'1';--输出高电平
?????????ELSIF?(state?=?s_sclk)?THEN--SCLK状态
????????????CS_n?<=?'0';--输出低电平
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???--根据状态控制SCLK信号
???PROCESS?(clk,?rst)
???BEGIN
??????IF?(rst?=?'1')?THEN
?????????SCLK?<=?'1';--复位
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN--时钟上升沿
?????????IF?(state?=?s_sclk)?THEN--SCLK状态
????????????SCLK?<=?NOT(sclk_cnt(0));--SCLK输出sclk_cnt(0)取反信号作为SCLK
?????????ELSIF?(state?=?s_end)?THEN
????????????SCLK?<=?'1';
?????????END?IF;
??????END?IF;
???END?PROCESS;

设计文档:

1. 工程文件

2. 程序文件

连线图

3. 程序编译

4. RTL图

5. 仿真图

  • 1-23102R2255K56.doc
    下载

相关推荐