EDA脉冲按键电话显示器要点.docx
《EDA脉冲按键电话显示器要点.docx》由会员分享,可在线阅读,更多相关《EDA脉冲按键电话显示器要点.docx(15页珍藏版)》请在冰点文库上搜索。
EDA脉冲按键电话显示器要点
东北石油大学
课程设计
课程EDA技术课程设计
题目脉冲按键电话显示器
院系电子科学学院
专业班级电子信息工程
学生姓名
学生学号
指导教师
2012年3月2日
东北石油大学课程设计任务书
课程EDA技术课程设计
题目脉冲按键电话显示器
专业电子信息工程姓名学号
主要内容、基本要求、主要参考资料等
主要内容:
设计一个准确地反映按键数字具有8位显示的电话按键显示器,该电话显示器要求具有重拨的功能,当按下重拨键时,能够显示最后一次输入的电话号码。
基本要求:
1、设计一个具有8位显示的电话按键显示器;
2、能准确地反映按键数字;
3、显示器显示从低位向高位前移,逐位显示按键数字,最低位为当前输入位;
4、设置一个“重拨”键,按下此键,能显示最后一次输入的电话号码;
5、挂机2秒后或按熄灭按键,熄灭显示器显示。
主要参考资料:
[1]潘松著.EDA技术实用教程(第二版).北京:
科学出版社,2005.
[2]康华光主编.电子技术基础模拟部分.北京:
高教出版社,2006.
[3]阎石主编.数字电子技术基础.北京:
高教出版社,2003.
完成期限2012.3.5
指导教师
专业负责人
2012年3月2日
一、总体设计思想
1.基本原理
EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件,自动的完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
在本次课程设计中是用VHDL语言实现一个能准确地反映按键数字、具有8位显示的电话按键显示器。
摘机时开始工作,显示器显示从低位向高位前移,逐位显示按键数字,最低位为当前输入位;设置一个“重拨”键,按下此键能显示最后一次输入的电话号码;挂机2秒后或按熄灭键,熄灭显示器显示。
2.设计框图
图1脉冲按键电话显示器总体设计方案
二、设计步骤和调试过程
1、总体设计电路
本文设计的脉冲按键电话显示器由五个模块组成:
按键电路、译码器、移位寄存、锁存器和数码管显示电路,其中移位寄存、锁存器和数码管译码显示电路为系统的主要组成部分。
图2总体设计电路模块
2、模块设计和相应模块程序
2.1顶层文件
按键电路模块。
提供“0”到“9”数字按键的输入,同时设置有拨号键,清除键,挂机键和重拨键。
(1)顶层文件程序
模块程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYUP_KEYIS
PORT(DIN1:
INSTD_LOGIC_VECTOR(9DOWNTO0);
CLK1,CLEAR,DIAL,RE_DIAL:
INSTD_LOGIC;
KEYOUT:
OUTSTD_LOGIC;
SEG71:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
SEG8:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITY;
ARCHITECTUREONEOFUP_KEYIS
COMPONENTSHOWIS
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;
COMPONENTTRAIS
PORT(BCD1:
INSTD_LOGIC_VECTOR(3DOWNTO0);
SEG7:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDCOMPONENT;
SIGNALSET_1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
U1:
SHOWPORTMAP(DIN1,CLK1,CLEAR,DIAL,RE_DIAL,KEYOUT,SET_1,SEG8);
U2:
TRAPORTMAP(SET_1,SEG71);
ENDARCHITECTUREONE;
(2)各端口说明分别为:
输入:
输出:
DIN1[9…0]:
0~9十个数字键;KEYOUT:
可输入数字指示灯;
CLK1:
时钟脉冲;SEG71[6…0]:
8位数码管;
CLEAR:
删除键;SEG3[2…0]:
数码管的七段;
DIAL:
拨号键;
RE_DAIL:
重拨键
2.2BCD译码模块
译码器有两个功能。
第一,把输入的一位键值转换成四位BCD码;第二,把4位二进制码译成相应的数码管输出显示码。
(1)BCD译码子程序
模块程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYTRAIS
PORT(
BCD1:
INSTD_LOGIC_VECTOR(3DOWNTO0);
SEG7:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITY;
ARCHITECTUREONEOFTRAIS
BEGIN
PROCESS(BCD1)IS
BEGIN
CASEBCD1IS
WHEN"0000"=>SEG7<="0111111";
WHEN"0001"=>SEG7<="0000110";
WHEN"0010"=>SEG7<="1011011";
WHEN"0011"=>SEG7<="1001111";
WHEN"0100"=>SEG7<="1100110";
WHEN"0101"=>SEG7<="1101101";
WHEN"0110"=>SEG7<="1111101";
WHEN"0111"=>SEG7<="0000111";
WHEN"1000"=>SEG7<="1111111";
WHEN"1001"=>SEG7<="1101111";
WHENOTHERS=>SEG7<="0000000";
ENDCASE;
ENDPROCESS;
ENDARCHITECTURE;
(2)BCD译码模块电路
图3BCD译码程序模块电路
各端口说明分别为:
输入:
输出:
BCD1[3…0]:
4位BCD码;数码管的七段显示
2.3键值显示模块
数码管显示用于将设置好的每个按键的键值在数码管上显示出来。
由于实验过程中需要使用8个数码管,因此数码管显示模块必须加上数码管片选及移位得程序,从而实现数据输入以后从低位向高位移动、显示。
(1)键值显示子程序
模块程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSHOWIS
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;
ARCHITECTUREONEOFSHOWIS
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'THENNUMBER(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'THENNUMBER(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);
NUMBER(0)<=LOCK(3DOWNTO0);
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CLK)IS
BEGIN
IFRISING_EDGE(CLK)THEN
COUNT<=COUNT+1;
ENDIF;
ENDPROCESS;
PROCESS(COUNT)IS
BEGIN
CASECOUNTIS
WHEN"0001"=>SET<=NUMBER(7);SEG8<="00000001";
WHEN"0011"=>SET<=NUMBER(6);SEG8<="00000010";
WHEN"0101"=>SET<=NUMBER(5);SEG8<="00000100";
WHEN"0111"=>SET<=NUMBER(4);SEG8<="00001000";
WHEN"1001"=>SET<=NUMBER(3);SEG8<="00010000";
WHEN"1011"=>SET<=NUMBER
(2);SEG8<="00100000";
WHEN"1101"=>SET<=NUMBER
(1);SEG8<="01000000";
WHEN"1111"=>SET<=NUMBER(4);SEG8<="10000000";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
PROCESS(DIAL1)IS
BEGIN
IFRISING_EDGE(DIAL1)THEN
LOCK(31DOWNTO28)<=NUMBER(7);
LOCK(27DOWNTO24)<=NUMBER(6);
LOCK(23DOWNTO20)<=NUMBER(5);
LOCK(19DOWNTO16)<=NUMBER(4);
LOCK(15DOWNTO12)<=NUMBER(3);
LOCK(11DOWNTO8)<=NUMBER
(2);
LOCK(7DOWNTO4)<=NUMBER
(1);
LOCK(3DOWNTO0)<=NUMBER(0);
ENDIF;
ENDPROCESS;ENDARCHITECTURE;
(2)键值显示模块
图4按键显示控制框图
各端口说明分别为:
输入:
输出:
DIN[9…0]:
0~9十个数字键;KEYOUT:
可输入数字指示灯;
CLK:
时钟脉冲;SET[3…0]:
键值的BCD码
CLEAR:
删除键;SEG3[2…0]:
数码管的七段;
DIAL:
拨号键;
RE_DAIL:
重拨键
3、仿真及仿真结果分析
图5仿真图
4、实验调试结果
将程序下载进行硬件测试。
在QuartusⅡ开发环境中进行管脚锁定,连接好数码管驱动电路,然后将目标文件下载到器件中。
最终可以看到按键正常显示、“重拨”键功能正常、达到设计要求。
三、结论及心得体会
通过本次课程设计,让我在以前所学知识的基础上,更加了解了对EDA语言编程的认识,不仅强化了以前所学过的知识,并且学到了许多书本上没有的知识,极大的扩展了我的知识面,所获匪浅。
从复习以前所学的知识到对整体设计的了解,再从概要设计、详细设计到开始使用软件以及最后的调试,整个过程都很充实。
虽然遇到不少困难,但当我通过自己查资料向老师请教及与同学相互讨论而设计出解决方案并成功实现时,那种成就感和满足感就让我忘了所有的辛苦。
由于自己只是的不足,在本次设计中仍有许多不尽如人意的地方,可能在实际应用中有些功能不到位。
经过这段时间的毕业设计实习,确实学到了不少的东西,同时也深感自己知识的欠缺,虽然即将毕业,但在以后的学习工作中,我一定会继续坚持不断的学习新的专业知识,不断完善自己,只有这样才能紧跟时代的潮流。
参考资料
[1]潘松著.EDA技术实用教程(第二版).北京:
科学出版社,2005.
[2]康华光主编.电子技术基础模拟部分.北京:
高教出版社,2006.
[3]阎石主编.数字电子技术基础.北京:
高教出版社,2003.
[4]李云,侯传教,冯永浩编.VHDL电路设计实用教程.机械工业出版社,2009.
[5]褚振勇,翁木云编.FPGA设计及应用.西安电子科技大学出版社,2002.
[6]卢毅,赖杰编.VHDL与数字电路设计.科学出版社,2001.
东北石油大学课程设计成绩评价表
课程名称
EDA技术课程设计
题目名称
脉冲按键电话显示器
学生姓名
学号
指导教师姓名
职称
序号
评价项目
指标
满分
评分
1
工作量、工作态度和出勤率
按期圆满的完成了规定的任务,难易程度和工作量符合教学要求,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。
20
2
课程设计质量
课程设计选题合理,计算过程简练准确,分析问题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。
45
3
创新
工作中有创新意识,对前人工作有一些改进或有一定应用价值。
5
4
答辩
能正确回答指导教师所提出的问题。
30
总分
评语:
指导教师:
2012年3月5日