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

ADS8364及AD5758驱动设计VHDL代码Quartus仿真

09/16 10:13
141
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24101QP54Y60.doc

共1个文件

名称:ADS8364及AD5758驱动设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

ADS8364及AD5758驱动设计

本设计的要求如下:ADS8364输入,(5400-输入)/9 (仿真时=学号后3位),AD5758输出。根据要求,使用FPGA主控芯片,需要先控制ADS8364将模拟信号转换为数字信号,再在FPGA内进行数字信号处理,处理方式为(5400-输入)/9,得到计算结果后,再通过AD5758芯片将其转换为模拟信号输出。

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

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 仿真图

整体仿真图

分频模块

ADS8364模块

AD5758模块

部分代码展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???USE?ieee.std_logic_unsigned.all;
--?定义AD5758实体??
ENTITY?AD5758?IS??
???PORT?(??
??????clk_in????:?IN?STD_LOGIC;????????????--?输入时钟信号??
??????rst_in????:?IN?STD_LOGIC;????????????--?输入复位信号??
??????data_in??:?IN?STD_LOGIC_VECTOR(15?DOWNTO?0);??--?输入的16位数据??
??????da_addr???:?OUT?STD_LOGIC_VECTOR(1?DOWNTO?0);??--?输出的2位地址信号??
??????da_sync???:?OUT?STD_LOGIC;???????????--?输出的同步信号??
??????da_sclk???:?OUT?STD_LOGIC;???????????--?输出的串行时钟信号??
??????da_reset??:?OUT?STD_LOGIC;???????????--?输出的复位信号??
??????da_ldac???:?OUT?STD_LOGIC;???????????--?输出的加载DAC信号??
??????da_sdi????:?OUT?STD_LOGIC???????????--?输出的串行数据输入信号??
???);??
END?AD5758;??
??
--?定义behave架构??
ARCHITECTURE?behave?OF?AD5758?IS??
???SIGNAL?AD5758_spi_data?:?STD_LOGIC_VECTOR(31?DOWNTO?0);??--?SPI数据信号,32位??
???SIGNAL?send_data?:?STD_LOGIC_VECTOR(31?DOWNTO?0);????????--?发送数据信号,32位??
???SIGNAL?crc?:?STD_LOGIC_VECTOR(7?DOWNTO?0);???????????????--?CRC校验值,8位??
???SIGNAL?crc_value?:?STD_LOGIC_VECTOR(7?DOWNTO?0);?????????--?CRC期望值或计算值,8位??
???SIGNAL?state_cnt?:?STD_LOGIC_VECTOR(1?DOWNTO?0);?????????--?状态计数器,2位??
???SIGNAL?wait_time?:?INTEGER;?????????????????????????????--?等待时间计数器??
???SIGNAL?work_window?:?INTEGER;???????????????????????????--?工作窗口计数器??
BEGIN??
??
???--?处理时钟和复位信号,更新状态计数器??
???PROCESS?(clk_in,?rst_in)??
???BEGIN??
??????IF?((NOT(rst_in))?=?'1')?THEN??????????--?当复位信号
?????????state_cnt?<=?"00";??????????????????--?初始化状态计数器为"00"??
??????ELSIF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN??--?当检测到时钟上升沿时??
?????????CASE?state_cnt?IS??????????????????--?根据状态计数器的值进行状态转换??
????????????WHEN?"00"?=>??
???????????????state_cnt?<=?"01";????????????--?状态从"00"转到"01"??
????????????WHEN?"01"?=>??
???????????????IF?(wait_time?>?40)?THEN??????--?如果等待时间大于40??
??????????????????state_cnt?<=?"10";?????????--?状态转到"10"??
???????????????ELSE??
??????????????????state_cnt?<=?"01";?????????--?否则保持在"01"状态??
???????????????END?IF;??
????????????WHEN?"10"?=>??
???????????????IF?(work_window?>?32)?THEN????--?如果工作窗口大于32??
??????????????????state_cnt?<=?"11";?????????--?状态转到"11"??
???????????????ELSE??
??????????????????state_cnt?<=?"10";?????????--?否则保持在"10"状态??
???????????????END?IF;??
????????????WHEN?OTHERS?=>?null;?????????????--?对于其他情况,不执行任何操作??
?????????END?CASE;??
??????END?IF;??
???END?PROCESS;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1229

  • 2-24101QP54Y60.doc
    下载

相关推荐