EDA技術(shù)課程設(shè)計乒乓球比賽游戲機_第1頁
EDA技術(shù)課程設(shè)計乒乓球比賽游戲機_第2頁
EDA技術(shù)課程設(shè)計乒乓球比賽游戲機_第3頁
EDA技術(shù)課程設(shè)計乒乓球比賽游戲機_第4頁
EDA技術(shù)課程設(shè)計乒乓球比賽游戲機_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、東 北 石 油 大 學(xué)課 程 設(shè) 計課 程 eda技術(shù)課程設(shè)計 題 目 乒乓球比賽游戲機 院 系 電子科學(xué)學(xué)院 專業(yè)班級 電子信息工程 學(xué)生姓名 學(xué)生學(xué)號 070901140438 指導(dǎo)教師 2011年 3 月11日東北石油大學(xué)課程設(shè)計任務(wù)書課程 eda技術(shù)課程設(shè)計題目 乒乓球比賽游戲機專業(yè) 電子信息工程 姓名 學(xué)號 070901140438主要內(nèi)容、基本要求、主要參考資料等主要內(nèi)容:設(shè)計一個乒乓球游戲機,比賽由甲乙雙方和裁判3人構(gòu)成,能模擬比賽的基本過程和規(guī)則并能自動裁判和記分。基本要求:1、設(shè)計一個由甲、乙雙方參賽,有裁判的3人乒乓球游戲機。2、用8個(或更多個)led排成一條直線,以中點

2、為界,兩邊各代表參賽雙方的位置,其中一只點亮的led指示球的當前位置,點亮的led依此從左到右,或從右到左,其移動的速度應(yīng)能調(diào)節(jié)。3、當“球”(點亮的那只led)運動到某方的最后一位時,參賽者應(yīng)能果斷地按下位于自己一方的按鈕開關(guān),即表示啟動球拍擊球。若擊中,則球向相反方向移動;若未擊中,則對方得1分。一方得分時,電路自動響鈴3秒,這期間發(fā)球無效,等鈴聲停止后方能繼續(xù)比賽。4、設(shè)置自動記分電路,甲、乙雙方各用2位數(shù)碼管進行記分顯示,每計滿21分為1局。5、甲、乙雙方各設(shè)一個發(fā)光二極管,表示擁有發(fā)球權(quán),每隔5次自動交換發(fā)球權(quán),擁有發(fā)球權(quán)的一方發(fā)球才有效。主要參考資料:1 潘松著.eda技術(shù)實用教程

3、(第二版). 北京:科學(xué)出版社,2005.2 康華光主編.電子技術(shù)基礎(chǔ) 模擬部分. 北京:高教出版社,2006.3 閻石主編.數(shù)字電子技術(shù)基礎(chǔ). 北京:高教出版社,2003.完成期限 2011.3.11 指導(dǎo)教師 專業(yè)負責(zé)人 2011年 3月7日一、總體設(shè)計思想1.基本原理根據(jù)乒乓球比賽的過程和規(guī)則,首先游戲開始,如果一方非正確擊球則另一方加分,當分數(shù)大于21時獲勝,游戲結(jié)束,我們把設(shè)計流程規(guī)定如圖1.1所示。狀態(tài)機設(shè)置了7個狀態(tài),分別是“等待發(fā)球狀態(tài)”,“第一盞燈亮狀態(tài)”,“第八盞燈亮狀態(tài)”,“球向乙移動狀態(tài)”,“ 球向甲移動狀態(tài)”,“允許甲擊球狀態(tài)”,“允許乙擊球狀態(tài)”。這是該程序中起決定

