090910064基于FPGA的多功能万年历docWord格式文档下载.docx
- 文档编号:17679740
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:30
- 大小:553.99KB
090910064基于FPGA的多功能万年历docWord格式文档下载.docx
《090910064基于FPGA的多功能万年历docWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《090910064基于FPGA的多功能万年历docWord格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。
本设计采用的是数字温度传感器DS18B20和FPGA组成的温度采集系统。
数字温度传感器DS18B20,可以直接与FPGA相连,构成简单的测量电路,这样就方便实现远距离传输和多点温度测量;
而且FPGA相对于单片机来说速度快,修改方便,可以减少开发成本和时间,并增加了系统的灵活性。
1.1课题相关技术的发展
现代电子产品基本上都是大量使用大规模的可编程的逻辑器件,这样就降低了产品的功耗、缩小了电子产品的体积、功能也越来越多样化、产品的性能也得到提高。
现代计算机技术在电子产品开发中得到了广泛的应用,以前需要一两个月才能开发出来的,现在只要几个星期甚至更短的时间,不仅仅缩短了电子产品的研发周期还提高了自动化程度,降低了生产的成本,增加了产品的竞争力。
EDA(电子设计自动化)是最近几年才迅速发展起来的,它是将计算机软件、硬件、微电子技术交叉运用的现代电子技术。
现在电子产品都在趋于数字化,基于EDA的数字系统的设计具有很大的应用市场。
可编程逻辑器件自EDA诞生以来,经历了PLA、PAL、GAL、CPLD、FPGA几个阶段。
现在比较流行的可编程逻辑器件就是美国ALTERA公司的FPGA和CPLD。
可编程逻辑器件采用全新的结构和先进的技术可以根据用户的要求来构造逻辑功能的数字集成电路,加上MaxplusII(或最新的QUARTUS)开发环境,不仅简化了电路的设计,降低了成本,提高了系统的可靠性,也给数字化设计带了了重大变革。
电子设计的核心就是EDA技术,EDA技术是指以计算机为开发平台,融合应用电子技术,计算机技术而研制成的通用软包。
EDA技术经历了70年代的计算机辅助设计CAD、80年代的计算机辅助工程CAE和电子系统设计自动化ESDA三个发展阶段。
它的基本特征是:
“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,提高了设计的效率,比单片机或C语言要简单易懂。
本设计利用硬件描述语言结合可编程逻辑器件进行的,VHDL语言具有一下优点:
(1)VHDL的描述范围宽使它成为高层次的设计的核心,将工作人员的重心提高到了系统功能的实现与调试。
(2)VHDL可以用简洁的代码来描述复杂的控制逻辑设计,灵活且方便。
(3)VHDL不依赖与特定的器件,方便了工艺的转换。
(4)VHDL是一个标准的语言,众多的EDA厂商都支持,因此移植性强。
1.2课题研究的内容
本设计主要研究基于FPGA的多功能万年历,要求如下:
(1)显示年、月、日、时、分、秒,时间以24小时为一个周期。
(2)具有校准以及报时功能,可以对年、月、日、时、分及秒进行单独校对,使其校正到标准时间。
(3)能够实时的显示当前温度。
1.3设计方案论证与选择
方案一:
运用单片机C语言实现多功能万年历的设计
按照设计要求,系统软件编程应包含三个部分:
输入部分,选择导出部分,输出显示部分。
相应的系统硬件部分除了核心模块单片机之外,主要的外围部件还有按键、传感器等。
其中单片机系统作为中央处理单元,根据逻辑开关输入的信号转换为显示部分能识别的方式传递给显示部分,显示部分接到传来的指示信号做出相应的显示。
此方法运用了当前最常见的C语言,方案较简洁,不过C语言难以掌握,因此本设计不采用此方法。
方案二:
运用数字逻辑电路实现多功能万年历的设计
采用74138、74161和其它器件构成实现对万年历控制功能的硬件电路。
由设计要求可知,可以把电路分为按键控制电路,译码、显示、驱动等各部分电路。
开关控制电路,译码与显示驱动电路,显示电路。
这种方案是由纯硬件电路实现的设计,优点是省略了软件部分的设计,但是这种方案因为是纯硬件实现的,成本较高,误差较大,不灵活,因此在本次设计中也不予以采用。
方案三:
运用EDA技术实现多功能万年历的设计
根据设计要求,系统设计依靠EDA的MAX+PLUSⅡ设计软件、VHDL硬件描述语言及FPGA芯片实现多功能万年历的设计。
即在MAX+PLUSⅡ软件中用VHDL语言编写各模块程序,通过编译后分别封装成元器件,这些元器件生成顶层文件,再画出硬件电路图,这是EDA硬件软件化的一大特点。
最后借助EDA实验箱实现硬件仿真的功能。
软硬件相结合,层次分明,结构清晰。
且VHDL语言简单易懂,FPGA芯片也是当今的流行趋势。
综合以上三种设计方案,方案三是最为经济合理的,也是我们最能理解的。
2.FPGA简介
2.1FPGA概述
FPGA(FieldProgrammableGateArray)即现场可编程门阵列,它是在PLA、GLA、CPLD等可编程器件的基础上进一步发展的产物。
它是专用集成电路中的一种半定制电路,具有门电路数多的优点。
2.2FPGA基本结构
FPGA器件在结构上,由逻辑功能块排列为阵列,它的结构可以分为三个部分:
可编程逻辑块CLB(ConfigurableLogicBlock)可编程I/O模块(Input/OutputBlock)和可编程内部连线PI(ProgrammableInterconnect)。
(1).CLB是FPGA的主要组成部分,图2-1是CLB基本结构框图。
图2-1CLB基本结构
(2).可编程输入/输出模块IOB,编程灵活根据系统功能的需要可被配置为输入、输出或双向传输三种功能,实现不同的逻辑功能,满足不同的的逻辑接口的需要。
(3).可编程内部连线PI。
XC4000系列芯片的连线资源由水平和垂直的布线通道构成,较短的线段分布于单个CLB中,较长的线段跨接与两个CLB之间,而最长的线段跨越怎个芯片。
可编程开关用来把CLB的输入输出接到其周围的线段上,并且可以将两个不同的线段连接在一起。
3.多功能万年历总体设计方案
3.1多功能万年历的构成
日历实际上是一个对标准频率(1HZ)进行计数的计数电路。
因此标准的1HZ时间信号必须做到准确稳定。
通常使用石英晶体振荡器电路构成数字钟。
同时为了保证与标准时间的一致,需要在电路上加上一个校准电路。
同时图3-1所示为日历的一般构成框图。
主要包括时间基准电路、计数器电路、控制电路、译码和显示电路。
其核心的部分就是控制逻辑电路,不断完善它可以增加系统的功能。
图3-1日历时钟部分组成框图
本设计还具有显示年、月、日的功能,其显示范围为其总体框架如图3-2。
图3-2总体框架
3.2多功能万年历工作原理
日历的核心部分就是时钟部分,实际就是对标准的时钟信号进行计数,秒计数器对秒脉冲信号进行计数,记满60秒后就分计数器进位同时又从0开始计数;
分计数器对秒的进位信号进行计数,记满60后向时计数器进位同时又从0开始计数;
同理时计数器为24进制计数器,记满24向日计数器进位同时计数器清零,重新开始计数。
由于日数根据年、月的不同天数也不同,必须由年、月共同决定,日记满后12个月后向年计数器进位。
各个计数器的输出分别经过译码器送数码管显示。
当计时出现错误时,可以用校准电路对年、月、日、时、分、秒进行校准。
在系统中除了需要校准的控制信号外,还需要有时钟的使能信号、清零信号。
这些控制信号由一个4×
4矩形键盘输入。
七段译码器构成译码显示电路,数码管完成显示功能。
在此的系统中利用数字温度传感器DS18B20和FPGA组成的温度采集系统经处理后送至数码管显示即可。
4单元电路
4.1分频模块电路设计与实现
在此系统中晶体振荡器的信号的稳定性与精准度直接影响到整个日历时钟的准确度。
为了保证基准时钟的准确性,所以我决定选用特性非常好的石英晶体,它只让某一特定频率点的信号通过,其他频率段的信号全部会被它衰减,而且它震荡信号的频率与震荡电路中的元器件完全无关。
所以这种震荡电路输出的是准确度极高的信号,再利用分频电路的话就会得到标准的秒信号,其组成框图如图4-1。
图4-1秒信号产生电路框图
本系统使用的晶体振荡器电路给数字钟提供一个频率稳定准确的40MHz的方波信号,其输出至分频电路。
分频电路的逻辑框图如图4-2所示。
图4-2分频电路模块
图4-3分频模块电路设计
其内部结构图见图4-3。
电路中采用Max+plusII元器件库中的计数器7490进行硬件分频。
经分频后输出1HZ的标准秒信号CLK1、4MHZ的按键扫描信号、1KHZ的按键去抖信号。
该模块的时序仿真图如图4-4所示,满足设计要求。
图4-4分频模块仿真图
4.2温度测量模块电路设计与实现
在本统中利用数字温度传感器DS18B20和FPGA组成的温度采集系统,
这样就不需要模数转换电路和信号放大电路,组成的硬件电路简单,抗干扰能力强。
4.2.1温度传感器的选择
温度传感器根据是否要与被检测介质接触,分为接触式传感器和非接触式传感器两类。
接触式传感器包括根据被测物体受温度影响的膨胀度制成的传感器;
基于半导体或导体受温度影响电阻值或电荷数发生改变而制成的传感器;
基于热电效应的热电偶传感器等。
非接触式传感器是根据温度与热辐射特性之间的关系对温度进行测量。
由于这里测的是空气的温度,所以选择用接触式传感器。
常用的接触式温度传感器有铂电阻、热电偶和半导体热敏电阻等类型。
它们的特点如下:
图4-5温度传感器的比较
综合上述各个传感器的优缺点,这里选择半导体热电阻类型,在本系统中采用DS18B20温度传感器。
由美国DALLAS公司生产DS18B20温度传感器是的可编程数字温度传感器,具有3个引脚,且封装形式多样,体积小,质量轻、线性度好、耐擦耐磨,传输距离远、性能稳定;
温度测量的范围大概在-55℃~+125℃,可进行9的~12位A/D转换精度。
温度测量的分辨率最高可达到0.0625℃,温度测量结果用带符号的16位数字量进行串行输出。
4.2.2Ds18b20的主要特征
(1)、适用的电压范围比较宽,大概为3.0~5.5V,在特殊情况下还可以有数据线供电。
(2)、温度测量的范围为-55℃~+125℃,A/D转换精度为9~12位,精度越高那么测出的温度也就越精确,对应温度分辨率为0.5℃、0.25℃、0.125℃和0.0625℃,即它可以实现高精度的温度测量。
(3)、最突出的特点在于它采用的是独特的单线接口方式,DS18B20在与FPGA连接时仅需要一条口线即可实现双向通讯。
(4)、DS18B20在使用方便简单,它不需要添加任何外围元件,传感元器件和温度转电路全部集成在器件中。
(5)、多个DS18B20能够相互并联,组成一个测温网络,并且这些DS18B20的数据线可以连在一根数据线上。
(6)、测量结果直接输出数字温度信号,以数据串行方式传送给FPGA,同时可传送校验码,具有极强的抗干扰纠错能力。
(7)、负压特性:
当电源极性接反的时候,芯片不会因发热而烧毁,只是不能正常工作。
(8)、每个Ds18b20传感器都有一个唯一的64位序列码这样就可以解决分布式温度测量中处理器与多个传感器相连的问题。
Ds18b20与FPGA的连接电路如图4-6,VDD端口5V电源,GND接地,DG端口接FPGA的一位双向口,另外在数据连接线上还要接上一个4.7K的上拉电阻。
图4-6Ds18b20与FPGA的连接图
4.2.3Ds18b20的内部结构
DS18B20内部结构主要由四部分组成,如图4-7:
图4-7DS18B20内部结构图
(1)、光刻ROM。
其中的64位序列号是出厂前被光刻好的,它可以看作DS18B20的地址序。
(2)、温度传感器。
该部分可以完成对温度的测量,以二进制补码的形式进行存储,并通过显示器进行16进制度的转换,从而进行当前稳定的显示。
其温度存储的格式如下
表4-1:
DS18B20温度值格式表
bit7bit6bit5bit4bit3bit2bit1bit0
23
22
21
20
2-1
2-2
2-3
2-4
LSByte
bit15bit14bit13bit12bit11bit10bit9bit8
MSByte
表4-2:
DS18B20温度数据表
(3)、配置寄存器。
该字节各位的意义如下:
TM
R1
R0
1
低五位一直都是"
1"
,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动。
R1和R0用来设置分辨率,如下表所示:
表4-3:
温度分辨率设置表
分辨率
温度最大转换时间
9位
93.75ms
10位
187.5ms
11位
375ms
12位
750ms
4.2.4温度测量的软件设计
软件设计是使用VHDL语言与图形输入相结合的方法,clk1提供了系统工作时钟,data提供控制信号,DQ为传感器传入数据的接口,TEMP为输出信号,送到显示器显示。
软件设计程序见附录。
图4-8DS18B20与FPGA通信图
4.3校时控制模块电路设计与实现
4.3.1键盘接口电路原理
校时控制模块在本系统中也就是键盘接口电路部分。
下面先介绍键盘接口电路的工作原理,如图4-9。
本系统采用的就是这种行列式键盘接口,相对个按键的键盘接口来说节省了I/O接口。
其中行线与列线分别与按键的两端相连。
在查询工作方式中判断是否有按键按下的方法是:
先有响应的I/O接口将列线输出为0电平,在由相应的I/O接口将所有的行线结果读入到控制器中。
若有行线输入为0,则有键按下,反之,则没有键按下。
如果发现有按键按下界限来就是通过安检扫描来确定是哪个按键被按下,键盘扫描的过程是依次轮流将列线输出为0电平,然后再检查各行线的状态。
若某行线输入为0,组对应的该行线与该列线的按键被按下,即可确定对应的键号。
图4-9键盘接口电路
4.3.2键盘接口的VHDL描述
(1).按键消抖
本系统采用的是软件消抖的办法去除按键抖动,基本原理是:
首先判断有没有按键按下,如发现有按键按下则延时一段时间,在判断是否有按键按下的信号,如果有则确定有按键按下,就产生一个有按键按下的信号。
这样就消除了按键的机械抖动。
该模块的逻辑框图如图4-10所示。
图4-10去抖逻辑框图
该电路的VHDL程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityqudouis
port(clk1:
instd_logic;
row:
instd_logic_vector(3downto0);
key_pre:
outstd_logic);
endqudou;
architecturebehavofqudouis
signalsig1,counter:
std_logic_vector(3downto0);
signaltmp1,sig2:
std_logic;
begin
sig1<
=row;
tmp1<
=sig1(0)andsig1
(1)andsig1
(2)andsig1(3);
key_pre<
=counter(0)andcounter
(1)andcounter
(2)andcounter(3);
process(clk1)
begin
if(clk1'
eventandclk1='
1'
)then
if(tmp1='
0'
if(sig2='
sig2<
='
;
endif;
if(sig2='
if(counter="
1111"
counter<
="
0000"
else
=counter+'
endif;
endprocess;
endbehav;
(2).键扫描模块
键扫描模块的框图如图4-11所示。
图4-11按键扫描模块
CLKY是由分频器模块分出的4MHZ的输入时钟信号,因为键扫描是一个比较快的过程所以这里采用的是频率较高的时钟信号。
Key_pre是去抖模块输出的有按键按下的信号作为启动按键扫描的使能信号。
ROW[3..0]与键盘的行线相连,COM[3..0]与键盘的列线相连。
SCAN_CODE[7..0]输出被按下键的键码。
键盘扫描程序如下:
entityajsmis
port(clky,key_pre:
com:
outstd_logic_vector(3downto0);
scan_code:
outstd_logic_vector(7downto0));
endajsm;
architecturebehavofajsmis
signalsig_com:
signalcounter:
std_logic_vector(1downto0);
signaltmp,sig1,sig2:
=key_pre;
tmp<
=row(0)androw
(1)androw
(2)androw(3);
process(clky)
if(clky'
eventandclky='
)then--计数进程
11"
00"
process(clky)--列线逐位输出低电平
variablejt:
)then
if(sig1='
jt:
=sig_com(3);
foriin3downto1loop
sig_com(i)<
=sig_com(i-1);
endloop;
sig_com(0)<
=jt;
sig_com<
1110"
com<
=sig_com;
process(clky)--键码信号赋值
if(tmp='
scan_code<
=row&
sig_com;
11111111"
else
(3).键码转换模块
该模块框图如图4-12所示。
模块主要完成从键扫描码到按键编码的转换。
图4-12键码转换模块逻辑框图
键码转换的核心程序如下:
useieee
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 090910064 基于 FPGA 多功能 万年历 doc