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

AD7321和DAC0832驱动VHDL代码Quartus仿真

08/08 14:58
431
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240R0194132264.doc

共1个文件

名称: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

  • 2-240R0194132264.doc
    下载

相关推荐