首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于FPGA“乒乓球比赛游戏机”的设计

基于FPGA“乒乓球比赛游戏机”的设计

可编程逻辑器件FPGA以其开发周期短、成本低、功耗低、可靠性高等优势,广泛应用于通信、航空、医疗等领域,近年来在消费电子领域中的应用也日渐增加。为进一步挖掘FPGA在家庭娱乐如游戏机开发与应用中的巨大商机,介绍了一款以Altera公司FP-GA芯片为控制核心,附加少量外围电路组成的乒乓球比赛游戏机。整个系统设计模块划分清晰:包括裁判端、选手端、控制端、显示端及模拟乒乓球台;功能齐全:包括发球权控制、犯规提示、局数比分显示等,模拟实际乒乓球比赛相似程度高。采用了VHDL语言编程实现,在QuartusⅡ8.1集成环境下进行了模拟仿真,结果表明在设定的比赛规则下,游戏机运行正常,通过进一步优化可将其商品化,推入市场。  1 系统组成
  乒乓球比赛游戏机的组成如图1所示。比赛规则约定:五局三胜;11分一局;裁判发出比赛开始信号,触发FPGA内部随机数发生器模块产生首次发球权方;比赛进行中,选手连续两次获得发球权后,发球权交予对方,如未获发球权方发球,裁判端犯规音响电路鸣响;13个LED排列成行模拟乒乓球台;点亮的LED模拟乒乓球,受FPGA控制从左到右或从右到左移动;比赛选手通过按钮输入模拟击球信号,实现LED移位方向的控制;若发亮的LED运动在球台中点至对方终点之间时,对方未能及时按下击球按钮使其向相反方向移动,即失去一分。

  2 功能模块设计
  图1中,基于FPGA设计的控制端为整个系统的核心,其内部主要由简易随机数发生器、发球权控制器、乒乓球位置控制器、甲乙方计分控制器、犯规音响控制器等模块组成。整个控制端采用模块化设计,先用VHDL语言编写功能模块,然后用顶层原理图将各功能模块连接起来。设计的难点在于协调各模块工作,严格遵守各信号间时序关系。本系统采用1 kHz系统时钟。
  2.1 简易随机数发生器
  比赛首次发球权由随机数发生器产生的数据决定,其随机性要求不严,因此,采用非常简单的模式产生,即一旦FPGA上电,系统时钟百分频产生一方波信号square,当裁判闭合开始比赛开关产生start信号上升沿时,读取此时square信号值作为随机数发生器输出randq。模块仿真如图2所示,结果满足设计要求。此模块设计时保证了square信号周期应远大于start信号上升沿建立时间,保证随机数据的正确读取。
[img][/img]
  2.2 发球权控制器
  发球权控制器的控制过程为:如果按下复位按钮,发球权数码管显示8,否则,开始比赛开关闭合时,显示随机数发生器的值(0或1,0代表甲方、1代表乙方)。而在比赛中,为遵守发球权交换规则,设计甲乙双方计分器总和信号sum_sc是不为0的偶数时(即计分总和最低位sum_sc0下降沿到来时),发球权数码管显示由0变为1或由1变为0。
  此模块设计中,发球权数码管的信号控制受多个时钟的控制,即开始比赛开关start和计分值sum_sc0信号,这在VHDL编程语言中无法用一个进程实现,必须将两个信号组合成一个时钟信号,并统一两个时钟的触发沿。因此最佳时钟触发方式如图3所示的fqq_en信号。为满足这种时序要求,借助计分总和次低位sum_sc1信号设计entity sum_sc_mod2,由于start和sum_sc1的频率都远低于系统时钟信号clk频率,则可借助clk高频信号捕捉其边沿产生新的时钟信号fqq_en,并产生其计数值,仿真波形如图4(a)所示。为保证发球权数码管显示正确,设计entitv led_fqq_ctl在fqq_en下降沿时,根据其计数值产生相应的数码管输出信号led_fqq,仿真波形如图4(b)所示。


  发球权控制器的VHDL核心程序如下:
返回列表