eda课程设计-ADC0809控制器-报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA课程设计报告
设计题目:ADC0809控制器
学生姓名:
学号:
院系:
同组人员:
专业班级:
指导教师:
时间:2013年1月10日
摘要:实现时必须严格遵守ADC0809的工作时序,对选定的通道输入一个模拟量,调节电位器改变输入的模拟量。
利用quartus2进行文本编辑输入和测试仿;给出仿真波形。
最后进行引脚锁定并进行测试,硬件验证ADC0809 的控制功能。
具体过程为:编写ADC0809时序的VHDL代码。
对其进行编译仿真主要控制信号为:Start为转换启动信号,高电平有效;
ale为通道选择地址信号的锁存信号。
当启动转换后,程序开始执行,查询
状态,状态为0.1.时等待,状态2时,查询EOC信号的状态,判断是否转
换结束,当EOC=1时表示转换结束,否则继续等待;转换结束后继续查询
状态,若OE信号为高电平则控制打开三态缓冲器,当LOCK信号为高电
平时,将转换后的数据进行锁存,至此一次转换结束。
关键词:工作时序、AD0809 、VHDL、quartus2、编译仿真、Start 、EOC、OE、LOCK、三态缓冲器
Abstract
Realize must strictly abide by the ADC0809 work sequence, the selected channel input a analog quantity, adjust potentiometer change input analog quantity. Use quartus2 text editor input and simulation test; The simulation waveform is given. The pin lock and testing, hardware validation to ADC0809 control functions. The specific process: write ADC0809 sequence of VHDL code. The compiler simulation main control signal for: Start for conversion Start signal, high level effective; Ale for channel selection address signal latched signal.When start after conversion, and the program started, inquires the state, the state for 0.1. Wait,when, state 2, inquires the EOC signal state, determine whether conversion ends, when EOC = 1 said conversion over, or continue to wait; After the conversion to continue inquires the state, if the OE signal for high level is control open three state buffer, when LOCK signal for high electric at ordinary times, after will convert the data latch, thus a switching over. KEYWORD:Work timing、AD0809 、VHDL、quartus2、Compile and
simulation、Start 、EOC、OE、LOCK、Three state buffer
目录
一、设计任务及性能指标 (4)
二、设计要求 (4)
三、方案设计与论证 (4)
3.1 方案设计原理 (4)
3.2 方案论证 (5)
四、具体设计过程 (5)
4.1AD0809的工作时序图 (5)
4.2 程序流程图 (7)
五、测试结果 (7)
5.1仿真时序图 (7)
5.2 RTL原理图 (9)
5.3 Moore型有限状态机状态图 (9)
六、附录 (9)
6.1程序代码 (9)
6.2 参考文献 .......................... 错误!未定义书签。
6.3 心得体会 (12)
一、设计任务及性能指标
1.利用实验箱上FPGA芯片控制ADC0809的时序,进行AD转换,然后将ADC0809转换后的数据以十六进制的数据显示出来。
2.实现时必须严格遵守ADC0809的工作时序,在编写代码时要注意。
对选定的通道输入一个模拟量,调节电位器改变输入的模拟量。
3.了解ADC0809的工作原理
4.了解用扫描方式驱动七段码管显示的工作原理。
5.了解时序电路FPGA的实现。
6.学习用VHDL语言来描述时序电路的过程。
二、设计要求
基本要求:
1、采用状态机
2、控制ADC0809的第三通道进行AD转换
3、转换结果显示格式00~FF
三、方案设计与论证
3.1 方案设计原理
ADC0809是CMOS的8位A/D转换器,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中。
ADC0809的分辨率为8位,转换时间约100us,含锁存控制的8路多路开关,输出有三态缓冲器控制,单5V电源供电。
主要控制信号说明:如下图所示,START是转换启动信号,高电平有效;ALE 是3位通道选择地址(ADDC、ADDB、ADDA)信号的锁存信号。
当模拟量送至某一输入端(如IN1或IN2等),由3位地址信号选择,而地址信号由ALE锁存;EOC 是转换情况状态信号(类似于AD574的STATUS),当启动转换约100us后,EOC 产生一个负脉冲,以示转换结束;在EOC的上升沿后,若使输出使能信号OE为高电平,则控制打开三态缓冲器,把转换好的8位数据结果输至数据总线。
至此ADC0809的一次转换结束了。
3.2 方案论证
通过和同组人员的相关讨论最后确定该实验利用FPGA控制
ADC0809的时序,然后进行AD转换,最后将ADC0809
转换后的数据以十六进制的数据显示出来。
ADC0809是8位8通道的逐次比较式AD转换
芯片。
该芯片管脚如右图所示。
芯片引脚及其说
明如下:
D0-D7(2-8-2-1):8位双先三态数据线。
ADDA、ADDB、ADDC:通道选择地址。
OUTPUT ENABLE:输出允许控制。
Clock:ADC转换时钟。
Vref+、Vref-:正负参考电压。
IN0-IN7:8个模拟信号输入通道。
START:AD转换启动信号。
EOC:AD转换结束信号。
ALE:通道地址锁存信号。
四、具体设计过程
4.1AD0809的工作时序图
本实验依据ad809工作时序图来编写相关程序,由其时序图来判断状态机当前的状态
4.2 程序流程图
程序开始
4.2 程序流程图
五、测试结果
5.1仿真时序图
5.2RTL原理图
5.3 Moore型有限状态机状态图
六、附录
6.1程序代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity adcontrol is
port ( d : in std_logic_vector(7 downto 0);
--ADC0809输出的采样数据
clk,eoc : in std_logic; --clk为系统时钟,eoc为
ADC0809转换结束信号
seg : out std_logic_vector(1 downto 0);
adda,addb,addc,start,ale,oe : out std_logic; --ADC0809控制信号
LOCK0 : OUT STD_LOGIC;
q : out std_logic_vector(7 downto 0); --送至
8diode
LED : out std_logic_vector (6 downto 0));
end adcontrol;
architecture behav of adcontrol is
type states is ( st0,st1, st2, st3, st4); --定义各
状态的子类型
signal current_state, next_state:states;
signal regl : std_logic_vector(7 downto 0); --中
间数据寄存信号
signal lock : std_logic;--lock AD output after converted
signal dcount: std_logic_vector(1 downto 0);
signal data: integer;
signal data_h : integer;
signal data_l : integer;
signal LED_0: std_logic_vector (6 downto 0);
signal LED_1: std_logic_vector (6 downto 0);
begin
adda<='0';addb<='1';addc<='0';--enable channel 3
q<=regl;lock0<=lock;
com:process(current_state,eoc) --规定各种状态
的转换方式
begin
case current_state is
when
st0=>next_state<=st1;ale<='0';start<='0';oe<='0';lock<='0';--0809init
when st1=>next_state<=st2;ale<='1';start<='1';oe<='0';lock<='0';
when st2=>ale<='0';start<='0';oe<='0';lock<='0';
if (eoc='1') then next_state<=st3; --EOC=1 convert accomplished
else next_state<=st2;--havn't accomplish
end if;--convert haven't ending,waiting for...
when st3=>
ale<='0';start<='0';lock<='0';oe<='1';next_state<=st4;--enable oe,output
converted data
when st4=> ale<='0';start<='0';lock<='1';oe<='1';next_state<=st0;
when others => next_state<=st0;
end case;
end process com;
reg:process(clk)
begin
if clk'event and clk='1' then current_state<=next_state;end if; --在clk1的上升沿,转换至下一状态
end process reg;
latch1:process(lock)
begin
if lock='1'and lock'event then regl<=D;end if;
end process latch1;
process(clk,regl)
begin
if clk'event and clk='1' then dcount<=dcount+1;
end if;
data<=conv_integer(regl);
data_h<=data/16;
data_l<=data rem 16;
case data_h is
when 0 => LED_0<="0111111";
when 1 => LED_0<="0000110";
when 2 => LED_0<="1011011";
when 3 => LED_0<="1001111";
when 4 => LED_0<="1100110";
when 5 => LED_0<="1101101";
when 6 => LED_0<="1111101";
when 7 => LED_0<="0000111";
when 8 => LED_0<="1111111";
when 9 => LED_0<="1101111";
when 10 => LED_0<="1110111";
when 11 => LED_0<="1111100";
when 12 =>LED_0<="0111001";
when 13 => LED_0<="1011110";
when 14 => LED_0<="1111001";
when 15 => LED_0<="1110001";
when others => null;
end case;
case data_l is
when 0 => LED_1<="0111111";
when 1 => LED_1<="0000110";
when 2 => LED_1<="1011011";
when 3 => LED_1<="1001111";
when 4 => LED_1<="1100110";
when 5 => LED_1<="1101101";
when 6 => LED_1<="1111101";
when 7 => LED_1<="0000111";
when 8 => LED_1<="1111111";
when 9 => LED_1<="1101111";
when 10 => LED_1<="1110111";
when 11 => LED_1<="1111100";
when 12 => LED_1<="0111001";
when 13 => LED_1<="1011110";
when 14 => LED_1<="1111001";
when 15 => LED_1<="1110001";
when others => null;
end case;
seg<=dcount;--00 01 10 11 00
case dcount is
when "00"=>LED<=LED_0;
when "01"=>LED<=LED_1;
when others=>LED<="0000000";
end case;
end process;
end behav;
6.2 参考文献
【1】杨志方,王广君.EDA技术及应用.华中科技大学出版社
【2】电子技术应用 2006年09期
【3】潘松,黄继业 . EDA技术实用教程(第三版). 科学出版社 . 2010-07 【4】曾繁泰陈美金VHDL程序设计[M].北京:清华大学出版社,2001
6.3 心得体会
通过这次有关于EDA技术的课程设计的学习与应用,加上一个礼拜左右的学习与实践,使我对所学的知识进行了系统的复习与巩固,在以前的学习中不够清晰的概念得到了更好地理解。
同时,通过课设,培养和锻炼了自己的动手能力,这一点非常重要不仅对我以后的学习有帮助,还为以后的工作打下一定的基础。
再者这段时间的学习也使我了解到
了理论和实际之间有一定的差别,让我第一次真正接触到了实际中的问题,同时,也发现了自己在某些方面的不足,而这正是我以后要加以改进的一些方面。
当然,在设计的过程中,也出现过不少问题,特别是仿真图形的生成及程序代码的编写比较麻烦,通过多次的尝试以及和老师,研究生学长,同学交流加上上网查找相关资料,最终确定本实验方案。
加强了自身的分析,解决问题的能力。
总的来说,这一次的课设对我的帮助很大,让我真正的认识到了理论与实际的区别,从而有助于对理论知识的进一步掌握,获益匪浅。
同时我们基本了解了EDA技术的相关应用,针对EDA 的软件有很多种,同时使我也掌握了EDA设计的相关软件Quartus11.0的最基础的使用方法,丰富了我的设计手段,也让我了解了更多的仿真方法。
在用电脑操作的过程中,刚开始我们遇到了很多的困难,对软件的不熟悉以及对原理掌握的不透彻,但是经过对最简单的模型的设计及仿真练习过后,我们基本掌握了软件的使用方法,通过软件仿真及对各个参数的设置,我们不断调试仿真出来的波形。
这期间我们也了解到,虽然软件的仿真功能很强大,但是还是需要作为操作者的我们仔细的进行观察及调试的,否则也很容易出现
仿真错误。
这次的学习开阔了我的视野,使我了解了更多的专业方面的实际应用,在生产应用方面的用处等,以及专业方面的发展方向等等随着微电子技术和计算机技术的不断发展,在涉及通信、国防、航天、工业自动化、仪器仪表等领域的电子系统设计工作中,EDA(电子设计自动化)技术的含量正以惊人的速度上升,它已成为当今电子技术发展的前沿之一。
EDA技术发展迅猛,完全可以用日新月异来描述。
EDA 技术的应用广泛,现在已涉及到各行各业。
EDA水平不断提高,设计工具趋于完美的地步,所以我们更加应该多多掌握这方面的知识。
通过联系EDA技术及应用的有关章节,学习用状态机对A/D转换器ADC0809的采样控制电路的实现。
实验中,对VHDL硬件语言及MODELSIM软件进行探索、学习,逐步熟悉软件的使用。
并学习完成了用状态机对ADC0809的采样控制电路的实现。
通过这次实验,初步学会了用电路的原理与电路设计,对实验软件VHDL及MODELSIM也有一定的认识,更进一步掌握了课本的相关理论知识。