乒乓电路—终稿

更新时间:2024-04-30 21:28:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

本科生毕业论文(设计)

题 目:利用

专业代码:

作者姓名:

学 号:

单 位:

指导教师:

EDA技术实现乒乓游 戏电路的设计

XXXXX

XXX XXXXXXXXXX XXXXXXXXXXX XXX X年 X 月 X日

聊城大学本科毕业论文(设计)

摘 要

本次设计的任务是利用EDA技术实现乒乓游戏电路的设计。我们采用EDA技术在QuartusII系统开发平台上对核心电路进行设计,完成设计后把用VHDL描述的源程序下载到目标芯片上并对其功能进行仿真。设计分为两个模块:一,游戏主模块;二,计分显示模块。主模块完成用LED表示球和球台并对玩家是否击球、是否犯规做出判断,并且将两位玩家的游戏得分进行输出。计分显示模块完成对局数比分的运算,显示局数比分和每局游戏玩家的得分。通过使用自顶向下的层次化的设计方法,实现了乒乓球游戏的基本功能。

关键词:乒乓球游戏;EDA;VHDL;QuartusII

Abstract

The task of this design is to design and implement a ping-pong game circuit by using EDA technology. We use EDA technology to design the core circuit in QuartusII system development platform, completed the design of the VHDL description of the source code download to the target chip and simulate its function. The design is divided into two modules: first, the game master module; second, scoring display module. The main module is complete with the ball and the table said by LED, said to judge whether players hit the ball, on whether to judge whether a foul and two players of game scores to output. Scoring display module to complete the game count the score calculation, display innings score and score with gamers in each game. By using the top-down hierarchical design method, realized the basic function of the table tennis game.

Key words:Table Tennis Games; EDA; VHDL; QuartusII

聊城大学本科毕业论文(设计)

目 录

前 言 ............................................. 1 1.引言 ........................................... 1

1.1课题的背景、目的 ........................................... 2 1.2课题设计主要内容 ........................................... 3

2.开发工具简介 .................................... 3

2.1 EDA技术 ................................................... 3 2.2硬件描述语言—VHDL ......................................... 4 2.3 QuartusII ................................................. 5

3.总体设计思想 .................................... 6

3.1基本原理 ................................................... 6 3.2设计框图 ................................................... 7

4.设计步骤 ........................................ 8

4.1乒乓球游戏机实体的设计 ..................................... 8 4.2状态机编程实现 ............................................. 8 4.3记分译码器的设计 .......................................... 10 4.4构造体的设计 .............................................. 12 4.5时钟分频器设计 ............................................ 13 4.6总电路图设计 .............................................. 14

5.编译和波形仿真 ................................. 15

5.1分频器的仿真 .............................................. 15 5.2 COMPETE模块仿真 .......................................... 15 5.3译码模块仿真 .............................................. 16 5.4顶层文件仿真图 ............................................ 16

总结 ............................................. 17 参考文献 ......................................... 18

1

聊城大学本科毕业论文(设计)

附录 ............................................. 18 致谢 ............................................. 22

2

聊城大学本科毕业论文(设计)

利用EDA技术实现乒乓游戏电路的设计

前 言

乒乓球游戏机是现代化的产物,随着乒乓球运动日益人们喜爱的运动,对乒乓球运动的形式要求越发增多,进而产生了乒乓球游戏机。乒乓球游戏机体现了对现代技术的应用,全世界都在研究更加先进的乒乓球游戏机以满足现代人更为快捷的乒乓球运动需要。乒乓球游戏机在乒乓球运动领域显得愈发重要。它是对乒乓球运动文化的继承和发扬,它的地位无疑越来越重要,具有很大的经济价值、文化价值、商业价值,发展前景十分广阔。

本论文研究的主要问题:两人乒乓球游戏机是用8个发光二级管代表乒乓球台,中间两个发光二极管兼做乒乓球网,用点亮的发光二极管按一定方向移动来表示球的运动。在游戏机的两侧各设置发球和击球开关,甲乙双方按乒乓球比赛规则来操作开关。当甲方按动发球开关时,靠近甲方的第一个发光二极管亮,然后发光二极管由甲方向乙方依次点亮,代表乒乓球的移动。当球过网后乙方就可以击球。若乙方提前击球或者未击到球,则甲方得分。然后重新发球进行比赛,知道一方记分达到11分为止,记分清零,重新开始新一局比赛。

