乒乓球游戏电路课程设计最终完成版

合集下载

乒乓球游戏机EDA课程设计完整版本

乒乓球游戏机EDA课程设计完整版本

乒乓球游戏机EDA课程设计完整版本
本文主要介绍了一款基于FPGA可编程硬件的乒乓球游戏机的设计。

本文将重点介绍
如何利用FPGA技术来搭建可编程硬件电路,如何使用Verilog HDL语言来设计数字电路,如何使用Quartus II环境来实现复杂任务,以及如何利用FPGA来完成乒乓球游戏机的EDA课程设计。

首先,在设计乒乓球游戏机的FPGA可编程硬件系统时,最重要的是硬件架构设计,
选择固定板来作为FPGA控制器,能够有效地根据游戏需求控制其各个功能,保证游戏机
运行稳定性和可靠性。

为了满足乒乓球游戏机的需求,FPGA控制器引入Verilog HDL语言,用数字电路的方式进行设计,从而构建出模拟端口,使用I/O 端口对乒乓球系统进行控制,其内部控制器模块实现了所有的乒乓球游戏逻辑功能。

在设计主板的时候,FPGA
中实现的硬件电路会结合安装在主板上的器件,比如七段LED显示器、微型键盘、LED灯等,从而使乒乓球游戏机更加复杂,实现更多的功能。

接下来,使用Quartus II环境,实现乒乓球游戏机的EDA课程设计。

首先,在Quartus II中编写Verilog HDL语言编程,利用FPGA可编程硬件系统设计乒乓球游戏逻辑,构建出特定的模块,实现系统的功能。

其次,编写控制逻辑,运用Verilog HDL语言
编程,在FPGA硬件中得到设计的图像图案,以及搭建复杂的乒乓球游戏的系统结构,实
现乒乓球游戏的控制逻辑功能。

最后,完成了乒乓球游戏机的EDA课程设计。

乒乓球比赛游戏机数电课程设计

乒乓球比赛游戏机数电课程设计

河北理工大学轻工学院信息科学技术部课程设计说明书设计题目乒乓球比赛游戏机班级08测控1班姓名杨洋学号200815020115指导教师许金刚2011年1月6日第二部分设计过程如上图1所示,该电路主要由球台驱动电路,控制电路,计数器,显示译码器和LED数码管等组成。

图中标出的各种信号的含义:CP表示球台驱动电路和计数器的时钟信号;S表示灯(乒乓球)移动的信号;L表示发光二极管驱动信号,由L1~L8组成;CNT表示计数器的计数脉冲信号,由CNT1,CNT2组成;KA,KB表示开关控制的外输入发球、击球信号。

一、单元电路的设计1.球台电路由两片4位74LS194双向移位寄存器接成8位双向移位寄存器。

74LS194功能表如下R D S1 S0工作状态0 1 1 1 1 ××0 00 11 01 1置零保持右移左移并行输入功能说明:(1)当S1 = S0 =1 时,不管各输入端原来是什么状态,在下一个时脉冲到来时,其输出分别是预先输入到并行输入端的 abcd ,这种方式叫送数。

(2)当 S 1 =0 ,S 0 =1 时,其工作方式叫右移,这时,每来一个时钟脉冲,输出端的数各向右移一位,而 Q A 端的输出则由加到 R 端的数来补充。

(3)当 S 1 =1 ,S 0 =0 时,其工作方式叫左移,情况正好与右移相反; Q D 端的输出由加到 L 端的数来补充。

(4)当 S 1 = S 0 =0 时,不管是否有 CP 脉冲作用,输出保持不变,这叫保持方式。

CP=0 时也是保持同步十进制计数器74LS160的功能表如下:CP R D LD EP ET 工作状态×××01111×111××××0 1×01 1置零预置数保持保持(但C=0)计数由74LS160的功能表可知,当~RD=~LD=EP=ET=1时工作状态为计数,即图4中的~CLR=~LOAD=ENT=ENP=1时。

乒乓球游戏机电路设计(江苏师范大学)

乒乓球游戏机电路设计(江苏师范大学)

实习(设计)报告姓名班级学号实习(设计)科目电子技术综合课程设计实习实习(设计)地点实习(设计)时间实习(设计)科目电子技术综合课程实习实习设计指导教师姓名职务所在部门电气工程学院电气工程学院实习设计小组成员成员:实习设计要求1.组装一块数字电路电动机转速表。

2.设计选题要求至少用三个芯片以上。

3.用软件对设计的电路进行仿真验证。

4.设计实习结束后有完整的报告。

