<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 科伟奇电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=539 </link><title>基于FPGA“乒乓球比赛游戏机”的设计</title><author>行者</author><pubDate>2010/1/11 12:03:35</pubDate><description><![CDATA[可编程逻辑器件<a style="color: blue; text-decoration: underline" title="FPGA" href="http://article.ednchina.com/word/264590.aspx">FPGA</a>以其开发周期短、成本低、功耗低、可靠性高等优势，广泛应用于通信、航空、医疗等领域，近年来在消费电子领域中的应用也日渐增加。为进一步挖掘FPGA在家庭娱乐如游戏机开发与应用中的巨大商机，介绍了一款以Altera公司FP-GA芯片为控制核心，附加少量外围电路组成的<a style="color: blue; text-decoration: underline" title="乒乓球" href="http://article.ednchina.com/word/264592.aspx">乒乓球</a>比赛游戏机。整个系统设计模块划分清晰：包括裁判端、选手端、控制端、显示端及<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr93" jquery1263182554445="45">模拟</nobr>乒乓球台；功能齐全：包括发球权控制、犯规提示、局数比分显示等，模拟实际乒乓球比赛相似程度高。采用了VHDL语言编程实现，在<a style="color: blue; text-decoration: underline" title="Quartus" href="http://article.ednchina.com/word/264591.aspx">Quartus</a>Ⅱ8．1集成环境下进行了模拟仿真，结果表明在设定的比赛规则下，游戏机运行正常，通过进一步优化可将其商品化，推入市场。
<p>　　<strong>1 系统组成</strong></p>
<p>　　乒乓球比赛游戏机的组成如图1所示。比赛规则约定：五局三胜；11分一局；裁判发出比赛开始信号，触发FPGA内部随机数发生器模块产生首次发球权方；比赛进行中，选手连续两次获得发球权后，发球权交予对方，如未获发球权方发球，裁判端犯规音响电路鸣响；13个LED排列成行模拟乒乓球台；点亮的LED模拟乒乓球，受FPGA控制从左到右或从右到左移动；比赛选手通过按钮输入模拟击球信号，实现LED移位方向的控制；若发亮的LED运动在球台中点至对方终点之间时，对方未能及时按下击球按钮使其向相反方向移动，即失去一分。</p>
<p align="center"><img border="0" hspace="0" alt="乒乓球比赛游戏机的组成" src="http://pagesadmin.ednchina.com/images/article/fffe0512-dc9a-4505-a7f2-2c982ca3b4bd/1.jpg" width="429" height="281" /></p>
<p>　　<strong>2 功能模块设计</strong></p>
<p>　　图1中，基于FPGA设计的控制端为整个系统的核心，其内部主要由简易随机数发生器、发球权控制器、乒乓球位置控制器、甲乙方计分控制器、犯规音响控制器等模块组成。整个控制端采用模块化设计，先用VHDL语言编写功能模块，然后用顶层原理图将各功能模块连接起来。设计的难点在于协调各模块工作，严格遵守各信号间时序关系。本系统采用1 kHz系统时钟。</p>
<p>　　<strong>2．1 简易随机数发生器</strong></p>
<p>　　比赛首次发球权由随机数发生器产生的数据决定，其随机性要求不严，因此，采用非常简单的模式产生，即一旦FPGA上电，系统时钟百分频产生一方波信号square，当裁判闭合开始比赛开关产生start信号上升沿时，读取此时square信号值作为随机数发生器输出randq。模块仿真如图2所示，结果满足设计要求。此模块设计时保证了square信号周期应远大于start信号上升沿建立时间，保证随机数据的正确读取。</p>
<p align="center"><img border="0" hspace="0" alt="模块仿真" src="http://pagesadmin.ednchina.com/images/article/fffe0512-dc9a-4505-a7f2-2c982ca3b4bd/2.jpg" width="445" height="171" /></p>
<p>　　<strong>2．2 发球权控制器</strong></p>
<p>　　发球权控制器的控制过程为：如果按下复位按钮，发球权数码管显示8，否则，开始比赛开关闭合时，显示随机数发生器的值(0或1，0代表甲方、1代表乙方)。而在比赛中，为遵守发球权交换规则，设计甲乙双方计分器总和信号sum_sc是不为0的偶数时(即计分总和最低位sum_sc0下降沿到来时)，发球权数码管显示由0变为1或由1变为0。</p>
<p>　　此模块设计中，发球权数码管的信号控制受多个时钟的控制，即开始比赛开关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)所示。</p>
<p align="center"><img border="0" hspace="0" alt="最佳时钟触发方式" src="http://pagesadmin.ednchina.com/images/article/fffe0512-dc9a-4505-a7f2-2c982ca3b4bd/3.jpg" width="413" height="212" /></p>
<p align="center"><img border="0" hspace="0" alt="仿真波形" src="http://pagesadmin.ednchina.com/images/article/fffe0512-dc9a-4505-a7f2-2c982ca3b4bd/4.jpg" width="445" height="364" /></p>
<p>　　发球权控制器的VHDL核心程序如下：</p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/fffe0512-dc9a-4505-a7f2-2c982ca3b4bd/01.jpg" width="442" height="624" /><strong>2．3 </strong><a style="color: blue; text-decoration: underline" title="乒乓球" href="http://article.ednchina.com/word/264592.aspx"><strong>乒乓球</strong></a><strong>位置控制、甲乙计分、犯规音响控制</strong></p>
<p>　　乒乓球位置控制电路为<a style="color: blue; text-decoration: underline" title="FPGA" href="http://article.ednchina.com/word/264590.aspx">FPGA</a>控制端的核心，依据比赛规则，采用了Mealy型状态机来实现，大大降低了设计难度。状态机共定义了7个状态，各状态定义如表1所示，状态转换如图5所示，转换条件如表2所示，具体程序如下。</p>
<p align="center"><img border="0" hspace="0" alt="各状态定义" src="http://pagesadmin.ednchina.com/images/article/fffe0512-dc9a-4505-a7f2-2c982ca3b4bd/02.jpg" width="409" height="931" /></p>
<p align="center"><img border="0" hspace="0" alt="状态转换" src="http://pagesadmin.ednchina.com/images/article/fffe0512-dc9a-4505-a7f2-2c982ca3b4bd/5.jpg" width="415" height="161" /></p>
<p>　　<strong>3 顶层模块仿真测试</strong></p>
<p>　　由于篇幅限制，本系统中的分频器、译码器等常用模块的设计就不再此赘述，最终顶层原理图设计如图6所示，仿真波形如图7所示，分析波形可知，图中开始比赛信号产生后，首次发球权方为乙方，甲方发球造成犯规音响电路鸣响，即speaker信号为高电平，然后乙方发球，乒乓球依次移位，甲方接球成功后乙方未接球成功，甲方得分，cnta信号为&ldquo;0110000&rdquo;，注意，此处输出为驱动数码管输出信号，代表数字&ldquo;1&rdquo;。通过仿真可知，该系统设计满足游戏机比赛规则要求。</p>
<p align="center"><img border="0" hspace="0" alt="最终顶层原理图设计" src="http://pagesadmin.ednchina.com/images/article/fffe0512-dc9a-4505-a7f2-2c982ca3b4bd/6.jpg" width="504" height="209" /></p>
<p align="center"><img border="0" hspace="0" alt="仿真波形" src="http://pagesadmin.ednchina.com/images/article/fffe0512-dc9a-4505-a7f2-2c982ca3b4bd/7.jpg" width="424" height="290" /></p>
<p>　　<strong>4 结语</strong></p>
<p>　　采用VHDL语言编程，基于FPGA成功设计了一款乒乓球比赛游戏机，通过仿真验证可知，结果满足设计需求，系统具有发球权控制、自动计分、犯规提示等多种功能，能有效<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr93" jquery1263182594158="37">模拟</nobr>实际乒乓球比赛。该系统进一步改进思路为：改用人体感应<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr77" jquery1263182594158="38">传感器</nobr>来采集击球信号，采用FPGA产生视频信号传送到电视机或监视器，更直观地展示乒乓球运动轨迹，从而真正实现人机互动，优化虚拟效果。</p>]]></description></item></channel></rss>