贪吃蛇(verilog)终于调试成功

       今天终于把贪吃蛇的VGA显示调通了,硬件显示蛇和吃食物是正确的,不过还有很多要改进的地方。比如随机产生的食物会和蛇身重叠,未加入碰壁后的GAME OVER。这些后面改起来就简单了,自己是个懒人不想做了,呵呵。
       杭州这地方做硬件的公司很少,做 FPGA方面的就更少了,真怕自己以后找不到工作。想想在实验室也没啥项目,就自己瞎调调程序,以后项目拿不出手,说说自己做的小制作也不错。在网上看到有外国人用 DE2做的贪吃蛇游戏,我就有了做个贪吃蛇游戏的想法,然后在网上找资料,发现资料还真不多。
       在黑金论坛里看到了有人做的贪吃蛇,发现没有注释,好几个文件,看起来太麻烦。索性自己想如何建模了。使用 Modelsim软件仿真,不停的改,最后终于硬件实现了。
现在说说自己的建模思想吧。
      1、使用 VGA 640X480图像大小,蛇使用 16X16大小的图像块。把现实区域分成 40X3 0的坐标系。我还加入了边框,这样现实区域为 38X28
      2、定义一个 reg [12;0] Snake [0:31];寄存器组。这个就是我们要显示的蛇,最多显示32个长度。里面的每个寄存器的高6位存着蛇的X坐标,低6位存着蛇的Y坐标。我把初始蛇头设在 Snake[32-Snake_Length],蛇初始长度 Snake_Length为3。这样,只要我们右移这个寄存器组,就可以得到移动的蛇。
      3、产生一个蛇移动的时钟,在4个状态(蛇头左移、右移、上移、下移)将蛇头内的高6位或低6位数据进行+1或-1操作,然后寄存器组右移就对应蛇的移动了。
      4、随机食物显示则是定义了一个 reg [5:0] Food_High, Food_Low;(X,Y坐标)其高6位和低6位使用计数器在不同的时钟下计数(随机产生食物的X和Y坐标)。在四个状态下判断蛇吃到食物的话, Snake_Length+1而且 reg [11:0] Food={Food_Hignt,Food_Low};这样蛇吃到食物长长一节,而且产生新的食物。
      5、显示的时候则是显示到 40X30坐标系下莫个点( 16X16像素块)时,如果有 Snake[i] 或是 Food对应这个点就把 {R,G,B}值赋为 {3‘b100}显示蛇(红色)或是 {3’b010}食物(绿色)。

你可能感兴趣的:(FPGA)