乒乓球比賽游戲機(jī)設(shè)計說明書_第1頁
乒乓球比賽游戲機(jī)設(shè)計說明書_第2頁
乒乓球比賽游戲機(jī)設(shè)計說明書_第3頁
乒乓球比賽游戲機(jī)設(shè)計說明書_第4頁
乒乓球比賽游戲機(jī)設(shè)計說明書_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

.../...目錄1引言11.1設(shè)計背景11.2VHDL簡介11.3QuartusⅡ簡介32乒乓球比賽游戲機(jī)的設(shè)計32.1系統(tǒng)設(shè)計要求32.2設(shè)計思路43乒乓球比賽游戲機(jī)的實現(xiàn)63.1乒乓球比賽游戲機(jī)的頂層原理圖63.2系統(tǒng)各功能模塊的實現(xiàn)63.2.1比賽控制模塊63.2.2記分模塊73.2.3數(shù)碼管顯示模塊84各個模塊的仿真以及系統(tǒng)仿真、分析94.1比賽控制模塊仿真波形94.2記分模塊仿真波形圖94.3管腳鎖定104.4系統(tǒng)的波形仿真114.5顯示結(jié)果的幾種情況145總結(jié)155.1設(shè)計制作過程中遇到的問題及解決方案155.2本設(shè)計有以下幾個可以改進(jìn)的地方15參考文獻(xiàn)16附錄17游戲控制模塊的VHDL程序17記分模塊的VHDL程序19動態(tài)掃描模塊的VHDL程序20譯碼器模塊的VHDL程序21...1引言1.1設(shè)計背景1.2VHDL簡介硬件描述語言已經(jīng)有幾十年的發(fā)展歷史,并且在系統(tǒng)的仿真、驗證和設(shè)計、綜合等方面得到成功的應(yīng)用。目前常用的硬件描述語言有VHDL、VerilogHDL、ABEL等[2][3][4]。VHDL則起源于20世紀(jì)70年代末和80年代初,美國國防部提出的VHSIC計劃,目標(biāo)是為下一代集成電路的生產(chǎn)、實踐階段性的工藝極限和完成10萬門級以上的電路設(shè)計而建立一種新的描述方法[5]。VHDL的英文全稱為Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,是IEEE標(biāo)準(zhǔn)化的硬件描述語言,并且已經(jīng)成為系統(tǒng)描述的國際公認(rèn)標(biāo)準(zhǔn),得到眾多EDA公司的支持。VHDL具有很多的優(yōu)點使它能夠被大多數(shù)人認(rèn)可,被廣泛應(yīng)用在邏輯電路的設(shè)計方面,并且成為了標(biāo)準(zhǔn)化的硬件描述語言,其優(yōu)點如下:<1>功能強(qiáng)大和設(shè)計靈活。一個簡潔的使用VHDL語言編寫的程序就可以描述一個復(fù)雜的邏輯電路,因為VHDL擁有強(qiáng)大的語言結(jié)構(gòu)[6]。VHDL多層次的設(shè)計描述功能可以有效地控制設(shè)計的實現(xiàn),支持設(shè)計庫和可重復(fù)使用的元件生成,還支持多種設(shè)計方式,如層次化設(shè)計、模塊化設(shè)計和同步、異步和隨機(jī)電路設(shè)計。<2>與具體器件無關(guān)。用VHDL設(shè)計硬件電路時不用先確定設(shè)計要用到哪種器件,也不用特別熟悉器件的內(nèi)部結(jié)構(gòu),這樣可以使設(shè)計人員專注于進(jìn)行系統(tǒng)設(shè)計。設(shè)計完成后,可以根據(jù)消耗的資源選擇合適的器件,而不造成資源的浪費(fèi)。<3>很強(qiáng)的移植能力。VHDL由很多不同的工具支持,同一個設(shè)計的程序可以在包括綜合工具、仿真工具、系統(tǒng)平臺等工具中使用。<4>強(qiáng)大的硬件描述能力。VHDL可以描述系統(tǒng)級電路和門級電路,而且描述方式多樣,可以采用行為描述、寄存器傳輸描述或者結(jié)構(gòu)描述,也可以用其混合描述方式。同時,VHDL可以準(zhǔn)確地建立硬件電路模型,因為它支持慣性延遲和傳輸延遲。VHDL的數(shù)據(jù)類型很豐富,支持標(biāo)準(zhǔn)定義的數(shù)據(jù)類型,當(dāng)標(biāo)準(zhǔn)定義的數(shù)據(jù)類型不能滿足用戶的需求時,用戶可以自己定義的所需要的數(shù)據(jù)類型,增加了設(shè)計的自由度。<5>語法規(guī)范,易于共享。當(dāng)把用VHDL編寫的代碼文件看作是程序時,它可以作為設(shè)計人員之間的交流內(nèi)容;當(dāng)把它看作是文檔時,可以作為簽約雙方的合同文本。VHDL易于共享的特點,使得大規(guī)模的協(xié)作開發(fā)容易實現(xiàn)。同時,這些特點也促進(jìn)了VHDL的發(fā)展和完善。綜上所述,VHDL有很多其他的硬件描述語言所不具備的優(yōu)點。但是,VHDL仍然存在一些缺點,主要是3個方面。<1>要求設(shè)計者對硬件電路知識甚至是芯片結(jié)構(gòu)方面的知識了解較多。應(yīng)該擺脫一般的高級語言程序設(shè)計思路,因為在電路世界里的事件很多是并行發(fā)生的,并且硬件電路系統(tǒng)內(nèi)部的模塊可以是互相獨立的,也可以是互為因果的,所以,在用VHDL設(shè)計硬件電路時應(yīng)擺脫一般的高級語言程序設(shè)計思路。在設(shè)計電路時,應(yīng)先構(gòu)思電路,然后才能描述。<2>不能進(jìn)行太抽象的系統(tǒng)描述。因為EDA工具無法綜合抽象性太強(qiáng)的系統(tǒng),故用VHDL描述系統(tǒng)電路時不能太抽象。目前的VHDL很難綜合實際的硬件電路,只能適用于系統(tǒng)建模。<3>不能描述模擬電路。對于模擬電路而言,VHDL并不是一種理想的硬件描述語言。但可以預(yù)見,未來硬件描述語言的發(fā)展方向是模擬電路和數(shù)?;旌想娐返拿枋龇绞健?.3QuartusⅡ簡介2乒乓球比賽游戲機(jī)的設(shè)計2.1系統(tǒng)設(shè)計要求設(shè)計一個由甲乙雙方參賽,有裁判的三人乒乓球游戲機(jī)。用8個〔或更多個LED排成一條直線,以中點為界,兩邊各代表參賽雙方的位置,其中一只點亮的LED指示球的當(dāng)前位置點亮的LED依此從左到右,或從右到左,其移動速度應(yīng)能調(diào)節(jié)。當(dāng)"球"〔點亮的那只LED運(yùn)動到某方的最后一位時,參賽者應(yīng)能果斷地按下位于自己一方的按鈕開關(guān),既表示啟動球拍擊球,若未擊中,球掉出桌外,則對方得一方。設(shè)置自動記分電路,甲乙雙方各用兩位數(shù)碼管進(jìn)行記分顯示,每記滿11分為1局。甲乙雙方各設(shè)一個發(fā)光二極管表示擁有發(fā)球權(quán),每隔兩次自動交換發(fā)球權(quán),擁有發(fā)球權(quán)的一方發(fā)球才有效。系統(tǒng)框圖如圖2-1所示:圖2-1乒乓球比賽游戲機(jī)系統(tǒng)框圖2.2設(shè)計思路此設(shè)計問題可分為游戲控制模塊,加減計數(shù)模塊,譯碼模塊,甲乙方得分顯示模塊四部分。設(shè)置甲乙雙方擊球脈沖信號int1/int2,一方的擊球信號使加/減計數(shù)器加法計數(shù),則另一方的擊球信號就使加/減計數(shù)器減法計數(shù),譯碼模塊輸出端Y1-Y8接LED模擬乒乓球的軌跡。經(jīng)控制模塊實現(xiàn)移位方向的控制,真值表2-2所列。設(shè)置發(fā)球權(quán)擁有顯示信號s1、s2。控制模塊使每兩次交換發(fā)球權(quán)。加/減控制信號/D由乒乓球到達(dá)Y8、Y1和擊球信號int1、int2及發(fā)球權(quán)擁有信號s1、s2共同產(chǎn)生,真值表如表2-3所示。當(dāng)球到達(dá)Y8或Y1時,參賽者沒有及時擊中,則球掉出桌外,加/減計數(shù)模塊停止計數(shù),對方得一分。設(shè)置撿球信號reset1,通過加/減計數(shù)模塊的異步置數(shù)端實現(xiàn)撿球。當(dāng)甲方擁有發(fā)球權(quán)時撿球信號將球放到Y(jié)1,乙方擁有發(fā)球權(quán)時將球放到Y(jié)8.在控制模塊對甲乙雙方的得分進(jìn)行檢測,只要一方的得分達(dá)到11,則一局結(jié)束,設(shè)置裁判員復(fù)位信號reset.在每局結(jié)束后將雙方得分清零。由調(diào)節(jié)晶振產(chǎn)生的時鐘脈沖信號的頻率,可以調(diào)節(jié)球的運(yùn)動速度。表2-2加/減計數(shù)譯碼顯示真值表時鐘加/減控制計數(shù)器輸出譯碼器輸出CLK/DQ3Q2Q1Q0Y8Y7Y6Y5Y4Y3Y2Y1↑0000100000001↑0001000000010↑0001100000100↑0010000001000↑0010100010000↑0011000100000↑0011101000000↑0100010000000↑1011101000000↑1011000100000↑1010100010000↑1010000001000↑1001100000100↑1001000000010↑1000100000001表2-3加減控制信號的產(chǎn)生Y8Y1Int1Int2S1S2/D100↑01101↑0100硬件系統(tǒng)示意圖如下所示圖2-4硬件系統(tǒng)示意圖3乒乓球比賽游戲機(jī)的實現(xiàn)3.1乒乓球比賽游戲機(jī)的頂層原理圖圖3-1頂層原理圖原理圖中輸入部分分別是:復(fù)位按鍵res,時鐘clk_1,startbutton開始游戲按鍵,serve[1..0]發(fā)球按鍵,serve0代表甲發(fā)球,serve1代表乙發(fā)球,int1為甲擊球按鍵,int2為乙擊球按鍵,原理圖中輸出部分分別是:8個LED燈light[1..8],數(shù)碼管段選信號A、C、D、E、F、G、H,數(shù)碼管進(jìn)入譯碼器74ls138的位選信號sel[2..0],在數(shù)碼管上顯示了甲乙兩個人的分?jǐn)?shù)。3.2系統(tǒng)各功能模塊的實現(xiàn)3.2.1比賽控制模塊圖3-2比賽控制模塊元件框圖按下startbutton按鍵之后游戲開始,當(dāng)按下serve0時甲發(fā)球,8個一排的LED燈從左向右移動〔從1到8,當(dāng)移動到第八個燈時按下int2按鍵代表乙擊中,則乙得1分,提前或未來的及擊球則甲得分。當(dāng)按下serve1時乙發(fā)球從右向左移動,當(dāng)移動到第一個燈時按下int1代表甲擊中球,甲得1分,提前或未來的擊球及則乙得分。3.2.2記分模塊圖3-3記分模塊元件框圖當(dāng)選擇好的信號binaryin[4..1]進(jìn)入mydecoder之后,相應(yīng)的數(shù)據(jù)會選擇到相應(yīng)的信號中,并且通過bcdout1[4..1]和bcdout2[4..1]輸出相應(yīng)的分?jǐn)?shù)在兩位數(shù)碼管上的顯示數(shù)字。bcdout1為十位數(shù),bcdout2為個位數(shù)。3.2.3數(shù)碼管顯示模塊圖3-4顯示模塊框圖數(shù)碼管顯示模塊主要是由兩個模塊組成分別為setime以及deled這兩個模塊組成:setime模塊主要是將輸入的分?jǐn)?shù)進(jìn)行動態(tài)掃描,顯示到每一位數(shù)碼管的位選上,通過高速的掃描后會將每一位選手的分?jǐn)?shù)很清晰的顯示在數(shù)碼管上。deled模塊是一個譯碼器的模塊譯碼器的譯碼對照表3-5如下所示:表3-5譯碼器的譯碼對照表顯示的數(shù)字BCD編碼七段共陽數(shù)碼管000001000000100011111001200100100100300110110000401000011001501010010010601100000010701111111000810000000000910010010000XXXXX1111111在程序中只考慮0000-1001〔即0-9的情況,將其轉(zhuǎn)化為相應(yīng)的七段顯示器的碼字,其他情況不予考慮。4各個模塊的仿真以及系統(tǒng)仿真、分析4.1比賽控制模塊仿真波形圖4-1比賽控制模塊4.2記分模塊仿真波形圖圖4-2記分模塊仿真波形圖表4-3對應(yīng)分?jǐn)?shù)的數(shù)碼管顯示binaryinbcdout1bcdout2000000000000000100000001001000000010001100000011010000000100010100000101011000000110011100000111100000001000100100001001101000010000101100010001在圖4-2中可以看出當(dāng)?shù)梅譃?〔0010分時對應(yīng)的兩位數(shù)碼管則會顯示為02<bcoudt1:0000,bcoudt2:0010,當(dāng)分?jǐn)?shù)超過11分時數(shù)碼管的顯示全為為00。表4-3為具體的分?jǐn)?shù)對應(yīng)的數(shù)碼管顯示。4.3管腳鎖定在驗證出乒乓球比賽游戲機(jī)系統(tǒng)的功能之前,需要清楚實驗箱與各個信號之間的對應(yīng)關(guān)系,參照資料得出本設(shè)計中各引腳的對應(yīng)情況如下:圖4-4各引腳的對應(yīng)情況4.4系統(tǒng)的波形仿真圖4-5所示為甲方發(fā)球,在恰當(dāng)?shù)臅r候乙方接到球,當(dāng)球回到甲方時,甲方又接到球,但乙方再也沒有接到球的仿真波形。圖4-5乒乓球仿真波形一圖4-6所示為甲方兩次發(fā)球,乙方?jīng)]有接到球,甲方得到2分的仿真波形圖。圖4-6乒乓球仿真波形二圖4-7所示為甲方發(fā)球,乙方提前擊球的情況,此時,甲方得一分。圖中還顯示了甲方發(fā)球,乙方在規(guī)定的時刻沒有接到球的情況,此時,甲方又得一分。圖4-7乒乓球仿真波形三圖4-8所示為當(dāng)清零信號按下時,得分清零,又開始新一局游戲圖4-8乒乓球仿真波形四4.5顯示結(jié)果的幾種情況圖4-9驗證結(jié)果1圖4-10驗證結(jié)果2圖4-11驗證結(jié)果35總結(jié)5.1設(shè)計制作過程中遇到的問題及解決方案1.VHDL語法使用不規(guī)范:當(dāng)我們編寫軟件程序的時,遇到了編譯錯誤。細(xì)心閱讀QuartusII錯誤提示和所編寫的程序后發(fā)現(xiàn)是因為VHDL語法使用錯誤。最后經(jīng)過翻閱EDA課本,熟悉相關(guān)語法后將其改正。2.動態(tài)掃描部分不清楚,以至無法實現(xiàn)得分顯示功能起初以為每個數(shù)碼管的引腳都要鎖定,不知該怎樣鎖定四個數(shù)碼管的引腳,后來想起曾經(jīng)做過的數(shù)碼管顯示控制系列最終完成了該部分。3.引腳鎖定不完整,最終編譯無法通過:處理了之前出現(xiàn)的幾個問題后,在最后編譯時未通過。細(xì)致查看了錯誤提示,發(fā)現(xiàn)是個別管腳未鎖定的原因。我們最終把各個管腳鎖定號碼一一檢查了一遍,從而通過了編譯。5.2本設(shè)計有以下幾個可以改進(jìn)的地方1.可以在甲乙兩位得分的數(shù)碼管顯示中間在用一個顯示":"這個符號。2.通過適當(dāng)添加幾種語音芯片,就可以在不同的情況下發(fā)出美妙的聲響,能為比賽增添不少樂趣。3.在現(xiàn)有設(shè)計基礎(chǔ)上使用無線電或紅外技術(shù),還可以使本項目升級為無線智能乒乓球游戲機(jī)。附錄游戲控制模塊的VHDL程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitycompeteisport<reset:instd_logic;clk_1:instd_logic;startbutton:instd_logic;serve:instd_logic_vector<1downto0>;int1,int2:instd_logic;light:outstd_logic_vector<1to8>;counta,countb:outstd_logic_vector<3downto0>>;endcompete;architectureoneofcompeteisTypepingpongis<waitserve,light1on,ballmoveto2,allow2int,light8on,ballmoveto1,allow1int>;signalstate:pingpong;signali:integerrange0to8;signalcount1,count2,count3,count4:std_logic_vector<3downto0>:="0000";beginprocess<clk_1>beginifreset='1'theni<=0;count1<="0000";count2<="0000";count3<="0000";count4<="0000";elsifclk_1'eventandclk_1='1'thenifcount1="1011"theni<=0;count1<="0000";count2<="0000";count3<=count3+1;elsifcount2="1011"theni<=0;count1<="0000";count2<="0000";count4<=count4+1;elsifstartbutton='0'theni<=0;count1<="0000";count2<="0000";count3<="0000";count4<="0000";elsecasestateiswhenwaitserve=>caseserveiswhen"01"=>i<=1;state<=light1on;when"10"=>i<=8;state<=light8on;when"11"=>i<=0;whenothers=>i<=0;endcase;whenlight1on=>i<=2;ifint2='1'theni<=0;count1<=count1+1;state<=waitserve;elsestate<=ballmoveto2;endif;whenlight8on=>i<=7;ifint1='1'theni<=0;count2<=count2+1;state<=waitserve;elsestate<=ballmoveto1;endif;whenballmoveto1=>ifint1='1'theni<=0;count2<=count2+1;state<=waitserve;elsifi=2theni<=1;state<=allow1int;elsei<=i-1;endif;whenballmoveto2=>ifint2='1'theni<=0;count1<=count1+1;state<=waitserve;elsifi=7theni<=8;state<=allow2int;elsei<=i+1;endif;whenallow1int=>ifint1='1'theni<=2;state<=ballmoveto2;elsecount2<=count2+1;i<=0;state<=waitserve;endif;whenallow2int=>ifint2='1'theni<=7;state<=ballmoveto1;elsecount1<=count1+1;i<=0;state<=waitserve;endif;endcase;endif;endif;endprocess;counta<=count1;countb<=count2;light<="10000000"when<i=1>else"01000000"when<i=2>else"00100000"when<i=3>else"00010000"when<i=4>else"00001000"when<i=5>else"00000100"when<i=6>else"00000010"when<i=7>else"00000001"when<i=8>else"00000000";endone;記分模塊的VHDL程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitymydecoderisport<binaryin:instd_logic_vector<4downto1>;bcdout1:outstd_logic_vector<4downto1>;bcdout2:outstd_logic_vector<4downto1>>;endmydecoder;architecturemofmydecoderissignaltembinaryin:std_logic_vector<4downto1>;beginprocess<binaryin>begintembinaryin<=binaryin;casetembinaryiniswhen"0000"=>bcdout1<="0000";bcdout2<="0000";when"0001"=>bcdout1<="0000";bcdout2<="0001";when"0010"=>bcdout1<="0000";bcdout2<="0010";when"0011"=>bcdout1<="0000";bcdout2<="0011";when"0100"=>bcdout1<="0000";bcdout2<="0100";when"0101"=>bcdout1<="0000";bcdout2<="0101";when"0110"=>bcdout1<="0000";bcdout2<="0110";when"0111"=>bcdout1<="0000";bcdout2<="0111";when"1000"=>bcdout1<="0000";bcdout2<="1000";when"1001"=>bcdout1<="0000";bcdout2<="1001";when"1010"=>bcdout1<="0001";bcdout2<="0000";when"1011"=>bcdout1<="0001";bcdout2<="0001";whenothers=>bcdout1<="0000";bcdout2<="0000";endcase;endprocess;endm;動態(tài)掃描模塊的VHDL程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityseltimeisport<clk:instd_logic;s:instd_logic_vector<15downto0>;daout:outstd_logic_vector<3downto0>;sel:outstd_logic_vector<2downto0>>;endseltime;architecturebehavofseltimeissignalsec:std_logic_vector<2downto0>;beginprocess<clk>beginif<clk'eventandclk='1'>thenif<sec="111">thensec<="000";elsesec<=sec+1;endif;endif;endprocess;process<sec,s<15downto0>>begincaseseciswhen"000"=>daout<=s<3downto0>;when"001"=>daout<="1111";when"010"=>daout<="1111";when"011"=>daout<=s<11downto8>;when"100"=>daout<=s<7downto4>;when"101"=>daout<="1111";when"110"=>daout<="1111";when"111"=>daout<=s<15downto12>;whenothers=>daout<="XXXX";endcase;endprocess;sel<=sec;endbehav;譯碼器模塊的VHDL程序LI

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論