eda課程設計報告--按鍵游戲電路設計_第1頁
已閱讀1頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  EDA技術課程設計任務書</p><p><b>  目錄</b></p><p><b>  摘要5</b></p><p>  一、 課程設計內容6</p><p>  二、系統(tǒng)總體設計6</p><p>  三、系統(tǒng)軟件設計與實現(xiàn)7<

2、/p><p>  1. 各模塊程序說明7</p><p>  2.各模塊輸入輸出端口說明:18</p><p>  2.引腳分配及下載過程:20</p><p>  四、系統(tǒng)測試與結果分析:20</p><p>  1. 源程序仿真波形結果20</p><p>  2. 采樣編碼模塊仿真波

3、形結果21</p><p>  3. 分頻模塊仿真波形結果21</p><p>  4. 時鐘選擇模塊仿真波形結果21</p><p>  5. 隨機數產生模塊仿真波形結果22</p><p>  6. 匹配模塊仿真波形結果22</p><p><b>  五、心得體會24</b>&l

4、t;/p><p><b>  參考文獻25</b></p><p><b>  摘要</b></p><p>  本次按鍵游戲課程設計我們主要是應用VHDL語言程序設計,游戲參與者根據系統(tǒng)中的亮燈提示控制相應按鍵。對按鍵控制準確,說明參與者的身體越靈活,反應越快。整個系統(tǒng)劃分為:編碼模塊,分頻模塊,時鐘選擇模塊(即速度控制模

5、塊),隨機數產生模塊,比較匹配模塊(即得分模塊)等模塊,所有算法由軟件結合硬件電路來實現(xiàn),利用描述語言VHDL,并通過XilinxFPGA 芯片實現(xiàn)。</p><p><b>  課程設計內容</b></p><p>  用8個燈作目標,與之對應有8個按鍵進行控制。每一次8個燈中隨機出現(xiàn)一個燈處于“亮”的狀態(tài),在燈亮的時間內要求按到對應的按鍵,若按到則加1分,且燈熄滅

6、;否則失敗扣1分。 游戲分1-4四個難度級別,每個級別燈閃亮的速度不同,級別越高,速度越快,燈亮的時間越短。設定初始等級為1,連續(xù)成功按鍵5次加1等級,分數不清0,連續(xù)失敗5次減1等級, 等級為0時游戲結束。設有暫停/繼續(xù)和開始/停止功能。</p><p><b>  二、系統(tǒng)總體設計</b></p><p><b>  系統(tǒng)框圖與說明</b>&

7、lt;/p><p><b>  各框圖說明:</b></p><p>  ①分頻模塊是將輸入的FPGA 的50MHz 的時鐘分頻為各種需要的時鐘。</p><p> ?、跁r鐘選擇模塊根據按鍵匹配的結果,選擇對應難度的時鐘,即選擇A,B,C,D 其中的一個,</p><p>  然后控制其他的模塊。</p>&l

8、t;p> ?、垭S機數產生模塊使用的是m 序列,是基于線性反饋移位寄存器的原理實現(xiàn)的。本實驗中</p><p>  使用的是8 級m 序列發(fā)生器,產生一個長度為255 個時鐘脈沖周期的二進制偽隨機序列。</p><p><b>  其邏輯框圖如下:</b></p><p>  取其中的三位(如后三位)通過3-8 譯碼器來點亮LED 燈。&l

9、t;/p><p> ?、懿蓸泳幋a模塊,將8 個輸入按鍵進行采樣,編碼成3 位數。</p><p> ?、萜ヅ淠K,是把用戶的按鍵輸入值與對應于亮燈的隨機數進行比較,如果相同則增加分數</p><p>  值,不同則減少分數值。</p><p>  三、系統(tǒng)軟件設計與實現(xiàn)</p><p><b>  各模塊程序說明

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>  --時鐘選擇模塊聲明</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>  --隨機數產生模塊聲明</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 個輸入按鍵進行采樣,編碼成3 位數。)</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 的輸入時鐘</p><p>  clk:in std_logic; --時鐘選擇后得到的時鐘,即不同難度對應的時鐘</p>&

33、lt;p>  start:in std_logic; --開始信號,高電平有效</p><p>  k1,k2,k3,k4,k5,k6,k7,k8:in std_logic; --8 個輸入按鍵</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; --標志位</p><p><b>  begin</b></p><p>  process(clk50m,clk,start)

35、</p><p><b>  begin</b></p><p>  if start='0' then --初始時令flag=0</p><p>  flag<='0';</p><p>  elsif clk50m='1' then--用50MHz 的時鐘進行采樣

36、編碼,且在一個難度時鐘內只采樣編碼一次</p><p>  if flag='0' then</p><p>  if k8='1' then</p><p>  key<="111";</p><p>  flag<='1'; --flag=1 時表明已經采樣編

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 --在難度時鐘的上升沿將flag 置0,表明可進行采樣編碼</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 的時鐘分頻為各種需要的時鐘。)</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 的輸入時鐘</p><p>  start:in STD_LOGIC; --開始信號,高電平有效</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 的信號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 的信號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 的信號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 時初始化</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 時鐘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 時鐘10 分頻后得到0.4Hz 時</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 時鐘6 分頻后得到0.67Hz 時</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 時鐘2 分頻后得到0.5Hz 的時</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>  時鐘選擇模塊</b></p><p> ?。〞r鐘選擇模塊根據按鍵匹配的結果,選擇對應難度的時鐘,即選擇A,B,C,D 其 中的一個,然后控 制 其他的模塊。)</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 的輸入時鐘</p><p> 

