本文为2023年第七届全国大学生集成电路创新创业大赛(“集创赛”)安谋科技杯全国一等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼品等你来领!
团队介绍
参赛单位:北京理工大学
队伍名称:枫原万叶单推人
指导老师:吴琼之
参赛队员:吕澔波
全国总决赛奖项:一等奖(企业大奖)
安谋科技杯企业命题
杯赛题目:基于Arm处理器的智能游戏机设计
赛题内容:本赛题要求参赛选手基于Arm® Cortex®-M0或Cortex-M3处理器在限定的FPGA平台上构建具备可演示性的游戏机片上系统,完成一个游戏内容。在此基础上增加适当的功能以展示显示技术、人工智能、物联网和智能传感器在游戏机中的应用,要求实现的智能游戏机具有实用性、可演示性和创新性。
1.项目介绍
本项目开发了一款一体化便携式游戏机。作品在安路科技 PH1A60 FPGA 上集成了 ARM M3 DesignStart Eval IP,实现了基于Cortex-M3内核的处理器系统。通过自研三维图形处理IP核与数字信号处理-神经网络语音识别处理器,实现三维图形绘制与语音识别功能。项目使用Solidworks绘制游戏机外壳,并通过3D打印制造壳体,与自研电路板完成装配,形成一体化结构。
图1 作品实物图
2.作品工程设计
板级互联设计
本次比赛限定使用两款器件:安路EG4S20与PH1A60,其中PH1A60芯片的资源更加丰富。PH1A60是安路科技生产的FPGA芯片,今年刚刚上市,市面上板卡较少。目前,市面上常见的安路PH1A60开发板为硬木课堂出品的“大拇指”系列开发板。该板卡带有HDMI、LCD视频输出接口与PWM音频输出接口,具备TF卡、SDRAM存储功能。此款板卡能够满足大部分项目的设计需求,然而本项目为了实现三维图形显示功能,对电路结构做了特殊设计,导致使用该板卡无法实现全部功能。
本项目设计的游戏机具备三维图形显示能力。根据三维图形的绘制方法,需先乱序将图形数据写入帧缓冲,屏幕刷新时再顺序从帧缓冲中读出图形数据。因此,不仅需要保存贴图图片,还需要同时保存一帧图像的全部数据。若使用FPGA片上存储器保存,则只能实现极低分辨率的图形绘制。为了保存更多图形数据,提升游戏体验,可以使用外置存储器扩展FPGA储存容量。由于PH1A60芯片不支持DDR,可选用SDR SDRAM扩展显存容量。然而,外置SDRAM的存储带宽有限。使用LCD屏幕时,每个PCLK必须发送颜色数据。此时若SDRAM带宽不足无法取得数据,屏幕将出现显示错误。这直接制约了游戏机所能达到的最大分辨率。
为了应对三维图形绘制带来的高显存带宽,本项目自主设计了游戏机主控电路板,搭载安路科技 PH1A60 FPGA芯片,板上集成双通道SDRAM。电路系统针对离电工况设计,游戏机内置双节锂电芯及15W(1.5卢)充电电路。除此以外,电路板上还含有数字麦克风、高保真数字音频功放等功能。
本设计将FPGA直接焊接在PCB上,无需通过核心板转接。电路板走线经过阻抗匹配和等长,以确保信号完整性。
图2 使用Altium Designer绘制主控电路板
图3 主控电路板设计图
图4 主控电路板实物图
SoC系统设计
项目基于FPGA实现了SoC系统,SoC包含Cortex-M3 内核、自研数字信号处理-神经网络语音识别处理器、自研图形处理单元“兰桨图形引擎+”。SoC系统总线上还挂载了UART、GPIO等硬件外设接口。
图5 SoC系统框图
语音识别处理器设计
语音识别处理器为游戏机赋予了识别玩家语音指令的功能,玩家在游戏的过程中可通过语音与游戏交互,体验智能游戏的乐趣。
语音识别模块包含三部分:I2S数字麦克风音频输入模块、快速傅里叶变换模块以及神经网络计算模块。数字麦克风的采样频率为46875Hz.数字麦克风在获得语音信号后,会首先将数据保存在缓冲区内。数字信号处理模块每次从缓冲区内取256点音频数据,进行快速傅里叶变换。直接取样相当于对信号加矩形窗,造成频谱泄露。因此,数字信号处理模块会首先对信号加汉宁窗,以抑制频谱泄露的发生。在对信号进行加窗后,数字信号处理模块对一帧信号进行快速傅里叶变换。为了避免丢失每一帧256点数据边沿的数据变化信息,数字信号处理模块每次从输入缓冲取出的256点数据应有所重叠。在本设计中,取样步幅为128点,即取样重叠率为50%。数字信号处理模块每秒约完成366次256点FFT运算。语音信号经FFT运算后,得到音频频谱图。频谱图展示了语音信号频率随时间的变化。频谱图可作为语音信号的一种特征,区分不同种类的特征词。将频谱图输入神经网络中,经神经网络前向传播求得特征词的预测概率。
图形处理单元设计
在FPGA上实现三维图形绘制,是本项目的难点,也是游戏机的特色所在。本项目自研了三维图形绘图引擎,命名为“兰桨图形引擎+”。“兰桨”二字取自苏轼《赤壁赋》:“桂棹兮兰桨,击空明兮溯流光”。兰桨图形引擎以数学为画笔,绘制出五彩斑斓的绚丽世界。兰桨图形引擎采用了硬件-SoC-算法协同设计,使基于FPGA的三维图形渲染成为可能。
三维图形计算由Cortex-M3内核与FPGA接力完成。项目使用C++开发了计算机图形学运算库,包含矩阵计算库、MVP变换库与几何着色器库。使用FPGA实现的像素着色器基于深度流水线,提高计算并行化程度,使三维绘图得以实时运行。
在分区赛结束后,本队对图形引擎的渲染管线进行了大幅度重写,重构了SDRAM控制器IP核,像素着色器流水线级数达到超过100级。使用深度流水化设计,访存效率大幅提高,提升了图形绘制速度。FPGA的图形单元由像素着色器控制器、光栅化器、贴图SDRAM控制器、显存控制器组成。图形单元结构如下图所示:
图6 图形加速处理器结构
各部分功能如下:
像素着色器控制器:
给定三角形的屏幕坐标与贴图坐标,依次让光栅化器遍历三角形包围盒中的每个像素以求得像素的颜色。
光栅化器:
给定当前像素坐标与三角形顶点坐标、贴图UV坐标等信息,求当前像素在SDRAM中的地址。
贴图SDRAM控制器:
处理光栅化器的写入请求,读写深度缓冲,从SDRAM中取贴图颜色数据。
显存控制器:
对图形处理加速器绘制的图像进行缓存,解决绘图速度与屏幕输出速度不一致的问题。
为了加快游戏中三维模型的设计过程,本项目使用Python开发了三维模型转换工具。使用三维建模软件Blender绘制模型后,可直接由工具转换生成兰桨图形引擎支持的数据格式。
图7 模型转换工具
软件设计
本项目在Cortex-M3内核上移植了FreeRTOS嵌入式实时操作系统。FreeRTOS操作系统支持抢占式内核,可实现实时性强的多任务处理。
为了提高开发效率,增强代码可移植性,本项目开发了调用外设接口与系统功能的软件API函数。API函数结构与STM32 HAL库类似,通过调用函数可实现对外设接口的控制与初始化。
结构设计
本项目使用Solidworks软件建模设计游戏机外壳,并通过3D打印方法制作壳体。游戏机电路板外形与结构契合,提高了系统的整体性,给玩家带来更好的握持体验。
图8 使用Solidworks软件设计结构
图9 通过3D打印制作游戏机结构
游戏设计
游戏机实现了一款跑酷类游戏。绮良良是稻妻城的快递员,在送货的过程中会化作“猫猫盒”形态,在路上奔跑着前行。送货的路途中有很多阻碍,路上不时会出现障碍物:有花坛、广告牌,有时还会有小松树挡住去路。然而,有时在路上也能发现金币。让我们出发,和绮良良一起探险吧!
玩家可以使用按键控制、体感控制、语音识别三种方式操作游戏中的角色,躲避道路上的障碍物,并拾取随机掉落的金币,以获得更高游戏得分。
图10 游戏机运行游戏
参赛幕后故事
本内容经吕同学同意补充,引用安谋科技学堂文章第七届集创赛落下帷幕,安谋科技赛道作品创意无限内容。
作为本届集创赛总决赛安谋科技杯唯一一支由个人组成的队伍,吕澔波同学刚出现在答辩现场就引起了评委专家们的疑问:“只有你一个人吗?”
这支一个人的队伍,获得了本届集创赛的安谋科技杯企业大奖。然而,这份荣誉的得来并非一帆风顺。
二月底的一天,吕澔波同学在集创赛网站上看到了今年的赛题,其中安谋科技杯赛题——“基于Arm处理器的智能游戏机设计”立马抓住了他的眼球。与要求固定的命题形式不同,安谋科技杯开放的赛题设计给想象力留下了更多空间。智能游戏机,是一种怎样的形态呢?是具备新颖的交互方式,还是能够实现与众不同的游戏内容?在激动地思考了几个昼夜后,吕澔波将创意锁定在曾经自学的计算机图形学上。计算机图形学是一种使用数学算法将二维或三维图形转化为图像的学科,它是3D游戏的基础技术。目前,3D游戏的绘图算法多由GPU实现。通过FPGA运行三维图形计算,是一种新的尝试。在兴奋劲过后,吕同学很快投入到了算法的验证工作中。那时集创赛报名已接近尾声。在紧锣密鼓地开发了一周后,吕澔波终于验证了FPGA实现三维图形算法的可行性。
随着报名截止日期不断逼近,吕同学却犯了难:该找什么同学作为队友呢?集创赛赛制中,每个团队最多可由三名同学组成。三位同学互相配合,共同完成比赛作品。然而,计算机图形学算法与FPGA开发涉及不同学科方向。学习过FPGA的学生里很少有人学过计算机图形学,从零开始学习计算机图形学也并非易事。这使得项目最大的工作量无法分担。直到报名截止日期,还是没有找到合适的队友,于是他决定单枪匹马参加集创赛。
一个人参赛的后果是工作量的成倍提升。计算机图形学算法涉及大量数学运算,而在FPGA上实现三维图形绘制却少有参考案例。随着开发进度的推进,项目存在的问题也不断暴露出来:由于FPGA开发板的储存带宽不足,无法流畅绘制画面;在电脑端运行的图形学算法不能直接运行在Cortex-M3内核上,需要大幅度重写…初赛作品提交日期就在眼前,吕同学夜以继日地开发,当一种方法行不通时,就对系统进行更加底层的设计。终于,游戏机在提交日前如期完成。
就这样,经过初赛和分区赛,作品顺利晋级全国总决赛。吕澔波放弃了周末及暑假,没日没夜地泡在实验室里调试电路与程序。深夜,在一个人的实验室里,只有键盘的快速敲击声。是信念和勇气将作品带到了全国总决赛的比赛现场。
8月22日,在第七届全国大学生集成电路创新创业大赛全国总决赛颁奖典礼上,“枫原万叶单推人”这支一个人的队伍获得安谋科技杯企业大奖。主持人这样说道:“他以一个人单枪匹马,抵挡住千军万马。”回首比赛的经历,吕同学这样说:“或许这是年轻的勇气与闯劲吧。”
参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼品等你来领!