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