

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> EDA技術(shù)課程設(shè)計(jì)任務(wù)書(shū)</p><p><b> 目錄</b></p><p><b> 摘要5</b></p><p> 一、 課程設(shè)計(jì)內(nèi)容6</p><p> 二、系統(tǒng)總體設(shè)計(jì)6</p><p> 三、系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)7<
2、/p><p> 1. 各模塊程序說(shuō)明7</p><p> 2.各模塊輸入輸出端口說(shuō)明:18</p><p> 2.引腳分配及下載過(guò)程:20</p><p> 四、系統(tǒng)測(cè)試與結(jié)果分析:20</p><p> 1. 源程序仿真波形結(jié)果20</p><p> 2. 采樣編碼模塊仿真波
3、形結(jié)果21</p><p> 3. 分頻模塊仿真波形結(jié)果21</p><p> 4. 時(shí)鐘選擇模塊仿真波形結(jié)果21</p><p> 5. 隨機(jī)數(shù)產(chǎn)生模塊仿真波形結(jié)果22</p><p> 6. 匹配模塊仿真波形結(jié)果22</p><p><b> 五、心得體會(huì)24</b>&l
4、t;/p><p><b> 參考文獻(xiàn)25</b></p><p><b> 摘要</b></p><p> 本次按鍵游戲課程設(shè)計(jì)我們主要是應(yīng)用VHDL語(yǔ)言程序設(shè)計(jì),游戲參與者根據(jù)系統(tǒng)中的亮燈提示控制相應(yīng)按鍵。對(duì)按鍵控制準(zhǔn)確,說(shuō)明參與者的身體越靈活,反應(yīng)越快。整個(gè)系統(tǒng)劃分為:編碼模塊,分頻模塊,時(shí)鐘選擇模塊(即速度控制模
5、塊),隨機(jī)數(shù)產(chǎn)生模塊,比較匹配模塊(即得分模塊)等模塊,所有算法由軟件結(jié)合硬件電路來(lái)實(shí)現(xiàn),利用描述語(yǔ)言VHDL,并通過(guò)XilinxFPGA 芯片實(shí)現(xiàn)。</p><p><b> 課程設(shè)計(jì)內(nèi)容</b></p><p> 用8個(gè)燈作目標(biāo),與之對(duì)應(yīng)有8個(gè)按鍵進(jìn)行控制。每一次8個(gè)燈中隨機(jī)出現(xiàn)一個(gè)燈處于“亮”的狀態(tài),在燈亮的時(shí)間內(nèi)要求按到對(duì)應(yīng)的按鍵,若按到則加1分,且燈熄滅
6、;否則失敗扣1分。 游戲分1-4四個(gè)難度級(jí)別,每個(gè)級(jí)別燈閃亮的速度不同,級(jí)別越高,速度越快,燈亮的時(shí)間越短。設(shè)定初始等級(jí)為1,連續(xù)成功按鍵5次加1等級(jí),分?jǐn)?shù)不清0,連續(xù)失敗5次減1等級(jí), 等級(jí)為0時(shí)游戲結(jié)束。設(shè)有暫停/繼續(xù)和開(kāi)始/停止功能。</p><p><b> 二、系統(tǒng)總體設(shè)計(jì)</b></p><p><b> 系統(tǒng)框圖與說(shuō)明</b>&
7、lt;/p><p><b> 各框圖說(shuō)明:</b></p><p> ?、俜诸l模塊是將輸入的FPGA 的50MHz 的時(shí)鐘分頻為各種需要的時(shí)鐘。</p><p> ?、跁r(shí)鐘選擇模塊根據(jù)按鍵匹配的結(jié)果,選擇對(duì)應(yīng)難度的時(shí)鐘,即選擇A,B,C,D 其中的一個(gè),</p><p> 然后控制其他的模塊。</p>&l
8、t;p> ?、垭S機(jī)數(shù)產(chǎn)生模塊使用的是m 序列,是基于線性反饋移位寄存器的原理實(shí)現(xiàn)的。本實(shí)驗(yàn)中</p><p> 使用的是8 級(jí)m 序列發(fā)生器,產(chǎn)生一個(gè)長(zhǎng)度為255 個(gè)時(shí)鐘脈沖周期的二進(jìn)制偽隨機(jī)序列。</p><p><b> 其邏輯框圖如下:</b></p><p> 取其中的三位(如后三位)通過(guò)3-8 譯碼器來(lái)點(diǎn)亮LED 燈。&l
9、t;/p><p> ?、懿蓸泳幋a模塊,將8 個(gè)輸入按鍵進(jìn)行采樣,編碼成3 位數(shù)。</p><p> ?、萜ヅ淠K,是把用戶的按鍵輸入值與對(duì)應(yīng)于亮燈的隨機(jī)數(shù)進(jìn)行比較,如果相同則增加分?jǐn)?shù)</p><p> 值,不同則減少分?jǐn)?shù)值。</p><p> 三、系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 各模塊程序說(shuō)明
10、</b></p><p><b> 1)頂層模塊</b></p><p> entity game is</p><p> port(clk50m:in std_logic;</p><p> k1,k2,k3,k4,k5,k6,k7,k8:in std_logic; </p><
11、p> start:in std_logic;</p><p> clear:in std_logic; </p><p> en:in STD_LOGIC; </p><p> win,lose:out std_logic; </p><p> led:out std_logic_vector(2 downto 0); <
12、;/p><p> Sel_selout:out std_logic;</p><p> Sel7s:out std_logic_vector(6 downto 0);</p><p> sound:out std_logic;</p><p> LCD_RS : out STD_LOGIC;</p><p> L
13、CD_RW : out STD_LOGIC;</p><p> LCD_EN : out STD_LOGIC;</p><p> data : out STD_LOGIC_VECTOR (3 downto 0)); </p><p><b> end game;</b></p><p> architecture
14、 Behavioral of game is</p><p> signal A,B,C,D,clk,clkout,clk4,clk500,clk6m:std_logic;</p><p> signal key:STD_LOGIC_VECTOR (2 downto 0);</p><p> signal mwin,mlose:std_logic;</p
15、><p> signal en_A,en_B,en_C,en_D: std_logic;</p><p> signal mled:std_logic_vector(2 downto 0);</p><p> signal score,highscore:STD_LOGIC_VECTOR(11 downto 0);</p><p> si
16、gnal life:STD_LOGIC_VECTOR (7 downto 0);</p><p> --采樣編碼模塊聲明</p><p> component code</p><p> port(clk50m:in std_logic;</p><p> clk:in std_logic;</p><p>
17、 start:in std_logic;</p><p> k1,k2,k3,k4,k5,k6,k7,k8:in std_logic;</p><p> key:out std_logic_vector(2 downto 0));</p><p> end component;</p><p><b> --分頻模塊聲明&l
18、t;/b></p><p> component divider</p><p> Port ( clk50m : in STD_LOGIC;</p><p> start:in STD_LOGIC;</p><p> A : out STD_LOGIC;</p><p> B : out STD_LO
19、GIC;</p><p> C: out STD_LOGIC;</p><p> D : out STD_LOGIC;</p><p> clk500:out STD_LOGIC;</p><p> clk4:out std_logic;</p><p> clk6m:out std_logic);</
20、p><p> end component;</p><p> --時(shí)鐘選擇模塊聲明</p><p> component clk_sel</p><p> port(clk50m:in std_logic;</p><p> start:in std_logic;</p><p> A,
21、B,C,D:in std_logic;</p><p> en_A,en_B,en_C,en_D:in std_logic;</p><p> leda,ledb,ledc,ledd:out std_logic;</p><p> clkout:out std_logic);</p><p> end component;</p
22、><p> --隨機(jī)數(shù)產(chǎn)生模塊聲明</p><p> component random</p><p> Port ( clk : in STD_LOGIC;</p><p> start:in STD_LOGIC;</p><p> en:in STD_LOGIC;</p><p>
23、led : out STD_LOGIC_VECTOR (2 downto 0));</p><p> end component;</p><p><b> --匹配模塊聲明</b></p><p> component compare</p><p> port( start:in std_logic;<
24、/p><p> clear:in std_logic;</p><p> en:in std_logic;</p><p> clk : in STD_LOGIC;</p><p> key : in STD_LOGIC_VECTOR (2 downto 0);</p><p> led : in STD_LOG
25、IC_VECTOR (2 downto 0);</p><p> win,lose:out STD_LOGIC;</p><p> en_A : out STD_LOGIC;</p><p> en_B : out STD_LOGIC;</p><p> en_C : out STD_LOGIC;</p><p&g
26、t; en_D : out STD_LOGIC;</p><p> highscore_out:out STD_LOGIC_VECTOR(11 downto 0);</p><p> score_out : out STD_LOGIC_VECTOR (11 downto 0);</p><p> life_out : out STD_LOGIC_VECTOR
27、 (7 downto 0));</p><p> end component;</p><p><b> begin</b></p><p> win<=mwin;</p><p> lose<=mlose;</p><p> led<=mled;</p>
28、<p> u0:code port map(clk50m,clkout,start,k1,k2,k3,k4,k5,k6,k7,k8,key);</p><p> u1:divider port map(clk50m,start,A,B,C,D,clk500,clk4,clk6m);</p><p> u2:clk_sel port map(clk50m,start,A,B
29、,C,D,en_A,en_B,en_C,en_D,leda,ledb,ledc,ledd,clkout);</p><p> u3:random port map(clkout,start,en,mled);</p><p> u4:compare port</p><p> map(start,clear,en,clkout,key,mled,mwin,ml
30、ose,en_A,en_B,en_C,en_D,highscore,score,life);</p><p> u5:music port map(clk6m,clk4,en_A,en_B,en_C,en_D,sound);</p><p> u6:lcd port</p><p> map(clk500,start,mwin,mlose,highscore,
31、score,life,LCD_RS,LCD_RW,LCD_EN,data);</p><p> end Behavioral;</p><p><b> 采樣編碼模塊</b></p><p> ?。ú蓸泳幋a模塊,將8 個(gè)輸入按鍵進(jìn)行采樣,編碼成3 位數(shù)。)</p><p> library ieee;</p&
32、gt;<p> use ieee.std_logic_1164.all;</p><p> entity code is</p><p> port(clk50m:in std_logic; --50MHz 的輸入時(shí)鐘</p><p> clk:in std_logic; --時(shí)鐘選擇后得到的時(shí)鐘,即不同難度對(duì)應(yīng)的時(shí)鐘</p>&
33、lt;p> start:in std_logic; --開(kāi)始信號(hào),高電平有效</p><p> k1,k2,k3,k4,k5,k6,k7,k8:in std_logic; --8 個(gè)輸入按鍵</p><p> key:out std_logic_vector(2 downto 0)); --按鍵編碼后得到的編碼</p><p><b> en
34、d code;</b></p><p> architecture Behavioral of code is</p><p> signal flag:std_logic; --標(biāo)志位</p><p><b> begin</b></p><p> process(clk50m,clk,start)
35、</p><p><b> begin</b></p><p> if start='0' then --初始時(shí)令flag=0</p><p> flag<='0';</p><p> elsif clk50m='1' then--用50MHz 的時(shí)鐘進(jìn)行采樣
36、編碼,且在一個(gè)難度時(shí)鐘內(nèi)只采樣編碼一次</p><p> if flag='0' then</p><p> if k8='1' then</p><p> key<="111";</p><p> flag<='1'; --flag=1 時(shí)表明已經(jīng)采樣編
37、碼完畢</p><p> elsif k7='1' then</p><p> key<="110";</p><p> flag<='1';</p><p> elsif k6='1' then</p><p> key<
38、="101";</p><p> flag<='1';</p><p> elsif k5='1' then</p><p> key<="100";</p><p> flag<='1';</p><p>
39、; elsif k4='1' then</p><p> key<="011";</p><p> flag<='1';</p><p> elsif k3='1' then</p><p> key<="010";</p
40、><p> flag<='1';</p><p> elsif k2='1' then</p><p> key<="001";</p><p> flag<='1';</p><p> elsif k1='1'
41、 then</p><p> key<="000";</p><p> flag<='1';</p><p><b> end if;</b></p><p><b> end if;</b></p><p> els
42、if rising_edge(clk) then --在難度時(shí)鐘的上升沿將flag 置0,表明可進(jìn)行采樣編碼</p><p> if flag='1' then</p><p> flag<='0';</p><p><b> end if;</b></p><p><b
43、> end if;</b></p><p> end process;</p><p> end Behavioral;</p><p><b> 分頻模塊</b></p><p> ?。ǚ诸l模塊是將輸入的FPGA 的50MHz 的時(shí)鐘分頻為各種需要的時(shí)鐘。)</p><p&
44、gt; library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity game is</p><p> Port ( clk50m : in STD_LOGIC; --50MH
45、z 的輸入時(shí)鐘</p><p> start:in STD_LOGIC; --開(kāi)始信號(hào),高電平有效</p><p> A : out STD_LOGIC; --難度A 的周期為2.5 秒</p><p> B : out STD_LOGIC; --難度B 的周期為2.0 秒</p><p> C : out STD_LOGIC; --
46、難度C 的周期為1.5 秒</p><p> D : out STD_LOGIC; --難度D 的周期為1.0 秒</p><p> clk500:out STD_LOGIC; --clk500=500Hz</p><p> clk4:out std_logic; --clk=4Hz</p><p> clk6m:out std_lo
47、gic); --clk6m=6.25MHz</p><p><b> end game;</b></p><p> architecture Behavioral of game is</p><p> signal ma,mb,mc,md,m4,m500,m6m:std_logic:='0';</p>&l
48、t;p> signal cnt1:integer range 1 to 50000;</p><p> signal cnt2:integer range 1 to 6250000;</p><p> signal cnt3:integer range 1 to 2;</p><p> signal cnt4:integer range 1 to 5;
49、</p><p> signal cnt5:integer range 1 to 3;</p><p><b> begin</b></p><p><b> A<=ma;</b></p><p><b> B<=mb;</b></p><
50、;p><b> C<=mc;</b></p><p><b> D<=md;</b></p><p> clk500<=m500;</p><p> clk6m<=m6m;</p><p><b> clk4<=m4;</b><
51、;/p><p> process(clk50m)</p><p> variable n:integer range 1 to 5:=1;</p><p><b> begin</b></p><p> if rising_edge(clk50m) then --50MHz8 分頻后得到6.25MHz 的信號(hào)clk6
52、m</p><p><b> n:=n+1;</b></p><p> if n=5 then</p><p> m6m<=not m6m;</p><p><b> n:=1;</b></p><p><b> end if;</b>&
53、lt;/p><p> if cnt1=50000 then --50MHz100000 分頻后得到500Hz 的信號(hào)clk500</p><p> m500<=not m500;</p><p><b> cnt1<=1;</b></p><p><b> else</b></
54、p><p> cnt1<=cnt1+1;</p><p><b> end if;</b></p><p> if cnt2=6250000 then ----50MHz12500000 分頻后得到4Hz 的信號(hào)clk4</p><p> m4<=not m4;</p><p>&
55、lt;b> cnt2<=1;</b></p><p><b> else</b></p><p> cnt2<=cnt2+1;</p><p><b> end if;</b></p><p><b> end if;</b></p
56、><p> end process;</p><p> process(start,m4,md)</p><p><b> begin</b></p><p> if start='0' then --start=0 時(shí)初始化</p><p><b> ma<
57、='0';</b></p><p><b> mb<='0';</b></p><p><b> mc<='0';</b></p><p><b> md<='0';</b></p>&l
58、t;p><b> cnt3<=1;</b></p><p><b> cnt5<=1;</b></p><p><b> else</b></p><p> if rising_edge(m4) then --4Hz 時(shí)鐘4 分頻后得到1Hz</p><p
59、> if cnt3=2 then</p><p><b> cnt3<=1;</b></p><p> md<=not md;</p><p><b> else</b></p><p> cnt3<=cnt3+1;</p><p><
60、b> end if;</b></p><p> if cnt4=5 then --4Hz 時(shí)鐘10 分頻后得到0.4Hz 時(shí)</p><p> ma<=not ma;</p><p><b> cnt4<=1;</b></p><p><b> else</b>
61、;</p><p> cnt4<=cnt4+1;</p><p><b> end if;</b></p><p> if cnt5=3 then --4Hz 時(shí)鐘6 分頻后得到0.67Hz 時(shí)</p><p> mc<=not mc;</p><p><b> c
62、nt5<=1;</b></p><p><b> else</b></p><p> cnt5<=cnt5+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p
63、> if rising_edge(md) then --1Hz 時(shí)鐘2 分頻后得到0.5Hz 的時(shí)</p><p> mb<=not mb;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end proce
64、ss;</p><p> end Behavioral;</p><p><b> 時(shí)鐘選擇模塊</b></p><p> (時(shí)鐘選擇模塊根據(jù)按鍵匹配的結(jié)果,選擇對(duì)應(yīng)難度的時(shí)鐘,即選擇A,B,C,D 其 中的一個(gè),然后控 制 其他的模塊。)</p><p> library ieee;</p>
65、<p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity clk_sel is</p><p> port(clk50m:in std_logic; --50MHz 的輸入時(shí)鐘</p><p>
66、 start:in std_logic; --開(kāi)始信號(hào),高電平有效</p><p> A,B,C,D:in std_logic; --A,B,C,D 分別對(duì)應(yīng)難度A,B,C,D 的時(shí)鐘</p><p> en_A,en_B,en_C,en_D:in std_logic;--en_A,en_B,en_C,en_D 分別為A,B,C,D 的使能信號(hào)</p><p>
67、 led_selout:out std_logic;</p><p> led7s:out std_logic_vector(6 downto 0);--不同的難度用不同的LED 來(lái)指示</p><p> clkout:out std_logic); --不同的難度輸出對(duì)應(yīng)的難度時(shí)鐘</p><p> end clk_sel;</p><
68、p> architecture Behavioral of clk_sel is</p><p> signal m:std_logic_vector(3 downto 0);</p><p> signal clk:std_logic:='0';</p><p><b> Begin</b></p>
69、<p> led_selout<='1';</p><p> m<=en_A&en_B&en_C&en_D;</p><p> clkout<=clk;</p><p> process(clk50m)</p><p><b> begin</b&
70、gt;</p><p> if start='0' then</p><p><b> clk<='0';</b></p><p> elsif rising_edge(clk50m) then</p><p> if m=8 then --當(dāng)en_A='1'
71、時(shí),時(shí)鐘對(duì)應(yīng)為難度A 的時(shí)鐘,且指示難度A 的LED亮</p><p><b> clk<=A;</b></p><p> led7s<="1111001";</p><p> elsif m=4 then --當(dāng)en_B='1'時(shí),時(shí)鐘對(duì)應(yīng)為難度B 的時(shí)鐘,且指示難度B 的LED 亮<
72、;/p><p><b> clk<=B;</b></p><p> led7s<="0100100";</p><p> elsif m=2 then --當(dāng)en_C='1'時(shí),時(shí)鐘對(duì)應(yīng)為難度C 的時(shí)鐘,且指示難度C 的LED 亮</p><p><b> c
73、lk<=C;</b></p><p> led7s<="0110000";</p><p> elsif m=1 then --當(dāng)en_D='1'時(shí),時(shí)鐘對(duì)應(yīng)為難度D 的時(shí)鐘,且指示難度D 的LED 亮</p><p><b> clk<=D;</b></p>
74、<p> led7s<="0011001";</p><p><b> else</b></p><p><b> clk<='0';</b></p><p><b> end if;</b></p><p>
75、<b> end if;</b></p><p> end process;</p><p> end Behavioral;</p><p><b> 隨機(jī)數(shù)產(chǎn)生模塊</b></p><p> (隨機(jī)數(shù)產(chǎn)生模塊使用的是m 序列,是基于線性反饋移位寄存器的原理實(shí)現(xiàn)的。本實(shí)驗(yàn)中使用的是8 級(jí)
76、 m 序列發(fā)生器,產(chǎn)生一個(gè)長(zhǎng)度為255 個(gè)時(shí)鐘脈沖周期的二進(jìn)制偽隨機(jī)序列。)</p><p> entity random is</p><p> Port ( clk : in STD_LOGIC; --難度時(shí)鐘</p><p> start:in STD_LOGIC; --開(kāi)始信號(hào),高電平有效</p><p> en:in ST
77、D_LOGIC; --暫停信號(hào),en=0 時(shí)暫停</p><p> led : out STD_LOGIC_VECTOR (2 downto 0)); --產(chǎn)生的三位隨機(jī)數(shù)</p><p> end random;</p><p> architecture Behavioral of random is</p><p> signa
78、l m:std_logic_vector(7 downto 0):="10000000";</p><p><b> begin</b></p><p> led<=m(2 downto 0);</p><p> process(clk,en,start)</p><p><b>
79、; begin</b></p><p> if start='0' then</p><p> m<="11000011";</p><p> elsif en='0' then</p><p><b> m<=m;</b></p
80、><p> elsif rising_edge(clk) then</p><p> m(7 downto 1)<=m(6 downto 0);</p><p> m(0)<=m(7) xor m(3) xor m(2) xor m(1);</p><p><b> end if;</b></p&g
81、t;<p> end process;</p><p> end Behavioral;</p><p><b> 匹配模塊</b></p><p> ?。ㄆヅ淠K,是把用戶的按鍵輸入值與對(duì)應(yīng)于亮燈的隨機(jī)數(shù)進(jìn)行比較,如果相同則增加分?jǐn)?shù)值,不同則 減少分?jǐn)?shù)值。)</p><p> library
82、ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity compare is</p><p> port( start:in std_logic; --開(kāi)始信號(hào),高電平有效</p><p> clear:in std_logic; --最高分清零信號(hào),clear=1 時(shí)清
83、除最高分紀(jì)錄</p><p> en:in std_logic; --暫停信號(hào),en=0 時(shí)暫停</p><p> clk : in STD_LOGIC; --clk50m 為50MHz 的輸入時(shí)鐘,clk 為難度時(shí)鐘</p><p> key : in STD_LOGIC_VECTOR (2 downto 0); --key 為編碼后得到的編碼值</p
84、><p> led : in STD_LOGIC_VECTOR (2 downto 0);--led 為產(chǎn)生的三位隨機(jī)數(shù)</p><p> win,lose:out STD_LOGIC; --win=1 表明游戲勝利,lose=1 表明游戲失敗</p><p> en_A : out STD_LOGIC; --難度A 的使能信號(hào)</p><p&
85、gt; en_B : out STD_LOGIC; --難度B 的使能信號(hào)</p><p> en_C : out STD_LOGIC; --難度C 的使能信號(hào)</p><p> en_D : out STD_LOGIC; --難度D 的使能信號(hào)</p><p> highscore_out:out STD_LOGIC_VECTOR(11 downto 0)
86、; --最高分</p><p> score_out : out STD_LOGIC_VECTOR (11 downto 0); --當(dāng)前分?jǐn)?shù)</p><p> end compare;</p><p> architecture Behavioral of compare is</p><p> signal mscore,mhig
87、hscore:integer range 0 to 999;</p><p> signal result,mwin,mlose:std_logic;</p><p> signal cnt1:integer range 0 to 4;</p><p> signal cnt2:integer range 0 to 1;</p><p>
88、; type state is(na,nb,nc,nd);</p><p> signal nandu:state;</p><p><b> begin</b></p><p> result<=mwin or mlose; --當(dāng)result=1 時(shí)游戲結(jié)束,LCD 上會(huì)顯示輸或贏</p><p>
89、win<=mwin;--得5 分加一條命,失誤一次扣一分,失誤達(dá)到2 次扣一條命,當(dāng)分?jǐn)?shù)為0 時(shí),失誤一次不減分,但扣一條命</p><p> process(clk,start,en,clear)</p><p><b> begin</b></p><p> if mscore>mhighscore then</p&
90、gt;<p> mhighscore<=mscore;</p><p><b> else</b></p><p> mhighscore<=mhighscore;</p><p><b> end if;</b></p><p> if start='0
91、' then</p><p> mscore<=0; --初始分?jǐn)?shù)為0</p><p><b> cnt1<=0;</b></p><p> mhighscore<=mhighscore;</p><p><b> cnt2<=0;</b></p>
92、<p> mwin<='0';</p><p> mlose<='0';</p><p> nandu<=na;</p><p> en_A<='1';</p><p> en_B<='0';</p><p
93、> en_C<='0';</p><p> en_D<='0';</p><p> elsif clear='1' then</p><p> mhighscore<=0;</p><p> elsif en='0' then</p>
94、<p> mscore<=mscore;</p><p> mhighscore<=mhighscore;</p><p> elsif rising_edge(clk) then</p><p> if result='0' then</p><p> if led=key then<
95、;/p><p> elsif mscore=999 then</p><p> mwin<='1';</p><p> elsif mscore<999 then</p><p> mscore<=mscore+1;</p><p><b> end if;</b
96、></p><p><b> else</b></p><p> if mscore=0 and mlife=0 then</p><p> mscore<=0;</p><p> mlose<='1';</p><p> elsif mlife=0 t
97、hen</p><p> mscore<=mscore;</p><p> mlose<='1';</p><p> elsif mscore=0 then</p><p> mscore<=0;</p><p><b> else</b></p&
98、gt;<p> mscore<=mscore-1;</p><p><b> end if;</b></p><p><b> end if; </b></p><p><b> end if;</b></p><p><b> end
99、if;</b></p><p> case nandu is</p><p> when na=> --當(dāng)分?jǐn)?shù)小于5 分時(shí),難度為A</p><p> en_A<='1';</p><p> en_B<='0';</p><p> en_C<
100、='0';</p><p> en_D<='0';</p><p> if mscore>=5 and mscore<10 then</p><p> nandu<=nb;</p><p><b> else</b></p><p>
101、 nandu<=na;</p><p><b> end if;</b></p><p> when nb=> --當(dāng)分?jǐn)?shù)在5-10 之間時(shí),難度為B</p><p> en_A<='0';</p><p> en_B<='1';</p>&
102、lt;p> en_C<='0';</p><p> en_D<='0';</p><p> if mscore>=10 and mscore<15 then</p><p> nandu<=nc;</p><p><b> else</b>&l
103、t;/p><p> nandu<=nb;</p><p><b> end if;</b></p><p> when nc=> --當(dāng)分?jǐn)?shù)在10-15 之間時(shí),難度為C</p><p> en_A<='0';</p><p> en_B<='
104、0';</p><p> en_C<='1';</p><p> en_D<='0';</p><p> if mscore>=15 and mscore<20 then</p><p> nandu<=nd;</p><p><b&g
105、t; else</b></p><p> nandu<=nc;</p><p><b> end if;</b></p><p> when nd=> --當(dāng)分?jǐn)?shù)在15 以上時(shí),難度為D</p><p> en_A<='0';</p><p>
106、; en_B<='0';</p><p> en_C<='0';</p><p> en_D<='1';</p><p> nandu<=nd;</p><p> when others=></p><p> en_A<=&
107、#39;1';</p><p> en_B<='0';</p><p> en_C<='0';</p><p> en_D<='0';</p><p> nandu<=na;</p><p><b> end case;
108、</b></p><p><b> end if;</b></p><p> end process;</p><p> process(clk)</p><p><b> begin</b></p><p> if falling_edge(clk)
109、then</p><p> if mscore>=900 then</p><p> score_out(11 downto 8)<=x"9";</p><p> if (mscore-900)>=90 then</p><p> score_out(7 downto 4)<=x"
110、9";</p><p> score_out(3 downto 0)<=conv_std_logic_vector((mscore-990),4);</p><p> elsif (mscore-900)>=80 then</p><p> score_out(7 downto 4)<=x"8";</p&g
111、t;<p> score_out(3 downto 0)<=conv_std_logic_vector((mscore-980),4);</p><p> elsif (mscore-900)>=70 then</p><p> score_out(7 downto 4)<=x"7";</p><p> s
112、core_out(3 downto 0)<=conv_std_logic_vector((mscore-970),4);</p><p> elsif (mscore-900)>=60 then</p><p> score_out(7 downto 4)<=x"6";</p><p> score_out(3 downt
113、o 0)<=conv_std_logic_vector((mscore-960),4);</p><p> elsif (mscore-900)>=50 then</p><p> score_out(7 downto 4)<=x"5";</p><p> score_out(3 downto 0)<=conv_st
114、d_logic_vector((mscore-950),4);</p><p> elsif (mscore-900)>=40 then</p><p> score_out(7 downto 4)<=x"4";</p><p> score_out(3 downto 0)<=conv_std_logic_vector((
115、mscore-940),4);</p><p> elsif (mscore-900)>=30 then</p><p> score_out(7 downto 4)<=x"3";</p><p> score_out(3 downto 0)<=conv_std_logic_vector((mscore-930),4);&
116、lt;/p><p> elsif (mscore-900)>=20 then</p><p> score_out(7 downto 4)<=x"2";</p><p> score_out(3 downto 0)<=conv_std_logic_vector((mscore-920),4);</p><p
117、> elsif (mscore-900)>=10 then</p><p> score_out(7 downto 4)<=x"1";</p><p> score_out(3 downto 0)<=conv_std_logic_vector((mscore-910),4);</p><p><b> e
118、lse</b></p><p> score_out(7 downto 4)<=x"0";</p><p> score_out(3 downto 0)<=conv_std_logic_vector((mscore-900),4);</p><p><b> end if;</b></p&
119、gt;<p> if mhighscore>=900 then</p><p> highscore_out(11 downto 8)<=x"9";</p><p> if (mhighscore-900)>=90 then</p><p> highscore_out(7 downto 4)<=x&
120、quot;9";</p><p> highscore_out(3 downto 0)<=conv_std_logic_vector((mhighscore-990),4);</p><p> elsif (mhighscore-900)>=80 then</p><p> highscore_out(7 downto 4)<=x&
121、quot;8";</p><p> highscore_out(3 downto 0)<=conv_std_logic_vector((mhighscore-980),4);</p><p> elsif (mhighscore-900)>=70 then</p><p> highscore_out(7 downto 4)<=x&
122、quot;7";</p><p> highscore_out(3 downto 0)<=conv_std_logic_vector((mhighscore-970),4);</p><p> elsif (mhighscore-900)>=60 then</p><p> highscore_out(7 downto 4)<=x&
123、quot;6";</p><p> highscore_out(3 downto 0)<=conv_std_logic_vector((mhighscore-960),4);</p><p> elsif (mhighscore-900)>=50 then</p><p> highscore_out(7 downto 4)<=x&
124、quot;5";</p><p> highscore_out(3 downto 0)<=conv_std_logic_vector((mhighscore-950),4);</p><p> elsif (mhighscore-900)>=40 then</p><p> highscore_out(7 downto 4)<=x&
125、quot;4";</p><p> highscore_out(3 downto 0)<=conv_std_logic_vector((mhighscore-940),4);</p><p> elsif (mhighscore-900)>=30 then</p><p> highscore_out(7 downto 4)<=x&
126、quot;3";</p><p> highscore_out(3 downto 0)<=conv_std_logic_vector((mhighscore-930),4);</p><p> elsif (mhighscore-900)>=20 then</p><p> highscore_out(7 downto 4)<=x&
127、quot;2";</p><p> highscore_out(3 downto 0)<=conv_std_logic_vector((mhighscore-920),4);</p><p> elsif (mhighscore-900)>=10 then</p><p> highscore_out(7 downto 4)<=x&
128、quot;1";</p><p> highscore_out(3 downto 0)<=conv_std_logic_vector((mhighscore-910),4);</p><p><b> else</b></p><p> highscore_out(7 downto 4)<=x"0"
129、;;</p><p> highscore_out(3 downto 0)<=conv_std_logic_vector((mhighscore-900),4);</p><p><b> end if;</b></p><p> end process;</p><p> end Behavioral;&
130、lt;/p><p> 2.各模塊輸入輸出端口說(shuō)明:</p><p> 1)頂層模塊game</p><p><b> 輸入信號(hào)IN:</b></p><p> clk50m:in std_logic; --50MHz 的輸入時(shí)鐘</p><p> k1,k2,k3,k4,k5,k6,k7,k
131、8:in std_logic; --8 個(gè)輸入按鍵</p><p> start:in std_logic; --開(kāi)始信號(hào),高電平有效</p><p> clear:in std_logic; --最高分清零信號(hào),clear=1 時(shí)清除最高分紀(jì)錄</p><p> en:in STD_LOGIC; --暫停信號(hào),en=0 時(shí)暫停</p><
132、p><b> 輸出信號(hào)OUT:</b></p><p> win,lose:out std_logic; --win=1 表明游戲勝利,lose=1 表明游戲失敗</p><p> led:out std_logic_vector(2 downto 0); --產(chǎn)生的三位隨機(jī)數(shù),送到74LS138進(jìn)行譯碼,從而點(diǎn)亮一個(gè)LED</p><
133、p> leda,ledb,ledc,ledd:out std_logic; --不同的難度分別用不同的LED 燈來(lái)指示</p><p> sound:out std_logic; --為輸出的喇叭信號(hào)</p><p> LCD_RS : out STD_LOGIC;</p><p> LCD_RW : out STD_LOGIC;</p>
134、<p> LCD_EN : out STD_LOGIC;</p><p> data : out STD_LOGIC_VECTOR (3 downto 0)); --數(shù)據(jù)信號(hào)輸出</p><p> 采樣編碼模塊code</p><p> ?。ㄝ斎霝?0MHz 的時(shí)鐘信號(hào)clk50m,選擇的難度信號(hào)clk,</p><p>
135、 開(kāi)始信號(hào)start,以及八個(gè)按鍵;輸出為編碼值key。)</p><p><b> 輸入信號(hào)IN:</b></p><p> clk50m:in std_logic;</p><p> clk:in std_logic;</p><p> start:in std_logic;</p><p
136、> k1,k2,k3,k4,k5,k6,k7,k8:in std_logic;</p><p><b> 輸出信號(hào)OUT:</b></p><p> key:out std_logic_vector(2 downto 0)</p><p> 分頻模塊divider </p><p> ?。ㄝ斎霝?0MHz
137、 的時(shí)鐘信號(hào),開(kāi)始信號(hào)start;</p><p> 輸出為A,B,C,D 四種難度的時(shí)鐘。)</p><p><b> 輸入信號(hào)IN:</b></p><p> clk50m : in STD_LOGIC;</p><p> start:in STD_LOGIC;</p><p><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計(jì)--樂(lè)曲硬件演奏電路設(shè)計(jì)
- eda課程設(shè)計(jì)---任意波形產(chǎn)生電路設(shè)計(jì)
- eda優(yōu)質(zhì)課程設(shè)計(jì)鍵盤(pán)掃描電路設(shè)計(jì)
- 洗衣機(jī)控制電路設(shè)計(jì)eda課程設(shè)計(jì)
- 游戲機(jī)eda課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)---溫度測(cè)量與控制電路設(shè)計(jì)
- eda課程設(shè)計(jì)--數(shù)字電子鐘邏輯電路設(shè)計(jì)
- eda技術(shù)課程設(shè)計(jì)--電梯控制器電路設(shè)計(jì)
- eda拔河游戲機(jī)課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)-電子游戲機(jī)電路
- eda拔河游戲機(jī)課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)--eda課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 課程設(shè)計(jì)報(bào)告數(shù)字秒表電路設(shè)計(jì)
- eda秒表電路課程設(shè)計(jì)
- eda課程設(shè)計(jì)方波三角波電路設(shè)計(jì)與仿真
- 典型射頻電路設(shè)計(jì)-微波電路課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì) 多級(jí)放大電路設(shè)計(jì)報(bào)告
- eda樂(lè)曲播放電路課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論