本课题应解决的主要问题:

(1)使用乒乓球游戏机的甲乙双方在不同的位置发球或击球。

(2)当球过网后接球方就可以击球。若接球方提前击球或者未击到球,则发球方得分。

(3)游戏的状态机编程实现。

(4)比赛按11分为一局进行,甲乙双方都应设置自己的记分牌。 (5)任何一方先记满11分,该方就算胜出,按RESET复位重新开局。 (6)甲乙双方记分译码器的设计。

1.引言

EDA(Electronic Design Automation,电子设计自动化)技术是现代电子工程领域的一门新技术。它提供了基于计算机和信息技术的电路系统设计方法。EDA

1

聊城大学本科毕业论文(设计)

技术的发张和推广应用极大地推动了电子工业的发展。EDA技术就是以计算机为工具,在EDA软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件自动地完成逻辑编译,逻辑化简,逻辑分割,逻辑综合及优化,逻辑布局布线,逻辑仿真,直至对于特定目标芯片的适配编译,逻辑映射和编程下载等工作。设计者的工作仅限于利用软件的方式,即利用硬件描述语言来完成对系统硬件功能的描述,在EDA工具的帮助下就可以得到最后的设计结果[1]。近年来,集成电路制造技术的快速发展, 一方面促进了相应设计技术的发展, 另一方面也对设计技术提出了更高的要求。当前集成电路设计, 面临着功能强、性能好、规模大、成本低、设计周期短等一系列要求和挑战, 这些要求和挑战引起了集成电路设计方法的全面革新。当今, 以行为设计为主要标志的新一代数字系统设计理论已形成并得到发展。在集成电路的数字系统的系统级设计中, VHDL 硬件描述语言构造的描述模型优化设计, 有利于高效利用设计空间, 实现设计结构的精确分析, 使芯片资源得以充分利用。

1.1课题的背景、目的

20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。而休闲时间越来越少的人们越来越没太多的时间出去搞户外活动,于是众多电子游戏相应而出,成为大家的娱乐节目。因此设计了这个两人的乒乓球游戏。而电子信息类产品的开发明显地出现了两个特点:一是开发产品的复杂程度加深;二是开发产品的上市时限紧迫。而伴随着如上两个特点的产生,相应的出现了设计上的两个问题。其一,在电子系统日趋数字化、复杂化和大规模集成化的今天,电子厂商们越加迫切地追求电子产品的高功能、优品质、低成本、微功耗和微小封装尺寸,从而使得电子设计日趋复杂。那么如何去完成这些高复杂度的电子设计呢?其二,电子产品设计周期短和上市快是电子厂商们坚持不懈的追求,那么面对日趋复杂的设计,又如何能够缩短开发时间呢?解决以上两个问题的唯一途径是电子设计自动化(EDA),即用计算机帮助设计人员完成繁琐的设计工作。

2

聊城大学本科毕业论文(设计)

1.2课题设计主要内容

两人乒乓球游戏机是用8个发光二级管代表乒乓球台,中间两个发光二极管兼做乒乓球网,用点亮的发光二极管按一定方向移动来表示球的运动。在游戏机的两侧各设置发球和击球开关,甲乙双方按乒乓球比赛规则来操作开关。当甲方按动发球开关时,靠近甲方的第一个发光二极管亮,然后发光二极管由甲方向乙方依次点亮,代表乒乓球的移动。当球过网后乙方就可以击球。若乙方提前击球或者未击到球,则甲方得分。然后重新发球进行比赛,知道一方记分达到11分为止,记分清零,重新开始新一局比赛。

2.开发工具简介

2.1 EDA技术

