貪喫蛇(verilog)終於調試成功

       今天終於把貪喫蛇的VGA顯示調通了,硬件顯示蛇和喫食物是正確的,不過還有很多要改進的地方。比如隨機產生的食物會和蛇身重疊,未加入碰壁後的GAME OVER。這些後面改起來就簡單了,自己是個懶人不想做了,呵呵。
       杭州這地方做硬件的公司很少,做FPGA方面的就更少了,真怕自己以後找不到工作。想想在實驗室也沒啥項目,就自己瞎調調程序,以後項目拿不出手,說說自己做的小製作也不錯。在網上看到有外國人用DE2做的貪喫蛇遊戲,我就有了做個貪喫蛇遊戲的想法,然後在網上找資料,發現資料還真不多。
       在黑金論壇裏看到了有人做的貪喫蛇,發現沒有註釋,好幾個文件,看起來太麻煩。索性自己想如何建模了。使用Modelsim軟件仿真,不停的改,最後終於硬件實現了。
現在說說自己的建模思想吧。
      1、使用VGA 640X480圖像大小,蛇使用16X16大小的圖像塊。把現實區域分成40X30的座標系。我還加入了邊框,這樣現實區域爲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}食物(綠色)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章