【文章內(nèi)容簡介】
IF。END IF。END PROCESS。END。本狀態(tài)機有6種狀態(tài),分別是WAITSTATE、ATOB、BTOA、ASCORE、BSCORE和FINALRESULT,其含義如表1所示。表1 狀態(tài)機的6種狀態(tài)及含義狀 態(tài)含 義WAITSTATE等待狀態(tài),等待A或B方開球ATOB球從A向B方移動BTOA 球從B向A方移動ASCOREA得一分BSCOREB得一分FINALRESULT比賽結(jié)束(最終判分),在此狀態(tài)下需要按復位鍵,才能開始下一輪比賽結(jié)合表1,從圖6中很清楚地看出乒乓游戲機比賽過程中球的移動情況,及加分方法,還可以初步了解到本狀態(tài)機設(shè)計的基本思路。圖6 乒乓游戲機狀態(tài)轉(zhuǎn)移圖狀態(tài)機是種很重要的時序電路,也是本設(shè)計的核心部件。狀態(tài)機屬于時序電路范疇,實現(xiàn)一個控制功能更為方便,并提高了控制速度[10]。本次設(shè)計中狀態(tài)機的符號如圖7所示。圖7 狀態(tài)機符號在本設(shè)計中,狀態(tài)機用兩個信號表示狀態(tài):STATE表示當前狀態(tài), TABLESTATE表示下一個狀態(tài)。此狀態(tài)機由兩個進程構(gòu)成,狀態(tài)機的輸入/輸出引腳的作用如表2所示。其中SCOREAL[3..0]、SCOREAH[3..0]、SCOREBL[3..0]、SCOREBH[3..0]用七段BCD碼譯碼器顯示得分情況,而SCOREA、SCOREB用二進制進行加分,由記分器反饋回來。表2 輸入/輸出引腳的作用引 腳作 用CLK10Hz的時鐘,可由系統(tǒng)時鐘分頻得到。此時時鐘決定了球移動的速度, 可根據(jù)實際需要調(diào)整。RESET復位鍵,比賽重新開始,記分器清0STARTA、STARTBA和B雙方的開始的開球鍵HITA、HITB A和B雙方的擊球鍵(可以將其與開球鍵合并)CLEAR 將記分器清0(給記分器的控制信號)INCREASEA 、INCREASEB分別為A、B雙方的加分信號(給記分器的控制信號)SCOREAL[3..0]SCOREAH[3..0]SCOREBL[3..0]SCOREBH[3..0]SCOREA、SCOREBA、B雙方的分數(shù)(由記分器給出)LIGHT[4..0]接5個發(fā)光二極管AWIN、BWIN分別接發(fā)光二極管,表示A或B方勝出狀態(tài)機的程序如下:LIBRARY IEEE。USE 。ENTITY STATEMACHINE ISPORT (CLK: IN STD_LOGIC。 RESET: IN STD_LOGIC。 STARTA, HITA, STARTB, HITB: IN STD_LOGIC。SCOREA, SCOREB: IN INTEGER RANGE 0 TO 21。 CLEAR, INCREASEA, INCREASEB: OUT STD_LOGIC。 TABLELIGHT: OUT STD_LOGIC_VECTOR (0 TO 4)。 AWIN, BWIN: OUT STD_LOGIC)。END。SIGNAL STATE: STATE_TYPE。SIGNAL TABLESTATE: INTEGER RANGE 0 TO 4。BEGINPROCESS (CLK, RESET)BEGIN IF RESET=39。139。 THEN 按下復位鍵,比賽開始 STATE=WAITSTATE。 進入等待狀態(tài) CLEAR=39。139。 記分器清零 AWIN=39。039。BWIN=39。039。 CASE STATE IS WHEN WAITSTATE= CLEAR=39。039。 INCREASEA=39。039。 INCREASEB=39。039。 IF((SCOREA =21 ) OR (SCOREB=21))THEN如果一方先得到21分STATE=FINALRESULT。 比賽結(jié)束 ELSE IF STARTA=39。139。THEN 如果A開球 STATE=ATOB。 球從A向B方移動 TABLESTATE=0。 A方第一個燈點亮 ELSE IF STARTB=39。139。THEN 如果B開球(A、B開球有定的優(yōu)先級區(qū)別 STATE=BTOA。 球從B向A方移動 TABLESTATE=4。 B方第一個燈亮 ELSE STATE=WAITSTATE。 END IF。END IF。 END IF。 WHEN ATOB= 球從A向B移動的過程 IF HITB=39。139。THEN 如果檢測到B方擊球 IF TABLESTATE=2 THEN 若未過網(wǎng)提前擊球 STATE=ASCORE。 判為A勝 ELSE STATE=BTOA。 若過了網(wǎng)擊球,球從B向A移動 ELSE 若未檢測到B方擊球 IF TABLESTATE=4 THEN 如果離B方最近的燈已經(jīng)亮 STATE=ASCORE。 判為A勝 ELSE TABLESTATE=TABLESTATE+1。 否則球繼續(xù)移動 END IF。 WHEN BTOA= 球從B向A移動的過程 IF HITA=39。139。THEN 如果檢測A方擊球 IF TABLESTATE=2 THEN 若未過網(wǎng)提前擊球 STATE=BSCORE。 判為B勝 ELSE 若過了網(wǎng)擊球,球從A STATE=ATOB。 向B移動 END IF。 ELSE 若未檢測到A擊球 IF TABLESTATE=0 THEN 如果離A最近的燈亮了 STATE=BSCORE。 判為B勝 ELSE TABLESTATE=TABLESTATE1。 否則球繼續(xù)移動 END IF。 END IF。 WHEN ASCORE= 如果A勝 INCREASEA=39。139。 A方加1分 STATE=WAITSTATE。 回到等待開球狀態(tài) WHEN BSCORE= 如果B勝 INCREASEB=39。139。 B方加1分 STATE=WAITSTATE。 回到等待開球狀態(tài) WHEN FINALRESULT= 最后結(jié)果 IF(SCOREA=21) THEN 若A方先達到21分