FPGA设计ADC0809.docx

上传人:b****7 文档编号:25524145 上传时间:2023-06-09 格式:DOCX 页数:13 大小:277.56KB
下载 相关 举报
FPGA设计ADC0809.docx_第1页
第1页 / 共13页
FPGA设计ADC0809.docx_第2页
第2页 / 共13页
FPGA设计ADC0809.docx_第3页
第3页 / 共13页
FPGA设计ADC0809.docx_第4页
第4页 / 共13页
FPGA设计ADC0809.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

FPGA设计ADC0809.docx

《FPGA设计ADC0809.docx》由会员分享,可在线阅读,更多相关《FPGA设计ADC0809.docx(13页珍藏版)》请在冰豆网上搜索。

FPGA设计ADC0809.docx

FPGA设计ADC0809

FPGA设计-ADC0809

摘要

 

实现时必须严格遵守ADC0809的工作时序,对选定的通道输入一个模拟量,调节电位器改变输入的模拟量。

利用quartus2进行文本编辑输入和试仿 ;给出仿真波形。

最后进行引脚锁定并进行测试,硬件验证ADC0809 的控制功能。

具体过程为:

编写ADC0809时序的VHDL代码。

对其进行编译仿真主要控制信号为:

Start为转换启动信号,高电平有效;

ale为通道选择地址信号的锁存信号。

当启动转换后,程序开始执行,查询状态,状态为0.1.时等待,状态2时,查询EOC信号的状态,判断是否转换结束,当EOC=1时表示转换结束,否则继续等待;转换结束后继续查询状态,若OE信号为高电平则控制打开三态缓冲器,当LOCK信号为高电平时,将转换后的数据进行锁存,至此一次转换结束。

关键词:

工作时序、AD0809 、VHDL、quartus2、编译仿真、Start 、EOC、OE、三态缓冲器

 

1设计任务

基于VHDL语言,实现对ADC0809简单控制。

2系统设计原理

2.1硬件设计原理

ADC0809 为单极性输入,8位转换逐次逼近A/D转换器,可对0~5V的INT0~INT7的8路模拟电压信号分时进行转换,完成一次转换的时间为100 微秒。

ADD-CBA作为8路通道选择地址,在转换开始前由地址锁存允许信号ALE将3位地址锁入锁存器中,以确定转换信号通道;EOC为状态结束标志,低电平转为高电平时转换结束;START为转换启动信号,上升沿有效;OE为数据输出允许端,高电平有效;〔D0⋯D7〕为A/D变换数据输出端。

本次实验为测试方便,因此直接选择IN0端口为输入端,即使ADDC,ADDB,ADDA都接地。

2.1.1ADC0809的主要特性

1)8路输入通道,8位A/D转换器,即分辨率为8位。

  

2)具有转换起停控制端。

    

3)转换时间为100μs    

4)单个+5V电源供电  

5)模拟输入电压范围0~+5V,不需零点和满刻度校准。

   

6)工作温度范围为-40~+85摄氏度 

7)低功耗,约15mW。

2.1.2ADC0809的外部特性

ADC0809芯片有28条引脚,采用双列直插式封装,如图1所示。

面说明各引脚功能。

  

IN0~IN7:

8路模拟量输入端。

  

2-1~2-8:

8位数字量输出端。

  

ADDA、ADDB、ADDC:

3位地址输入线,用于选通8路模拟输入中的一路  

ALE:

地址锁存允许信号,输入,高电平有效。

  

START:

 A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。

    

EOC:

 A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。

  

OE:

数据输出允许信号,输入,高电平有效。

当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。

    

CLK:

时钟脉冲输入端。

要求时钟频率不高于640KHZ。

    

REF(+)、REF(-):

基准电压。

    

Vcc:

电源,单一+5V。

    

GND:

地。

图1  ADC0809引脚图图2ADC0809

2.1.3工作过程

首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。

此地址经译码选通8路模拟输入之一到比较器。

START上升沿将逐次逼近寄存器复位。

下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。

直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。

当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。

转换数据的传送A/D转换后得到的数据应及时传送给单片机进行处理。

数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。

为此可采用下述三种方式。

(1)定时传送方式

对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。

例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。

可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。

(2)查询方式

A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。

因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。

(3)中断方式

把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。

不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。

首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。

本次设计依据ADC809工作时序图来编写相关程序,由其时序图来判断状态机当前的状态。

2.2软件设计思路

采用双进程有限状态机的方法来产生ADC0809的工作时序。

设计st0~st7共8个工作状态,st0:

初始状态;st1:

 产生ALE的上升沿,将地址“000”锁入0809的地址寄存器中;st2:

产生采样信号START上升沿,开始A/D转换;st3:

检测EOC下升沿;st4:

检测EOC上升沿,转换结束;st5:

数据转换结束,开启输出允许EN;st6:

输出允许EN延时一个脉冲,输出数据;st7:

关闭允许输出EN如表1所示。

表1状态转换表

当前状态

控制输入

下一状态

控制输出

ST0

时钟上升沿

ST1

ale<='0';start<='0';en<='0'

ST1

时钟上升沿

ST2

ale<='1';start<='0';en<='0'

ST2

时钟上升沿

ST3

ale<='0';start<='1';en<='0'

ST3

时钟上升沿且EOC=1

ST4

ale<='0';start<='0';en<='0'