实习设计任务1. 组装一台数字转速表;2. 设计一个综合电子系统(自选);3. 编写实习设计说明书。

第二篇电子技术课程综合设计--------乒乓球游戏机电路摘要乒乓球游戏机通过十分巧妙地设计采用数字芯片实现乒乓球左右移动,选手击球得分,累计得分超10报警灯功能。

该设计三个双向开关S,A,B分别作为裁判和游戏者,且选手可以译码显示器上直接读出自己的得分,裁判有一个按钮,是系统初始化,比赛开始。

一方发球后,球以固定速度向另一方运动(二极管依次点亮);当球达到对方最后一个发光二极管时,对方击球(按下按钮),球将向相反方向运动;在其他时候击球视为犯规,给对方加1分;都犯规,都加1分;A、B各有一个2位数码管计分;一方先到达11分,该局比赛结束。

该乒乓球游戏机主要运用到了译码器、移位寄存器和锁存器:通过两个4位上相移位寄存器74LS194接成一个8位的移位寄存器;驱动控制电路由两片74LS74、两个与门7409、两个与非门7400构成;计分电路主要由一片74LS160十进制计数器、一个7404非门、7409与门构成。

目录1 绪论------------------------------------------------11.1本课题设计的意义--------------------------------11.2本课题主要研究任务及内容------------------------12 课程设计过程描述------------------------------------22.1描述主要的设计思路------------------------------22.2 总体设计方案方框图-------------------------------32.3 各部分电路设计----------------------------------43 整机电路图设计-------------------------------------93.1整机电路图-------------------------------------93.2器件清----------------------------------104 仿真结果-------------------------------------------115 总结与体会---------------------------------------12 参考文献----------------------------------------------131、绪论1.1本课题设计的意义乒乓球游戏机通过十分巧妙的设计采用数字芯片实现乒乓球左右移动、选手击球得分、累计得分超时报警等功能。

乒乓球比赛游戏机电路

乒乓球比赛游戏机电路

数字电子技术课程设计一:课程设计名称:乒乓球比赛游戏机电路二:设计目的1.掌握设计乒乓球游戏机控制系统的方法。

2.熟悉掌握移位寄存器,计数器,译码器的用法。

3.在已学知识的基础上,根据实际情况融会贯通。

三:设计任务和设计要求1.设计任务(1)设计一个由甲、乙双方参赛,裁判参与的乒乓球比赛游戏模拟机。

(2)用八只(或更多)排成长串的指示灯(发光二极管)用来代表球的轨迹,其中一个亮的指示灯用来显示球的当前位置,用一个时钟脉冲源使点亮的指示灯依次从左向右,或从右向左移动,其速度应能调节,一般为1s转换一次。

(3)用两个按钮开关作为球拍,甲乙两人参加比赛。

当球到达甲方时,应立即按动开关(电路应只能响应按钮信号的前沿,若重复按动或持续按下去,将不起作用),表示回球,球到达乙时,同样也应立即按动乙方的开关,将球回击到对方去。

若击中,则乒乓球向相反方向移动,若未击中,则对方得一分。

(4)一方得分时,电路自动响铃3s,此时发球无效,等铃声停止后方能继续比赛。

(5)设置自动计分电路,双方各用二位数码管进行计分显示,每计满11分为一局。

(6)甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球有效。

2.设计要求(1) 确定总体设计方案画出总方框图。

(2) 确定各单元电路的功能,进行单元电路的设计,画出逻辑图。

(3) 选择芯片确定型号。

(4) 画出总逻辑图和装配图,并在实验板上组装电路。

(5) 进行电路调试,达到设计要求。

(6) 写出总结报告。

三、基本工作原理和设计方案乒乓球游戏模拟机电路框图如图所示。

频率可调的时钟发生器为双向移位寄存器提供时钟脉冲,用双向移位寄存器的输出端控制指示灯来模拟乒乓球的运动轨迹。

先点亮位于某一方的第1个指示灯,由击球者通过按钮输入“击球”开关信号,实现移位方向的控制。

本电路设计的核心为控制电路,它决定整个系统的动作,必须掌握各信号之间的关系。

框图中的双向移位寄存器也可用计数译码方式实现乒乓球运动轨迹的模拟,如利用加减计数器的两个时钟信号来实现甲乙双方的击球,由表示球拍“击打”按钮产生计数时钟,计数器的输出状态经译码器驱动指示灯发光。

数电乒乓球游戏课程设计

数电乒乓球游戏课程设计

