- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于VHDL的乒乓球游戏电路设计
1、 概述
两人乒乓球游戏机是由发光二极管代替球的运动。并按一定的规则进行对垒比赛。甲乙双方发球和接球分别用两只开关代替。当甲方按动发球开关时,球就向前运动(发光管向前移位),当球运动过网到一定位置以后,乙方就可接球。若在规定的时间内,乙方不接球或提前、滞后接球,都算未接着球,甲方的计分牌自动加分。然后重新按规则有一方发球,比赛才能继续进行。比赛一直要进行到一方记分牌达到11分,这一局才告结束。
2、 设计任务和要求
乒乓球游戏机逻辑电路控制任务和要求如下:
1、乒乓球游戏机甲、乙双方各有两只按钮,分别为发球按钮和击球按钮。
2、乒乓球的移动用14只LED灯模拟运行。亮着的灯表示乒乓球此时的位置,乒乓球可以向左和向右移动。
3、球过网到一定的位置方可接球,提前击球或出界击球均判为失分,对方的得分加1。
4、比赛采用11分制,任何一方先记满11分就获胜,比赛一局就结束。当计分牌清零后,又可开始新的一轮比赛。
5、利用VHDL写相应的代码,利用状态机来实现其功能。
3、 总体设计
总体设计框图:
该系统可由以下几个模块构成
(1). Fenpin模块(分频模块),用来产生球移动频率和得分显示动态扫描频率。
(2). Move模块(模拟运行模块),用来显示乒乓球的运动情况
(3). Control模块(控制模块),用来控制乒乓球的运动情况,包括发球、接球、复位,加分等的控制。
(4). Showscore模块(得分显示模块),用来记录和显示各方的得分情况,通过四个7段数码管显示出来。
(5). Pingpangqiu模块(顶层文件),最终的乒乓球逻辑电路的一切功能的顶层文件。
(2) Fenpin模块设计
ibrary ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity fenpin is
port(clk: in std_logic; -----输入频率,为10MHZ
clkscan: out std_logic; -----输出得分动态扫描频率,为8us
clkmove: out std_logic); -----球移动频率,为400ms
end;
architecture behavior of fenpin is
begin
process(clk)
variable cntscan: integer range 80 downto 0; -----80分频后得到8us脉冲
--variable cntmove: integer range 4000000 downto 0;
variable cntmove: integer range 400 downto 0;
-----为了仿真方便则使球的移动频率改为40us
begin
if clkevent and clk=1 then ------clk的上升沿到来时
if cntscan80 then
cntscan:=cntscan+1; ------计数器未满时加1
else
cntscan:=0; ------否则计数器清零
end if;
if cntmove400 then
cntmove:=cntmove+1;
else
cntmove:=cntmove+1;
end if;
if cntscan40 then -------使其占空比为50%
clkscan=0;
else
clkscan=1;
end if;
if cntmove200 then
clkmove=0;
else
clkmove=1;
end if;
e
文档评论(0)