999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于FPGA“乒乓球比賽游戲機(jī)”的設(shè)計(jì)

2010-01-20 01:44:00曹莉凌劉雨青
現(xiàn)代電子技術(shù) 2009年21期

曹莉凌 劉雨青

摘 要:FPGA的低成本正推動(dòng)其在消費(fèi)電子產(chǎn)品中的應(yīng)用,為進(jìn)一步挖掘其在娛樂產(chǎn)品應(yīng)用中的巨大商機(jī),基于Altera公司FPGA,在Quartus Ⅱ8.1環(huán)境下,運(yùn)用VHDL語言、采用有限狀態(tài)機(jī)等設(shè)計(jì)方法設(shè)計(jì)了一款乒乓球比賽游戲機(jī)。介紹了該游戲機(jī)系統(tǒng)功能模塊劃分及關(guān)鍵模塊具體設(shè)計(jì)方案,給出設(shè)計(jì)和調(diào)試中遇到的問題及解決途徑,并進(jìn)行了仿真測試。仿真結(jié)果表明,該乒乓球游戲機(jī)工作正常,具有發(fā)球權(quán)控制、自動(dòng)計(jì)分、犯規(guī)提示等多種功能,能有效模擬實(shí)際乒乓球比賽。

關(guān)鍵詞:乒乓球比賽游戲機(jī);FPGA;VHDL;狀態(tài)機(jī)

中圖分類號(hào):TN40 文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1004-373X(2009)21-131-04

Design of Table Tennis Game Player Based on FPGA

CAO Liling,LIU Yuqing

(College of Engineering Science and Technology,Shanghai Ocean University,Shanghai,201306,China)

Abstract:Low-cost of FPGA has promoted its applications in consumer electronic products.To further grasp its enormous business opportunities in entertainment products,a table tennis game player has been designed which is based on Altera Corporation FPGA,using Quartus Ⅱ8.1 and VHDL language,adopting some design methods such as the finite state machine,the functional modules division of the game player and the specific design schemes of main modules are introduced,problems and appropriate solutions during designing and debugging are summaried,the simulation and tests are given,the results show that the design of such table tennis game player is correct,it gets many functions such as control of right to serve,automatic counting and signal of illegality so that it can simulate the actual table tennis effectively.

Keywords:table tennis game player;FPGA;VHDL;state machine

可編程邏輯器件FPGA以其開發(fā)周期短、成本低、功耗低、可靠性高等優(yōu)勢,廣泛應(yīng)用于通信、航空、醫(yī)療等領(lǐng)域[1-3],近年來在消費(fèi)電子領(lǐng)域[4]中的應(yīng)用也日漸增加。為進(jìn)一步挖掘FPGA在家庭娛樂如游戲機(jī)開發(fā)與應(yīng)用中的巨大商機(jī),介紹了一款以Altera公司FPGA芯片為控制核心,附加少量外圍電路組成的乒乓球比賽游戲機(jī)[5]。整個(gè)系統(tǒng)設(shè)計(jì)模塊劃分清晰:包括裁判端、選手端、控制端、顯示端及模擬乒乓球臺(tái);功能齊全:包括發(fā)球權(quán)控制、犯規(guī)提示、局?jǐn)?shù)比分顯示等,模擬實(shí)際乒乓球比賽相似程度高。采用了VHDL[6,7]語言編程實(shí)現(xiàn),在Quartus Ⅱ8.1[8,9]集成環(huán)境下進(jìn)行了模擬仿真,結(jié)果表明在設(shè)定的比賽規(guī)則下,游戲機(jī)運(yùn)行正常,通過進(jìn)一步優(yōu)化可將其商品化,推入市場。

1 系統(tǒng)組成