数电乒乓球游戏课程设计一、教学目标本课程的教学目标是使学生掌握数字电路的基本知识和技能,通过设计一个乒乓球游戏电路,培养学生运用所学知识解决实际问题的能力。

具体目标如下:1.知识目标:–掌握数字电路的基本概念和原理;–熟悉逻辑门、逻辑函数、逻辑电路的设计方法;–了解乒乓球游戏的规则和电路设计要求。

2.技能目标:–能够运用逻辑门电路设计简单的数字电路;–能够根据乒乓球游戏的规则,设计出相应的电路;–能够运用数字电路的知识,解决实际问题。

3.情感态度价值观目标:–培养学生的创新意识和团队合作精神;–培养学生对数字电路的兴趣和好奇心;–培养学生的自主学习和解决问题的能力。

二、教学内容本课程的教学内容主要包括数字电路的基本概念、逻辑门电路的设计、逻辑函数的化简、逻辑电路的设计方法以及乒乓球游戏的电路设计。

具体安排如下:1.数字电路的基本概念:介绍数字电路的定义、特点和分类,理解数字信号与模拟信号的区别。

2.逻辑门电路的设计:学习逻辑门的原理和功能,掌握逻辑门电路的设计方法,包括与门、或门、非门等。

3.逻辑函数的化简:学习逻辑函数的定义和性质,掌握逻辑函数的化简方法,包括卡诺图化简法、逻辑代数化简法等。

4.逻辑电路的设计方法:学习逻辑电路的定义和功能,掌握逻辑电路的设计方法,包括组合逻辑电路、时序逻辑电路等。

5.乒乓球游戏的电路设计:根据乒乓球游戏的规则,设计相应的电路,包括得分电路、计分电路等。

三、教学方法为了实现本课程的教学目标,我们将采用多种教学方法,包括讲授法、案例分析法、实验法等。

具体方法如下:1.讲授法:通过讲解数字电路的基本概念、原理和设计方法,使学生掌握相关知识。

2.案例分析法:通过分析乒乓球游戏的电路设计案例,使学生理解和运用所学知识解决实际问题。

3.实验法:通过实验室的实践操作,使学生亲手设计、搭建和测试数字电路,提高学生的实践能力。

四、教学资源为了支持本课程的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用权威、实用的数字电路教材,为学生提供系统、科学的学习材料。

数电设计乒乓球游戏机

数电设计乒乓球游戏机

数字电路课程设计报告设计二乒乓球游戏机姓名:陈元专业:信息工程年级:2015班级:信工二班学号:201532010161. 设计题目及要求1.1题目:乒乓球游戏机1.2要求:1)用8个发光二极管表示球;用两个按钮分别表示甲乙两个球员的球拍;2)一方发球后,球以固定速度向另一方运动(发光二极管依次点亮),当球达到最后一个发光二极管时,对方击球(按下按钮)球将向相反方向运动,在其他时候击球视为犯规,给对方加1分;都犯规,各自加1分;3)甲、乙各有一数码管计分;4)裁判有一个按钮,是系统初始化,每次得分后,按下一次。

2. 设计过程及软件仿真2.1设计方案:1)球台电路:用8个发光二极管表示球,采用双向移位寄存器控制灯的流向;2)控制电路:用双D触发器及逻辑门电路组成,通过此电路控制球台电路的左右移位;3)计分电路:用十进制计数器,逻辑门,译码器,数码管组成;4)时钟电路:用555定时器构建多谐振荡器产生时钟脉冲;5)电源电路:用usb串口与5v移动电源向电路板供电,并在电路板设置电源指示灯指示供电情况。

2.2.总电路设计:2.3单元电路设计1)球台电路设计球台电路是整个乒乓球游戏机的终端,是最终打乒乓球的球台。

上图中,两片4位74LS194双向移位寄存器接成8位双向移位寄存器。

74LS194功能表如表1所示:2)开关电路开关电路是整个乒乓球游戏机的灵魂,是使乒乓球游戏能进行的核心。

开关电路由两片74ls74(D触发器)、两个与非门,两个与门和一个或门组成。

图中74LS74为上升沿触发的D触发器,~PR为置1端(低有效),~CLR为置0端(低有效)。

当J1=0时,两片D触发器输出端均为1即S1=S0=1,通过接入74LS194,此时实现的是并行输入功能。

当J1=1时,Qa=J3=1,J2=Qd=0,通过各门电路和D触发器输出端分别为0,1即S1=0,S0=1。

相反情况时,当J1=1时,Qa=J3=0,J2=Qd=1,D触发器输出端分别为1,0即S1=1,S0=0。

EDA课程设计_7

