FPGA 登月小艇遊戲
本專案是一個基於 Altera DE2-115 開發板(Cyclone IV E FPGA) 的 登月小艇(Lunar Lander) 遊戲。
玩家需使用 紅外線遙控器 控制飛船,在有限燃料下抵抗重力、避開隨機生成的障礙物,並安全降落。
- 專案簡介
- 硬體需求
- 遊戲玩法與操作
- 模組架構
- 安裝與編譯
- 難度設定
- 常見問題
本專案使用 Verilog HDL 實作,包含完整的物理模擬與周邊硬體控制。
- 物理引擎:模擬重力加速度、噴射推進反作用力與慣性
- 紅外線控制:支援 NEC 協定,含長按重複訊號(Repeat Code)處理
- VGA 顯示:640×480 解析度,顯示飛船、地形與障礙物
- LCD 狀態顯示:即時顯示燃料(Fuel)與遊戲狀態(Win / Fail)
- 隨機障礙物:使用 LFSR(線性回饋移位暫存器) 產生
- 難度分級:以指撥開關調整重力與安全降落速度
- LED 儀表板:LEDR / LEDG 即時顯示速度是否安全
- FPGA 開發板:Terasic DE2-115(Cyclone IV EP4CE115F29C7)
- 顯示輸出:VGA 螢幕
- 輸入裝置:DE2-115 原廠紅外線遙控器(或其他 NEC 協定遙控器)
- 電源:12V DC Adapter
控制飛船從螢幕上方緩慢降落至底部平台。
著陸時:
- 垂直速度必須低於「安全速限」
- 不可撞擊隨機生成的障礙物
| 按鍵 | 功能說明 |
|---|---|
| ▲(CH+) | 噴射推進(消耗燃料、產生向上推力) |
| ◀(<<) | 左移 |
| ▶(>>) | 右移 |
| MENU | 重置遊戲(Win / Fail 畫面時使用) |
- VGA 螢幕:
顯示飛船、地面、障礙物與結果文字(LANDED / GAME OVER) - LCD 螢幕:
Fuel: 50
State: P
- State:
IIdle /PPlay /WWin /FFail - LED 儀表板:
- 綠燈亮:速度安全
- 紅燈亮:速度過快,需減速
| 檔案名稱 | 功能描述 |
|---|---|
lunar_lander.v |
Top Module,連接所有子模組與 FPGA 腳位 |
Game_Control_Unit.v |
遊戲核心(FSM、物理運算、碰撞偵測、燃料管理、LFSR) |
IR_Receiver.v |
NEC 紅外線解碼,支援 Repeat Code |
LCD_Display.v |
LCD 驅動與 ASCII 顯示 |
VGA_Controller.v |
VGA 同步訊號與畫面繪製 |
SEG7_LUT.v |
七段顯示解碼 |
Clock_Divider.v |
50MHz → 25MHz(VGA)/ 60Hz(遊戲邏輯) |
使用 SW[1:0] 指撥開關調整難度,HEX0 / HEX1 顯示設定值。
| SW[1] | SW[0] | 難度 | 重力 | 安全速限 | 障礙物 |
|---|---|---|---|---|---|
| 0 | 0 | 簡單 | 小(1) | 寬鬆(8) | 無 |
| 0 | 1 | 普通 | 小(1) | 嚴格(5) | 無 |
| 1 | 0 | 困難 | 小(1) | 嚴格(5) | 有 |
| 1 | 1 | 地獄 | 大(2) | 極嚴(3) | 有 |
- 開啟 Quartus II(建議 13.0sp1 以上)
- 建立新專案,選擇裝置
EP4CE115F29C7 - 將所有
.v檔加入專案 - 匯入 Pin Assignment(
pins.csv) - 點擊 Start Compilation
- 使用 Programmer 將
.sof燒錄至開發板