乒乓球比賽游戲機(jī)的組成如圖1所示。比賽規(guī)則約定:五局三勝;11分一局;裁判發(fā)出比賽開始信號(hào),觸發(fā)FPGA內(nèi)部隨機(jī)數(shù)發(fā)生器模塊產(chǎn)生首次發(fā)球權(quán)方;比賽進(jìn)行中,選手連續(xù)兩次獲得發(fā)球權(quán)后,發(fā)球權(quán)交予對方,如未獲發(fā)球權(quán)方發(fā)球,裁判端犯規(guī)音響電路鳴響;13個(gè)LED排列成行模擬乒乓球臺(tái);點(diǎn)亮的LED模擬乒乓球,受FPGA控制從左到右或從右到左移動(dòng);比賽選手通過按鈕輸入模擬擊球信號(hào),實(shí)現(xiàn)LED移位方向的控制;若發(fā)亮的LED運(yùn)動(dòng)在球臺(tái)中點(diǎn)至對方終點(diǎn)之間時(shí),對方未能及時(shí)按下?lián)羟虬粹o使其向相反方向移動(dòng),即失去一分。

圖1 基于FPGA乒乓球比賽游戲機(jī)組成框圖

2 功能模塊設(shè)計(jì)

圖1中,基于FPGA設(shè)計(jì)的控制端為整個(gè)系統(tǒng)的核心,其內(nèi)部主要由簡易隨機(jī)數(shù)發(fā)生器、發(fā)球權(quán)控制器、乒乓球位置控制器、甲乙方計(jì)分控制器、犯規(guī)音響控制器等模塊組成。整個(gè)控制端采用模塊化設(shè)計(jì),先用VHDL語言編寫功能模塊,然后用頂層原理圖將各功能模塊連接起來。設(shè)計(jì)的難點(diǎn)在于協(xié)調(diào)各模塊工作,嚴(yán)格遵守各信號(hào)間時(shí)序關(guān)系。本系統(tǒng)采用1 kHz系統(tǒng)時(shí)鐘。

2.1 簡易隨機(jī)數(shù)發(fā)生器

比賽首次發(fā)球權(quán)由隨機(jī)數(shù)發(fā)生器產(chǎn)生的數(shù)據(jù)決定,其隨機(jī)性要求不嚴(yán),因此,采用非常簡單的模式產(chǎn)生,即一旦FPGA上電,系統(tǒng)時(shí)鐘百分頻產(chǎn)生一方波信號(hào)square,當(dāng)裁判閉合開始比賽開關(guān)產(chǎn)生start信號(hào)上升沿時(shí),讀取此時(shí)square信號(hào)值作為隨機(jī)數(shù)發(fā)生器輸出randq。模塊仿真如圖2所示,結(jié)果滿足設(shè)計(jì)要求。此模塊設(shè)計(jì)時(shí)保證了square信號(hào)周期應(yīng)遠(yuǎn)大于start信號(hào)上升沿建立時(shí)間,保證隨機(jī)數(shù)據(jù)的正確讀取。

圖2 簡易隨機(jī)數(shù)發(fā)生器模塊仿真

2.2 發(fā)球權(quán)控制器

發(fā)球權(quán)控制器的控制過程為:如果按下復(fù)位按鈕,發(fā)球權(quán)數(shù)碼管顯示8,否則,開始比賽開關(guān)閉合時(shí),顯示隨機(jī)數(shù)發(fā)生器的值(0或1,0代表甲方、1代表乙方)。而在比賽中,為遵守發(fā)球權(quán)交換規(guī)則,設(shè)計(jì)甲乙雙方計(jì)分器總和信號(hào)sum_sc是不為0的偶數(shù)時(shí)(即計(jì)分總和最低位sum_sc0下降沿到來時(shí)),發(fā)球權(quán)數(shù)碼管顯示由0變?yōu)?或由1變?yōu)?。

此模塊設(shè)計(jì)中,發(fā)球權(quán)數(shù)碼管的信號(hào)控制受多個(gè)時(shí)鐘的控制,即開始比賽開關(guān)start和計(jì)分值sum_sc0信號(hào),這在VHDL編程語言中無法用一個(gè)進(jìn)程實(shí)現(xiàn),必須將兩個(gè)信號(hào)組合成一個(gè)時(shí)鐘信號(hào),并統(tǒng)一兩個(gè)時(shí)鐘的觸發(fā)沿。因此最佳時(shí)鐘觸發(fā)方式如圖3所示的fqq_en信號(hào)。為滿足這種時(shí)序要求,借助計(jì)分總和次低位sum_sc1信號(hào)設(shè)計(jì)entity sum_sc_mod2,由于start和sum_sc1的頻率都遠(yuǎn)低于系統(tǒng)時(shí)鐘信號(hào)clk頻率,則可借助clk 高頻信號(hào)捕捉其邊沿產(chǎn)生新的時(shí)鐘信號(hào)fqq_en,并產(chǎn)生其計(jì)數(shù)值,仿真波形如圖4(a)所示。為保證發(fā)球權(quán)數(shù)碼管顯示正確,設(shè)計(jì) entity led_fqq_ctl在fqq_en下降沿時(shí),根據(jù)其計(jì)數(shù)值產(chǎn)生相應(yīng)的數(shù)碼管輸出信號(hào)led_fqq,仿真波形如圖4(b)所示。

