版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 學(xué)位論文原創(chuàng)性聲明</b></p><p> 本人鄭重聲明:所呈交的論文是本人在導(dǎo)師的指導(dǎo)下獨(dú)立進(jìn)行研究所取得的研究成果。除了文中特別加以標(biāo)注引用的內(nèi)容外,本論文不包含任何其他個人或集體已經(jīng)發(fā)表或撰寫的成果作品。本人完全意識到本聲明的法律后果由本人承擔(dān)。</p><p> 作者簽名: 年 月
2、 日</p><p> 學(xué)位論文版權(quán)使用授權(quán)書</p><p> 本學(xué)位論文作者完全了解學(xué)校有關(guān)保障、使用學(xué)位論文的規(guī)定,同意學(xué)校保留并向有關(guān)學(xué)位論文管理部門或機(jī)構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán)省級優(yōu)秀學(xué)士學(xué)位論文評選機(jī)構(gòu)將本學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。</p>&l
3、t;p><b> 本學(xué)位論文屬于</b></p><p> 1、保密 □,在 年解密后適用本授權(quán)書。</p><p><b> 2、不保密 □。</b></p><p> (請?jiān)谝陨舷鄳?yīng)方框內(nèi)打“√”)</p><p> 作者簽名:
4、 年 月 日 </p><p> 導(dǎo)師簽名: 年 月 日 </p><p><b> 目錄</b></p><p><b> 摘要4</b></p><p><b> 前言5</b>
5、;</p><p><b> 1緒論5</b></p><p> 1.1游戲的歷史5</p><p> 1.1.1追根溯源5</p><p> 1.1.2圖形硬件的革命6</p><p> 1.2游戲的意義與內(nèi)涵6</p><p> 1.3游戲的組成因
6、素6</p><p> 2游戲的可行性分析7</p><p><b> 2.1設(shè)計(jì)目的7</b></p><p> 2.2可行性研究前提7</p><p> 2.3可行性分析8</p><p><b> 2.4結(jié)論意見8</b></p>&
7、lt;p><b> 3需求分析8</b></p><p><b> 3.1引言8</b></p><p><b> 3.2游戲需求8</b></p><p><b> 4設(shè)計(jì)分析9</b></p><p> 4.1系統(tǒng)方案設(shè)計(jì)支持
8、9</p><p> 4.1.1開發(fā)環(huán)境9</p><p> 4.1.2編程語言9</p><p> 4.1.3硬件平臺9</p><p> 4.2系統(tǒng)實(shí)現(xiàn)框圖9</p><p> 4.3模塊實(shí)現(xiàn)11</p><p> 4.3.1實(shí)驗(yàn)電路圖11</p>&l
9、t;p> 4.3.2隨機(jī)產(chǎn)生模塊11</p><p> 4.3.3 PS/2鍵控模塊13</p><p> 4.3.4 VGA顯示模塊16</p><p> 4.3.5分頻模塊20</p><p> 4.3.6鍵控模塊21</p><p><b> 5仿真分析21</b&g
10、t;</p><p> 5.1隨機(jī)數(shù)產(chǎn)生序列仿真21</p><p> 5.2 VGA顯示模塊仿真波形21</p><p> 5.3實(shí)現(xiàn)運(yùn)行結(jié)果仿真22</p><p><b> 6總結(jié)與展望24</b></p><p> 6.1本文完成的主要工作24</p>&
11、lt;p> 6.2未來研究展望25</p><p><b> 致謝27</b></p><p><b> 參考文獻(xiàn)28</b></p><p><b> 附錄29</b></p><p> 基于FPGA的俄羅斯方塊游戲設(shè)計(jì)</p><
12、p> 摘要:俄羅斯方塊游戲是一款風(fēng)靡全球的游戲,它的基本規(guī)則是旋轉(zhuǎn)、移動、下落和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并消除得分。本設(shè)計(jì)是用FPGA開發(fā)板實(shí)現(xiàn)俄羅斯方塊,具體是在顯示器上顯示10×20的點(diǎn)陣以及外圍方框。點(diǎn)陣表示方塊,方框表示方塊的活動范圍。</p><p> 關(guān)鍵詞:俄羅斯方塊 VGA FPGA 串口通信</p><p>
13、Abstract:Tetris is a popular game around the world,it’s basic rule is to rotate,move and place all sorts of boxes which the game automatically output,making them arranged in complete one or more lines to get the relevan
14、t score.The design introduces a Tetris game through FPGA programming ,the 10×20 dot matrix and external boxes are shown on the display.The dot matrix represent box,and the boxes represent the scope of activities of
15、 the box.</p><p> Keywords:Tetris VGA FPGA Serial port</p><p><b> 前言:</b></p><p> 在現(xiàn)今電子信息高速發(fā)展的時(shí)代,電子游戲已經(jīng)深入人們的日常生活,成為老少皆宜的娛樂方式。但是游戲設(shè)計(jì)結(jié)合了日新月異的技術(shù),在一個產(chǎn)品中整合了復(fù)雜的設(shè)計(jì)、藝術(shù)
16、、聲音和軟件,所以并不是人人皆知。知道今天,在中國從事游戲設(shè)計(jì)的人任然很少,但是游戲行業(yè)的發(fā)展之快,遠(yuǎn)超家電、汽車等傳統(tǒng)行業(yè),也正因?yàn)槿绱?,游戲人才的教育、培養(yǎng)遠(yuǎn)落后于產(chǎn)業(yè)的發(fā)展。</p><p> 俄羅斯方塊是個老幼皆宜的小游戲,它實(shí)現(xiàn)由四塊正方形的色塊組成,然后存儲在一個數(shù)組的四個元素中,隨機(jī)產(chǎn)生不同的七種類型方塊,根據(jù)時(shí)鐘控制它在一定的時(shí)間不停的產(chǎn)生,用戶根據(jù)鍵盤的四個方向鍵控制翻轉(zhuǎn)、向左、向右和向下操作
17、。然后程序根據(jù)這七種方塊對疊成各種不同的模型。</p><p> 俄羅斯方塊游戲可以說是隨計(jì)算機(jī)的發(fā)展而發(fā)展,并不斷推陳出新演變出各種類似游戲,深受廣大玩家喜愛。這個游戲有的簡單,有的復(fù)雜,但其根本原理是一樣的,都是對運(yùn)動的方塊組合,來訓(xùn)練玩家的反應(yīng)能力。談到游戲軟件,大多數(shù)人都認(rèn)為其神妙莫測,高不莫及。而一般游戲軟件也確實(shí)具有很高的技術(shù)難度,隨著開發(fā)工具及軟件開發(fā)方法學(xué)的不斷發(fā)展,動手開發(fā)游戲也不是十分困難的
18、。俄羅斯方塊游戲是一種古老而有趣的游戲,游戲軟件不計(jì)其數(shù),網(wǎng)上就有關(guān)于實(shí)現(xiàn)的復(fù)雜算法和設(shè)計(jì),其難度讓一般初學(xué)者望而卻步。本文利用FPGA硬件描述語言VHDL進(jìn)行游戲的開發(fā)和實(shí)現(xiàn)。</p><p><b> 1緒論</b></p><p><b> 1.1游戲的歷史</b></p><p> 游戲開發(fā)至今已經(jīng)有30多年
19、,在這個短暫的時(shí)期里,隨著硬件水平的提高,游戲開發(fā)新技術(shù)層出不窮,經(jīng)典游戲比比皆是。</p><p><b> 1.1.1追根溯源</b></p><p> 真正的電子游戲機(jī)產(chǎn)生于20世紀(jì)70年代。1971年,麻省理工學(xué)院的學(xué)生Nolan Bushnell設(shè)計(jì)了世界上的第一個業(yè)務(wù)用游戲機(jī)(俗名街機(jī)),叫做《電腦空間》。這臺游戲機(jī)用一臺黑白電視機(jī)作為顯示屏,用一個控
20、制柄作為操縱器,不過由于市場因素這款游戲以失敗告終。但是最后他在電子游戲的發(fā)展上取得了非凡的成就。</p><p> 上面介紹的是專用機(jī)游戲的歷史,而最早的電腦游戲可以追溯到1972年,一個叫Crowther的工程師用當(dāng)時(shí)最流行的主機(jī)――DEC公司的PDP-10編寫一段簡單的FORTRAN程序。在這個程序里,Crowther設(shè)計(jì)了一張地圖,地圖上不規(guī)則的分布著陷阱,游戲者必須尋找路徑避開陷阱。這個程序被公認(rèn)為是
21、最早的電腦游戲程序。</p><p> 1989年,BroderBund公司的設(shè)計(jì)師喬丹.麥克納根據(jù)阿拉伯民族的古老傳說《一千零一夜》在Apple平臺上制作了一部動作冒險(xiǎn)相結(jié)合的電腦游戲――波斯王子。這個游戲獲得了第一作,它代表了當(dāng)時(shí)電腦技術(shù)的最高水平。</p><p> 1986年,任天堂公司發(fā)售了一款真正的游戲巨作――超級馬里奧。</p><p> 20世
22、紀(jì)80年代IBM PC兼容機(jī)的出現(xiàn)打破了Apple公司的壟斷地位。</p><p> 到了20世紀(jì)90年代,游戲業(yè)才真正成熟起來,成為了一種產(chǎn)業(yè)。</p><p> 由于PC機(jī)價(jià)格非常低而且硬件速度越來越快,游戲逐漸成為人們生活中不可缺少的一部分。游戲產(chǎn)業(yè)也逐漸發(fā)展成熟。</p><p> 1.1.2圖形硬件的革命</p><p>
23、圖形硬件的飛速發(fā)展是近些年來的事情,部分原因是來自工業(yè)方面的壓力,例如在軍事和醫(yī)療方面對于實(shí)時(shí)圖形的需求很強(qiáng)烈,而交互娛樂產(chǎn)業(yè)也極大的推動了圖形硬件的發(fā)展。技術(shù)上的因素同樣也推動著圖形硬件的發(fā)展,許多圖形算法可以很容易地表達(dá)為并行方式,這樣硬件執(zhí)行的效率變得很高。摩樂定律也起了作用,越來越多的晶體管可以集成到一塊單獨(dú)的芯片上。</p><p> 在所謂的GPU(圖形處理器)概念出現(xiàn)以前,特殊的圖形硬件只出現(xiàn)在諸
24、如SGI和E&S系統(tǒng)里面,這些硬件價(jià)格太昂貴,不過這些公司提供了第一代基于硬件的頂點(diǎn)變換和紋理映射的解決方案。</p><p> 1.2游戲的意義與內(nèi)涵</p><p> 游戲這個名稱一直就存在于每個人的日常生活中,如猜拳游戲、猜謎游戲、大地游戲、球類游戲等,林林總總,不勝枚舉,甚至于有些流行歌曲把人生也比喻為游戲,好比“一場游戲一場夢” 。因此,游戲?qū)τ诂F(xiàn)代人的成長歷程,絕對
25、是一個不可或缺的重要角色。</p><p> 1.3游戲的組成因素</p><p> “游戲”,最簡單的定義,就是一種供人們娛樂休閑的快樂元素。從更專業(yè)的角度形容, “游戲”是具有特定行為模式、規(guī)則條件、身心娛樂及輸贏的一種行為表現(xiàn)。這種行為表現(xiàn)具備以下4個要素。</p><p> 行為模式: “游戲”最簡單的要素就是游戲有特定的流程模式,這種流程模式貫穿于整
26、個游戲的行為,用戶必須依照它的模式流程來執(zhí)行。倘若一種游戲沒有了特定的行為模式,那么就沒有執(zhí)行的行為;在沒有執(zhí)行的行為之后,這個游戲也玩不下去了。舉個例子來說,如果猜拳游戲沒有了剪刀、石頭、布等行為模式,那么這還能叫做“猜拳游戲” 嗎?所以不管游戲的流程有多么復(fù)雜還是多么簡單,一定要有特定的行為模式。</p><p> 條件規(guī)則:當(dāng)游戲有了一定的行為模式后,接著就必須制定出一系列的條件規(guī)則。簡單來說,這些游戲的
27、條件規(guī)則就是大家必須去遵守的游戲行為守則,只要是大家一致以為的游戲行為,在游戲中,玩家就必須遵守它,如果不遵守這種游戲行為,那么就失去了公平性。如同一種簡單的球賽,打球的英文解釋可以用PLAY GAME來加以說明,按照英文字面上的解釋,它就是執(zhí)行游戲的行為,而球賽必須有一定的條件規(guī)則,并且參與者都要必須去遵守它,不能遵守它就叫作“犯規(guī)”。所以不管是什么游戲,它都會具備一組規(guī)則條件,在游戲進(jìn)行的時(shí)候才會有足夠的公平性。</p>
28、<p> 一般而言,游戲又可以分為動態(tài)和靜態(tài)兩種形態(tài)。動態(tài)的游戲必須配合肢體動作,如猜拳游戲;而靜態(tài)游戲則是較偏向思考的行為,如同紙上游戲。然而不管是動態(tài)或是靜態(tài)游戲,只要具備上述4項(xiàng)組成要素,都可以將它稱為“游戲”。</p><p><b> 2游戲的可行性分析</b></p><p><b> 2.1設(shè)計(jì)目的</b><
29、;/p><p> 綜合運(yùn)用在校期間所學(xué)理論知識和技能,設(shè)計(jì)開發(fā)俄羅斯方塊,使自己熟悉應(yīng)用系統(tǒng)的開發(fā)過程,培養(yǎng)獨(dú)立思考能力,檢驗(yàn)學(xué)習(xí)效果和動手能力,提高工程實(shí)踐能力,為將來實(shí)際工作打下堅(jiān)實(shí)的基礎(chǔ)。</p><p> 2.2可行性研究前提</p><p> 基本需求:系統(tǒng)開發(fā)的總體任務(wù)是實(shí)現(xiàn)游戲的可操作性、美觀性、及時(shí)性。</p><p>
30、開發(fā)過程遵循軟件工程規(guī)范,可采用結(jié)構(gòu)化或面向?qū)ο蠓治鲈O(shè)計(jì)方法。主要實(shí)現(xiàn)FPGA的VHDL程序開發(fā),對游戲中的圖形圖像進(jìn)行鍵盤控制。游戲者可以通過上下左右鍵來對游戲進(jìn)行操作。</p><p> 主要開發(fā)目標(biāo):采用結(jié)構(gòu)化設(shè)計(jì)方法,開發(fā)出一個可操作性、美觀性、及時(shí)性的游戲,實(shí)現(xiàn)FPGA的VHDL程序開發(fā),并通過此次軟件開發(fā)過程全面提高自身的綜合素質(zhì)。</p><p> 評價(jià)尺度:由于本軟件是
31、一個初級產(chǎn)品,對其要求不是太苛刻,所以能夠達(dá)到俄羅斯游戲的一般功能即可。</p><p><b> 2.3可行性分析</b></p><p> 管理可行性: 該游戲軟件為首次開發(fā),目的只為提高工作自身素質(zhì)和檢查自學(xué)VHDL的效果,用 QuartusⅡ11.0軟件編寫,所有功能均根據(jù)基本需求所做。便于管理,所以在這方面是可以實(shí)現(xiàn)的。</p><p
32、> 技術(shù)可行性:可用與本游戲的編程語言有VB,Java,Delphi,VHDL等,考慮到用于編寫程序的困難度,和對語言的了解程度,選擇硬件描述語言VHDL作為編程語言。需要對變量定義、變量初始化、界面初始化、游戲初始化、然后進(jìn)入游戲、處理游戲過程中的各種操作。</p><p><b> 2.4結(jié)論意見</b></p><p> 綜上所述,本游戲軟件的技術(shù)成
33、熟、完備。各方面均無重大問題,因此本游戲軟件可開始著手編寫。</p><p><b> 3需求分析</b></p><p><b> 3.1引言</b></p><p> 對軟件需求完全理解對于軟件開發(fā)工作的成功是至關(guān)重要的,需求說明的任務(wù)是發(fā)現(xiàn)、規(guī)范的過程,有益于提高軟件開發(fā)過程中的能見度,便于對軟件開發(fā)過程中的控
34、制與管理,便于采用工程方法開發(fā)軟件,提高軟件的質(zhì)量,便于開發(fā)人員、維護(hù)人員、管理人員之間的交流、協(xié)作,并作為工作成果的原始依據(jù),并且在向潛在用戶傳遞軟件功能、性能需求,使其能夠判斷該軟件是否與自己的需求相關(guān)。</p><p><b> 3.2游戲需求</b></p><p> 隨機(jī)給出不同的形狀(田字形、長條形、Z字形、反Z形、7字形、反7形、T字型)下落填充給定
35、的區(qū)域,若填滿一條便消掉。游戲功能要求如下:</p><p> 游戲界面需求:簡單良好的用戶界面,在顯示頻上顯示游戲方框區(qū)間,游戲界面,考慮到自己的能力有限,目前只打算完成簡單的游戲試玩。</p><p> 游戲形狀(方塊)需求:良好的方塊形狀設(shè)計(jì),繪制七種常見的基本圖形(長條形、Z字形、反Z形、田字形、7字形、反7形、T字型),各個方塊要能實(shí)現(xiàn)它的變形,可設(shè)為順時(shí)針或逆時(shí)針變形,一般
36、為順指針。</p><p> 鍵盤處理事件:方塊下落時(shí),可通過鍵盤方向鍵(J、K、L鍵)對該方塊進(jìn)行旋轉(zhuǎn)、向左、向右移動。</p><p> 顯示需求:當(dāng)不同的方塊填滿一行時(shí)可以消行,剩余方塊向下移動。</p><p><b> 4設(shè)計(jì)分析</b></p><p> 4.1系統(tǒng)方案設(shè)計(jì)支持</p>
37、<p><b> 4.1.1開發(fā)環(huán)境</b></p><p> 本次設(shè)計(jì)使用的軟件是Altera公司生產(chǎn)的QuartusⅡ軟件。它是Altera公司的綜合性PLD開發(fā)軟件,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。</p><p><b> 4.1.2編程語言</b></p><p> 本次設(shè)計(jì)使
38、用的編程語言是硬件編程語言VHDL,主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風(fēng)格與句法是十分類似于一般的計(jì)算機(jī)高級語言。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部(或稱可視部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實(shí)體的內(nèi)部功能和算法完成部分。在對一個設(shè)計(jì)實(shí)體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就
39、可以直接調(diào)用這個實(shí)體。這種將設(shè)計(jì)實(shí)體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計(jì)的基本點(diǎn)。</p><p><b> 4.1.3硬件平臺</b></p><p> 本次設(shè)計(jì)使用的核心器件是Altera Cyclone Ⅱ EP2C35F484C8</p><p><b> 4.2系統(tǒng)實(shí)現(xiàn)框圖</b></p>&
40、lt;p> 本游戲有通過FPGA實(shí)現(xiàn)的,主要通過鍵盤送入數(shù)據(jù),通過PS/2接口送入到FPGA中,然后通過FPGA程序控制,通過VGA接口輸出到VGA顯示頻上,所以我的設(shè)計(jì)方案如圖4.2.1所示:</p><p> 圖4.2.1設(shè)計(jì)框圖</p><p> 設(shè)計(jì)方案介紹:由于VGA是有640× 480的顯示矩陣顯示,所以我們將俄羅斯方塊分成20×10的矩陣,每一
41、個矩陣代表一個方塊,每一個方塊一起顯示,如圖4.2.2所示:</p><p> 圖4.2.2方塊顯示圖</p><p> 這樣當(dāng)有一個地方有方塊時(shí),就會有將矩陣對應(yīng)的地方顯示,其他沒有方塊的地方就不顯示。</p><p><b> 4.3模塊實(shí)現(xiàn)</b></p><p> 4.3.1實(shí)驗(yàn)電路圖</p>
42、<p> 圖4.3.1實(shí)驗(yàn)電路圖</p><p> 上圖給出了系統(tǒng)的連接組成關(guān)系:</p><p> PS/2模塊:鍵盤接收模塊,讀取鍵盤發(fā)送的掃描碼</p><p> maichong模塊:分頻得到1S電子時(shí)鐘,控制游戲時(shí)間</p><p> Jiankong模塊:游戲控制模塊,程序主控單元,通過狀態(tài)機(jī)控制</
43、p><p> rand模塊:隨機(jī)產(chǎn)生0-14共15個隨機(jī)整數(shù),分別代表15種方塊的形狀</p><p> fun1模塊:產(chǎn)生VS、HS兩路垂直掃描信號和水平掃描信號</p><p> 4.3.2隨機(jī)產(chǎn)生模塊</p><p> 隨機(jī)數(shù)模塊用于產(chǎn)生0-14共15個隨機(jī)整數(shù),分別代表15種方塊的形狀。它的產(chǎn)生機(jī)理是參考了信道編碼中的線性反饋移位
44、寄存器(LFSR),所產(chǎn)生的其實(shí)是一列偽隨機(jī)數(shù)。具體原理如下:</p><p> 在游戲里,我們需要的是一個更大的隨機(jī)數(shù),這次我們用了一個16bit的偽隨機(jī)數(shù)。通過查找資料,我們找到不同bit的本原多項(xiàng)式如圖4.3.4所示:</p><p> 圖4.3.4偽隨機(jī)序列圖</p><p> 根據(jù)16bit的本原多項(xiàng)式可以畫出它的電路原理圖4.3.5如下:</
45、p><p> 圖4.3.5 16bit的電路原理圖</p><p> 之后再將產(chǎn)生的16bit二進(jìn)制數(shù)化成十進(jìn)制,并對15取余,則可以得到一列0-14的偽隨機(jī)數(shù)列。</p><p> 圖4.3.6偽隨機(jī)序列圖形生產(chǎn)圖</p><p> 每次執(zhí)行首先為隨機(jī)數(shù)產(chǎn)生一個不同的初值</p><p><b> 隨
46、機(jī)選取一個圖形</b></p><p> 當(dāng)前圖形在4×4網(wǎng)格中的位置信息</p><p><b> 改變圖形形狀</b></p><p> 定義一個4x4方陣,共16個小格。用“0”和“1”來表示每個方格是繪制還是空白,由此可以組合出多種圖形,如圖所示:</p><p> 圖4.3.7隨機(jī)
47、序列生產(chǎn)的7種方塊圖形</p><p> 4.3.3 PS/2鍵控模塊</p><p> 鍵盤作為嵌入式系統(tǒng)的一種最常用人機(jī)接口設(shè)備, 在嵌入式系統(tǒng)中有著相當(dāng)廣泛的應(yīng)用。但開發(fā)者一般均采用自行設(shè)計(jì)的簡易矩陣鍵盤, 這類鍵盤僅僅是按行、列排列起來的矩陣開關(guān), 往往需要單獨(dú)設(shè)計(jì)并制作, 通用性不強(qiáng)。當(dāng)需要較多的按鍵時(shí), 則會占用較多的I/O 端口, 在軟件上則要進(jìn)行上電復(fù)位按鍵掃描及通信處
48、理, 而且還要加上按鍵的去抖動處理, 增大了系統(tǒng)的軟硬件開銷。而PS/2 鍵盤, 內(nèi)嵌自動去除按鍵抖動的設(shè)計(jì),自動地識別鍵的按下與釋放, 軟硬件可發(fā)簡便, 價(jià)格便宜, 穩(wěn)定可靠, 將PS/2 鍵盤作為嵌入式系統(tǒng)的輸入設(shè)備已經(jīng)成為可行的方案。而目前關(guān)于PS/2 鍵盤控制的應(yīng)用大部分采用單片機(jī)控制, 與單片機(jī)相比, FPGA 具有比單片機(jī)更加靈活, 集成度更高,容易移植等特點(diǎn)。</p><p><b>
49、PS/2物理特性</b></p><p> PS/2 設(shè)備接口用于許多現(xiàn)代的鼠標(biāo)和鍵盤, 它最初由IBM開發(fā), 最常見的為6 腳mini-DIN, 其引腳結(jié)構(gòu)和外形如圖4.3.8所示。</p><p> 圖4.3.8 PS/2接口圖</p><p> PS/2 設(shè)備有主從之分, 現(xiàn)在廣泛使用的PS/2 鍵盤鼠標(biāo)均工作在從設(shè)備方式下。PS/2 接口的
50、時(shí)鐘與數(shù)據(jù)線都是集電極開路結(jié)構(gòu), 必須外接上拉電阻, 一般上拉電阻設(shè)置在主設(shè)備中, 主從設(shè)備之間的數(shù)據(jù)通信采用雙向同步方式傳輸, 時(shí)鐘信號一般由從設(shè)備產(chǎn)生。</p><p><b> 2、數(shù)據(jù)包的結(jié)構(gòu)</b></p><p> 鍵盤的狀態(tài)每改變一次, 鍵盤至少會發(fā)出三個字節(jié)的數(shù)據(jù)包, 在有鍵按下時(shí)會向主機(jī)發(fā)送該鍵的通碼(Make Code) ,當(dāng)鍵釋放時(shí)發(fā)送斷碼(
51、Break Code) 。例如: 鍵“A”的通碼為0x1C,因此當(dāng)要傳送鍵“A”時(shí), 鍵盤發(fā)送的數(shù)據(jù)包的代碼是: 0x1C, 0xF0, 0x1C。</p><p><b> 接口的時(shí)序邏輯</b></p><p> PS/2 協(xié)議是一種雙向半雙工串行通信協(xié)議, 時(shí)鐘信號由鍵盤產(chǎn)生, 最大時(shí)鐘頻率為33kHz,推薦頻率在15kHz。通信兩端通過Clock 同步,
52、通過Data 交換數(shù)據(jù), 任何一方如果想禁止另一方通信時(shí), 只需將Clock 拉到低電平。其傳輸時(shí)序根據(jù)傳輸?shù)姆较虿煌譃榘l(fā)送和接收兩個不同時(shí)序邏輯, 圖4.3.9是從鍵盤到主機(jī)的時(shí)序圖。</p><p> 圖4.3.9鍵盤到主機(jī)的時(shí)序圖</p><p> 其中: Start: 起始位, 總為‘0’( 低電平)</p><p> Data0~Data7: 8
53、位數(shù)據(jù)位( 低位在前, 高位在后)</p><p> Parity: 奇偶校驗(yàn)位( 為奇校驗(yàn))</p><p> Stop: 停止位, 總為‘1’( 高電平)</p><p> 當(dāng)鍵盤要向主機(jī)通信時(shí), 鍵盤總是首先檢查時(shí)鐘線是否為高電平, 如果不是則表明是主機(jī)正在通信, 必須緩沖要發(fā)送的數(shù)據(jù)直到重新獲得總線的控制權(quán)( 鍵盤有16 個字節(jié)的緩沖區(qū)) , 即等到時(shí)
54、鐘線是高電平才能發(fā)送數(shù)據(jù)。而且從鍵盤到主機(jī)的數(shù)據(jù)只能在時(shí)鐘的下降沿時(shí)才能被讀取。</p><p> 當(dāng)主機(jī)到鍵盤進(jìn)行通信時(shí), 主機(jī)會首先把時(shí)鐘線和數(shù)據(jù)線設(shè)置為“請求發(fā)送”狀態(tài)。具體方式為: 首先下拉時(shí)鐘線至少100μs 來抑制通信, 然后下拉數(shù)據(jù)線“請求發(fā)送”, 最后釋放時(shí)鐘。在此過程中, 鍵盤在不超過10μs 的間隔內(nèi)就會檢查這個狀態(tài)。當(dāng)鍵盤檢查到這個狀態(tài)時(shí), 就開始產(chǎn)生時(shí)鐘。和鍵盤發(fā)送的數(shù)據(jù)讀取方式不一樣,
55、 主機(jī)發(fā)送的數(shù)據(jù)必須在時(shí)鐘的上升沿讀取。</p><p><b> 程序設(shè)計(jì)過程</b></p><p><b> 0 </b></p><p><b> 1</b></p><p><b> 0</b></p><p
56、><b> 1</b></p><p> 圖4.3.10 PS/2程序設(shè)計(jì)過程</p><p> 4.3.4 VGA顯示模塊</p><p> 當(dāng)前顯示器越來越廉價(jià),如果用顯示器作為嵌入式設(shè)備的顯示終端,不管從顯示效果和成本上,都比常用的單色液晶、低分辨率彩色液晶等都有優(yōu)勢。VGA顯示器因?yàn)槠漭敵鲂畔⒘看?,輸出形式多樣等特點(diǎn)已經(jīng)成
57、為現(xiàn)在大多數(shù)設(shè)計(jì)的常用輸出設(shè)備,F(xiàn)PGA以其結(jié)構(gòu)的優(yōu)勢可以使用很少的資源產(chǎn)生VGA的各種控制信號。因此我們采用基于FPGA的VGA顯示系統(tǒng),實(shí)現(xiàn)真彩色顯示。</p><p><b> VGA顯示概述</b></p><p> CRT顯示器作為一種通用型顯示設(shè)備,如今已廣泛應(yīng)用于我們的工作和生活中。與嵌入式系統(tǒng)中常用的顯示器件相比,它具有顯示面積大、色彩豐富、承載信
58、息量大、接口簡單等優(yōu)點(diǎn),如果將其應(yīng)用到嵌入式系統(tǒng)中,可以顯著提升產(chǎn)品的視覺效果。如今隨著液晶顯示器的出現(xiàn),越來越多的數(shù)字產(chǎn)品開始使用液晶作為顯示終端。但基于VGA標(biāo)準(zhǔn)的顯示器仍是目前普及率最高的顯示器。若驅(qū)動此類顯示器,需要很高的掃面頻率,以及極短的處理時(shí)間,正是由于這些特點(diǎn),所以可以用FPGA來實(shí)現(xiàn)對VGA顯示器的驅(qū)動。本次專業(yè)課程設(shè)計(jì)即選用FPGA來實(shí)現(xiàn)VGA的顯示。</p><p> 隨著FPGA的不斷發(fā)
59、展及其價(jià)格的不斷下降,F(xiàn)PGA的可編程邏輯設(shè)計(jì)的應(yīng)用優(yōu)勢逐漸顯現(xiàn)出來?,F(xiàn)在,越來越多的嵌入式系統(tǒng)選擇了基于FPGA的設(shè)計(jì)方案。在基于FPGA的大規(guī)模嵌入式系統(tǒng)設(shè)計(jì)中,為實(shí)現(xiàn)VGA顯示功能,既可以使用專用的VGA接口芯片如SPX7111A等,也可以設(shè)計(jì)和使用基于FPGA的VGA接口軟核。雖然使用VGA專用芯片具有更穩(wěn)定的VGA時(shí)序和更多的顯示模式可供選擇等優(yōu)點(diǎn),但設(shè)計(jì)和使用VGA接口軟核更具有以下優(yōu)勢:(1)使用芯片更少,節(jié)省板上資源,減
60、小布線難度;(2)當(dāng)進(jìn)行高速數(shù)據(jù)傳輸時(shí),具有更小的高頻噪聲干擾;(3) FPGA(現(xiàn)場可編程門陣列)設(shè)計(jì)VGA接口可以將要顯示的數(shù)據(jù)直接送到顯示器,節(jié)省了計(jì)算機(jī)的處理過程,加快了數(shù)據(jù)的處理速度,節(jié)約了硬件成本。</p><p><b> VGA顯示接口</b></p><p> VGA 接口負(fù)責(zé)向顯示器輸出相應(yīng)的顯示信號。VGA 接口是一種D型接口,上面共有 15
61、 個針孔,非對稱地分成 3 排,每排 5 個,其排列及接口定義如圖 4.3.11 所示。</p><p> 圖4.3.11 VGA接口圖</p><p> VGA接口為顯示器提供兩類信號, 一類是數(shù)據(jù)信號, 一類是控制信號。數(shù)據(jù)信號包括紅(red)、綠(green)、藍(lán)(blue)三種信號, 簡稱RGB信號, 控制信號包括水平同步信號和垂直同步信號。如果能從 FPGA 發(fā)出這 5 個
62、信號到 VGA 接口,就可以實(shí)現(xiàn)對 VGA 的控制。輸出不同分辨率時(shí),水平同步信號和垂直同步信號的頻率也不同。圖4.3.12是在部分分辨率條件下使用的相應(yīng)頻率</p><p> 圖4.3.12 VGA部分分辨率條件下使用的相應(yīng)頻率</p><p><b> VGA顯示原理</b></p><p> VGA顯示圖像原理:常見的彩色顯示器,一
63、般由CRT(陰極射線管)構(gòu)成。彩色是有R,G.B(紅:RED,綠:GREEN,藍(lán):BLUE)三基色組成。顯示是用逐行掃描的方式解決,陰極射線槍發(fā)出電子束打在涂有銀光粉的熒光屏幕上,產(chǎn)生R,G,B三基色,合成一個彩色像素。掃描從屏幕的左上方開始,從左到右,從上到下,進(jìn)行掃描,每掃完一行,電子束回到屏幕的左邊下一行的起始位置,在這期間,CRT對電子束進(jìn)行消隱,每行結(jié)束時(shí),用行同步信號進(jìn)行同步,掃描完所有行,用場同步信號進(jìn)行場同步,并使掃描回
64、到屏幕的左上方,同時(shí)進(jìn)行場消隱,預(yù)備下一場的掃描。</p><p> 圖4.3.13行場掃描時(shí)序圖</p><p> 圖4.3.14行掃描時(shí)序要求(單位:像素)</p><p><b> VGA硬件實(shí)現(xiàn)</b></p><p> VGA 的圖形模式分為 3 類:CGA、EGA 兼容的圖形模式;標(biāo)準(zhǔn)的 VGA 圖形
65、模式;VGA 擴(kuò)展圖形模式。后兩種圖形模式統(tǒng)稱為 VGA 圖形模式。本研究基于標(biāo)準(zhǔn) VGA模式來實(shí)現(xiàn)。常見的彩色顯示器一般由 CRT(陰極射線管)構(gòu)成,每一個像素的色彩由紅、綠、藍(lán)三基色構(gòu)成。顯示時(shí)采用的是逐行掃描的方式。 VGA 顯示模塊產(chǎn)生的由水平同步信號和垂直同步信號控制陰極射線管中的電子槍產(chǎn)生電子束,轟擊涂有熒光粉的屏幕,產(chǎn)生紅、綠、藍(lán)三基色,于顯示屏上合成一個彩色像素點(diǎn)。圖 4.3.16表示的是 VGA 顯示模塊與 CRT 顯
66、示器的控制框圖。</p><p> 圖4.3.16 VGA 顯示模塊與 CRT 顯示器的控制框圖</p><p> 電子束掃描一幅屏幕圖像上的各個點(diǎn)的過程稱為屏幕掃描?,F(xiàn)在顯示器都是通過光柵掃描方式來進(jìn)行屏幕掃描。在光柵掃描方式下,電子束按照固定的路徑掃過整個屏幕,在掃描過程中通過電子束的通斷強(qiáng)弱來控制電子束所經(jīng)過的每個點(diǎn)是否顯示或顯示的顏色。 電子槍在 VGA 顯示模塊產(chǎn)生的行同步
67、、場同步等控制信號的作用下進(jìn)行包括水平掃描、水平回掃、垂直掃描、垂直回掃等過程。光柵掃描的路徑通常為:從上到下掃過每一行,在每一行中從左到右地進(jìn)行掃描。其過程如下:電子束從屏幕左上角開始向右掃,當(dāng)?shù)竭_(dá)屏幕的右邊緣時(shí),電子束關(guān)閉(水平消隱),并快速返回屏幕左邊緣(水平回掃),然后在下一條掃描線上開始新的一次水平掃描。一旦所有的水平掃描均告完成,電子束在屏幕的右下角結(jié)束并關(guān)閉(垂直消隱),然后迅速返回到屏幕的左上角(垂直回掃),開始下一次光
68、柵掃描。</p><p> 圖4.3.17 VGA與FPGA引腳連接</p><p><b> VGA算法流程圖</b></p><p> 圖4.3.18 VGA設(shè)計(jì)流程</p><p> 在屏幕上顯示圖案則在需要圖案顯示的行和列設(shè)置顯示顏色,就類似點(diǎn)陣和led液晶屏的顯示操作。我們將要顯示的圖案分模塊,每個模
69、塊并行運(yùn)行,最后用或的方式將所有要顯示的模塊圖案一同并起來在屏幕上顯示。(具體見程序)</p><p><b> 4.3.5分頻模塊</b></p><p> 在數(shù)字電路中,常需要對較高頻率的時(shí)鐘進(jìn)行分頻操作,得到較低信號的是時(shí)鐘頻率。我們知道,此次試驗(yàn)使用的FPGA是頻率為50M的晶振,那么需要分頻得到1S的電子時(shí)鐘,控制游戲運(yùn)行時(shí)間</p>&l
70、t;p><b> 實(shí)現(xiàn)代碼如下所示:</b></p><p> if reset='0' then</p><p> count<=(others=>'0');</p><p> elsif rising_edge (clk) then</p><p> if
71、count=25000000 then</p><p> count<=(others=>'0');</p><p><b> else </b></p><p> count<=count+1;</p><p><b> end if;</b></p
72、><p> end process;</p><p> time_1s<=count(24);</p><p><b> 4.3.6鍵控模塊</b></p><p> 鍵控模塊是俄羅斯方塊游戲的核心版塊,它主要控制游戲的左、右、旋轉(zhuǎn)按鍵的實(shí)現(xiàn)。</p><p><b> 5仿
73、真分析</b></p><p> 5.1隨機(jī)數(shù)產(chǎn)生序列仿真</p><p> 由于PS/2模塊仿真的意義不大,而且不能很好的體現(xiàn)程序的正確性,因此我們的仿真分析主要在于VGA顯示模塊,而其余的功能驗(yàn)證我們通過硬件檢驗(yàn),更具有現(xiàn)實(shí)意義并且直觀可行。</p><p> 圖5.1.1從隨機(jī)數(shù)生成器中產(chǎn)出了0~15的隨機(jī)數(shù)</p><p
74、> 5.2 VGA顯示模塊仿真波形</p><p> 圖5.2.1屏幕上方的白色橫條顯示仿真</p><p> 以上截圖波形為顯示屏幕上方的的白色橫條,根據(jù)程序可知,應(yīng)該有11行整行均顯示白色橫條,也就是RGB=111。從以上波形可以看出,11行均顯示正確。</p><p> 圖5.2.2屏幕上方的白色橫條顯示仿真</p><p&g
75、t; 5.3實(shí)現(xiàn)運(yùn)行結(jié)果仿真</p><p><b> 隨機(jī)產(chǎn)生</b></p><p> 5.3.1方塊隨機(jī)產(chǎn)生結(jié)果圖</p><p><b> 向下掉落</b></p><p> 5.3.2方塊向下掉落圖</p><p><b> 向右移動<
76、/b></p><p> 5.3.3方塊向右移動圖</p><p><b> 向左移動</b></p><p> 5.3.4方塊向左圖</p><p><b> 消行</b></p><p> 5.3.5整行滿消除</p><p>&l
77、t;b> 6總結(jié)與展望</b></p><p> 6.1本文完成的主要工作</p><p> 本次設(shè)計(jì)基于FPGA采用硬件描述語言實(shí)現(xiàn)俄羅斯方塊游戲,涉及到非常復(fù)雜的時(shí)序控制、程序控制,以及VGA硬件接口,PS2協(xié)議等,對通信協(xié)議、程序設(shè)計(jì)、復(fù)雜數(shù)字系統(tǒng)設(shè)計(jì)有全面的檢驗(yàn)與提升。</p><p> 此次設(shè)計(jì)已經(jīng)實(shí)現(xiàn)了俄羅斯方塊游戲的簡單操作及
78、用戶界面,能實(shí)現(xiàn)游戲的顯示,方塊的隨機(jī)出現(xiàn),下落及左右移動,圖形旋轉(zhuǎn)。</p><p> 本文對俄羅斯方塊游戲的歷史追溯和可行性分析及用戶需求等等方面進(jìn)行了全面的敘說,簡單的分析及介紹對俄羅斯方塊游戲的設(shè)計(jì)起了一定的現(xiàn)實(shí)意義,使得此次設(shè)計(jì)更加具有可操作性。</p><p> 有了這些全面的分析,我確立了自己的設(shè)計(jì)思路,完成了游戲的整個實(shí)驗(yàn)電路圖,各個模塊功能的實(shí)現(xiàn),通過硬件描述語言VH
79、DL來完成此次設(shè)計(jì)。</p><p> 本文我主要介紹了我的設(shè)計(jì)思想,各個模塊的實(shí)驗(yàn)原理。其中重點(diǎn)介紹了PS/2鍵盤控制、VGA視頻顯示這兩個模塊,此次設(shè)計(jì)遇到的難題也是在此。PS/2協(xié)議是一種雙向半雙工串行通信協(xié)議,設(shè)計(jì)復(fù)雜,但在嵌入式系統(tǒng)中有非常廣泛的應(yīng)用。VGA視頻顯示模塊也是此次設(shè)計(jì)較重要的一部分,占據(jù)的比例較大,也是整個設(shè)計(jì)的靈魂,在本文中也有較大的篇幅對其原理及其設(shè)計(jì)思路進(jìn)行了全面而又詳細(xì)的介紹。&
80、lt;/p><p><b> 6.2未來研究展望</b></p><p> 此次設(shè)計(jì)的俄羅斯方塊游戲只是實(shí)現(xiàn)了簡單的用戶操作界面和基本的游戲規(guī)則,鑒于現(xiàn)階段資歷尚淺,對VHDL的掌握有限,很多應(yīng)用沒有在這次設(shè)計(jì)中加入,所以整個設(shè)計(jì)稍顯欠缺,存在很多不足與有待改進(jìn)的地方。</p><p> 如果時(shí)間允許,我希望在不遠(yuǎn)的將來,能對此次設(shè)計(jì)進(jìn)行全面
81、的改進(jìn),完善游戲的用戶體驗(yàn)。同時(shí)計(jì)劃能通過更進(jìn)一步對硬件描述語言VHDL的學(xué)習(xí)來提升本身的編程能力。</p><p> 俄羅斯方塊游戲產(chǎn)生較早,設(shè)計(jì)簡單,各方面的技術(shù)已經(jīng)成熟,但是游戲方式依然保守,從最初的無人不玩到而今的鮮有問津,這種局面的形成很大程度上取決于游戲模式單一,創(chuàng)新不足。傳統(tǒng)的俄羅斯方塊游戲多在掌機(jī)或手機(jī)上,只能一個人游戲,游戲缺少玩家之間的交互,不免單挑乏味。如今用戶熱衷的英雄聯(lián)盟、地下城與勇士
82、等等游戲,符合時(shí)下年輕人的娛樂性,多人分組對戰(zhàn),具有更大的挑戰(zhàn)性和吸引力,從而成功地?fù)碛写笈劢z。鑒于此,俄羅斯方塊游戲應(yīng)該設(shè)計(jì)多人對戰(zhàn)模式,而多人分組對戰(zhàn)俄羅斯方塊游戲在原來的基礎(chǔ)上加入了網(wǎng)絡(luò)互聯(lián),可以支持多人分組對戰(zhàn)。增加了游戲玩家的互動性,這是一種全新的設(shè)計(jì)理念。因此也會使程序的設(shè)計(jì)難度大大增加。但從各方面來看開發(fā)一款別開生面的俄羅斯方塊游戲是一個具有前景的選擇,也將是一個新旅程的開始。</p><p>&
83、lt;b> 致謝</b></p><p> 大學(xué)四年,畢業(yè)設(shè)計(jì)的完結(jié)也意味著我四年學(xué)習(xí)生涯的結(jié)束,有很多的不舍和感觸。首先,從心底感謝我的指導(dǎo)教師,沒有他的悉心指導(dǎo),我想,這次設(shè)計(jì)可能真的完不成。其次,我要感謝我的同學(xué)和學(xué)弟,他們的幫助了我莫大的支持和鼓勵,在這次順利完成畢業(yè)設(shè)計(jì)的旅程中起了至關(guān)重要的作用。一起走過的四年,有陪伴,有成長,一切的一切,因?yàn)橛斜舜说臄y手,四年的生活變得豐富多彩、
84、意義非凡。</p><p> 真的很幸運(yùn),在我大學(xué)四年里遇到唐老師這樣敬業(yè)又負(fù)責(zé)的老師,從之前的代課老師到現(xiàn)在的畢業(yè)設(shè)計(jì)指導(dǎo)老師,唐老師一如既往地兢兢業(yè)業(yè),從不曾懈怠,做事一直有規(guī)劃,有原則,我們的畢業(yè)設(shè)計(jì)進(jìn)度在老師的督促下,一直能順利完成學(xué)校每次下達(dá)的任務(wù),這方面給了我很大的啟發(fā)。唐老師嚴(yán)謹(jǐn)治學(xué)的態(tài)度也一直令我膜拜不已,在我心中留下了深刻的印象,在以后的人生路上,我要學(xué)習(xí)唐老師的求實(shí)精神。在畢業(yè)設(shè)計(jì)實(shí)驗(yàn)的過程
85、中,因?yàn)槲业牟簧鞑僮?,把學(xué)校實(shí)驗(yàn)板給燒壞了,當(dāng)我忐忑不安地等著一頓批評的時(shí)候,唐老師并沒有指責(zé)我,反而是安慰,那次經(jīng)歷,讓我學(xué)會了對別人寬容反而是最好的教育方式,一味地批評責(zé)罵只會適得其反。</p><p> 在此,感謝我的父母對我的支持,沒有他們的支持,我走不到今天。同樣感謝我的同學(xué)和朋友,四年的陪伴,讓我感受到獨(dú)處異鄉(xiāng)也是溫暖無比的。沒有他們,我走不過這一路的風(fēng)風(fēng)雨雨,跌跌撞撞,他們的每一次幫助,每一次支持
86、和理解都讓我倍感欣慰,也堅(jiān)定了我一直往前走的信念。我愛他們,就像愛祖國,愛河流,愛山川。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]楊軍,面向SOPC的FPGA設(shè)計(jì)與應(yīng)用[M]科學(xué)出版社,2012,3</p><p> [2]郝建國,基于NisoⅡ內(nèi)核的FPGA電路系統(tǒng)設(shè)計(jì)[M]電子工業(yè)出版社,2010,4<
87、;/p><p> [3]王剛,基于FPGA的SOPC嵌入式系統(tǒng)設(shè)計(jì)與典型實(shí)例[M]電子工業(yè)出版社,2009,1</p><p> [4]劉延飛,基于Altera FPGA/CPLD的電子系統(tǒng)設(shè)計(jì)及工程實(shí)踐[M]人民郵電出版社,2009年09月</p><p> [5](澳)阿申登著,夏宇聞等譯,Verilog嵌入式數(shù)字系統(tǒng)設(shè)計(jì)教程,北京航空航天大學(xué)出版社,2009
88、年07月</p><p> [6]朱恭生,胡冬琴,EDA工程實(shí)踐入門叢書FPGA/CPLD系統(tǒng)設(shè)計(jì)與應(yīng)用案例,中國電力出版社,2009年07月</p><p> [8]劉福奇,F(xiàn)PGA嵌入式項(xiàng)目開發(fā)實(shí)戰(zhàn),電子工業(yè)出版社,2009年01月</p><p> [9]詹仙寧,VHDL開發(fā)精解與實(shí)例剖析,電子工業(yè)出版社,2009年09月</p><
89、p> [10]徐洋等,基于Verilog VHDL的FPGA設(shè)計(jì)與工程應(yīng)用,人民郵電出版社,2009年10月</p><p> [11]劉昌華,管庶安,數(shù)字邏輯原理與FPGA設(shè)計(jì),北京航空航天大學(xué)出版社,2009年09月</p><p> [12]ALTERA Corporat NIOSⅡSoftware Developer’s Handbook.2009</p>
90、<p> [13]ALTERA Corporat NIOSⅡProcessor Reference Handbook.2009</p><p> [15] Yang,YansiYang.Software design of SD card reder and image processor based on FPGA.Proceedings 2011 International Conferenc
91、e on Mechatronic Science,Electric Engineering and COmputer, MEC 2011,p 1864-1867,2011,Proceedings 2011 International Conference on Mechatronic Science,Electric Engineering and Computer, MEC 2011.</p><p><
92、b> 附錄:</b></p><p><b> PS2.vhd</b></p><p> library IEEE;</p><p> use IEEE.STD_LOGIC_1164.ALL;</p><p> use IEEE.STD_LOGIC_ARITH.ALL;</p>
93、<p> use IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> entity ps2 is</p><p> port (resetn: in std_logic; -- active low reset</p><p> clock: in std_logic;
94、 -- system clock</p><p> ps2_clk: in std_logic; -- PS/2 clock line</p><p> ps2_dta: in std_logic; -- PS/2 data line</p><
95、p> cs: out std_logic;</p><p> ascii: out std_logic_vector(7 downto 0); -- LED outputs</p><p> key:out integer range 0 to 7); </p><p><b> end ps2;</b></p
96、><p> architecture behavioral of ps2 is</p><p> type state_type is (IDLE, START, DATA, PARITY); -- FSM states</p><p> signal ps2_dv: std_logic; -- PS/2 dat
97、a valid</p><p> signal prv_ps2_clk, act_ps2_clk: std_logic; -- auxiliary signals</p><p> signal recdata: std_logic_vector(7 downto 0); -- read data</p><p> signal shift
98、: std_logic; -- enable for shift reg.</p><p> signal n_shift: std_logic; -- auxiliary signal</p><p> signal latch: std_logic;
99、 -- latch read data</p><p> signal n_latch: std_logic; -- auxiliary signal</p><p> signal err: std_logic; -- parity or stop error</p&
100、gt;<p> signal n_err: std_logic; -- auxiliary signal</p><p> signal parset: std_logic; -- preset for parity check</p><p> signal n_pars
101、et: std_logic; -- auxiliary signal</p><p> signal c_state, n_state: state_type; -- current & next states</p><p> signal zero: std_logic;
102、 -- counter is zero</p><p> signal parbit: std_logic; -- odd parity of data</p><p> signal leds:std_logic_vector(7 downto 0);</p><p> signal hit:
103、std_logic;</p><p><b> begin</b></p><p> PS_CLK_SYNC: process(clock, resetn)</p><p><b> begin</b></p><p> if (resetn = '0') then</
104、p><p> prv_ps2_clk <= '1';</p><p> act_ps2_clk <= '1';</p><p> act_ps2_clk <= ps2_clk;</p><p> prv_ps2_clk <= act_ps2_clk;</p><p
105、><b> end if;</b></p><p> end process;</p><p> ps2_dv <= (not act_ps2_clk) and prv_ps2_clk;</p><p> SIPO: process(clock, resetn)</p><p><b>
106、begin</b></p><p> if (resetn = '0') then</p><p> recdata <= (others => '0');</p><p> elsif (clock'event and clock = '1') then</p>&
107、lt;p> if (shift = '1') then</p><p> recdata <= ps2_dta & recdata(7 downto 1);</p><p><b> end if;</b></p><p><b> end if;</b></p>
108、<p> end process;</p><p> COUNT8: process(resetn, clock)</p><p><b> begin</b></p><p> if (resetn = '0') then</p><p> cntval <= (others
109、=> '0');</p><p> elsif (clock'event and clock = '1') then</p><p> if (shift = '1') then</p><p> cntval <= cntval + 1;</p><p><b&
110、gt; end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> zero <= not (cntval(0) or cntval(1) or cntval(2));</p><p> PARITY_CHECK: p
111、rocess(clock, parset)</p><p><b> begin</b></p><p> if (parset = '1') then</p><p> parbit <= '1';</p><p> elsif (clock'event and c
112、lock = '1') then</p><p> if (shift = '1' and ps2_dta = '1') then</p><p> parbit <= not parbit;</p><p><b> end if;</b></p><p>&
113、lt;b> end if;</b></p><p> end process;</p><p><b> begin</b></p><p> if (resetn = '0') then</p><p> c_state <= IDLE;</p><
114、p> shift <= '0';</p><p> latch <= '0';</p><p> err <= '0';</p><p> parset <= '1';</p><p> elsif (clock'event and
115、 clock = '1') then</p><p> c_state <= n_state;</p><p> shift <= n_shift;</p><p> latch <= n_latch;</p><p> err <= n_err;</p><p> p
116、arset <= n_parset;</p><p><b> end if;</b></p><p> end process;</p><p> -- Combinatorial process of control state machine</p><p> FSM_COMB: process(c_
117、state, ps2_dv, ps2_dta, zero)</p><p> begin -- default values</p><p> n_shift <= '0';</p><p> case c_state is -- wait to receive data</
118、p><p> when IDLE => if ((ps2_dv and (not ps2_dta)) = '1') then</p><p> n_state <= START;</p><p> n_parset <= '1';</p><p><b> else</
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于fpga的俄羅斯方塊游戲設(shè)計(jì)畢業(yè)論文
- 俄羅斯方塊游戲畢業(yè)論文
- 俄羅斯方塊游戲java畢業(yè)論文
- 俄羅斯方塊游戲開發(fā)畢業(yè)論文
- 畢業(yè)論文(java游戲俄羅斯方塊)
- 俄羅斯方塊畢業(yè)論文
- 俄羅斯方塊游戲畢業(yè)設(shè)計(jì)
- java俄羅斯方塊畢業(yè)論文
- 畢業(yè)論文----java俄羅斯方塊
- 畢業(yè)論文-java俄羅斯方塊
- 俄羅斯方塊分組對抗游戲的實(shí)現(xiàn)畢業(yè)論文
- 俄羅斯方塊單人游戲的實(shí)現(xiàn)畢業(yè)論文
- 俄羅斯方塊分組對抗游戲的實(shí)現(xiàn)畢業(yè)論文
- 畢業(yè)論文范文——俄羅斯方塊游戲課程設(shè)計(jì)
- 基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲畢業(yè)論文
- 基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲-畢業(yè)論文
- 基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲-畢業(yè)論文
- 畢業(yè)論文——基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲
- 畢業(yè)設(shè)計(jì)---俄羅斯方塊游戲java
- 基于arm俄羅斯方塊聯(lián)機(jī)游戲設(shè)計(jì)
評論
0/150
提交評論