EDA课程设计_7

乒乓球游戏电路设计一、乒乓球设计方案(1)我们设计的乒乓球游戏是以一排发光二极管交替发光指示乒乓球的行进路径, 其行进的速度可由输入的时钟信号控制。

乒乓球比赛是甲乙双方的比赛, 所以用两个按键模拟左右两个球拍;我们还要设计一个乒乓球控制模块, 即当发光二极管到最后一个的瞬间, 若检测到对应的表示球拍的键的信号, 立即使“球”反向运行, 如果此瞬间没有接到按键信号, 将给出失败鸣叫, 同时为对方记1分, 并将记分显示出来, 然后由对方重新发球以此类推;还要设计失球计数器的高低位计数模块;乒乓球行进方向控制模块, 主要由发球键控制;还要有一个失球提示发生模块。

(2)要知道乒乓球的游戏规则, 以多少分为一局, 谁先得到一定的分数谁就赢一局, 以此来判断输赢。

(3)用数码管显示双方的得分, 还要设计一个十进制计数器, 来显示分数。

(4)在乒乓球设计方案时还要考虑球速的问题。

二、乒乓球游戏电路的设计程序1.LIBRARY IEEE;--乒乓球游戏顶层文件use ieee.std_logic_1164.all;entity TENNIS isport(bain,bbin,clr,clk,souclk:in std_logic;ballout:out std_logic_vector(7 downto 0);countah,countal,countbh,countbl:out std_logic_vector(3 downto 0);lamp,speaker:out std_logic);end entity TENNIS;architecture ful of TENNIS iscomponent soundport(clk,sig,en:in std_logic;sout:out std_logic);end component;component ballctrlport(clr,bain,bbin,serclka,serclkb,clk:in std_logic; bdout,serve,serclk,ballclr,ballen:out std_logic);end component;component ballport(clk,clr,way,en:in std_logic;ballout:out std_logic_vector(7 downto 0));end component;component boardport(ball,net,bclk,serve:in std_logic;couclk,serclk:out std_logic);end component;component cou10port(clk,clr:in std_logic;cout:out std_logic;qout:out std_logic_vector(3 downto 0));end component;component cou4port(clk,clr:in std_logic;cout:out std_logic;qout:out std_logic_vector(3 downto 0));end component;component mwayport(servea,serveb:in std_logic;way:out std_logic);end component;signalnet,couclkah,couclkal,couclkbh,couclkbl,cah,cbh:std_logic; signalserve,serclka,serclkb,serclk,ballclr,bdout,way,ballen:std_lo gic;signal bbll:std_logic_vector(7 downto 0);beginnet<=bbll(4);ballout<=bbll;lamp<=clk;uah:cou4 port map(couclkah,clr,cah,countah);ual:cou10 port map(couclkal,clr,couclkah,countal);ubh:cou4 port map(couclkbh,clr,cbh,countbh);ubl:cou10 port map(couclkbl,clr,couclkbh,countbl); ubda:board port map(bbll(0),net,bain,serve,couclkal,serclka);ubdb:board port map(bbll(7),net,bbin,serve,couclkbl,serclkb);ucpu:ballctrlportmap(clr,bain,bbin,serclka,serclkb,clk,bdout,serve,serclk, ballclr,ballen);uway:mway port map(serclka,serclkb,way);uball:ball port map(clk,ballclr,way,ballen,bbll);usound:sound port map(souclk,ballen,bdout,speaker);end ful;2.library ieee;use ieee.std_logic_1164.all;entity sound isport(clk:in std_logic; --发声时钟sig:in std_logic; --正确接球信号en:in std_logic; --球拍接球脉冲sout:out std_logic); --提示声输出, 接小喇叭end entity sound;architecture ful of sound isbeginsout<=clk and (not sig) and en;--球拍接球, 没接到时, 发提示声end ful;3.library ieee; --总控制模块use ieee.std_logic_1164.all;entity ballctrlisport(clr:in std_logic; --系统复位bain:in std_logic; --左球拍bbin:in std_logic; --右球拍seclka:in std_logic; --左拍准确接球或发球serclkb:in std_logic; --右拍准确接球或发球clk:in std_logic; --乒乓球灯移动时钟bdout:out std_logic; --球拍接球脉冲serve:out std_logic; --发球状态信号serclk:out std_logic; --球拍正确接球信号ballclr:out std_logic; --乒乓球灯清零信号ballen:out std_logic); --乒乓球灯使能end entity ballctrl;architecture ful of ballctrl issignal bd:std_logic;signal ser:std_logic;beginbd<=bain or bbin;ser<=serclka or serclkb;serclk<=ser;--球拍正确接球信号bdout<=bd; --球拍接球脉冲process(clr,clk,bd)beginif(clr='1')then --系统复位serve<='1'; --系统处在职发球状态ballclr<='1'; --乒乓球灯清零elseif(bd='1')then --系统正常--球拍发球或接球时ballclr<='1'; --乒乓球灯清零if(ser='1')then --球拍发球或准确接球ballen<='1'; --乒乓球灯使能允许serve<='0'; --系统处在接球状态else ballen<='0';serve<='1'; --系统处在发球状态end if;else ballclr<='0';--没发球或接球时乒乓球灯不清零end if;end if;end process;end ful;4.--乒乓球灯模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ball isport(clk:in std_logic; --乒乓球灯前进时钟clr:in std_logic; --乒乓球灯清零way:in std_logic; --乒乓球灯前进方向en:in std_logic; --乒乓球灯使能ballout:out std_logic_vector(7 downto 0));--乒乓球灯end entity ball;architecture ful of ball issignal lamp:std_logic_vector(9 downto 0);beginprocess(clk,clr,en)beginif(clr='1') then lamp<="1000000001";--清零elsif en='0' thenelsif (clk'event and clk='1')then--使能允许, 乒乓球灯前进时钟上升沿if(way='1') then lamp(9 downto 1)<=lamp(8 downto 0);lamp(0)<='0';--乒乓球灯右移else lamp(8 downto 0)<=lamp(9 downto 1); lamp(9)<='0';--乒乓球灯左移end if;end if;ballout<=lamp(8 downto 1);end process;end ful;5.--乒乓拍模块library ieee;use ieee.std_logic_1164.all;entity board isport(ball:in std_logic; --接球点, 也就是乒乓球灯的末端net:in std_logic; --乒乓球灯的中点, 乒乓球过中点时, counclk、serclk复位bclk:in std_logic; --球拍接球信号serve:in std_logic; --发球信号couclk:out std_logic;serclk:out std_logic);end entity board;architecture ful of board isbeginprocess(bclk,net)beginif(net='1')then serclk<='0';couclk<='0';--乒乓球过中点时, counclk、serclk复位elsif(bclk'event and bclk='1')then—球拍接球时if(serve='1')then serclk<='1';--系统处于发球状态时—发球成功else—系统处于接球状态if(ball='1')then serclk<='1';--乒乓球刚落在接球点上, 接球成功else serclk<='0';couclk<='1';end if;end if;end if;end process;end ful;6.--十进制计数器用来做失球低位计数library ieee;use ieee.std_logic_1164.all;entity mway isport(servea:in std_logic;serveb:in std_logic;way:out std_logic);end entity mway;architecture ful of mway isbeginprocess(servea,serveb)beginif(servea='1')then way<='1';elsif(serveb='1')then way<='0';end if;end process;end ful;7、--四进制计数器用来做失球高位计数library ieee;use ieee.std_logic_1164.all;entity mway isport(servea:in std_logic;serveb:in std_logic;way:out std_logic);end entity mway;architecture ful of mway isbeginprocess(servea,serveb)beginif(servea='1')then way<='1';elsif(serveb='1')then way<='0';end if;end process;end ful;8、--乒乓球前进方向产生模块library ieee;use ieee.std_logic_1164.all;entity mway isport(servea:in std_logic;--左选手发球信号serveb:in std_logic;--右选手发球信号way:out std_logic);--乒乓球灯前进方向信号end entity mway;architecture ful of mway isbeginprocess(servea,serveb)beginif(servea='1')then way<='1';--左选手发球方向向右elsif(serveb='1')then way<='0';--右选手发球方向向左end if;end process;end ful;三、乒乓球游戏程序的仿真波形仿真波形图四、硬件测试方法然后我们就要测试硬件, 下载文件。

