为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

VHDL课程设计数字频率计、乒乓游戏机(二合一)

2020-03-05 2页 doc 110KB 2阅读

用户头像

is_751406

暂无简介

举报
VHDL课程设计数字频率计、乒乓游戏机(二合一)湖南科技大学 信息与电气工程学院 《VHDL硬件描述语言课程设计报告》 题    目: 数字频率计、乒乓游戏机 专    业:    通信工程        班    级:        一班          姓    名:      YC          学    号:                      指导教师:      胡仕刚          2015年 01月 04日 信息与电气工程学院 课程设计任务书 2014—2015学年第一学期 专    业:                  学 ...
VHDL课程设计数字频率计、乒乓游戏机(二合一)
湖南科技大学 信息与电气工程学院 《VHDL硬件描述语言课程报告》 题    目: 数字频率计、乒乓游戏机 专    业:    通信工程        班    级:        一班          姓    名:      YC          学    号:                      指导教师:      胡仕刚          2015年 01月 04日 信息与电气工程学院 课程设计任务书 2014—2015学年第一学期 专    业:                  学    号:              姓    名:            课设名称:              设计题目:              完成期限:自    年 月 日至    年 月 日共    周 设计依据、要求及主要内容(可另加附页): 指导教师(签字):            批准日期:        年  月    日 摘要    1 引言    2 第一章 概述    2 1.1 设计概述    2 1.1.1 数字频率计概述    2 1.1.2 乒乓球游戏机概述    2 1.2课程设计的总体目标    2 1.3 设计原理    3 1.3.1数字频率计设计原理    3 1.3.2 乒乓游戏机设计原理    3 第二章 设计分析    4 2.1数字频率计的设计分析    4 2.1.1设计任务及要求    4 2.1.2模块的划分    5 2.2乒乓球游戏机的设计分析    5 2.2.1设计任务及要求    5 2.2.2模块的划分    6 第三章 各功能模块基于VHDL的设计    6 3.1数字频率计的各模块设计    6 3.1 .1时基产生与测频时序控制电路模块的VHDL源程序    6 3.1.2 待测信号脉冲计数电路模块的VHDL源程序    7 3.1.3 锁存与译码显示控制电路模块的VHDL源程序    8 3.1.4 顶层电路的VHDL源程序    10 3.2乒乓球游戏机各模块的设计    10 3.2.1主程序状态机模块    10 3.2.2数码管译码模块    12 3.2.3按键消抖模块    13 第四章 波形仿真    14 4.1数字频率计的波形仿真    14 4.1.1 时基产生与测频时序控制电路模块的仿真    14 4.1.2待测信号脉冲计数电路模块的仿真    15 4.1.3 锁存与译码显示控制电路模块的仿真    16 4.1.4 数字频率计系统的仿真    17 4.2乒乓球游戏机波形仿真    18 4.2.1发球仿真    18 4.2.2正确时刻击球仿真    18 4.2.3提早击球仿真    19 第五章 体会和建议    21 参考文献:    22 摘要 设计多功能数字频率计的设计方法采用一种自顶向下分层。该频率计采用VHDL硬件描述语言编程以MAX+PLUSⅡ为开发环境,极大地减少了硬件资源的占用。数字频率计模块划分的设计具有相对独立性,可以对模块单独进行设计、调试和修改,缩短了设计周期。 用VHDL编程模拟乒乓球比赛,电路模块由状态机、记分器、译码显示器等部分组成,对各部分编写VHDL算法,进行编译、仿真、逻辑综合、逻辑适配及程序下栽.通过GW48型EDA实验箱的验证,乒乓游戏机能模拟乒乓球比赛的基本过程和,并能自动裁判和记分。 关键词:VHDL;数字频率计;MAX+PLUSⅡ;乒乓游戏机 Abstract This paper presents a top-down design of multi-layered design method of digital frequency meter. The frequency counter using VHDL hardware description language programming in MAX + PLUS Ⅱ for the development environment, greatly reducing the hardware resources of the occupation. Digital frequency meter module design division of the relative independence of the separate modules can design, debug and modify, shorten the design cycle. Table tennis simulation game using VHDL programming, circuit module is composed of state machine, marker, decoding display parts, each part of the preparation of the VHDL algorithm, compile, simulation, logic synthesis, logic adapter and program planted. Through experimental verification box type GW48 EDA, table tennis tour basic process and rules of play of function simulation table tennis competition, and can automatically judge and score. Key words: VHDL;Digital frequency meter;MAX+PLUSⅡ;table tennis game machine 引言 利用VHDL硬件描述语言,采用自顶向下和基于库的设计,设计者不但可以不必了解硬件结构设计,而且将使系统大大简化,提高整体的性能和可靠性。 本课程设计以MAX+plus II为设计平台,设计了基于VHDL的数字频率计和乒乓游戏机两个设计项目。本设计具有层次性好,结构清晰,仿真效果真实准确等特点。 第一章 概述 1.1 设计概述 1.1.1 数字频率计概述 所谓频率,就是周期信号在单位时间(1s)里变化的次数。 本数字频率计的设计思路是: (1) 根据频率计的测频原理,可以选择合适的时基信号对输入被测信号脉冲进行计数,实现测频的目的。 (2) 根据数字频率计的基本原理,本文设计的基本思想是分为三个模块来实现其功能,即时基产生与测频时序控制电路模块、待测信号脉冲计数电路模块和锁存与译码显示控制电路模块,并且分别用VHDL对其进行编程,实现计数电路、锁存电路、显示电路等。 1.1.2 乒乓球游戏机概述 两人乒乓球游戏机是用9个发光二级管代表乒乓球台,中间一个发光二极管兼做乒乓球网,用点亮的发光二极管按一定方向移动来表示球的运动。 本乒乓球游戏机的设计思路是: (1) 在游戏机的两侧各设置发球和击球开关,甲乙双方按乒乓球比赛规则来操作开关。当甲方按动发球开关时,靠近甲方的第一个发光二极管亮,然后发光二极管由甲方向乙方依次点亮,代表乒乓球的移动。 (2) 当球过网后按照设计者的球位乙方就可以击球。若乙方提前击球或者未击到球,则甲方得分,甲方的记分牌自动加分。然后重新发球进行比赛,知道一方记分达到21分为止,记分清零,重新开始新一局比赛。 1.2课程设计的总体目标 (1) 本设计的任务是熟悉支持VHDL语言的软件,例如:MAX—PLUS2,ISP,FOUNDATION等,利用这一类软件使用VHDL语言进行设计。 (2) 熟悉数字电路及相关专业课程的基本知识并能联系具体程序 (3) 正确操作使用VHDL语言相关软件,能编译,调试,仿真VHDL语言程序 (4) 设计数字电路,编写程序,实现电路功能。 1.3 设计原理 1.3.1数字频率计设计原理 众所周知,频率信号易于传输,抗干扰性强,可以获得较好的测量精度。因此,频率检测是电子测量领域最基本的测量之一。频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1s。闸门时间可以根据需要取值,大于或小于1S都可以。闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。一般取1s作为闸门时间。 数字频率计的关键组成部分包括测频控制信号发生器、计数器、锁存器、译码驱动电路和显示电路,其原理框图如图1. 1所示。 1.3.2 乒乓游戏机设计原理 设计该乒乓球游戏机的输入/输出端口。首先考虑输入端口,一般都应该设置一个异步置位端口Reset,用于在系统不正常时回到初始状态。 两个发球输入端StartA,StartB,逻辑‘1’分别表示甲方和乙方的发球;两个击球输入端Hit1和Hit2,逻辑‘1’分别表示甲击球和乙击球。 一个开始游戏按钮startbutton,处于逻辑‘1’表示可以游戏。还得有一个时钟输入端口clk。其次考虑输出端口,芯片应该有9个输出端口来控制9个发光二极管,输出逻辑‘1’即输出一个高电平,可以使发光二极管点亮。 另外,要直观地表示双方的得分,就得用到七段译码器,每方用到2个,可以表示0~21的数字,每个七段译码器需要芯片的7个输出端口来控制,总共需要28个输出端口。 其原理框图如图1.2所示。 按键 系统的逻辑划分图 图1.2 乒乓球游戏机原理框图 第二章 设计分析 2.1数字频率计的设计分析 2.1.1设计任务及要求 设计一个四位十进制的数字频率计,要求具有以下功能: (1) 测量范围:1Hz~10kHz。 (2) 测量误差 1%。 (3) 响应时间 15s。 (4) 显示时间不少于1s。 (5) 具有记忆显示的功能,即在测量的过程中不刷新数据,等数据过程结束后才显示测量结果,给出待测信号的频率值,并保存到下一次测量结束。 2.1.2模块的划分 根据系统设计要求,系统设计采用自顶向下的设计方法,系统的组成框图如图3. 1所示,包括时基产生与测频时序控制电路模块,以及待测信号脉冲计数电路模块和锁存与译码显示控制电路模块。 (1) 时基产生与测频时序控制电路模块 时基产生与测频时序控制电路的主要产生计数允许信号EN、清零信号CCLR和锁存信号LOCK。 (2) 待测信号脉冲计数电路模块 待测信号脉冲计数电路是对待测脉冲信号的频率进行测量,它可由4个十进制加法计数器组成,其中EN为计数选通控制信号,CLR为计数器清零信号。在计数器清零信号CLR清零后,当计数选通控制信号EN有效时,开始对待测信号进行计数。如果计数选通控制信号EN的宽度为1s,那么计数结果就为待测信号的频率;如果计数选通信号EN的宽度为100ms,那么待测信号的频率等于计数结果 10。 (3) 锁存与译码显示控制电路模块 锁存与译码显示控制电路用于实现记忆显示,在测量过程中不刷新新的数据,直到测量过程结束后,锁存显示测量结果,并且保存到下一次测量结束。 锁存与译码显示电路的功能是对四位BCD码进行锁存,并转换为对应的4组七段码,用于驱动数码管。 2.2乒乓球游戏机的设计分析 2.2.1设计任务及要求 设计一个乒乓球游戏机,该机模拟乒乓球比赛的基本过程和规则,并能自动裁判和计分。要求如下: (1)使用乒乓游戏机的甲、乙双方各在不同的位置发球或击球。 (2)乒乓球的位置和移动方向由灯亮及依次点亮的方向决定。球移动的速度为0.1~0.5s移动一位(读者可以根据自己的情况进行设定)。球过网,接球方就可以接球,提前接球或者没击着球均判失分。 (3)比赛按21分为一局,甲、乙双方都应设置各自的记分牌,任何一方先记满21分,该方就算胜出。按Reset键将记分牌清0后,即可开始新的一局比赛。 2.2.2模块的划分 (1)主程序状态机模块 这个模块式主程序模块,也是最重要的模块。采用状态机单进程的方法,一共设置了7个状态,分别是“等待发球状态”,“第一盏灯亮状态”,“第六盏灯亮状态”,“球向乙移动状态”,“球向甲移动状态”,“允许甲击球状态”,“允许乙击球状态”。 (2)数码管译码模块 这次采用的是共阳数码管,就是把主程序模块里的计数count1和count2译成7段译码。 (3)按键消抖模块 这个模块主要是当我们按下hit1、hit2、reset、serve四个键时要进行消抖,否则我们的开发板将感应不到。主要采用的是计数法消抖,我们让按键持续时间大于N个clk时钟周期时,计数器输出一个单脉冲,否则没有脉冲输出。如果按键开关抖动产生的毛刺宽度小于N个时钟周期,因而毛刺作用不可能使计数器有输出,防抖动目的得以实现。 第三章 各功能模块基于VHDL的设计 3.1数字频率计的各模块设计 3.1 .1时基产生与测频时序控制电路模块的VHDL源程序 程序ctrl.vhd LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CTRL IS PORT(CLK:  IN STD_LOGIC;                                      -系统时钟 LOCK: OUT STD_LOGIC;                                      -锁存信号 EN:  OUT STD_LOGIC;                                  -计数允许信号 CLR:  OUT STD_LOGIC);                                    -清零信号 END; ARCHITECTURE ART OF CTRL IS SIGNAL Q: STD_LOGIC_VECTOR(3 DOWNTO 0);                          -定义变量 BEGIN PROCESS(CLK) BEGIN IF(CLK'EVENT AND CLK='1')THEN                              -检测时钟上升沿 IF Q="1111"THEN Q<="0000";                                        -计数大于15,清零 ELSE Q<=Q+'1';                                              -允许计数 END IF; END IF; EN<=NOT Q(3); LOCK<=Q(3) AND NOT(Q(2)) AND Q(1); CLR<=Q(3) AND Q(2) AND NOT(Q(1)); END PROCESS; END ART; 程序主要讲述了由时钟信号产生计数允许信号、清零信号和锁存信号,而且限定了响应时间为不超过15s。 3.1.2 待测信号脉冲计数电路模块的VHDL源程序 十进制加法计数器的VHDL源程序 程序cb10.vhd LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CB10 IS PORT(CLK,EN,CLR: IN STD_LOGIC; COUNT10:    BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));         -计数信号 END CB10; ARCHITECTURE ART OF CB10 IS                                            -结构体 BEGIN PROCESS(CLK,CLR,EN) BEGIN IF CLR='1' THEN COUNT10<="0000";                                -计数器清零 ELSIF RISING_EDGE(CLK) THEN                        -检测时钟上升沿 IF(EN='1') THEN                              -检测是否允许计数 IF COUNT10="1001" THEN COUNT10<="0000";                      -计数值满9清零 ELSE COUNT10<=COUNT10+'1';                    -允许计数 END IF; END IF; END IF; END PROCESS; END ART; 程序主要讲述了十进制加法计数器的使用,在符合了一定的以后十进制的使用,在计数器满9后清零。 待测信号脉冲计数器的VHDL源程序 程序count.vhd LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNT IS PORT(CLK: IN STD_LOGIC;                                        -待测时钟信号 EN:  IN STD_LOGIC;                                    -计数选通控制信号 CLR: IN STD_LOGIC;                                      -计数器清零信号 QA,QB,QC,QD: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));       -结果输出信号 END; ARCHITECTURE ART OF COUNT IS COMPONENT CB10                                    -元件CB10引用说明语句 PORT(CLK,EN,CLR: IN STD_LOGIC; COUNT10:    BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));   -计数输出信号 END COMPONENT; SIGNAL CLK2: STD_LOGIC; SIGNAL CLK3: STD_LOGIC; SIGNAL CLK4: STD_LOGIC; BEGIN CLK2<=NOT QA(3); CLK3<=NOT QB(3); CLK4<=NOT QC(3); U1:CB10 PORT MAP(CLK,EN,CLR,QA);                        -元件引用例示 U2:CB10 PORT MAP(CLK2,EN,CLR,QB);                        -元件引用例示 U3:CB10 PORT MAP(CLK3,EN,CLR,QC);                        -元件引用例示 U4:CB10 PORT MAP(CLK4,EN,CLR,QD);                          -元件引用例示 END ART; 3.1.3 锁存与译码显示控制电路模块的VHDL源程序 译码显示电路的VHDL源程序 程序bcd7.vhd LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY BCD7 IS PORT(BCD: IN STD_LOGIC_VECTOR(3 DOWNTO 0);                    -BCD输入信号 LED: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));              -七段译码输出信号 END; ARCHITECTURE ART OF BCD7 IS BEGIN LED<="0111111" WHEN BCD="0000" ELSE          -对照七段字形显示译码器真值表 "0000110" WHEN BCD="0001" ELSE "1011011" WHEN BCD="0010" ELSE "1001111" WHEN BCD="0011" ELSE "1100110" WHEN BCD="0100" ELSE "1101101" WHEN BCD="0101" ELSE "1111101" WHEN BCD="0110" ELSE "0000111" WHEN BCD="0111" ELSE "1111111" WHEN BCD="1000" ELSE "1101111" WHEN BCD="1001" ELSE "0000000"; END ART; 程序主要讲述了七段译码器的显示问题,对应的给出了信号输入过程中七段译码器的各种显示。 锁存与译码显示控制模块的VHDL源程序 程序lock.vhd LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY LOCK IS PORT(LOCK:                IN STD_LOGIC; QA,QB,QC,QD:        IN STD_LOGIC_VECTOR(3 DOWNTO 0); LEDA,LEDB,LEDC,LEDD: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));            -频率 计数输出 END; ARCHITECTURE ART OF LOCK IS SIGNAL QAL,QBL,QCL,QDL: STD_LOGIC_VECTOR(3 DOWNTO 0); COMPONENT BCD7                                    -元件BCD7引用说明语句 PORT(BCD: IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END COMPONENT; BEGIN PROCESS(LOCK) BEGIN IF(LOCK'EVENT AND LOCK='1')THEN                        -检测时钟上升沿 QAL<=QA; QBL<=QB; QCL<=QC; QDL<=QD; END IF; END PROCESS; U0: BCD7 PORT MAP(QAL,LEDA);                                  -元件引用例示 U1: BCD7 PORT MAP(QBL,LEDB);                                  -元件引用例示 U2: BCD7 PORT MAP(QCL,LEDC);                                  -元件引用例示 U3: BCD7 PORT MAP(QDL,LEDD);                                  -元件引用例示 END ART; 程序主要讲述了调用七段译码器的显示,将输入的信号经过译码之后在七段译码器上进行显示。 3.1.4 顶层电路的VHDL源程序 程序pinlvji.vhd LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY PINLVJI IS PORT(F_IN,CLK:      IN STD_LOGIC; ENT,LOCKT,CLRT: BUFFER STD_LOGIC; Z1,Z2,Z3,Z4:    OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END PINLVJI; ARCHITECTURE ART OF PINLVJI IS SIGNAL ENS,LOCKS,CLRS: STD_LOGIC; SIGNAL QAS,QBS,QCS,QDS: STD_LOGIC_VECTOR(3 DOWNTO 0); COMPONENT CTRL                                        -元件CTRL引用说明语句 PORT(CLK:        IN STD_LOGIC; EN,LOCK,CLR: OUT STD_LOGIC); END COMPONENT; COMPONENT COUNT                                    -元件COUNT引用说明语句 PORT(CLK,EN,CLR:  IN STD_LOGIC; QA,QB,QC,QD: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT; COMPONENT LOCK                                        -元件LOCK引用说明语句 PORT(LOCK:              IN STD_LOGIC; QA,QB,QC,QD:        IN STD_LOGIC_VECTOR(3 DOWNTO 0); LEDA,LEDB,LEDC,LEDD: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END COMPONENT; BEGIN ENT<=ENS; LOCKT<=LOCKS; CLRT<=CLRS; U1:CTRL PORT MAP(CLK,ENS,LOCKS,CLRS);                        -元件引用例示 U2:COUNT PORT MAP(F_IN,ENS,CLRS,QAS,QBS,QCS,QDS);            -元件引用例示 U3:LOCK PORT MAP(LOCKS,QAS,QBS,QCS,QDS,Z1,Z2,Z3,Z4);          -元件引用例示 END ART; 3.2乒乓球游戏机各模块的设计 3.2.1主程序状态机模块 具体实现代码如下: process(clk1,reset)                                      --clk作为敏感信号触发进程 begin                                                                --进程开始 if reset='0' then                                                    --异步置位 i<=0; count1<="00000"; count2<="00000"; elsif (rising_edge(clk1)) then                         --当处于时钟inclock上升沿时 if count1="10101"or count2="10101"then i<=0; count1<="00000";                  --count1和count2分别为甲、乙的得分 count2<="00000";        else                          --以下case语句是程序中最关键的状态机部分 case state is when waitserve=>                              --进程处于等待发球状态 if serve='0' then i<=1; state<=light1on; elsei<=6; state<=light6on; end if; when light1on=>                              --进程处于第一盏灯亮状态 i<=2; if hit2_en='0' then i<=0; count1<=count1+1;                                  --甲得一分 state<=waitserve;  else state<=ballmoveto2; end if; when light6on=>                            --进程处于第八盏灯亮状态 i<=5; if hit1_en='0' then i<=0; count2<=count2+1;                                  --乙得一分 state<=waitserve; else state<=ballmoveto1; end if; when ballmoveto1=>                        --进程处于球向乙移动状态 if hit1_en='0' then i<=0; count2<=count2+1; state<=waitserve; elsifi=2 then i<=1; state<=allow1hit; elsei<=i-1; state<=ballmoveto1; end if; when ballmoveto2=>                        --进程处于球向乙移动状态 if hit2_en='0'then i<=0; count1<=count1+1; state<=waitserve; elsifi=5 then i<=6; state<=allow2hit; elsei<=i+1; state<=ballmoveto2; end if; when allow1hit=>                            --进程处于允许甲击球状态 if hit1_en='0' then i<=2; state<=ballmoveto2; else count2<=count2+1; i<=0; state<=waitserve; end if; when allow2hit=>                            --进程处于允许乙击球状态 if hit2_en='0'then i<=5; state<=ballmoveto1; else count1<=count1+1; i<=0; state<=waitserve; end if; end case; end if; end if; end process; 主程序模块包含了计数功能,用count1和count2分别代表甲、乙的分数。用了这两个计数,接下来就可以用来译码了。 3.2.2数码管译码模块 具体代码如下: process(count1)-----显示甲得分数 begin case count1 is when"00000"=>score11<="00000011";score12<="00000011";  ----数码管显示0 when"00001"=>score11<="00000011";score12<="10011111";  ----数码管显示1 when"00010"=>score11<="00000011";score12<="00100101";  ----数码管显示2 when"00011"=>score11<="00000011";score12<="00001101";  ----数码管显示3 when"00100"=>score11<="00000011";score12<="10011001";  ----数码管显示4 when"00101"=>score11<="00000011";score12<="01001001";  ----数码管显示5 when"00110"=>score11<="00000011";score12<="01000001";  ----数码管显示6 when"00111"=>score11<="00000011";score12<="00011111";    ----数码管显示7 when"01000"=>score11<="00000011";score12<="00000001";    ----数码管显示8 when"01001"=>score11<="00000011";score12<="00001001";    ----数码管显示9 when"01010"=>score11<="10011111";score12<="00000011";    ----数码管显示10 when"01011"=>score11<="10011111";score12<="10011111";    ----数码管显示11 when others=>score11<="00000011";score12<="00000011";      ----数码管显示0 end case; end process; process(count2)                                                -----显示乙得分数 begin case count2 is when"00000"=>score21<="00000011";score22<="00000011"; when"00001"=>score21<="00000011";score22<="10011111"; when"00010"=>score21<="00000011";score22<="00100101"; when"00011"=>score21<="00000011";score22<="00001101"; when"00100"=>score21<="00000011";score22<="10011001"; when"00101"=>score21<="00000011";score22<="01001001"; when"00110"=>score21<="00000011";score22<="01000001"; when"00111"=>score21<="00000011";score22<="00011111"; when"01000"=>score21<="00000011";score22<="00000001"; when"01001"=>score21<="00000011";score22<="00001001";    when"01010"=>score21<="10011111";score22<="00000011";  ----数码管显示10 when"01011"=>score21<="10011111";score22<="10011111";  ----数码管显示11 when others=>score21<="00000011";score22<="00000011"; end case; end process; 其中score11和score12代表count1的十位数和个位数,score21和score22代表count2的十位数和个位数. 3.2.3按键消抖模块 具体代码如下: process(clk) begin ifrising_edge(clk) then hit1_en1<=hit1; end if; end process; process(clk) begin ifrising_edge(clk) then hit1_en2<=hit1_en1; end if; end process; hit1_en3<= hit1_en1 and not hit1_en2; process(clk) begin ifrising_edge(clk) then if hit1_en3='0' then num<=num+1; elsenum<=0; end if; end if; end process; process(clk) begin ifrising_edge(clk) then ifnum=5000000 then hit1_en<=hit1_en1; else null; end if; end if; end process; 我们让按键持续时间大于N个clk时钟周期时,计数器输出一个单脉冲,否则没有脉冲输出。如果按键开关抖动产生的毛刺宽度小于N个时钟周期,因而毛刺作用不可能使计数器有输出,防抖动目的得以实现。 第四章 波形仿真 4.1数字频率计的波形仿真 4.1.1 时基产生与测频时序控制电路模块的仿真 图4.1 时基产生与测频时序控制模块的仿真图 图4. 2  时基产生与测频时序控制电路模块的仿真图的详细 图4.1显示的是时基产生与测频时序控制电路模块的仿真图,很鲜明的给出了时钟信号与计数允许信号、清零信号和锁存信号的关系,而图4. 2更加详细的给出了计数允许信号、清零信号和锁存信号与变量Q之间所存在的相对应的关系。 4.1.2待测信号脉冲计数电路模块的仿真 十进制加法计数器的仿真 图4.3 十进制加法计数器的仿真图 图4.3显示的是十进制加法计数器的仿真图,它详细的给出了计数输出信号与计数允许信号和清零信号之间的关系,能清楚的理解当CLR为0时,输出为0;在EN为1选通有效后,则开始计数。 图4.4 测信号脉冲计数器的仿真 图4.4显示的是测信号脉冲计数器的仿真图,以图文的形式更直接的表现了信号脉冲的计数值,简介明了。 4.1.3 锁存与译码显示控制电路模块的仿真 图4.5 译码显示电路的仿真图 图4.5显示的是译码显示电路的仿真图,它直接用图形诠释了程序中语句的意思,让人一目了然,更简单的了解了模块的作用。 图4.6 锁存与译码显示控制电路的仿真图 图4.6显示的是锁存与译码显示控制电路的仿真图,给人第一感觉很繁琐,但是联系程序再看图就可以很轻松的清楚程序中之前还存在的疑惑也将图从而理解透彻。 4.1.4 数字频率计系统的仿真 图4.7 数字频率计系统的仿真 图4.7显示的是数字频率计系统的仿真图,它系统的体现了所设计的频率计的作用。 4.2乒乓球游戏机波形仿真 4.2.1发球仿真 图4-8所示代表乙发球由light端口输出的高电平会驱动芯片以外的发光二极管使之点亮,这样就可以通过发光二极管模拟乒乓球的运动轨迹。可以看到,在甲该击球的时候没有击球,也就是hit1在state状态6(allow1hit,允许甲击球状态)的时候没有高电平‘1’输入,则算乙得分,count2由0变到1,score22的值随之变化,“30”代表了二进制的“0110000”,就是七段译码器显示‘1’,之后state回到状态0(waitserve,等待发球状态)。从最后一行state值的变化,可以清楚地分析状态转移。 图4-8 i从8开始依次递减计数,控制发光二极管亮暗的light信号也随着i的数值而变化,如图4-9所示:                                                                                                                                                                                                          图4-9 4.2.2正确时刻击球仿真 图4-10是在乙发球以后,甲子正确时刻击球的波形仿真图。甲在state为状态6(allow1hit,允许甲击球状态)的时候击球了,在图上hit1在此时刻出现高电平,看到state转移了状态2(ballmoveto2,球向乙移动状态)当到了状态3(allow2hit,允许乙击球状态)乙没有击球,所以甲得分了,count1由0变到1,而七段译码器随之改变。 图4-10 图4-11为上图的球的移动轨迹: 图4-11 4.2.3提早击球仿真 图4-12是仿真甲提早击球的情况,在不允许甲击球的状态下,即state处于状态5(ballmoveto1,球向甲移动状态)时,hit1输入逻辑‘1’,表示甲击球了,所以乙得分。 图4-12 图4-13为上图的球的移动轨迹: 图4-13 以上就是乒乓球游戏机的全部仿真,通过状态机进程传出的信号,驱动了发光二极管以及七段译码器等外围设备。状态机进程传出的i信号,控制了发光二极管的状态,状态机进程传出的count1和count2信号,控制了七段译码器的显示。实现了计划中的全部预期功能, 第五章 体会和建议 经过一阵子的奋斗,终于在此刻完成课程设计,在此祝大家新年快乐。 本设计利用测频法的原理和VHDL语言,采用自顶向下的设计方法,实现了1Hz~10kHz测量范围的四位十进制的数字频率计,并在MAX+PLUSⅡ软件平台下对设计项目进行的了编译和时序仿真。实验结果表明,该系统能够满足本次设计的要求,并且具有测量误差小,可靠性高的优点。本文的设计工作能作为电子测量与仪表技术的基础,为计算机、通讯设备、音频视频等科研生产领域提供较好的参考。 同时,在这个设计中,初步体现了状态机的中心控制作用。通过状态机进程传出的信号,驱动了发光二极管以及七段译码器等外围设备。状态机进程传出的i信号,控制了发光二极管的状态,状态机进程传出的count1和count2信号,控制了七段译码器的显示。如果要用实际电路来实现乒乓球游戏机,就还要将设计下载到芯片中去,并且加上外围电路,这些外围电路包括七段译码器,按键,即便如此,上面的设计还是不够的,还存在两个问题,一个是时钟频率问题,一个是按键问题,但由于本人时间及能力有限,就没多加研究,深感遗憾。 通过本次课程的设计,加深了我对课程上所学到的电子设计理论知识的认识和理解,重新让自己认识到了这门学科在应用方面的广阔前景,并且通过知识与应用于实践的结合更加丰富了自己的知识,扩展了知识面,较系统的掌握电子设计应用开发。 此外,机房的电脑有病毒,建议老师能抽空去杀下毒,我们写的程序不方便拷贝,导致课外写的程序不方便移植。 最后在此感谢胡仕刚老师、王艳老师在本次课程设计中给予我们的帮助,让我们能更顺利地完成本次课程设计,在设计中学会了操作MAX+plus II 10.0,也对自己的VHDL硬件描述语言相关知识巩固了一遍,收获颇多。 参考文献: [1]  曹昕燕 等编著.《EDA技术试验与课程设计》.[M].北京:清华大学出版社 ,2006.5 [2]  潘松 黄继业 编著.《EDA技术与VHDL(第2版)》[M]. 北京:清华大学出版社,2007.1 [3]  柳春锋 主编.《电子设计自动化(EDA)教程》[M]. 北京:北京理工大学出版社,2005.8 [4]  徐志军 等编著.《EDA技术与VHDL设计》. [M].北京:电子工业出版社,2009.1 [5] 邹彦 等编著.《EDA技术与数字系统设计》[M].北京:电子工业出版社,2007.4 [6]  赵明富 刘文进 主编.《EDA技术基础》[M].北京:北京大学出版社,2007.6 [7]  潘松 黄继业 编著.《EDA技术实用教程》[M].北京:科学出版社,2005.6 [8]  赵明富 主编.《EDA技术与实践》[M].北京:清华大学出版社,2005.11
/
本文档为【VHDL课程设计数字频率计、乒乓游戏机(二合一)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索