当前位置:文档之家› 智能乒乓球游戏机控制系统的设计

智能乒乓球游戏机控制系统的设计


四、确定输入和输出变量
• 输入变量:clk2hz指一个2Hz的时钟输入, rst异步复位, k_a和k_b是比赛双方按键。 • 输出变量:speaker是蜂鸣器led8s是一排8 个发光二极管代表球场, led7s1~4是4个显 示分数的数码管, led7s5是显示发球权的数 码管。
五、确定输入状态
• 考虑到游戏的复杂度,采用状态机来实现这些模式转换。 用到8个状态,如下所示: • 状态功能S0复位状态,也是判断发球权的状态S1甲方发 球S2球从甲方向乙方右移,若此时乙方接球就给甲方加一 分,并将球权给甲方S3开始判断乙方是否在0.5S内接球 S4乙方发球S5球从乙方向甲方左移,若此时甲方接球就给 乙方加一分,并将球权给乙方S6开始判断甲方是否在 0.5S内接球S7用于接球后判断发球
• • • • • • • • • • • • • • • • • •
s0: begin
示发球权可以开始判断了;
led7s5<=7'b0111111;//第五个数码管显示数字0,表
led8s<=7'b00000000; score_a<=0; score_b<=0;//给甲乙双方的分数复位; if(k_a) begin speaker<=1'b1;//因为按 键k_a要持续按着保持高电位'1',蜂鸣器鸣叫是提示可以松手了; state<=s7; end else if(k_b) begin speaker<=1'b1; state<=s7;
• always @(posedge clk2hz) begin • case(state) • s7: begin • if(k_a) • state<=s1; //甲发球; • else if(k_b) • state<=s4;//乙发球; • else if(speaker) • speaker=1'b0; • else • speaker=1'b0; • end
题目:智能乒乓游戏机控制系统 的设计
一、大作业摘要
目前以硬件描述语言(Verilog 或 VHDL) 所完成的电路设计,可以经过简单的综合 与布局,快速的烧录至 FPGA 上进行测 试,是现代 IC 设计验证的技术主流。本 实验应用现学的知识为基础,完成的一个 智能乒乓球游戏机控制系统,下面是我的 作品。
用户1接球 (key1按下)
No
用户2数码管加1
Yes
蜂鸣器响,数码管 反向移动
八、状态机设计(状态转换图)
九、状态机设计(状态编码)
• module pingpangok(state,clk2hz,rst,k_a,k_b,led8s, led7s1,led7s2,led7s3,led7s4,led7s5,speak er); • //clk2hz指一个2Hz的时钟输入, rst异步复位, k_a和k_b是比赛双方按键, speaker是蜂鸣 器 • //led8s是一排8个发光二极管代表球场, led7s1~4是4个显示分数的数码管, led7s5 是显示发球权的数码管
– 左、右双方各持一按键作为“球拍”,实验板上一行8只发光二极 管为乒乓球台,其中那只发光的发光二极管代表乒乓球所在位置。 – 设计如图1所示的乒乓球游戏实物图的模拟控制器。发球方最后一 位LED点亮,按下键表示发球,亮的灯依次向对方移动,当到达对 方最后一位时0.5s内对方必须按下按键表示接球,接球后LED灯向 对方移动,否则输球。 – 接球时,LED没有亮到最后一位时就按下接球按键为犯规。输球或 者犯规,对方加1分,率先加到11分者游戏胜出这一局。
• parameter s0=3'b000,//复位状态,也是判断发球权的状 态; • s1=3'b001,//甲方发球; • s2=3'b010,//球从甲方向乙方右移,若此时乙方 接球就给甲方加一分,并将球权给甲方; • s3=3'b011,//开始判断乙方是否在0.5S内接球; • s4=3'b100,//乙方发球; • s5=3'b101,//球从乙方向甲方左移,若此时甲方 接球就给乙方加一分,并将球权给乙方; • s6=3'b110;//开始判断甲方是否在0.5S内接球; • s7=3'b111;//用于判断接球后发球;
二、设计的背景、目的和意义
• 背景:在乒乓球比赛中要计分,但对于人 工记分较为繁琐并容易出错,所以要使用 计分器就可以避免这些问题,并能让人清 楚地看到两人的分数。 • 目的:能实现积分并在有人达到11时进行 蜂鸣提醒。 • 意义:实现数字计分,节约了人力,并使 计分结果更准确。
三、设计任务及要求
六、整体设计框图
开始 初始化程序 用户1发球(key1 按下)
移动数码管
用户2接球 (key2按下)
No
用户1数码管加1
Yes
蜂鸣器响,数码管 反向移动
用户1接球 (key1按下)
No
用户2数码管加1
Yes
蜂鸣器响,数码管 反向移动
用户2接球 (key2按下)
No
用户1数码管加1
Yes
蜂鸣器响,数码管 反向移动
end
else state<=s0; end
• s1: begin • led7s5<=7'b0000110;//第 五个数码管显示数字1,表示发球权现在是甲方的; • if(led8s==8'b00000000) • led8s<=8'b10000000;//点亮的灯出现在最右边,即甲 方发球; • state<=s2; • if(speaker) • speaker<=1'b0;// 将刚才鸣叫的蜂鸣器关闭; • end
• • • • • • • • •
output [7:0] led8s; output [6:0] led7s1,led7s2,led7s3,led7s4,led7s5; output speaker; output [2:0] state; reg [7:0] led8s; reg [6:0] led7s1,led7s2,led7s3,led7s4,led7s5; reg [3:0] score_a,score_b; reg [2:0] state; reg speaker;
相关主题