基于EDA的脉冲按键电话显示器VHDL程序设计综述Word文件下载.docx
- 文档编号:22353208
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:17
- 大小:475.55KB
基于EDA的脉冲按键电话显示器VHDL程序设计综述Word文件下载.docx
《基于EDA的脉冲按键电话显示器VHDL程序设计综述Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于EDA的脉冲按键电话显示器VHDL程序设计综述Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
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
显示数字
1
2
3
4
5
6
7
8
9
其他情况
无
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电路。
;
SEG71[6…0]:
8位数码管;
CLK1:
SEG8[2…0]:
重拨键
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:
CLK,CLEAR,DIAL,RE_DIAL:
SET:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
ENDCOMPONENT;
COMPONENTDISPLAYIS--调用DISPLAY底层文件
PORT(BCD1:
INSTD_LOGIC_VECTOR(3DOWNTO0);
SEG7:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
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)
ENTITYDISPLAYIS
PORT(
BCD1:
SEG7:
ARCHITECTUREONEOFDISPLAYIS
BEGIN
PROCESS(BCD1)IS
BEGIN
CASEBCD1IS
WHEN"
0000"
=>
SEG7<
="
0111111"
;
--显示0
0001"
0000110"
--显示1
0010"
1011011"
--显示2
0011"
1001111"
--显示3
0100"
1100110"
--显示4
0101"
1101101"
--显示5
0110"
1111101"
--显示6
0111"
0000111"
--显示7
1000"
1111111"
--显示8
1001"
1101111"
--显示9
WHENOTHERS=>
0000000"
--其他情况下数码管熄灭
ENDCASE;
ENDPROCESS;
ENDARCHITECTURE;
3键值显示子程序(SET_NUM.VHD)
ENTITYSET_NUMIS
PORT(DIN:
CLK,CLEAR,DIAL,RE_DIAL:
KEYOUT:
SET:
SEG8:
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:
SIGNALCOUNT1:
SIGNALCOUNT2:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALDIN1:
STD_LOGIC_VECTOR(9DOWNTO0);
SIGNALLOCK:
STD_LOGIC_VECTOR(31DOWNTO0);
BEGIN
----------------------------------------------------
PROCESS(CLK)IS
IFRISING_EDGE(CLK)THEN
COUNT1<
=COUNT1+1;
ENDIF;
CLK1<
='
0'
WHENCOUNT1<
"
1100"
ELSE'
1'
PROCESS(CLK1)IS
IFRISING_EDGE(CLK1)THEN
DIN1(9DOWNTO0)<
=DIN(9DOWNTO0);
DIAL1<
=DIAL;
RE_DIAL1<
=RE_DIAL;
KEY<
=(DIN1(0)ORDIN1
(1)ORDIN1
(2)ORDIN1(3)ORDIN1(4)ORDIN1(5)ORDIN(6)ORDIN1(7)ORDIN1(8)ORDIN1(9));
IFFALLING_EDGE(CLK1)THEN
IFCOUNT2="
100"
THEN
IFCLEAR='
ANDRE_DIAL='
KEY1<
=KEY;
ELSIFCLEAR='
ANDRE_DIAL='
=CLK;
ELSEKEY1<
=RE_DIAL1;
COUNT2<
000"
ELSE
=COUNT2+1;
--------------------------------------
PROCESS(DIN1)IS
IFDIN1(6)='
THENBCD<
ELSIFDIN1
(1)='
ELSIFDIN1
(2)='
ELSIFDIN1(3)='
ELSIFDIN1(4)='
ELSIFDIN1(5)='
ELSIFDIN1(0)='
ELSIFDIN1(7)='
ELSIFDIN1(8)='
ELSIFDIN1(9)='
ELSEBCD<
------------------------------------------------------
KEYOUT<
=KEY1;
PROCESS(KEY1)IS
IFRISING_EDGE(KEY1)THEN
ANDRE_DIAL1='
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='
THEN--按下删除键,数字从高位向低位移动
=NUMBER(7);
1111"
ELSE--在重拨键以后,显示已拨号码
=LOCK(31DOWNTO28);
=LOCK(27DOWNTO24);
=LOCK(23DOWNTO20);
=LOCK(19DOWNTO16);
=LOCK(15DOWNTO12);
=LOCK(11DOWNTO8);
=LOCK(7DOWNTO4);
=LOCK(3DOWNTO0);
---------------------------------------------------------
COUNT<
=COUNT+1;
PROCESS(COUNT)IS
CASECOUNTIS--片选,选择数码管
SET<
=NUMBER(7);
SEG8<
00000001"
00000010"
00000100"
00001000"
00010000"
1011"
00100000"
1101"
01000000"
10000000"
NULL;
----------------------------------------------------------
PROCESS(DIAL1)IS
BEGIN--将已输入数字锁存
IFRISING_EDGE(DIAL1)THEN
LOCK(31DOWNTO28)<
LOCK(27DOWNTO24)<
LOCK(23DOWNTO20)<
LOCK(19DOWNTO16)<
LOCK(15DOWNTO12)<
LOCK(11DOWNTO8)<
LOCK(7DOWNTO4)<
LOCK(3DOWNTO0)<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 EDA 脉冲 按键 电话 显示器 VHDL 程序设计 综述