發(fā)球權(quán)控制器的VHDL核心程序如下:

entity sum_sc_mod2:

process(clk)

begin

if clk′event and clk=′1′ then--系統(tǒng)時(shí)鐘

mod2_en1<=sum_sc1;mod2_en2<=mod2_en1;

start1<=start;start2<=start1;

end if;

end process;

fqq_en<=(mod2_en1 xor mod2_en2) or (start1 xor start2);

mod2_en<=(mod2_en1 xor mod2_en2) or (start1 xor start2);

process(mod2_en)

begin

if mod2_en′event and mod2_en=′1′ then

cnt1<=cnt1+1;

end if;

end process;

cnt<=cnt1;

entity led_fqq_ctl:

process(reset,cnt)

begin

if reset =′0′ then led<="1000";--復(fù)位按鈕按下,發(fā)球權(quán)數(shù)碼管顯示8

elsif fqq_en′event and fqq_en=′0′ then

if cnt=1 then led<="000"&rand;

else led<="000"? led(0);

--fqq_en第一個(gè)下降沿顯示隨機(jī)數(shù)的值,其他下降沿交換發(fā)球權(quán)

end if;

end if;

end process;

圖3 發(fā)球權(quán)顯示控制器控制時(shí)鐘

圖4 發(fā)球權(quán)控制器模塊仿真

2.3 乒乓球位置控制、甲乙計(jì)分、犯規(guī)音響控制

乒乓球位置控制電路為FPGA控制端的核心,依據(jù)比賽規(guī)則,采用了Mealy型狀態(tài)機(jī)[10]來實(shí)現(xiàn),大大降低了設(shè)計(jì)難度。狀態(tài)機(jī)共定義了7個(gè)狀態(tài),各狀態(tài)定義如表1所示,狀態(tài)轉(zhuǎn)換如圖5所示,轉(zhuǎn)換條件如表2所示,具體程序如下。

表1 Mealy型狀態(tài)機(jī)狀態(tài)定義

狀態(tài)定義

s0發(fā)球權(quán)為0時(shí),乒乓球位置為最左端;發(fā)球權(quán)為1時(shí),乒乓球位置為最右端

s1如果甲擊球,乒乓球右移;如果乙擊球,犯規(guī)音響電路鳴響

s2判斷乒乓球進(jìn)入乙方臺(tái)面后,乙是否擊球; 判斷乒乓球是否仍處于甲方臺(tái)面及中點(diǎn);否則,甲方得分

s3乒乓球右移

s4如果乙擊球,乒乓球左移;如果甲擊球,犯規(guī)音響電路鳴響

s5判斷乒乓球進(jìn)入甲方臺(tái)面后,甲是否擊球; 判斷乒乓球是否仍處于乙方臺(tái)面及中點(diǎn);否則,乙方得分

s6乒乓球左移

表2 狀態(tài)轉(zhuǎn)換條件

源狀態(tài)目的狀態(tài)轉(zhuǎn)換條件

s0s1發(fā)球權(quán)歸甲方:(!led_fqq)

s0s4發(fā)球權(quán)歸乙方:(led_fqq)

s1s0乙方擊球:(!fq_b)

s1s1等待甲方擊球:(fq_b).(fq_a)

s1s2甲方擊球:(!fq_a).(fq_b)

s2s0球至最右乙未擊球:ppq(0)=′1′ and fq_b=′1′

