项目背景及可行性分析
项目名称:手舞足蹈跳舞机
项目的主要内容:在游戏厅里转一圈不难发现,总会有几个少男少女在跳舞机前手舞足蹈,四周的观众围得水泄不通。劲爆的音乐,富有青春气息的舞姿使跳舞机游戏极其拉风,也正因为如此,跳舞机市场前景非常看好。
我们的目标就是设计一个基于FPGA的跳舞机。伴随着音乐的节奏,跳舞机的LCD显示器上会出现一个个方向不同的箭头符号,引导玩家完成相应的舞蹈动作,玩家可以在跳舞机上尽情地手舞足蹈,而跳舞机的压力传感器和光传感器会忠实地捕捉玩家的动作,转换器将处理过后的动作信息传递给CPU,CPU根据游戏规则,公正地给玩家评分,LCD则会公布玩家的得分情况。在游戏进行的过程中,LED会随着音乐节奏的快慢不停地调整发光节奏,竭力为玩家营造出绚丽的游戏氛围;扬声器也会不停地为玩家呐喊助威,尤其是玩家表现出色时,扬声器会不遗余力地为玩家喝彩。
首先我们要设计一个soc,片上系统的某些功能模块可以使用预定制模块IP核,例如MicroBlaze(我们选择它作为CPU)就可以使用Xilinx公司提供的IP核来实现;当然,我们的系统中也存在独立设计的系统结构,例如PPU(图像处理器)。该系统脱离了pc,这样大大降低了系统的成本与功耗,减小了体积,而且软硬件的更新比较方便。除了完成硬件设计之外,我们还有大量工作需要在soc上用软件完成,例如移植操作系统、编写游戏软件框架和跳舞机游戏软件等。
进展情况:现在处于模块设计阶段
项目关键技术及创新点的论述
要处理大量的图像文件,其中,图层间的α运算、图像的卷动等图形图像运算会频繁发生,如果这些运算都交给CPU处理,就会占用大量的CPU资源,会破坏图像显示的连贯性。我们引入PPU,用于将上述繁重的计算任务从CPU分离出来,从而提高系统的性能。
声像同步也是项目的关键技术之一:SoC集成的Mp3 Decoder将游戏音乐文件解码为PCM流,PCM流传输到两块同样大小的缓冲区(暂且假设每块缓冲区的大小为1K),如下图所示,这两块缓冲区相当于构成一个循环队列,一块缓冲区的PCM流文件播放完以后,接着播放另一个缓冲区中的流文件。在切换缓冲区时,会产生中断,在这个中断周期,系统渲染新的图像帧,从而实现声像像同步。
游戏开发Framework:这是在该硬件驱动上实现的一组API,它是独立于跳舞机游戏的,提供游戏开发的常用接口,规定了游戏开发的模型。
技术成熟性和可靠性论述:
目前市场上有很多基于PC的跳舞机的设计案例可以参考(当中的PPU部件等关键功能模块可以参考任天堂公司红白机的设计),技术已经相当成熟。
项目实施方案
方案基本功能框图及描述
硬件功能框图及描述
Compact Flash(CF) Card:
CF卡扮演只读存储器的角色,用于存储游戏文件;游戏文件分为三个部分:第一部分是控制程序,这一部分供CPU(MicroBlaze)执行;第二部分是位图文件,这一部分由PPU处理;第三部分是音乐文件,其中MP3格式的文件交给图中所示的MP3 Decoder处理。
之所以使用CF卡作为ROM,是因为CF卡可以很方便地从系统中取出,并与PC兼容,这样容易实现游戏软件的更新。
PPU(Physics Processing Unit):
用于图像显示加速。在程序运行过程中,有大量位图文件需要显示,考虑到处理这些位图文件会给CPU带来沉重的负担,我们引入PPU,用来实现图像显示加速功能。
LCD显示的图像由三个图层构成,它们分别是背景层、卡通层与前景层。
背景层用于显示游戏背景图像,背景图像有时需要纵向移动。某些游戏为了纵向卷动显示图像,是通过反复改写显示映射单元的内容来实现的,这种办法处理速度太慢。为了更快地实现背景图像的纵向移动,我们采用移动显示窗口的办法。移动显示窗口的大小与LCD的大小相当(1024×768);背景图像文件在CF卡中以矩阵的形式连续存储,每行也包含1024个像素。因此如果需要画面移动,只需将显示窗口向相反的方向移动即可。这样每次显示画面移动一行,显示窗口仅需要重新绘制一行,可以大幅度提高背景图像的显示速度,降低cpu占用。
卡通层用于显示游戏中的提示动作,提示动作提示玩家该在什么时间完成什么样的游戏动作(例如踩下向前按钮、伸出左手等)。CPU将提示动作的种类、显示时间、显示坐标发送给PPU,PPU则在规定的时间,将规定种类的提示动作显示在规定的坐标处。
前景层显示玩家游戏动作的情况以及最终的得分情况。根据玩家完成游戏动作的时间与游戏规定时间的比较结果,可将完成情况分为不同的级别,每种级别对应不同的前景层位图文件。
值得注意的是显示过程中,层与层之间会出现α运算。所有的α运算均由PPU处理。
MP3 Decoder/频谱分析功能部件
游戏中的声音以mp3的格式储存在CF卡中,cpu从Flash中读取mp3文件,送给MP3 Decoder处理,将它转化成PCM格式的数据,再将PCM流转换成模拟信号,最终通过扬声器播放出来。
游戏中的声音包括两种,一种是游戏背景音乐,存储格式是MP3格式,由MP3 Decoder处理,从游戏开始就连续播放,一直到游戏结束为止;另一种是游戏提示音,提示音持续时间较短,通常只有几秒钟,存储格式为WAV格式,不需要解码,不同提示音文件分别对应着玩家完成游戏动作的情况或得分情况,CPU通过判断玩家完成动作情况或得分情况控制播放对应的提示音文件。
要想营造绚丽、欢快的游戏氛围,变幻多端的灯光效果是必不可少的,为了模拟这种效果,我们设计了频谱分析模块。该模块从MP3 Decoder接收PCM流文件,通过对PCM文件进行频谱分析,得知游戏节奏的快慢,并控制LED指示灯根据游戏的节奏按照不同的频率进行显示。
压力传感器/光传感器
压力传感器和光传感器分别接收玩家脚部与手部的动作作为原始输入,每个传感器对应一个寄存器,该寄存器用于记录输入状态。游戏中读取输入的操作全部在中断周期中完成,游戏中断时,如果传感器有输入,那么对应的寄存器值被置为1,之后CPU读各寄存器的状态值,依次判断玩家的输入是否符合游戏要求,并确定游戏下一步的显示图像、播放声音等操作。在中断的最后阶段还要对各状态寄存器进行复位。
DDR SDRAM Controller
UART
用于调试。
软件功能框图及描述
除了完成硬件的设计之外,我们还要在soc之上完成设计游戏软件等工作。下图为跳舞机游戏流程图。
B0:游戏尚未开始时,该模块完成标题画面的绘制、控制标题音乐的演奏;
B1:游戏尚未开始时,读中断周期的Start键值,如果Start键被按下,则进入C模块;
B2:游戏尚未开始时,读中断周期的压力传感器值,并通过判断压力传感器的值,选择游戏的音乐种类;
D0:游戏进行过程中,读中断周期的Start键值,如果Start键被按下,则暂停游戏,当Start键再次被按下时,恢复游戏;
D1:游戏进行过程中,完成背景层、卡通层的绘制,并控制背景音乐的播放;
D2:游戏进行过程中,在中断周期读各压力传感器的值,判断游戏动作的完成情况,根据完成情况的不同,计算玩家的得分,控制播放相应的游戏提示音、绘制对应的前景层图像;
E0,E1,E2,E3分别辅助D层模块完成各自的功能,其具体功能如图所示。
需要的开发平台
实现本方案所需要的基本功能、功能、接口:
MicroBlaze软核
DDR SDRAM
Compact Flash Controller
RS-232串行接口
XSGA Output
AC97 Audio CODEC
CPU Trace and Debug Port
USB 2 Programming Interface
所需要的目标FPGA开发平台,简述为什么需要此平台:
在游戏运行过程中,图像处理和声音处理比较耗费计算资源,由于我们分别设计了PPU和MP3 Decoder对这两部分功能进行处理,大大减轻了CPU的负担,因此MicroBlaze就可以满足该系统的需求。
为了实现设计方案中描述的各项功能,我们需要CF Controller、RS-232串口等接口。
综上分析各种需求,我们选择使用Xilinx Virtex-II pro开发板。在设计过程中,需要使用Virtex-II pro开发板,一旦设计完成,如果需要投入生产, Spartan芯片系列就能满足要求。
方案实施过程中需要开发的模块
MP3 Decoder
频谱分析功能模块
PPU
传感器转换器
各软件功能模块
上述模块功能说明在功能框图说明中已经阐述
系统最终要达到的性能指标
最终的跳舞机系统能够准确地判断玩家的动作,并可以正确并流畅地显示图像、播放音乐。
需要的其它资源
设计输入输出功能子板
子板功能描述、接口说明、时间、方式
测试设备
列出在方案实施过程中所需要的测试设备(万用表、示波器、频谱仪、逻辑分析仪等)
仿真、开发工具
EDK用于SoC软件的开发
Synplify用于硬件综合
ModelSim用于系统仿真