电子技术乒乓球比赛游戏机课程设计

电子技术乒乓球比赛游戏机课程设计

电子技术乒乓球比赛游戏机课程设计《电子技术乒乓球比赛游戏机课程设计》一、课程目标:通过本课程的学习,使学生掌握基本的电子技术知识和乒乓球比赛规则,能够独立设计和制作一款乒乓球比赛游戏机。

二、适用对象:中学高中阶段的电子技术爱好者。

三、教学内容:1.电子技术基础知识:(1)电路基础知识:电阻、电容、电感等基本元件的特性和应用;(2)逻辑门电路:与门、或门、非门等基本逻辑门电路的原理和使用。

2.乒乓球比赛规则:(1)乒乓球比赛的基本规则:发球、回球、得分等;(2)乒乓球比赛的技术要求和战术技巧。

3.乒乓球比赛游戏机的设计和制作:(1)游戏机硬件设计:电路组成和连接方式、面板和按键设计;(2)游戏机软件设计:游戏逻辑和控制流程、分数计算和显示。

四、教学方法:1.理论授课:通过教师讲解、多媒体展示等方式,将电子技术和乒乓球比赛规则的基本知识传达给学生。

2.实践操作:学生在教师的指导下,进行乒乓球比赛游戏机的硬件组装和软件编程。