ST3

ST4

时钟上升沿且EOC=0

ST5

ale<='0';start<='0';en<='0'

ST4

ST5

时钟上升沿

ST6

ale<='0';start<='0';en<='1'

ST6

时钟上升沿

ST0

ale<='0';start<='0';en<='1';regl<=d

Other

时钟上升沿

ST0

ale<='0';start<='0';en<='0'

2.3程序流程图

 

Y

 

N

 

Y

 

N

 

根据此流程图,结合表1的状态转换表可以写出ADC0809的VHDL描述。

VHDL语言描述的ADC0809程序看附录一。

 

3功能与时序仿真

原先使用ISE软件进行功能仿真与时序的仿真,但是由于对ISE软件使用不够熟练,我改用QuartusⅡ进行ADC0809的功能仿真与时序仿真。

3.1功能仿真得出的RTL图

使用QuartusⅡ,创建工程后添加一个VHDL文本,把附录的程序写进去后运行,没有出现错误。

运行之后得出的RTL图如图3所示。

图4ADC0809的RTL图

3.2功能仿真得出的状态图

在QuartusⅡ中,功能仿真还能得出其状态图,如图4所示,可以看出这是一个Moore型有限状态机。

图5ADC0809的状态图

3.3时序仿真

功能仿真之后就可以对其进行时序仿真,设置结束时间为350us,并设置CLK的频率为10KHZ。

得到如图5所示的时序仿真图。

图6ADC0809的时序仿真图

由图5可以看出符合ADC0809的工作时序,这就使用VHDL语言实现对ADC0809的简单控制。

4总结

通过本次的课程设计,使我对FPGA这门课程有了更深一步的理解,对知识进行了进一步的的巩固与提高,锻炼了自己的综合技能。

通过小组内同学的讨论与方案的论证,大家积极献言献策,集大家的智慧,终于选出了一个较好的方案。

用仿真软件进行仿真与调试,编写VHDL语言时遇到了极大地困难,这也是这项任务的重中之重。

在编写VHDL语言时由于前期的思路不清,导致编写的语言很混乱,在查阅了网上的资料后才有了比较清楚完备的认识,这一点对我有很大启发。

在这个过程中,我对仿真软件的操作与应用能力得到了进一步的加强。

这次实验让我更加注重了对这门课程的学习,了解到其重要性,这门技术必将成为今后很长一个时期的学习与应用重点,这对我们的成长与发展有极大促进作用。

5参考文献

[1]杨志方.EDA技术及应用.华中科技大学出版社,2008

[2]潘松.EDA技术与VHDL.清华大学出版社,2010

[3]刘岚.FPGA应用技术基础教程.电子工业出版社,2009

[4]曾繁泰.VHDL程序设计.清华大学出版社,2001

[4]杨志刚.FPGA技术应用.机械工业出版社,2001

附录一程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entityADC0809is

port(d:

instd_logic_vector(7downto0);--ADC0809输出的采样数据

clk,eoc:

instd_logic;--clk为系统时钟,eoc为ADC0809转换结束信号

clk1,start,ale,en:

outstd_logic;--ADC0809控制信号

abc_in:

instd_logic_vector(2downto0);--模拟选通信号

abc_out:

outstd_logic_vector(2downto0);--ADC0809模拟信号选通信号

q:

outstd_logic_vector(7downto0));--送至8个并排数码管信号

endADC0809;

architecturebehavofADC0809is

typestatesis(st0,st1,st2,st3,st4,st5,st6);--定义各状态的子类型

signalcurrent_state,next_state:

states:

=st0;

signalregl:

std_logic_vector(7downto0);--中间数据寄存信号

signalqq:

std_logic_vector(7downto0);

begin

com:

process(current_state,eoc)--规定各种状态的转换方式

begin

casecurrent_stateis

whenst0=>next_state<=st1;ale<='0';start<='0';en<='0';

whenst1=>next_state<=st2;ale<='1';start<='0';en<='0';

whenst2=>next_state<=st3;ale<='0';start<='1';en<='0';

whenst3=>ale<='0';start<='0';en<='0';

ifeoc='1'thennext_state<=st3;--检测EOC的下降沿

elsenext_state<=st4;

endif;

whenst4=>ale<='0';start<='0';en<='0';

ifeoc='0'thennext_state<=st4;--检测EOC的上升沿

elsenext_state<=st5;

endif;

whenst5=>next_state<=st6;ale<='0';start<='0';en<='1';

whenst6=>next_state<=st0;ale<='0';start<='0';en<='1';regl<=d;

whenothers=>next_state<=st0;ale<='0';start<='0';en<='0';

endcase;

endprocess;

clock:

process(clk)--对系统时钟进行分频,得到ADC0809转换工作时钟

begin

ifclk'eventandclk='1'thenqq<=qq+1;--在clk1的上升沿,转换至下一状态

ifQQ="01111111"THENclk1<='1';current_state<=next_state;

elsifqq<="01111111"thenclk1<='0';

endif;

endif;

endprocess;

q<=regl;abc_out<=abc_in;

endbehav;

 

本科生实习成绩评定表

姓名

性别

专业、班级

实习题目:

实习答辩或质疑记录:

 

成绩评定依据:

 

最终评定成绩(以优、良、中、及格、不及格评定)

 

指导教师签字:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1