![俄羅斯方塊設(shè)計實驗報告_第1頁](http://file4.renrendoc.com/view/11ba01d5771b1980384f4296b7314c27/11ba01d5771b1980384f4296b7314c271.gif)
![俄羅斯方塊設(shè)計實驗報告_第2頁](http://file4.renrendoc.com/view/11ba01d5771b1980384f4296b7314c27/11ba01d5771b1980384f4296b7314c272.gif)
![俄羅斯方塊設(shè)計實驗報告_第3頁](http://file4.renrendoc.com/view/11ba01d5771b1980384f4296b7314c27/11ba01d5771b1980384f4296b7314c273.gif)
![俄羅斯方塊設(shè)計實驗報告_第4頁](http://file4.renrendoc.com/view/11ba01d5771b1980384f4296b7314c27/11ba01d5771b1980384f4296b7314c274.gif)
![俄羅斯方塊設(shè)計實驗報告_第5頁](http://file4.renrendoc.com/view/11ba01d5771b1980384f4296b7314c27/11ba01d5771b1980384f4296b7314c275.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
——————數(shù)字電路與邏輯設(shè)計實驗報告—————基于VHDL的簡易俄羅斯方塊 實驗名稱 簡易俄羅斯方塊 姓名 班級 電信工程學院04107班學號 輔導老師 高英 日期 2006年11月6日 摘要 俄羅斯方塊游戲是我們熟知的經(jīng)典小游戲之一,本實驗通過硬件編成實現(xiàn)了簡易的俄羅斯方塊游戲機。VHDL是一種標準的,規(guī)范的硬件描述語言,在電子設(shè)計領(lǐng)域有著廣泛的應(yīng)用。它具有很強的電路描述和建模能力,能從多個層次多電路進行描述和建模,從而大大簡化了硬件設(shè)計任務(wù),提高了設(shè)計效率和可靠性。 本實驗基于VHDL語言,利用電路中心開發(fā)的實驗板,用一個4×4點陣做為基本顯示屏,一個發(fā)光點表示一個圖形,完成俄羅斯方塊游戲的基本功能:下落、左右移動、消行和顯示得分情況,當某一列到頂時游戲結(jié)束。關(guān)鍵字 俄羅斯方塊游戲VHDL點陣設(shè)計任務(wù) 利用電路中心開發(fā)的實驗板,用點陣做為顯示屏,一個發(fā)光點表示一個方塊,完成下落、左右移動、消行和顯示得分情況,當某一列到頂時游戲結(jié)束,數(shù)碼管顯示的分數(shù)保持不變。設(shè)計思路 由于實驗中只用到了16個點來完成顯示功能,所以選用一個16位的向量STATUS(0TO15)來存儲各點狀態(tài),再用兩個整型數(shù)分別控制當前點的坐標,但是這樣控制會涉及到乘法運算,因此改為4個4位向量STAN(0TO3),每個向量代表一行點陣,這樣做不僅使控制簡單,而且在掃描顯示的時候很方便,代碼也很簡潔。 設(shè)計包括2個大的元件,一個是RUSSIA,其功能是存儲狀態(tài),分頻,完成左右下移動以及計分等功能;另一個是RUSSIA_SCAN,主要完成點陣掃描和數(shù)碼管譯碼。具體設(shè)計是這樣的:4個向量STA0,STA1,STA2,STA3記錄游戲狀態(tài),點的坐標由COL和ROW來控制。設(shè)置兩個指針FLAG和ROW4,如果四列中有一列都為1,表示游戲結(jié)束了,置FLAG為1,程序進入NULL;當最后一行及STA3=”1111”時,置ROW4=1,當ROW4=1時,表示要消行,加分,并且將上一行的值賦到下一行。游戲繼續(xù),如按下左鍵或右鍵,程序更根據(jù)下一狀態(tài)決定是否左移或右移。(BTN1為復位RESET,BTN2為左,BTN3為右)若無鍵按下,則根據(jù)情況當前點是否需要自動下移。源代碼底層文件1:russia.vhd------russia.vhd------osom------6/11/06LIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY RUSSIA ISPORT(CLK :INSTD_LOGIC; -------時鐘頻率,選用低頻 RESET :INSTD_LOGIC; -------復位鍵 LEFT :INSTD_LOGIC; -------左移鍵 RIGHT :INSTD_LOGIC; -------右移鍵 SCORES :OUTINTEGERRANGE0TO15; -------分數(shù) STA0:OUTSTD_LOGIC_VECTOR(0TO3); -------以下為四行狀態(tài)寄存 STA1:OUTSTD_LOGIC_VECTOR(0TO3); STA2:OUTSTD_LOGIC_VECTOR(0TO3); STA3:OUTSTD_LOGIC_VECTOR(0TO3));ENDRUSSIA;ARCHITECTUREMOVINGOFRUSSIAISSIGNALSTATU0:STD_LOGIC_VECTOR(0TO3);SIGNAL STATU1:STD_LOGIC_VECTOR(0TO3);SIGNAL STATU2:STD_LOGIC_VECTOR(0TO3);SIGNAL STATU3:STD_LOGIC_VECTOR(0TO3);SIGNALFLAG :STD_LOGIC; -------gameover標志SIGNALFP :INTEGERRANGE0TO499; -------1000分頻SIGNALCLK1 :STD_LOGIC;SIGNALSCOR_TEMP:INTEGERSIGNALROW4:STD_LOGIC; -------消行標志SIGNALROW,COL:INTEGERRANGE0TO3; -------點的坐標控制BEGINP1:PROCESS(CLK,RESET)BEGIN IFRESET='1'THEN FP<=0; CLK1<='0'; ELSIF(CLK'EVENTANDCLK='1')THEN IFFP=2THEN FP<=0; CLK1<=NOTCLK1; ELSE FP<=FP+1; ENDIF; ENDIF;ENDPROCESS; --------p1用來分頻P2:PROCESS(CLK1,RESET)BEGIN IFRESET='1'THEN --------系統(tǒng)初始化 STATU0<="0100"; STATU1<="0000"; STATU2<="0000"; STATU3<="0000"; FLAG<='0'; SCOR_TEMP<=0; ROW4<='0'; ROW<=0; COL<=1; ELSIF(CLK1'EVENTANDCLK1='1')THEN IFFLAG='1'THEN --------gameover進入空循環(huán) NULL; ELSIFROW4='1'THEN --------消行 STATU3<=STATU2; STATU2<=STATU1; STATU1<=STATU0; ROW4<='0'; SCOR_TEMP<=SCOR_TEMP+1; --------加分 ELSIF(STATU0(0)='1'ANDSTATU1(0)='1'ANDSTATU2(0)='1'ANDSTATU3(0)='1') OR(STATU0(1)='1'ANDSTATU1(1)='1'ANDSTATU2(1)='1'ANDSTATU3(1)='1') OR(STATU0(2)='1'ANDSTATU1(2)='1'ANDSTATU2(2)='1'ANDSTATU3(2)='1') OR(STATU0(3)='1'ANDSTATU1(3)='1'ANDSTATU2(3)='1'ANDSTATU3(3)='1')THEN FLAG<='1'; --------判斷四列中是否有一列全為1,是則FLAG<='1' ELSIFSTATU3="1111"THEN ROW4<='1'; --------可以消行了 ELSIFRIGHT='1'ANDCOL<3THEN --------右移判斷 CASEROWISWHEN0=>IFSTATU0(COL+1)='0'THENCOL<=COL+1;STATU0(COL+1)<='1';STATU0(COL)<='0';ENDIF;WHEN1=>IFSTATU1(COL+1)='0'THENCOL<=COL+1;STATU1(COL+1)<='1';STATU1(COL)<='0';ENDIF;WHEN2=>IFSTATU2(COL+1)='0'THENCOL<=COL+1;STATU2(COL+1)<='1';STATU2(COL)<='0';ENDIF;WHENOTHERS=>IFSTATU3(COL+1)='0'THENCOL<=COL+1;STATU3(COL+1)<='1';STATU3(COL)<='0';ENDIF; ENDCASE; ELSIFLEFT='1'ANDCOL>0THEN ---------左移判斷 CASEROWISWHEN0=>IFSTATU0(COL-1)='0'THENCOL<=COL-1;STATU0(COL-1)<='1';STATU0(COL)<='0';ENDIF;WHEN1=>IFSTATU1(COL-1)='0'THENCOL<=COL-1;STATU1(COL-1)<='1';STATU1(COL)<='0';ENDIF;WHEN2=>IFSTATU2(COL-1)='0'THENCOL<=COL-1;STATU2(COL-1)<='1';STATU2(COL)<='0';ENDIF;WHENOTHERS=>IFSTATU3(COL-1)='0'THENCOL<=COL-1;STATU3(COL-1)<='1';STATU3(COL)<='0';ENDIF; ENDCASE; --------以下elsif語句為點的下移處理ELSIFROW=0ANDSTATU1(COL)='0'THENROW<=ROW+1;STATU1(COL)<='1';STATU0(COL)<='0';ELSIFROW=1ANDSTATU2(COL)='0'THENROW<=ROW+1;STATU2(COL)<='1';STATU1(COL)<='0';ELSIFROW=2ANDSTATU3(COL)='0'THENROW<=ROW+1;STATU3(COL)<='1';STATU2(COL)<='0'; ELSEROW<=0;COL<=1;STATU0(1)<='1';---不能下移則產(chǎn)生一個新的點 ENDIF;ENDIF;ENDPROCESS; SCORES<=SCOR_TEMP; STA0<=STATU0; STA1<=STATU1; STA2<=STATU2; STA3<=STATU3;END;底層文件2:RUSSIA_SCAN.vhd-----RUSSIA_SCAN.vhd-----osom------6/11/06LIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY RUSSIA_SCAN ISPORT(CLK: IN STD_LOGIC; RESET: INSTD_LOGIC; STA0: INSTD_LOGIC_VECTOR(0TO3); -------以下為4行的狀態(tài) STA1: INSTD_LOGIC_VECTOR(0TO3); STA2: INSTD_LOGIC_VECTOR(0TO3); STA3: INSTD_LOGIC_VECTOR(0TO3); SCORE: ININTEGERRANGE0TO15; -------分數(shù) COL: OUTSTD_LOGIC_VECTOR(0TO3); -------點陣顯示的行列控制 ROW: OUTSTD_LOGIC_VECTOR(0TO3); DISP:OUTSTD_LOGIC_VECTOR(6DOWNTO0);------數(shù)碼管譯碼 CAT : OUTSTD_LOGIC_VECTOR(5DOWNTO0)------數(shù)碼管選擇);ENDRUSSIA_SCAN;ARCHITECTUREBEHAVEOFRUSSIA_SCANISSIGNAL CP:INTEGERSIGNALROWT,COLT:STD_LOGIC_VECTOR(0TO3);SIGNALDISPT:STD_LOGIC_VECTOR(6DOWNTO0);BEGINPROCESS(CLK,SCORE,RESET)BEGINIFRESET='1'THEN DISPT<="0000000"; ROWT<="0000"; COLT<="1111"; CP<=0;ELSIFCLK'EVENTANDCLK='1'THEN IFCP=3THEN CP<=0; ELSE CP<=CP+1; ENDIF; CASECPIS --------對時鐘4分頻,用于點陣掃描 WHEN0=>ROWT<="1000";COLT<=NOTSTA0; -------采用行掃描法 WHEN1=>ROWT<="0100";COLT<=NOTSTA1; WHEN2=>ROWT<="0010";COLT<=NOTSTA2; WHENOTHERS=>ROWT<="0001";COLT<=NOTSTA3; ENDCASE; CASESCOREIS --------分數(shù)譯碼 WHEN0=>DISPT<="1111110"; --------0 WHEN1=>DISPT<="0110000"; --------1 WHEN2=>DISPT<="1101101"; --------2 WHEN3=>DISPT<="1111001"; --------3 WHEN4=>DISPT<="0110011"; --------4 WHEN5=>DISPT<="1011011"; --------5 WHEN6=>DISPT<="1011111"; --------6 WHEN7=>DISPT<="1110000"; --------7 WHEN8=>DISPT<="1111111"; --------8 WHEN9=>DISPT<="1111011"; --------9 WHEN10=>DISPT<="1110111"; -------10 WHEN11=>DISPT<="0011111"; -------11 WHEN12=>DISPT<="1001110"; -------12 WHEN13=>DISPT<="0111101"; -------13 WHEN14=>DISPT<="1001111"; -------14 WHEN15=>DISPT<="1000111"; -------15 WHENOTHERS=>DISPT<="0000000"; ENDCASE;ENDIF;ENDPROCESS; ROW<=ROWT; COL<=COLT; DISP<=DISPT; CAT<="011111"; -------選擇第一個數(shù)碼管END; 頂層文件RUSSIABLOCK.vhd------RUSSIABLOCK.vhd-----osom------6/11/06LIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY RUSSIABLOCK ISPORT(CLK :INSTD_LOGIC; -----------低頻時鐘 RESET :INSTD_LOGIC; -----------開始復位鍵 LEFT :INSTD_LOGIC; -----------左移 RIGHT : INSTD_LOGIC; -----------右移 COL OUTSTD_LOGIC_VECTOR(0TO3); ----------列 ROW: OUTSTD_LOGIC_VECTOR(0TO3); ----------行 DISP:OUTSTD_LOGIC_VECTOR(6DOWNTO0);--------數(shù)碼管顯示分數(shù) CAT : OUTSTD_LOGIC_VECTOR(5DOWNTO0)------數(shù)碼管選擇 );ENDRUSSIABLOCK;ARCHITECTURE RBLOCKOFRUSSIABLOCKISSIGNAL FENSHU:INTEGERSIGNALSTA0,STA1,STA2,STA3:STD_LOGIC_VECTOR(0TO3);COMPONENT -----------元件例化申明 RUSSIAPORT(CLK RESET :INSTD_LOGIC; LEFT :INSTD_LOGIC; RIGHT :INSTD_LOGIC; SCORES :OUT STA0:OUTSTD_LOGIC_VECTOR(0TO3); STA1:OUTSTD_LOGIC_VECTOR(0TO3); STA2:OUTSTD_LOGIC_VECTOR(0TO3); STA3:OUTSTD_LOGIC_VECTOR(0TO3) );ENDCOMPONENT;COMPONENT-----------元件例化申明RUSSIA_SCANPORT( CLK: IN STD_LOGIC; STA0: INSTD_LOGIC_VECTOR(0TO3); STA1: INSTD_LOGIC_VECTOR(0TO3); STA2: INSTD_LOGIC_VECTOR(0TO3); STA3: INSTD_LOGIC_VECTOR(0TO3); SCORE: ININTEGER COL: OUTSTD_LOGIC_VECTOR(0TO3); ROW: OUTSTD_LOGIC_VECTOR(0TO3); DISP: OUTSTD_LOGIC_VECTOR(6DOWNTO0); CAT : OUTSTD_LOGIC_VECTOR(5DOWNTO0) );ENDCOMPONENT;BEGIN --------------元件例化 C1:RUSSIA PORTMAP(CLK,RESET,LEFT,RIGHT,FENSHU,STA0,STA1,STA2,STA3);C2:RUSSIA_SCANPORTMAP(CLK,STA0,STA1,STA2,STA3,FENSHU,COL,ROW,DISP,CAT);END;仿真波形 實驗中所遇到的問題 1.由于初次設(shè)計較大的硬件程序,所以開始遇到的問題比較多。對于本實驗而言,最重要的我認為是數(shù)據(jù)結(jié)構(gòu)的設(shè)計,就是使用什么方案來解決點的狀態(tài)寄
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 健康行業(yè)風險控制方法與操作規(guī)范
- 新能源汽車技術(shù)及應(yīng)用創(chuàng)新開發(fā)方案
- 服裝廠勞動合同
- 職業(yè)培訓師培訓教程
- 環(huán)境保護監(jiān)測與污染控制作業(yè)指導書
- 國有企業(yè)合同管理制度
- 精裝修戰(zhàn)略合作框架協(xié)議書
- 家禽買賣合同集錦
- 委托采購協(xié)議書
- 三農(nóng)產(chǎn)品國際貿(mào)易培訓作業(yè)指導書
- 4地球-我們的家園《我們共同的責任》說課稿 -2023-2024學年道德與法治六年級下冊統(tǒng)編版
- 護理交接班改進
- (一模)蕪湖市2024-2025學年度第一學期中學教學質(zhì)量監(jiān)控 英語試卷(含答案)
- 完整版秸稈炭化成型綜合利用項目可行性研究報告
- 詩經(jīng)楚辭文學常識單選題100道及答案
- AI輔助的慢性病監(jiān)測與管理系統(tǒng)
- 2025年小學蛇年寒假特色作業(yè)
- 2025中國海油春季校園招聘1900人高頻重點提升(共500題)附帶答案詳解
- 膽汁淤積性肝硬化護理
- Unit 6 Is he your grandpa 第一課時 (教學實錄) -2024-2025學年譯林版(三起)(2024)英語三年級上冊
- 《數(shù)據(jù)采集技術(shù)》課件-Scrapy 框架的基本操作
評論
0/150
提交評論