4、作用的七個狀態(tài)。開始的時候處于“等待發(fā)球狀態(tài)”,若甲發(fā)球則狀態(tài)轉(zhuǎn)移到“第一盞燈亮狀態(tài)”,若乙發(fā)球則轉(zhuǎn)移到“第八盞燈亮狀態(tài)”,具體說明以甲球為例。若發(fā)球后乙沒有提前擊球-規(guī)定球移動到對方第一個發(fā)光二極管時允許擊球,那么狀態(tài)機從“第一盞燈亮狀態(tài)”轉(zhuǎn)移到“球向乙移動狀態(tài)”。若在“球向乙移動狀態(tài)”乙仍然沒有提前擊球,狀態(tài)就轉(zhuǎn)移到“允許乙擊球狀態(tài)”,在此狀態(tài)下,如果乙擊球了,那么狀態(tài)就轉(zhuǎn)移到“ 球向甲移動狀態(tài)”。在“第一盞燈亮狀態(tài)”, “球向乙移動狀態(tài)”中,如果乙擊球了 ,就算提前擊球,這樣甲得分,狀態(tài)轉(zhuǎn)移到“等待發(fā)球狀態(tài)”等待發(fā)球,“ 球向甲移動狀態(tài)”之后的過程和前面的過程只不過是甲乙角色的調(diào)換而已。

5、狀態(tài)轉(zhuǎn)移規(guī)則都是一樣的。圖1.2給出了乒乓球游戲機的原理圖。2.設(shè)計框圖游戲開始正確接發(fā)球?大于21? 甲 乙 否 否大于21?乙方勝利甲方勝利甲方加分乙方加分 n n y y游戲結(jié)束圖1.1設(shè)計流程圖等待發(fā)球 甲得分 乙得分 甲發(fā)球 乙發(fā)球第一盞燈亮第八盞燈亮允許甲發(fā)球球向甲移動 乙擊球 甲擊球球向乙移動 乙擊球 甲擊球允許乙發(fā)球 乙沒擊球 甲沒擊球圖1.2 乒乓球游戲機原理圖二、設(shè)計步驟和調(diào)試過程1、總體設(shè)計電路該乒乓球游戲機的設(shè)計主要包括的模塊與內(nèi)容有:乒乓球游戲機實體的設(shè)計,游戲機編程的實現(xiàn),記分譯碼器的設(shè)計以及構(gòu)造體的設(shè)計。直接對狀態(tài)機進行描述,所有的狀態(tài)均可表達為case_when

6、結(jié)構(gòu)中的一條case語句,而狀態(tài)的轉(zhuǎn)移則通過if_then_else語句實現(xiàn)。以下我們就詳細解析各個板快的設(shè)計與實現(xiàn)。2、模塊設(shè)計和相應(yīng)模塊程序(1)乒乓球游戲機實體的設(shè)計設(shè)計該乒乓球游戲機的輸入與輸出端口。首先考慮輸入端口,一般應(yīng)該設(shè)置一個異步置位端口reset,用于在系統(tǒng)不正常時回到初始狀態(tài):兩個發(fā)球輸入端serve1和serve2,邏輯1分別表示甲方和乙方的發(fā)球;兩個擊球輸入端hit1和hit2,邏輯1分別表示甲擊球和乙擊球;一個開始游戲按鈕startbutton,處于邏輯1表示可以游戲;還得有一個時鐘輸入端口clk。其次考慮輸出端口,芯片應(yīng)該有8個輸出端口來控制8個發(fā)光二極管,輸出邏輯

7、1即輸出一個高電平,可以使發(fā)光二極管點亮;另外,要直觀地表示雙方的得分,就得用到4個七段譯碼器,每方用到2個,可以表示0到21的數(shù)字,每個七段譯碼器需要芯片的7個輸出端口來控制,總共28個輸出端口。實體的設(shè)計如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all; /引用必要的庫函數(shù)和包集合entity pingponggame is -實體名為pingponggame port(reset:int std_logic;clk:int std

8、_logic;startbutton:int std_logic; -開始游戲輸入端口serve:in std_logic_vector(1 to 2); -發(fā)球輸入端口hit1,hit2:int std_logic; -甲和乙的擊球輸入端口-控制8個發(fā)光二極管的輸出端口light:out std_logic_vector(1 to 8); score11,score12,score21,score22:out std_logic_vector(1 to 7)); -4個用于控制4個7段譯碼器的輸出端口end pingponggame;(2)狀態(tài)機編程實現(xiàn) 狀態(tài)機設(shè)置了7個狀態(tài),分別是wait

