版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 1引言1</b></p><p> 2 VHDL簡介2</p><p> 2.1 VHDL的特點及優(yōu)點2</p><p><b> 2.2設(shè)計流圖3</b></p><p&
2、gt;<b> 3模塊設(shè)計6</b></p><p> 3.1七段數(shù)碼管顯示譯碼器7</p><p> 3.2按鍵去抖電路9</p><p> 3.3狀態(tài)機設(shè)計11</p><p> 3.3.1狀態(tài)機的6種狀態(tài)及狀態(tài)轉(zhuǎn)移11</p><p> 3.3.2狀態(tài)機/球臺控制程序
3、12</p><p> 3.4記分器設(shè)計17</p><p> 4系統(tǒng)硬件測試20</p><p> 4.1 GW48系統(tǒng)的主要性能和特點20</p><p> 4.2 FPGA目標芯片管腳圖20</p><p> 4.3系統(tǒng)的編譯、綜合、適配22</p><p> 4.4
4、系統(tǒng)的有關(guān)仿真24</p><p> 4.5系統(tǒng)的編程配置26</p><p><b> 5結(jié)論28</b></p><p><b> 參考文獻29</b></p><p><b> 致謝30</b></p><p><b>
5、 摘 要</b></p><p> VHDL是甚高速集成電路硬件描述語言。目前,VHDL已成為許多設(shè)計自動化工具普遍采用的標準化硬件描述語言。VHDL語言功能性強,覆蓋面廣,靈活性高,具有很好的實用性。本文設(shè)計一個基于VHDL的乒乓游戲機,乒乓游戲機由狀態(tài)機、記分器、譯碼顯示器與按鍵去抖等部分所組成。通過對各部分編寫VHDL程序,然后進行編譯、仿真、邏輯綜合、邏輯適配,最后進行編程下載,并且通過G
6、W48型EDA實驗箱的驗證,實現(xiàn)乒乓游戲機的基本功能。</p><p> 關(guān)鍵詞:VHDL;GW48;乒乓游戲機</p><p><b> Abstract</b></p><p> VHDL is high speed IC hardware describe language. VHDL already becomes the lan
7、guage of normalizing hardware describe that a lot of design automation implement adopts commonly at present. The VHDL language function is strong. The face covering is broad, flexibility high and have the very good pragm
8、atism. One main body of the book is designed waits for what part group is accomplished owing to that VHDL table tennis game machine, table tennis game machine go to tremble from state machine, marker, d</p><p&
9、gt; Key words: VHDL; GW48; Table tennis game machine</p><p><b> 1引言</b></p><p> 隨著社會的進步和工業(yè)技術(shù)的發(fā)展,在電子線路設(shè)計領(lǐng)域中,設(shè)計自動化工具已經(jīng)逐步為設(shè)計者所接受,成為主要的設(shè)計手段。目前,VHDL已成為許多設(shè)計自動化工具普遍采用的標準化硬件描述語言,掌握VHDL語言,
10、用VHDL語言設(shè)計電子線路,是電子線路設(shè)計者必須掌握的基本技能。VHDL支持數(shù)字電路的開發(fā)環(huán)境,VHDL也支持各種設(shè)計方法:自頂向下、自底向上或混合的方法[1]。VHDL語言功能性強,覆蓋面大,靈活性高,具有很好的實用性[2]。本文設(shè)計一個基于VHDL的乒乓游戲機,乒乓游戲機是由5個發(fā)光二極管代表乒乓球臺,中間的發(fā)光二極管兼作球網(wǎng),用點亮的發(fā)光二極管按一定方向移動來表示球的運動。在游戲機的兩側(cè)各設(shè)置兩個開關(guān),甲乙二人按乒乓球比賽規(guī)則來操
11、作開關(guān)。本設(shè)計由譯碼顯示器、記分器、狀態(tài)機/球臺控制器與按鍵去抖等部分組成。本設(shè)計是用實驗箱GW48進行模擬乒乓機,用發(fā)光二極管代表乒乓球臺,最中間的發(fā)光二極管作球網(wǎng),用點亮的發(fā)光二極管按一定方向移動來表示球的運動,用按鈕設(shè)置發(fā)球和接球開關(guān)。</p><p> 設(shè)計總體要求:乒乓機能模擬乒乓球比賽的基本過程和規(guī)則,并能自動裁判和記分。</p><p> 本設(shè)計的主要任務(wù)和要求如下:&l
12、t;/p><p> ?。?)使用乒乓機的甲乙雙放在不同的位置發(fā)球或擊球。</p><p> ?。?)乒乓球的位置和移動方向由燈亮及依次點亮的方向決定。球的速度為0.1s-0.5s移動1位。球過網(wǎng),接球方向即可擊球,提前擊球或沒擊球均判失分。</p><p> ?。?)比賽按21分為一局進行,甲乙雙方都應(yīng)設(shè)置自己的記分牌,任何一方先記滿21分,該方就算勝出,按RESET復(fù)
13、位重新開局。</p><p><b> 2VHDL簡介</b></p><p> VHDL是Very high speed integrated circuit Hardware Description Language的縮寫,即“甚高速集成電路硬件描述語言”,最初由美國國防部和INTER、IBM、TI公司聯(lián)合開發(fā),1987年成為IEEE標準,即IEEE1076標
14、準(俗稱87版VHDL)[1]。此后,美國國防部要求官方與高速集成電路設(shè)計的所有文檔必須用VHDL描述,因為VHDL在電子設(shè)計領(lǐng)域得到了廣泛的應(yīng)用,漸漸成為工業(yè)界的標準。1993年,IEEE對VHDL進行了修訂,公布了新的VHDL標準,即IEEE1076-1993版(俗稱93版VHDL)[3]。</p><p> 2.1VHDL的特點及優(yōu)點</p><p> VHDL具有以下特點[4]
15、:</p><p> (1)支持“自頂向下”的設(shè)計方法:設(shè)計可按層次分解,采用結(jié)構(gòu)化開發(fā)手段,可實現(xiàn)多人、多任務(wù)的并行工作方式,使系統(tǒng)的設(shè)計效力大幅提高。</p><p> ?。?)系統(tǒng)硬件描述能力強:可以同時支持“行為描述”、“數(shù)字流描述”和“結(jié)構(gòu)描述”3種描述方式,并可混用[5]。其中,強大的“行為描述”能力使設(shè)計者可以避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計大規(guī)模電子系統(tǒng)。這一特
16、點使VHDL成為系統(tǒng)設(shè)計領(lǐng)域中最佳的硬件描述語言。</p><p> ?。?)系統(tǒng)仿真能力強:VHDL最初是作為一種仿真標準問世的,因此VHDL具有仿真語句和庫函數(shù)。另外,VHDL強大的“行為描述”能力也使其十分適用于系統(tǒng)級仿真。</p><p> ?。?)工藝無關(guān)性[6]:在使用VHDL設(shè)計系統(tǒng)硬件時,沒有嵌入與工藝相關(guān)的信息。正因為VHDL的硬件描述與具體工藝無關(guān),因而其程序的硬件實現(xiàn)
17、目標器件有廣闊的選擇范圍,其中包括各種CPLD、FPGA及ASIC等。</p><p> 同時,VHDL具有以下優(yōu)點[7]:</p><p> ?。?)與其他的硬件描述語言相比,VHDL具有更強的行為描述能力。強大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計大規(guī)模電子系統(tǒng)的重要保證。就目前流行EDA工具和VHDL綜合器而言,將基于抽象的行為描述風(fēng)格的VHDL程序綜合成為具體
18、FPGA和CPLD等目標器件的網(wǎng)表文件已不成問題,只是在綜合與優(yōu)化效率上略有差異。</p><p> ?。?)VHDL具有豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計早期,就能查驗設(shè)計系統(tǒng)的功能可行性,隨時可對系統(tǒng)進行仿真模擬,使設(shè)計者對整個工程的結(jié)構(gòu)和功能可行性做出判斷。</p><p> ?。?)VHDL語句的行為描述能力和程序結(jié)構(gòu),決定了它具有支持大規(guī)模設(shè)計的分解和已有設(shè)計的再利用
19、功能。高效、高速完成符號市場需求的大規(guī)模系統(tǒng)設(shè)計必須有多人甚至多個開發(fā)組共同并行工作才能實現(xiàn)。VHDL中設(shè)計實體的概念、程序包的概念、設(shè)計庫的概念為設(shè)計的分解和并行工作提供了有利的支持。</p><p> ?。?)用VHDL完成一個確定的設(shè)計,可以利用EDA工具進行邏輯綜合和優(yōu)化,并自動把VHDL描述設(shè)計轉(zhuǎn)變成門級網(wǎng)表(根據(jù)不同的芯片)。這種方式突破了門級設(shè)計的瓶頸,極大地減少電路設(shè)計的時間和可能發(fā)生的錯誤,降低
20、了開發(fā)成本。利用EDA工具的邏輯優(yōu)化功能,可以自動地把一個綜合后的設(shè)計變成一個更小、更高速的電路系統(tǒng)。反過來,設(shè)計者還可以容易地從綜合和優(yōu)化的電路獲得設(shè)計信息,返回去修改VHDL設(shè)計描述,使之更加完善。</p><p> ?。?)VHDL對設(shè)計的描述具有相對獨立性。設(shè)計者可以不懂硬件的結(jié)構(gòu),也不必管最終設(shè)計的目標器件是什么,而進行獨立的設(shè)計。正因為VHDL的硬件描述與具體的工藝技術(shù)和硬件結(jié)構(gòu)無關(guān),所以VHDL設(shè)計
21、程序的硬件實現(xiàn)目標器件有廣闊的選擇范圍,其中包括各種系列的CPLD、FPGA及各種門陣列器件。</p><p> ?。?)VHDL具有類屬描述語句和子程序調(diào)用等功能,對于完成的設(shè)計,在不改變源程序的條件下,只需改變類屬參量或函數(shù),就能輕易地改變設(shè)計的規(guī)模和結(jié)構(gòu)。</p><p> 正因為VHDL有如此多的特點和優(yōu)點,所以本設(shè)計運用VHDL進行乒乓球游戲機軟設(shè)計。</p>&
22、lt;p><b> 2.2設(shè)計流圖</b></p><p> 設(shè)計流程圖如圖1所示。這一流程圖基本可使用任何基本硬件描述語言的設(shè)計。下面對這個流程中的步驟進行說明[1]:</p><p> (1)系統(tǒng)層次劃分/畫出系統(tǒng)框圖(Hierarchy/Block Diagram):按照“自頂向下”的設(shè)計方法對系統(tǒng)進行劃分(確定系統(tǒng)由哪些模塊構(gòu)成,各個模塊又由哪些子
23、模塊構(gòu)成)。</p><p> ?。?)編碼:寫出VHDL代碼,大多數(shù)集成開發(fā)環(huán)境(如MAX+plus2等)都集成了針對VHDL的編輯。這些編輯器一般都具有VHDL關(guān)鍵詞的亮點顯示等特點,有的還內(nèi)嵌了常用的VHDL程序模塊。</p><p> 圖1 VHDL的設(shè)計流程圖</p><p> (3)編譯(Compilation):編譯器會對VHDL程序進行語法檢查,
24、還會產(chǎn)生用于仿真的一些內(nèi)部信息。這一步驟通常由編譯器自動完成,無須我們干預(yù)。如果VHDL語言有錯誤,編譯無法通過,則需要修改程序,即回到第(2)步。事實上,VHDL設(shè)計過程中,常常根據(jù)需要往后退一步,甚至更多。</p><p> ?。?)功能仿真(Functional Simulation):VHDL仿真器允許定義輸入并應(yīng)用到設(shè)計中,不必生成實際電路就可以觀察輸出。此仿真主要用于檢驗系統(tǒng)功能設(shè)計的正確性,不涉及具
25、體器件的硬件特性。</p><p> ?。?)綜合(Synthesis):利用綜合器對VHDL代碼進行綜合優(yōu)化處理,生成門級描述的網(wǎng)表文件,這是將VHDL語言描述轉(zhuǎn)化為硬件電路的關(guān)鍵步驟。這一步通常由綜合器自動完成,但設(shè)計者可以設(shè)定一些技術(shù)上的約束條件(如限定邏輯層次的最大數(shù)等)來“幫助”綜合器。</p><p> ?。?)適配(Fitting):利用適配器將綜合后的網(wǎng)表文件針對某一具體的
26、目標器件進行邏輯映射操作,包括底層器件配置、邏輯分割、邏輯優(yōu)化、布局布線等。</p><p> 此步驟將產(chǎn)生多項設(shè)計結(jié)果:①適配報告,包括芯片內(nèi)部資源的利用情況、設(shè)計的布爾方程描述情況等;②適配后的仿真模型;③器件編程文件。</p><p> ?。?)時序仿真(Timing Simulation):根據(jù)適配后的仿真模型,可以進行時序仿真。因為這時已經(jīng)得到目標器件的實際硬件特性(如時延特性
27、等),所以仿真結(jié)果能比較精確的預(yù)期芯片的實際性能。如果仿真結(jié)果達不到設(shè)計要求,就需要修改VHDL源代碼或選擇不同的目標器件,甚至要重構(gòu)整個系統(tǒng),圖1就是所設(shè)計者極力避免出現(xiàn)的情況。</p><p> ?。?)下載CPLD/FPGA(Programming):如果時序仿真通過,就可將“適配”時產(chǎn)生的器件編程文件下載到CPLD或FPGA中(FPGA的編程通過被稱為“配置”)。雖然流程圖中未標出從此步“往回走”的箭頭,
28、但事實上,實際的結(jié)果有可能與仿真結(jié)果有差異(可能是設(shè)計時未考慮到外部硬件的實際情況;也可能是由于仿真時測試的條件不夠多,沒有發(fā)現(xiàn)其中隱藏的錯誤),這時,必須回頭重新找出問題所在。</p><p><b> 3模塊設(shè)計</b></p><p> 乒乓游戲機的組成示意圖如圖2所示。</p><p> 圖2 乒乓游戲機的組成示意圖</p&
29、gt;<p> 本設(shè)計中的乒乓游戲機是由5個發(fā)光二極管代表乒乓球臺,中間的發(fā)光二極管兼作球網(wǎng),用點亮的發(fā)光二極管按一定方向移動來表示球的運動。在游戲機的兩側(cè)各設(shè)置兩個開關(guān),一個是發(fā)球開關(guān)STARTA、STARTB;另一個是擊球開關(guān)HITA、HITB。甲乙二人按乒乓球比賽規(guī)則來操作開關(guān)。當甲方按動發(fā)球開關(guān)STARTA時,靠近甲方的第一個發(fā)光二極管亮,然后發(fā)光二極管由甲向乙依次點亮,代表乒乓球的移動。當球過網(wǎng)后按設(shè)計者規(guī)定的
30、球位,乙方就可以擊球。若乙方提前擊球或沒有擊中球,則判乙方失分,甲方的記分牌自動加一分。然后重新發(fā)球,比賽繼續(xù)進行。比賽一直要進行到一方記分牌達到21分,該局才結(jié)束。本設(shè)計由譯碼顯示器、按鍵去抖、狀態(tài)機/球臺控制器和記分器等部分所組成。本系統(tǒng)的邏輯分框圖如圖3所示。</p><p> 圖3 系統(tǒng)邏輯分框圖</p><p> 3.1七段數(shù)碼管顯示譯碼器</p><p&
31、gt; 七段數(shù)碼是純組合電路,通常的小規(guī)模專用IC,如74或4000系列的器件只能作十進制BCD碼譯碼,然而數(shù)字系統(tǒng)中的數(shù)據(jù)處理和運算都是2進制的,所以輸出表達都是16進制的,為了滿足16進制數(shù)的譯碼顯示,最方便的方法就是利用VHDL譯碼程序在FPGA或CPLD中實現(xiàn)。七段數(shù)碼管分為共陰極和共陽極兩種[8]。簡而言之,對共陰極來說,公共引腳要接地,想要點亮某段數(shù)碼管,就在相應(yīng)的引腳加上高電平;對共陰極來說剛好相反,公共引腳提高電平,想
32、要點亮某段數(shù)碼管,就在相應(yīng)的引腳加上低電平[9]。七段BCD碼譯碼器的設(shè)計,輸出信號LED7S的7位分別接如圖4所示數(shù)碼管的七個段,高位在左,低位在右[9]。例如當LED7S輸出為“1101101” 時,數(shù)碼管的7個段:g、f、e、d、c、b、a分別接1、1、0、1、1、0、1,接有高電平的段發(fā)亮,于是數(shù)碼管顯示“5”。</p><p> 帶使能信號EN的譯碼電路的VHDL程序中,EN為高電平時,譯碼器正常工作
33、;EN為低電平時,譯碼器輸出0000000,表示數(shù)碼管無顯示。用選擇信號賦值語句描述,將綜合成組合邏輯電路。</p><p> 圖4 共陰數(shù)碼管及電路</p><p> 圖5 多模塊共同控制七段數(shù)碼管譯碼電路示意圖</p><p> 帶使能信號EN的譯碼電路的VHDL程序如下:</p><p> LIBRARY IEEE;</p
34、><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> ENTITY DISPLAY IS </p><p><b> PORT</b></p><p> (EN: IN STD_LOGIC;</p><p> NUM: IN INTEGER RANGE 0
35、TO 15;</p><p> DISPLAY: OUT STD_LOGIC_VECTOR (0 TO 6));</p><p><b> END;</b></p><p> ARCHITECTURE DECODER OF DISPLAY IS</p><p><b> BEGIN</b>&
36、lt;/p><p> PROCESS (EN, NUM)</p><p><b> BEGIN</b></p><p> IF EN=’ 1 ’ THEN --使能信號EN為1時,譯碼器正常工作</p><p> CASE NUM IS</p><p>
37、; WHEN 0=>DISPLAY<=”1111110”;</p><p> WHEN 1=>DISPLAY<=”0110000”;</p><p> WHEN 2=>DISPLAY<=”1101101”;</p><p> WHEN 3=>DISPLAY<=”1111001”;</p><
38、p> WHEN 4=>DISPLAY<=”0110011”;</p><p> WHEN 5=>DISPLAY<=”1011011”;</p><p> WHEN 6=>DISPLAY<=”0011111”;</p><p> WHEN 7=>DISPLAY<=”1110000”;</p>
39、<p> WHEN 8=>DISPLAY<=”1111111”;</p><p> WHEN OTHERS=>DISPLAY<=”0000000”;</p><p> END CASE; </p><p><b> ELSE</b></p><p> DISPLAY<=”
40、0000000”; --EN為0,數(shù)碼管無顯示</p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END;</b></p><p> 值得注意的是,本程序是組合邏輯電路,PROCESS
41、的敏感信號參數(shù)表中一定要有NUM;否則編譯時會提示如下出錯信息:“Else Clause following a Clock edge must hold the state of signal ‘Display’”。</p><p> 出現(xiàn)此提示信息的原因是:綜合器將EN誤判為時鐘信號,并試圖將程序綜合成時序邏輯電路,但該程序的格式又不符合綜合器對時鐘信號描述的要求,因此無法綜合。</p>&l
42、t;p><b> 3.2按鍵去抖電路</b></p><p> 鍵盤的按鍵閉合與釋放瞬間,輸入的信號會有毛刺。如果不進行消抖處理,系統(tǒng)會將這些毛刺誤以為是用戶的另一次輸入,導(dǎo)致系統(tǒng)的誤操作。防抖電路有很多種,最簡單、最容易理解的就是計數(shù)法。其原理是對鍵值進行計數(shù),當某一鍵值保持一段時間不改變時(計數(shù)器達到一定值后),才確認它為有效值;否則將其判為無效鍵值,重新對鍵值進行計算[2]。
43、</p><p> 下面是基于計數(shù)法的防抖電路程序:</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> ENTUTY ANTITWITTER IS</p><p><b> PORT</b><
44、/p><p> (CLOCK: IN STD_LOGIC;</p><p> NUMIN: IN INTEGER RANGE 0 TO 15;</p><p> NUMOUT: OUT INTEGER RANGE 0 TO 15);</p><p><b> END;</b></p><p>
45、 ARCHITECTURE BEHAVIOR OF ANTITWITTER IS</p><p> SIGNAL TEMPNUM: INTEGER RANGE 0 TO 15;</p><p> SIGNAL COUNTER: INTEGER RANGE 0 TO 31;</p><p> SIGNAL START: STD_LOGIC;</p>
46、<p><b> BEGIN</b></p><p> PROCESS (CLOCK)</p><p><b> BEGIN</b></p><p> IF RISING_EDGE (CLOCK) THEN</p><p> IF START=‘0’THEN
47、 --上電后立即對輸出的鍵值賦予無效值</p><p> TEMPNUM<=15; --此處沿將15作為無效值</p><p> NUMOUT<=15; --此無效值務(wù)必隨實際情況改變</p><p> START <= ‘1’;</p><p
48、><b> ELSE</b></p><p> IF NUMIN<=TEMPNUM THEN --上一鍵值與此鍵值不同</p><p> TENPNUM<=NUMIN; --記錄此鍵值</p><p> COUNTER<= ‘0’; --并對計數(shù)器清0,準備對此鍵
49、值計時</p><p><b> ELSE </b></p><p> IF COUNTER31 THEN; --當鍵值保持31個時鐘周期不變時</p><p> NUMOUT<=NUMIN; --即確定為有效鍵值,并輸出</p><p> COUNTER<= ‘0’;&
50、lt;/p><p><b> ELSE</b></p><p> COUNTER<=COUNTER+1;</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p><b>
51、END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END;</b></p><p><b> 3.3狀態(tài)機設(shè)計</b></p><p>
52、3.3.1狀態(tài)機的6種狀態(tài)及狀態(tài)轉(zhuǎn)移</p><p> 本狀態(tài)機有6種狀態(tài),分別是WAITSTATE、ATOB、BTOA、ASCORE、BSCORE和FINALRESULT,其含義如表1所示。</p><p> 表1 狀態(tài)機的6種狀態(tài)及含義</p><p> 結(jié)合表1,從圖6中很清楚地看出乒乓游戲機比賽過程中球的移動情況,及加分方法,還可以初步了解到本狀態(tài)機設(shè)
53、計的基本思路。</p><p> 圖6 乒乓游戲機狀態(tài)轉(zhuǎn)移圖</p><p> 3.3.2狀態(tài)機/球臺控制程序</p><p> 狀態(tài)機是種很重要的時序電路,也是本設(shè)計的核心部件。狀態(tài)機屬于時序電路范疇,實現(xiàn)一個控制功能更為方便,并提高了控制速度[10]。本次設(shè)計中狀態(tài)機的符號如圖7所示。</p><p><b> 圖7 狀
54、態(tài)機符號</b></p><p> 在本設(shè)計中,狀態(tài)機用兩個信號表示狀態(tài):STATE表示當前狀態(tài), TABLESTATE表示下一個狀態(tài)。此狀態(tài)機由兩個進程構(gòu)成,狀態(tài)機的輸入/輸出引腳的作用如表2所示。其中SCOREAL[3..0]、SCOREAH[3..0]、SCOREBL[3..0]、SCOREBH[3..0]用七段BCD碼譯碼器顯示得分情況,而SCOREA、SCOREB用二進制進行加分,由記分器
55、反饋回來。</p><p> 表2 輸入/輸出引腳的作用</p><p><b> 狀態(tài)機的程序如下:</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC
56、_UNSIGNED.ALL;</p><p> ENTITY STATEMACHINE IS</p><p> PORT (CLK: IN STD_LOGIC;</p><p> RESET: IN STD_LOGIC;</p><p> STARTA, HITA, STARTB, HITB: IN STD_LOGIC;</p&
57、gt;<p> SCOREA, SCOREB: IN INTEGER RANGE 0 TO 21;</p><p> CLEAR, INCREASEA, INCREASEB: OUT STD_LOGIC;</p><p> TABLELIGHT: OUT STD_LOGIC_VECTOR (0 TO 4);</p><p> AWIN, BWI
58、N: OUT STD_LOGIC);</p><p><b> END;</b></p><p> ARCHITECTURE BEHAVIOR OF STATEMACHINE IS</p><p> TYPE STATE_TYPE IS (WAITSTATE, ATOB, BTOA, ASCORE, BSCORE, FINALRESULT
59、);</p><p> SIGNAL STATE: STATE_TYPE;</p><p> SIGNAL TABLESTATE: INTEGER RANGE 0 TO 4;</p><p><b> BEGIN</b></p><p> PROCESS (CLK, RESET)</p><p
60、><b> BEGIN</b></p><p> IF RESET='1' THEN --按下復(fù)位鍵,比賽開始</p><p> STATE<=WAITSTATE; --進入等待狀態(tài)</p><p> CLEAR<='1
61、9;; --記分器清零</p><p> AWIN<='0';</p><p> BWIN<='0';</p><p> ELSIF RISING_EDGE (CLK) THEN</p><p> CASE STATE IS</p>
62、<p> WHEN WAITSTATE=></p><p> CLEAR<='0';</p><p> INCREASEA<='0';</p><p> INCREASEB<='0';</p><p> IF((SCOREA =21 ) OR (SC
63、OREB=21))THEN--如果一方先得到21分</p><p> STATE<=FINALRESULT; --比賽結(jié)束 </p><p><b> ELSE</b&
64、gt;</p><p> IF STARTA='1'THEN --如果A開球</p><p> STATE<=ATOB; --球從A向B方移動</p><p> TABLESTATE<=0; --A方第一個燈點亮&
65、lt;/p><p><b> ELSE</b></p><p> IF STARTB='1'THEN --如果B開球(A、B開球有</p><p><b> --定的優(yōu)先級區(qū)別</b></p><p> STATE<=BTOA;
66、 --球從B向A方移動</p><p> TABLESTATE<=4; --B方第一個燈亮</p><p><b> ELSE</b></p><p> STATE<=WAITSTATE;</p><p><b> END IF;&
67、lt;/b></p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> WHEN ATOB=> --球從A向B移動的過程</p><p> IF HITB='1'TH
68、EN --如果檢測到B方擊球</p><p> IF TABLESTATE<=2 THEN --若未過網(wǎng)提前擊球</p><p> STATE<=ASCORE; --判為A勝</p><p> ELSE </p><p&
69、gt; STATE<=BTOA; --若過了網(wǎng)擊球,球從B</p><p><b> --向A移動</b></p><p><b> END IF;</b></p><p> ELSE --若未檢測到B方擊球</p>
70、;<p> IF TABLESTATE=4 THEN --如果離B方最近的燈</p><p><b> --已經(jīng)亮</b></p><p> STATE<=ASCORE; --判為A勝</p><p><b> ELSE</b></p>
71、<p> TABLESTATE<=TABLESTATE+1; --否則球繼續(xù)移動</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> WHEN BTOA=> --球從B向A移動的過程&
72、lt;/p><p> IF HITA='1'THEN --如果檢測A方擊球</p><p> IF TABLESTATE>=2 THEN --若未過網(wǎng)提前擊球</p><p> STATE<=BSCORE; --判為B勝</p><p&g
73、t; ELSE --若過了網(wǎng)擊球,球從A</p><p> STATE<=ATOB; --向B移動</p><p><b> END IF;</b></p><p> ELSE --若未檢
74、測到A擊球</p><p> IF TABLESTATE=0 THEN --如果離A最近的燈亮了</p><p> STATE<=BSCORE; --判為B勝</p><p><b> ELSE</b></p><p> TABLESTATE<=TABLES
75、TATE-1; --否則球繼續(xù)移動</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> WHEN ASCORE=> --如果A勝</p><p> INCREASEA<=
76、9;1'; --A方加1分</p><p> STATE<=WAITSTATE; --回到等待開球狀態(tài)</p><p> WHEN BSCORE=> --如果B勝</p><p> INCREASEB<='1';
77、 --B方加1分</p><p> STATE<=WAITSTATE; --回到等待開球狀態(tài)</p><p> WHEN FINALRESULT=> --最后結(jié)果</p><p> IF(SCOREA=21) THEN --若A方先達到21分&
78、lt;/p><p> AWIN<='1'; --表示A方勝出的燈亮</p><p><b> ELSE</b></p><p> BWIN<='1'; --否則,表示B方勝出的燈亮</p><p>
79、;<b> END IF;</b></p><p> WHEN OTHERS=></p><p> STATE<=WAITSTATE;</p><p><b> END CASE;</b></p><p><b> END IF;</b></p>
80、;<p> END PROCESS;</p><p> PROCESS(CLK) --此進程控制5個發(fā)光二極管的亮滅</p><p><b> BEGIN</b></p><p> IF FALLING_EDGE (CLK) THEN <
81、/p><p> IF ((STATE=ATOB) OR (STATE=BTOA)) THEN</p><p> CASE TABLESTATE IS</p><p> WHEN 0=>TABLELIGHT<="10000";</p><p> WHEN 1=>TABLELIGHT<="
82、01000";</p><p> WHEN 2=>TABLELIGHT<="00100";</p><p> WHEN 3=>TABLELIGHT<="00010";</p><p> WHEN 4=>TABLELIGHT<="00001";</p&
83、gt;<p> WHEN OTHERS=>TABLELIGHT<="00000";</p><p><b> END CASE;</b></p><p><b> ELSE</b></p><p> TABLELIGHT<="00000";&l
84、t;/p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END;</b></p><p><b> 3.4記分器設(shè)計<
85、;/b></p><p> 圖8 記分器元件符號</p><p> 記分器元件符號如圖8所示,本設(shè)計中記分器比較簡單,只須根據(jù)狀態(tài)機給出的兩個信號(INCREASEA和INCREASEB)對六個分數(shù)(SCOREAL、SCOREAH和SCOREBL、SCOREBH、SCOREA、SCOREB)進行操作,記分器的程序如下:</p><p> LIBRARY
86、IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY COUNTER IS</p><p> PORT (CLK: IN STD_LOGIC;</p><p>
87、 CLEAR: IN STD_LOGIC;</p><p> INCREASEA, INCREASEB: IN STD_LOGIC;</p><p> SCOREAL, SCOREAH, SCOREBL, SCOREBH: BUFFER</p><p> STD_LOGIC_VECTOR (3 DOWNTO 0)</p><p> S
88、COREA,SCOREB:BUFFER INTRGER RANGE 0 TO 21);</p><p><b> END;</b></p><p> ARCHITECTURE COUNT OF COUNTER IS</p><p><b> BEGIN</b></p><p> PROCES
89、S (CLK, CLEAR) IS</p><p><b> BEGIN</b></p><p> IF CLEAR='1' THEN --清0</p><p> SCOREAL<="0000";</p><p> SCOREA
90、H<="0000";</p><p> SCOREBL<="0000";</p><p> SCOREBH<="0000";</p><p> SCORES<=0;</p><p> SCOREB<=0;</p><p>
91、 ELSIF FALLING_EDGE (CLK) THEN</p><p> IF INCREASEA='1' THEN --A方加1分</p><p> IF SCOREAH<"0010" THEN --若高位小于2</p><p> IF SCOREAL<
92、;"1001" THEN --如果低位小于9</p><p> SCOREAL<=SCOREAL+1; --則低位加1</p><p> ELSE SCOREAL<="0000"; --當?shù)臀粸?,則清0</p><p> SCOREAH<=SCO
93、REAH+1; --高位加1</p><p><b> END IF;</b></p><p> ELSIF SCOREAH<= "0010" THEN --若高位為2</p><p> IF SCOREAL<"0001" THEN --如果低位小于
94、1</p><p> SCOREAL<=SCOREAL+1; --則低位加1</p><p> ELSE SCOREAL<="0000"; --否則高位、低位都清0</p><p> SCOREAH<="0000";</p><p><
95、;b> END IF;</b></p><p><b> END IF;</b></p><p> SCOREA<=SCOREA+1;</p><p> ELSIF INCREASEB='1' THEN</p><p> IF SCOREBH<2 THEN
96、 --若高位小于2</p><p> IF SCOREBL<"1001" THEN --如果低位小于9</p><p> SCOREBL<=SCOREBL+1; --則低位加1</p><p> ELSE SCOREBL<="0000";
97、 --當?shù)臀粸?,則清0</p><p> SCOREBH<=SCOREBH+1; --高位加1</p><p><b> END IF;</b></p><p> ELSIF SCOREBH<="0010" THEN --若高位為2</p>&l
98、t;p> IF SCOREBL<"0001" THEN --如果低位小于1</p><p> SCOREBL<=SCOREBL+1; --則低位加1</p><p> ELSE SCOREBL<="0000"; --否則高位、低位都清0</p>
99、<p> SCOREBH<="0000";</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> SCOREB<=SCOREB+1;</p><p><b> END IF
100、;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END;</b></p><p> 編寫VHDL源程序后,不能將設(shè)計文本存入根目錄下,本設(shè)計都存在文件夾CHENLY中,還要注意設(shè)計文本的后綴名一定
101、是“.VHD”,編寫時一定要注意實體名跟設(shè)計文件名一致,這些是程序能順利進行編輯和編譯、邏輯綜合、邏輯適配、編程下載成功的最重要的前提條件。</p><p><b> 4系統(tǒng)硬件測試</b></p><p> 4.1GW48系統(tǒng)的主要性能和特點</p><p> ?。?)GW48系統(tǒng)設(shè)有通用的系統(tǒng)編程下載電路,可對Lattice、Xilin
102、x、Vantis、Altera、Atmel和Cypress等世界六大PLD公司各種ISP編程下載方式或現(xiàn)場配置的CPLD/FPGA系列器件進行實驗或開發(fā)。其主系統(tǒng)板與芯片板都采用接插式結(jié)構(gòu),動態(tài)電路結(jié)構(gòu)自動切換工作方式,含有可自動切換的12種實驗電路結(jié)構(gòu)模式。</p><p> (2)GW48系統(tǒng)基于“電路重構(gòu)軟件配置”的設(shè)計思想,采用了I/O口可任意定向目標板的智能化電路結(jié)構(gòu)設(shè)計方案,利用在系統(tǒng)微控制器對I/
103、O口進行任意定向設(shè)置和控制,從而實現(xiàn)了CPLD/FPGA目標芯片I/O口與實驗輸入/輸出資源以各種不同方式連接來構(gòu)造形式各異的實驗電路的目的。</p><p> (3)GW48充實豐富的實驗資源外,還擴展了A/D、D/A、VGA視頻、PS/2接口、RS232通信、單片機獨立用戶系統(tǒng)編程下載接口、48MHz高頻時鐘源及在板數(shù)字頻率計,在其上可完成200多種基于FPGA和CPLD的各類電子設(shè)計和數(shù)字系統(tǒng)設(shè)計實驗與開
104、發(fā)項目,從而能使實驗更接近實際的工程設(shè)計[8]。</p><p> 4.2FPGA目標芯片管腳圖</p><p> 設(shè)計所用的GW48實驗箱中,適配的目標芯片為ALTERA類中FLEX10K系列的EPF10K10,EPF10K10LC84型號的芯片有84個引腳[11],如圖9所示,本設(shè)計中用到的引腳情況如下:</p><p> (1)CLK:時鐘信號,決定球的
105、移動速度,對應(yīng)實驗箱中的輸入時鐘選擇模塊中的CLOCK0。對應(yīng)芯片引腳2。</p><p> (2)RESET:復(fù)位鍵,對應(yīng)實驗箱的鍵1,對應(yīng)芯片的引腳5。</p><p> (3)STARTA、STARTB:開球鍵,分別對應(yīng)實驗箱的鍵4、鍵7,分別對應(yīng)芯片的引腳8、11。</p><p> (4)HITA、HITB:擊球鍵,分別對應(yīng)實驗箱的鍵5、鍵8,分別對
106、應(yīng)芯片的引腳9、16。</p><p> (5)L0、L1、L2、L3、L4:代表乒乓球臺,L2為球網(wǎng),分別對應(yīng)發(fā)光二極管的D1、D2、D3、D4、D5,分別對應(yīng)芯片引腳17、18、19、21、22。</p><p> (6)AWIN、BWIN:表示A、B勝出的標志,分別接二極管D7、D8,哪個先點亮,說明該方已經(jīng)得里21分,分別對應(yīng)芯片引腳24、25。</p><
107、p> (7)AL0、AL1、AL2、AL3:顯示A方得分情況中個位上的分值,對應(yīng)數(shù)碼管1,分別對應(yīng)芯片引腳27、28、29、30。</p><p> (8)AH0、AH1、AH2、AH3:顯示A方得分情況中十位上的分值,對應(yīng)數(shù)碼管2,分別對應(yīng)芯片引腳35、36、37、38。</p><p> (9)BL0、BL1、BL2、BL3:顯示B方得分情況中個位上的分值,對應(yīng)數(shù)碼管3分別
108、對應(yīng)芯片引腳39、47、48、49。</p><p> (10)BH0、BH1、BH2、BH3:顯示B方得分情況中十位上的分值,對應(yīng)數(shù)碼管4,對應(yīng)芯片引腳50、51、52、53。</p><p> 圖9 目標芯片頂面圖</p><p> 4.3系統(tǒng)的編譯、綜合、適配</p><p> 頂層文件元件連接PINGPANG.GDF,如圖10
109、所示,模塊STATEMACHINE1是狀態(tài)機/球臺控制,當復(fù)位鍵為低電平時,若A方(STARTA)或B方(STARTB)開始發(fā)球,模塊LIGHT的發(fā)光二極管L0、L1、L2、L3、L4在下降沿來臨時正向或反向依次點亮,當有方得分時,將啟動加分信號INCREASEA、INCREASEB,同時啟動記分器模塊COUNTER1,加分情況將通過四個數(shù)碼管來顯示,并將其反饋回狀態(tài)機模塊,當有一方先達到21時,其對應(yīng)的勝分標志發(fā)光二極管將被點亮。&l
110、t;/p><p> 在按鍵與CPLD相連的引腳需要設(shè)置下拉電阻(300~1000Ω即可)以便在沒有按鍵按下時將輸入也穩(wěn)定在低電平,否則系統(tǒng)會不穩(wěn)定。</p><p> (1)設(shè)置頂層文件:在編譯系統(tǒng)文件PINGPANG.GDF之前,需要設(shè)置該文件為頂層文件Project(工程文件)。選擇菜單“File”→ “Project”→ “Set Project to Current File”,當
111、前的工程,即被設(shè)為PINGPANG。首先通過選擇“MAX+PIUS II” → “Compiler”菜單,進入編輯窗。</p><p> ?。?)選擇目標器件及鎖定引腳:先選擇用編程的目標芯片。選擇菜單“Assign”→“Device…”在彈出的對話框中的“Device Family”下拉欄中選擇“FLEX10”,然后在“Devices”列表框中選擇芯片型號“EPF10K10-PLCC84”,按“OK”。<
112、/p><p> 選擇菜單“Assign” →“Pin/Location/Chip…”彈出一個對話框來設(shè)置引腳。在“Pin”右邊的下拉欄中選擇芯片引腳號,然后按下“Add”按鈕,就會在下面的子窗口出現(xiàn)引腳設(shè)定說明語句,當前的一個引腳設(shè)置就加到了列表中。如果是總線形式的引腳名,也應(yīng)分別寫出總線中的每一個信號引腳設(shè)定,頂層文件引腳鎖定文件為PINGPANG.PPN,如表3所示。</p><p>
113、 圖10 乒乓游戲機頂層文件連接圖</p><p> 4.4系統(tǒng)的有關(guān)仿真</p><p> ?。?)建立仿真波形文件:選擇菜單“File”→ “New”對話框中選擇“Waveform Editor file”,按“OK”后將出現(xiàn)波形編輯器子窗口。選擇菜單“Node”→“Enter Nodes from SNF”,出現(xiàn)選擇結(jié)點對話框。按右上側(cè)的“List”按鈕,左邊的列表框?qū)⒘⒓戳谐鏊?/p>
114、可以選擇的信號結(jié)點,然后按中間的“=>”按鈕,將左邊列表框的結(jié)點全部選中到右邊的列表框。按“OK”按鈕,選中的信號將出現(xiàn)在波形編輯器中[12]。其中有全部的輸入信號CLK、RESET、STARTA、HITA、STARTB、HITB,輸出信號L0、L1、L2、L3、L4、AL0 、AL1、AL2、AL3、AH0、AH1、AH2、AH3、BL0、BL1、BL2、BL3、BH0、BH1、BH2、BH3、AWIN、BWIN。最后通過菜單“
115、File”→ “Save”在彈出的窗口中將波形文件存在同一個目錄下,文件取名為PINGPANG.SCF。</p><p> (2)設(shè)置輸入信號波形:波形觀察左排按鈕是用于設(shè)置輸入信號的,使用時只要先用鼠標在輸入波形上拖一個需要改變的黑色區(qū)域,然后單擊左排相應(yīng)按鈕即可。其中“0”、 “1”、“X”、“Z”、“INV”、“G”分別表示低電平、高電平、任意、高電阻、反相和總線數(shù)據(jù)設(shè)置。時鐘信號用鼠標點時鐘信號的“VA
116、LUE”區(qū)域,可以將時鐘信號選中。這時時鐘信號的波形區(qū)域全都變成黑色,按集成環(huán)境左邊上的時鐘按鈕,將出現(xiàn)時鐘信號設(shè)置對話框,按下“OK”,即可設(shè)置時鐘信號。按集成環(huán)境右邊的“縮小”按鈕,可以隨小波形顯示,以便在仿真時能夠瀏覽波形全貌。根據(jù)需要將各輸入信號進行設(shè)置,并保存。 </p><p> ?。?)運行仿真器進行仿真:選擇菜單“MAX+PIUSⅡ”→“Simulator”,按下
117、“Simulator”,出現(xiàn)仿真參數(shù)設(shè)置與仿真啟動窗。這時按一下該窗口中的“Start”按鈕,即進行仿真運算,當仿真結(jié)果顯示“0 errors,0 warnings”,表示仿真運算結(jié)束。仿真結(jié)果可以確認設(shè)計正確。本系統(tǒng)含有時鐘信號,希望在不改變輸入時鐘信號周期的條件下,延長運算時間,所以進行下面設(shè)置:在波形編輯窗口打開的情況下,選擇“File”→“END Time”,在彈出的窗口中設(shè)置仿真結(jié)束時間,按“OK”按鈕,選擇菜單“MAX+PL
118、USⅡ”→“Simulator”,在“Simulator”子窗口“END Time”處設(shè)置同一時間長度。然后啟動仿真操作,結(jié)束后可觀察仿真波形。如果在開始沒有打開波形觀察窗,可選擇“File”→“Open”,然后在彈出一名為“Open”的窗口中選擇“Waveform Editor file”,并在“Files”窗口彈出的波形文件名PINGPANG.SCF上雙擊,即可進入波形觀察窗,如圖11所示。</p><p>
119、 表3 PINGPANG.PPN的設(shè)計過程</p><p><b> 續(xù)表3</b></p><p><b> 圖11 仿真波形圖</b></p><p> 4.5系統(tǒng)的編程配置</p><p> 編程器型號的選擇方法是啟動“Programmer”,選菜單“Option”→“Hardwa
120、re Setup”,在“Hardware Type”下拉窗中選“ByteBlaster(MV)”,按“OK”即可。用鼠標雙擊編譯器子窗口的下載圖標,可調(diào)出編程器(Programmer)窗口。在將設(shè)計文件編程配置(對此FPGA下載稱為配置)進硬件芯片前,需連接好硬件測試系統(tǒng)。將實驗板接好,接好電源,一切準備就緒后,方可按下編程器窗口中的“Configure”按鈕。可將所設(shè)計的內(nèi)容下載到芯片中。下載成功后將在一彈出的窗口中顯示“Config
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于vhdl的乒乓球游戲機的設(shè)計
- eda課程設(shè)計--乒乓游戲機
- eda課程設(shè)計--乒乓球游戲機
- eda課程設(shè)計乒乓球游戲機報告
- 數(shù)電課程設(shè)計乒乓球游戲機
- 微機原理課程設(shè)計--乒乓球比賽游戲機的設(shè)計
- 拔河游戲機課程設(shè)計
- 拔河游戲機課程設(shè)計
- 拔河游戲機課程設(shè)計
- 拔河游戲機課程設(shè)計
- 課程設(shè)計--乒乓球比賽游戲機設(shè)計
- 電子技術(shù)乒乓球比賽游戲機課程設(shè)計
- 電子技術(shù)課程設(shè)計--乒乓球游戲機
- 簡易拔河游戲機課程設(shè)計
- 拔河游戲機課程設(shè)計報告
- eda課程設(shè)計---拔河游戲機
- 游戲機eda課程設(shè)計報告
- 拔河游戲機課程設(shè)計報告
- 數(shù)電課程設(shè)計基于multisim的乒乓球游戲機控制電路設(shè)計
- 拔河游戲機課程設(shè)計 (2)
評論
0/150
提交評論