• 方案介紹
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

貪吃蛇游戲DE1SOC開(kāi)發(fā)板VGA貪食蛇游戲VHDL

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

名稱:貪吃蛇游戲DE1SOC開(kāi)發(fā)板VGA貪食蛇游戲VHDL(代碼在文末下載)

軟件:Quartus II

語(yǔ)言:VHDL

代碼功能:

經(jīng)典貪食蛇游戲VGA

要求:

1、實(shí)現(xiàn)經(jīng)典的貪食蛇游戲。

2、通過(guò)4個(gè)按鍵控制蛇的方向。

3、果實(shí)可以隨機(jī)產(chǎn)生。

4、每吃到一次果實(shí),加一分,且蛇變長(zhǎng)。

5、使用VGA顯示游戲圖像。

本代碼采用分模塊設(shè)計(jì),包括:

  • 蛇控制模塊
  • 隨機(jī)信號(hào)產(chǎn)生模塊(果實(shí))
  • 計(jì)分模塊
  • 導(dǎo)航狀態(tài)機(jī)模塊
  • 通用計(jì)數(shù)器模塊
  • VGA控制模塊
  • 主狀態(tài)機(jī)模塊

本代碼已在DE1-SOC開(kāi)發(fā)板驗(yàn)證,其他開(kāi)發(fā)板可以修改管腳適配,開(kāi)發(fā)板如下:

VGA_ball_DE1_SoC.png

工程文件:

a7bc9c85-b814-4646-a62b-5631545bc69e.png

代碼編譯:

190c9a16-eda1-4ce4-a1b9-a9cb3c0863be.png

RTL圖

60e55188-1421-45b3-9681-31c8760d3758.png

管腳分配

556810cd-521f-48a5-b227-083df77d2e4f.png

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

