【2023集创赛】Arm杯二等奖作品:基于Arm Cortex-M3的体感节奏音乐游戏机

本文为2023年第七届全国大学生集成电路创新创业大赛("集创赛")安谋科技杯全国二等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼品等你来领!

团队介绍

参赛单位:中山大学

队伍名称:一带二

指导老师:黄以华

参赛队员:陈健俊、彭雯璐、赵宝泽

总决赛奖项:二等奖

1、项目简介

近年来,体感游戏和音乐节奏类游戏深受大家喜爱,是健身娱乐两不误的最佳选择,同时也能让对电子游戏无感的人群,依然能够享受健身的乐趣。结合当下热门的话题和游戏,本项目设计了一个智能体感节奏音乐游戏机,该游戏机是全体感的,玩家需要佩戴蓝牙运动传感器,通过手部动作进行游戏的开始、模式的选择以及执行游戏过程中的动作。

2、系统设计

本次安谋杯的题目为智能游戏机设计,从题目出发,设计一个游戏机我们需要考虑使用什么进行游戏的交互,游戏该如何显示,以及游戏的音乐如何播放,即交互、显示、音效三大部分,有了这三个部分一个游戏机才算完整。因此我们所设计的SOC系统必须考虑如何高效实现这三个部分。

在游戏的交互上,从智能角度出发,我们希望玩家能通过无线传感来实现游戏的交互,即只需要通过在屏幕前通过手部动作即可完成游戏的交互。因此我们使用了蓝牙运动传感器+蓝牙接收芯片的方案,玩家佩戴传感器,在FPGA端通过蓝牙接收芯片接收蓝牙运动传感器的数据,并对玩家的动作进行识别。此外这部分也是最能体现智能的地方,我们在内部实现了K-means聚类算法的硬件加速器用于动作识别。

对于为什么选择K-means聚类算法的原因是这样的,首先我们希望实现的是全体感,在游戏过程中的所有场景下,都只需要通过手部动作进行选择,那么就希望我们使用的动作识别算法,它具有非常高的灵活性,必须是可配置的,能够随意切换从而识别不同的动作。第二点我们的动作本质上并不复杂,以游戏的模式选择来说,我们只需要识别到玩家向左切换游戏,即手往左挥,或向右切换游戏,即手向右挥,因此我们并不需要特别高的精度,而且这两个动作实际上是很容易区分的。基于上述考量,我们就想到了K-means聚类算法,通过预先进行训练,存储不同动作识别时需要的聚类中心信息,从而能够随意切换识别不同的动作,这也使得我们能够只通过一个硬件设计多个不同游戏的动作。K-means聚类算法的硬件加速器如下图所示。

在游戏的显示上,我们必须有软硬件协同设计的思想,我们的想法是CPU通过给出一个坐标,硬件部分就在显示器的相应位置显示游戏的素材。此外我们还需要考虑游戏素材可能会发生重叠,且游戏背景和游戏素材的重叠问题等,那么这就出现了优先级的问题,因此我们还设计了素材的优先级仲裁电路。同时我们考虑到如果游戏的素材过多,如果靠CPU一个一个地去改写它们的坐标,那么肯定会影响系统的性能,这时候就需要硬件部分来解决这一问题,即提供一些批处理方法,使得CPU可以控制一批的素材。这个做法是很自然的,我们是在进行嵌入式设计的时候发现这一问题,然后再去改SOC系统的底层硬件。

在游戏的音效上,参考日常我们游玩的游戏,音效实际上应该有两种,即背景音乐和触发了特定事件的特效音乐的混叠。因此在音效的处理上,我们设计了一个音效混叠电路,其实就是两者的简单相加。为了提高音效播放的灵活性,我们还设计了相应的寄存器用于对背景音乐与特效音乐进行缩放,这样可以让特效音乐的声音比背景音乐大,反之也是可以的。音效混叠的电路设计如下图所示。