66、 start:in std_logic; --開始信號,高電平有效</p><p>  A,B,C,D:in std_logic; --A,B,C,D 分別對應難度A,B,C,D 的時鐘</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 的使能信號</p><p>

67、  led_selout:out std_logic;</p><p>  led7s:out std_logic_vector(6 downto 0);--不同的難度用不同的LED 來指示</p><p>  clkout:out std_logic); --不同的難度輸出對應的難度時鐘</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 --當en_A='1'

71、時,時鐘對應為難度A 的時鐘,且指示難度A 的LED亮</p><p><b>  clk<=A;</b></p><p>  led7s<="1111001";</p><p>  elsif m=4 then --當en_B='1'時,時鐘對應為難度B 的時鐘,且指示難度B 的LED 亮<

72、;/p><p><b>  clk<=B;</b></p><p>  led7s<="0100100";</p><p>  elsif m=2 then --當en_C='1'時,時鐘對應為難度C 的時鐘,且指示難度C 的LED 亮</p><p><b>  c

73、lk<=C;</b></p><p>  led7s<="0110000";</p><p>  elsif m=1 then --當en_D='1'時,時鐘對應為難度D 的時鐘,且指示難度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>  隨機數產生模塊</b></p><p> ?。S機數產生模塊使用的是m 序列,是基于線性反饋移位寄存器的原理實現(xiàn)的。本實驗中使用的是8 級

76、 m 序列發(fā)生器,產生一個長度為255 個時鐘脈沖周期的二進制偽隨機序列。)</p><p>  entity random is</p><p>  Port ( clk : in STD_LOGIC; --難度時鐘</p><p>  start:in STD_LOGIC; --開始信號,高電平有效</p><p>  en:in ST

77、D_LOGIC; --暫停信號,en=0 時暫停</p><p>  led : out STD_LOGIC_VECTOR (2 downto 0)); --產生的三位隨機數</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,是把用戶的按鍵輸入值與對應于亮燈的隨機數進行比較,如果相同則增加分數值,不同則 減少分數值。)</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; --開始信號,高電平有效</p><p>  clear:in std_logic; --最高分清零信號,clear=1 時清

83、除最高分紀錄</p><p>  en:in std_logic; --暫停信號,en=0 時暫停</p><p>  clk : in STD_LOGIC; --clk50m 為50MHz 的輸入時鐘,clk 為難度時鐘</p><p>  key : in STD_LOGIC_VECTOR (2 downto 0); --key 為編碼后得到的編碼值</p

84、><p>  led : in STD_LOGIC_VECTOR (2 downto 0);--led 為產生的三位隨機數</p><p>  win,lose:out STD_LOGIC; --win=1 表明游戲勝利,lose=1 表明游戲失敗</p><p>  en_A : out STD_LOGIC; --難度A 的使能信號</p><p&

85、gt;  en_B : out STD_LOGIC; --難度B 的使能信號</p><p>  en_C : out STD_LOGIC; --難度C 的使能信號</p><p>  en_D : out STD_LOGIC; --難度D 的使能信號</p><p>  highscore_out:out STD_LOGIC_VECTOR(11 downto 0)

86、; --最高分</p><p>  score_out : out STD_LOGIC_VECTOR (11 downto 0); --當前分數</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; --當result=1 時游戲結束,LCD 上會顯示輸或贏</p><p>  

89、win<=mwin;--得5 分加一條命,失誤一次扣一分,失誤達到2 次扣一條命,當分數為0 時,失誤一次不減分,但扣一條命</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; --初始分數為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=> --當分數小于5 分時,難度為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=> --當分數在5-10 之間時,難度為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=> --當分數在10-15 之間時,難度為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=> --當分數在15 以上時,難度為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.各模塊輸入輸出端口說明:</p><p>  1)頂層模塊game</p><p><b>  輸入信號IN:</b></p><p>  clk50m:in std_logic; --50MHz 的輸入時鐘</p><p>  k1,k2,k3,k4,k5,k6,k7,k

131、8:in std_logic; --8 個輸入按鍵</p><p>  start:in std_logic; --開始信號,高電平有效</p><p>  clear:in std_logic; --最高分清零信號,clear=1 時清除最高分紀錄</p><p>  en:in STD_LOGIC; --暫停信號,en=0 時暫停</p><

132、p><b>  輸出信號OUT:</b></p><p>  win,lose:out std_logic; --win=1 表明游戲勝利,lose=1 表明游戲失敗</p><p>  led:out std_logic_vector(2 downto 0); --產生的三位隨機數,送到74LS138進行譯碼,從而點亮一個LED</p><

133、p>  leda,ledb,ledc,ledd:out std_logic; --不同的難度分別用不同的LED 燈來指示</p><p>  sound:out std_logic; --為輸出的喇叭信號</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)); --數據信號輸出</p><p>  采樣編碼模塊code</p><p> ?。ㄝ斎霝?0MHz 的時鐘信號clk50m,選擇的難度信號clk,</p><p> 

135、 開始信號start,以及八個按鍵;輸出為編碼值key。)</p><p><b>  輸入信號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>  輸出信號OUT:</b></p><p>  key:out std_logic_vector(2 downto 0)</p><p>  分頻模塊divider </p><p> ?。ㄝ斎霝?0MHz

137、 的時鐘信號,開始信號start;</p><p>  輸出為A,B,C,D 四種難度的時鐘。)</p><p><b>  輸入信號IN:</b></p><p>  clk50m : in STD_LOGIC;</p><p>  start:in STD_LOGIC;</p><p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論