课程设计2016年6月10日课程EDA技术课程设计题目脉冲按键电话显示器院系工学院专业班级13通信学生姓名胡潇予学生学号201301031040指导教师杨永福课程设计任务书课程EDA技术课程设计题目脉冲按键电话显示器专业通信工程姓名胡潇予学号201301031040主要内容、基本要求、主要参考资料等主要内容:设计一个准确地反映按键数字具有8位显示的电话按键显示器,该电话显示器要求具有重拨的功能,当按下重拨键时,能够显示最后一次输入的电话号码。基本要求:1、设计一个具有8位显示的电话按键显示器;2、能准确地反映按键数字;3、显示器显示从低位向高位前移,逐位显示按键数字,最低位为当前输入位;4、设置一个“重拨”键,按下此键,能显示最后一次输入的电话号码;5、挂机2秒后或按熄灭按键,熄灭显示器显示。主要参考资料:[1]潘松著.EDA技术实用教程(第二版).北京:科学出版社,2005.[2]康华光主编.电子技术基础模拟部分.北京:高教出版社,2006.[3]阎石主编.数字电子技术基础.北京:高教出版社,2003.完成期限2016.6.10指导教师杨永福专业负责人杨永福2016年6月10日1一、总体设计思想1.基本原理本题目是用VHDL语言实现一个能准确地反映按键数字、具有8位显示的电话按键显示器。摘机时开始工作,显示器显示从低位向高位前移,逐位显示按键数字,最低位为当前输入位;设置一个“重拨”键,按下此键能显示最后一次输入的电话号码;挂机2秒后或按熄灭键,熄灭显示器显示。脉冲按键电话显示器由五个模块组成:按键电路、译码器、移位寄存、锁存器和数码管显示电路,其中移位寄存、锁存器和数码管译码显示电路为系统的主要组成部分。(1)按键电路模块。提供“0”到“9”数字按键的输入,同时设置有拨号键,清除键,挂机键和重拨键。(2)译码电路模块。译码器有两个功能。第一,把输入的一位键值转换成四位BCD码;第二,把四位二进制码译成相应的数码管输出显示码。(3)移位寄存器、锁存模块。移位寄存器分为三个部分。当按下拨号键时,数字按键值依次由数码管的低位向高位移动,同时送入锁存器中;当按下删除键时,键值由高位向低位移除,高位数码管熄灭;当按下重拨键时,锁存器中存储的键值输入到移位寄存器中,并通过数码管显示出来。(4)数码管显示模块。数码管显示用于将设置好的每个按键的键值在数码管上显示出来。由于实验过程中需要使用8个数码管,因此数码管显示模块必须加上数码管片选及移位得程序,从而实现数据输入以后从低位向高位移动、显示。22.设计框图图1整体设计框图二、设计步骤和调试过程1、总体设计电路图2总体设计电路2、模块设计和相应模块程序(1)顶层文件程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;数字键入控制电路1译码显示器移位寄存器脉冲产生电路控制电路2计时电路译码显示电路3ENTITYUPKEYISPORT(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;ARCHITECTUREONEOFUPKEYISCOMPONENTSHOWISPORT(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;COMPONENTTRAISPORT(BCD1:INSTD_LOGIC_VECTOR(3DOWNTO0);SEG7:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDCOMPONENT;SIGNALSET_1:STD_LOGIC_VECTOR(3DOWNTO0);BEGINU1:SHOWPORTMAP(DIN1,CLK1,CLEAR,DIAL,RE_DIAL,KEYOUT,SET_1,SEG8);4U2:TRAPORTMAP(SET_1,SEG71);ENDARCHITECTUREONE;(2)译码器译码部分的设计图3BCD译码电路图BCD译码子程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTRAISPORT(BCD1:INSTD_LOGIC_VECTOR(3DOWNTO0);SEG7:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITY;5ARCHITECTUREONEOFTRAISBEGINPROCESS(BCD1)ISBEGINCASEBCD1ISWHEN0000=SEG7=0111111;WHEN0001=SEG7=0000110;WHEN0010=SEG7=1011011;WHEN0011=SEG7=1001111;WHEN0100=SEG7=1100110;WHEN0101=SEG7=1101101;WHEN0110=SEG7=1111101;WHEN0111=SEG7=0000111;WHEN1000=SEG7=1111111;WHEN1001=SEG7=1101111;WHENOTHERS=SEG7=0000000;ENDCASE;ENDPROCESS;ENDARCHITECTURE;(3)键值显示部分设计6图4按键显示控制电路图按键显示控制子程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSHOWISPORT(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;ARCHITECTUREONEOFSHOWISSUBTYPETENISSTD_LOGIC_VECTOR(3DOWNTO0);SIGNALBCD:TEN;TYPENUMBER1ISARRAY(7DOWNTO0)OFSTD_LOGIC_VECTOR(3DOWNTO0);7SIGNALNUMBER: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);BEGINPROCESS(CLK)ISBEGINIFRISING_EDGE(CLK)THENCOUNT1=COUNT1+1;ENDIF;ENDPROCESS;CLK1='0'WHENCOUNT11100ELSE'1';PROCESS(CLK1)ISBEGINIFRISING_EDGE(CLK1)THENDIN1(9DOWNTO0)=DIN(9DOWNTO0);DIAL1=DIAL;RE_DIAL1=RE_DIAL;ENDIF;8ENDPROCESS;KEY=(DIN1(0)ORDIN1(1)ORDIN1(2)ORDIN1(3)ORDIN1(4)ORDIN1(5)ORDIN(6)ORDIN1(7)ORDIN1(8)ORDIN1(9));PROCESS(CLK1)ISBEGINIFFALLING_EDGE(CLK1)THENIFCOUNT2=100THENIFCLEAR='0'ANDRE_DIAL='0'THENKEY1=KEY;ELSIFCLEAR='1'ANDRE_DIAL='0'THENKEY1=CLK;ELSEKEY1=RE_DIAL1;ENDIF;COUNT2=000;ELSECOUNT2=COUNT2+1;ENDIF;ENDIF;ENDPROCESS;PROCESS(DIN1)ISBEGINIFDIN1(6)='1'THENBCD=0110;ELSIFDIN1(1)='1'THENBCD=0001;ELSIFDIN1(2)='1'THENBCD=0010;ELSIFDIN1(3)='1'THENBCD=0011;ELSIFDIN1(4)='1'THENBCD=0100;9ELSIFDIN1(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)ISBEGINIFRISING_EDGE(KEY1)THENIFCLEAR='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);10NUMBER(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;ELSENUMBER(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)ISBEGINIFRISING_EDGE(CLK)THEN11COUNT=COUNT+1;ENDIF;ENDPROCESS;PROCESS(COUNT)ISBEGINCASECOUNTISWHEN0001=SET=NUMBER(7);SEG8=00000001;WHEN0011=SET=NUMBER(6);SEG8=00000010;WHEN0101=SET=NUMBER(5);SEG8=00000100;WHEN0111=SET=NUMBER(4);SEG8=00001000;WHEN1