● 项目详情

全国大学生集成电路创新创业大赛

安谋科技杯 · DINO & SNAKE · 基于 Cortex-M0 的 FPGA SoC

2023.03 – 2023.07 | 项目负责人 | 队伍编号 CICC3379

← 返回主页

项目概述

本项目为第七届全国大学生集成电路创新创业大赛(安谋科技杯)参赛作品,作品名称为 DINO AND SNAKE。项目基于 FPGA 与 ARM Cortex-M0 软核构建了一个完整的 SoC 系统,并在其上实现了两款经典街机风格游戏——小恐龙跳跃(DINO)与贪吃蛇(SNAKE),展示了软硬件协同设计的完整流程。

系统采用 AHBlite 总线架构连接 Cortex-M0 处理器与各外设模块,通过软硬件功能划分合理分配 FPGA 逻辑资源与处理器算力,实现了 OLED / VGA 双屏显示、矩阵键盘中断控制、蜂鸣器音乐播放等多功能集成。

参赛赛事
第七届集创赛
杯赛
安谋科技杯
作品名称
DINO AND SNAKE
队伍编号
CICC3379
团队
madao
角色
项目负责人

系统架构

Cortex-M0 SoC 系统设计
ARM DesignStart · AHBlite 总线 · 多外设集成

系统以 ARM Cortex-M0 软核(AT510-MN-80001-r2p0-00rel0)为核心,通过 AHBlite 总线互联架构,将以下外设模块集成至统一的 SoC 平台:

  • Block RAM:存储 Cortex-M0 可识别的指令机器码(hex),映射地址空间 0x00000000 – 0x0000FFFF
  • OLED 显示屏:MCU 接口屏,通过总线读写寄存器实现图像显示,用于 DINO 游戏画面
  • VGA 显示屏:640×480 分辨率,用于 SNAKE 游戏画面,采用像素合并技术降低总线占用
  • 矩阵键盘:通过键盘扫描 + 中断生成模块,将按键状态以中断信号形式传给 M0
  • 蜂鸣器:Verilog 硬件实现的音乐播放器,总线控制歌曲切换与播放/暂停
  • 定时器:FPGA 端编写的定时器模块,产生周期性中断信号驱动游戏刷新
系统总体设计框图

▲ 系统总体设计框图

关键模块设计

cortexm0ds_logic.v
从 ARM DesignStart 获取的 Cortex-M0 裸核网表文件,为整个 SoC 的运算与控制核心。
AHBlite_Decoder.v
总线地址译码模块,预留四个从机端口。Port0 分配给指令 BRAM,地址空间 0x00000000–0x0000FFFF。
AHBlite_SlaveMUX.v
从机多路复用选择器,根据译码结果选择对应从机的控制信号与数据通路。
AHBlite_Interconnect.v
总线互联顶层模块,例化 Decoder 与 SlaveMUX,将主机地址/数据/控制总线与各从机对应相连。
Block_RAM.v
指令存储器,预置 Cortex-M0 可执行的 hex 机器码。
AHBlite_Block_RAM.v
BRAM 的 AHBlite 总线接口层,负责总线协议适配与数据读写控制。
CortexM0_SoC.v
SoC 顶层文件,集成 M0 裸核、AHBlite 总线、BRAM 及接口模块,连接时钟/复位/调试接口。
keyboard_scan + generate_keyirq
键盘扫描模块检测按键动作,中断生成模块产生一个 HCLK 周期的高电平脉冲,送入 M0 IRQ 触发中断服务程序。

游戏实现

《DINO》小恐龙跳跃
OLED 显示 · 定时器中断 · Keil 软件逻辑

DINO 游戏运行在 Keil 编写的软件层,通过总线控制 OLED 显示屏与各外设:

  • 显示驱动:OLED 为 MCU 屏,硬件仅实现电气连接与管脚绑定(FPGA 端),显示驱动函数全部在 M0 固件中通过读写寄存器实现
  • 画面刷新:定时器每 0.1 秒产生中断使能游戏功能函数,实现 10Hz 刷新率
  • 游戏控制:拨动开关 SW7 启动游戏,按键 KEY13 控制跳跃,KEY14 实现游戏重开
  • 计分机制:OLED 右上角实时显示当前分数与最高分,小恐龙移动速度随分数升高递增
DINO 小恐龙游戏效果图

▲ 《DINO》小恐龙跳跃 — 游戏实际运行效果

《SNAKE》贪吃蛇
VGA 显示 · 像素合并优化 · 硬件逻辑

SNAKE 游戏主体在 FPGA 硬件端以 Verilog 实现,直接与 VGA 显示驱动结合:

  • VGA 驱动:640×480 分辨率,为降低总线占用率,采用像素合并技术——将 posX/posY 低 4 位合并为一个像素点,一次赋值控制 (2⁴)×(2⁴) = 256 个物理像素,极大减少 M0 总线带宽压力
  • 游戏逻辑:硬件端实现蛇的移动、食物判定、碰撞检测与死亡条件
  • 控制方式:按键控制蛇的移动方向;预留手势识别模块接口,可通过总线传输手势信号控制方向(开发中)
  • 得分显示:触碰死亡后屏幕显示本轮得分
SNAKE 贪吃蛇游戏效果图

▲ 《SNAKE》贪吃蛇 — 游戏实际运行效果

软硬件功能划分

🖥️ 硬件端(FPGA / Verilog)

• Cortex-M0 软核与 AHBlite 总线互联
• OLED / VGA 管脚绑定与电气接口
• 矩阵键盘扫描与中断信号生成
• 定时器模块(周期性中断)
• 蜂鸣器音乐播放器主体
• SNAKE 游戏逻辑 + VGA 驱动
• 手势识别信号接收模块

📝 软件端(Keil / C)

• 中断向量表配置与 ISR 编写
• DINO 游戏逻辑(跳跃、碰撞、计分)
• OLED 显示驱动与内容绘制
• 总线外设控制信号下发
• 蜂鸣器歌曲切换与播放控制
• 游戏难度递增算法

关键技术

FPGA Cortex-M0 ARM DesignStart AHBlite 总线 SoC 集成 Verilog Keil MDK OLED 驱动 VGA 驱动 中断控制 像素合并优化 软硬件协同 Vivado

项目成果

🏆

系统完整性验证通过 — 校内先进团队

成功实现多传感应用场景下的完整 SoC 系统功能验证:OLED 与 VGA 双屏异显、矩阵键盘中断控制 DINO 游戏、VGA 贪吃蛇游戏流畅运行、蜂鸣器音乐播放。DINO 支持难度递增机制,SNAKE 通过像素合并优化在 640×480 分辨率下流畅刷新。项目获评校内先进团队。