VHDL脉冲按键电话显示器_第1页
VHDL脉冲按键电话显示器_第2页
VHDL脉冲按键电话显示器_第3页
VHDL脉冲按键电话显示器_第4页
VHDL脉冲按键电话显示器_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、常熟理工学院课程设计报告用VHDL实现脉冲按键电路显示器第一章 绪论1.1前言EDA(Electronic Design Automation,电子设计自动化 )技术正是为了适应现代电子产品设计的要求,吸引多学科最新成果而形成的一门新技术。利用EDA进行电子系统设计,具有以下几个特点:(1)用软件的方式设计硬件;(2)用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;(3)设计过程中可用有关软件进行各种仿真;(4)系统可现场编程,在线升级;(5)整个系统可集成在一个芯片上,体积小,功耗低,可靠性高。因此,EDA技术是现代电子设计的发展趋势。我们本学期开设了EDA 课程,并开设了

2、为期两周的EDA技术实训,主要利用VHDL语言编程,我们组的题目具体如下。1.2题目要求1、 设计一个具有最高8位显示的电话按键显示器,能准确地反映按键数字;2、 显示器显示从低位向高位前移,逐位显示按键数字,最低位显示当前输入数字;设置“删除键”,按下此键,从最低位开始删除数字,同时显示器数字从高位向低位移动。3、 设置“拨号键”、“挂机键”、和“重拨键”,拨号键模拟拨号,按下此键拨号指示灯亮,并存储当前号码;挂机键按下后,待机指示灯亮,2秒后熄灭显示器显示;重拨键按下能显示最后一次输入的电话号码。2.1系统设计思路与框图我们设计的用VHDL语言实现的脉冲按键电话显示器由4个模块组成:按键电

3、路,译码器,移位寄存、锁存器和数码管显示电路,其中移位寄存、锁存器和数码管译码显示电路为系统的主要组成部分。脉冲按键电话的总体设计框图如图2.1所示:图2.1 脉冲按键电话总体设计方案2.2 各模块功能分析2.2.1按键电路模块按键电路功能:提供09数字按键的输入,同时设置有拨号键,清除键,挂机键和重拨键。2.2.2 译码电路模块译码电路功能:译码器的功能分为两个部分,第一部分把输入的一位键值转换成四位BCD码;第二部分把4位二进制码译成相应的数码管输出显示码。BCD码对应的七段数码管显示如表2.1所示:表2.1 BCD码对应的数码管显示4位BCD码gfedcba显示数字00000111111

4、0000101100001001010110112001110011113010011001104010111011015011011111016011111100007100011111118100111011119其他情况0000000无2.2.3 移位寄存器、锁存模块移位寄存器:移位寄存器分为三个部分,当按下拨号键时,数字按键值依次由数码管的低位向高位移动,同时送入锁存器中;当按下删除键时,键值由高位向低位移除,高位数码管熄灭;当按下重拨键时,锁存器中存储的键值输入到移位寄存器中,并通过数码管显示出来。其大致的流程图如图2.2所示:图2.2 按键输入过程流程图2.2.4 数码管显示模块数

5、码管显示用于将设置好的每个按键的键值(对应09的数字)在数码管上显示出来。由于实验过程中需要使用8个数码管,因为在数码管显示模块必须加上数码管片选及移位的程序,从而实现数据在输入以后从低位向高位移动、显示。在进行编写脉冲按键电话显示器程序时,我们主要是利用元件例化语句来实现的,在顶层文件基础上,调用了数码管BCD码译码、键值显示两个底层文件,分别命名为DISPLAY.VHD、SET_NUM.VHD。3.1 顶层文件程序(PLUSE_KEY.VHD)顶层文件的框图如图3.1所示:图3.1 顶层文件框图各端口说明分别为:输入: 输出:DIN190:09十个数字键; KEYOUT:可输入数字指示灯;

