地鼠会从一个个地洞中不经意的探出一个脑袋,或者一双眼睛,企图躲过游戏者的视线。不用心软,直接敲你的手丫子,拍掌下去,力求一次一个准,来一个砸一个,来二个砸一双。
1) VGA或其他显示接口 --fpga输出图像数据到显示屏
2) 4个按键或者4X4按键–模拟打地鼠的锤子
3) FPGA开发板
FPGA作为主控硬件,
1)设计VGA显示驱动模块–驱动VGA接口显示图像
2)按键输入消抖模块–防止输入按键抖动
3)图像产生模块–产生地鼠图像和4宫格或者9宫格
3.1)随机数产生模块–随机数控制地鼠随机产生
3.2) 核心控制代码
如下图所示,为真个设计的文件结构:
1) video_pll产生像素始时钟
2)key为四个按键的消抖模块
3)number_gen为地鼠产生以及控制打地鼠程序
4)vga_ctl为vga显示屏驱动
rtl图如下所示
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视频演示