游戏的三要素至此我们已经有了充足的考量,但是从硬件具体实现上又出现了问题,主要是存储的问题。首先是音乐和游戏素材的存储,尤其是音乐,光靠板子的片上存储资源是远远不能存储一首歌,即我们必须满足游戏对存储资源容量的需求。通过SD卡就可以解决这些问题。而第二个问题就是存储读写速度的问题,我们使用HDMI进行图像传输,越高的分辨率对存储的读写速度要求也更高,SD卡的读写速度远远无法符合游戏素材的实时传输(大家可以手动计算一下吞吐量),因此我们必须使用外部的SDRAM作为显存,因为SDRAM的存取速率相对而言是足够的。基于上述两个问题的解决,我们设计了相应的DMA模块,能够在SD卡、SDRAM、片上存储之间进行数据的传输,极大地提高了灵活性,后期需要添加游戏素材,只需要把游戏素材事先写入SD卡中,再把其在SD内的地址存储在keil内调用即可。而且我们拓宽一下思维,SD卡并不一定只能存音乐和游戏素材,我们还可以写入一些音乐节拍的东西到SD卡中,CPU可以去读出这一信息来实现音游,而不需要实时处理音乐的节奏信息。

3、游戏介绍

本游戏机实现了四个游戏模式,分别为Drum Master、Tennis Master、Double Boxing、Single Boxing。游戏的流程如下图所示,所有步骤均是通过体感实现。

在Drum Master(击鼓大师)模式下,音符块会跟随音乐的节奏信息出现,玩家需要等待音符块到达目标点后进行击打,不同的音符块需要执行不同的击打动作(即左手击打与右手击打)。这个游戏我们是仿照太鼓达人这个游戏来复现的,我们设计的游戏画面如下图所示。游戏中,音符块会从右边出现,音符块有两种类型,分别对应需要用左手敲还是右手敲。此外游戏画面中还有歌曲的进度条、游戏的得分、游戏的连击得分信息。

在Tennis Master(网球大师)模式下,音符块会由5个通道根据音乐节奏随机掉落,玩家需要事先将传感器绑在腿上,在游戏中移动到对应的通道下,并挥拍(另一个传感器是绑在手上)进行相应方向的击打。如下图所示。

在Double Boxing(双人拳击)模式下,此时为双人游戏,共有三种不同的动作音符块(直拳、摆拳、上勾拳),两个玩家需要根据不同的音符块做出相应的动作。而在Single Boxing(单人拳击)模式下,共有六种不同的动作音符块(左直拳、左摆拳、左上勾拳、右直拳、右摆拳、右上勾拳),玩家需要根据不同的音符块做出相应的动作。这个游戏是放着了有氧拳击这个游戏进行复现的,游戏画面如下图所示。

不管是哪个游戏模式,最后都会有一个玩家评分的总结,该评分是根据游玩过程中玩家的连击数、击中数等因素决定的,如下图所示。

总结

我们是从三月份开始做集创赛的,真的是遇到了非常的问题,因为Arm杯实际上对基础要求是很高的,从底层的SOC搭建,到使用自己搭建的SOC系统进行软件开发,从硬件描述语言到汇编到C语言,都需要参赛选手掌握。在这个过程中,我们学到了特别多的东西,对整个SOC设计流程也有了更深刻的体会。

此外在本次比赛中,我们的底层硬件开发是使用SpinalHDL进行编写的,相比于Verilog,SpinalHDL在接口例化、参数化设计上极其灵活,能够大大减少开发周期。此外SpinalHDL并不是HLS,其本质上还是硬件描述,且内部具有丰富的库可供设计者使用,可以避免无意义的重复工作,例如总线的实现,甚至还可以自动生成寄存器文档。推荐大家学习SpinalHDL。

参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼品等你来领!

相关推荐
森G14 小时前
七、04ledc-sdk--------makefile有变化
linux·c语言·arm开发·c++·ubuntu
VekiSon17 小时前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件
AI+程序员在路上18 小时前
Nand Flash与EMMC区别及ARM开发板中的应用对比
arm开发
17(无规则自律)1 天前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
梁洪飞2 天前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm
代码游侠2 天前
学习笔记——Linux字符设备驱动
linux·运维·arm开发·嵌入式硬件·学习·架构
syseptember2 天前
Linux网络基础
linux·网络·arm开发
代码游侠3 天前
学习笔记——Linux字符设备驱动开发
linux·arm开发·驱动开发·单片机·嵌入式硬件·学习·算法
程序猿阿伟3 天前
《Apple Silicon与Windows on ARM:引擎原生构建与模拟层底层运作深度解析》
arm开发·windows
wkm9563 天前
在arm64 ubuntu系统安装Qt后编译时找不到Qt3DExtras头文件
开发语言·arm开发·qt