欢迎来到天天文库
浏览记录
ID:21680099
大小:65.50 KB
页数:5页
时间:2018-10-23
《汕头大学电子系eda实验四》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、汕头大学实验报告学院:工学院系:电子工程系专业:电子信息工程年级:09成绩:实验四有限状态机的设计——A/D采集显示一、实验目的1、了解ADC0809的工作原理。2、了解用扫描方式驱动七段码管显示的工作原理。3、了解时序电路FPGA的实现。4、学习用VHDL语言来描述时序电路的过程。二、硬件要求1、可变时钟源。2、七段码显示。3、A/D转换芯片ADC08094、主芯片ACEX1KEP1K30QC208。5、三个拨动开关,进行地址选择。三、实验原理该实验是利用FPGA控制ADC0809的时序,进行AD转换,然后将ADC0809转换后的数据以十六进制的数据显示出来。ADC0809是8位
2、8通道的逐次比较式AD转换芯片。该芯片管脚如右图所示。芯片引脚及其说明如下:D0-D7(2-8-2-1):8位双先三态数据线。ADDA、ADDB、ADDC:通道选择地址。OUTPUTENABLE:输出允许控制。Clock:ADC转换时钟。Vref+、Vref-:正负参考电压。IN0-IN7:8个模拟信号输入通道。START:AD转换启动信号。EOC:AD转换结束信号。ALE:通道地址锁存信号。ADC0809的工作时序如下图所示。其详细工作过程可查阅其他资料。本实验FPGA实现时必须严格遵守ADC0809的工作时序,在编写其驱动代码时尤其要注意。ADC0809的时钟信号从FPGA获取
3、,FPGA的时钟在500KHz至800KHz都可以选择。现具体介绍代码编写思想:首先将要转换的ADC0809的地址输出,然后产生ALE信号的,在该信号的上升沿,地址被打入ADC0809的地址锁存器,这样就选中了对应的通道。地址产生结束后,便可产生START信号,使ADC0809开始进行AD转换,需要注意的是,在ADC0809转换期间,输入的模拟信号必须稳定,否则可能出现比较大的误差。在地址锁存并且启动转换后,EOC便会呈现低电平,知道AD转换结束,所以FPGA在EOC从低电平变成高电平之前,不能读取ADC的转换数据。在EOC变成高电平之后,FPGA便可将OUTPUTINPUT信号拉
4、高,这样ADC转换的数据就会呈现在数据线上,FPGA读入该数据后,在8位七段码管上显示出来,这就是整个实验过程的工作流程。四、实验内容及步骤本实验的内容就是用FPGA模拟产生ADC0809的时序,使其正常工作,对ADC0809输入一个模拟量,进行A/D转换,然后将读入后的数据进行显示,实验步骤如下:1、编写ADC0809时序的VHDL代码。2、用MaxPlusII对其进行编译仿真。3、在时序确定无误后,选择芯片ACEX1KEP1K30QC208。4、给芯片进行管脚绑定,在此进行编译。5、根据自己绑定的管脚,在实验箱上对ADC0809、显示七段码和FPGA之间进行正确连线。6、对选定
5、的通道输入一个模拟量,给目标板下载代码,调节电位器改变输入的模拟量,观看实验结果。五、实验结果程序代码如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityadcisport(clk:instd_logic;adclk:outstd_logic;d:instd_logic_vector(7downto0);q:outstd_logic_vector(7downto0);k:outstd_logic_vector(2downt
6、o0));endadc;architecturebhvofadcistypestateis(st0,st1);signallock:std_logic;signalcurrent_state,next_state:state;signalregl:std_logic_vector(7downto0);signalled0,led1:std_logic_vector(7downto0);signals:bit;begincom:process(clk,current_state)begincasecurrent_stateiswhenst0=>next_state<=st1;lock
7、<='0';adclk<='0';whenst1=>next_state<=st0;lock<='1';adclk<='1';endcase;endprocesscom;reg:process(clk)beginif(clk'eventandclk='0')thencurrent_state<=next_state;endif;endprocessreg;latch:process(lock)beginif(lock='0'andlock'event)thenregl
此文档下载收益归作者所有