基于EDA的脉冲按键电话显示器VHDL程序设计.doc

上传人:wj 文档编号:8856707 上传时间:2023-05-15 格式:DOC 页数:14 大小:799.17KB
下载 相关 举报
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第1页
第1页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第2页
第2页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第3页
第3页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第4页
第4页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第5页
第5页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第6页
第6页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第7页
第7页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第8页
第8页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第9页
第9页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第10页
第10页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第11页
第11页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第12页
第12页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第13页
第13页 / 共14页
基于EDA的脉冲按键电话显示器VHDL程序设计.doc_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于EDA的脉冲按键电话显示器VHDL程序设计.doc

《基于EDA的脉冲按键电话显示器VHDL程序设计.doc》由会员分享,可在线阅读,更多相关《基于EDA的脉冲按键电话显示器VHDL程序设计.doc(14页珍藏版)》请在冰点文库上搜索。

基于EDA的脉冲按键电话显示器VHDL程序设计.doc

《EDA技术与VHDL》课程设计

基于EDA的脉冲按键电话显示器VHDL程序设计

院系电子信息工程学院

班级12电信(专升本)

姓名卢文俊

学号1208211036

2013年6月

脉冲按键电话显示器

摘要:

本系统是利用软件的方式设计硬件,利用QuartusII6.0这款软件对其进行编译和仿真。

本系统包含按键电路、译码电路、数码显示、移位寄存器和锁存模块。

利用译码器控制数据的输入输出变换,而移位寄存器用来控制拨号键、删除键以及重拨键,最后在通过数码管来显示输出数据。

该系统通过按键控制了数码管的显示以及其它功能。

关键词:

QuartusII6.0;按键电路;译码电路;数码管;锁存器

Abstract:

Thissystemistheuseofthesoftwaretodesignhardware,theuseofthissoftwareQuartusII6.0tocompileandsimulation.Thesystemincludeskeycircuit,decodingcircuit,digitaldisplay,theshiftregisterandlatchmodules.Decodercontroldatausingtheinput-outputtransformation,theshiftregisterisusedtocontrolthedialingkey,deletekey,andredialkey,andfinallydisplayedbythedigitaloutputdata.Thesystemiscontrolledthroughthebuttonsofthedigitaltubedisplayandotherfeatures.

Keywords:

QuartusII6.0;Keycircuit;Decodingcircuit;Digitaltube;Latch

14

目录

1设计任务和主要技术指标 4

2设计方案及工作原理 4

2.1系统设计思路与框图 4

2.2各模块功能分析 4

2.2.1按键电路模块 4

2.2.2译码电路模块 4

2.2.3移位寄存器、锁存模块 5

2.2.4数码管显示模块 6

3单元电路模块的设计、仿真测试 6

3.1BCD译码 6

3.1.1BCD译码子程序 6

3.1.2仿真波形 6

3.1.3RTL电路 6

3.2键值显示 7

3.2.1键值显示子程序(SET_NUM.VHD) 7

3.2.2仿真波形 8

3.3顶层文件 8

试验总结 9

1.实验结果 9

2.心得体会 9

参考文献 9

附录 9

1顶层文件程序 9

2BCD译码子程序(DISPLAY.VHD) 10

3键值显示子程序(SET_NUM.VHD) 11

1设计任务和主要技术指标

1)设计一个具有最高8位显示的电话按键显示器;

2)能准确地反映按键数字;

3)显示器显示从低位向高位前移,逐位显示按键数字,最低位显示当前输入数字;

4)设置“删除键”,按下此键,从最低位开始删除数字,同时显示器数字从高位向低位移动。

5)设置“拨号键”拨号键模拟拨号,按下此键拨号指示灯亮;

6)设置一个重拨键,按下此键,能显示最后一次输入的电话号码;

7)挂机2S后或按熄“灭按键”,熄灭显示器显示。

2设计方案及工作原理

2.1系统设计思路与框图

我们设计的用VHDL语言实现的脉冲按键电话显示器由4个模块组成:

按键电路,译码器,移位寄存、锁存器和数码管显示电路,其中移位寄存、锁存器和数码管译码显示电路为系统的主要组成部分。

脉冲按键电话的总体设计框图如图2.1所示:

图2.1脉冲按键电话总体设计方案

2.2各模块功能分析

2.2.1按键电路模块

按键电路功能:

提供0~9数字按键的输入,同时设置有拨号键,清除键,挂机键和重拨键。

2.2.2译码电路模块

译码电路功能:

译码器的功能分为两个部分,第一部分把输入的一位键值转换成四位BCD码;第二部分把4位二进制码译成相应的数码管输出显示码。

BCD码对应的七段数码管显示如表2.1所示:

表2.1BCD码对应的数码管显示

4位BCD码

g

f

e

d

c

b

a

显示数字

0

0

0

0

0

1

1

1

1

1

1

0

0

0

0

1

0

1

1

0

0

0

0

1

0

0

1

0

1

0

1

1

0

1

1

2

0

0

1

1

1

0

0

1

1

1

1

3

0

1

0

0

1

1

0

0

1

1

0

4

0

1

0

1

1

1

0

1

1

0

1

5

0

1

1

0

1

1

1

1

1

0

1

6

0

1

1

1

1

1

1

0

0

0

0

7

1

0

0

0

1

1

1

1

1

1

1

8

1

0

0

1

1

1

0

1

1

1

1

9

其他情况

0

0

0

0

0

0

0

2.2.3移位寄存器、锁存模块

移位寄存器:

移位寄存器分为三个部分,当按下拨号键时,数字按键值依次由数码管的低位向高位移动,同时送入锁存器中;当按下删除键时,键值由高位向低位移除,高位数码管熄灭;当按下重拨键时,锁存器中存储的键值输入到移位寄存器中,并通过数码管显示出来。

其大致的流程图如图2.2所示:

图2.2按键输入过程流程图

2.2.4数码管显示模块

数码管显示用于将设置好的每个按键的键值(对应0~9的数字)在数码管上显示出来。

由于实验过程中需要使用8个数码管,因为在数码管显示模块必须加上数码管片选及移位的程序,从而实现数据在输入以后从低位向高位移动、显示。

在进行编写脉冲按键电话显示器程序时,我们主要是利用元件例化语句来实现的,在顶层文件基础上,调用了数码管BCD码译码、键值显示两个底层文件,分别命名为DISPLAY.VHD、SET_NUM.VHD。

3单元电路模块的设计、仿真测试

3.1BCD译码

3.1.1BCD译码子程序

BCD译码程序的框图如图3.2所示

图3.2BCD译码程序

各端口说明分别为:

输入:

输出:

BCD1[3…0]:

4位BCD码;数码管的七段显示

3.1.2仿真波形

3.1.3RTL电路

3.2键值显示

3.2.1键值显示子程序(SET_NUM.VHD)

键值显示控制的框图如图3.3所示:

图3.3按键显示控制框图

各端口说明分别为:

输入:

输出:

DIN[9…0]:

0~9十个数字键;KEYOUT:

可输入数字指示灯;

CLK:

时钟脉冲;SET[3…0]:

键值的BCD码

CLEAR:

删除键;SEG3[2…0]:

数码管的七段;

DIAL:

拨号键;

RE_DAIL:

重拨键

3.2.2仿真波形

3.2.3RTL电路图

3.3顶层文件

总体设计电路如图所示,通过顶层文件生成RTL电路。

各端口说明分别为:

输入:

输出:

CLEAR:

删除键;;SEG71[6…0]:

8位数码管;

CLK1:

时钟脉冲;SEG8[2…0]:

数码管的七段;

DIAL:

拨号键;KEYOUT:

可输入数字指示灯;

RE_DAIL:

重拨键

DIN1[9…0]:

0~9十个数字键

试验总结

1.实验结果

仿真结果如预期所想,实现了预期的目标,电话号码移位设计电路是通过按不同的按键来控制电话号码的拨打情况,通过一个清零端可以控制(当输入错误号码后,清除当前号码,再重新输入一组新的号码时)电话号码的输入,这样可以自由的输入和更改电话号码。

锁存器记录最后一次所拨号码可以进行重拨操作,显示时间过长可以进行挂机操作。

另外由于条件等的限制,只能进行软件仿真,而软件仿真一方面存在延时,另一方面不能像硬件测试那样直观

2.心得体会

