名稱:VGA顯示器的彈球游戲DE1-SoC開發(fā)板乒乓球小球游戲VHDL(代碼在文末下載)
軟件:Quartus II
語言:VHDL
代碼功能:
彈球游戲,設(shè)計一個彈球游戲,并在VGA顯示器上顯示。
1、可以控制游戲開始,開始時數(shù)碼管顯示0分。
2、使用按鍵控制球拍的運動,當(dāng)控制球拍接住球時,分?jǐn)?shù)加1。
3、彈球觸碰屏幕邊緣或者球拍時可以反彈。
4、可以控制小球的移動速度和球拍的大小。
4、當(dāng)未成功接球時,游戲結(jié)束。
本代碼已在DE1-SoC開發(fā)板驗證,其他開發(fā)板可以修改管腳適配,開發(fā)板如下:
演示視頻:
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; --頂層模塊 ENTITY?vga_controller_top?IS ???PORT?(?????? ??????clk_50M???:?IN?STD_LOGIC;--時鐘 ??????rst???????:?IN?STD_LOGIC;--復(fù)位 ??????speed_sw??:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0);--速度控制按鍵 ??????size_sw???:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0);--大小控制按鍵 ??????btn_up????:?IN?STD_LOGIC;--上下按鍵 ??????btn_down??:?IN?STD_LOGIC;--上下按鍵 ??????hsync?????:?OUT?STD_LOGIC;--行場同步信號 ??????vsync?????:?OUT?STD_LOGIC;--行場同步信號 VGA_CLK???????:?OUT?STD_LOGIC;--vga時鐘 VGA_BLANK_N???:?OUT?STD_LOGIC; HEX???????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);--數(shù)碼管 ??????rgb???????:?OUT?STD_LOGIC_VECTOR(11?DOWNTO?0)--VGA三色數(shù)據(jù) ???); END?vga_controller_top; ARCHITECTURE?behave?OF?vga_controller_top?IS --復(fù)位按鍵同步模塊 ???COMPONENT?aiso_rst?IS ??????PORT?( ?????????clk???????:?IN?STD_LOGIC; ?????????reset?????:?IN?STD_LOGIC; ?????????reset_s???:?OUT?STD_LOGIC ??????); ???END?COMPONENT; ???--VGA同步模塊 ???COMPONENT?vga_sync?IS ??????PORT?( ?????????clk???????:?IN?STD_LOGIC; ?????????rst???????:?IN?STD_LOGIC; VGA_CLK???????:?OUT?STD_LOGIC; VGA_BLANK_N???:?OUT?STD_LOGIC; ?????????hsync?????:?OUT?STD_LOGIC; ?????????vsync?????:?OUT?STD_LOGIC; ?????????pixel_x???:?OUT?STD_LOGIC_VECTOR(9?DOWNTO?0); ?????????pixel_y???:?OUT?STD_LOGIC_VECTOR(9?DOWNTO?0); ?????????video_on??:?OUT?STD_LOGIC ??????); ???END?COMPONENT; ????--按鍵同步模塊?? ???COMPONENT?debounce?IS ??????PORT?( ?????????clk???????:?IN?STD_LOGIC; ?????????reset?????:?IN?STD_LOGIC; ?????????sw????????:?IN?STD_LOGIC; ?????????db????????:?OUT?STD_LOGIC ??????); ???END?COMPONENT; ???--產(chǎn)生墻、球和球拍 ???COMPONENT?graphic_generator?IS ??????PORT?( ?????????clk???????:?IN?STD_LOGIC; ?????????rst???????:?IN?STD_LOGIC; ?????????speed_sw??:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0); ?????????size_sw???:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0); ?????????btn???????:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0); ?????????pixel_x???:?IN?STD_LOGIC_VECTOR(9?DOWNTO?0); ?????????pixel_y???:?IN?STD_LOGIC_VECTOR(9?DOWNTO?0); ?????????video_on??:?IN?STD_LOGIC; score?????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0); ?????????rgb???????:?OUT?STD_LOGIC_VECTOR(11?DOWNTO?0) ??????); ???END?COMPONENT; --數(shù)碼管模塊 COMPONENT?display?is ??PORT( ?score:IN?STD_LOGIC_VECTOR(3?DOWNTO?0); ???????HEX:out?STD_LOGIC_VECTOR(6?DOWNTO?0) ?); end?COMPONENT; ??? SIGNAL?clk?????????:?STD_LOGIC:='0'; ???SIGNAL?video_on????:?STD_LOGIC; ???SIGNAL?rst_s???????:?STD_LOGIC; ???SIGNAL?pixel_x?????:?STD_LOGIC_VECTOR(9?DOWNTO?0); ???SIGNAL?pixel_y?????:?STD_LOGIC_VECTOR(9?DOWNTO?0); ???SIGNAL?db_btn_up???:?STD_LOGIC; ???SIGNAL?db_btn_down?:?STD_LOGIC; ???SIGNAL?btn_up_dowm?:?STD_LOGIC_VECTOR(1?DOWNTO?0); ???SIGNAL?score???????:?STD_LOGIC_VECTOR(3?DOWNTO?0); ???--?Declare?intermediate?signals?for?referenced?outputs ???SIGNAL?hsync_buf?:?STD_LOGIC; ???SIGNAL?vsync_buf?:?STD_LOGIC; ???SIGNAL?rgb_buf???:?STD_LOGIC_VECTOR(11?DOWNTO?0); BEGIN ???--?Drive?referenced?outputs ???hsync?<=?hsync_buf; ???vsync?<=?vsync_buf; ???rgb?<=?rgb_buf; ??? clk?<=?clk_50M; ???--復(fù)位按鍵同步模塊 ???u0?:?aiso_rst ??????PORT?MAP?( ?????????clk??????=>?clk, ?????????reset????=>?rst, ?????????reset_s??=>?rst_s ??????); ? ????--VGA同步模塊 ???u1?:?vga_sync ??????PORT?MAP?( ?????????clk???????=>?clk, ?????????rst???????=>?rst_s, VGA_CLK???=>?VGA_CLK, VGA_BLANK_N?=>?VGA_BLANK_N, ?????????hsync?????=>?hsync_buf, ?????????vsync?????=>?vsync_buf, ?????????pixel_x???=>?pixel_x, ?????????pixel_y???=>?pixel_y, ?????????video_on??=>?video_on ??????); ??? ??? ????--按鍵同步模塊? ???u2?:?debounce ??????PORT?MAP?( ?????????clk????=>?clk, ?????????reset??=>?rst_s, ?????????sw?????=>?btn_up, ?????????db?????=>?db_btn_up ??????); ??? ??? ????--按鍵同步模塊? ???u3?:?debounce ??????PORT?MAP?( ?????????clk????=>?clk, ?????????reset??=>?rst_s, ?????????sw?????=>?btn_down, ?????????db?????=>?db_btn_down ??????); ??? ???btn_up_dowm?<=?(db_btn_down?&?db_btn_up); ?--產(chǎn)生墻、球和球拍 ???u4?:?graphic_generator ??????PORT?MAP?( ?????????clk???????=>?clk, ?????????rst???????=>?rst_s, ?????????btn???????=>?btn_up_dowm, ?????????pixel_x???=>?pixel_x, ?????????pixel_y???=>?pixel_y, ????????? ?????????speed_sw??=>?speed_sw, ?????????size_sw???=>?size_sw, ?????????video_on??=>?video_on, score?????=>?score,--游戲分?jǐn)?shù) ?????????rgb???????=>?rgb_buf ??????); u5:?display ??PORT?MAP( ?score?=>?score,--游戲分?jǐn)?shù) ???????HEX?=>?HEX ?); END?behave;
設(shè)計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. Testbench
6. 仿真圖
整體仿真圖
復(fù)位按鍵同步模塊
VGA同步模塊
按鍵同步模塊
產(chǎn)生墻、球和球拍模塊
數(shù)碼管模塊
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=236