部分代碼展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???use?ieee.std_logic_arith.all;
--貪食蛇游戲
ENTITY?Snake?IS
???PORT?(
??????PUSH_BUTTONS??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--方向鍵
??????CLOCK?????????:?IN?STD_LOGIC;--50M
??????RESET?????????:?IN?STD_LOGIC;--haigh?reset
??????COLOUR_OUT????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--332位--RGB顏色
VGA_CLK???????:?OUT?STD_LOGIC;--VGA時(shí)鐘
VGA_BLANK_N???:?OUT?STD_LOGIC;--VGA顏色信號(hào)有效控制信號(hào),高電平有效
??????HS????????????:?OUT?STD_LOGIC;--行同步信號(hào)
??????VS????????????:?OUT?STD_LOGIC--場(chǎng)同步信號(hào)
???);
END?Snake;
ARCHITECTURE?behave?OF?Snake?IS
--蛇控制模塊
???COMPONENT?SnakeControl?IS
??????PORT?(
?????????CLK???????????:?IN?STD_LOGIC;
?????????GAMECLOCK?????:?IN?STD_LOGIC;
?????????ADDRH?????????:?IN?STD_LOGIC_VECTOR(9?DOWNTO?0);
?????????ADDRV?????????:?IN?STD_LOGIC_VECTOR(8?DOWNTO?0);
?????????COLOUR????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);
?????????REACHED_TARGET?:?OUT?STD_LOGIC;
?????????MASTER_STATE??:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0);
?????????NAVIGATION_STATE?:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0);
?????????RAND_ADDRH????:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);
?????????RAND_ADDRV????:?IN?STD_LOGIC_VECTOR(6?DOWNTO?0);
?????????SCORE?????????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);
?????????SUICIDE???????:?OUT?STD_LOGIC
??????);
???END?COMPONENT;
???
--隨機(jī)信號(hào)產(chǎn)生模塊(果實(shí))
???COMPONENT?RandomWrapper?IS
??????PORT?(
?????????CLK???????????:?IN?STD_LOGIC;
?????????RESET?????????:?IN?STD_LOGIC;
?????????NEXT_apple????:?IN?STD_LOGIC;
?????????MASTER_STATE??:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0);
?????????HORIZONTAL????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);
?????????VERTICAL??????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0)
??????);
???END?COMPONENT;
???
--計(jì)分模塊
???COMPONENT?ScoreCounter?IS
??????PORT?(
?????????RESET?????????:?IN?STD_LOGIC;
?????????GAMECLOCK?????:?IN?STD_LOGIC;
?????????REACHED_TARGET?:?IN?STD_LOGIC;
?????????CURRENT_SCORE?:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0)
??????);
???END?COMPONENT;
???
--導(dǎo)航狀態(tài)機(jī)模塊
???COMPONENT?NavigationStateMachine?IS
??????PORT?(
?????????RESET?????????:?IN?STD_LOGIC;
?????????CLOCK?????????:?IN?STD_LOGIC;
?????????PUSH_BUTTONS??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);
?????????STATE_OUT?????:?OUT?STD_LOGIC_VECTOR(1?DOWNTO?0)
??????);
???END?COMPONENT;
???
--通用計(jì)數(shù)器模塊
???COMPONENT?GenericCounter?IS
??????GENERIC?(
?????????COUNTER_WIDTH?:?INTEGER?:=?4;
?????????COUNTER_MAX???:?INTEGER?:=?9
??????);
??????PORT?(
?????????CLK???????????:?IN?STD_LOGIC;
?????????RESET?????????:?IN?STD_LOGIC;
?????????ENABLE_IN?????:?IN?STD_LOGIC;
?????????TRIGG_OUT?????:?OUT?STD_LOGIC;
?????????COUNT?????????:?OUT?STD_LOGIC_VECTOR(COUNTER_WIDTH?-?1?DOWNTO?0)
??????);
???END?COMPONENT;
???
--VGA控制模塊
???COMPONENT?VGAWrapper?IS
??????PORT?(
?????????CLK???????????:?IN?STD_LOGIC;
?????????MASTER_STATE??:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0);
?????????ADDRH?????????:?OUT?STD_LOGIC_VECTOR(9?DOWNTO?0);
?????????ADDRV?????????:?OUT?STD_LOGIC_VECTOR(8?DOWNTO?0);
?????????CIN???????????:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);
?????????COUT??????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);
VGA_CLK???????:?OUT?STD_LOGIC;
VGA_BLANK_N???:?OUT?STD_LOGIC;
?????????HS????????????:?OUT?STD_LOGIC;
?????????VS????????????:?OUT?STD_LOGIC
??????);
???END?COMPONENT;
???
--主狀態(tài)機(jī)模塊
???COMPONENT?MasterStateMachine?IS
??????PORT?(
?????????RESET?????????:?IN?STD_LOGIC;
?????????CLOCK?????????:?IN?STD_LOGIC;
?????????PUSH_BUTTONS??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);
?????????SCORE_IN??????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);
?????????STATE_OUT?????:?OUT?STD_LOGIC_VECTOR(1?DOWNTO?0);
?????????SUICIDE_IN????:?IN?STD_LOGIC
??????);
???END?COMPONENT;
???
???SIGNAL?MasterState??????:?STD_LOGIC_VECTOR(1?DOWNTO?0):="00";
???SIGNAL?NavState?????????:?STD_LOGIC_VECTOR(1?DOWNTO?0):=(others?=>'0');
???SIGNAL?RandomAddrH??????:?STD_LOGIC_VECTOR(7?DOWNTO?0):=(others?=>'0');
???SIGNAL?RandomAddrV??????:?STD_LOGIC_VECTOR(6?DOWNTO?0):=(others?=>'0');
???SIGNAL?AddrH????????????:?STD_LOGIC_VECTOR(9?DOWNTO?0):=(others?=>'0');
???SIGNAL?AddrV????????????:?STD_LOGIC_VECTOR(8?DOWNTO?0):=(others?=>'0');
???SIGNAL?Colour???????????:?STD_LOGIC_VECTOR(7?DOWNTO?0):=(others?=>'0');
???SIGNAL?ReachedTarget????:?STD_LOGIC:='0';
???SIGNAL?Score????????????:?STD_LOGIC_VECTOR(3?DOWNTO?0):=(others?=>'0');
???SIGNAL?Gameclock????????:?STD_LOGIC:='0';
???SIGNAL?Suicide??????????:?STD_LOGIC:='0';
???
???SIGNAL?COLOUR_OUT_buf?:?STD_LOGIC_VECTOR(7?DOWNTO?0):=(others?=>'0');
???SIGNAL?HS_buf?????????:?STD_LOGIC:='0';
???SIGNAL?VS_buf?????????:?STD_LOGIC:='0';
SIGNAL?NOT_PUSH_BUTTONS???:?STD_LOGIC_VECTOR(3?DOWNTO?0):=(others?=>'0');
BEGIN
???--控制輸出
???COLOUR_OUT?<=?COLOUR_OUT_buf;
???HS?<=?HS_buf;
???VS?<=?VS_buf;
???
NOT_PUSH_BUTTONS<=?not?PUSH_BUTTONS;--按鍵低電平有效轉(zhuǎn)換為高電平有效
???
???--調(diào)用主狀態(tài)機(jī)模塊
???MasterSTM?:?MasterStateMachine
??????PORT?MAP?(
?????????RESET?????????=>?RESET,
?????????CLOCK?????????=>?CLOCK,
?????????PUSH_BUTTONS??=>?NOT_PUSH_BUTTONS,
?????????SCORE_IN??????=>?Score,
?????????STATE_OUT?????=>?MasterState,
?????????SUICIDE_IN????=>?Suicide
??????);
???
???
???--調(diào)用導(dǎo)航狀態(tài)機(jī)模塊
???NavSTM?:?NavigationStateMachine
??????PORT?MAP?(
?????????RESET?????????=>?RESET,
?????????CLOCK?????????=>?Gameclock,
?????????PUSH_BUTTONS??=>?NOT_PUSH_BUTTONS,
?????????STATE_OUT?????=>?NavState
??????);
???
???
???--調(diào)用隨機(jī)信號(hào)產(chǎn)生模塊(果實(shí))
???RNDMWrp?:?RandomWrapper
??????PORT?MAP?(
?????????CLK???????????=>?CLOCK,
?????????RESET?????????=>?RESET,
?NEXT_apple????=>?ReachedTarget,
?????????MASTER_STATE??=>?MasterState,
?????????HORIZONTAL????=>?RandomAddrH,
?????????VERTICAL??????=>?RandomAddrV
??????);
???
???
???--調(diào)用通用計(jì)數(shù)器模塊
???GameSpeed?:?GenericCounter
??????GENERIC?MAP?(
?????????COUNTER_WIDTH??=>?22,
?????????COUNTER_MAX????=>?4166667
??????)
??????PORT?MAP?(
?????????CLK????????=>?CLOCK,
?????????RESET??????=>?'0',
?????????ENABLE_IN??=>?'1',
?????????TRIGG_OUT??=>?Gameclock
??????);
???
???
???--調(diào)用蛇控制模塊
???SnakeCtl?:?SnakeControl
??????PORT?MAP?(
?????????CLK???????????????=>?CLOCK,
?????????GAMECLOCK?????????=>?Gameclock,
?????????ADDRH?????????????=>?AddrH,
?????????ADDRV?????????????=>?AddrV,
?????????COLOUR????????????=>?Colour,
?????????REACHED_TARGET????=>?ReachedTarget,
?????????MASTER_STATE??????=>?MasterState,
?????????NAVIGATION_STATE??=>?NavState,
?????????RAND_ADDRH????????=>?RandomAddrH,
?????????RAND_ADDRV????????=>?RandomAddrV,
?????????SCORE?????????????=>?Score,
?????????SUICIDE???????????=>?Suicide
??????);
???
???
???--調(diào)用VGA控制模塊
???VGAWrp?:?VGAWrapper
??????PORT?MAP?(
?????????CLK???????????=>?CLOCK,
?????????MASTER_STATE??=>?MasterState,
?????????ADDRH?????????=>?AddrH,
?????????ADDRV?????????=>?AddrV,
?????????CIN???????????=>?Colour,
?????????COUT??????????=>?COLOUR_OUT_buf,
VGA_BLANK_N???=>?VGA_BLANK_N,
VGA_CLK???????=>?VGA_CLK,
?????????HS????????????=>?HS_buf,
?????????VS????????????=>?VS_buf
??????);
???
???
???--調(diào)用計(jì)分模塊
???ScoreCnt?:?ScoreCounter
??????PORT?MAP?(
?????????RESET???????????=>?RESET,
?????????GAMECLOCK???????=>?Gameclock,
?????????REACHED_TARGET??=>?ReachedTarget,
?????????CURRENT_SCORE???=>?Score
??????);
???
END?behave;

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=246

相關(guān)推薦