9、serve, light1on, ballmoveto2, allow2hit,light8on,ballmoveto1,和allow1hit它們代表的具體數(shù)值依次是0到6。在波形模擬圖中是用數(shù)值來表示狀態(tài)的。 在整個程序中,狀態(tài)機起的是中央控制器的作用,由它控制的信號來影響整個程序中的其他相關(guān)部分,如記分部分,發(fā)光二極管部分。乒乓球游戲機中有兩個計數(shù)器count1和count2,分別記憶甲和乙的得分,用發(fā)光二極管的輪流發(fā)光表示球的移動軌跡。狀態(tài)機的進程如下:process(clk) -clk作為敏感信號觸發(fā)進程begin -進程開始if reset=1 then -異步置位i=0;count

10、100000;count2=00000;elsif clkevent and clk=1 then -當處于時鐘inclock上升沿時 if count1=10101or count2=10101theni=0;count100000;count2=00000;elsif startbutton+0 theni=0;count100000;count2 -進程處于等待發(fā)球狀態(tài)case serve iswhen 10= i=1;state i=8;statei i -進程處于第一盞燈亮狀態(tài)i=2if hit2=1 theni=0;count1=count1+1;state=waitserve;

11、elsestate -進程處于第八盞燈亮狀態(tài)i=7;if hit=1 theni=0;count2=count2+1;state=waitserve;elsestate -進程處于球向乙移動狀態(tài)if hit1=1 theni=0;count2=count2+1;state=waitserve;elsif i=2 then i=1;state=allow1hit;else i -進程處于球向乙移動狀態(tài)if hit2=1theni=0;ount1=count1+1;state=waitserve;elsif i=7 then i=8;state=allow2hit;else i -進程處于允許甲擊

12、球狀態(tài)if hit1=1 then i=2;state=ballowto2;else count2=count2+1;i=0;state -進程處于允許乙擊球狀態(tài)if hit2=1then i=7;state=ballmoveto1;else count1=count1+1;i=0;state=waitserve;end if;end case;end if;end if;end process;(3)記分譯碼器的設(shè)計七段譯碼器是在數(shù)學(xué)電路設(shè)計中經(jīng)常用到的顯示電路。所謂七段譯碼器,其實是由7段發(fā)光二極管組成的用于顯示數(shù)字的器件。記分譯碼器(mydecoder):由于記分需要顯示出來,所以要使用