学生可以通过实际操作,巩固和应用所学的电子技术知识。

3.小组合作:学生可以分成小组,进行合作设计和制作乒乓球比赛游戏机。

通过合作,学生可以相互交流、共同解决问题,提高团队合作能力和创新能力。

五、教学评估:1.学生的理论考试成绩:对学生的理论知识进行考核,通过闭卷考试的形式测试学生对电子技术和乒乓球比赛规则的掌握程度。

2.实践项目成果评估:对学生的乒乓球比赛游戏机进行评估,包括硬件组装质量、软件功能完整性和游戏体验等方面。

3.学生表现综合评估:综合考虑学生的课堂参与度、合作能力、创新能力等方面,给予学生相应的综合评价。

六、教学资源:1.教材:电子技术基础教材、乒乓球比赛规则教材。

2.实验设备:电子实验箱、电路元件、乒乓球比赛游戏机组装材料等。

3.实践项目辅助工具:计算机、编程软件。

七、教学进度安排:本课程的教学进度安排为一学期,大致分为以下几个阶段:1.第一阶段(两周):电子技术基础知识授课和学习。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子课程设计——基于Verilog的乒乓游戏设计电路学院:专业、班级:姓名:学号:指导教师:2014年12月引言可编程器件的广泛应用,为数字系统的设计带来了极大的灵活性。

可编程器件可以通过软件编程对硬件的结构和工作方式进行重构,使得硬件的设计可以如同软件设计那样快捷方便。

高速发展的FPGA、CPLD兼有串、并行工作方式和高速、高可靠性的特点,在电子系统设计中得到了广泛应用。

通常使用硬件描述语言(Hardware Description Language,HDL)进行数字电子系统设计。

目前应用广泛的硬件描述语言有:VHDL语言,Verilog HDL语言,AHDL语言。

Verilog语言由于具有强大的行为描述能力和丰富的仿真语句从而成为系统设计领域最佳的硬件描述语言。

鉴于如上所述,本系统使用Verilog语言进行设计,采用自上向下的设计方法。

利用Quartus II 9.1 进行Verilog程序的编译与综合,然后用Modelism SE 6.0进行功能仿真和时序仿真,并使用EDA实验箱进行下载验证。

基于Verilog的乒乓游戏设计电路一、设计任务与要求任务:设计一个乒乓球游戏机,模拟乒乓球比赛的基本过程和规则,并能裁判和自动计分。

要求如下:1.使用乒乓球游戏机的甲乙双方在不同的位置罚球或击球。

2.乒乓球的位置和移动方向可由发光二极管和依次点亮的方向决定,为球的移动速度为一定值(我们设计中设为0.5秒移动一位)。

使用者可按乒乓球的位置发出相应的动作,在其他时候击球视为犯规,给对方加一分;都犯规双方各加一分。

二、总体框图设计思路根据乒乓球比赛的过程和规则,首先游戏开始,如果一方非正确击球则另一方加分,当分数大于11时获胜,游戏结束,系统设计流程图如图1所示。

图2给出了乒乓球游戏机的原理图。

用5个发光二极管代表乒乓球,在游戏机两侧各设置二个开关,一个是发球开关,一个是击球开关。

即若A方按动发球开关时,靠近A方的第一灯亮,然后二极管由A向B逐次点亮,代表乒乓球在移动。

当过网后,B就可以击球,否则判B方失分,A方自动加分,重新发球比赛继续进行到一方计分到11分,该局结束,计分牌清零,可以开始新的一局比赛。

反之B发球时也一样。

将核心模块分俩个进程:第一个实现逻辑功能,第二个将整数记分转换为十进制数,便于译码显示;得分显示模块用七段译码器。

各个状态间的转移控制要根据要求来改变转移的状态由于设计要求实现LED灯依此从左到右,或从右到左的移动,同时球拍击球。

若击中,则球向相反方向移动,若未击中,则对方得1分。

