基于FPGA的乒乓球比赛游戏

链接:https://pan.baidu.com/s/1kfMj5wp9ywwdZwsXbVhPcg
提取码:1234

组成框图:
在这里插入图片描述
部分代码

乒乓球游戏机核心控制模块:
module led_con(clk_1s,reset,start,key_a,key_b,led_pose,sum,score_a,score_b,speaker,led);

input clk_1s;
input reset;
input start;
input key_a;
input key_b;
input led_pose;
output[4:0] sum;
output[3:0] score_a;
output[3:0] score_b;
output[5:0] led;
output speaker;
reg speaker;
//--------------------------------------------------------------
reg[5:0] led_move;
reg[3:0] score_a_r;
reg[3:0] score_b_r;
reg[6:0] state;
parameter[6:0] s0 = 7'b0000001,
               s1 = 7'b0000010,
               s2 = 7'b0000100,
               s3 = 7'b0001000,
               s4 = 7'b0010000,
               s5 = 7'b0100000,
               s6 = 7'b1000000;

always @(posedge clk_1s or negedge reset)
begin
  if(!reset) 
    state <= s0;
  else
    if(!start)
	  begin
		case(state)
		s0:
			begin
			 speaker <= 1;
			  if(score_a_r == 4'd11 || score_b_r == 4'd11)
				  begin
					score_a_r <= 4'b0;
					score_b_r <= 4'b0;
				  end
			  else if(!led_pose)
					  begin
						led_move <= 6'b011111;
						state <= s1;
					  end
			  else if(led_pose)
					  begin
						led_move <= 6'b111110;
						state <= s4;
					  end
			end
		s1:
			begin
			  if(!key_a)
				begin
				  led_move <= {led_move[0],led_move[5:1]};
				  state <= s2;
				end
			  else if(!key_b)
					 begin
					   speaker <= 0;
					   state <= s0;
					 end
			  else state <= s1;
			end
		s2:
			begin
			  if((led_move[2] == 0 || led_move[1] == 0 || led_move[0] == 0) && !key_b)
				state <= s6;
			  else if(((led_move[2] == 0 || led_move[1] == 0) && key_b) ||(led_move[5] == 0 || led_move[4] == 0 || led_move[3] == 0))
					 state <= s3;
			  else begin
					 score_a_r <= score_a_r+1;
					 state <= s0;
				   end
			end
		s3:
			begin
			  led_move <= {led_move[0],led_move[5:1]};
			  state <= s2;
			end
		s4:
begin
			  if(!key_b)
				begin
				  led_move <= {led_move[4:0],led_move[5]};
				  state <= s5;
				end
			  else if(!key_a)
					 begin
					   speaker <= 0;
					   state <= s0;
					 end
			  else state <= s4;
			end
		s5:
			begin
			  if((led_move[3] == 0 || led_move[4] == 0 || led_move[5] == 0) && !key_a)
				state <= s3;
			  else if(((led_move[3] == 0 || led_move[4] == 0) && key_a) ||(led_move[0] == 0 || led_move[1] == 0 || led_move[2] == 0))
					 state <= s6;
				   else begin
					 score_b_r <= score_b_r+1;
					 state <= s0;
						end
			end
		s6:
			begin
			  led_move <= {led_move[4:0],led_move[5]};
			  state <= s5;
			end
		default:state <= s0;
		endcase
        end
    else
      begin
        led_move <= 6'b110011;
        speaker <= 1;
      end
end
assign score_a = score_a_r;
assign score_b = score_b_r;
assign led = led_move;
assign sum = score_a_r+score_b_r;
endmodule

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值