VHDL实验二用状态机实现ADC0809的采样控制电路一、实验目的1.学习用状态机对A/D转换器ADC0809的采样控制电路的实现。二、实验仪器1.PC机一台2.KHF-5CPLD/FPGA实验开发系统一套。三、实验要求1.查阅ADC0809芯片资料。2.预习实验内容。四、原理说明ADC0809是CMOS的8位A/D转换器,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中。ADC0809的分辨率为8位,转换时间约100us,含锁存控制的8路多路开关,输出有三态缓冲器控制,单5V电源供电。主要控制信号说明:如图1所示,START是转换启动信号,高电平有效;ALE是3位通道选择地址(ADDC、ADDB、ADDA)信号的锁存信号。当模拟量送至某一输入端(如IN1或IN2等),由3位地址信号选择,而地址信号由ALE锁存;EOC是转换情况状态信号(类似于AD574的STATUS),当启动转换约100us后,EOC产生一个负脉冲,以示转换结束;在EOC的上升沿后,若使输出使能信号OE为高电平,则控制打开三态缓冲器,把转换好的8位数据结果输至数据总线。至此ADC0809的一次转换结束了。图1五、实验内容及实验步骤1、利用quartus2进行文本编辑输入和仿真测试;给出仿真波形。最后进行引脚锁定并进行测试,硬件验证对ADC0809的控制功能。实验代码:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYadc0809ISPORT(ina:INSTD_LOGIC_VECTOR(7DOWNTO0);--0809的8位转换数据输出CLK,EOC:INSTD_LOGIC;--CLKxitong工作时钟ALE,ck,OE:OUTSTD_LOGIC;--ck是0809de工作时钟adda,addb,addc:outstd_logic;outa:OUTSTD_LOGIC_VECTOR(13DOWNTO0));ENDadc0809;ARCHITECTUREbehavOFadc0809IS--signalsa:std_logic_vector(7downto0);signalfp:std_logic_vector(9downto0);signalf:std_logic;TYPEstatesIS(st0,st2,st3,st4,st5,st6);--定义各状态子类型SIGNALcurrent_state,next_state:states:=st0;SIGNALREGL:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLOCK:STD_LOGIC;--转换后数据输出锁存时钟信号BEGINADDA='1';addb='0';addc='0';--sa=ina;process(CLK)beginif(CLK'eventandCLK='1')theniffp=15thenfp=0000000000;f=notf;elsefp=fp+1;endif;endif;endprocess;ck=f;PRO:PROCESS(current_state,EOC)BEGIN--规定各状态转换方式CASEcurrent_stateISWHENst0=ALE='0';START='0';OE='0';LOCK='0';next_state=st2;--WHENst1=ALE='1';START='1';OE='0';LOCK='0';next_state=st2;WHENst2=ALE='1';START='1';OE='0';LOCK='0';next_state=st3;WHENst3=ALE='0';START='0';OE='0';LOCK='0';IF(EOC='1')THENnext_state=st3;--测试EOC的下降沿ELSEnext_state=st4;ENDIF;WHENst4=ALE='0';START='0';OE='0';LOCK='0';IF(EOC='0')THENnext_state=st4;--测试EOC的上升沿,=1表明转换结束ELSEnext_state=st5;--继续等待ENDIF;WHENst5=ALE='0';START='0';OE='1';LOCK='0';next_state=st6;WHENst6=ALE='0';START='0';OE='1';LOCK='1';next_state=st0;WHENOTHERS=ALE='0';START='0';OE='0';LOCK='0';next_state=st0;ENDCASE;ENDPROCESSPRO;PROCESS(f)BEGINIF(f'EVENTANDf='1')THENcurrent_state=next_state;--在时钟上升沿,转换至下一状态ENDIF;ENDPROCESS;--由信号current_state将当前状态值带出此进程,进入进程PROPROCESS(LOCK)--此进程中,在LOCK的上升沿,将转换好的数据锁入BEGINIFLOCK='1'ANDLOCK'EVENTTHENREGL=ina;ENDIF;ENDPROCESS;withREGL(3downto0)selectouta(6downto0)=0110000when0001,--11101101when0010,--21111001when0011,--30110011when0100,--41011011when0101,--51011111when0110,--61110000when0111,--71111111when1000,--81111011when1001,--91110111when1010,--A0011111when1011,--b1001110when1100,--c0111101when1101,--d1001111when1110,--e1000111when1111,--f1111110whenothers;--0withREGL(7downto4)selectouta(13downto7)=0110000when0001,--11101101when0010,--21111001when0011,--30110011when0100,--41011011when0101,--51011111when0110,--61110000when0111,--71111111when1000,--81111011when1001,--91110111when1010,--A0011111when1011,--b1001110when1100,--c0111101when1101,--d1001111when1110,--e1000111when1111,--f1111110whenothers;--0ENDbehav;2、建议引脚锁定为:oe为p18。ale为p19。ina0--ina7为p24p25p26p27p28p29p30p31。addaaddbaddc分别对应芯片管脚p36p37p38。eoc为p39。ck(08096时钟)为p40。Inclk(状态机时钟)为p80。Start引脚和ale短接,因此共用p19。采样数据用数码管seg1,seg2显示:seg1的a,b,c,d,e,f,g段-------161,162,163,164,166,167,168;seg2的a,b,c,d,e,f,g段------170,172,173,174,175,176,177。3、实验现象为采样0809的数字量由数码管显示,w15k可调节输入0809电平的大小。下载目标文件后,可用螺丝刀旋转实验系统的电位器w1,以便为ADC0809提供变化的待测模拟信号,这时数码管1和2将显示ADC0809采样输出并被锁存的数字值(16进制)。4.时钟模块对外部输入时钟进行分频,形成模数转换器所需的工作时钟和各控制信号基础脉冲。具体对AD0809来说,其最小控制信号脉宽为100ns,可取外部输入时钟,对其进行分频得到。六、心得体会通过联系教材有关章节,学习用用状态机对A/D转换器ADC0809的采样控制电路的实现。实验中,对VHDL软件进行探索、学习,逐步熟悉软件的使用。并学习完成了用状态机对ADC0809的采样控制电路的实现。通过这次实验,初步学会了用电路的原理与电路设计,对实验软件VHDL也有一定的认识,更进一步掌握了课本的相关知识。