s2s3 球仍在甲方臺(tái)面及中點(diǎn)位置或進(jìn)入乙方臺(tái)面但乙方尚未擊球:(ppq(5)=′1′ or ppq(4)=′1′ or ppq(3)=′1′ or ppq(2)=′1′ or ppq(1)=′1′) and fq_b=′1′) or ppq(12)=′1′ or ppq(11)=′1′ or ppq(10)=′1′ or ppq(9)=′1′ or ppq(8)=′1′ or ppq(7)=′1′ or ppq(6)=′1′

s2s6球移至乙方臺(tái)面乙擊球:(ppq(5)=′1′ or ppq(4)=′1′ or ppq(3)=′1′ or ppq(2)=′1′ or ppq(1)=′1′ or ppq(0)=′1′) and fq_b=′0′

s3s2乒乓球右移后無條件轉(zhuǎn)移

s4s0甲方擊球:(!fq_a)

s4s4等待乙方擊球(fq_b).(fq_a)

s4s5乙方擊球(!fq_b).(fq_a)

s5s0球至最左甲未擊球:ppq(12)=′1′ and fq_a=′1′

s5s3球移至甲方臺(tái)面甲擊球:(ppq(12)=′1′ or ppq(11)=′1′ or ppq(10)=′1′ or ppq(9)=′1′ or ppq(8)=′1′ or ppq(7)=′1′) and fq_a=′0′

s5s6球仍在乙方臺(tái)面及中點(diǎn)位置或進(jìn)入甲方臺(tái)面但甲方尚未擊球:(ppq(11)=′1′ or ppq(10)=′1′ or ppq(9)=′1′ or ppq(8)=′1′ or ppq(7)=′1′ )and fq_a=′1′) or ppq(6)=′1′ or ppq(5)=′1′ or ppq(4)=′1′ or ppq(3)=′1′ or ppq(2)=′1′ or ppq(1)=′1′ or ppq(0)=′1′

s6s5乒乓球左移后無條件轉(zhuǎn)移

圖5 乒乓球位置控制電路狀態(tài)轉(zhuǎn)換圖

library ieee;

use ieee.std_logic_1164.all;

entity position is

port(reset:in std_logic;

led_fqq,fq_a,fq_b,clk: in std_logic ;

--fq_a,fp_b選手擊球信號(hào),clk:1Hz信號(hào)

led_ppq: out std_logic_vector(12 downto 0);

--模擬乒乓球臺(tái)

cnta,cntb: inout integer range 0 to 11;

--甲乙雙方計(jì)分輸出

speaker: out std_logic);

end position;

architecture pst_st of position is

type states is (s0,s1,s2,s3,s4,s5,s6);

signal state: states;

signal ppq: std_logic_vector(12 downto 0);

signal ca,cb:integer range 0 to 11;

begin

process(clk)

begin

if reset=′0′ then state<=s0;

elsif (clk′event and clk=′1′) then

case state is

when s0 =>

speaker<=′0′;

if cnta=11 or cntb=11 then ca<=0;cb<=0;

end if;--任一方先得11分,一局結(jié)束,計(jì)分清零

if led_fqq=′0′ then ppq<="1000000000000";

state<=s1;

end if;

if led_fqq=′1′ then ppq<="0000000000001";

state<=s4;

end if;--依據(jù)發(fā)球權(quán)數(shù)碼管顯示判斷狀態(tài)轉(zhuǎn)換

when s1=>

if fq_a=′0′ then ppq<=′0′&ppq;(12 downto 1);

state<=s2;

end if;--若甲擊球,乒乓球右移

if fq_b=′0′ then speaker<=′1′;

state<=s0;

end if;--若乙擊球,犯規(guī)音響電路鳴響

when s2=>

if (ppq(5)=′1′ or ppq(4)=′1′ or ppq(3)=′1′ or ppq(2)=′1′ or ppq(1)=′1′ or ppq(0)=′1′) and fq_b=′0′ then state<=s6;

--若右移到乙方臺(tái)面,乙方接球,進(jìn)入s5狀態(tài)

elsif((ppq(5)=′1′ or ppq(4)=′1′ or ppq(3)=′1′ or ppq(2)=′1′ or ppq(1)=′1′) and fq_b=′1′) or ppq(12)=′1′ or ppq(11)=′1′ or ppq(10)=′1′ or ppq(9)=′1′ or ppq(8)=′1′ or ppq(7)=′1′ or ppq(6)=′1′ then state<=s3;

