俄罗斯方块游戏设计原理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

俄罗斯方块游戏是VHDL 应用于复杂数字系统的一个经典设计,本章将详细介绍该游戏的设计原理和设计方法。其中包括系统构成、系统设计原理和系统各个模块的实现方法。

8.1 系统结构原理

8.1.1 系统端口

图8.1给出了系统的顶层设计符号,其端口包括:

1)kc :PS/2键盘时钟输入; 2)kd :PS/2键盘数据输入; 3)mclk :系统主时钟输入;

4)blue :蓝色信号输出到VGA 显示器接口; 5)grn :绿色信号输出到VGA 显示器接口; 6)red :红色信号输出到VGA 显示器接口; 7)hs :行扫描信号到VGA 显示器接口;

8)vs :列扫描信号到VGA 显示器接口

要开始一个游戏按F2键,但是当游戏正在运行时,不允许按键F2,如果要开始一个新的游戏必须停止它或者按键F1。该游戏有5个不同的目标,可以对它进行旋转和左移或右移。

该游戏有4种不同的速度,当分数增加的时候,速度也随之增加,按键S 将增加速度,直到目标到达最底部。速度和分数的关系是: 1)当分数<100,速度等级为1;

2)当分数在(100,200)之间时,速度等级为2; 3)当分数在(200,300)之间时,速度等级为3; 4)当分数在>300时,速度等级为4;

如图8.2所示,有两种不同的目标:右边是文本框,左边是俄罗斯方块。使用两个BRAM 存储数据。文本框中包含了32x16=512个字符,每个字符包含8比特,所以需要使用BRAM 。在俄罗斯方块部分也使用了一个BRAM ,但其实这不是必须的,因为这增加了gamecontrol 模块的设计复杂度(只能在一个时钟周期访问一个BRAM )。俄罗斯方块有10x20个块组成,每个块保存了4位(第1位用于说明是否有其它东西,其它3位保持着颜色)。

在屏幕上画像素需要25MHz 时钟,在设计中使用3线来传送颜色。这也就是说,只能画出8种颜色(红,绿,蓝,黄,黑,白,浅绿和紫红)。但其实更仔细的观察可以发现国产生了更多的颜色。为了产生更多的颜色使用了50MHz 时钟,然后分频产生25MHz ,12.5MHz ,6.25MHz 。并且使用这些时钟产生不同的PWM 信号(也可以产生50MHz 时钟,使用这些PWM ,可以绘制出4913种不同的颜色。

图8.1 顶层设计图

8.1.2 系统模块组成

图8.3给出了该设计的模块结构图。该设计由下面模块组成:键盘输入模块,游戏控制模块,图像显示模块,文字显示模块,存储单元,复用单元和VGA控制模块组成。其中图像显示模块和文字显示模块复用VGA控制模块。游戏控制模块,图像显示模块和文字显示模块通过存储单元交换数据。

图8.3 系统结构组成

图8.4给出了系统的模块连接关系,其各个模块的主要功能有:

1)keyboardVhdl:键盘接收模块,读取键盘发送的扫描码;

2)kbfilter:键盘识别模块,识别扫描码是否为指定按键;

3)gamecontrol:游戏控制模块,程序主控单元,通过状态机控制;

4)score:得分统计模块,得分统计和速度控制;

5)RAMB4_S4_S4:双口RAM模块,包含游戏界面图像块的色彩和位置信息;

6)RAMB4_S8_S8:双口RAM模块,包含游戏文字界面;

7)text_display:文字显示模块,读双口RAM只能显示的文本信息信息生成像素;

8)mux:复用选择单元,选择平面图像显示还是文本显示;

9)VGA:VGA模块,生成VGA接口显示控制信号;

图8.4 系统模块详细结构

8.2 系统各模块设计

8.2.1 键盘接口模块设计

这个模块读取键盘发送的扫描码. 该模块实现键盘到主设备的单向通信,并由启动位和停止位控制。图8.5给出了PS/2键盘和主设备通信的时序图。图8.6给出了键盘接口符号描述。表8.1给出键盘接口模块的信号定义。

表8.1 键盘接口信号定义

该模块的设计使用了shiftCounter 寄存器,用于对来自键盘的时钟计数处理,当计数器计满11个时钟时,就可以读取键盘的扫描码。

当读取扫描码时,“an ”信号的输出将由‘0’变到‘1’,或者从‘1’变到‘0’,与这个模块连接的元件将知道扫描码已经被读取。”an ”信号很象写使能信号,中断或警告信号。

8.2.2 键盘识别模块设计

该模块为键盘扫描码识别模块。确定是否为程序指定的控制键,并进行前向控制。表8.2给出了键盘识别模块接口信号定义。图8.7给出了键盘识别模块的符号。该模块用于选择所需要的扫描码,过滤掉无效的扫描码。该模块包含了3种不同类型的过滤器: 1)只读break 键;

2)只读第一个make 键,在该键释放前,不读取其它键; 3)读取按键的make 键,在该键释放前,不读取其它键;

在这个设计中,第一个过滤器被激活。有一个内部的信号和“an ”信号相比较,当比较结果不同时,表示一个扫描码被读取,然后将内部信号量,修改成和输入一样的值。

if (an /= ann) then ann <= not ann;

信号 模式 功能描述 clk 输入 主时钟输入

kc 输入 PS/2键盘时钟 kd 输入 PS/2键盘数据 rst 输入 异步复位 sseg(7:0) 输出 扫描码 an

输出

报警

图8.5 键盘接口时序

如果扫描码送给下一个模块时,ssegout 将得到”segin ”的值,”send ”输出将该改变其值,

从‘0’到‘1’,或者从‘1’到‘0’。

表8.2 键盘识别模块接口信号定义

8.2.3 VGA 接口模块设计

该模块为VGA 显示模块,该模块提供VGA 接口控制信号。将文字和图像信息显示在VGA 显示器上。图8.8给出了VGA 接口模块符号。表8.3给出了VGA 接口模块信号定义。

表8.3 VGA 接口模块信号定义

如图8.9,当两

个计数器在矩形区域内,”text ”和”vid ”信号将被激活。这个模块也用于产

信号 模式 功能描述 mclk 输入 主时钟输入 an 输入 报警输入 ssegin(7:0) 输入 扫描码 ssegout(7:0)

输出 扫描码过滤 send

输出

报警输出

信号 模式 功能描述 mclk 输入 主时钟输入 pix(2:0) 输入 像素颜色 clkd 输出 时钟– 25MHz blu 输出 VGA 蓝色信号 grn 输出 VGA 绿色信号 hs 输出 VGA 行同步信号 red 输出 VGA 红色信号 vs 输出 VGA 同步信号 vid 输出 激活tetrix 显示元件 text

输出 激活文本显示元件

图8.8 VGA 接口模块符号

0,0

hc

800,0

vc

0,521

800,521

图8.9 显示窗口坐标

相关文档
最新文档