

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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設計流圖3</b></p><p&
2、gt;<b> 3模塊設計6</b></p><p> 3.1七段數碼管顯示譯碼器7</p><p> 3.2按鍵去抖電路9</p><p> 3.3狀態(tài)機設計11</p><p> 3.3.1狀態(tài)機的6種狀態(tài)及狀態(tài)轉移11</p><p> 3.3.2狀態(tài)機/球臺控制程序
3、12</p><p> 3.4記分器設計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)的有關仿真24</p><p> 4.5系統(tǒng)的編程配置26</p><p><b> 5結論28</b></p><p><b> 參考文獻29</b></p><p><b> 致謝30</b></p><p><b>
5、 摘 要</b></p><p> VHDL是甚高速集成電路硬件描述語言。目前,VHDL已成為許多設計自動化工具普遍采用的標準化硬件描述語言。VHDL語言功能性強,覆蓋面廣,靈活性高,具有很好的實用性。本文設計一個基于VHDL的乒乓游戲機,乒乓游戲機由狀態(tài)機、記分器、譯碼顯示器與按鍵去抖等部分所組成。通過對各部分編寫VHDL程序,然后進行編譯、仿真、邏輯綜合、邏輯適配,最后進行編程下載,并且通過G
6、W48型EDA實驗箱的驗證,實現乒乓游戲機的基本功能。</p><p> 關鍵詞: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è)技術的發(fā)展,在電子線路設計領域中,設計自動化工具已經逐步為設計者所接受,成為主要的設計手段。目前,VHDL已成為許多設計自動化工具普遍采用的標準化硬件描述語言,掌握VHDL語言,
10、用VHDL語言設計電子線路,是電子線路設計者必須掌握的基本技能。VHDL支持數字電路的開發(fā)環(huán)境,VHDL也支持各種設計方法:自頂向下、自底向上或混合的方法[1]。VHDL語言功能性強,覆蓋面大,靈活性高,具有很好的實用性[2]。本文設計一個基于VHDL的乒乓游戲機,乒乓游戲機是由5個發(fā)光二極管代表乒乓球臺,中間的發(fā)光二極管兼作球網,用點亮的發(fā)光二極管按一定方向移動來表示球的運動。在游戲機的兩側各設置兩個開關,甲乙二人按乒乓球比賽規(guī)則來操
11、作開關。本設計由譯碼顯示器、記分器、狀態(tài)機/球臺控制器與按鍵去抖等部分組成。本設計是用實驗箱GW48進行模擬乒乓機,用發(fā)光二極管代表乒乓球臺,最中間的發(fā)光二極管作球網,用點亮的發(fā)光二極管按一定方向移動來表示球的運動,用按鈕設置發(fā)球和接球開關。</p><p> 設計總體要求:乒乓機能模擬乒乓球比賽的基本過程和規(guī)則,并能自動裁判和記分。</p><p> 本設計的主要任務和要求如下:&l
12、t;/p><p> ?。?)使用乒乓機的甲乙雙放在不同的位置發(fā)球或擊球。</p><p> ?。?)乒乓球的位置和移動方向由燈亮及依次點亮的方向決定。球的速度為0.1s-0.5s移動1位。球過網,接球方向即可擊球,提前擊球或沒擊球均判失分。</p><p> (3)比賽按21分為一局進行,甲乙雙方都應設置自己的記分牌,任何一方先記滿21分,該方就算勝出,按RESET復
13、位重新開局。</p><p><b> 2VHDL簡介</b></p><p> VHDL是Very high speed integrated circuit Hardware Description Language的縮寫,即“甚高速集成電路硬件描述語言”,最初由美國國防部和INTER、IBM、TI公司聯合開發(fā),1987年成為IEEE標準,即IEEE1076標
14、準(俗稱87版VHDL)[1]。此后,美國國防部要求官方與高速集成電路設計的所有文檔必須用VHDL描述,因為VHDL在電子設計領域得到了廣泛的應用,漸漸成為工業(yè)界的標準。1993年,IEEE對VHDL進行了修訂,公布了新的VHDL標準,即IEEE1076-1993版(俗稱93版VHDL)[3]。</p><p> 2.1VHDL的特點及優(yōu)點</p><p> VHDL具有以下特點[4]
15、:</p><p> ?。?)支持“自頂向下”的設計方法:設計可按層次分解,采用結構化開發(fā)手段,可實現多人、多任務的并行工作方式,使系統(tǒng)的設計效力大幅提高。</p><p> (2)系統(tǒng)硬件描述能力強:可以同時支持“行為描述”、“數字流描述”和“結構描述”3種描述方式,并可混用[5]。其中,強大的“行為描述”能力使設計者可以避開具體的器件結構,從邏輯行為上描述和設計大規(guī)模電子系統(tǒng)。這一特
16、點使VHDL成為系統(tǒng)設計領域中最佳的硬件描述語言。</p><p> (3)系統(tǒng)仿真能力強:VHDL最初是作為一種仿真標準問世的,因此VHDL具有仿真語句和庫函數。另外,VHDL強大的“行為描述”能力也使其十分適用于系統(tǒng)級仿真。</p><p> ?。?)工藝無關性[6]:在使用VHDL設計系統(tǒng)硬件時,沒有嵌入與工藝相關的信息。正因為VHDL的硬件描述與具體工藝無關,因而其程序的硬件實現
17、目標器件有廣闊的選擇范圍,其中包括各種CPLD、FPGA及ASIC等。</p><p> 同時,VHDL具有以下優(yōu)點[7]:</p><p> (1)與其他的硬件描述語言相比,VHDL具有更強的行為描述能力。強大的行為描述能力是避開具體的器件結構,從邏輯行為上描述和設計大規(guī)模電子系統(tǒng)的重要保證。就目前流行EDA工具和VHDL綜合器而言,將基于抽象的行為描述風格的VHDL程序綜合成為具體
18、FPGA和CPLD等目標器件的網表文件已不成問題,只是在綜合與優(yōu)化效率上略有差異。</p><p> (2)VHDL具有豐富的仿真語句和庫函數,使得在任何大系統(tǒng)的設計早期,就能查驗設計系統(tǒng)的功能可行性,隨時可對系統(tǒng)進行仿真模擬,使設計者對整個工程的結構和功能可行性做出判斷。</p><p> (3)VHDL語句的行為描述能力和程序結構,決定了它具有支持大規(guī)模設計的分解和已有設計的再利用
19、功能。高效、高速完成符號市場需求的大規(guī)模系統(tǒng)設計必須有多人甚至多個開發(fā)組共同并行工作才能實現。VHDL中設計實體的概念、程序包的概念、設計庫的概念為設計的分解和并行工作提供了有利的支持。</p><p> ?。?)用VHDL完成一個確定的設計,可以利用EDA工具進行邏輯綜合和優(yōu)化,并自動把VHDL描述設計轉變成門級網表(根據不同的芯片)。這種方式突破了門級設計的瓶頸,極大地減少電路設計的時間和可能發(fā)生的錯誤,降低
20、了開發(fā)成本。利用EDA工具的邏輯優(yōu)化功能,可以自動地把一個綜合后的設計變成一個更小、更高速的電路系統(tǒng)。反過來,設計者還可以容易地從綜合和優(yōu)化的電路獲得設計信息,返回去修改VHDL設計描述,使之更加完善。</p><p> ?。?)VHDL對設計的描述具有相對獨立性。設計者可以不懂硬件的結構,也不必管最終設計的目標器件是什么,而進行獨立的設計。正因為VHDL的硬件描述與具體的工藝技術和硬件結構無關,所以VHDL設計
21、程序的硬件實現目標器件有廣闊的選擇范圍,其中包括各種系列的CPLD、FPGA及各種門陣列器件。</p><p> ?。?)VHDL具有類屬描述語句和子程序調用等功能,對于完成的設計,在不改變源程序的條件下,只需改變類屬參量或函數,就能輕易地改變設計的規(guī)模和結構。</p><p> 正因為VHDL有如此多的特點和優(yōu)點,所以本設計運用VHDL進行乒乓球游戲機軟設計。</p>&
22、lt;p><b> 2.2設計流圖</b></p><p> 設計流程圖如圖1所示。這一流程圖基本可使用任何基本硬件描述語言的設計。下面對這個流程中的步驟進行說明[1]:</p><p> ?。?)系統(tǒng)層次劃分/畫出系統(tǒng)框圖(Hierarchy/Block Diagram):按照“自頂向下”的設計方法對系統(tǒng)進行劃分(確定系統(tǒng)由哪些模塊構成,各個模塊又由哪些子
23、模塊構成)。</p><p> ?。?)編碼:寫出VHDL代碼,大多數集成開發(fā)環(huán)境(如MAX+plus2等)都集成了針對VHDL的編輯。這些編輯器一般都具有VHDL關鍵詞的亮點顯示等特點,有的還內嵌了常用的VHDL程序模塊。</p><p> 圖1 VHDL的設計流程圖</p><p> ?。?)編譯(Compilation):編譯器會對VHDL程序進行語法檢查,
24、還會產生用于仿真的一些內部信息。這一步驟通常由編譯器自動完成,無須我們干預。如果VHDL語言有錯誤,編譯無法通過,則需要修改程序,即回到第(2)步。事實上,VHDL設計過程中,常常根據需要往后退一步,甚至更多。</p><p> ?。?)功能仿真(Functional Simulation):VHDL仿真器允許定義輸入并應用到設計中,不必生成實際電路就可以觀察輸出。此仿真主要用于檢驗系統(tǒng)功能設計的正確性,不涉及具
25、體器件的硬件特性。</p><p> ?。?)綜合(Synthesis):利用綜合器對VHDL代碼進行綜合優(yōu)化處理,生成門級描述的網表文件,這是將VHDL語言描述轉化為硬件電路的關鍵步驟。這一步通常由綜合器自動完成,但設計者可以設定一些技術上的約束條件(如限定邏輯層次的最大數等)來“幫助”綜合器。</p><p> ?。?)適配(Fitting):利用適配器將綜合后的網表文件針對某一具體的
26、目標器件進行邏輯映射操作,包括底層器件配置、邏輯分割、邏輯優(yōu)化、布局布線等。</p><p> 此步驟將產生多項設計結果:①適配報告,包括芯片內部資源的利用情況、設計的布爾方程描述情況等;②適配后的仿真模型;③器件編程文件。</p><p> ?。?)時序仿真(Timing Simulation):根據適配后的仿真模型,可以進行時序仿真。因為這時已經得到目標器件的實際硬件特性(如時延特性
27、等),所以仿真結果能比較精確的預期芯片的實際性能。如果仿真結果達不到設計要求,就需要修改VHDL源代碼或選擇不同的目標器件,甚至要重構整個系統(tǒng),圖1就是所設計者極力避免出現的情況。</p><p> (8)下載CPLD/FPGA(Programming):如果時序仿真通過,就可將“適配”時產生的器件編程文件下載到CPLD或FPGA中(FPGA的編程通過被稱為“配置”)。雖然流程圖中未標出從此步“往回走”的箭頭,
28、但事實上,實際的結果有可能與仿真結果有差異(可能是設計時未考慮到外部硬件的實際情況;也可能是由于仿真時測試的條件不夠多,沒有發(fā)現其中隱藏的錯誤),這時,必須回頭重新找出問題所在。</p><p><b> 3模塊設計</b></p><p> 乒乓游戲機的組成示意圖如圖2所示。</p><p> 圖2 乒乓游戲機的組成示意圖</p&
29、gt;<p> 本設計中的乒乓游戲機是由5個發(fā)光二極管代表乒乓球臺,中間的發(fā)光二極管兼作球網,用點亮的發(fā)光二極管按一定方向移動來表示球的運動。在游戲機的兩側各設置兩個開關,一個是發(fā)球開關STARTA、STARTB;另一個是擊球開關HITA、HITB。甲乙二人按乒乓球比賽規(guī)則來操作開關。當甲方按動發(fā)球開關STARTA時,靠近甲方的第一個發(fā)光二極管亮,然后發(fā)光二極管由甲向乙依次點亮,代表乒乓球的移動。當球過網后按設計者規(guī)定的
30、球位,乙方就可以擊球。若乙方提前擊球或沒有擊中球,則判乙方失分,甲方的記分牌自動加一分。然后重新發(fā)球,比賽繼續(xù)進行。比賽一直要進行到一方記分牌達到21分,該局才結束。本設計由譯碼顯示器、按鍵去抖、狀態(tài)機/球臺控制器和記分器等部分所組成。本系統(tǒng)的邏輯分框圖如圖3所示。</p><p> 圖3 系統(tǒng)邏輯分框圖</p><p> 3.1七段數碼管顯示譯碼器</p><p&
31、gt; 七段數碼是純組合電路,通常的小規(guī)模專用IC,如74或4000系列的器件只能作十進制BCD碼譯碼,然而數字系統(tǒng)中的數據處理和運算都是2進制的,所以輸出表達都是16進制的,為了滿足16進制數的譯碼顯示,最方便的方法就是利用VHDL譯碼程序在FPGA或CPLD中實現。七段數碼管分為共陰極和共陽極兩種[8]。簡而言之,對共陰極來說,公共引腳要接地,想要點亮某段數碼管,就在相應的引腳加上高電平;對共陰極來說剛好相反,公共引腳提高電平,想
32、要點亮某段數碼管,就在相應的引腳加上低電平[9]。七段BCD碼譯碼器的設計,輸出信號LED7S的7位分別接如圖4所示數碼管的七個段,高位在左,低位在右[9]。例如當LED7S輸出為“1101101” 時,數碼管的7個段:g、f、e、d、c、b、a分別接1、1、0、1、1、0、1,接有高電平的段發(fā)亮,于是數碼管顯示“5”。</p><p> 帶使能信號EN的譯碼電路的VHDL程序中,EN為高電平時,譯碼器正常工作
33、;EN為低電平時,譯碼器輸出0000000,表示數碼管無顯示。用選擇信號賦值語句描述,將綜合成組合邏輯電路。</p><p> 圖4 共陰數碼管及電路</p><p> 圖5 多模塊共同控制七段數碼管譯碼電路示意圖</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,數碼管無顯示</p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END;</b></p><p> 值得注意的是,本程序是組合邏輯電路,PROCESS
41、的敏感信號參數表中一定要有NUM;否則編譯時會提示如下出錯信息:“Else Clause following a Clock edge must hold the state of signal ‘Display’”。</p><p> 出現此提示信息的原因是:綜合器將EN誤判為時鐘信號,并試圖將程序綜合成時序邏輯電路,但該程序的格式又不符合綜合器對時鐘信號描述的要求,因此無法綜合。</p>&l
42、t;p><b> 3.2按鍵去抖電路</b></p><p> 鍵盤的按鍵閉合與釋放瞬間,輸入的信號會有毛刺。如果不進行消抖處理,系統(tǒng)會將這些毛刺誤以為是用戶的另一次輸入,導致系統(tǒng)的誤操作。防抖電路有很多種,最簡單、最容易理解的就是計數法。其原理是對鍵值進行計數,當某一鍵值保持一段時間不改變時(計數器達到一定值后),才確認它為有效值;否則將其判為無效鍵值,重新對鍵值進行計算[2]。
43、</p><p> 下面是基于計數法的防抖電路程序:</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; --此無效值務必隨實際情況改變</p><p> START <= ‘1’;</p><p
48、><b> ELSE</b></p><p> IF NUMIN<=TEMPNUM THEN --上一鍵值與此鍵值不同</p><p> TENPNUM<=NUMIN; --記錄此鍵值</p><p> COUNTER<= ‘0’; --并對計數器清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)機設計</b></p><p>
52、3.3.1狀態(tài)機的6種狀態(tài)及狀態(tài)轉移</p><p> 本狀態(tài)機有6種狀態(tài),分別是WAITSTATE、ATOB、BTOA、ASCORE、BSCORE和FINALRESULT,其含義如表1所示。</p><p> 表1 狀態(tài)機的6種狀態(tài)及含義</p><p> 結合表1,從圖6中很清楚地看出乒乓游戲機比賽過程中球的移動情況,及加分方法,還可以初步了解到本狀態(tài)機設
53、計的基本思路。</p><p> 圖6 乒乓游戲機狀態(tài)轉移圖</p><p> 3.3.2狀態(tài)機/球臺控制程序</p><p> 狀態(tài)機是種很重要的時序電路,也是本設計的核心部件。狀態(tài)機屬于時序電路范疇,實現一個控制功能更為方便,并提高了控制速度[10]。本次設計中狀態(tài)機的符號如圖7所示。</p><p><b> 圖7 狀
54、態(tài)機符號</b></p><p> 在本設計中,狀態(tài)機用兩個信號表示狀態(tài):STATE表示當前狀態(tài), TABLESTATE表示下一個狀態(tài)。此狀態(tài)機由兩個進程構成,狀態(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 --按下復位鍵,比賽開始</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; --比賽結束 </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 --若未過網提前擊球</p><p> STATE<=ASCORE; --判為A勝</p><p> ELSE </p><p&
69、gt; STATE<=BTOA; --若過了網擊球,球從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> --已經亮</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 --若未過網提前擊球</p><p> STATE<=BSCORE; --判為B勝</p><p&g
73、t; ELSE --若過了網擊球,球從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=> --最后結果</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記分器設計<
85、;/b></p><p> 圖8 記分器元件符號</p><p> 記分器元件符號如圖8所示,本設計中記分器比較簡單,只須根據狀態(tài)機給出的兩個信號(INCREASEA和INCREASEB)對六個分數(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"; --當低位為9,則清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、 --當低位為9,則清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源程序后,不能將設計文本存入根目錄下,本設計都存在文件夾CHENLY中,還要注意設計文本的后綴名一定
101、是“.VHD”,編寫時一定要注意實體名跟設計文件名一致,這些是程序能順利進行編輯和編譯、邏輯綜合、邏輯適配、編程下載成功的最重要的前提條件。</p><p><b> 4系統(tǒng)硬件測試</b></p><p> 4.1GW48系統(tǒng)的主要性能和特點</p><p> ?。?)GW48系統(tǒng)設有通用的系統(tǒng)編程下載電路,可對Lattice、Xilin
102、x、Vantis、Altera、Atmel和Cypress等世界六大PLD公司各種ISP編程下載方式或現場配置的CPLD/FPGA系列器件進行實驗或開發(fā)。其主系統(tǒng)板與芯片板都采用接插式結構,動態(tài)電路結構自動切換工作方式,含有可自動切換的12種實驗電路結構模式。</p><p> ?。?)GW48系統(tǒng)基于“電路重構軟件配置”的設計思想,采用了I/O口可任意定向目標板的智能化電路結構設計方案,利用在系統(tǒng)微控制器對I/
103、O口進行任意定向設置和控制,從而實現了CPLD/FPGA目標芯片I/O口與實驗輸入/輸出資源以各種不同方式連接來構造形式各異的實驗電路的目的。</p><p> ?。?)GW48充實豐富的實驗資源外,還擴展了A/D、D/A、VGA視頻、PS/2接口、RS232通信、單片機獨立用戶系統(tǒng)編程下載接口、48MHz高頻時鐘源及在板數字頻率計,在其上可完成200多種基于FPGA和CPLD的各類電子設計和數字系統(tǒng)設計實驗與開
104、發(fā)項目,從而能使實驗更接近實際的工程設計[8]。</p><p> 4.2FPGA目標芯片管腳圖</p><p> 設計所用的GW48實驗箱中,適配的目標芯片為ALTERA類中FLEX10K系列的EPF10K10,EPF10K10LC84型號的芯片有84個引腳[11],如圖9所示,本設計中用到的引腳情況如下:</p><p> (1)CLK:時鐘信號,決定球的
105、移動速度,對應實驗箱中的輸入時鐘選擇模塊中的CLOCK0。對應芯片引腳2。</p><p> (2)RESET:復位鍵,對應實驗箱的鍵1,對應芯片的引腳5。</p><p> (3)STARTA、STARTB:開球鍵,分別對應實驗箱的鍵4、鍵7,分別對應芯片的引腳8、11。</p><p> (4)HITA、HITB:擊球鍵,分別對應實驗箱的鍵5、鍵8,分別對
106、應芯片的引腳9、16。</p><p> (5)L0、L1、L2、L3、L4:代表乒乓球臺,L2為球網,分別對應發(fā)光二極管的D1、D2、D3、D4、D5,分別對應芯片引腳17、18、19、21、22。</p><p> (6)AWIN、BWIN:表示A、B勝出的標志,分別接二極管D7、D8,哪個先點亮,說明該方已經得里21分,分別對應芯片引腳24、25。</p><
107、p> (7)AL0、AL1、AL2、AL3:顯示A方得分情況中個位上的分值,對應數碼管1,分別對應芯片引腳27、28、29、30。</p><p> (8)AH0、AH1、AH2、AH3:顯示A方得分情況中十位上的分值,對應數碼管2,分別對應芯片引腳35、36、37、38。</p><p> (9)BL0、BL1、BL2、BL3:顯示B方得分情況中個位上的分值,對應數碼管3分別
108、對應芯片引腳39、47、48、49。</p><p> (10)BH0、BH1、BH2、BH3:顯示B方得分情況中十位上的分值,對應數碼管4,對應芯片引腳50、51、52、53。</p><p> 圖9 目標芯片頂面圖</p><p> 4.3系統(tǒng)的編譯、綜合、適配</p><p> 頂層文件元件連接PINGPANG.GDF,如圖10
109、所示,模塊STATEMACHINE1是狀態(tài)機/球臺控制,當復位鍵為低電平時,若A方(STARTA)或B方(STARTB)開始發(fā)球,模塊LIGHT的發(fā)光二極管L0、L1、L2、L3、L4在下降沿來臨時正向或反向依次點亮,當有方得分時,將啟動加分信號INCREASEA、INCREASEB,同時啟動記分器模塊COUNTER1,加分情況將通過四個數碼管來顯示,并將其反饋回狀態(tài)機模塊,當有一方先達到21時,其對應的勝分標志發(fā)光二極管將被點亮。&l
110、t;/p><p> 在按鍵與CPLD相連的引腳需要設置下拉電阻(300~1000Ω即可)以便在沒有按鍵按下時將輸入也穩(wěn)定在低電平,否則系統(tǒng)會不穩(wěn)定。</p><p> (1)設置頂層文件:在編譯系統(tǒng)文件PINGPANG.GDF之前,需要設置該文件為頂層文件Project(工程文件)。選擇菜單“File”→ “Project”→ “Set Project to Current File”,當
111、前的工程,即被設為PINGPANG。首先通過選擇“MAX+PIUS II” → “Compiler”菜單,進入編輯窗。</p><p> (2)選擇目標器件及鎖定引腳:先選擇用編程的目標芯片。選擇菜單“Assign”→“Device…”在彈出的對話框中的“Device Family”下拉欄中選擇“FLEX10”,然后在“Devices”列表框中選擇芯片型號“EPF10K10-PLCC84”,按“OK”。<
112、/p><p> 選擇菜單“Assign” →“Pin/Location/Chip…”彈出一個對話框來設置引腳。在“Pin”右邊的下拉欄中選擇芯片引腳號,然后按下“Add”按鈕,就會在下面的子窗口出現引腳設定說明語句,當前的一個引腳設置就加到了列表中。如果是總線形式的引腳名,也應分別寫出總線中的每一個信號引腳設定,頂層文件引腳鎖定文件為PINGPANG.PPN,如表3所示。</p><p>
113、 圖10 乒乓游戲機頂層文件連接圖</p><p> 4.4系統(tǒng)的有關仿真</p><p> ?。?)建立仿真波形文件:選擇菜單“File”→ “New”對話框中選擇“Waveform Editor file”,按“OK”后將出現波形編輯器子窗口。選擇菜單“Node”→“Enter Nodes from SNF”,出現選擇結點對話框。按右上側的“List”按鈕,左邊的列表框將立即列出所有
114、可以選擇的信號結點,然后按中間的“=>”按鈕,將左邊列表框的結點全部選中到右邊的列表框。按“OK”按鈕,選中的信號將出現在波形編輯器中[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> ?。?)設置輸入信號波形:波形觀察左排按鈕是用于設置輸入信號的,使用時只要先用鼠標在輸入波形上拖一個需要改變的黑色區(qū)域,然后單擊左排相應按鈕即可。其中“0”、 “1”、“X”、“Z”、“INV”、“G”分別表示低電平、高電平、任意、高電阻、反相和總線數據設置。時鐘信號用鼠標點時鐘信號的“VA
116、LUE”區(qū)域,可以將時鐘信號選中。這時時鐘信號的波形區(qū)域全都變成黑色,按集成環(huán)境左邊上的時鐘按鈕,將出現時鐘信號設置對話框,按下“OK”,即可設置時鐘信號。按集成環(huán)境右邊的“縮小”按鈕,可以隨小波形顯示,以便在仿真時能夠瀏覽波形全貌。根據需要將各輸入信號進行設置,并保存。 </p><p> ?。?)運行仿真器進行仿真:選擇菜單“MAX+PIUSⅡ”→“Simulator”,按下
117、“Simulator”,出現仿真參數設置與仿真啟動窗。這時按一下該窗口中的“Start”按鈕,即進行仿真運算,當仿真結果顯示“0 errors,0 warnings”,表示仿真運算結束。仿真結果可以確認設計正確。本系統(tǒng)含有時鐘信號,希望在不改變輸入時鐘信號周期的條件下,延長運算時間,所以進行下面設置:在波形編輯窗口打開的情況下,選擇“File”→“END Time”,在彈出的窗口中設置仿真結束時間,按“OK”按鈕,選擇菜單“MAX+PL
118、USⅡ”→“Simulator”,在“Simulator”子窗口“END Time”處設置同一時間長度。然后啟動仿真操作,結束后可觀察仿真波形。如果在開始沒有打開波形觀察窗,可選擇“File”→“Open”,然后在彈出一名為“Open”的窗口中選擇“Waveform Editor file”,并在“Files”窗口彈出的波形文件名PINGPANG.SCF上雙擊,即可進入波形觀察窗,如圖11所示。</p><p>
119、 表3 PINGPANG.PPN的設計過程</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”即可。用鼠標雙擊編譯器子窗口的下載圖標,可調出編程器(Programmer)窗口。在將設計文件編程配置(對此FPGA下載稱為配置)進硬件芯片前,需連接好硬件測試系統(tǒng)。將實驗板接好,接好電源,一切準備就緒后,方可按下編程器窗口中的“Configure”按鈕??蓪⑺O計的內容下載到芯片中。下載成功后將在一彈出的窗口中顯示“Config
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論