通过本次课程设计我认识到了自己的不足,在实际操作过程中查阅了很多资料,也和组员们讨论了很久。

首先,经过这次课程设计我的实际动手能力得到很大的提高,另外对一个课题的总体的驾驭能力也上升的一个新的层面。

其次,此次设计中也遇到了很多不同困难,在和组员之间的相互讨论中认识到团队合作的重要性。

最后,我更加深刻的体会到理论与实际相结合的重要性,只有将理论与实践相结合,才能真正的提高自己的动手能力,而理论运用于实践正式当代大学生所学习的一项基本技能。

参考文献

1.潘松,黄继业.EDA技术与VHDL(第3版).清华大学出版社,2009.

2.卢毅,赖杰.VHDL与数字电路设计[M].科学出版社,2007.

3.潘松,EDA技术实用教程(第二版).科学出版社,2005.

附录

1顶层文件程序

LIBRARYIEEE;--库定义

USEIEEE.STD_LOGIC_1164.ALL;--包定义

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYPLUSE_KEYIS--定义实体名、端口

PORT(DIN1:

INSTD_LOGIC_VECTOR(9DOWNTO0);--定义0~9数字输入

CLK1,CLEAR,DIAL,RE_DIAL:

INSTD_LOGIC;

KEYOUT:

OUTSTD_LOGIC;--定义可输入脉冲指示灯

SEG71:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);--定义七位段码

SEG8:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8个数码管

ENDENTITY;

ARCHITECTUREONEOFPLUSE_KEYIS--定义结构体

COMPONENTSET_NUMIS--调用SET_NUM底层文件