就其功能,若要实现记分,就得用到7段数码管,考虑到硬件要求,考虑用动态扫描技术来解决。

动态扫描前要进行译码,即把记数得分的结果译码成七段码。

设计方案完全用Verilog HDL语言编写程序。

三、器件选择1、装有QuartusII软件的计算机一台。

2、EDA实验箱一个(1)7段数码显示管。

(2)5个LED灯。

(3)芯片:使用Altera公司生产的CycloneIV芯片,选用EP4CE6E22C8片。

四、功能模块1、实现整个设计的逻辑功能,当游戏开始时,先通过clr对整个系统进行清零,在输入clk上升沿有效的条件下,甲方开始发球,LED灯从距离甲方最近的一个开始闪亮,并依次向乙方移动,过了网后乙方就可以击球,若乙方击球成功,则球按原路返回,再次过网后甲方就可击球,若甲击球成功,则按以上游戏一直进行下去,若有一方击球失败或提前击球,对方在记分牌上自动记一分;当其中的一方记满11分时比赛结束,清零后可开始下一局。

2、将整数计分转换为十进制数,便于译码显示。

当甲乙双方的记分低位到达9时使低位清零,同时使高位加1,以便正确地在数码管上显示得分。

clr为乒乓球游戏清零键,af为A方发球控制键,aj接球键;bf为乙方发球控制键,bj接球键;clk为控制乒乓球行进速度的时钟信号,接50MHZ时钟信号源;shift为LED灯显示输出端,接5个LED显示灯;计分要经过译码器译码后接8位共阴极数码显示管。

