欢迎来到天天文库
浏览记录
ID:57688001
大小:18.50 KB
页数:2页
时间:2020-09-01
《FPGA实现的AD采样控制程序的源码.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、采用双进程有限状态机的方法来实现。设计st0~st7八个工作状态。st0:初始化。st1:产生ALE的上升沿将模拟通道IN1的地址锁存。st2:产生START信号上升沿,启动A/D转换。st3:START信号延时一个脉冲。st4:A/D转换中,等待。st5:转换结束,开启输出允许信号OE。st6:OE延时一个脉冲,并开启数据锁存信号LOCK。st7:延时一个时钟,输出数据。状态转换方式见下面程序段。casecurrent_stateis whenst0=>ale<='0';start<='0';oe<='0';lock<='0'
2、;next_state<=st1; ---初始态ST0向下一状态ST1转换,0809采样控制信号初始化; whenst1=>ale<='1';start<='0';oe<='0';lock<='0';next_state<=st2; ---由ALE的上升沿将通道地址'001'锁入0809的地址寄存器; whenst2=>ale<='1';start<='1';oe<='0';lock<='0';next_state<=st3; ---启动采样信号; wh
3、enst3=>ale<='0';start<='1';oe<='0';lock<='0'; if(eoc='0') then next_state<=st4;---转换即将结束,转换至下一状态; elsenext_state<=st3; ---转换未结束,继续在状态ST3中等待; endif; whenst4=>ale<='0';start<='0';oe<='0';lock<='0'; if(eoc='1') then next_state<=st5;---EOC由0恢复1,转换结束;
4、 elsenext_state<=st4;---转换未结束,等待; endif; whenst5=>ale<='0';start<='0';oe<='1';lock<='0';next_state<=st6; --开启输出允许OE; whenst6=>ale<='0';start<='0';oe<='1';lock<='1';next_state<=st7; --开启数据锁存LOCK; whenst7=>ale<='0';start<='0';oe<='0';lock<='1';next_state<=s
5、t0; whenothers=>next_state<=st0; ---其它状态返回ST0; endcase;---------------------------------------------------------------________________________________________A/D采样控制与数据转换的部分程序及仿真采用QuartusⅡ软件平台下的VHDL语言编程实现。libraryieee;useieee.std_logic_unsigned.all;useieee.std_logic_1
6、164.all;entityad_hgqis port(d:instd_logic_vector(7downto0);---AD输入; clk,eoc:instd_logic;---eoc:转换结束状态信号;oe:bufferstd_logic; addr:outstd_logic_vector(2downto0);---oe:输出允许,addr:选通地址; ale,start:outstd_logic;---ale:允许地址锁存; q:bufferstd_logic_vector(7
7、downto0));---转换数据输出显示; endad_hgq;architecturebehaviourofad_hgqis typestateis(st0,st1,st2,st3,st4,st5,st6,st7);---以枚举类型定义各状态子类型; signalcurrent_state,next_state:state:=st0; signalregl:std_logic_vector(7downto0); signaladdrx:std_logic_vector(2downto0):="000"; signa
8、llock:std_logic; ---转换后数据输出锁存时钟信号; signalhex:std_logic_vector(7downto0);beginprocess(clk) begin if(clk'eve
此文档下载收益归作者所有