--若右移還未過中點(diǎn),進(jìn)入s3狀態(tài)

else ca<=ca+1;

state<=s0;--若右移到最右位置乙方未接球,甲方得分

end if;

when s3=>

ppq<=′0′&ppq;(12 downto 1);

state<=s2;--控制乒乓球右移

when s4=>

if fq_b=′0′ then ppq<=ppq(11downto 0)&′0′;

state<=s5;

end if;--若乙擊球,乒乓球左移

if fq_a=′0′ then speaker<=′1′;

state<=s0;

end if;--若甲擊球,犯規(guī)音響電路鳴響

when s5=>

if (ppq(12)=′1′ or ppq(11)=′1′ or ppq(10)=′1′ or ppq(9)=′1′ or ppq(8)=′1′ or ppq(7)=′1′) and fq_a=′0′ then state<=s3;

--若左移到對方臺(tái)面,對方接球,進(jìn)入s2狀態(tài)

elsif ((ppq(11)=′1′ or ppq(10)=′1′ or ppq(9)=′1′ or ppq(8)=′1′ or ppq(7)=′1′ )and fq_a=′1′) or ppq(6)=′1′ or ppq(5)=′1′ or ppq(4)=′1′ or ppq(3)=′1′ or ppq(2)=′1′ or ppq(1)=′1′ or ppq(0)=′1′ then state<=s6;

--若左移還未過中點(diǎn),進(jìn)入s6狀態(tài)

else cb<=cb+1;

state<=s0;

--若左移到最左位置甲方未接球,乙方得分

end if;

when s6=>

ppq<=ppq(11 downto 0)&′0′;

state<=s5;--控制乒乓球左移

end case;

end if;

end process;

led_ppq<=ppq;cnta<=ca;

cntb<=cb;

end pst_st;

3 頂層模塊仿真測試

由于篇幅限制,本系統(tǒng)中的分頻器、譯碼器等常用模塊的設(shè)計(jì)就不再此贅述,最終頂層原理圖設(shè)計(jì)如圖6所示,仿真波形如圖7所示,分析波形可知,圖中開始比賽信號(hào)產(chǎn)生后,首次發(fā)球權(quán)方為乙方,甲方發(fā)球造成犯規(guī)音響電路鳴響,即speaker 信號(hào)為高電平,然后乙方發(fā)球,乒乓球依次移位,甲方接球成功后乙方未接球成功,甲方得分,cnta信號(hào)為“0110000”,注意,此處輸出為驅(qū)動(dòng)數(shù)碼管輸出信號(hào),代表數(shù)字“1”。通過仿真可知,該系統(tǒng)設(shè)計(jì)滿足游戲機(jī)比賽規(guī)則要求。

圖6 基于FPGA“乒乓球比賽游戲機(jī)”頂層原理圖

圖7 頂層文件仿真波形

4 結(jié) 語

采用VHDL語言編程,基于FPGA成功設(shè)計(jì)了一款乒乓球比賽游戲機(jī),通過仿真驗(yàn)證可知,結(jié)果滿足設(shè)計(jì)需求,系統(tǒng)具有發(fā)球權(quán)控制、自動(dòng)計(jì)分、犯規(guī)提示等多種功能,能有效模擬實(shí)際乒乓球比賽。該系統(tǒng)進(jìn)一步改進(jìn)思路為:改用人體感應(yīng)傳感器來采集擊球信號(hào),采用FPGA產(chǎn)生視頻信號(hào)傳送到電視機(jī)或監(jiān)視器,更直觀地展示乒乓球運(yùn)動(dòng)軌跡,從而真正實(shí)現(xiàn)人機(jī)互動(dòng),優(yōu)化虛擬效果。

參考文獻(xiàn)

[1]李果.基于FPGA的擴(kuò)頻通信芯片設(shè)計(jì)及應(yīng)用[D].武漢:武漢理工大學(xué),2008.

[2]張帆.基于FPGA的航電總線適配器設(shè)計(jì)[D].南京:南京理工大學(xué),2006.

[3]高士峰.醫(yī)療機(jī)器人主操作手接口研究與開發(fā)[D].天津:天津大學(xué),2005.

