【正文】
yclone II”,然后在“Devices”列表框中選擇芯片型號“EP2C5T144C8N”,按“OK”。首先通過選擇“Quatrus II” → “Compiler”菜單,進入編輯窗。用Quartus II編輯程序并存盤,步驟如下[10]: (1)設置頂層文件:,需要設置該文件為頂層文件Project(工程文件)。、仿真,模塊LIGHT是狀態(tài)機/球臺控制,當復位鍵為低電平時,當甲方或乙方開始發(fā)球,模塊light的發(fā)光二極管L0、LLL3(LL5)LLL8在下降沿來臨時正向或反向依次點亮,當有方得分時,加分情況將通過四個數(shù)碼管來顯示,并將其反饋回狀態(tài)機模塊,當有一方先達到11時,其游戲結束。仿真:用modelsim等等仿真工具做仿真驗證功能、時序的正確性。(4)檢查時鐘電路、復位電路及數(shù)碼管電路,向FPGA下載一個數(shù)碼管跑馬燈程序。然后把下載電纜接到JTAG接口上,在主機中運行Quartus II軟件,并打開Programmer編程器,單擊其中的“Auto Detect”按鈕進行FPGA下載鏈路自動檢測。再次測量電源地之間是否有短路現(xiàn)象,上電測試電壓是否正確,然后將手排除靜電后觸摸FPGA有無發(fā)燙現(xiàn)象。使用萬用表進行測試,排除電源短路等情況后,上電測量電壓是否正確。一般情況下,可以參考以下步驟進行FPGA硬件系統(tǒng)的調(diào)試[9]。全面的簡述了系統(tǒng)的軟硬件結合,以及通過軟硬件結合時序了設計的功能。u2: qdd port map(clk,start,ht,dt)。元件例化部分源程序如下:u0: myd port map(count1,score11,score12)。 score11,score12,score21,score22: out std_logic_vector(0 to 6))。 發(fā)光二極管的輸出信號 tmp: buffer std_logic。 發(fā)球信號 hit1,hit2: in std_logic。 start: in std_logic。實體部分源程序如下: entity game is 實體部分 port(reset: in std_logic。 設計該乒乓球游戲機的輸入/輸出端口。 end process。 end if。 then nex=s0。 if din=39。 when s3=dout=39。 else nex=s3。139。139。 end if。 then nex=s0。 if din=39。 when s1=dout=39。 else nex=s1。139。139。其原理是對鍵值進行計數(shù),當某一鍵值保持一段時間不改變時(計數(shù)器達到一定值后),才確認它為有效值;否則將其判為無效鍵值,重新對鍵值進行計算[8]。如果不進行消抖處理,系統(tǒng)會將這些毛刺誤以為是用戶的另一次輸入,導致系統(tǒng)的誤操作。如圖9按鍵控制LED燈。圖8 數(shù)碼管顯示圖、乒乓球路徑顯示電路設計乒乓球游戲機用按鍵控制擊、發(fā)球以及開始游戲鍵,當甲(開關3)發(fā)球,LED燈由左向右依次點亮(DD6常亮);到D9時,乙(開關6)擊球,LED燈向甲移動。 在輪流點亮掃描過程中,每位顯示器的點亮時間是極為短暫的,但由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應,盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感[7]。 end one。 end if。 end case。 state=waitserve。 else count1=count1+1。 then i=6。 when allow2hit = 進程處于允許2擊球狀態(tài) if hit2=39。 state=waitserve。 else count2=count2+1。 then i=2。 when allow1hit = 進程處于允許1擊球狀態(tài) if hit1=39。 else i=i+1。 elsif i=6 then i=7。 count1=count1+1。139。 end if。 state=allow1hit。state=waitserve。 then i=0。 when ballmoveto1 = 進程處于球向2移動狀態(tài) if hit1=39。 else state=ballmoveto1。 count2=count2+1。139。 when light7on = i=6。 else state=ballmoveto2。 count1=count1+1。139。 when light1on = i=2。 when others = i=0。state=light7on。state=light1on。Reset復位鍵,比賽重新開始,記分器清0Sever[1..0]發(fā)球信號Hithit2甲和乙雙方的擊球鍵(可以將其與開球鍵合并)StartStart控制游戲是否開始Tmp、tmgtmp,tmg為輸入輸出類型,作為分頻后的信號,供給數(shù)碼管掃描和發(fā)光二極管點亮使用Score11[6..0]score12[6..0]Score21[6..0]score22[6..0]甲、乙雙方的分數(shù)(由記分器給出)Light[6..0]接7個發(fā)光二極管甲發(fā)球? 乙發(fā)球?靠近甲的L1燈亮靠近乙的L7燈亮球向乙移動球向甲移動乙擊球? 球移動到L7?球移動到L1?等待發(fā)球甲擊球?乙得分甲得分YesYesNoYesYesNoNoNo圖7 乒乓游戲機狀態(tài)轉(zhuǎn)移圖狀態(tài)機的主要部分源程序如下:p3:process(tmp) 狀態(tài)機部分 begin case state is when waitserve = 等待狀態(tài)下 進程處于等待發(fā)球狀態(tài) case serve is when 00 = i=0。WaitLight1onLight7onBallmoveto2Ballmoveto1Allow2hitAllow1hitS1Hit1Hit2S2L7L1Hit2Hit1Hit1Hit2Hit2Hit1Hit2Hit1圖6 乒乓球游戲機的MDS圖表2 輸入/輸出引腳的作用引 腳作 用Clk10Hz的時鐘,可由系統(tǒng)時鐘分頻得到。此狀態(tài)機由兩個進程構成,狀態(tài)機的輸入/輸出引腳的作用如表2所示。狀態(tài)機屬于時序電路范疇,實現(xiàn)一個控制功能更為方便,并提高了控制速度[6]。表1 狀態(tài)機的7種狀態(tài)及含義狀 態(tài)含 義waitserve等待發(fā)球狀態(tài)light1on第一盞燈亮狀態(tài)ballmoveto2球向乙移動狀態(tài)allow2hit允許乙擊球狀態(tài)light7on第七盞燈亮狀態(tài)ballmoveto1球向甲移動狀態(tài)allow1hit允許甲擊球狀態(tài)結合表1,從圖6乒乓球游戲機的MDS圖中很清楚地看出乒乓游戲機比賽過程中球的移動情況,及加分方法圖7乒乓球游戲機轉(zhuǎn)移圖,還可以初步了解到本狀態(tài)機設計的基本思路。在“第七盞燈亮狀態(tài)”,“球向甲移動狀態(tài)”中,如果甲擊球了,就算提前擊球,這樣甲得分,狀態(tài)轉(zhuǎn)移到“等待發(fā)球狀態(tài)”等待發(fā)球,“球向乙移動狀態(tài)”之后的過程和前面的過程只是甲乙角色的調(diào)換。若發(fā)球后甲沒有提前擊球規(guī)定球移動到對方第一個發(fā)光二極管時允許擊球,那么狀態(tài)機從“第七盞燈亮狀態(tài)”轉(zhuǎn)移到“球向甲移動狀態(tài)”。這是該程序中起決定作用的七個狀態(tài)。 end Process。 end if。 else tmg=39。139。 then couny=couny+1。event and clk=39。 end Process。 end if。 else tmp=39。139。 then count=count+1。event and clk=39。因此需將時鐘信號分頻,分頻成兩個時鐘信號分別給發(fā)光二極管作為移動速度和數(shù)碼管的顯示信號,分別設置分頻系數(shù)為25000000、5000000,分頻后的信號頻率為1Hz、此時發(fā)光二極管的移動速度為1s,符合設計要求。如下圖4所示:圖4 乒乓球游戲機設計總原理圖分頻是將一個給定的頻率較高的數(shù)字輸入信號經(jīng)過適當?shù)奶幚矶a(chǎn)生一個或數(shù)個頻率較低的數(shù)字輸出信號。系統(tǒng)的整體設計結構圖如圖3所示。比賽一直要進行到一方記分牌達到11分,該局才結束。同理,當乙方開始發(fā)球時,點擊hit1擊球。當球過網(wǎng)后按規(guī)定的球位,乙方就可以擊球。在游戲機的兩側各設置兩個開關:hit hit2,甲乙二人按乒乓球比賽規(guī)則來操作開關。3基于FPGA的乒乓球游戲機設計與實現(xiàn)乒乓游戲機的組成示意圖如2所示。本章主要介紹了系統(tǒng)的開發(fā)工具,對硬件的描述語言VHDL的特點做了基本介紹,簡明了VHDL的自頂向下設計的流程。Altera Quartus II 作為一種可編程邏輯的設計環(huán)境, 由于其強大的設計能力和直觀易用的接口,越來越受到數(shù)字系統(tǒng)設計者的歡迎。Quartus II 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。對第三方EDA工具的良好支持也使用戶可以在設計流程的各個階段使用熟悉的第三方EDA工具。 (1)設計說明書(2)建立VHDL行為模型(3)VHDL行為仿真 (5)前端功能仿真(4)VHDLRTL級建模 (6)邏輯綜合 (8)功能仿真 (10)門級時序仿真 (9)結構綜合 (7)測試向量生成設計完成 (11)硬件測試自頂向下設計流程的框圖說明如圖1所示:圖1自頂向下的設計流程圖 Quartus II開發(fā)軟件概述Quartus II 是Altera公司的綜合性PLD/FPGA開發(fā)軟件,支持原理圖、VHDL、Verilog