• 【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集创赛作品扩大影响力,更有丰富电子礼品等你来领!

  • 相关阅读:
    Electron使用Preload Scripts实现主进程和渲染进程之间通信
    C++运算符重载【加号、左移、递增、指针、赋值、中括号、关系、函数调用】,统统载了
    思维题目专练
    springboot jpa手动事务
    R语言Meta分析核心技术
    css强制一行,自动裁剪文字,用省略号结尾。
    79. 单词搜索
    【C++】类和对象中的static和const
    js 监听a标签跳转页面,并携带自定义参数
    【HMS Core】School Diary应用集成多个HMS Core服务,更好的体验华为生态系统
  • 原文地址:https://blog.csdn.net/weixin_47569031/article/details/132870890