[4]Lattice Semiconductor Corporation.利用低成本FPGA設(shè)計(jì)下一代游戲控制臺(tái)[EB/OL].http://www.eeworld.com.cn/FPGA/2009/0424/article_574.html,2009.

[5]彭介華.電子技術(shù)課程設(shè)計(jì)指導(dǎo)[M].北京:高等教育出版社,1997.

[6]潘松,黃繼業(yè).EDA技術(shù)與VHDL[M].北京:清華大學(xué)出版社,2007.

[7] Pedroni V A.VHDL數(shù)字電路設(shè)計(jì)教程[M].喬廬峰,譯.北京:電子工業(yè)出版社,2005.

[8]Altera International Limited.Quartus II Handbook v9.0[EB/OL].http://www.altera.com.cn/literature/lit-qts.jsp,2009.

[9]周立功.EDA實(shí)驗(yàn)與實(shí)踐[M].北京:北京航空航天大學(xué)出版社,2007.

[10] 克里茲.高級(jí)FPGA設(shè)計(jì)結(jié)構(gòu)、實(shí)現(xiàn)和優(yōu)化[M].孟憲元,譯.北京:機(jī)械工業(yè)出版社,2009.

作者簡介

曹莉凌 女,1982年出生,助理實(shí)驗(yàn)師,碩士。研究方向?yàn)镋DA技術(shù)的應(yīng)用。

劉雨青 女,1976年出生,講師,博士。研究方向?yàn)樽詣?dòng)化控制。

主站蜘蛛池模板: a天堂视频| 亚洲有无码中文网| 日韩无码黄色网站| 呦女精品网站| 亚洲三级电影在线播放| 欧美成人综合视频| 亚洲成人在线网| 国产美女精品人人做人人爽| 中文字幕乱码中文乱码51精品| www.狠狠| aaa国产一级毛片| 亚洲人在线| 伊人婷婷色香五月综合缴缴情| 国产精品自拍合集| 亚洲综合亚洲国产尤物| 美女内射视频WWW网站午夜| 人妻少妇乱子伦精品无码专区毛片| 免费毛片全部不收费的| 秋霞午夜国产精品成人片| 92精品国产自产在线观看| 情侣午夜国产在线一区无码| 被公侵犯人妻少妇一区二区三区| 久久人妻xunleige无码| 无码内射在线| 亚洲va在线∨a天堂va欧美va| aⅴ免费在线观看| 色噜噜狠狠狠综合曰曰曰| 最新午夜男女福利片视频| 日韩小视频在线播放| 国产日韩久久久久无码精品| 午夜丁香婷婷| 一区二区三区高清视频国产女人| 五月婷婷精品| 亚洲天堂福利视频| 九色国产在线| 国产精品30p| 无码AV高清毛片中国一级毛片| 精品一区二区无码av| 精品久久香蕉国产线看观看gif | 欧美中文字幕在线视频| 国产成人精彩在线视频50| 在线观看亚洲成人| a级毛片免费网站| 园内精品自拍视频在线播放| 日韩成人在线一区二区| 国产丝袜无码精品| 成人国产精品网站在线看| 又黄又爽视频好爽视频| 色婷婷成人| 日韩一二三区视频精品| 人妻精品全国免费视频| 欧美日韩中文字幕二区三区| 国产免费高清无需播放器| 91系列在线观看| 日韩成人免费网站| 91丝袜在线观看| 亚洲精品无码专区在线观看| 免费视频在线2021入口| 欧美成人午夜视频免看| 国产乱人激情H在线观看| 亚洲人成色在线观看| 国产一级一级毛片永久| 二级特黄绝大片免费视频大片| 在线看片中文字幕| 欧美一区中文字幕| 重口调教一区二区视频| 国产精品分类视频分类一区| 欧美成人看片一区二区三区| 日韩精品毛片| 国产91成人| 亚洲一区第一页| 亚洲综合色在线| 中文字幕日韩丝袜一区| 亚洲精品国产首次亮相| 91丝袜美腿高跟国产极品老师| 亚洲天堂网2014| 色偷偷综合网| 亚洲 欧美 偷自乱 图片| 午夜国产精品视频黄| 成人免费一级片| 91精品国产综合久久不国产大片| 国产成人免费手机在线观看视频|