没有合适的资源?快使用搜索试试~ 我知道了~
首页基于FPGA做的简单弹珠游戏
资源详情
资源评论
资源推荐

弹珠游戏
弹珠游戏
1、总体设计
如图 1 所示,为本次设计的原理图,一共设计了 5 个小模块,最后利用顶层模
块实例化各小模块得到整个设计,开发平台用 vivado。
各模块简单介绍:
ip_clk:时钟分频模块:利用时钟 IP 核产生 25MHz 的时钟。
timer:VGA 驱动模块,主要产生驱动 VGA 的行时序 clk_h 和场时序 clk_v,并
在屏幕扫描像素点时读取颜色数据 data[11:0],利用 rgb[11:0]输出相应的颜色,并输
出扫描坐标点(h_site,v_site),以便后续利用。
init:初始化弹珠运动方向模块,为了游戏的多样化,随机产生一个弹珠的初始
化运动方向数据。
crash_move:碰撞反弹及动态坐标模块,根据弹珠初始化运动方向和按键数据,
实时判断弹珠和挡板的中心点的动态坐标,并进行碰撞判断、游戏结束判断。
color_data:颜色数据模块,根据当前屏幕扫描点所在位置,判断扫描点是否进
入弹珠或挡板显示范围,在不同范围内设置不同的颜色数据。
图 1 总体设计原理图
1

弹珠游戏
2、各模块详细介绍
2.1 时钟分频模块
模块图如图 2 所示,利用 IP 核产生 25MHz 时钟,方便后续利用,过程简单,
不再赘述,程序可参见附录。
图 2 ip_clk 模块原理图
2.2 VGA 驱动模块
2.2.1 VGA 驱动原理
VGA 接口:如图 3 所示,是 Nexys4™ Artix-7 FPGA 开发板的 VGA 接口图。该
接口一共 15 个针状接口,其中 1、2、3 接口分别是红、绿、蓝颜色数据接口,每个
颜色数据接口占 4bit 信号;13 接口是行时序接口,负责行扫描;14 接口是场时序接
口,负责列扫描;其它接口均为接地接口,实验中可以悬空。
2

弹珠游戏
图 3 VGA 接口图
VGA 扫描方式:如图 4 所示,VGA 驱动显示时采用逐行扫描,需要行时序和
场时序,一个行时序周期完成一行图像的扫描,一个场时序周期完成一帧图像的扫
描,一帧图像显示像素为 640
×
480,每秒显示 60 帧图像。根据图 4,显示像素 640
×
480 对应的显示时序为 800
×
521,所以时钟频率为 800
×
521
×
60,约为 25MHz。
一个行时序周期 Ts 包括同步脉冲 Tpw、显示后沿 Tbp、显示时序段 Tdisp 和显
示前沿 Tfp,它们占用的时钟周期个数分别为 96、48、640 和 16,一共是 800 个时
钟周期。场时序周期类似,只是其不同时序部分的长短是按行时序周期的个数表示
的,正如图 3“Lines”一列。
图 4 VGA 扫描时序图
3

弹珠游戏
2.2.2 VGA 驱动模块设计
模块框图见图 5。首先,利用 25MHz 时钟,产生上述的的行时序 clk_h 和场时
序 clk_v,另外还要设置一个显示使能信号 lcd_en,它只在显示时序段 Tdisp 内有效,
据此可设定出实时扫描屏幕像素点的坐标(h_cnt,v_cnt),还可以在 lcd_en 有效时
取颜色数据 data 到 rgb 中,然后显示在屏幕上。具体各信号的产生过程可参见附录
中的具体程序。
图 5 VGA 驱动模块 timer 框图
2.3 初始化弹珠运动方向模块
模块框图见图 6。为了避免弹珠一直上下或者左右运动,必须给弹珠一个斜向
的 运 动 方 向 , 为 了 游 戏 多 元 化 , 定 义 了 12 个 初 始 化 方 向 , 由
move_state[1:0]、h_move[1:0]和 v_move[1:0]共同决定,其中 move_state[1:0]表示运
动方向对弹珠行列坐标的增减影响,共有 0、1、2、3 四种状态,如图 7 所示,0 状
态 表 示 弹 珠 的 行 列 坐 标 均 会 增 加 , 记 为 0 ( + , + ) , 同 样 其 它 方 向 为
1(+,-)、2(-,+)、3(-,-)。h_move[1:0]和 v_move[1:0]指的是弹珠一次运动
的行列像素距离,用(h_move[1:0],v_move[1:0])表示,一共设了(1,1)、
(1,2)、(2,1)三种。
为了从 12 个方向中随机选一个,定义了一个计数器,计数器按照拨码开关低电
平的时间不同在 1~12 之间循环,当拨码开关高电平时,按照计数值选择一个运动方
向。具体设计过程可参见附录中的相关程序。
图 6 初始化运动方向模块框图
4
剩余17页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0