目 录
一、 设计任务及性能指标 ................................. 2 二、设计要求 ............................................. 2 三、方案设计与论证 ....................................... 2
3.1 方案设计原理 ...................................... 2 3.2 方案论证 .......................................... 3 四、具体设计过程 ......................................... 4
4.1AD0809的工作时序图 ........................... 4 4.2 程序流程图 ........................................ 5 五、测试结果 ............................................. 6
5.1仿真时序图 ........................................ 6 5.2RTL原理图 ......................................... 7 5.3 Moore型有限状态机状态图 .......................... 7 六、附录 ................................................. 8
6.1程序代码 .......................................... 8 6.2 心得体会 ......................................... 11 7.参考文献 .............................................. 14
1
沈阳理工大学EDA技术课程设计报告
ADC0809的应用
一、 设计任务及性能指标
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电源供电。
主要控制信号说明:如图3.1所示,START是转换启动信号,高电平有效;ALE是3位通道选择地址(ADDC、ADDB、ADDA)信号的锁存信号。当模拟量送至某一输入端(如IN1或IN2等),由3位地址信号选择,而地址信号由ALE锁存;EOC是转换情况状态信号(类似于AD574的STATUS),当启动转换约100us后,EOC产生一个负脉冲,以示转换结束;在EOC的上升沿后,若使输出使能信号OE
2
沈阳理工大学EDA技术课程设计报告
为高电平,则控制打开三态缓冲器,把转换好的8位数据结果输至数据总线。至此ADC0809的一次转换结束了。
图3.1ADC0809波形仿真
3.2 方案论证
通过和同组人员的相关讨论最后确定该实验利用FPGA控制ADC0809的时序,然后进行AD转换,最后将ADC0809 转换后的数据以十六进制的数据显示出来。
ADC0809是8位8通道的逐次比较式AD转换芯片。该芯片管脚如图3.2所示。芯片引脚及其说明如下:
D0-D7(2-8-2-1):8位双先三态数据线。 ADDA、ADDB、ADDC:通道选择地址。 OUTPUT ENABLE:输出允许控制。 Clock:ADC转换时钟。
Vref+、Vref-:正负参考电压。 IN0-IN7:8个模拟信号输入通道。 START:AD转换启动信号。 EOC:AD转换结束信号。 ALE:通道地址锁存信号。
图3.2 0809芯片
3
沈阳理工大学EDA技术课程设计报告
四、具体设计过程
4.1ADC0809的工作时序图
本实验依据adc0809工作时序图来编写相关程序,由其时序图来判断状态机当前的状态
图4.1 ADC0809工作时序图
4
沈阳理工大学EDA技术课程设计报告
4.2 程序流程图
程序开始
初始化AD ST0状
ST1 ST2
0 EOC
1 ST3.
ST4
其他
Lock 上升沿 0
图4.2 程序流程图
十六进制显示 数据输出到处理器
5
沈阳理工大学EDA技术课程设计报告
五、测试结果
5.1仿真时序图
图5.1仿真时序图
6
沈阳理工大学EDA技术课程设计报告
5.2RTL原理图
图5.2RTL原理图
5.3 Moore型有限状态机状态图
图5.3 Moore型有限状态机状态图
7
沈阳理工大学EDA技术课程设计报告
六、附录
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
8
沈阳理工大学EDA技术课程设计报告
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\";
9
沈阳理工大学EDA技术课程设计报告
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;
10
沈阳理工大学EDA技术课程设计报告
6.2 心得体会
通过这次有关于EDA技术的课程设计的学习与应用,加上一个礼拜左右的学习与实践,使我对所学的知识进行了系统的复习与巩固,在以前的学习中不够清晰的概念得到了更好地理解。同时,通过课设,培养和锻炼了自己的动手能力,这一点非常重要不仅对我以后的学习有帮助,还为以后的工作打下一定的基础。再者这段时间的学习也使我了解到了理论和实际之间有一定的差别,让我第一次真正接触到了实际中的问题,同时,也发现了自己在某些方面的不足,而这正是我以后要加以改进的一些方面。
当然,在设计的过程中,也出现过不少问题,特别是仿真图形的生成及程序代码的编写比较麻烦,通过多次的尝试以及和老师,研究生学长,同学交流加上上网查找相关资料,最终确定本实验方案。加强了自身的分析,解决问题的能力。总的来说,这一次的课设对我的帮助很大,让我真正的认识到了理论与实际的区别,从而有助于对理论知识的进一步掌握,获益匪浅。
同时我们基本了解了EDA技术的相关应用,针对EDA的软件有很多种,同时使我也掌握了EDA设计的相关软件Quartus11.0的最基础的使用方法,丰富了我的设计手段,也
11
沈阳理工大学EDA技术课程设计报告
让我了解了更多的仿真方法。在用电脑操作的过程中,刚开始我们遇到了很多的困难,对软件的不熟悉以及对原理掌握的不透彻,但是经过对最简单的模型的设计及仿真练习过后,我们基本掌握了软件的使用方法,通过软件仿真及对各个参数的设置,我们不断调试仿真出来的波形。这期间我们也了解到,虽然软件的仿真功能很强大,但是还是需要作为操作者的我们仔细的进行观察及调试的,否则也很容易出现仿真错误。
这次的学习开阔了我的视野,使我了解了更多的专业方面的实际应用,在生产应用方面的用处等,以及专业方面的发展方向等等随着微电子技术和计算机技术的不断发展,在涉及通信、国防、航天、工业自动化、仪器仪表等领域的电子系统设计工作中,EDA(电子设计自动化)技术的含量正以惊人的速度上升,它已成为当今电子技术发展的前沿之一。 EDA技术发展迅猛,完全可以用日新月异来描述。EDA技术的应用广泛,现在已涉及到各行各业。EDA水平不断提高,设计工具趋于完美的地步,所以我们更加应该多多掌握这方面的知识。
通过联系EDA技术及应用的有关章节,学习用状态机对A/D转换器ADC0809的采样控制电路的实现。实验中,对VHDL硬件语言及MODELSIM软件进行探索、学习,逐步熟悉软件的使用。并学习完成了用状态机对ADC0809的采
12
沈阳理工大学EDA技术课程设计报告
样控制电路的实现。通过这次实验,初步学会了用电路的原理与电路设计,对实验软件VHDL及MODELSIM也有一定的认识,更进一步掌握了课本的相关理论知识。
13
沈阳理工大学EDA技术课程设计报告
7.参考文献
[1] 阎石,数字电子技术基础.[M]北京:高等教育出版社,1998 [2] 谭会生,EDA技术及应用.[M]西安:电子科技大学出版社,2001 [3] 廖裕评,CPLD数字电路设计——使用MAX+plusⅡ入门篇,清华大学出版,2001
[4] 冯涛,可编程逻辑器件开发技术:MAX+plusⅡ入门与提高.[M]北京:人民邮电出版社,2002
[5] 杨崇志,特殊新型电子元件手册.[M]辽宁:科学技术出版社,1999 [6] 彭介华,电子技术课程设计指导.[M]北京:高等教育出版社,2000
14
因篇幅问题不能全部显示,请点此查看更多更全内容