EDA[2]是电子设计自动化(Electronic Design Automation)缩写,是90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL( Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。也就是说,综合器是软件描述与硬件实现的一座桥梁。综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。

硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能

3

聊城大学本科毕业论文(设计)

控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。

2.2硬件描述语言—VHDL

VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL与Verilog语言将承担起大部分的数字系统设计任务。

VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体[4](可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的。

(1) 与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。

(2) VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

4

聊城大学本科毕业论文(设计)

(3) VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。

(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。

(5) VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。

2.3 QuartusII

QuartusII design 是最高级和复杂的,用system-on-a-programmable-chip(SOPC)的设计环境。 QuartusII design提供完善的 timing closure 和 Logic Lock基于块的设计流程。QuartusII design是唯一一个包括以timing closure 和 基于块的设计流为基本特征的programmable logic device (PLD)的软件。 QuartusII 设计软件改进了性能、提升了功能性、解决了潜在的设计延迟等,在工业领域率先提供FPGA与mask-programmed devices开发的统一工作流程。

Altera QuartusII 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

Altera QuartusII (3.0和更高版本)设计软件是业界唯一提供FPGA和固定功能Hardcopy器件统一设计流程的设计工具。工程师使用同样的低价位工具对 Stratix FPGA进行功能验证和原型设计,又可以设计Hardcopy Stratix器件用于批量成品。系统设计者现在能够用QuartusII软件评估Hardcopy Stratix器件的性能和功耗,相应地进行最大吞吐量设计。

Altera的QuartusII可编程逻辑软件属于第四代PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。QuartusII平台与Cadence、Exemplar Logic、 Mentor Graphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的Logic Lock模块设计功能,增添了Fast Fit编译选项,推进了网络编辑性能,而且提升了调试能力。

5

聊城大学本科毕业论文(设计)

3.总体设计思想

3.1基本原理

根据乒乓球比赛的过程和规则,首先游戏开始,如果一方非正确击球则另一方加分,当分数大于11时获胜,游戏结束,我们把设计流程规定如图3.1所示。状态机设置了7个状态,分别是“等待发球状态”,“第一盏灯亮状态”,“第八盏灯亮状态”,“球向乙移动状态”,“ 球向甲移动状态”,“允许甲击球状态”,

“允许乙击球状态”。这是该程序中起决定作用的七个状态。开始的时候处于“等待发球状态”,若甲发球则状态转移到“第一盏灯亮状态”,若乙发球则转移到“第八盏灯亮状态”,具体说明以甲球为例。

若发球后乙没有提前击球----规定球移动到对方第一个发光二极管时允许击球,那么状态机从“第一盏灯亮状态”转移到“球向乙移动状态”。若在“球向乙移动状态”乙仍然没有提前击球,状态就转移到“允许乙击球状态”,在此状态下,如果乙击球了,那么状态就转移到“ 球向甲移动状态”。在“第一盏灯亮状态”, “球向乙移动状态”中,如果乙击球了 ,就算提前击球,这样甲得分,状态转移到“等待发球状态”等待发球,“ 球向甲移动状态”之后的过程和前面的过程只不过是甲乙角色的调换而已。状态转移规则都是一样的。图3.2给出了乒乓球游戏机的原理图。

6

聊城大学本科毕业论文(设计)

3.2设计框图

图3.1设计流程图

图3.2 乒乓球游戏机原理图

7

聊城大学本科毕业论文(设计)

4.设计步骤

4.1乒乓球游戏机实体的设计

设计该乒乓球游戏机的输入/输出端口。首先考虑输入端口,一般都应该设置一个异步置位端口reset,用于在系统不正常时回到初始状态;两个发球输入端serve1和serve2,逻辑‘1’分别表示甲方和乙方的发球;两个击球输入端hit1和hit2,逻辑‘1’分别表示甲击球和乙击球;一个开始游戏按钮startbutton,处于逻辑‘1’表示可以游戏;还得有一个时钟输入端口clk。

其次考虑输出端口,芯片应该有8个输出端口来控制8个发光二极管,输出逻辑‘1’即输出一个高电平,可以使发光二极管点亮;另外,要直观地表示双方的得分,就得用到七段译码器,每方用到2个,可以表示0~11的数字,每个七段译码器需要芯片的7个输出端口来控制,总共需要28个输出端口。实体的设计如下:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all; --引用必要的库函数和包集合 entity compete is --实体名为pingpong port(reset:in std_logic; clk_1:in std_logic; startbutton:in std_logic; --开始游戏输入端口 serve:in std_logic_vector(1 downto 0); --发球输入端口 hit1,hit2:in std_logic; --甲和乙的击球输入端口 light:out std_logic_vector(1 to 8); --控制8个发光二极管的输出端口 counta,countb:out std_logic_vector(3 downto 0)); --2个用于控制4个7段译码器的输出端口 end compete;

4.2状态机编程实现

状态机设置了7个状态,分别是等待发球状态(waitserve)、第一盏灯亮状态(light1on)、第八盏灯亮状态(light8on)、球向乙移动状态(ballmoveto2)、球向甲移动状态(ballmoveto1)、允许甲击球状态(allow1hit)和允许乙击球状态(allow2hit)。

8

聊城大学本科毕业论文(设计)

状态waitserve,light1on,ballmoveto2,allow2hit,light8on,ballmoveto1和allow1hit代表的具体数值依次是0到6.在波形模拟图中是用数值来表示状态的。

乒乓球游戏机中有两个计数器count1和count2,分别记忆甲的得分和乙的得分;一个i信号,用它的数值来控制状态机外8个发光二极管的亮和暗,比如当i=1时表示第一个发光二极管亮,用发光二级管的轮流发光表示球的移动轨迹。

输入状态机的信号有游戏开关startbutton信号,它是1位二进制信号,数值为1表示可以进入游戏;serve信号,是一个2位二进制向量,“10”表示甲发球;两个二进制信号hit1和hit2分别表示甲乙是否击球,若数值为1,表示击球,不为1表示不击球。以下是状态机进程代码。

process(clk_1) --状态机进程 --clk_1作为敏感信号触发进程 begin --进程开始 if reset='1' then --异步置位

i<=0;count1<=\elsif clk_1'event and clk_1='1' then --当处于时钟inclock上升沿时 if count1=\

i<=0;count1<=\elsif count2=\

i<=0;count1<=\elsif startbutton='0' then

i<=0;count1<=\else --以下case语句是程序中最关键的状态机部分 case state is

when waitserve => case serve is

when \

when \ when \ when \when others => i<=0; end case;

when light1on => i<=2; if hit2='1' then i<=0;

count1<=count1+1;state<=waitserve; else

state<=ballmoveto2; end if;

when light8on => i<=7;

9

聊城大学本科毕业论文(设计)

if hit1='1' then i<=0;

count2<=count2+1;state<=waitserve; else

state<=ballmoveto1; end if;

when ballmoveto1 => if hit1='1' then i<=0;

count2<=count2+1;state<=waitserve; elsif i=2 then i<=1; state<=allow1hit; else i<=i-1; end if;

when ballmoveto2 => if hit2='1' then i<=0;

count1<=count1+1;state<=waitserve; elsif i=7 then i<=8; state<=allow2hit; else i<=i+1; end if;

when allow1hit =>

if hit1='1' then i<=2;state<=ballmoveto2; else count2<=count2+1;i<=0; state<=waitserve; end if;

when allow2hit =>

if hit2='1' then i<=7;state<=ballmoveto1; else count1<=count1+1;i<=0; state<=waitserve; end if; end case; end if; end if;

end process;

4.3记分译码器的设计

七段译码器是在数字电路设计中经常用到的显示电路。所谓七段译码器,其实是由7段发光二极管组成的用于显示数字的器件。如图4.1所示。

10

聊城大学本科毕业论文(设计)

图4.1 七段译码器简易图

其中的a,b,c,d,e,f,g分别为7段发光

二极管,通过控制每个发光二极管的亮和暗,可以分别显示0~9十个数字。例如,b和c两段发光二极管亮,其他发光二极管暗,则表示数字“1”;a,b,g,e和d五段发光二极管亮,其他发光二极管暗,则表示数字“2”。七段译码器有7个输入端,分别控制a~g七段发光二极管。

记分译码器(mydecoder):由于记分需要显示出来,所以要使用七段译码器。而状态机中的记分是由4位二进制码来表示的,即count1和count2.这个记分译码器电路是针对乒乓球游戏机的特点进行的特别设计,采用的是全部列举的方法,如图4.2所示:

图4.2 七段译码器电路模块图

代码如下:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all; entity decoder is

port(binaryin:in std_logic_vector(3 downto 0); --4位二进制码的输入端口

bcdout1:out std_logic_vector(6 downto 0); --译码器高位输出端口 bcdout2:out std_logic_vector(6 downto 0) --译码器低位输出端口 );

end decoder;

11

聊城大学本科毕业论文(设计)

极管使之点亮,这样就可以通过发光二极管模拟乒乓球的运动轨迹。可以看到,在甲不该击球的时候击球,也就是hit1在除state状态6(allow1hit,允许甲击球状态)的时候有高电平‘1’输入,则算乙得分,bcdouta2的值随之变化,二进制“11111001”,就是七段译码器显示?1?,之后state回到状态0(waitserve,等待发球状态)。当甲在allow1hit时击球,乒乓球就会从乙端运动到甲端。

总结

电子技术的飞速发展,智能设备的日益增多,有力地推动了社会生产力的发展和社会信息化程度的提高。在这同时,这些发展变化也要求电子产品性能进一步提高,产品更新换代的节奏加快。因此,对电子产品的设计开发就提出了更高的要求。为适应这样的要求,业界大量可编程逻辑器件(PLD),尤其是现场可编程逻辑门阵列(FPGA)应运而生,促进了电子设计自动化技术快速发展。这不仅为电子系统设计带来了一场革命性变化,而且为网络化、智能化测控系统的研制创造了条件。

本次设计论文主要包括:EDA概述;硬件描述语言VHDL;QuartusII系统平台,介绍了这些基本的知识以后,便开始进行乒乓球游戏的电路设计。论文比较全面的分析了乒乓球游戏机的基本原理,符合乒乓球运动的各项规则。使用模块化设计方法,最终实现了乒乓球运动的基本功能。

在这个设计中,初步体现了状态机的中心控制作用。通过状态机进程传出的信号,驱动了发光二极管以及七段译码器等外围设备。状态机进程传出的i信号,控制了发光二极管的状态,状态机进程传出的count1和count2信号,控制了七段译码器的显示。

在几个月的学习和实践过程中,遇到了很多问题。刚开始由于对VHDL语言不是很熟悉,所以编程的过程中出现了很多的问题,也走了很多弯路。而且当编译出现了很多错误,怎样调整都无法实现的时候,我对我自己都失去了信心,但经过老师的指导和自己的探索,终于克服了在实际操作中出现的种种问题。通过这样的学习,我有很大的收获,不仅在学识上进步不小,而且加强了我的独立操作能力和克服困难的决心和信心。我会把毕业设计中学习到的知识和精神用到以后的学习和工作中,去实现自己理想和灿烂的人生。

17

聊城大学本科毕业论文(设计)

参考文献

[1]《EDA技术实用教程》黄继业 潘松编著 科学出版社 [2]《微机原理与接口技术》钱晓捷主编 机械工业出版社

[3]《微处理器(CPU)的结构与性能》易建勋编著 清华大学出版社

[4]《FPGA数字电子系统设计与开发实例导航》刘韬 楼兴华编著 人民邮电出版社 [5]《EDA技术及其创新实践》潘松 黄继业编著 电子工业出版社

[6]《VHDL硬件描述语言与数字逻辑》侯伯亨编著 西安电子科技大学出版社

[7]《电子设计自动化(EDA)课程设计与项目实例》李莉 路而红编著 中国电力出版社 [8]《数字系统的VHDL设计》江国强编著 机械工业出版社 [9]《CPLD/FPGA设计及应用》罗朝霞 高书莉编著 人民邮电出版社 [10]《VHDL设计实例与仿真》姜雪松 吴钰淳编著 机械工业出版社 [11]《.EDA技术综合应用实例与分析》谭会生编著 西安电子科技大学出版社

附录

源程序代码 1 分频器

library IEEE;

use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity division is

port( clk:in std_logic; clk_1:out std_logic ); end division;

architecture division_body of division is signal count1:integer range 0 to 5999999; signal count2:integer range 0 to 2999999; signal clk1:std_logic; begin

process(clk) begin if(clk'event and clk='1')then if(count1=2)then count1<=0; clk1<=not clk1;

18

聊城大学本科毕业论文(设计)

else count1<=count1+1; end if; end if;

end process; clk_1<=clk1; end division_body; 2 主体模块

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all; --引用必要的库函数和包集合 entity compete is

port(reset:in std_logic; clk_1:in std_logic;

startbutton:in std_logic; --开始游戏输入端口

serve:in std_logic_vector(1 downto 0); --发球输入端口 hit1,hit2:in std_logic; --甲和乙的击球输入端口

light:out std_logic_vector(1 to 8);--控制8个发光二极管的输出端口

counta,countb:out std_logic_vector(3 downto 0)); --2个用于控制4个7段译码

器的输出端口

end compete;

architecture one of compete is

type pingpong is (waitserve,light1on,ballmoveto2,allow2hit, light8on,ballmoveto1,allow1hit);

---设置7个状态,为枚举数据类型,记为pingpong signal state:pingpong;

signal i:integer range 0 to 8;

signal count1,count2,count3,count4:std_logic_vector(3 downto 0):=\---内部计数器,是4位二进制变量 begin

process(clk_1) --状态机进程 --clk_1作为敏感信号触发进程 begin --进程开始 if reset='1' then --异步置位

i<=0;count1<=\elsif clk_1'event and clk_1='1' then --当处于时钟inclock上升沿时 if count1=\

i<=0;count1<=\elsif count2=\

i<=0;count1<=\elsif startbutton='0' then

i<=0;count1<=\else --以下case语句是程序中最关键的状态机部分 case state is

19

聊城大学本科毕业论文(设计)

when waitserve=> --进程处于等待发球状态 case serve is

when \

when \when \when \when others => i<=0; end case;

when light1on => i<=2; if hit2='1' then i<=0;

count1<=count1+1;state<=waitserve; else

state<=ballmoveto2; end if;

when light8on => i<=7; if hit1='1' then i<=0;

count2<=count2+1;state<=waitserve; else

state<=ballmoveto1; end if;

when ballmoveto1 => if hit1='1' then i<=0;

count2<=count2+1;state<=waitserve; elsif i=2 then i<=1; state<=allow1hit; else i<=i-1; end if;

when ballmoveto2 => if hit2='1' then i<=0;

count1<=count1+1;state<=waitserve; elsif i=7 then i<=8; state<=allow2hit; else i<=i+1; end if;

when allow1hit =>

if hit1='1' then i<=2;state<=ballmoveto2; else count2<=count2+1;i<=0; state<=waitserve; end if;

20

聊城大学本科毕业论文(设计)

when allow2hit =>

if hit2='1' then i<=7;state<=ballmoveto1; else count1<=count1+1;i<=0; state<=waitserve; end if; end case; end if; end if;

end process;

counta<=count1;countb<=count2;

--进程处i信号控制发光二极管的亮暗 light<=

\\\\\\\\

\ --其他情况所有发光二极管都暗 end one; 3 显示译码模块

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all; entity decoder is

port(binaryin:in std_logic_vector(3 downto 0); --4位二进制码的输入端口

bcdout1:out std_logic_vector(6 downto 0); --译码器高位输出端口 bcdout2:out std_logic_vector(6 downto 0) --译码器低位输出端口 );

end decoder;

architecture one of decoder is

signal tembinaryin:std_logic_vector(3 downto 0); begin

process(binaryin) begin

tembinaryin<=binaryin; case tembinaryin is

--把0到9的4位二进制码转换成高低位译码

when\

21

聊城大学本科毕业论文(设计)

when\when\when\when\when\when\when\when\when\when\when\when others=>bcdout1<=not\end case; end process; end one;

致谢

本文的主要工作是在XXX老师悉心指导下的以完成的,无论是在理论学习阶段,还是在论文的资料查询、研究和撰写的每一个环节无不得到导师的悉心指导和帮助。X老师治学严谨,学识渊博,品德高尚,平易近人,在我学习期间不仅传授了做学问的秘诀,还传授了做人的准则,这些都将使我终身受益。他对事业的执著追求、诲人不倦的教师风范和对问题的独到见解,都给我留下深刻印象。我愿借此机会向导师表示衷心的感谢!

感谢文中引用过文献的所有作者们,感谢所有关心、支持和帮助过我的老师和同学们!

22

聊城大学本科毕业论文(设计)

when\when\when\when\when\when\when\when\when\when\when\when others=>bcdout1<=not\end case; end process; end one;

致谢

本文的主要工作是在XXX老师悉心指导下的以完成的,无论是在理论学习阶段,还是在论文的资料查询、研究和撰写的每一个环节无不得到导师的悉心指导和帮助。X老师治学严谨,学识渊博,品德高尚,平易近人,在我学习期间不仅传授了做学问的秘诀,还传授了做人的准则,这些都将使我终身受益。他对事业的执著追求、诲人不倦的教师风范和对问题的独到见解,都给我留下深刻印象。我愿借此机会向导师表示衷心的感谢!

感谢文中引用过文献的所有作者们,感谢所有关心、支持和帮助过我的老师和同学们!

22

本文来源:https://www.bwwdw.com/article/vflg.html

Top