版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《基于FPGA的數(shù)字系統(tǒng)設(shè)計》項目設(shè)計文檔</p><p> 項目名稱: 乒乓球比賽游戲機 </p><p> 姓 名: </p><p> 院 系: 應用技術(shù)學院 </p><p> 專 業(yè): 電子信息工程(應電應本)
2、 </p><p> 學 號: </p><p> 指導教師: </p><p> 完成時間: 2012年 06月19日</p><p> 基于FPGA的數(shù)字系統(tǒng)設(shè)計項目成績評價表</p><p> 指導教師:
3、 年 月 日</p><p> 目 錄</p><p> 1 項目名稱、內(nèi)容與要求 ………………………………………04頁</p><p> 1.1 設(shè)計內(nèi)容…………………………………………………04頁</p><p> 1.2 具體要求………………
4、…………………………………04頁</p><p> 2 系統(tǒng)整體架構(gòu)(Architecture Description) ……………04頁</p><p> 2.1 設(shè)計思路…………………………………………………04頁</p><p> 2.2 系統(tǒng)原理(包含:框圖等闡述與設(shè)計說明等內(nèi)容)…04頁</p><p> 3 系統(tǒng)設(shè)計 (含
5、HDL或原理圖輸入設(shè)計)………………………05頁</p><p> 3.1 HDL 代碼…………………………………………………05頁</p><p> 3.2 系統(tǒng)整體電路圖(或RTL級電路圖)…………………12頁</p><p> 4 系統(tǒng)仿真(Simulation Waveform)…………………………13頁</p><p> 5
6、FPGA實現(xiàn)(FPGA Implementation) ………………………14頁</p><p> 總結(jié)(Closing)………………………………………………16頁</p><p> 參考書目(Reference):…………………………………………16頁</p><p> 一、項目名稱、內(nèi)容與要求</p><p><b>
7、 1.1項目名稱</b></p><p><b> 乒乓球比賽游戲機</b></p><p><b> 1.2設(shè)計內(nèi)容</b></p><p> 設(shè)計一個由甲乙雙方參賽,二人乒乓球游戲機。</p><p> 用8個(或更多個)LED排成一條直線,以中點為界,兩邊各代表參賽雙方的位
8、置,其中一只點亮的LED指示球的當前位置,點亮的LED依次從左到右,或從右到左,其移動的速度應能調(diào)節(jié)。</p><p> 當“球”(點亮的那只LED)運動到某方的最后一位時,參賽者應能果斷地按下位于自己一方的按紐開關(guān),即表示啟動球拍擊球,若擊中,則球向相反方向運動;若未中,球掉出桌外,則對方得一分。</p><p> 設(shè)置自動記分電路,甲乙雙方各用兩位數(shù)碼管進行記分顯示,每計滿11分為
9、1局。</p><p> 甲乙雙方各設(shè)一個發(fā)光二極管表示擁有發(fā)球權(quán),每隔2次自動交換發(fā)球權(quán),擁有發(fā)球權(quán)的一方發(fā)球才有效。</p><p><b> 1.3具體要求</b></p><p> (1)使用乒乓球游戲機的雙方在不同位置發(fā)球或擊球。</p><p> ?。?)乒乓球的位置和移動方向由燈亮和依次亮的方向決定。
10、使用者根據(jù)球的位置發(fā)出相應的動作。</p><p> ?。?)比賽用11分為一局來進行,雙方設(shè)置各自的記分牌,任意一方先記滿21分就獲勝此局。當記分牌清零后,開始新的一局比賽。</p><p> ?。?)比賽結(jié)束后音樂自動響起。</p><p> 二、系統(tǒng)整體架構(gòu)(Architecture Description)</p><p><
11、b> 2.1設(shè)計思路</b></p><p> 根據(jù)系統(tǒng)設(shè)計的要求,乒乓球比賽游戲機的電路原理框圖如下:</p><p> 三、系統(tǒng)設(shè)計 (含HDL或原理圖輸入設(shè)計)</p><p> 3.1 VHDL 代碼</p><p><b> 比賽模塊</b></p><p>
12、 library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.std_logic_unsigned.all; --引用必要的庫函數(shù)和包集合</p><p> entit
13、y compete is --實體名為pingpong</p><p> port(reset:in std_logic;</p><p> clk_1:in std_logic;</p><p> startbutton:in std_logic; --開始游戲輸入端口</p><p> serve:in std_logic_
14、vector(1 downto 0); --發(fā)球輸入端口</p><p> hit1,hit2:in std_logic; --甲和乙的擊球輸入端口</p><p> light:out std_logic_vector(1 to 8); --控制8個發(fā)光二極管的輸出端口</p><p> music_begin:out std_l
15、ogic;--控制音樂開始的輸出端口</p><p> counta,countb:out std_logic_vector(3 downto 0)); --2個用于控制4個7段譯碼器的輸出端口</p><p> end compete;</p><p> architecture one of compete is</p><
16、p> type pingpong is (waitserve,light1on,ballmoveto2,allow2hit,</p><p> light8on,ballmoveto1,allow1hit);</p><p> ---設(shè)置7個狀態(tài),為枚舉數(shù)據(jù)類型,記為pingpong </p><p> signal state:pingpong;&l
17、t;/p><p> signal i:integer range 0 to 8;</p><p> signal count1,count2,count3,count4:std_logic_vector(3 downto 0):="0000";</p><p> ---內(nèi)部計數(shù)器,是4位二進制變量</p><p><
18、;b> begin</b></p><p> process(clk_1) </p><p><b> begin </b></p><p> if(clk_1'event and clk_1='1') then </p><p> if count3="00
19、01" or count4="0001" then </p><p> music_begin<='1';</p><p><b> end if; </b></p><p> if(reset='1')then </p><p> music
20、_begin<='0'; </p><p><b> end if; </b></p><p><b> end if; </b></p><p> end process; </p><p> process(clk_1) --狀態(tài)機進程</p>
21、<p> --clk_1作為敏感信號觸發(fā)進程</p><p> begin --進程開始</p><p> if reset='1' then --異步置位</p><p> i<=0;count1<="0000";count2<="0000";cou
22、nt3<="0000";count4<="0000";</p><p> elsif clk_1'event and clk_1='1' then --當處于時鐘inclock上升沿時 </p><p> if count1="1011" then</p><p&g
23、t; i<=0;count1<="0000";count2<="0000";count3<=count3+1;</p><p> elsif count2="1011" then </p><p> i<=0;count1<="0000";count2<=&quo
24、t;0000";count4<=count4+1;</p><p> elsif startbutton='0' then</p><p> i<=0;count1<="0000";count2<="0000";count3<="0000";count4<=&quo
25、t;0000";</p><p> else --以下case語句是程序中最關(guān)鍵的狀態(tài)機部分</p><p> case state is</p><p> when waitserve=> --進程處于等待發(fā)球狀態(tài)</p><p> case serve is</p><p&g
26、t; when "01"=> i<=1;state<=light1on;</p><p> when "10"=> i<=8;state<=light8on;</p><p> when "11"=>i<=0;</p><p> when others
27、=> i<=0;</p><p><b> end case;</b></p><p> when light1on=> --進程處于第一盞燈亮狀態(tài)</p><p><b> i<=2;</b></p><p> if hit2='1' the
28、n</p><p><b> i<=0;</b></p><p> count1<=count1+1;state<=waitserve; </p><p><b> else</b></p><p> state<=ballmoveto2;</p>
29、<p><b> end if;</b></p><p> when light8on=> --進程處于第八盞燈亮狀態(tài)</p><p><b> i<=7;</b></p><p> if hit1='1' then</p><p><b&
30、gt; i<=0;</b></p><p> count2<=count2+1;state<=waitserve;</p><p><b> else</b></p><p> state<=ballmoveto1;</p><p><b> end if; <
31、;/b></p><p> when ballmoveto1=> --進程處于球向乙移動狀態(tài)</p><p> if hit1='1' then</p><p><b> i<=0;</b></p><p> count2<=count2+1;state<
32、=waitserve;</p><p> elsif i=2 then i<=1;</p><p> state<=allow1hit;</p><p> else i<=i-1;</p><p><b> end if;</b></p><p> when ballm
33、oveto2=> --進程處于球向乙移動狀態(tài)</p><p> if hit2='1'then</p><p><b> i<=0;</b></p><p> count1<=count1+1;state<=waitserve;</p><p> elsif i=
34、7 then i<=8;</p><p> state<=allow2hit;</p><p> else i<=i+1;</p><p><b> end if;</b></p><p> when allow1hit=> --進程處于允許甲擊球狀態(tài)</p>&
35、lt;p> if hit1='1' then i<=2;</p><p> state<=ballmoveto2;</p><p> else count2<=count2+1;i<=0;</p><p> state<=waitserve;</p><p><b> e
36、nd if;</b></p><p> when allow2hit=> --進程處于允許乙擊球狀態(tài)</p><p> if hit2='1'then i<=7;state<=ballmoveto1;</p><p> else count1<=count1+1;i<=0;</p>
37、<p> state<=waitserve;</p><p><b> end if;</b></p><p><b> end case;</b></p><p><b> end if;</b></p><p><b> end if
38、;</b></p><p> end process;</p><p> counta<=count1;countb<=count2;</p><p> --進程處i信號控制發(fā)光二極管的亮暗</p><p> light<="10000000"when(i=1) else</p&
39、gt;<p> "01000000" when(i=2) else</p><p> "00100000" when(i=3) else</p><p> "00010000" when(i=4) else</p><p> "00001000" when(i=5)
40、 else</p><p> "00000100" when(i=6) else</p><p> "00000010" when(i=7) else</p><p> "00000001" when(i=8) else</p><p> "00000000&quo
41、t;; --其他情況所有發(fā)光二極管都暗</p><p><b> end one;</b></p><p><b> 分頻模塊</b></p><p> library IEEE; </p><p> use IEEE.std_logic_1164.all;</p>
42、<p> use ieee.std_logic_arith.all;</p><p> use IEEE.std_logic_unsigned.all;</p><p> entity division16 is</p><p> port( cp:in std_logic; </p><p> clk_4:out st
43、d_logic );</p><p> end division16;</p><p> architecture division_body of division16 is</p><p> signal count:std_logic_vector(3 downto 0);</p><p><b> begin<
44、/b></p><p> process(cp)</p><p><b> begin</b></p><p> if(cp'event and cp='1')then </p><p> if(count="1111")then</p><p
45、> count<=(others=>'0');</p><p><b> else</b></p><p> count<=count+1;</p><p><b> end if;</b></p><p><b> end if;<
46、/b></p><p> end process;</p><p> process(cp)</p><p><b> begin</b></p><p> if(cp'event and cp='1')then </p><p> if(count=&qu
47、ot;1111")then</p><p> clk_4<='1';</p><p><b> else</b></p><p> clk_4<='0';</p><p><b> end if;</b></p><p
48、><b> end if;</b></p><p> end process;</p><p> end division_body;</p><p><b> 譯碼器部分</b></p><p> library ieee; </p><p> use i
49、eee.std_logic_1164.all; </p><p> entity disp is </p><p> port(d:in std_logic_vector(3 downto 0); </p><p> q:out std_logic_vector(6 downto 0)); </p><p> end disp; &l
50、t;/p><p> architecture disp_arc of disp is </p><p><b> begin </b></p><p> process(d) </p><p><b> begin </b></p><p> case d is <
51、;/p><p> when "0000"=>q<="0111111"; </p><p> when "0001"=>q<="0000110"; </p><p> when "0010"=>q<="1011011&qu
52、ot;; </p><p> when "0011"=>q<="1001111"; </p><p> when "0100"=>q<="1100110"; </p><p> when "0101"=>q<="11
53、01101"; </p><p> when "0110"=>q<="1111101"; </p><p> when "0111"=>q<="0100111"; </p><p> when "1000"=>q<=
54、"1111111"; </p><p> when "1001"=>q<="1101111"; </p><p> when others=>q<="0000000"; </p><p> end case; </p><p> e
55、nd process; </p><p> end disp_arc;</p><p><b> 數(shù)碼管選擇</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> ENTITY mux2 IS&
56、lt;/p><p> PORT(a,b: IN STD_LOGIC_VECTOR(6 downto 0);</p><p> sel: IN STD_LOGIC;</p><p> c:OUT STD_LOGIC_VECTOR(6 downto 0));</p><p><b> END mux2;</b></
57、p><p> ARCHITECTURE example OF mux2 IS</p><p><b> BEGIN</b></p><p> PROCESS(sel)</p><p><b> BEGIN</b></p><p> IF(SEL='1')
58、THEN</p><p><b> c<=a;</b></p><p><b> ELSE</b></p><p><b> c<=b;</b></p><p><b> END IF;</b></p><p>
59、 END PROCESS;</p><p> END example;</p><p> 音樂模塊(兩只老虎)</p><p> library IEEE; </p><p> use IEEE.std_logic_1164.all; </p><p> use IEEE.std_logic_unsigne
60、d.all;</p><p> entity music is </p><p> port ( music_begin:in std_logic; </p><p> clk_4:in std_logic; </p><p> clk:in std_logic; </p><p> music_out:ou
61、t std_logic ); </p><p> end music;</p><p> architecture music_body of music is </p><p> constant m1:integer:=637;--955; </p><p> constant m2:integer:=587;--851; <
62、;/p><p> constant m3:integer:=505;--758; </p><p> constant m4:integer:=468;--716; </p><p> constant m5:integer:=425;--639; </p><p> constant m6:integer:=379;--569; <
63、;/p><p> constant m7:integer:=330;--506; </p><p> constant m0:integer:=0; </p><p> signal counter:integer range 0 to 67; </p><p> signal count:integer range 0 to 1000;
64、 </p><p> signal sub:integer range 0 to 1000; </p><p> signal carrier:std_logic; </p><p> signal pat,pat1,pat2:std_logic;</p><p><b> begin</b></p>
65、<p> process(clk) </p><p><b> begin </b></p><p> if(clk'event and clk='1')then </p><p> if(carrier='1') then </p><p> sub<
66、;=count; </p><p><b> else </b></p><p> sub<=sub-1; </p><p><b> end if; </b></p><p><b> end if; </b></p><p> end
67、 process;</p><p> process(sub) </p><p><b> begin </b></p><p> if(sub=0) then </p><p> pat<='1'; </p><p><b> else </b&g
68、t;</p><p> pat<='0'; </p><p><b> end if; </b></p><p> carrier<=pat; </p><p> end process; </p><p> process(clk) </p>
69、<p><b> begin </b></p><p> if(clk'event and clk='1')then </p><p> pat1<=pat; </p><p><b> end if; </b></p><p> end proce
70、ss;</p><p> process(pat1) </p><p><b> begin </b></p><p> if(pat1'event and pat1='1') then </p><p> pat2<= not pat2; </p><p>
71、<b> end if; </b></p><p> music_out<=pat2; </p><p> end process; </p><p> process(clk_4) </p><p><b> begin </b></p><p> if(
72、clk_4'event and clk_4='1') then </p><p> if(music_begin='1') then </p><p> counter<=counter+1; </p><p><b> else </b></p><p> coun
73、ter<=0; </p><p><b> end if; </b></p><p><b> end if; </b></p><p> end process; </p><p> process(counter) </p><p><b> b
74、egin </b></p><p> case counter is </p><p> when 0=>count<=m0; when 1=>count<=m1;</p><p> when 2=>count<=m1; when 3=>count<=m2;</p>
75、<p> when 4=>count<=m2; when 5=>count<=m3;</p><p> when 6=>count<=m3; when 7=>count<=m1;</p><p> when 8=>count<=m1; when 9=>count<
76、=m1;</p><p> when 10=>count<=m2; when 11=>count<=m2;</p><p> when 12=>count<=m3; when 13=>count<=m3;</p><p> when 14=>count<=m1; when
77、 15=>count<=m1;</p><p> when 16=>count<=m3; when 17=>count<=m3;</p><p> when 18=>count<=m4; when 19=>count<=m4;</p><p> when 20=>count&l
78、t;=m5; when 21=>count<=m5;</p><p> when 22=>count<=m5; when 23=>count<=m5;</p><p> when 24=>count<=m3; when 25=>count<=m3;</p><p> wh
79、en 26=>count<=m4; when 27=>count<=m5;</p><p> when 28=>count<=m5; when 29=>count<=m5;</p><p> when 30=>count<=m5; when 31=>count<=m5;</p&g
80、t;<p> when 32=>count<=m5; when 33=>count<=m6;</p><p> when 34=>count<=m5;when 35=>count<=m4;</p><p> when 36=>count<=m3;when 37=>count<=m3
81、;</p><p> when 38=>count<=m1;when 39=>count<=m1;</p><p> when 40=>count<=m5;when 41=>count<=m6;</p><p> when 42=>count<=m5;when 43=>count&l
82、t;=m4;</p><p> when 44=>count<=m3;when 45=>count<=m3;</p><p> when 46=>count<=m1;when 47=>count<=m1;</p><p> when 48=>count<=m0; when 49=>
83、;count<=m1;</p><p> when 50=>count<=m1;when 51=>count<=m5;</p><p> when 52=>count<=m5;when 53=>count<=m1;</p><p> when 54=>count<=m1;when 5
84、5=>count<=m1;</p><p> when 56=>count<=m1;when 57=>count<=m0;</p><p> when 58=>count<=m1;when 59=>count<=m1;</p><p> when 60=>count<=m5;w
85、hen 61=>count<=m5;</p><p> when 62=>count<=m1;when 63=>count<=m1;</p><p> when 64=>count<=m1;when 65=>count<=m5;</p><p> when 66=>count<=m
86、0;when 67=>count<=m0; </p><p> end case; </p><p> end process; </p><p> end music_body;</p><p> 3.2 系統(tǒng)整體電路圖(或RTL級電路圖)</p><p> 四、系統(tǒng)仿真(Simulati
87、on Waveform)</p><p><b> 功能仿真波形圖</b></p><p><b> 時序仿真波形圖</b></p><p> 五、FPGA實現(xiàn)(FPGA Implementation)</p><p> 將程序下載到EDA2000實驗箱</p><p&
88、gt; 然后按照設(shè)定的管腳在EDA2000實驗箱上連接好實物圖</p><p> 輸入脈沖,驗證其功能</p><p> 六、總結(jié)(Closing)</p><p> 經(jīng)過一學期的學習,在陳強老師的教導下,我對在系統(tǒng)編程技術(shù)這門課有了很深刻的理解,并能結(jié)合所學的知識設(shè)計了這次的乒乓球游戲機。由于實驗箱上脈沖端有限,于是我又想到了要設(shè)計一個分頻器,我開始設(shè)計的
89、是16分頻和64分頻,因為我需要一個4Hz和1Hz的脈沖信號,但是,這樣做對整個電路而言沒有任何效果,無論怎樣都仿真不出波形,但是代碼沒錯,單獨仿真分頻器也有波形輸出。當我準備放棄時,我又抱著僥幸心理只設(shè)計一個16分頻的分頻器,我把分頻器接入電路,然后仿真,結(jié)果仿真波形出來了。然后下載到實驗箱驗證時,結(jié)果甲乙兩位選手的得分不能再同一排數(shù)碼管上顯示,后經(jīng)過我冷靜的分析,我想到了曾經(jīng)做過的60進制計數(shù)器,于是我便加了個數(shù)碼管選擇器,這樣甲乙
90、二人的分數(shù)可以再同一排數(shù)碼上顯示了。</p><p> 經(jīng)過這次實訓,我收獲頗豐,學到了很多知識,特別是提高了綜合分析應用的能力。我學會了如何去完成一個任務,懂得了享受過程。當遇到問題,冷靜,想辦法一點一點的排除障礙,到最后獲取成功,一種自信心由然而生。實訓是對每個人綜合能力的檢驗。要想做好任何事,除了自己平時要有一定的功底外,我們還需要一定的實踐動手能力,操作能力。此次實訓,我深深體會到了積累知識的重要性。在
91、短暫的實訓過程中,讓我深深的感覺到自己在實際運用中的知識的匱乏這時才真正領(lǐng)悟到“學無止境”的含義。</p><p> 參考書目(Reference):</p><p> 李國麗 朱維勇 《電子技術(shù)實驗指導書》 中國科技大學出版社</p><p> 潘松 黃繼 《EDA技術(shù)實用教程》 科學出版社</p><p> 王金明 《Verilo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計乒乓球游戲機報告
- eda課程設(shè)計--乒乓游戲機
- 數(shù)電課程設(shè)計乒乓球游戲機
- 課程設(shè)計--乒乓球比賽游戲機設(shè)計
- 電子技術(shù)課程設(shè)計--乒乓球游戲機
- 電子技術(shù)乒乓球比賽游戲機課程設(shè)計
- 微機原理課程設(shè)計--乒乓球比賽游戲機的設(shè)計
- 基于fpga乒乓球游戲機verilog設(shè)計
- eda課程設(shè)計---拔河游戲機
- 游戲機eda課程設(shè)計報告
- 基于vhdl的乒乓球游戲機的設(shè)計
- eda拔河游戲機課程設(shè)計報告
- eda拔河游戲機課程設(shè)計報告
- 數(shù)電課程設(shè)計基于multisim的乒乓球游戲機控制電路設(shè)計
- 乒乓球游戲模擬設(shè)計課程設(shè)計
- 數(shù)電課程設(shè)計--乒乓球游戲設(shè)計
- 基于fpga的乒乓球游戲機控制器設(shè)計
- fpga乒乓球游戲機設(shè)計----畢業(yè)論文
- 乒乓球游戲機研究報告附vhdl源程序
- 課程設(shè)計---基于vhdl的乒乓游戲機的設(shè)計
評論
0/150
提交評論