1、3.1.1BCD译码子程序 63.1.2仿真波形 63.1.3 RTL电路 63.2键值显示 73.2.1键值显示子程序(SET_NUM.VHD) 73.2.2仿真波形 83.3 顶层文件 8试验总结 91 实验结果 92 心得体会 9参考文献 9附录 91 顶层文件程序 92 BCD译码子程序(DISPLAY.VHD) 103 键值显示子程序(SET_NUM.VHD) 111设计任务和主要技术指标1) 设计一个具有最高8位显示的电话按键显示器;2) 能准确地反映按键数字;3) 显示器显示从低位向高位前移,逐位显示按键数字,最低位显示当前输入数字;4) 设置“删除键”,按下此键,从最低位开始删
2、除数字,同时显示器数字从高位向低位移动。5) 设置“拨号键”拨号键模拟拨号,按下此键拨号指示灯亮;6) 设置一个重拨键,按下此键,能显示最后一次输入的电话号码;7) 挂机2S后或按熄“灭按键”,熄灭显示器显示。2 设计方案及工作原理2.1系统设计思路与框图 我们设计的用VHDL语言实现的脉冲按键电话显示器由4个模块组成:按键电路,译码器,移位寄存、锁存器和数码管显示电路,其中移位寄存、锁存器和数码管译码显示电路为系统的主要组成部分。脉冲按键电话的总体设计框图如图2.1所示:图2.1 脉冲按键电话总体设计方案2.2 各模块功能分析2.2.1按键电路模块 按键电路功能:提供09数字按键的输入,同时
3、设置有拨号键,清除键,挂机键和重拨键。2.2.2 译码电路模块 译码电路功能:译码器的功能分为两个部分,第一部分把输入的一位键值转换成四位BCD码;第二部分把4位二进制码译成相应的数码管输出显示码。BCD码对应的七段数码管显示如表2.1所示:表2.1 BCD码对应的数码管显示4位BCD码gfedcba显示数字123456789其他情况无2.2.3 移位寄存器、锁存模块 移位寄存器:移位寄存器分为三个部分,当按下拨号键时,数字按键值依次由数码管的低位向高位移动,同时送入锁存器中;当按下删除键时,键值由高位向低位移除,高位数码管熄灭;当按下重拨键时,锁存器中存储的键值输入到移位寄存器中,并通过数码
4、管显示出来。 其大致的流程图如图2.2所示:图2.2 按键输入过程流程图2.2.4 数码管显示模块 数码管显示用于将设置好的每个按键的键值(对应09的数字)在数码管上显示出来。由于实验过程中需要使用8个数码管,因为在数码管显示模块必须加上数码管片选及移位的程序,从而实现数据在输入以后从低位向高位移动、显示。在进行编写脉冲按键电话显示器程序时,我们主要是利用元件例化语句来实现的,在顶层文件基础上,调用了数码管BCD码译码、键值显示两个底层文件,分别命名为DISPLAY.VHD、SET_NUM.VHD。3 单元电路模块的设计、仿真测试3.1BCD译码3.1.1BCD译码子程序BCD译码程序的框图如
5、图3.2所示图3.2 BCD译码程序各端口说明分别为:输入: 输出:BCD130:4位BCD码; 数码管的七段显示3.1.2仿真波形3.1.3 RTL电路3.2键值显示3.2.1键值显示子程序(SET_NUM.VHD)键值显示控制的框图如图3.3所示:图3.3按键显示控制框图DIN 90:09十个数字键; KEYOUT:可输入数字指示灯;CLK:时钟脉冲; SET30:键值的BCD码 CLEAR:删除键; SEG320:数码管的七段;DIAL:拨号键;RE_DAIL:重拨键3.2.2仿真波形3.2.3 RTL电路图3.3 顶层文件总体设计电路如图所示,通过顶层文件生成RTL电路。; SEG71
6、60:8位数码管;CLK1: SEG820:重拨键 DIN190:09十个数字键 试验总结1 实验结果仿真结果如预期所想,实现了预期的目标,电话号码移位设计电路是通过按不同的按键来控制电话号码的拨打情况,通过一个清零端可以控制(当输入错误号码后,清除当前号码,再重新输入一组新的号码时)电话号码的输入,这样可以自由的输入和更改电话号码。锁存器记录最后一次所拨号码可以进行重拨操作,显示时间过长可以进行挂机操作。另外由于条件等的限制,只能进行软件仿真,而软件仿真一方面存在延时,另一方面不能像硬件测试那样直观2 心得体会通过本次课程设计我认识到了自己的不足,在实际操作过程中查阅了很多资料,也和组员们讨
7、论了很久。首先,经过这次课程设计我的实际动手能力得到很大的提高,另外对一个课题的总体的驾驭能力也上升的一个新的层面。其次,此次设计中也遇到了很多不同困难,在和组员之间的相互讨论中认识到团队合作的重要性。最后,我更加深刻的体会到理论与实际相结合的重要性,只有将理论与实践相结合,才能真正的提高自己的动手能力,而理论运用于实践正式当代大学生所学习的一项基本技能。 参考文献1. 潘松,黄继业.EDA技术与VHDL(第3版).清华大学出版社,2009.2. 卢毅,赖杰.VHDL与数字电路设计M.科学出版社,2007.3. 潘松,EDA技术实用教程(第二版).科学出版社,2005. 附录1 顶层文件程序L
8、IBRARY IEEE; -库定义USE IEEE.STD_LOGIC_1164.ALL; -包定义USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY PLUSE_KEY IS -定义实体名、端口PORT(DIN1:IN STD_LOGIC_VECTOR(9 DOWNTO 0); -定义09数字输入CLK1,CLEAR,DIAL,RE_DIAL:IN STD_LOGIC;KEYOUT:OUT STD_LOGIC; -定义可输入脉冲指示灯SEG71:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -定义七位段码SEG8:OUT STD_LOGIC_V
9、ECTOR(7 DOWNTO 0); - 8个数码管END ENTITY;ARCHITECTURE ONE OF PLUSE_KEY IS -定义结构体COMPONENT SET_NUM IS -调用SET_NUM底层文件PORT(DIN:CLK,CLEAR,DIAL,RE_DIAL:SET:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT;COMPONENT DISPLAY IS -调用DISPLAY底层文件 PORT(BCD1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);SEG7:OUT STD_LOGIC_VECTOR(6
10、DOWNTO 0);SIGNAL SET_1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN -各端口的连接U1: SET_NUM PORT MAP( DIN1,CLK1,CLEAR,DIAL,RE_DIAL,KEYOUT,SET_1,SEG8);U2:DISPLAY PORT MAP(SET_1,SEG71);END ART;2 BCD译码子程序(DISPLAY.VHD)ENTITY DISPLAY IS PORT( BCD1: SEG7:ARCHITECTURE ONE OF DISPLAY ISBEGIN PROCESS(BCD1)IS BEGIN CASE BCD
11、1 IS WHEN 0000=SEG70000000 -其他情况下数码管熄灭 END CASE; END PROCESS;END ARCHITECTURE;3 键值显示子程序(SET_NUM.VHD)ENTITY SET_NUM IS PORT(DIN: CLK,CLEAR,DIAL,RE_DIAL: KEYOUT: SET: SEG8:ARCHITECTURE ONE OF SET_NUM ISSUBTYPE TEN IS STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL BCD :TEN;TYPE NUMBER1 IS ARRAY(7 DOWNTO 0) OF STD
12、_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL NUMBER : NUMBER1;SIGNAL KEY,KEY1,CLK1,DIAL1,RE_DIAL1:STD_LOGIC;SIGNAL COUNT:SIGNAL COUNT1:SIGNAL COUNT2:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL DIN1: STD_LOGIC_VECTOR(9 DOWNTO 0);SIGNAL LOCK: STD_LOGIC_VECTOR(31 DOWNTO 0);BEGIN- PROCESS(CLK)IS IF RISING_EDGE(CLK) THEN CO
13、UNT1=COUNT1+1; END IF; CLK1=0 WHEN COUNT11100 ELSE 1 PROCESS(CLK1)IS IF RISING_EDGE(CLK1) THEN DIN1(9 DOWNTO 0)=DIN(9 DOWNTO 0); DIAL1=DIAL; RE_DIAL1=RE_DIAL; KEY=(DIN1(0) OR DIN1(1) OR DIN1(2) OR DIN1(3) OR DIN1(4) OR DIN1(5) OR DIN(6) OR DIN1(7) OR DIN1(8) OR DIN1(9); IF FALLING_EDGE(CLK1) THEN IF
14、 COUNT2=100 THEN IF CLEAR=AND RE_DIAL= KEY1=KEY; ELSIF CLEAR = AND RE_DIAL=CLK; ELSE KEY1=RE_DIAL1; COUNT2000 ELSE=COUNT2+1;- PROCESS(DIN1)IS IF DIN1(6)= THEN BCD ELSIF DIN1(1)= ELSIF DIN1(2)= ELSIF DIN1(3)= ELSIF DIN1(4)= ELSIF DIN1(5)= ELSIF DIN1(0)= ELSIF DIN1(7)= ELSIF DIN1(8)= ELSIF DIN1(9)= EL
15、SE BCD- KEYOUT=KEY1; PROCESS(KEY1)IS IF RISING_EDGE(KEY1) THEN AND RE_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; ELSIF CLEAR= THEN -按下删除键,数字从高位向低位移动=
16、NUMBER(7);1111 ELSE -在重拨键以后,显示已拨号码= LOCK(31 DOWNTO 28);= LOCK(27 DOWNTO 24);= LOCK(23 DOWNTO 20);= LOCK(19 DOWNTO 16);= LOCK(15 DOWNTO 12);= LOCK(11 DOWNTO 8);= LOCK(7 DOWNTO 4);= LOCK(3 DOWNTO 0);- COUNT=COUNT+1; PROCESS(COUNT)IS CASE COUNT IS -片选,选择数码管SET=NUMBER(7);SEG8000000010000001000000100000010000001000010110010000011010100000010000000NULL;- PROCESS(DIAL1)IS BEGIN -将已输入数字锁存 IF RISING_EDGE(DIAL1) THEN LOCK(31 DOWNTO 28) LOCK(27 DOWNTO 24) LOCK(23 DOWNTO 20) LOCK(19 DOWNTO 16) LOCK(15 DOWNTO 12) LOCK(11 DOWNTO 8) LOCK(7 DOWNTO 4) LOCK(3 DOWNTO 0)
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2