6、CLK1:时钟脉冲; SEG7160:8位数码管; CLEAR:删除键; SEG320:数码管的七段;DIAL:拨号键;RE_DAIL:重拨键3.2 BCD译码子程序BCD译码程序的框图如图3.2所示图3.2 BCD译码程序各端口说明分别为:输入: 输出:BCD130:4位BCD码; 数码管的七段显示3.3键值显示子程序(SET_NUM.VHD)键值显示控制的框图如图3.3所示:图3.3按键显示控制框图各端口说明分别为:输入: 输出:DIN 90:09十个数字键; KEYOUT:可输入数字指示灯;CLK:时钟脉冲; SET30:键值的BCD码 CLEAR:删除键; SEG320:数码管的七段;

7、DIAL:拨号键;RE_DAIL:重拨键总结与体会在大学课程即将接近尾声的时候,学院最后为我们安排了EDA技术实训,主要是通过VHDL语言编程,利用CPLA/FPGA芯片完成脉冲按键电话显示器的模拟。可以说通过一学期EDA的理论和实验的学习,对VHDL语言以及CPLD/FPGA 的下载与仿真有了一定的了解。但是在刚拿到题目要求时,我们小组有点茫然,特别在找资料的时候,我们利用网络搜索基本没有找到有用的资料,后来去学校图书馆去找参考书籍,也没什么用。后来实在没有办法,只能在之前我们实验做过的数字秒表的基础上展开设计,自己画程序流图以及原理图,编写程序。在设计之初,由于用的实验箱资源不够,只能实现

8、四位数字的移动显示,并且没有设置删除键,只有一个清除键。后来经过我们的修改,终于实现的八位数字的移动显示,也就基本将课题要求完成了。通过此次EDA技术实训,我们在之前的基础上能进一步熟练使用VHDL语言进行编程,也对CPLD/FPGA有了更进一步的理解。相信在我们电子信息工程专业的学生以后的学习、工作有不少的好处。 附录1 顶层文件程序LIBRARY IEEE; -库定义USE IEEE.STD_LOGIC_1164.ALL; -包定义USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY PLUSE_KEY IS -定义实体名、端口PORT(DIN1:IN STD_L

9、OGIC_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_VECTOR(7 DOWNTO 0); - 8个数码管END ENTITY;ARCHITECTURE ONE OF PLUSE_KEY IS -定义结构体COMPONENT SET_NUM IS -调用SET_NUM底层文件PORT(DIN:IN STD_LO

10、GIC_VECTOR(9 DOWNTO 0);CLK,CLEAR,DIAL,RE_DIAL:IN STD_LOGIC;KEYOUT:OUT STD_LOGIC;SET:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);SEG8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;COMPONENT DISPLAY IS -调用DISPLAY底层文件 PORT(BCD1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);SEG7:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END COMPONENT;S

11、IGNAL 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)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DISPLAY IS PORT( BCD1:IN STD_LO

12、GIC_VECTOR(3 DOWNTO 0); SEG7:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); END ENTITY;ARCHITECTURE ONE OF DISPLAY ISBEGIN PROCESS(BCD1)IS BEGIN CASE BCD1 IS WHEN "0000"=>SEG7<="0111111" -显示0 WHEN "0001"=>SEG7<="0000110" -显示1 WHEN "0010"=>SEG7<=

13、"1011011" -显示2 WHEN "0011"=>SEG7<="1001111" -显示3 WHEN "0100"=>SEG7<="1100110" -显示4 WHEN "0101"=>SEG7<="1101101" -显示5 WHEN "0110"=>SEG7<="1111101" -显示6 WHEN "0111"=>SEG7<=