PORT(DIN:

INSTD_LOGIC_VECTOR(9DOWNTO0);

CLK,CLEAR,DIAL,RE_DIAL:

INSTD_LOGIC;

KEYOUT:

OUTSTD_LOGIC;

SET:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

SEG8:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDCOMPONENT;

COMPONENTDISPLAYIS--调用DISPLAY底层文件

PORT(BCD1:

INSTD_LOGIC_VECTOR(3DOWNTO0);

SEG7:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDCOMPONENT;

SIGNALSET_1:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN--各端口的连接

U1:

SET_NUMPORTMAP(DIN1,CLK1,CLEAR,DIAL,RE_DIAL,KEYOUT,SET_1,SEG8);

U2:

DISPLAYPORTMAP(SET_1,SEG71);

ENDART;

2BCD译码子程序(DISPLAY.VHD)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYDISPLAYIS

PORT(

BCD1:

INSTD_LOGIC_VECTOR(3DOWNTO0);

SEG7:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITY;

ARCHITECTUREONEOFDISPLAYIS

BEGIN

PROCESS(BCD1)IS

BEGIN

CASEBCD1IS

WHEN"0000"=>SEG7<="0111111";--显示0

WHEN"0001"=>SEG7<="0000110";--显示1

WHEN"0010"=>SEG7<="1011011";--显示2

WHEN"0011"=>SEG7<="1001111";--显示3

WHEN"0100"=>SEG7<="1100110";--显示4

WHEN"0101"=>SEG7<="1101101";--显示5

WHEN"0110"=>SEG7<="1111101";--显示6

WHEN"0111"=>SEG7<="0000111";--显示7

WHEN"1000"=>SEG7<="1111111";--显示8

WHEN"1001"=>SEG7<="1101111";--显示9

WHENOTHERS=>SEG7<="0000000";--其他情况下数码管熄灭

ENDCASE;

ENDPROCESS;

ENDARCHITECTURE;

3键值显示子程序(SET_NUM.VHD)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSET_NUMIS

PORT(DIN:

INSTD_LOGIC_VECTOR(9DOWNTO0);

CLK,CLEAR,DIAL,RE_DIAL:

INSTD_LOGIC;

KEYOUT:

OUTSTD_LOGIC;

SET:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

SEG8:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDENTITY;

ARCHITECTUREONEOFSET_NUMIS

SUBTYPETENISSTD_LOGIC_VECTOR(3DOWNTO0);

SIGNALBCD:

TEN;

TYPENUMBER1ISARRAY(7DOWNTO0)OFSTD_LOGIC_VECTOR(3DOWNTO0);

SIGNALNUMBER:

NUMBER1;

SIGNALKEY,KEY1,CLK1,DIAL1,RE_DIAL1:

STD_LOGIC;

SIGNALCOUNT:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALCOUNT1:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALCOUNT2:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALDIN1:

STD_LOGIC_VECTOR(9DOWNTO0);

SIGNALLOCK:

STD_LOGIC_VECTOR(31DOWNTO0);

BEGIN

----------------------------------------------------

PROCESS(CLK)IS

BEGIN

IFRISING_EDGE(CLK)THEN

COUNT1<=COUNT1+1;

ENDIF;

ENDPROCESS;

CLK1<='0'WHENCOUNT1<"1100"ELSE'1';

PROCESS(CLK1)IS

BEGIN

IFRISING_EDGE(CLK1)THEN

DIN1(9DOWNTO0)<=DIN(9DOWNTO0);

DIAL1<=DIAL;

RE_DIAL1<=RE_DIAL;

ENDIF;

ENDPROCESS;

KEY<=(DIN1(0)ORDIN1

(1)ORDIN1

(2)ORDIN1(3)ORDIN1(4)ORDIN1(5)ORDIN(6)ORDIN1(7)ORDIN1(8)ORDIN1(9));

PROCESS(CLK1)IS

BEGIN

IFFALLING_EDGE(CLK1)THEN

IFCOUNT2="100"THEN

IFCLEAR='0'ANDRE_DIAL='0'THEN

KEY1<=KEY;

ELSIFCLEAR='1'ANDRE_DIAL='0'THEN

KEY1<=CLK;

ELSEKEY1<=RE_DIAL1;

ENDIF;

COUNT2<="000";

ELSE

COUNT2<=COUNT2+1;

ENDIF;

ENDIF;

ENDPROCESS;

--------------------------------------

PROCESS(DIN1)IS

BEGIN

IFDIN1(6)='1'THENBCD<="0110";

ELSIFDIN1

(1)='1'THENBCD<="0001";

ELSIFDIN1

(2)='1'THENBCD<="0010";

ELSIFDIN1(3)='1'THENBCD<="0011";

ELSIFDIN1(4)='1'THENBCD<="0100";

ELSIFDIN1(5)='1'THENBCD<="0101";

ELSIFDIN1(0)='1'THENBCD<="0000";

ELSIFDIN1(7)='1'THENBCD<="0111";

ELSIFDIN1(8)='1'THENBCD<="1000";

ELSIFDIN1(9)='1'THENBCD<="1001";

ELSEBCD<="0000";

ENDIF;

ENDPROCESS;

------------------------------------------------------

KEYOUT<=KEY1;

PROCESS(KEY1)IS

BEGIN

IFRISING_EDGE(KEY1)THEN

IFCLEAR='0'ANDRE_DIAL1='0'THEN--输入数字,实现数字从低位向高位移动

NUMBER(7)<=NUMBER(6);

NUMBER(6)<=NUMBER(5);

NUMBER(5)<=NUMBER(4);

NUMBER(4)<=NUMBER(3);

NUMBER(3)<=NUMBER

(2);

NUMBER

(2)<=NUMBER

(1);

NUMBER

(1)<=NUMBER(0);

NUMBER(0)<=BCD;

ELSIFCLEAR='1'ANDRE_DIAL1='0'THEN--按下删除键,数字从高位向低位移动

NUMBER(0)<=NUMBER

(1);

NUMBER

(1)<=NUMBER

(2);

NUMBER

(2)<=NUMBER(3);

NUMBER(3)<=NUMBER(4);

NUMBER(4)<=NUMBER(5);

NUMBER(5)<=NUMBER(6);

NUMBER(6)<=NUMBER(7);

NUMBER(7)<="1111";

ELSE--在重拨键以后,显示已拨号码

NUMBER(7)<=LOCK(31DOWNTO28);

NUMBER(6)<=LOCK(27DOWNTO24);

NUMBER(5)<=LOCK(23DOWNTO20);

NUMBER(4)<=LOCK(19DOWNTO16);

NUMBER(3)<=LOCK(15DOWNTO12);

NUMBER

(2)<=LOCK(11DOWNTO8);

NUMBER

(1)<=LOCK(7DOWNTO4);

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

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2