首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
FPGA/CPLD可编程逻辑
» 基于FPGA贪吃蛇游戏的设计
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
基于FPGA贪吃蛇游戏的设计
发短消息
加为好友
porereading
当前离线
UID
863084
帖子
7183
精华
0
积分
3592
阅读权限
90
在线时间
209 小时
注册时间
2011-11-30
最后登录
2019-8-28
论坛元老
UID
863084
1
#
打印
字体大小:
t
T
porereading
发表于 2012-4-21 09:57
|
只看该作者
基于FPGA贪吃蛇游戏的设计
实验箱
,
贪吃蛇
,
设计
更新于2012-03-05 09:57:50
spartan3A
贪吃蛇
点阵
蜂鸣器
一.设计思路
1.基于FPGA的spartan3A实验箱上设计一款贪吃蛇游戏。
2.通过8*8点阵作为显示,2个led数码管用作计数器,2个led数码管用作计分器,4个按键作为控制方向键,1个开关作为暂停键,蜂鸣器作为吃米响声已经胜利标志。
3.游戏规则如下:要求在30秒内,蛇吃掉米粒数大于或等于10就胜利,否则就失败。
4.过程设置如下:蛇长4个点,米粒随机出现在点阵上的一个点,蛇吃掉米粒后,计分器加‘1’记分,蜂鸣器并鸣叫一下。胜利的时候点阵上显示‘√’,失败的时候点阵上显示‘×’。
二.系统框图
设计目的
1.本实验是基于FPGA设计,即使用EDA技术,进一步熟悉可编程逻辑器件(FPGA)编程原理。
2.基于spartan3an板卡设计,深入理解数字电路系统设计规则。
3.程序设计是使用硬件描述语言VerilogHDL设计,随着硬件设计技术的发展,VHDL和Verilog已成为硬件描述语言的主流语言,此次可以加强对Verilog语言的理解。
4.基于XilinxISE软件平台的设计,更加熟练对于ISE系列软件设计的流程。
5.通过8*8点阵和led数码管显示,对于这2中显示的显示原理有了更清楚的认识。
设计原理
1.spartan3an板卡实验箱体系结构图如下:
2.板卡上8*8点阵显示原理:
8*8点阵led有2种,分为共阴极和共阳极。XUP板子上采用的是共阴极8*8点阵led。,8*8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置0电平,某一行置0电平,则相应的二极管就亮
点阵结构图如下:
3.led数码管显示原理:
七段数码管从内部接线上分共阳和共阴两种;如下图所示,左为共阴,右为共阳。在电路设计时应根据情况决定采用共阳或共阴,开发板上采用的是共阴的,即:低电平亮。
七段数码管结构图如下:
课程模块化设计
1.端口模块。
input clk,key,key1,key2,key3,key4;
Clk是系统时钟,其频率为66.67MHZ。Key为暂停键,key1,key2,key3,key4是控制上下左右四个方向的按键。
output col,row,led,led_kongzhi,buzzer;
Col和row控制点阵的行和列,led和led_kongzhi控制4个led数码管,buzzer控制蜂鸣器。
2.分频模块
分频器:因为原有低频时钟为66.67MHZ。其中,点阵显示扫描模块和数码管显示模块以不同的时钟工作,贪食蛇的游戏程设定时钟周期大约为1s来移动运行的。本次实验中共设置了3个时钟clk1,clk2,clk3.clk1是用来控制时间的;clk2是用来控制显示的;clk3使用来控制移动的。
3.游戏模块
(1)游戏初始化:
clk1=0;score=0;dir=2'b11;count2=0;count3=30;
开始时,蛇身以及米粒的位置固定,并且给一些计数器初始值,进行游戏的初始化。
(2)计数器计数:由2个led数码管组成的计数器进行倒计时由30s逐步减到0s。
(3)计分器计分:由2个led数码管组成的计分器,在蛇每次吃完米粒后进行积分,吃完10个米粒则完成。
(4)蛇移动的模块:蛇的移动由4个方向按键控制。蛇身长4个单位点。定义了一个4为寄存器数组,移动过程中,低位一次将值传给高位,最低位的值由方向键来控制取得。
4.显示模块
(1)8*8点阵显示:
通过定义一个寄存器数组,在设计一个
循环扫描,则可以循环显示出5个点。
case (snake_x[count1])
3'b000: rown<=8'b01111111;
3'b001: rown<=8'b10111111;
3'b010: rown<=8'b11011111;
3'b011: rown<=8'b11101111;
3'b100: rown<=8'b11110111;
3'b101: rown<=8'b11111011;
3'b110: rown<=8'b11111101;
3'b111: rown<=8'b11111110;
default: rown<=8'b11111111;
Endcase
case (snake_y[count1])
3'b000: coln<=8'b01111111;
3'b001: coln<=8'b10111111;
3'b010: coln<=8'b11011111;
3'b011: coln<=8'b11101111;
3'b100: coln<=8'b11110111;
3'b101: coln<=8'b11111011;
3'b110: coln<=8'b11111101;
3'b111: coln<=8'b11111110;
default: coln<=8'b11111111;
Endcase
led数码管显示:
通过定义一个8位寄存器数组来显示数字和积分。主要在于循环控制led_kongzhi加上不同的分频器则可以显示出不同的数字。其主要思想如下:
always @(posedge clk2) //4 ge 8 shuzixianshiqi xianshi
Begin
if(count2==3)
count2<=0;
else count2<=count2+1;
case (count2)
2'b00:begin
led_kongzhi<=4'b1110;
led<=seven[0];
end
2'b01:begin
led_kongzhi<=4'b1101;
led<=seven[1];
end
2'b10:begin
led_kongzhi<=4'b1011;
led<=seven[2];
end
2'b11:begin
led_kongzhi<=4'b0111;
led<=seven[3];
end
endcase
End
5.引脚配置
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议