13、七段譯碼器。而狀態(tài)機中的記分是由5位二進制碼來表示的,即count1和count2。以下程序就是實現(xiàn)從5位二進制碼轉(zhuǎn)換成七段譯碼顯示。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsingned.all; entity mudecoder isport(binaryin:int std_logic_vector(1 to 5); -5位二進制碼的輸入端口bcdout1:out std_logic_vector(1 to 7); -七段譯碼器輸出端口bcdout

14、2:out std_logic_vector(1 to 7);end mydecoder;architecture m of mydecoder issignal tembinaryin:std_logic_vector(1 to 5);beginprocess(binaryin)begintembinaryinbcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdou

15、t1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout

16、1=0110000;bcdout2bcdout1=1101101;bcdout2bcdout1=1101101;bcdout2bcdout1=1101101;bcdout2=1111110;end case;end process;end m; 這個記分譯馬電路是針對乒乓球游戲機的特點進行的特別設(shè)計,采用的是全部列舉的方法。(4)構(gòu)造體的設(shè)計該構(gòu)造體緊跟在實體設(shè)計之后,這樣就完成了數(shù)字乒乓球游戲機的vhdl源程序編寫。rchitecture game of pingponggame istype pingpong is (waitserve,light1on,ballmoveto2,allow

17、2hit,light8on,ballmoveto1,allow1hit);-設(shè)置7個狀態(tài),為枚舉數(shù)據(jù)類型,記為pingpong signal state:pingpong;signal i:integer range 0 to 8;signal count1,count2:std_logic_vector(1 to 5):=00000; -內(nèi)部計數(shù)器,是5位二進制變量component mydecoder isport(binaryin: in std_logic_vector(1 to 5);bcdout1:out std_logic_vector(1 to 7);bcdout2:out s

18、td_logic_vector(1 to 7););end component; -調(diào)用記分譯碼器beginprocess(clk) -狀態(tài)機進程beginend process; -進程處i信號控制發(fā)光二極管的亮暗light=10000000when(i=1) else01000000 when(i=2) else00100000 when(i=3) else00010000 when(i=4) else00001000 when(i=5) else00000100 when(i=6) else00000010 when(i=7) else00000001 when(i=8) else000

19、00000; -其他情況所有發(fā)光二極管都暗u0:mydecoder port map(count1,score11,score12); -用七段譯碼器顯示甲的分數(shù)u1:mydecoder port map(count2,score21,score22); -用七段譯碼器顯示乙的分數(shù)end game;從構(gòu)造體設(shè)計中可以看到,控制整個乒乓球游戲機運轉(zhuǎn)的就是狀態(tài)機進程,它隊各個外圍部分起控制作用。它是整個程序的核心,起到一個中心控制器的作用。而外圍的部分,比如分數(shù)顯示,球的軌跡,都是通過它傳出的信號來控制。狀態(tài)機中的i信號和count1,count2信號的變化同時就可以影響到外圍的顯示部分-發(fā)光二極

20、管和七段譯碼器,從而表示出當時的乒乓球位置和雙方分數(shù)情況。3、仿真及仿真結(jié)果分析編譯完成后進行仿真(如下圖)在仿真圖中,看到serve數(shù)組為1,代表乙發(fā)球。i從8開始依次遞減計數(shù),控制發(fā)光管亮暗light信號也隨著i的數(shù)值變化,由light端口輸出的高電平驅(qū)動芯片以外的發(fā)光二極管使之點亮,這樣就可以通過發(fā)光二極管模擬乒乓球的運動軌跡??梢钥吹?,在甲該擊球的時候沒有擊球,也就是hit1在state狀態(tài)6的時候沒有高電平1輸入,則乙得分,count2由0變1,score22的值隨之變化。從最后一行state值的變化,可以清楚分析狀態(tài)轉(zhuǎn)移。甲在state為狀態(tài)6的時候擊球了,在圖上hit1在此時刻出

21、現(xiàn)高電平,看到state轉(zhuǎn)移到了狀態(tài)2。當?shù)搅藸顟B(tài)3乙沒有擊球,所以甲得分了,count1由0變到1,而七段譯碼器隨之改變。在圖4.5中可以清楚地看到球的移動軌跡。在不允許甲擊球的狀態(tài)下,即state處在狀態(tài)5時,hit1輸入邏輯1,表示甲擊球了,所以乙得分。4、實驗調(diào)試結(jié)果通過調(diào)試我們可以觀察到,8個led排成一條直線,以中點為界,兩邊各代表參賽雙方的位置,其中一只點亮的led指示球的當前位置,點亮的led依此從左到右,或從右到左,其移動的速度應(yīng)能調(diào)節(jié)。當“球”(點亮的那只led)運動到某方的最后一位時,參賽者應(yīng)能果斷地按下位于自己一方的按鈕開關(guān),即表示啟動球拍擊球。若擊中,則球向相反方向移動;若未擊中,則對方得1分。一方得分時,電路自動響鈴3秒,這期間發(fā)球無效,等鈴聲停止后方能繼續(xù)比賽。設(shè)置自動記分電路,甲、乙雙方各用2位數(shù)碼管進行記分顯示,每計滿21分為1局。甲、乙雙方各設(shè)一個發(fā)光二極管,表示擁有發(fā)球權(quán),每隔5次自動交換發(fā)球權(quán),擁有發(fā)球權(quán)的一方發(fā)球有效。三、結(jié)論及心得體會在課題設(shè)計中,通過使用quartus這個完全集成化、易學(xué)易用的可編程邏輯設(shè)計環(huán)境,利用vhdl語言設(shè)計的乒乓球游戲機,較成功的完成了預(yù)期的效果,能夠正確判斷與顯示乒乓球的位置,并能自動裁判和記分的裝置。在具體設(shè)計過程中還需要改進的是控制系統(tǒng)的糾錯功能。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論