您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 用VHDL实现脉冲按键电话显示器
用VHDL实现脉冲按键电路显示器第一章绪论1.1前言EDA(ElectronicDesignAutomation,电子设计自动化)技术正是为了适应现代电子产品设计的要求,吸引多学科最新成果而形成的一门新技术。利用EDA进行电子系统设计,具有以下几个特点:(1)用软件的方式设计硬件;(2)用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;(3)设计过程中可用有关软件进行各种仿真;(4)系统可现场编程,在线升级;(5)整个系统可集成在一个芯片上,体积小,功耗低,可靠性高。因此,EDA技术是现代电子设计的发展趋势。我们本学期开设了EDA课程,并开设了为期两周的EDA技术实训,主要利用VHDL语言编程,我们组的题目具体如下。1.2题目要求1、设计一个具有最高8位显示的电话按键显示器,能准确地反映按键数字;2、显示器显示从低位向高位前移,逐位显示按键数字,最低位显示当前输入数字;设置“删除键”,按下此键,从最低位开始删除数字,同时显示器数字从高位向低位移动。3、设置“拨号键”、“挂机键”、和“重拨键”,拨号键模拟拨号,按下此键拨号指示灯亮,并存储当前号码;挂机键按下后,待机指示灯亮,2秒后熄灭显示器显示;重拨键按下能显示最后一次输入的电话号码。第二章脉冲按键电路显示器设计方案2.1系统设计思路与框图我们设计的用VHDL语言实现的脉冲按键电话显示器由4个模块组成:按键电路,译码器,移位寄存、锁存器和数码管显示电路,其中移位寄存、锁存器和数码管译码显示电路为系统的主要组成部分。脉冲按键电话的总体设计框图如图2.1所示:常熟理工学院课程设计报告1图2.1脉冲按键电话总体设计方案2.2各模块功能分析2.2.1按键电路模块按键电路功能:提供0~9数字按键的输入,同时设置有拨号键,清除键,挂机键和重拨键。2.2.2译码电路模块译码电路功能:译码器的功能分为两个部分,第一部分把输入的一位键值转换成四位BCD码;第二部分把4位二进制码译成相应的数码管输出显示码。BCD码对应的七段数码管显示如表2.1所示:表2.1BCD码对应的数码管显示4位BCD码gfedcba显示数字000001111110000101100001001010110112001110011113010011001104010111011015011011111016011111100007100011111118100111011119其他情况0000000无常熟理工学院课程设计报告22.2.3移位寄存器、锁存模块移位寄存器:移位寄存器分为三个部分,当按下拨号键时,数字按键值依次由数码管的低位向高位移动,同时送入锁存器中;当按下删除键时,键值由高位向低位移除,高位数码管熄灭;当按下重拨键时,锁存器中存储的键值输入到移位寄存器中,并通过数码管显示出来。其大致的流程图如图2.2所示:开始有键按下数码管初始化扫描键值转换成4位BCD码译成七段数码管显示码删除已输入数字拨号并锁存可输入脉冲指示灯灭可输入脉冲指示灯亮在数码管上显示相应数值重拨有键按下将之前输入的数据前移,并在低位输入数字数计数到8有键按下结束NY删除键删除键YYYYY图2.2按键输入过程流程图2.2.4数码管显示模块数码管显示用于将设置好的每个按键的键值(对应0~9的数字)在数码管上显示出来。由于实验过程中需要使用8个数码管,因为在数码管显示模块必须加上数码管片选及移位的程序,从而实现数据在输入以后从低位向高位移动、显示。第三章具体程序功能及硬件实现在进行编写脉冲按键电话显示器程序时,我们主要是利用元件例化语句来实现的,在顶层文件基础上,调用了数码管BCD码译码、键值显示两个底层文件,分别命名为DISPLAY.VHD、SET_NUM.VHD。常熟理工学院课程设计报告33.1顶层文件程序(PLUSE_KEY.VHD)顶层文件的框图如图3.1所示:图3.1顶层文件框图各端口说明分别为:输入:输出:DIN1[9…0]:0~9十个数字键;KEYOUT:可输入数字指示灯;CLK1:时钟脉冲;SEG71[6…0]:8位数码管;CLEAR:删除键;SEG3[2…0]:数码管的七段;DIAL:拨号键;RE_DAIL:重拨键3.2BCD译码子程序BCD译码程序的框图如图3.2所示图3.2BCD译码程序各端口说明分别为:输入:输出:BCD1[3…0]:4位BCD码;数码管的七段显示3.3键值显示子程序(SET_NUM.VHD)键值显示控制的框图如图3.3所示:常熟理工学院课程设计报告4图3.3按键显示控制框图各端口说明分别为:输入:输出:DIN[9…0]:0~9十个数字键;KEYOUT:可输入数字指示灯;CLK:时钟脉冲;SET[3…0]:键值的BCD码CLEAR:删除键;SEG3[2…0]:数码管的七段;DIAL:拨号键;RE_DAIL:重拨键3.4硬件实现结果输入8位数字以后显示结果如图3.4所示:图3.4数码管显示结果总结与体会在大学课程即将接近尾声的时候,学院最后为我们安排了EDA技术实训,主要是通过VHDL语言编程,利用CPLA/FPGA芯片完成脉冲按键电话显示器的模拟。可以说通过一学期EDA的理论和实验的学习,对VHDL语言以及CPLD/FPGA的下载与仿真有了一定的了解。但是在刚拿到题目要求时,我们小组有点茫然,特别在找资料的时候,我们利用网络搜索基本没有找到有用的资料,后来去学校图书馆去找参考书籍,也没什么用。后来实在常熟理工学院课程设计报告5没有办法,只能在之前我们实验做过的数字秒表的基础上展开设计,自己画程序流图以及原理图,编写程序。在设计之初,由于用的实验箱资源不够,只能实现四位数字的移动显示,并且没有设置删除键,只有一个清除键。后来经过我们的修改,终于实现的八位数字的移动显示,也就基本将课题要求完成了。通过此次EDA技术实训,我们在之前的基础上能进一步熟练使用VHDL语言进行编程,也对CPLD/FPGA有了更进一步的理解。相信在我们电子信息工程专业的学生以后的学习、工作有不少的好处。参考文献[1]谭会生,张繁昌.EDA技术及应用(第二版),西安电子科技大学出版社,2004..[2]李云,侯传教,冯永浩.VHDL电路设计实用教程,机械工业出版社,2009[3]康光华.电子技术基础数字部分(第五版),高等教育出版社,2006常熟理工学院课程设计报告6附录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;ENTITYDISPLAYISPORT(BCD1:INSTD_LOGIC_VECTOR(3DOWNTO0);SEG7:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITY;常熟理工学院课程设计报告7ARCHITECTUREONEOFDISPLAYISBEGINPROCESS(BCD1)ISBEGINCASEBCD1ISWHEN0000=SEG7=0111111;--显示0WHEN0001=SEG7=0000110;--显示1WHEN0010=SEG7=1011011;--显示2WHEN0011=SEG7=1001111;--显示3WHEN0100=SEG7=1100110;--显示4WHEN0101=SEG7=1101101;--显示5WHEN0110=SEG7=1111101;--显示6WHEN0111=SEG7=0000111;--显示7WHEN1000=SEG7=1111111;--显示8WHEN1001=SEG7=1101111;--显示9WHENOTHERS=SEG7=0000000;--其他情况下数码管熄灭ENDCASE;ENDPROCESS;ENDARCHITECTURE;3键值显示子程序(SET_NUM.VHD)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSET_NUMISPORT(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_NUMISSUBTYPETENISSTD_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常熟理工学院课程设计报告8----------------------------------------------------PROCESS(CLK)ISBEGINIFRISING_EDGE(CLK)THENCOUNT1=COUNT1+1;ENDIF;ENDPROCESS;CLK1='0'WHENCOUNT11100ELSE'1';PROCESS(CLK1)ISBEGINIFRISING_EDGE
本文标题:用VHDL实现脉冲按键电话显示器
链接地址:https://www.777doc.com/doc-6890000 .html