Verilog HDL程序module lqq (shift,scan,seg7,clk50Mhz,clr,af,aj,bf,bj); output[4:0] shift;output[3:0] scan;output[6:0] seg7;input clk50Mhz; //50Mhz时钟信号input af; //A方发球input aj; //A方击球input bf; //B方发球input bj; //B方击球input clr;//系统复位段reg[4:0] shift; //5个LED代表乒乓球甲左乙右)reg[3:0] scan; //数码管地址选择信号reg[6:0] seg7; //7段显示控制信号(abcdefg)reg clk1,clk2;reg[3:0] a_score,b_score;reg[1:0] cnt;reg[3:0] data;reg[3:0] a_one,a_ten,b_one,b_ten;reg[23:0] count,count1;reg a,b; //A和B的控制位reg[4:0] shift_1;//-------------2hz分频--------------always@(posedge clk50Mhz)beginif(count==24'd25000)begin clk1<=~clk1;count=0;endelse begin count<=count+1;endendalways@(posedge clk1)beginif(count1==24'd250)begin clk2<=~clk2;count1=0;endelse begin count1<=count1+1;endif(cnt==2'b11)begin cnt<=2'b00;endelsebegin cnt<=cnt+1;endend//乒乓球游戏规则always@(posedge clk2)beginif(clr)begin a_score<=0;b_score<=0;a<=0;b<=0;shift_1<=0;endelsebeginif(!a&&!b&&af) //如果A发球begin a<=1;shift_1<=5'b10000;end //A的控制位置1else if(!a&&!b&&bf)begin b<=1;shift_1<=5'b00001;end //B的控制位置1 else if(a&&!b) //球从A向B移动beginif(shift_1>5'b00100) //如果没到球网B击球,则A加分beginif(bj)begina_score<=a_score+1;a<=0;b<=0;shift_1<=5'b00000;endelse //如果B一直没有接球,则A加分begin shift_1[4:0]<=shift_1[4:0]>>1;endendelse if(shift_1==5'b0)begin a_score<=a_score+1;a<=0;b<=0;endelsebeginif(bj) //如果B击球成功,则B的控制位置1,A的控制位清零begin a<=0;b<=1;endelsebegin shift_1[4:0]<=shift_1[4:0]>>1;endendendelse if(b&&!a) // 球从B向A移动beginif(shift_1<5'b00100&&shift_1!=5'b0)beginif(aj) //如果没到球网A击球,则B加分beginb_score<=b_score+1;a<=0;b<=0;shift_1<=5'b00000;endelsebegin shift_1[4:0]<=shift_1[4:0]<<1;endendelse if(shift_1==5'b0) //如果A一直没接球,则B加分begin b_score<=b_score+1;a<=0;b<=0;endelsebeginif(aj) //如果A击球成功,则A的控制位置1,B的控制位置清零begin a<=1;b<=0;endelsebegin shift_1[4:0]<=shift_1[4:0]<<1;endendendendshift<=shift_1;if(a_score==4'b1011&&!clr)begin a_score<=a_score;b_score<=b_score;endif(b_score==4'b1011&&!clr)begin a_score<=a_score;b_score<=b_score;endend//---------将A和B的计分换成BCD码---------- always@(posedge clk2)begincase(a_score[3:0])4'b0000:begin a_one<=4'b0000;a_ten<=4'b0000;end 4'b0001:begin a_one<=4'b0001;a_ten<=4'b0000;end 4'b0010:begin a_one<=4'b0010;a_ten<=4'b0000;end 4'b0011:begin a_one<=4'b0011;a_ten<=4'b0000;end 4'b0100:begin a_one<=4'b0100;a_ten<=4'b0000;end 4'b0101:begin a_one<=4'b0101;a_ten<=4'b0000;end 4'b0110:begin a_one<=4'b0110;a_ten<=4'b0000;end 4'b0111:begin a_one<=4'b0111;a_ten<=4'b0000;end 4'b1000:begin a_one<=4'b1000;a_ten<=4'b0000;end 4'b1001:begin a_one<=4'b1001;a_ten<=4'b0000;end 4'b1010:begin a_one<=4'b0000;a_ten<=4'b0001;end 4'b0011:begin a_one<=4'b0001;a_ten<=4'b0001;end default:begin a_one<=4'bx;a_ten<=4'bx;end endcaseendalways@(b_score[3:0])case(b_score[3:0])4'b0000:begin b_one<=4'b0000;b_ten<=4'b0000;end4'b0001:begin b_one<=4'b0001;b_ten<=4'b0000;end 4'b0010:begin b_one<=4'b0010;b_ten<=4'b0000;end 4'b0011:begin b_one<=4'b0011;b_ten<=4'b0000;end 4'b0100:begin b_one<=4'b0100;b_ten<=4'b0000;end 4'b0101:begin b_one<=4'b0101;b_ten<=4'b0000;end 4'b0110:begin b_one<=4'b0110;b_ten<=4'b0000;end 4'b0111:begin b_one<=4'b0111;b_ten<=4'b0000;end 4'b1000:begin b_one<=4'b1000;b_ten<=4'b0000;end 4'b1001:begin b_one<=4'b1001;b_ten<=4'b0000;end 4'b1010:begin b_one<=4'b0000;b_ten<=4'b0001;end 4'b0011:begin b_one<=4'b0001;b_ten<=4'b0001;end default:begin b_one<=8'bx;b_ten<=8'bx;end endcase//----------数码管动态扫描--------------always@(posedge clk1)begincase(cnt[1:0])2'b00:begin data<=b_one;scan<=4'b1110;end2'b01:begin data<=b_ten;scan<=4'b1101;end2'b10:begin data<=a_one;scan<=4'b1011;end2'b11:begin data<=a_ten;scan<=4'b0111;end default:begin data<=4'bx;scan<=4'bx;endendcase//----------------七段译码---------------- case(data[3:0])4'b0000: seg7[6:0]=7'h3f;4'b0001: seg7[6:0]=7'h06;4'b0010: seg7[6:0]=7'h5b;4'b0011: seg7[6:0]=7'h4f;4'b0100: seg7[6:0]=7'h66;4'b0101: seg7[6:0]=7'h6d;4'b0110: seg7[6:0]=7'h7d;4'b0111: seg7[6:0]=7'h07;4'b1000: seg7[6:0]=7'h7f;4'b1001: seg7[6:0]=7'h6f;default: seg7[6:0]=7'hx;endcaseendendmodule五、总体设计电路图硬件连接情况:af、aj、bf、bj连接实验箱上的K1、K2、K4、K5 clr连接K12作为系统复位端shift[0]……shift[4]连接实验箱上的L1、L2、L3、L4、L5scan[0]……scan[3]连接实验箱上的LED_C1 、LED_C2、 LED_C3、LED_C4seg[0]……seg[6]连接实验箱上的LED_A、LED_B、LED_C、LED_D、LED_E、LED_F、LED_G管脚分配图波形仿真图A方发球B方不接球A方发球B提前接球犯规B方发球A不接球B方发球A提前接球犯规AB僵持球实验箱连接图:六、心得体会Verilog HDL硬件描述语言打破了硬件和软件设计人员之间互不干涉的界限,可使用语言的形式来进行数字系统的硬件结构、行为的描述,直接设计数字电路硬件系统,通过编程、下载后,该芯片已经具备了原来需要使用复杂的数字电路实现的功能;这样,使用语言描述大大缩短了开发周期,减少了开发难度,并使得系统更加灵活、稳健。

相关文档
最新文档