基于FPGA打地鼠游戏的设计与实现

地鼠会从一个个地洞中不经意的探出一个脑袋,或者一双眼睛,企图躲过游戏者的视线。不用心软,直接敲你的手丫子,拍掌下去,力求一次一个准,来一个砸一个,来二个砸一双。
在这里插入图片描述

1 FPGA设计硬件需求

1) VGA或其他显示接口 --fpga输出图像数据到显示屏
2) 4个按键或者4X4按键–模拟打地鼠的锤子
3) FPGA开发板

2 设计思路

FPGA作为主控硬件,
1)设计VGA显示驱动模块–驱动VGA接口显示图像
2)按键输入消抖模块–防止输入按键抖动
3)图像产生模块–产生地鼠图像和4宫格或者9宫格
3.1)随机数产生模块–随机数控制地鼠随机产生
3.2) 核心控制代码

3 FPGA实现

如下图所示,为真个设计的文件结构:
1) video_pll产生像素始时钟
2)key为四个按键的消抖模块
3)number_gen为地鼠产生以及控制打地鼠程序
4)vga_ctl为vga显示屏驱动
在这里插入图片描述
rtl图如下所示
在这里插入图片描述

4 verilog代码:

module top(

    input                              sys_clk,
    input                              rst_n,
   // input                       start,
    input                              key_up,//bnt0
    input                              key_down,//bnt1
    input                              key_left,//bnt2
    input                              key_right,//bnt3
    output         [3:0]               led,
	output                             lcd_dclk,	
	output                             lcd_hs,            //lcd horizontal synchronization
	output                             lcd_vs,            //lcd vertical synchronization        
	output                             lcd_de,            //lcd data enable     
	output[7:0]                        lcd_r,             //lcd red
	output[7:0]                        lcd_g,             //lcd green
	output[7:0]                        lcd_b	          //lcd blue

);

wire                            video_clk;


wire clk_100m;
wire  reset_n;
wire [11:0]   hcount;
wire [11:0]   vcount;
wire  [23:0]  vga_rgb;  

wire key1_en;
wire key2_en;
wire key3_en;
wire key4_en;

//generate video pixel clock
video_pll video_pll_m0(
    .clk_in1                    (sys_clk                  ),
    .clk_out1                   (video_clk                ),//9MHZ
    .clk_out2                   (                         ),
    .clk_out3                   (clk_100m                 ),
    .reset                      (1'b0                     ),
    .locked                     (  reset_n                )
    );
    
key Ukey(
       .clk(video_clk),//9MHZ
	   .reset_n(reset_n),
       .key1(key_up),
	   .key2(key_down),
	   .key3(key_left),
	   .key4(key_right),
	   .key1_en(key1_en),
	   .key2_en(key2_en),
	   .key3_en(key3_en),
	   .key4_en(key4_en)
	   );
	   
number_gen Unumber_gen(
           .clk(video_clk),
	       .rst_n(reset_n),
	       
	       .key1_en(key1_en),
	       .key2_en(key2_en),
	       .key3_en(key3_en),
	       .key4_en(key4_en),
		   .led(led),
	       .VGA_VS(lcd_vs),
	       .rgb_data(vga_rgb),
	       .hcount(hcount),
           .vcount(vcount)
       );
           
vga_ctl U_vga_ctl(
        .pix_clk(video_clk),
        .reset_n(reset_n),
        .VGA_RGB(vga_rgb),
        .hcount(hcount),
        .vcount(vcount),
		.VGA_CLK(lcd_dclk),
        .VGA_R(lcd_r),
        .VGA_G(lcd_g),
        .VGA_B(lcd_b),
        .VGA_HS(lcd_hs),
        .VGA_VS(lcd_vs),
        .VGA_DE(lcd_de),
        .BLK()
        );  

endmodule

5视频演示

在这里插入图片描述
在这里插入图片描述
视频连接:
https://v.qq.com/x/page/e3218pdntuo.html
打地鼠
视频演示链接:
打地鼠

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LEEE@FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值