经典马里奥小游戏的FPGA实现


新年好!祝各位朋友新年快乐!!健康平安!!!
代码有部分删减,不影响理解。


  • 演示视频.
  • 具体过程:
    • 按下十字按键的中央按键开始游戏。
    • 碰到柱子边界游戏结束。
    • 累计平安通过一定数量的柱子障碍,获得积分奖励,
    • 可选择继续游戏,失败则成绩全部清零;或直接结束游戏,并存档游戏进度。
  • 原理:VGA显示、基本逻辑约束
  • 目的:分享、学习、成长、感谢。

具体代码片段:

`timescale 1ns / 1ps
//阿汪先生的博客
module project_all(clk,disp_rgb,hsync,vsync,btn_up,btn_down,btn_left,btn_right,rst,btn_start);
input        clk,rst;
input        btn_up,btn_down,btn_left,btn_right,btn_start;
output[11:0] disp_rgb;
output       hsync,vsync;reg[9:0]    hcount;
reg[9:0]    vcount;
reg[11:0]    data;
reg[11:0]    data0;
reg[11:0]    data1;
reg[11:0]    data2;
reg[11:0]    data3;
reg[1:0]    flag=0;
wire        hcount_ov;
wire        vcount_ov;
wire        dat_act;
wire        hsync;
wire        vsync;
reg         vga_clk=0;
reg         cnt_clk=0;
reg[11:0]   hd_dat;
reg[11:0]   a=0;
reg[11:0]   b=0,c=0,d=0,e=0,f=0,g=0,h=0,e1=0,e2=0,e3=0,e4=0,e5=0,e6=0;
reg[11:0]   x1=0,xr1=0,x2=0,xr2=0,xr3=0,xr4=0,xr5=0,xr6=0;
reg[31:0]   rand1=32'b11001011010011010110101101100101;
reg[31:0]   rand2=32'b10100110010101010010110101010110;
reg[7:0]    count=0;
reg out_sig=1'b0;
reg [7:0]   cnt;
//VGA行,场扫描时序参数表
parameter
hsync_end  = 10'd95,
hdat_begin = 10'd143,
hdat_end   = 10'd783,
hpixel_end = 10'd799,
vsync_end  = 10'd1,
vdat_begin = 10'd34,
vdat_end   = 10'd514,
vline_end  = 10'd524,
fk_top     = 10'd173,
fk_bottom  = 10'd198,
fk_leftside= 10'd759,
fk_rightside=10'd784,
fk_speed   = 10'd3;  //速度控制always@(posedge clk)
beginif(cnt_clk == 1)beginvga_clk <= ~vga_clk;cnt_clk <= 0;endelsecnt_clk <= cnt_clk + 1;
end             /**********VGA驱动**********/
//行扫描
always@(posedge vga_clk)
beginif(hcount_ov)hcount <= 10'd0;elsehcount <= hcount + 10'd1;
end
assign hcount_ov = (hcount == hpixel_end);//场扫描
always@(posedge vga_clk)
beginif(hcount_ov)beginif(vcount_ov)vcount <= 10'd0;elsevcount <= vcount + 10'd1;end
end
assign vcount_ov = (vcount == vline_end);//数据、同步信号输入
assign dat_act = ((hcount >= hdat_begin) && (hcount < hdat_end)) && ((vcount > vdat_begin) && (vcount<vdat_end));
assign hsync   = (hcount > hsync_end);
assign vsync   = (vcount > vsync_end);
assign disp_rgb = (dat_act)?data:3'h00;    //伪随机数
always@(posedge vga_clk)
beginif(e1==0)beginx1 <= rand1 % (4'd7);if(rand1==0)rand1 <= 32'b11001011010011010110101101100101;  //每次左移数据后再取余,实现伪随机数elserand1 <= rand1 << 1; endelsex1<=x1;xr1 <= x1 * 5'd20;   //120
endalways@(posedge vga_clk)
beginif(e2==0)beginx2 <= rand2 % (4'd7);if(rand2==0)rand2 <= 32'b10100110010101010010110101010110;elserand2 <= rand2 << 1; endelsex2<=x2;xr2 <= x2 * 5'd20;     //120endalways@(posedge vga_clk)
beginif(e3==0)xr3 <= xr1+xr2;         //240elsexr3<=xr3;
endalways@(posedge vga_clk)
begin
if(e4==0)xr4 <= xr1 + xr2 /2'd2;          //180elsexr4 <= xr4;
endalways@(posedge vga_clk)
begin
if(e5==0)xr5 <= xr2 + xr1 / 2'd2;            //180elsexr5 <= xr5;
endalways@(posedge vga_clk)
begin
if(e6==0)xr6 <= xr2 ;                   //120elsexr6 <= xr6;
end//开始和内容切换
always @ (posedge vga_clk)
beginif(!rst)begindata =data0;end  elsebegin  case(flag)2'd0: data =data0;2'd1: data =data1;2'd2: data =data2;2'd3: data =data3;endcaseend
end     //控制
always@(posedge vcount_ov)
beginif(btn_start)flag=1;elseflag=flag;//马里奥移动方向的控制
if(flag == 1)
begin
//方块上移     if(btn_up && (fk_top-a+c)>=40)           a = a+fk_speed;    elsea=a;//方块下移       if(btn_down && (fk_bottom-a+c) <= 510)c = c+fk_speed;elsec=c;//左移       if(btn_left && (fk_leftside -b+d)>=144) b=b+fk_speed;elseb=b;
//右移       if(btn_right && (fk_rightside-b+d)<=784)d=d+fk_speed;elsed=d;//柱子移动
//a柱if(e1<=644)e1=e1+1;elsee1=0;//b柱   if(  (e1>=110) ||  (e2>0)   )e2=e2+1;elsee2=0;if(e2 == 644)e2=0;elsee2=e2;
//为避免篇幅过长,省略c、d、e、f柱子的移动代码//柱子右边界
//a  if((fk_leftside-b+d) >= (136+e1) && (fk_leftside-b+d) <= (140+e1) && (fk_top-a+c) <= (300-xr1))    //上begincount =0;a=0;b=0;c=0;d=0;e1=0;e2=0;e3=0;e4=0;e5=0;e6=0;flag = 2;endelsebegincount =count;a=a;b=b;c=c;d=d;e1=e1;e2=e2;e3=e3;e4=e4;e5=e5;e6=e6;end
//b    if( (fk_leftside-b+d) >= (136+e2) && (fk_leftside-b+d) <= (140+e2) && (fk_bottom-a+c) >= (200+xr2))  //下begincount =0;a=0;b=0;c=0;d=0;e1=0;e2=0;e3=0;e4=0;e5=0;e6=0;flag = 2;endelsebegincount =count;a=a;b=b;c=c;d=d;e1=e1;e2=e2;e3=e3;e4=e4;e5=e5;e6=e6;end
//为避免篇幅过长,省略c、d、e、f柱子的右边界的代码//柱子下边界
//a        if( (fk_top-a+c) >= (296-xr1)  && (fk_top-a+c) <= (300-xr1)  && (fk_leftside-b+d) < (140+e1) && (fk_rightside-b+d) > (119+e1))       //上begincount =0;a=0;b=0;c=0;d=0;e1=0;e2=0;e3=0;e4=0;e5=0;e6=0;flag = 2;endelsebegincount =count;a=a;b=b;c=c;d=d;e1=e1;e2=e2;e3=e3;e4=e4;e5=e5;e6=e6;     end
//为避免篇幅过长,省略c、d、e、f柱子的下边界代码//柱子上边界
//bif( (fk_bottom-a+c) >= (200+xr2)  && (fk_bottom-a+c) <= (204+xr2)  && (fk_leftside-b+d) < (140+e2) && (fk_rightside-b+d) > (119+e2))       //下begincount =0;a=0;b=0;c=0;d=0;e1=0;e2=0;e3=0;e4=0;e5=0;e6=0;flag = 2;endelsebegincount =count;a=a;b=b;c=c;d=d;e1=e1;e2=e2;e3=e3;e4=e4;e5=e5;e6=e6;     end
//dif( (fk_bottom-a+c) >= (240+xr4)  && (fk_bottom-a+c) <= (244+xr4)  && (fk_leftside-b+d) < (140+e4) && (fk_rightside-b+d) > (119+e4))       //下begincount =0;a=0;b=0;c=0;d=0;e1=0;e2=0;e3=0;e4=0;e5=0;e6=0;flag = 2;endelsebegincount =count;a=a;b=b;c=c;d=d;e1=e1;e2=e2;e3=e3;e4=e4;e5=e5;e6=e6;     end
//eif( (fk_bottom-a+c) >= (200+xr5)  && (fk_bottom-a+c) <= (204+xr5)  && (fk_leftside-b+d) < (140+e5) && (fk_rightside-b+d) > (119+e5))       //下begincount =0;a=0;b=0;c=0;d=0;e1=0;e2=0;e3=0;e4=0;e5=0;e6=0;flag = 2;endelsebegincount =count;a=a;b=b;c=c;d=d;e1=e1;e2=e2;e3=e3;e4=e4;e5=e5;e6=e6;     end//柱子左边界
//a     if( (fk_rightside-b+d) >= (119+e1) && (fk_rightside-b+d) <= (123+e1) && (fk_top-a+c) <= (300-xr1)) //上begincount =0;a=0;b=0;c=0;d=0;e1=0;e2=0;e3=0;e4=0;e5=0;e6=0;flag=2;endelsebegincount =count;a=a;b=b;c=c;d=d;e1=e1;e2=e2;e3=e3;e4=e4;e5=e5;e6=e6;end
//b  if( (fk_rightside-b+d) >= (119+e2) && (fk_rightside-b+d) <= (123+e2) && (fk_bottom-a+c) >= (200+xr2)) //下begincount =0;a=0;b=0;c=0;d=0;e1=0;e2=0;e3=0;e4=0;e5=0;e6=0;flag=2;endelsebegina=a;b=b;c=c;d=d;e1=e1;e2=e2;e3=e3;e4=e4;e5=e5;e6=e6;end
//为避免篇幅过长,省略c、d、e、f柱子的左边界代码//计数
//aif((fk_rightside-b+d) == (119 +e1))begincount=1;end//b
else if((fk_rightside-b+d) == (119 +e2))begincount=2;end//c
else if((fk_rightside-b+d) == (119 +e3))begincount=3;end//d
else if((fk_rightside-b+d) == (119 +e4))begincount=4;end//e
else if((fk_rightside-b+d) == (119 +e5))begincount=5;end//f
else if((fk_rightside-b+d) <= (119 +e6))begincount=6;endif(count == 6)                         //达到目标障碍数,进入奖励结算页面begina=0;b=0;c=0;d=0;e1=0;e2=0;e3=0;e4=0;e5=0;e6=0;flag = 3;count =0;     endelsebegincount =count;a=a;b=b;c=c;d=d;e1=e1;e2=e2;e3=e3;e4=e4;e5=e5;e6=e6;end end elseflag = flag;
endalways @ (count)
begincnt =  count;
end  //图像显示
always @ (posedge vga_clk)
begin
//柱子
//6根柱子以“上下上下下上”的序列顺序出现
//aif(hcount>(119+e1) && hcount < (140+e1 ) && vcount < (300-xr1) && vcount >35 )     //上data1 <= 12'h010;//b   else if(hcount>(119+e2) && hcount < (140+e2 ) && vcount > (200+xr2) && vcount <515) //下data1 <= 12'h010;//c   else if(hcount>(119+e3) && hcount < (140+e3 ) && vcount < (300-xr3) && vcount > 35) //上data1 <= 12'h010; //d   else if(hcount>(119+e4) && hcount < (140+e4 ) && vcount > (240+xr4) && vcount <515) //下data1 <= 12'h010;//eelse if(hcount>(119+e5) && hcount < (140+e5 ) && vcount > (200+xr5) && vcount <515) //下data1 <= 12'h010;//f  else if(hcount>(119+e6) && hcount < (140+e6 ) && vcount < (300-xr6) && vcount > 35) //上data1 <= 12'h010; //马里奥       //图片不同颜色区域分别赋值   //1else if(hcount >= (768-b+d) && hcount <= (773-b+d) && vcount >= (173-a+c) && vcount <=(174-a+c))data1 <= 12'hf00;//2else if(hcount >= (764-b+d) && hcount <= (773-b+d) && vcount >( 174-a+c) && vcount <=(175-a+c))data1 <= 12'hf00;
//3else if(hcount >= (764-b+d) && hcount <= (773-b+d) && vcount > (175-a+c) && vcount <=(176-a+c))data1 <= 12'hf00;//4else if(hcount > (767-b+d) && hcount <=( 768-b+d) && vcount > (176-a+c) && vcount <=(177-a+c))data1 <= 12'h68b;else if(hcount > (768-b+d) && hcount <= (770-b+d) && vcount > (176-a+c) && vcount <=(177-a+c))data1 <= 12'hffc;else if(hcount > (770-b+d) && hcount <= (773-b+d) && vcount > (176-a+c) && vcount <=(177-a+c))data1 <= 12'h0cd;//5else if(hcount >( 767-b+d) && hcount <= (768-b+d) && vcount > (177-a+c) && vcount <=(178-a+c))data1 <= 12'h68b;else if(hcount > (764-b+d) && hcount <= (767-b+d) && vcount >( 177-a+c) && vcount <=(178-a+c))data1 <= 12'h68b;else if(hcount > (768-b+d) && hcount <= (775-b+d) && vcount > (177-a+c) && vcount <=(178-a+c))data1 <= 12'h0cd;else if(hcount > (775-b+d) && hcount <=( 777-b+d) && vcount > (177-a+c) && vcount <=(178-a+c))data1 <= 12'h0cd;//6else if(hcount > (762-b+d) && hcount <= (775-b+d) && vcount > (178-a+c) && vcount <=(179-a+c))data1 <= 12'hffc;else if(hcount >( 775-b+d) && hcount <= (777-b+d) && vcount >( 178-a+c) && vcount <=(179-a+c))data1 <= 12'h0cd;//7else if(hcount > (762-b+d) && hcount <= (766-b+d) && vcount >( 179-a+c) && vcount <=(180-a+c))data1 <= 12'hffc;else if(hcount > (766-b+d) && hcount <= (767-b+d) && vcount > (179-a+c) && vcount <=(180-a+c))data1 <= 12'h0cd;   else if(hcount > (767-b+d) && hcount <= (773-b+d) && vcount >( 179-a+c) && vcount <=(180-a+c))data1 <= 12'hffc;else if(hcount > (773-b+d) && hcount <= (777-b+d) && vcount > (179-a+c) && vcount <=(180-a+c))data1 <= 12'h0cd;//8else if(hcount > (764-b+d) && hcount <= (767-b+d) && vcount > (180-a+c) && vcount <=(181-a+c))data1 <= 12'h0cd;else if(hcount > (767-b+d) && hcount <= (773-b+d) && vcount > (180-a+c) && vcount <=(181-a+c))data1 <= 12'hffc;//9else if(hcount > (765-b+d) && hcount <= (774-b+d) && vcount > (181-a+c) && vcount <=(182-a+c))data1 <= 12'h0cd;//10else if(hcount > (767-b+d) && hcount <= (773-b+d) && vcount > (182-a+c) && vcount <=(183-a+c))data1 <= 12'h0cd;//11else if(hcount > (766-b+d) && hcount <= (774-b+d) && vcount > (183-a+c) && vcount <=(184-a+c))data1 <= 12'hf00;//12else if(hcount > (764-b+d) && hcount <= (776-b+d) && vcount > (184-a+c) && vcount <=(185-a+c))data1 <= 12'hf00;
//13else if(hcount > (763-b+d) && hcount <= (772-b+d) && vcount > (185-a+c) && vcount <=(186-a+c))data1 <= 12'hf00;            else if(hcount >( 772-b+d) && hcount <=( 774-b+d) && vcount >( 185-a+c) && vcount <=(186-a+c))data1 <= 12'h00f;else if(hcount > (774-b+d) && hcount <= (778-b+d) && vcount > (185-a+c) && vcount <=(186-a+c))data1 <= 12'hf00;    //14else if(hcount > (761-b+d) && hcount <= (766-b+d) && vcount >( 186-a+c) && vcount <=(187-a+c))data1 <= 12'hf00; else if(hcount > (766-b+d) && hcount <= (768-b+d) && vcount > (186-a+c) && vcount <=(187-a+c))data1 <= 12'h00f;else if(hcount > (768-b+d) && hcount <= (772-b+d) && vcount >( 186-a+c) && vcount <=(187-a+c))data1 <= 12'hf00; else if(hcount > (772-b+d) && hcount <= (774-b+d) && vcount > (186-a+c) && vcount <=(187-a+c))data1 <= 12'h00f;else if(hcount > (774-b+d) && hcount <= (781-b+d) && vcount > (186-a+c) && vcount <=(187-a+c))data1 <= 12'hf00;
//15else if(hcount > (760-b+d) && hcount <= (766-b+d) && vcount > (187-a+c) && vcount <=(188-a+c))data1 <= 12'hf00;else if(hcount > (766-b+d) && hcount <= (768-b+d) && vcount > (187-a+c) && vcount <=(188-a+c))data1 <= 12'h00f;else if(hcount > (768-b+d) && hcount <= (772-b+d) && vcount > (187-a+c) && vcount <=(188-a+c))data1 <= 12'hf00; else if(hcount > (772-b+d) && hcount <= (774-b+d) && vcount > (187-a+c) && vcount <=(188-a+c))data1 <= 12'h00f;else if(hcount > (774-b+d) && hcount <= (783-b+d) && vcount > (187-a+c) && vcount <=(188-a+c))data1 <= 12'hf00;
//16else if(hcount > (759-b+d) && hcount <= (764-b+d) && vcount > (188-a+c) && vcount <=(189-a+c))data1 <= 12'hf00;           else if(hcount > (764-b+d) && hcount <= (766-b+d) && vcount >( 188-a+c) && vcount <=(189-a+c))data1 <= 12'hffc;else if(hcount > (766-b+d) && hcount <= (774-b+d) && vcount >( 188-a+c) && vcount <=(189-a+c))data1 <= 12'h00f; else if(hcount > (774-b+d) && hcount <= (776-b+d) && vcount > (188-a+c) && vcount <=(189-a+c))data1 <= 12'hffc; else if(hcount > (776-b+d) && hcount <= (778-b+d) && vcount >( 188-a+c) && vcount <=(189-a+c))data1 <= 12'hf00; else if(hcount > (778-b+d) && hcount < (784-b+d) && vcount > (188-a+c) && vcount <=(189-a+c))data1 <= 12'hffc;
//17else if(hcount > (759-b+d) && hcount <= (761-b+d) && vcount > (189-a+c) && vcount <=(190-a+c))data1 <= 12'hffc;else if(hcount > (761-b+d) && hcount <= (762-b+d) && vcount > (189-a+c) && vcount <=(190-a+c))data1 <= 12'hf00;else if(hcount > (762-b+d) && hcount <= (766-b+d) && vcount > (189-a+c) && vcount <=(190-a+c))data1 <= 12'hffc;else if(hcount > (766-b+d) && hcount <= (774-b+d) && vcount > (189-a+c) && vcount <=(190-a+c))data1 <= 12'h00f;else if(hcount > (774-b+d) && hcount < (784-b+d) && vcount > (189-a+c) && vcount <=(190-a+c))data1 <= 12'hffc;
//18else if(hcount > (759-b+d) && hcount <= (767-b+d) && vcount > (190-a+c) && vcount <=(191-a+c))data1 <= 12'hffc;else if(hcount > (767-b+d) && hcount <= (773-b+d) && vcount >( 190-a+c) && vcount <=(191-a+c))data1 <= 12'h00f;else if(hcount > (773-b+d) && hcount < (784-b+d) && vcount > (190-a+c) && vcount <=(191-a+c))data1 <= 12'hffc;
//19else if(hcount > (759-b+d) && hcount <= (767-b+d) && vcount > (191-a+c) && vcount <=(192-a+c))data1 <= 12'hffc;else if(hcount > (767-b+d) && hcount <= (773-b+d) && vcount > (191-a+c) && vcount <=(192-a+c))data1 <= 12'h00f;else if(hcount > (773-b+d) && hcount < (784-b+d) && vcount > (191-a+c) && vcount <=(192-a+c))data1 <= 12'hffc;
//20else if(hcount > (765-b+d) && hcount <= (775-b+d) && vcount > (192-a+c) && vcount <=(193-a+c))data1 <= 12'h00f;
//21else if(hcount > (763-b+d) && hcount <= (777-b+d) && vcount > (193-a+c) && vcount <=(194-a+c))data1 <= 12'h00f;
//22else if(hcount > (761-b+d) && hcount <= (779-b+d) && vcount > (194-a+c) && vcount <=(195-a+c))data1 <= 12'h00f;
//23else if(hcount > (762-b+d) && hcount <= (765-b+d) && vcount >( 195-a+c) && vcount <=(196-a+c))data1 <= 12'hb22;else if(hcount > (775-b+d) && hcount <= (778-b+d) && vcount > (195-a+c) && vcount <=(196-a+c))data1 <= 12'hb22;
//24else if(hcount > (760-b+d) && hcount <=(765-b+d) && vcount > (196-a+c) && vcount <=(197-a+c))data1 <= 12'hb22;else if(hcount > (775-b+d) && hcount <= (781-b+d) && vcount > (196-a+c) && vcount <=(197-a+c))data1 <= 12'hb22;//25else if(hcount > (760-b+d) && hcount <= (765-b+d) && vcount > (197-a+c) && vcount <=(198-a+c))data1 <= 12'hb22;else if(hcount > (775-b+d) && hcount <= (781-b+d) && vcount > (197-a+c) && vcount <=(198-a+c))data1 <= 12'hb22; else data1 <= 12'h000;end// GO!
//绘制游戏初始准备界面
always@(posedge vga_clk)
begin
if((hcount>= 274 && hcount <= 294) && (vcount >= 200 && vcount <=350))
data0 <= 12'h111;else if((hcount >= 274 && hcount <=394) && (vcount >= 200 && vcount <=220))
data0 <= 12'h111;else if((hcount >= 274 && hcount <= 394) && (vcount >= 330 && vcount <=350))
data0 <= 12'h111;else if((hcount >= 334 && hcount <= 394) && (vcount >= 275 && vcount <=295))
data0 <= 12'h111;else if((hcount >= 374 && hcount <= 394) && (vcount >= 275 && vcount <= 350))
data0 <= 12'h111;else if((hcount >= 454 && hcount <= 574) && (vcount >= 200 && vcount <= 220))
data0 <= 12'h111;else if((hcount >= 454 && hcount <= 574) && (vcount >= 330 && vcount <= 350))
data0 <= 12'h111;else if((hcount >= 454 && hcount <= 474) && (vcount >= 200 && vcount <= 350))
data0 <= 12'h111;else if((hcount >= 554 && hcount <= 574) && (vcount >= 200 && vcount <= 350))
data0 <= 12'h111;else if((hcount >= 634 && hcount <= 654) && (vcount >= 200 && vcount<= 310))
data0 <= 12'h111;else if((hcount >= 634 && hcount<= 654) && (vcount >= 330 && vcount <= 350))
data0 <= 12'h111;else data0 <= 12'h000;
end//GG!
//绘制游戏结束界面
always@(posedge vga_clk)
begin
if((hcount>= 274 && hcount <= 294) && (vcount >= 200 && vcount <=350))
data2 <= 12'hf00;else if((hcount >= 274 && hcount <=394) && (vcount >= 200 && vcount <=220))
data2 <= 12'hf00;else if((hcount >= 274 && hcount <= 394) && (vcount >= 330 && vcount <=350))
data2 <= 12'hf00;else if((hcount >= 334 && hcount <= 394) && (vcount >= 275 && vcount <=295))
data2 <= 12'hf00;else if((hcount >= 374 && hcount <= 394) && (vcount >= 275 && vcount <= 350))
data2 <= 12'hf00;else if((hcount>= 454 && hcount <= 474) && (vcount >= 200 && vcount <=350))
data2 <= 12'hf00;else if((hcount >= 454 && hcount <= 574) && (vcount >= 200 && vcount <=220))
data2 <= 12'hf00;else if((hcount >= 454 && hcount <= 574) && (vcount >= 330 && vcount <=350))
data2 <= 12'hf00;else if((hcount >= 514 && hcount <= 574) && (vcount >= 275 && vcount <=295))
data2 <= 12'hf00;else if((hcount >= 554 && hcount <= 574) && (vcount >= 275 && vcount <= 350))
data2 <= 12'hf00;else if((hcount >= 634 && hcount <= 654) && (vcount >= 200 && vcount<= 310))
data2 <= 12'hf00;else if((hcount >= 634 && hcount<= 654) && (vcount >= 330 && vcount <= 350))
data2 <= 12'hf00;else data2 <= 12'h000;
end//$10
always@(posedge vga_clk)
begin
if((hcount>= 454 && hcount <= 474) && (vcount >= 200 && vcount <=350))
data3 <= 12'h000;else if((hcount >= 534 && hcount <= 554) && (vcount >= 200 && vcount <=350))
data3 <= 12'h000;else if((hcount >= 604 && hcount <= 624) && (vcount >= 200 && vcount <=350))
data3 <= 12'h000;else if((hcount >= 534 && hcount <= 624) && (vcount >= 200 && vcount <=220))
data3 <= 12'h000;else if((hcount >= 534 && hcount <= 624) && (vcount >= 330 && vcount <=350))
data3 <= 12'h000;else if((hcount >= 304 && hcount <= 324) && (vcount >= 220 && vcount <=240))
data3 <= 12'hf00;else if((hcount >= 284 && hcount <= 304) && (vcount >= 200 && vcount <=220))
data3 <= 12'hf00;else if((hcount >= 344 && hcount <= 364) && (vcount >= 220 && vcount <=240))
data3 <= 12'hf00;else if((hcount >= 364 && hcount <= 384) && (vcount >= 200 && vcount <=220))
data3 <= 12'hf00;else if((hcount >= 274 && hcount <= 394) && (vcount >= 240 && vcount <=260))
data3 <= 12'hf00;else if((hcount >= 274 && hcount <= 394) && (vcount >= 300 && vcount <=320))
data3 <= 12'hf00;else if((hcount >= 324 && hcount <= 344) && (vcount >= 240 && vcount <=350))
data3 <= 12'hf00;else data3 <= 12'hfff;
endendmodule
//阿汪先生的博客.ws

//水平有限,能者见笑,大家见谅。

//感谢~~~

【Verilog】马里奥小游戏的FPGA实现相关推荐

  1. C++仿马里奥小游戏(Easy库)

    C++仿马里奥小游戏(Easy库) 源码+q:1597720408 主页面 失败 win

  2. 来学习开发一个网页版马里奥小游戏吧

    大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 说起全球最有吸金能力的IP,大家会想到什么呢?是漫威?是哈利波特?还是王者荣耀(笑)? 其实很多印象都是主观的,根据Wikimili从 ...

  3. Java开发的超级马里奥小游戏410 相对简单 功能非常齐全 完整源码

    今天为大家继续分享泡泡堂小游戏的开发与制作 410,目前系统已经完成了初步功能,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步!! 开发环 ...

  4. HTML马里奥小游戏

    最近,我们放寒假了,所以我可以写文章了,这次教大家做一个马里奥的游戏. css部分: <style type="text/css">*body{margin:0 aut ...

  5. Docker容器(1):安装docker,上线简单的2048,马里奥小游戏

    Docker基础知识 可以参考上一篇文章Docker基础知识 安装并启动Docker 实验环境: server5主机部署docker ip:172.25.38.5 #基础软件仓库网络等都已配好 #以下 ...

  6. 用jQuery仿写出马里奥小游戏

    CSS页面代码: *{margin: 0;padding: 0;}.games{width: 1500px;height: 800px;margin: 50px auto;background-col ...

  7. 用java做一个超级马里奥的小游戏

    好的,首先你需要准备一些基本的知识和工具: 了解 Java 语言的基本语法和编程概念. 安装好 Java 开发环境,比如 Eclipse 或者 IntelliJ IDEA. 准备好一些图像和音频资源, ...

  8. 基于verilog贪吃蛇游戏设计

    概述 基于verilog贪吃蛇游戏设计.使用verilog语言 小游戏主要分为以下几个模块:顶层模块.VGA显示模块.蛇身控制模块.苹果控制模块. 系统主要分为顶层模块.VGA显示模块.蛇身控制模块. ...

  9. 【Verilog】基于FPGA的五子棋小游戏(VGA显示、双人对战、胜负判别、附完整代码)

    基于FPGA的五子棋小游戏 有一些说明: 1.本文是基于VGA的显示小游戏,主要为VGA显示的拓展应用: 2.为适应不同显示屏的分辨率,棋盘确定为10X10的黑线白底的方格: 3.下棋主要用棋格颜色变 ...

最新文章

  1. Cisco路由器的Flash和NVRAM
  2. Spring Cloud 2021.0.1 发布
  3. 对于如何删除redis中geo存入的坐标
  4. 新学期,对同学们的要求和期望
  5. Linux学习总结(36)——创建、复制、剪切、重命名、清空和删除文件夹的命令
  6. Linux - Ubuntu下JDK配置
  7. Delphi第三方控件大比拼(收费篇)
  8. 【JAVA】根据汉字拼音首字母排序 不同类型处理
  9. HTC VIVE☀️四、Linear Drive与Circular Drive的使用
  10. 《心理学与生活》发展与教育(上)
  11. Adaptive让 Spark SQL 更高效更智能
  12. Java网络爬虫以fastjson提取JSON数据
  13. 原价游戏太贵?爬取steam游戏优惠信息
  14. PHP中date时差问题解决方法
  15. 插入缺失InDel insertion deletion
  16. R语言 K-M生存分析,ggplot2制作好看的生存曲线
  17. JSON Editor 中文文档
  18. Java实现树状结构解析
  19. 聚焦大规模分布式机器学习,全面剖析Google TensorFlow,来看阿里、京东等在人工智能技术的进展...
  20. 基于jQuery的下拉菜单菜单【02】,诸位上眼!!!

热门文章

  1. python将excel数据合并_Python语言之Python合并多个Excel数据
  2. 链表分解单双数c语言代码,编写一程序,将带头结点的单链表拆成一个奇数链表和一个偶数链表...
  3. 88E1111 100BASE-T百兆工程(part1)
  4. 成都开发者看过来!百度资深研发工程师将出席超级账本成都见面会
  5. 项目经验不丰富、技术不突出的程序员怎么打动面试官?
  6. [转]拍照怎么搜题?(下)
  7. 移动Web富应用框架RAIS发布
  8. ERROR: 报错分析 phase.raise_objection(this)不能是phase.raise_objection(phase)
  9. 该网页无法正常运作解决方法
  10. iapp将音量调至最大