版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
文)第頁1.3FPGA發(fā)展趨勢FPGA從電子設(shè)計外圍逐漸成為了電子設(shè)計的核心,其應(yīng)用領(lǐng)域涵蓋了通信、汽車、航空和國防、消費市場、工業(yè)和醫(yī)療等等。最新的工藝制程填平了FPGA和ASIC之間的鴻溝,當(dāng)前的經(jīng)濟形式加速了FPGA向傳統(tǒng)的ASIC領(lǐng)域進軍的步伐,相比FPGA市場份額的迅速攀升,ASIC市場則從1999年開始至現(xiàn)狀已經(jīng)下滑了了一半。DSM制程以后,ASIC的開發(fā)成本不斷上升,F(xiàn)PGA更是成為了眾多設(shè)計者的首選,F(xiàn)PGA的應(yīng)用領(lǐng)域正在不斷擴大。早在2009年可編程市場規(guī)模就已經(jīng)超過30億美元。排除可編程器件供應(yīng)商很難觸及的手機和PC相關(guān)的特定消費類的480億美元ASIC/ASSP市場,可編程業(yè)者可進軍并贏取約280億美元市場規(guī)模中的一些機遇,發(fā)展空間極為廣闊1.4論文簡介該文章首先將介紹設(shè)計所用的基礎(chǔ)理論,包括對FPGA,QuartusII,VerilogHDL的介紹。然后闡述設(shè)計使用的方案,根據(jù)選定的方案進行系統(tǒng)的設(shè)計,為實現(xiàn)所需要的功能,主要將設(shè)計四個模塊,將在第四章中詳細(xì)的進行介紹。完成設(shè)計后,對所設(shè)計的程序進行驗證仿真,并作出設(shè)計總結(jié)。第2章基礎(chǔ)理論介紹2.1FPGA簡介FPGA的全稱是Field-ProgrammableGateArray(現(xiàn)場可編輯門陣列),它其實就是一個能重復(fù)編程的數(shù)字電路芯片。并且FPGA內(nèi)部有大量可配置的邏輯塊,任何FPGA都擁有高達上千個這樣的邏輯塊??梢栽谌魏螒?yīng)用場景中,利用其可重配置布線的電路,去按照所需的要求配置這些邏輯塊。所以在任何給定的任務(wù)中,都需要給出這些電路的邏輯。對于某些特殊的任務(wù),也能利用某些FPGA的特性,因此在配置好的芯片中的某一部分,都能用自己設(shè)計的數(shù)字邏輯去做一些事。而與此同時,在芯片的另一邊通過真正的并行操作的配置,還能去完成截然不同的工作。在某些單點控制應(yīng)用中,這是顯得尤為重要的。圖2-1FPGA架構(gòu)2.2QuartusII簡介QuartusII是在FPGA的開發(fā)設(shè)計中使用及其廣泛的開發(fā)軟件。因為其擁有強大多樣的功能,包括可進行設(shè)計輸入,HDL綜合,布線布局,仿真和下載硬件測試等,所以可通過使用QuartusII來完成一系列完整的FPGA設(shè)計流程。QuartusII不僅可在Linux和Unix上使用,同樣也支持更加大眾化的Windows系統(tǒng),極大地增加了QuartusII的適用性。QuartusII完全支持Altera的IP核,用戶可通過使用QuartusII來調(diào)用LPM/MegaFunction模塊庫,來直接使用設(shè)計成熟的功能模塊,這使得QuartusII變得更加的簡單方便,能有效地提高設(shè)計效率。除此之外,QuartusII在DSPBuilder工具的支持之下,可以與Matlab等軟件相結(jié)合以更高效的方式實現(xiàn)各種各樣的DSP應(yīng)用系統(tǒng)。QuartusII是一種綜合性的開發(fā)軟件,可以實現(xiàn)Altera的片上可編程系統(tǒng)的開發(fā),能夠完成系統(tǒng)級設(shè)計,嵌入式軟件開發(fā),可編程邏輯設(shè)計等功能。相比于上一代的設(shè)計軟件,QuartusII支持更豐富類型的器件,對圖形界面也進行了優(yōu)化,還包含有眾多諸如SignalTapII,ChipEditor,RTLViewer等輔助設(shè)計工具,將片上可編程系統(tǒng)的開發(fā)和HardCopy的設(shè)計集成于一體,并且繼承了上一代友好的操作界面和簡單的操作模式。由于極為強大豐富的設(shè)計能力和直觀易用的接口,QuartusII目前是最受數(shù)字系統(tǒng)設(shè)計者歡迎的可編程邏輯設(shè)計軟件。圖2-2QuartusII設(shè)計流程圖2.3VerilogHDL簡介VerilogHDL全稱為硬件描述語言(HardwareDiscriptionLanguage,HDL),可以用文本的方式來數(shù)字系統(tǒng)硬件結(jié)構(gòu)和行為進行描述,是一種用形式化方法來描述數(shù)字電路和系統(tǒng)的語言,設(shè)計者可以從上層到下層逐漸描述自己的設(shè)計思想,簡單來說,就是可以將一個復(fù)雜的數(shù)字電路系統(tǒng)分為多個層次,并且可以逐個層次地進行仿真和驗證,然后把所設(shè)計地模塊組合通過綜合工具轉(zhuǎn)變?yōu)殚T級網(wǎng)絡(luò)表,最后用布線布局工具將網(wǎng)絡(luò)表體現(xiàn)為具體的電路結(jié)構(gòu)。由于VerilogHDL是通過文本形式進行描述,所以可以將整個系統(tǒng)劃分成多個子模塊,提高了開發(fā)的效率,同時也有著更強的通用性和可移植性。VerilogHDL是由C語言發(fā)展而來的,與C語言相比,VerilogHDL不僅具備了C語言簡潔、易用的特點,VerilogHDL還能夠通過wire型變量配合驅(qū)動結(jié)構(gòu)對網(wǎng)線的互連進行描述,而C語言是沒有可供直接用于表示模塊間互連的變量的。C語言是串行結(jié)構(gòu),因此對于描述硬件之間的并發(fā)特性是難以實現(xiàn)的,一般來說,在CPU的高速緩沖隊列中,C語言的機器指令都是按順序進行的,而VerilogHDL則可以有效地描述并行地硬件系統(tǒng)。除此之外,VerilogHDL定義了時間度量,在仿真代地過程中可以通過時間度量以及設(shè)定的信號周期關(guān)系來進行對時間關(guān)系的描述,而C程序在運行的時候是沒有一個嚴(yán)格的時間概念的,程序的運行完全在于處理器本身的性能。不同模塊對應(yīng)的硬件電路在運行的過程中是并行的,并且有著高層次和低層次的分別,高層模塊可以對底層的模塊進行調(diào)用,以此可以實現(xiàn)更多更復(fù)雜的功能。如果要將所有的功能模塊連接成一個完整的系統(tǒng),則需要一個模塊將所有的子模塊連接起來,這一模塊也被稱為頂層模塊(TopModule)。為了便于管理,一般一個.v文件實現(xiàn)一個模塊模塊的基本結(jié)構(gòu)一個完整的VerilogHDL模塊結(jié)構(gòu)如下所述:modulemodule_name(port_list)//模塊開始//聲明各種變量、信號reg//寄存器wire//網(wǎng)線parameter//參數(shù)input//輸入信號output//輸出信號inout//輸入輸出信號function//函數(shù)task//任務(wù)//程序代碼initialassignmentalwaysassignmentmoduleassignmentgateassignmentUDPassignmentcontinuousassignmentendmodule//模塊結(jié)束在一般的設(shè)計情況中,上述的結(jié)構(gòu)特征不一定會全部使用,更加基本模塊結(jié)構(gòu)如下,可以滿足一般模塊設(shè)計module<模塊名>(<端口列表>)<定義><模塊條目>endmodule其中,<模塊名>是模塊唯一性的標(biāo)識符;<端口列表>定義了和其余模塊進行通信鏈接的信號,根據(jù)數(shù)據(jù)流方向可以分為輸入、輸出和雙向端口3類;<定義>用于指定數(shù)據(jù)對象為寄存器型、存儲器型、網(wǎng)線型及過程塊;<模塊條目>可以是initial結(jié)構(gòu)、always結(jié)構(gòu)、連續(xù)賦值或模塊實例。端口說明模塊端口是指模塊與外界交互信息的接口,有以下三種類型:input:輸入接口,模塊從外界讀取數(shù)據(jù)的接口,在模塊內(nèi)不可寫。output:輸出接口,模塊往外界送出數(shù)據(jù)的接口,在模塊內(nèi)不可讀。inout:輸入/輸出端口,也稱為雙向端口,可讀取數(shù)據(jù)也可送出數(shù)據(jù),雙向流動。上述3類端口中,input端口只能是wire數(shù)據(jù)類型;output端口即可是wirel類型,也可為reg類型;inout只能申明為wire類型。2.4本章小結(jié)主要設(shè)計方案即為利用QuartusII軟件進行VerilogHDL代碼編輯,進而實現(xiàn)在FPGA上運行小游戲程序,將在下一章進行詳細(xì)的說明。第3章系統(tǒng)方案3.1系統(tǒng)方案設(shè)計與論證根據(jù)設(shè)計要求,在進行方案設(shè)計的時候可以確定必須包含VGA顯示模塊、小球移動模塊、反彈模塊,失敗判定模塊,擋板控制模塊,所以根據(jù)以上的模塊主要制定了如下方案:為實現(xiàn)在fpga上進行游玩游戲,選用一640*480VGA屏幕作為顯示器,通過調(diào)用ROM編寫程序,使小球可在VGA屏幕上進行跳動。用戶可通過左右兩個控制按鈕對擋板進行控制。如果不能接住小球,游戲?qū)⒔Y(jié)束,用戶可通過一復(fù)位按鈕以重新開始游戲3.2總體方案設(shè)計思想該小游戲程序的構(gòu)成主要包含了幾個部分,其中第一部分是VGA顯示模塊,只有實現(xiàn)了顯示功能,才可以進行小游戲;第二部分是按鍵模塊,其作用是用來控制擋板的左右移動以及對游戲進行復(fù)位;第三部分是小球移動模塊,其中包含了小球在一個方向上的移動以及小球碰到墻壁或擋板時反彈兩個功能。用戶通過按鍵對擋板進行控制,用擋板接住小球,當(dāng)小球與擋板接觸時將反彈,并與墻壁碰撞后再次反彈,如此循環(huán)。如果沒有接到小球,游戲?qū)⒔Y(jié)束。該系統(tǒng)的各個模塊的設(shè)計將會在第三章中進行詳細(xì)的介紹。3.3總體方案設(shè)計框圖本系統(tǒng)使用FPGA進行系統(tǒng)控制和調(diào)用,實現(xiàn)在VGA顯示器上進行圖像顯示、通過ROM調(diào)用程序,實現(xiàn)在屏幕上顯示小球跳動,并可以對擋板進行控制,接住小球,進行游戲的游玩。總體方案設(shè)計框圖如圖3-1所示。圖3-1總體方案設(shè)計框圖第4章系統(tǒng)設(shè)計4.1總體設(shè)計以及功能描述4.1.1總體設(shè)計描述選擇VGA顯示器640*480@60Hz;,選擇所需要的FPGA開發(fā)板選擇電路板上按鍵分別設(shè)定為左右控制及復(fù)位控制;通過FPGA將數(shù)據(jù)傳輸?shù)絍GA顯示器上,進行小游戲顯示;調(diào)用程序?qū)崿F(xiàn)小游戲功能4.1.2功能描述(1)該設(shè)計是一反彈球小游戲,可通過FPGA隨時進行小游戲游玩,通過按鍵與屏幕進行交互,體驗游戲的樂趣。;(2)小球會從初始位置開始移動,碰到墻壁或擋板時會進行反彈。(3)玩家可通過左右兩個按鍵對擋板進行控制,用擋板接住小球,以繼續(xù)進行游戲。(4)當(dāng)小球接觸底邊時,判定為玩家沒有接到小球,屏幕會變?yōu)楹谏?,代表游戲結(jié)束。(5)按下復(fù)位鍵時,擋板和小球都會回到初始的位置,以實現(xiàn)重新開始游戲。4.2系統(tǒng)模塊設(shè)計4.2.1VGA顯示模塊VGA是IBM公司在1987年推出的一種視頻傳輸標(biāo)準(zhǔn)。它具有分辨率高,顯示速度快,顏色豐富等特點,在彩色顯示領(lǐng)域得到了極為廣泛的應(yīng)用。對于VGA顯示器而言,圖像都是由一個個像素點組成的,在圖像的顯示過程中,首先會從左向右進行行掃描,在掃描的過程中,會對一行的每一個像素進行分別賦值,即可使每一個像素點顯示不同的顏色。在一行掃描結(jié)束后,會回到下一行的開始,繼續(xù)進行掃描。一幀圖像掃描結(jié)束后,會回到屏幕的左上角,從新開始下一幀的圖像掃描。每掃描完一行即為行掃描周期,每掃描完一幀為場掃描周期。在一個行掃描周期中,使用行同步信號進行同步,在場掃描周期中即用場同步信號進行同步。圖4-1VGA同步時序如圖所示,一個行掃描周期分為a,b,c,d四個部分,在一個行掃描周期開始的時候,行同步周期處于低電平,這個階段為同步階段。同步階段后,為顯示后沿,顯示后沿是顯示一行圖像之前的準(zhǔn)備過程,在這個過程中沒有圖像數(shù)據(jù)。在顯示后沿結(jié)束后,進入有效數(shù)據(jù)段,這就是在顯示器上的一行圖像,在一行圖像結(jié)束后,進入顯示前沿,同樣的,在顯示前沿中也沒有圖像數(shù)據(jù)。在一個行掃描周期中可以完成一行圖像的顯示,其中a,b,c,d四段的基本單位是一個像素時鐘,即完成一個像素點顯示所需要的時間。場同步時序與行同步時序類似,在此不過多贅述。不過需要注意的是,行同步時序的基本單位是完成一個像素點所需要的時間,而場同步時序的基本單位是完成一行圖像顯示所需要的時間。我們選用的VGA顯示器分辨率為640*480,也就是說,一行有640個像素點,而每一幀有480行。為使圖像能夠正確地在VGA顯示器上進行顯示,根據(jù)所選擇的VGA顯示器,確定分辨率為640*480,刷新頻率為60Hz。已經(jīng)知道,VGA的顯示都是在像素時鐘驅(qū)動下進行的,并且需要一個行同步信號和場同步信號,最后需要輸出的圖像數(shù)據(jù)。由此可以確定,設(shè)定一時鐘信號作為VGA驅(qū)動時鐘。然后設(shè)置一復(fù)位信號,復(fù)位信號只有在時鐘穩(wěn)定后拉高,停止復(fù)位過程。設(shè)置三個輸出分別為行同步信號,場同步信號,以及顏色信號,通過控制這三個信號以一定的時序輸出,進而驅(qū)動VGA顯示器顯示圖像。最后設(shè)定三個信號確定像素點的橫坐標(biāo)和縱坐標(biāo),根據(jù)這兩個坐標(biāo)指定每個像素點的顏色數(shù)據(jù)。根據(jù)使用手冊確定所需要的參數(shù),見圖3-2。設(shè)置兩個計數(shù)器分別為行計數(shù)器和場計數(shù)器,系統(tǒng)復(fù)位的時候,行計數(shù)器和場計數(shù)器清零,復(fù)位結(jié)束后,判斷行計數(shù)器是否小于行掃描周期,當(dāng)小于的時候,計數(shù)器加一,等于行掃描周期的時候計數(shù)器清零,從而完成在行掃描過程中對像素時鐘進行計數(shù)。場計數(shù)器同理,在此不過多贅述。通過計數(shù)器,即可指定行場同步信號。定義兩個變量分別為使能信號和數(shù)據(jù)請求信號,使能信號通過計數(shù)器判斷同步過程中是否處于有效數(shù)據(jù)段,若使能信號為高,即可將像素數(shù)據(jù)傳入數(shù)據(jù)線。數(shù)據(jù)請求信號與使能信號類似,但需要注意的是,在判斷行計數(shù)器的時候,需對計數(shù)器的值進行減1操作,因為從外部模塊(VGA顯示模塊)從接收到請求信號開始,到有效數(shù)據(jù)輸出,中間需要一個時鐘周期,所以數(shù)據(jù)請求信號需要提前一個時鐘周期。通過請求信號,即可對像素點坐標(biāo)進行賦值。圖4-2VGA時序標(biāo)準(zhǔn)4.2.2小球移動及反彈模塊為使小球可在VGA顯示器上進行移動,通過取小球上一點作為小球坐標(biāo),根基該坐標(biāo)加上小球的參數(shù)(如半徑或直徑),即可確定小球的位置。定義墻壁寬度為40(意味著墻壁寬度占40個像素點),定義小球半徑為20。最后根據(jù)RGB參數(shù)定義藍(lán),白,黑三種顏色。定義寄存器分別代表小球上一點的橫縱坐標(biāo),時鐘分頻計數(shù)器(設(shè)定為10ms清零),小球移動水平方向和豎直方向(為1的時候分別為向右和向下,為0時相反)。定義變量為小球移動的使能信號,通過使能信號判斷時鐘分頻計數(shù)器是否等于10ms,當(dāng)計數(shù)器等于10ms時,可產(chǎn)生一個使能脈沖信號,即可實現(xiàn)控制小球的移動速度。根據(jù)所取的小球坐標(biāo),判斷小球是否接觸到墻壁或擋板,當(dāng)小球與墻壁或擋板接觸時,根據(jù)對應(yīng)的接觸位置將小球的水平或豎直方向取反,否則保持移動的方向。設(shè)置復(fù)位信號,當(dāng)復(fù)位信號觸發(fā)時,將小球回到設(shè)定的初始位置。根據(jù)使能脈沖信號,當(dāng)使能脈沖信號發(fā)出時,將小球的橫縱坐標(biāo)進行加1或減1操作,取決于小球移動方向。如果沒有使能脈沖信號則小球坐標(biāo)不作改變。最后根據(jù)判斷像素點的坐標(biāo),分別繪制墻壁,小球,背景為藍(lán)色,黑色,白色。4.2.3擋板控制模塊在VGA顯示區(qū)域下方,設(shè)置一擋板,定義擋板參數(shù)長為100,寬為20。設(shè)置寄存器代表擋板上一點的橫縱坐標(biāo)。設(shè)置復(fù)位信號,當(dāng)復(fù)位信號觸發(fā)時擋板回到設(shè)定的初始位置。定義兩個按鍵分別為左按鍵和右按鍵,當(dāng)左按鍵按下時,產(chǎn)生信號使當(dāng)板的橫坐標(biāo)減1,即可實現(xiàn)通過按鍵控制擋板向左方移動,右按鍵同理,否則擋板坐標(biāo)保持不變。最后設(shè)置擋板顏色為紅色。需要注意的是,設(shè)定按鍵時需要按鍵消抖子模塊,因為一般來說,通常使用的按鍵開關(guān)均為機械彈性開關(guān),當(dāng)機械觸點閉合或斷開時,由于機械彈性作用,按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會在一瞬間斷開,而是會在閉合或斷開時產(chǎn)生一連串的抖動,這可能會導(dǎo)致程序?qū)Π存I閉合或斷開時產(chǎn)生多余的誤判。根據(jù)需要,定義時鐘計數(shù)器計20ns(按鍵抖動最大時間)。設(shè)置通過設(shè)置寄存器將按鍵輸入信號進行延時處理,待抖動結(jié)束后輸出脈沖信號代替按鍵輸入信號即可實現(xiàn)按鍵消抖。4.2.4失敗判定模塊與小球碰撞模塊類似,當(dāng)小球接觸到VGA屏幕下邊界時,則將全屏幕設(shè)置為黑色,代表游戲失敗。如果小球與擋板接觸,則小球豎直移動方向取反。4.3本章小結(jié)本章講述了如何根據(jù)需求進行代碼編輯,主要對4個主模塊的設(shè)計思路進行描述,總體思路為設(shè)置好所需參數(shù),然后根據(jù)實際需求逐步完善各個模塊代碼,最終完成程序代碼部分的編輯。調(diào)試與仿真5.1VGA模塊仿真按下復(fù)位按鈕后,行場同步計數(shù)器開始計數(shù),行場同步信號根據(jù)計數(shù)器數(shù)據(jù)開始進行同步,并根據(jù)所在的坐標(biāo)對像素點進行賦值,即可實現(xiàn)在VGA上顯示所需要的圖像。圖5-1VGA顯示仿真圖5-2VGA顯示仿真(放大)5.2移動碰撞模塊仿真按下復(fù)位按鈕后,每250000個系統(tǒng)時鐘產(chǎn)生一個使能信號,為方便仿真,仿真時取25個系統(tǒng)時鐘,當(dāng)使能信號產(chǎn)生時,小球朝對應(yīng)的方向移動一個像素單位,通過調(diào)整使能信號的產(chǎn)生頻率即可對小球速度進行調(diào)整。小球初始朝右下方向移動,當(dāng)移動到墻壁位置時,根據(jù)所在的位置對相應(yīng)的速度進行取反(碰到左右墻壁時水平方向速度取反,碰到上下墻壁時垂直方向速度取反)。圖5-3小球與底部碰撞圖5-4小球與右墻碰撞圖5-5小球與上方碰撞圖5-6小球與左墻碰撞5.3按鍵控制模塊按下按鍵后,產(chǎn)生模擬震動,計時器開始計數(shù),此時不產(chǎn)生按鍵輸入的信號,待震動結(jié)束后(計時器計滿10ms),產(chǎn)生按鍵信號進行輸出。圖5-7按鍵控制1.請回學(xué)校加入實物的結(jié)果并簡要分析1.請回學(xué)校加入實物的結(jié)果并簡要分析2.請在1-5章加入本章總結(jié)5.4本章小結(jié)本章節(jié)對設(shè)計的VerilogHDL進行了仿真和實物的制作。首先通過仿真對所需功能進行驗證,然后將程序代碼下載到實驗用FPGA電路板上進行實物驗證。第6章設(shè)計總結(jié)在本次的畢業(yè)設(shè)計中,首先經(jīng)歷了選題方案的設(shè)定再到程序的編寫,,在經(jīng)歷這一過程的時候遇到了很多的困難,之前所學(xué)知識不夠牢固以及專業(yè)知識不強等,最終都被逐漸克服,經(jīng)過種種努力最終解決了各種問題,完成了這一設(shè)計。在經(jīng)歷這一系列事情的過程中本人更加認(rèn)識到了自身的不足——實戰(zhàn)經(jīng)驗欠缺。當(dāng)然也接著這一機會我得到了一定的鍛煉,更加認(rèn)識到了一定要將理論與實際相結(jié)合。因為時間有限,所以還有一些設(shè)想沒有實現(xiàn),期待以后有機會能夠進行更加深入的研究。準(zhǔn)備要進行畢業(yè)之前最后一項任務(wù)--畢業(yè)論文,從設(shè)計論文框架到最終論文的完成。寫論文是一個反復(fù)的過程,需要多次的改進和修改,不斷地去查閱很多相關(guān)的文獻,再進行總結(jié)。在本次畢業(yè)設(shè)計的過程中,準(zhǔn)備寫開題報告之后就開始著手于資料文獻的收集。對于很多的網(wǎng)絡(luò)資料不知道如何下手。通過參考網(wǎng)絡(luò)上前輩的論文以及和同學(xué)之間討論,然后才有明確的思路開始著手進行初稿的編寫。在剛開始入手的時候其實總體來說邏輯還是有些亂的,沒有一個系統(tǒng)的思路,基本都是想到什么就寫什么,所以在寫了一部分之后回過頭來看發(fā)現(xiàn)還是有些亂的,這樣下來毫無疑問最終肯定不能夠達到要求,只有通過不斷的修改和斟酌,才最終完成論文寫作。畢業(yè)設(shè)計是大學(xué)幾年學(xué)習(xí)的一個總結(jié),也是檢驗學(xué)習(xí)效果的一種方式,是每一個畢業(yè)班學(xué)生都會經(jīng)歷的一個過程。畢業(yè)設(shè)計不僅能體現(xiàn)一個學(xué)生的學(xué)習(xí)水平,其實也是一個進一步提高自己的過程。完成畢業(yè)設(shè)計的過程需要堅持不懈的耐力,因為在實驗的過程中沒有人能一蹴而就,必須經(jīng)歷不斷的試錯然后不斷的改進;也需要認(rèn)真嚴(yán)謹(jǐn)?shù)膶W(xué)科態(tài)度,因為在撰寫論文的過程中,不可避免的會遇到我們所不了解的知識,這個時候如果沒有嚴(yán)謹(jǐn)?shù)膶W(xué)科態(tài)度,只是為了敷衍了事,那一定是行不通的;更需要不恥下問的精神,因為知識結(jié)構(gòu)不完整,能力有限,不懂的東西肯定是存在的,只有不恥于詢問,虛心求教才能加快完成論文的速度。參考文獻[1]何志敏,謝杰.基于FPGA的貪吃蛇游戲設(shè)計[J].現(xiàn)代電子技術(shù),2014,37(18):105-109[2]曹莉凌,劉雨青.基于FPGA“乒乓球比賽游戲機”的設(shè)計[J].現(xiàn)代電子技術(shù),2009,21:131-134[3]楊金.基于FPGA的VGA游戲設(shè)計[J].數(shù)字技術(shù)與應(yīng)用,2012,4:171-172[4]中國網(wǎng)絡(luò)游戲行業(yè)商業(yè)模式創(chuàng)新與投資預(yù)測分析報告[DB/OL].(2018-05-05)./industry/201805/637321.html[5]SamirPalnitkar.VerilogHDL數(shù)字設(shè)計與綜合[D].電子工業(yè)出版社,2015.[6]夏宇聞,韓彬.Verilog數(shù)字系統(tǒng)設(shè)計教程[D].北京航空航天大學(xué)出版社,2017[7]王忠禮,王秀琴,夏洪洋.VerilogHDL數(shù)字系統(tǒng)設(shè)計入門與應(yīng)用實例[D].清華大學(xué)出版社,2019.[8]天野英晴.FPGA原理和結(jié)構(gòu)[D].人民郵電出版社,2019.[9]韓彬.FPGA設(shè)計技巧與案例開發(fā)詳解(第三版)[D].電子工業(yè)出版社,2019.[10]于斌.Modelsim電子系統(tǒng)分析與仿真(第三版)[D].電子工業(yè)出版社,2019.[11]高敬鵬,武超群.基于VerilogHDL的數(shù)字系統(tǒng)設(shè)計快速入門[D].電子工業(yè)出版社,2019.致謝伴隨著這篇論文的完成,我的大學(xué)生活也最終結(jié)束了,回想初入學(xué)校的情境,當(dāng)初意氣風(fēng)發(fā),大學(xué)幾年時光匆匆而過,在學(xué)校學(xué)習(xí)的這幾年里自己也成長了很多,從初入大學(xué)的懵懵懂懂不知事,到現(xiàn)在即將步入職場的我,作為一名2020屆的應(yīng)屆畢業(yè)生,我更應(yīng)該感謝的是學(xué)校給了我良好的學(xué)習(xí)環(huán)境和氛圍,老師給予的悉心栽培和幫助。在成都工業(yè)學(xué)院學(xué)習(xí)的這幾年里在我人生中有著重大的意義,期間我不斷地接受新思想不斷的成長,在高中畢業(yè)還對社會上的一切都未知的我來到了成都工業(yè)學(xué)院,在這里我曾在運動場上揮灑汗水,也曾在圖書館內(nèi)安靜讀書,在學(xué)校和老師的教誨之下,我順利完成了學(xué)業(yè)即將順利畢業(yè),在學(xué)校學(xué)習(xí)的幾年時光有我太多美好的回憶。在我進行畢業(yè)設(shè)計的制作中和論文的寫作中,有很多不懂和不會的東西,在這里特別感謝我的畢業(yè)設(shè)計指導(dǎo)老師楊梅老師和呂晉川學(xué)長,老師和學(xué)長對于我不了解不明白的地方進行了指導(dǎo),讓我對這個設(shè)計的整體思路和設(shè)計方案實現(xiàn)了從無到有,有了初步的思路加上老師的耐心指導(dǎo),才能讓我在這么短的時間內(nèi)完成了制作,讓自己的動手能力有了提高。感謝老師的耐心指導(dǎo),感謝學(xué)長的支持和幫助,因為有了老師和學(xué)長的幫助才能讓我在設(shè)計程序以及書寫論文的時候更加順暢,幫助我轉(zhuǎn)換心情,讓我更快的進步。在最后我要特別感謝我的大學(xué),因為有你這些年的指導(dǎo)我才對未來充滿了信心,讓我明確了自己前進的方向。附錄//VGA顯示模塊代碼moduleVGA(inputsclk,//驅(qū)動時鐘 inputs_rst_n,//復(fù)位信號 outputvga_hs,//行同步信號 outputvga_vs,//場同步信號output[15:0]vga_rgb,//紅綠藍(lán)三原色輸出 ); wire[9:0]pixel_xpos;//像素點橫坐標(biāo) wire[9:0]pixel_ypos;//像素點縱坐標(biāo) wire[15:0]pixel_data;//像素點數(shù)據(jù)parameterh_sync=10'd96;//行同步parameterh_back=10'd48;//行顯示后沿parameterh_disp=10'd640;//行有效數(shù)據(jù)parameterh_front=10'd16;//行顯示前沿parameterh_total=10'd800;//行掃描周期parameterv_sync=10'd2;//場同步parameterv_back=10'd33;//場顯示后沿parameterv_disp=10'd480;//場有效數(shù)據(jù)parameterv_front=10'd10;//場顯示前沿parameterv_total=10'd525;//場掃描周期reg[9:0]h_cnt;reg[9:0]v_cnt;wirevga_en;wiredata_req;//VGA行場同步信號assignvga_hs=(h_cnt<=h_sync-1'b1)?1'b1:1'b0;assignvga_vs=(v_cnt<=v_sync-1'b1)?1'b1:1'b0;//使能RGB565數(shù)據(jù)輸出assignvga_en=(((h_cnt>=h_sync+h_back)&&(h_cnt<h_sync+h_back+h_disp))&&((v_cnt>=v_sync+v_back)&&(v_cnt<v_sync+v_back+v_disp))) ?1'b1:1'b0; //RBG565數(shù)據(jù)輸出 assignvga_rgb=vga_en?pixel_data:'d0;//請求像素點顏色數(shù)據(jù)輸入assigndata_req=(((h_cnt>=h_sync+h_back-1'b1)&&(h_cnt<h_sync+h_back+h_disp-1'b1))&&((v_cnt>=v_sync+v_back)&&(v_cnt<v_sync+v_back+v_disp))) ?1'b1:1'b0;//像素點坐標(biāo) assignpixel_xpos=data_req?(h_cnt-(h_sync+h_back-1'b1)):10'd0;assignpixel_ypos=data_req?(h_cnt-(v_sync+v_back-1'b1)):10'd0;//行計數(shù)器對像素時鐘計數(shù)always@(posedgesclkornegedges_rst_n)beginif(~s_rst_n) h_cnt<='d0;elsebeginif(h_cnt<h_total-1'b1) h_cnt<=h_cnt+1'b1; else h_cnt<=10'd0; endend //場計數(shù)器對行計數(shù)always@(posedgesclkornegedges_rst_n)beginif(~s_rst_n)v_cnt<='d0;elseif(h_cnt==h_total-1'b1)begin if(v_cnt<v_total-1'b1) v_cnt<=v_cnt+1'b1; else v_cnt<=10'd0; endendassignvga_hs=(h_cnt<=h_sync-1'b1)?1'b1:1'b0;assignvga_vs=(v_cnt<=v_sync-1'b1)?1'b1:1'b0;Endmodule//小球移動及反彈模塊代碼modulemove(inputsclk,//驅(qū)動時鐘 inputs_rst_n,//復(fù)位信號 outputvga_hs,//行同步信號 outputvga_vs,//場同步信號 output[15:0]vga_rgb//紅綠藍(lán)三原色輸出 );wire[15:0]pixel_data;//像素點數(shù)據(jù)wire[9:0]pixel_xpos;//像素點橫坐標(biāo)wire[9:0]pixel_ypos;//像素點縱坐標(biāo)parameterh_disp=10'd640;//行有效數(shù)據(jù)parameterv_disp=10'd480;//場有效數(shù)據(jù)localparamwall_w=10'd40;//墻壁厚度localparamball_r=10'd40;//小球半徑localparamblue=16'b00000_000000_11111;localparamwhite=16'b11111_111111_11111;localparamblack=16'b00000_000000_00000;reg[9:0]ball_x;//小球橫坐標(biāo)reg[9:0]ball_y;//小球縱坐標(biāo)reg[21:0]div_cnt;//時鐘分頻計數(shù)器regh_direct;//小球水平移動方向,1:右移0:左移regv_direct;//小球豎直移動方向,1:下移0:上移wiremove_en;//小球移動使能信號assignmove_en=(div_cnt==22'd250000-1'b1)?1'b1:1'b0;//通過對VGA驅(qū)動時鐘計數(shù),實現(xiàn)時鐘分頻always@(posedgesclkornegedges_rst_n)begin if(~s_rst_n) div_cnt<=22'd0; elsebegin if(div_cnt<22d'250000-1'b1)div_cnt<=div_cnt+1'b1;elsediv_cnt<=22'd0;//計數(shù)達10ms后清零endend//當(dāng)小球移動到墻壁時,改變移動方向always@(posedgesclkornegedges_rst_n)beginif(~s_rst_n)h_direct<=1'b1;//小球初始水平向右移動v_direct<=1'b1;//小球初始豎直向下移動 end elsebegin if(ball_x==wall_w-1'b1) h_direct<=1'b1;//到達左墻壁時,水平向右 else if(ball_x==h_disp-wall_w-ball_r) h_direct<=1'b0;//到達右墻壁時,水平向左 else h_direct<=h_direct; else if(ball_y==wall_w-1'b1) v_direct<=1'b1;//到達上邊界時,豎直向下 else v_direct<=v_direct; else if(ball_y==(22'd460-ball_r)&&(ball_x>=board_xpos-ball_r||ball_x<=board_xpos+board_l-ball_r)) v_direct<=1'b0;//小球遇到擋板時,豎直向上 else v_direct<=v_direct; endend //根據(jù)小球移動方向,改變其橫縱坐標(biāo)always@(posedgesclkornegedges_rst_n)begin if(~s_rst_n)begin ball_x<=22'd200;//小球初始位置橫坐標(biāo) ball_y<=22'd200;//小球初始位置縱坐標(biāo) end elseif(move_en)begin if(h_direct) ball_x<=ball_x+1'b1;//方塊向右移動 else ball_x<=ball_x-1'b1;//方塊向左移動 if(v_direct) ball_y<=ball_y+1'b1;//方塊向下移動 else ball_y<=ball_y-1'b1;//方塊向上移動 end elsebegin ball_x<=ball_x; ball_y<=ball_y; end end//給不同的區(qū)域繪制不同的顏色 always@(posedgesclkornegedges_rst_n)beginif(~s_rst_n) pixel_data<=black;//復(fù)位后顯示黑色 elsebegin if((pixel_xpos<wall_w)||(pixel_xpos>=h_disp-wall_w) ||(pixel_ypos<wall_w)) pixel_data<=blue;//墻壁顯示藍(lán)色 else if((pixel_xpos>=ball_x)&&(pixel_xpos<ball_x+ball_r) &&(pixel_ypos>=ball_y)&&(pixel_ypos<ball_y+ball_r)) pixel_data<=black;//小球顯示黑色 else pixel_data<=white;//背景顯示白色 end endEndmodule//擋板控制模塊代碼moduleboard(inputsclk,//驅(qū)動時鐘 inputs_rst_n,//復(fù)位信號 inputkey_left,//左按鍵 inputkey_right,//右按鍵outputvga_hs,//行同步信號 outputvga_vs,//場同步信號 output[15:0]vga_rgb//紅綠藍(lán)三原色輸出);wire[15:0]pixel_data;//像素點數(shù)據(jù)wire[9:0]pixel_xpos;//像素點橫坐標(biāo)wire[9:0]pixel_ypos;//像素點縱坐標(biāo)parameterh_disp=10'd640;//行有效數(shù)據(jù)parameterv_disp=10'd480;//場有效數(shù)據(jù)localparamwall_w=10'd40;//墻壁厚度localparamboard_l=10'd100;//擋板長度localparamboard_w=10'd20;//擋板厚度localparamred=16'b11111_000000_00000;reg[9:0]board_xpos;//擋板橫坐標(biāo)reg[9:0]board_ypos;//擋板縱坐標(biāo)//擋板控制always@(posedgesclkornegedges_rst_n)begin if(~s_rst_n)begin board_xpos<=22'd200; board_ypos<=22'd460;//擋板初始位置 end elseif(key_left)begin if(board_xpos>=wall_w) board_xpos<=board_xpos-1'b1;//按下左鍵時,擋板左移 else board_xpos<=board_xpos; end elseif(key_right)begin if(board_xpos<h_disp-wall_w-board_l) board_xpos<=board_xpos+1'b1;//按下右鍵時,擋板右移 else board_xpos<=board_xpos; end endalways@(posedgesclkornegedges_rst_n)beginif(~s_rst_n) pixel_data<=black;//復(fù)位后顯示黑色 elsebeginif((pixel_xpos>=board_xpos)&&(pixel_xpos<board_xpos+board_l) &&(pixel_ypos>=board_ypos)&&(pixel_ypos<board_ypos+board_w)) pixel_data<=red;//擋板為紅色 endendEndmodule//按鍵消抖模塊代碼module key_debaunce( input sclk , input s_rst_n , input key_in , output reg key_flag);localparam CNT_10MS = 'd499999;reg key_in_r1 ;reg key_in_r2 ;reg [18:0] cnt_10ms ;reg flag ;wire key_pos ;always @(posedgesclk)begin key_in_r1 <= key_in; key_in_r2 <= key_in_r1;endalways @(posedgesclkornegedges_rst_n)begin if(~s_rst_n) cnt_10ms <= 'd0; elseif(cnt_10ms==CNT_10MS) cnt_10ms <=
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年環(huán)境評估(土壤環(huán)境質(zhì)量評估)試題及答案
- 2025年中職(醫(yī)學(xué)檢驗)血常規(guī)檢測實務(wù)綜合測試題及答案
- 2025年大學(xué)(測繪科學(xué)與技術(shù)專業(yè))地理信息系統(tǒng)基礎(chǔ)試題及答案
- 2025年大學(xué)第四學(xué)年(工程項目融資)融資方案設(shè)計階段測試題及答案
- 2025年大學(xué)美術(shù)學(xué)(美術(shù)學(xué)概論)試題及答案
- 2025年大學(xué)安全教育(交通安全知識)試題及答案
- 2025年中職(市場開發(fā)實務(wù))客戶開發(fā)流程階段測試試題及答案
- 2025年中職船舶工程技術(shù)(船舶建造工藝)試題及答案
- 2025年中職道路橋梁工程技術(shù)(路橋施工技術(shù))試題及答案
- 2025年大學(xué)臨床醫(yī)學(xué)(臨床診療技術(shù))試題及答案
- 服裝代運營協(xié)議書
- 對口升學(xué)考試綜合模擬試卷(第七版) 文化課綜合模擬試卷 參考答案
- 2025安徽省交通控股集團有限公司六安中心招聘收費協(xié)管員24人考試筆試參考題庫附答案解析
- 2025年移動式壓力容器充裝R2作業(yè)證考試練習(xí)題庫及答案
- 節(jié)能與新能源汽車技術(shù)路線圖2.0
- 保育員配合教學(xué)培訓(xùn)工作指南
- FSSC22000 V6食品安全管理體系管理手冊及程序文件
- 2025年保安員理論考試100題(附答案)
- 3單元4 彩虹 課件 2025-2026學(xué)年統(tǒng)編版小學(xué)語文二年級上冊
- DBJT15-140-2018 廣東省市政基礎(chǔ)設(shè)施工程施工安全管理標(biāo)準(zhǔn)
- 肝豆?fàn)詈俗冃愿涡阅X病護理查房
評論
0/150
提交評論