14、"0000111" -显示7 WHEN "1000"=>SEG7<="1111111" -显示8 WHEN "1001"=>SEG7<="1101111" -显示9 WHEN OTHERS=>SEG7<="0000000" -其他情况下数码管熄灭 END CASE; END PROCESS;END ARCHITECTURE;3 键值显示子程序(SET_NUM.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.

15、ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SET_NUM IS PORT(DIN:IN STD_LOGIC_VECTOR(9 DOWNTO 0); CLK,CLEAR,DIAL,RE_DIAL:IN STD_LOGIC; KEYOUT:OUT STD_LOGIC; SET:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEG8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY;ARCHITECTURE ONE OF SET_NUM ISSUBTYPE TEN IS STD_LOGIC_VE

16、CTOR(3 DOWNTO 0);SIGNAL BCD :TEN;TYPE NUMBER1 IS ARRAY(7 DOWNTO 0) OF STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL NUMBER : NUMBER1;SIGNAL KEY,KEY1,CLK1,DIAL1,RE_DIAL1:STD_LOGIC;SIGNAL COUNT:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL COUNT1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL COUNT2:STD_LOGIC_VECTOR(2 DOWNTO 0);SIG

17、NAL DIN1: STD_LOGIC_VECTOR(9 DOWNTO 0);SIGNAL LOCK: STD_LOGIC_VECTOR(31 DOWNTO 0);BEGIN- PROCESS(CLK)IS BEGIN IF RISING_EDGE(CLK) THEN COUNT1<=COUNT1+1; END IF; END PROCESS; CLK1<='0' WHEN COUNT1<"1100" ELSE '1' PROCESS(CLK1)IS BEGIN IF RISING_EDGE(CLK1) THEN DIN1(

18、9 DOWNTO 0)<=DIN(9 DOWNTO 0); DIAL1<=DIAL; RE_DIAL1<=RE_DIAL; END IF; END PROCESS; 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); PROCESS(CLK1)IS BEGIN IF FALLING_EDGE(CLK1) THEN IF COUNT2="100" THEN IF CLEAR=

19、9;0'AND RE_DIAL='0' THEN KEY1<=KEY; ELSIF CLEAR ='1' AND RE_DIAL='0' THEN KEY1<=CLK; ELSE KEY1<=RE_DIAL1; END IF; COUNT2<="000" ELSE COUNT2<=COUNT2+1; END IF; END IF; END PROCESS;- PROCESS(DIN1)IS BEGIN IF DIN1(6)='1' THEN BCD<="01

20、10" ELSIF DIN1(1)='1' THEN BCD<="0001" ELSIF DIN1(2)='1' THEN BCD<="0010" ELSIF DIN1(3)='1' THEN BCD<="0011" ELSIF DIN1(4)='1' THEN BCD<="0100" ELSIF DIN1(5)='1' THEN BCD<="0101" ELSIF DIN1(

21、0)='1' THEN BCD<="0000" ELSIF DIN1(7)='1' THEN BCD<="0111" ELSIF DIN1(8)='1' THEN BCD<="1000" ELSIF DIN1(9)='1' THEN BCD<="1001" ELSE BCD<="0000" END IF; END PROCESS;- KEYOUT<=KEY1; PROCESS(KEY1)IS BE

22、GIN IF RISING_EDGE(KEY1) THEN IF CLEAR='0' AND RE_DIAL1='0' 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

23、CLEAR='1' AND RE_DIAL1='0' THEN -按下删除键,数字从高位向低位移动 NUMBER(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)<

24、;= LOCK(31 DOWNTO 28); NUMBER(6)<= LOCK(27 DOWNTO 24); NUMBER(5)<= LOCK(23 DOWNTO 20); NUMBER(4)<= LOCK(19 DOWNTO 16); NUMBER(3)<= LOCK(15 DOWNTO 12); NUMBER(2)<= LOCK(11 DOWNTO 8); NUMBER(1)<= LOCK(7 DOWNTO 4); NUMBER(0)<= LOCK(3 DOWNTO 0); END IF; END IF; END PROCESS;- PROCESS

25、(CLK)IS BEGIN IF RISING_EDGE(CLK) THEN COUNT<=COUNT+1; END IF; END PROCESS;- PROCESS(COUNT)IS BEGIN CASE COUNT IS -片选,选择数码管 WHEN "0001"=>SET<=NUMBER(7);SEG8<="00000001" WHEN "0011"=>SET<=NUMBER(6);SEG8<="00000010" WHEN "0101"=>S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论