硬件課程設計-基于fpga的mp3音樂播放器說明書_第1頁
已閱讀1頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  MP3播放器說明文檔</p><p><b>  一、實現(xiàn)過程</b></p><p>  1. 制作樂譜查找表:找出不同音符的發(fā)音頻率,尋找最佳待分頻頻率,計算分頻數(shù)和分頻預置數(shù),制作樂譜查找表。如何選擇基準頻率很關鍵。若基準頻率比較小,用他除以音符頻率得到的分頻系數(shù)也就比較小,這樣的話進行四舍五入后誤差相對而言會比較大。若基準頻率偏大,分頻系

2、數(shù)也就偏大,這會增加系統(tǒng)的負擔。綜合考慮分頻系數(shù)的準確性和大小,基準頻率為750 khz是比較合適的。由于我們從開發(fā)板的內部時鐘分頻得到的750 khz的頻率信號是脈寬極窄的尖脈沖信號,為了提高揚聲器有足夠的功率發(fā)音,我們對尖脈沖信號再進行二分頻,得到對稱方波后再輸出。因此,在表1中,就是以375 khz為基準頻率計算了各個音符的分頻系數(shù)和分頻預置數(shù)。選擇11位二進制數(shù)表示分頻系數(shù)和分頻預置數(shù)(計數(shù)初值),因此最大值為2047。休止符不

3、用進行分頻,分頻系數(shù)為0,頻率為375000hz。</p><p>  分頻系數(shù)和分頻預置數(shù)的計算方法:</p><p>  分頻系數(shù)=375000/音符頻率</p><p>  分頻預置數(shù)(計數(shù)初值)=2047-分頻系數(shù)</p><p>  表1 各個音符的頻率及其對應的分頻系數(shù)(基準頻率375KHz)</p><p&g

4、t;  2. 預置曲譜:定義一個轉換規(guī)則,將音樂音符轉換為代碼預置在程序里。我們稱預置在程序里的代碼為樂譜代碼。音符轉換為樂譜代碼的規(guī)則為:休止符轉換為代碼0,低音1-低音7轉換為代碼1-7,中音1-中音7轉換為代碼8-14,高音1-高音7轉換為15-21?,F(xiàn)在一般樂曲中,最小的節(jié)拍為1/4拍。若定義1拍的持續(xù)時間為1秒,那么1/4拍的持續(xù)時間就為1/4秒,即0.25秒。其他的節(jié)拍數(shù)為1/4拍的整數(shù)倍,因此他們的持續(xù)時間就為0.25秒的

5、整數(shù)倍。將樂曲中每個音符以及持續(xù)的節(jié)拍數(shù)寫進程序,定義一個4hz的時鐘頻率,每當時鐘上升沿來臨時就輸出1/4拍音符,若是其他1/4拍整數(shù)倍的音符就連續(xù)輸出整數(shù)倍的次數(shù)。這樣,音符就源源不斷的輸出了。</p><p>  3. 對預置的曲譜碼在樂譜查表碼里進行查找,找出相應音符對應頻率的分頻系數(shù)和分頻預置數(shù)。</p><p>  4. 根據查找到的分頻預置數(shù)對待分頻頻率(750khz)進行分

6、頻并把輸出連接到集成運放電路Vin實現(xiàn)音量調節(jié)。音量調節(jié)的原理圖如圖1所示。按圖1所示電路圖連接電路,Vout接揚聲器。通過調節(jié)滑動變阻器R2就調節(jié)音量。</p><p><b>  圖1 音量控制電路</b></p><p><b>  二、代碼說明</b></p><p><b>  2.1設計代碼</

7、b></p><p>  2.1.1頂層模塊:【songer.vhd】</p><p>  library IEEE;</p><p>  use IEEE.STD_LOGIC_1164.ALL;--加入函數(shù)庫</p><p>  ENTITY Songer IS</p><p>  PORT (clock :

8、 in STD_LOGIC;--時鐘信號輸入</p><p>  rst : in STD_LOGIC;--復位信號輸入</p><p>  CODE1: OUT INTEGER RANGE 0 TO 7 ; --簡譜碼輸出顯示</p><p>  HIGH1: OUT std_logic; --高八度音顯示</p><p>  SPKO

9、UT: OUT STD_LOGIC ) ; --發(fā)音輸出</p><p>  END Songer;</p><p>  ARCHITECTURE Behavioral OF Songer IS</p><p>  COMPONENT NoteTabs—添加notetabs元件</p><p>  PORT ( clk : IN STD_L

10、OGIC ; </p><p>  ToneIndex : OUT INTEGER RANGE 0 TO 15 ) ;</p><p>  END COMPONENT ;</p><p>  COMPONENT ToneTaba—添加tonetaba元件</p><p>  PORT ( Index : IN INTEGER RANGE 0

11、 TO 21 ;</p><p>  CODE : OUT INTEGER RANGE 0 TO 7 ; </p><p>  HIGH : OUT std_logic ; </p><p>  Tone : OUT INTEGER RANGE 0 TO 16#7FF# ); </p><p>  END COMPONENT ;</p

12、><p>  COMPONENT Speakera—添加speakera元件</p><p>  PORT ( clk: IN STD_LOGIC ; </p><p>  Tone: IN INTEGER RANGE 0 TO 16#7FF# ; </p><p>  SpkS1: OUT STD_LOGIC ) ; </p>

13、<p>  END COMPONENT ;</p><p>  SIGNAL Tone1 : INTEGER RANGE 0 TO 16#7FF# ; --定義信號量,連接ToneTaba的輸出</p><p>  SIGNAL ToneIndex1 : INTEGER RANGE 0 TO 15 ; ----定義信號量,連接NoteTabs的輸出</p><

14、p>  component DCM_12MHZ—添加dcm-12mhz元件</p><p><b>  port(</b></p><p>  clkin: in std_logic; </p><p>  rst: in std_logic;</p><p>  clk_750khz: out std_l

15、ogic;</p><p>  clk_4hz: out std_logic);</p><p>  end component;</p><p>  signal clkout_4hz: STD_LOGIC;--定義信號量,連接DCM_12MHZ的4hz輸出</p><p>  signal clkout_750khz:std_logic

16、;--定義信號量,連接DCM_12MHZ的750khz輸出</p><p><b>  BEGIN </b></p><p><b>  --定義映射關系</b></p><p>  u1 : NoteTabs PORT MAP (clk=>clkout_4hz , ToneIndex =>ToneIndex1

17、 ) ;</p><p>  u2 : ToneTaba PORT MAP (Index=>ToneIndex1 , Tone=>Tone1 ,CODE=>CODE1, HIGH=>HIGH1 ) ;</p><p>  u3 : DCM_12MHZ port map (clkin=>clock,rst=>rst,clk_750khz=>clko

18、ut_750khz,clk_4hz=>clkout_4hz);</p><p>  u4 : Speakera PORT MAP (clk=>clkout_750khz,Tone=>Tone1, SpkS1=>SPKOUT );</p><p><b>  END;</b></p><p>  2.1.2樂譜發(fā)生模塊【N

19、oteTabs.vhd】</p><p>  library IEEE;</p><p>  use IEEE.STD_LOGIC_1164.ALL;--加入函數(shù)庫</p><p>  entity NoteTabs is--定義實體</p><p>  Port ( clk : in STD_LOGIC;--音樂節(jié)拍時鐘</p>

20、;<p>  ToneIndex : out integer range 0 to 15);--樂譜碼輸出</p><p>  end NoteTabs;</p><p>  architecture Behavioral of NoteTabs is</p><p>  signal Counter:integer range 0 to 2000;

21、--樂譜碼計數(shù)器 </p><p><b>  begin</b></p><p>  CNT8:process(clk)</p><p><b>  begin</b></p><p>  if Counter = 130 then counter <=0;--循環(huán)計數(shù)</p>

22、<p>  elsif (clk'event and clk='1') --時鐘上升沿觸發(fā)</p><p>  then Counter <=Counter + 1;--計數(shù)器加1</p><p><b>  end if;</b></p><p>  end process;</p>&

23、lt;p>  Search:process(Counter)-- 譯碼器查歌曲的樂譜表查表結果為音調表的索引值</p><p><b>  begin</b></p><p>  case Counter is</p><p>  when 00 to 01 =>ToneIndex <=8;--節(jié)拍00和01是中音1</

24、p><p>  when 02 to 03 =>ToneIndex <=9;--節(jié)拍02和03是中音2</p><p>  when 04 to 05 =>ToneIndex <=10;--中音3</p><p>  when 06 to 07 =>ToneIndex <=12;--中音5</p><p>  

25、when 08 to 11 =>ToneIndex <=13;--中音5</p><p>  when 12 to 15 =>ToneIndex <=13;--中音5</p><p>  when 16 to 19 =>ToneIndex <=13;--中音5</p><p>  when 20 to 21 =>ToneIn

26、dex <=10;--中音3</p><p>  when 22 to 23 =>ToneIndex <=6;--低音6</p><p>  when 24 to 25 =>ToneIndex <=6;--低音6</p><p>  when 26 to 29 =>ToneIndex <=8;--中音1</p>

27、<p>  when 30 to 31 =>ToneIndex <=10;--中音3</p><p>  when 32 to 33 =>ToneIndex <=9;--中音2</p><p>  when 34 =>ToneIndex <=9;--中音2</p><p>  when 35 =>ToneInde

28、x <=10;--中音3</p><p>  when 36 =>ToneIndex <=9;--中音2</p><p>  when 37 to 38 =>ToneIndex <=8;--中音2</p><p>  when 39 to 40 =>ToneIndex <=9;--寫入的歌為最炫民族風的前奏</p>

29、;<p>  when 41 to 42 =>ToneIndex <=8;--中音2</p><p>  when 43 to 46 =>ToneIndex <=6;--低音6</p><p>  when 47 to 50 =>ToneIndex <=10;--中音3</p><p>  when 51 to 54

30、 =>ToneIndex <=6;--低音6</p><p>  when 55 to 56 =>ToneIndex <=8;--中音1</p><p>  when 57 to 60 =>ToneIndex <=10;</p><p>  when 61 to 62 =>ToneIndex <=12;</p&g

31、t;<p>  when 63 =>ToneIndex <=9;</p><p>  when 64 =>ToneIndex <=10;</p><p>  when 65 =>ToneIndex <=9;</p><p>  when 66 to 67 =>ToneIndex <=8;</p>

32、;<p>  when 68 to 69 =>ToneIndex <=9;</p><p>  when 70 to 71 =>ToneIndex <=8;</p><p>  when 72 to 73 =>ToneIndex <=7;</p><p>  when 74 to 75 =>ToneIndex

33、<=5;</p><p>  when 76 to 79 =>ToneIndex <=10;</p><p>  when 80 to 83 =>ToneIndex <=6;</p><p>  when 84 to 87 =>ToneIndex <=8;</p><p>  when 88 to 9

34、1 =>ToneIndex <=10;</p><p>  when 92 to 94 =>ToneIndex <=9;</p><p>  when 95 =>ToneIndex <=10;</p><p>  when 96 =>ToneIndex <=9;</p><p>  when 9

35、7 to 98 =>ToneIndex <=8;</p><p>  when 99 to 100 =>ToneIndex <=9;</p><p>  when 101 to 102 =>ToneIndex <=8;</p><p>  when 103 to 104=>ToneIndex <=6;</p>

36、;<p>  when 105 to 106 =>ToneIndex <=5;</p><p>  when 107 to 110 =>ToneIndex <=10;</p><p>  when 111 to 114=>ToneIndex <=6;</p><p>  when 115 to 118 =>To

37、neIndex <=8;</p><p>  when 119 to 122 =>ToneIndex <=10;</p><p>  when 123 to 124 =>ToneIndex <=12;</p><p>  when 125 to 126 =>ToneIndex <=10;</p><p&g

38、t;  when 127 to 130 =>ToneIndex <=12;--節(jié)拍127 128 130 是中音5</p><p>  when others =>null;</p><p><b>  end case;</b></p><p>  end process;</p><p>  end

39、 Behavioral;</p><p>  2.1.3樂譜碼查表模塊【ToneTaba.vhd】</p><p>  library IEEE;</p><p>  use IEEE.STD_LOGIC_1164.ALL;--加入函數(shù)庫</p><p>  entity ToneTaba is</p><p>  P

40、ort ( Index : in INTEGER RANGE 0 TO 21;--簡譜代碼輸入</p><p>  CODE : out INTEGER RANGE 0 TO 7;--簡譜代碼輸出</p><p>  HIGH : out std_logic;--高八度音顯示</p><p>  Tone : out INTEGER RANGE 0 TO 1

41、6#7FF#);--輸入的簡譜碼查表值</p><p>  end ToneTaba;</p><p>  architecture Behavioral of ToneTaba i</p><p><b>  begin</b></p><p>  search:PROCESS(Index)</p>&l

42、t;p><b>  begin</b></p><p>  case Index is --譯碼電路,tone輸出對應分頻預置數(shù), CODE輸出對應的簡譜碼,HIGH輸出對應的音調高低</p><p>  when 0=>Tone<=2047;CODE<=0;HIGH<='0';--休止符</p>&

43、lt;p>  when 1=>Tone<=513;CODE<=1;HIGH<='0';--低音1</p><p>  when 2=>Tone<=770;CODE<=2;HIGH<='0';--低音2</p><p>  when 3=>Tone<=909;CODE<=3

44、;HIGH<='0';--低音3</p><p>  when 4=>Tone<=1025;CODE<=4;HIGH<='0';--低音4</p><p>  when 5=>Tone<=1090;CODE<=5;HIGH<='0';--低音5</p><

45、p>  when 6=>Tone<=1195;CODE<=6;HIGH<='0';--低音6</p><p>  when 7=>Tone<=1288;CODE<=7;HIGH<='0';--低音7</p><p>  when 8=>Tone<=1330;CODE<=1

46、;HIGH<='1';--中音1</p><p>  when 9=>Tone<=1409;CODE<=2;HIGH<='1';--中音2</p><p>  when 10=>Tone<=1476;CODE<=3;HIGH<='1';--中音3</p><

47、p>  when 11=>Tone<=1510;CODE<=4;HIGH<='1';--中音4</p><p>  when 12=>Tone<=1569;CODE<=5;HIGH<='1';--中音5</p><p>  when 13=>Tone<=1621;CODE<=6

48、;HIGH<='1';--中音6</p><p>  when 14=>Tone<=1667;CODE<=7;HIGH<='1';--中音7</p><p>  when 15=>Tone<=1689;CODE<=1;HIGH<='1';--高音1</p><

49、p>  when 16=>Tone<=1720;CODE<=2;HIGH<='1';--高音2</p><p>  when 17=>Tone<=1763;CODE<=3;HIGH<='1';--高音3</p><p>  when 18=>Tone<=1799;CODE<=4

50、;HIGH<='1';--高音4</p><p>  when 19=>Tone<=1808;CODE<=5;HIGH<='1';--高音5</p><p>  when 20=>Tone<=1834;CODE<=6;HIGH<='1';--高音6</p><

51、p>  when 21=>Tone<=1857;CODE<=7;HIGH<='1';--高音7</p><p>  when OTHERS =>NULL;</p><p><b>  end case;</b></p><p>  end PROCESS;</p><p

52、>  end Behavioral;</p><p>  2.1.4時鐘分頻模塊【DCM_12MHZ.vhd】</p><p>  library IEEE;</p><p>  use IEEE.STD_LOGIC_1164.ALL;--加入函數(shù)庫</p><p>  entity DCM_12MHZ is—定義實體</p>

53、;<p><b>  port(</b></p><p>  clkin: in std_logic;--時鐘信號輸入</p><p>  rst: in std_logic;--復位信號輸入</p><p>  clk_750khz: out std_logic;--750khz輸出</p><p&g

54、t;  clk_4hz: out std_logic);--4hz輸出</p><p>  end DCM_12MHZ;</p><p>  architecture Behavioral of DCM_12MHZ is</p><p>  COMPONENT clk12mhz_dcm--語句結構對所要調用的元件作了聲明</p><p>&

55、lt;b>  PORT(</b></p><p>  CLKIN_IN : IN std_logic;</p><p>  RST_IN : IN std_logic; </p><p>  CLKFX_OUT : OUT std_logic;</p><p>  CLKIN_IBUFG_OUT : OUT s

56、td_logic;</p><p>  LOCKED_OUT : OUT std_logic</p><p><b>  );</b></p><p>  END COMPONENT;</p><p>  signal clk_temp:std_logic;--類型為變量</p><p>  si

57、gnal counter750:integer range 0 to 15;--類型為變量 范圍是0到15</p><p>  signal counter4:integer range 0 to 2999999;--范圍是0到29999999</p><p><b>  begin</b></p><p>  Inst_CLK12MHZ: c

58、lk12mhz_dcm PORT MAP(</p><p>  CLKIN_IN => clkin,</p><p>  RST_IN =>rst ,</p><p>  CLKFX_OUT => clk_temp,</p><p>  CLKIN_IBUFG_OUT =>open ,</p><p

59、>  LOCKED_OUT => open</p><p><b>  );</b></p><p>  process(clk_temp,rst)--進程</p><p><b>  begin</b></p><p>  if(rst='1') then</p&

60、gt;<p>  counter750<=0;--賦初值</p><p>  clk_750khz<='0';--賦初值</p><p>  elsif rising_edge(clk_temp) then</p><p>  if (counter750<=7) then--當變量等于7時,信號量為上升沿</p

61、><p>  clk_750khz<='1';</p><p>  counter750<=counter750+1;--計數(shù)器加1</p><p>  elsif(7<counter750 and counter750<15) then--當變量在7與15之間是,信號量處于下降沿</p><p>  cl

62、k_750khz<='0';</p><p>  counter750<=counter750+1;--計數(shù)器加一</p><p>  elsif (counter750=15) then </p><p>  counter750<=0;--計數(shù)器為15時 再返回 繼續(xù)為0</p><p><b>

63、;  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  process(clk_temp,rst)</p><p><b>  begin</b></p><p>  if

64、(rst='1') then</p><p>  counter4<=0;--賦初值</p><p>  clk_4hz<='0';--賦初值</p><p>  elsif rising_edge(clk_temp) then</p><p>  if (counter4<=1499999)

65、 then--變量小于1499999時 信號量為上升沿</p><p>  clk_4hz<='1';</p><p>  counter4<=counter4+1;--計數(shù)器加一</p><p>  elsif(1499999<counter4 and counter4<2999999) then--變量在1499999與2

66、99999之間時</p><p>  clk_4hz<='0';--信號量為下降沿</p><p>  counter4<=counter4+1;--計數(shù)器加一 </p><p>  elsif (counter4=2999999) then--計數(shù)器加到2999999時為0</p><p>  counter4

67、<=0;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  end Behavioral;</p><p>  2.1.5數(shù)控分頻模塊【Speaker

68、a.vhd】</p><p>  library IEEE;</p><p>  use IEEE.STD_LOGIC_1164.ALL;--加入函數(shù)庫</p><p>  entity Speakera is--數(shù)控分頻與演奏發(fā)生器</p><p>  Port ( clk : in STD_LOGIC;--待分頻時鐘</p>

69、<p>  Tone : in integer range 0 to 16#7ff#;--分頻預置數(shù)輸入,11位二進制數(shù)</p><p>  Spks1 : out STD_LOGIC);--發(fā)聲輸出</p><p>  end Speakera;</p><p>  architecture Behavioral of Speakera is--

70、結構體</p><p><b>  begin</b></p><p>  GenSpks:process(clk,Tone)--進程</p><p>  VARIABLE Count1:integer range 0 to 16#7FF#;--11位2進制數(shù)</p><p><b>  begin</b

71、></p><p>  if clk'event and clk='1' then</p><p>  if Count1=2047 then -- 11 位可預置計數(shù)器</p><p>  Count1:=Tone;--若計數(shù)已滿在時鐘的上升沿將預數(shù)鎖入</p><p>  Spks1<='1&

72、#39;;--11 位計數(shù)器并使FullSpkS 輸出高電平</p><p>  else Count1:=Count1+1;--否則繼續(xù)計數(shù)輸出低電平</p><p>  Spks1<='0';</p><p><b>  end if;</b></p><p><b>  end if

73、 ;</b></p><p>  end process;</p><p>  end Behavioral;</p><p><b>  2.2.測試代碼</b></p><p>  2.2.1測試頂層模塊 【tb_songer.vhd】</p><p>  LIBRARY ieee

74、;</p><p>  USE ieee.std_logic_1164.ALL;--加入函數(shù)庫</p><p>  ENTITY tb_songer IS--實體</p><p>  END tb_songer;</p><p>  ARCHITECTURE behavior OF tb_songer IS </p><p

75、>  COMPONENT Songer--原件說明</p><p><b>  PORT(</b></p><p>  clock : IN std_logic;</p><p>  rst : IN std_logic;</p><p>  CODE1 : OUT integer range 0 to 15

76、;</p><p>  HIGH1 : OUT std_logic;</p><p>  SPKOUT : OUT std_logic</p><p><b>  );</b></p><p>  END COMPONENT;</p><p>  signal clock : std_logi

77、c := '0';--輸入</p><p>  signal rst : std_logic := '0';</p><p>  signal CODE1 : integer range 0 to 15;--輸出</p><p>  signal HIGH1 : std_logic;</p><p>  sig

78、nal SPKOUT : std_logic;</p><p><b>  BEGIN</b></p><p>  uut: Songer PORT MAP (</p><p>  clock => clock,</p><p>  rst => rst,</p><p>  CODE

79、1 => CODE1,</p><p>  HIGH1 => HIGH1,</p><p>  SPKOUT => SPKOUT</p><p><b>  );</b></p><p>  Process—時鐘進程</p><p><b>  begin</b&

80、gt;</p><p>  rst <= '1--復位為下降沿時 等待10us</p><p>  wait for 10 us;</p><p>  rst <= '0';--復位為下降沿時 等待10000ms</p><p>  wait for 10000 ms;</p><p&

81、gt;  end process;</p><p><b>  process</b></p><p><b>  begin</b></p><p>  clock<='0';--時鐘為下降沿時 等待10ns</p><p>  wait for 10 ns;</

82、p><p>  clock<='1';--時鐘為上升沿時 等待10ns</p><p>  wait for 10 ns;</p><p>  end process;</p><p><b>  END;</b></p><p>  2.2.2測試Speakera模塊 【tb_

83、spk.vhd】</p><p>  LIBRARY ieee;</p><p>  USE ieee.std_logic_1164.ALL;--加入函數(shù)庫</p><p>  ENTITY tb_spk IS--定義實體</p><p>  END tb_spk; </p><p>  ARCHITECTURE Be

84、havioral OF tb_spk IS </p><p>  COMPONENT Speakera--定義加入元件</p><p><b>  PORT(</b></p><p>  spks1 : IN std_logic;</p><p>  Tone : IN integer range 0 to 16#7

85、ff#;</p><p>  Spks : OUT std_logic</p><p><b>  );</b></p><p>  END COMPONENT;</p><p>  signal spks1 : std_logic := '0';--輸入賦初值</p><p>

86、  signal Tone : integer := 1197;--輸入賦初值</p><p>  signal Spks : std_logic;--輸出信號</p><p><b>  BEGIN</b></p><p>  uut: Speakera PORT MAP (--包括測試元件</p><p>  spk

87、s1 => spks1,</p><p>  Tone => Tone,</p><p>  Spks => Spks</p><p><b>  );</b></p><p>  clk_process :process--時鐘進程定義</p><p><b>  b

88、egin</b></p><p>  spks1 <= '0';--spks1為下降沿時等待2300ns</p><p>  wait for 2300 ns;</p><p>  spks1 <= '1';--spks1為上升沿時等待1ns</p><p>  wait for 1 n

89、s;</p><p>  end process;</p><p><b>  END;</b></p><p>  2.2.3測試DCM_12MHZ模塊 【tb_clk12mhz.vhd】</p><p>  LIBRARY ieee;</p><p>  USE ieee.std_logic_

90、1164.ALL;--加入函數(shù)庫</p><p>  ENTITY tb_clk12mhz IS--實體</p><p>  END tb_clk12mhz;</p><p>  ARCHITECTURE behavior OF tb_clk12mhz IS --結構體</p><p>  COMPONENT DCM_12MHZ</p&

91、gt;<p><b>  port(</b></p><p>  clkin: in std_logic;--時鐘輸入</p><p>  rst: in std_logic;--復位輸入</p><p>  clk_750khz: out std_logic;--750khz輸出</p><p>

92、  clk_4hz: out std_logic);--4hz輸入</p><p>  END COMPONENT;</p><p><b>  --Inputs</b></p><p>  signal clkin : std_logic := '0';--賦初值</p><p>  signal r

93、st : std_logic := '0';--賦初值</p><p><b>  --Outputs</b></p><p>  signal clk_750khz: std_logic;--輸出信號量</p><p>  signal clk_4hz: std_logic;--輸出信號量</p><p

94、><b>  BEGIN</b></p><p>  uut: DCM_12MHZ PORT MAP (--定義測試使用到的接口元件</p><p>  clkin => clkin,</p><p>  rst => rst,</p><p>  clk_750khz => clk_750khz

95、,</p><p>  clk_4hz => clk_4hz</p><p><b>  );</b></p><p>  process--進程</p><p><b>  begin</b></p><p>  rst <= '1';</

96、p><p>  wait for 10 us;--復位為下降沿時 等待10us</p><p>  rst <= '0';</p><p>  wait for 10000 ms;--復位為下降沿時 等待10000ms</p><p>  end process;</p><p>  process

97、--進程</p><p><b>  begin</b></p><p>  clkin<='0';</p><p>  wait for 10 ns;--時鐘為下降沿時 等待10ns</p><p>  clkin<='1';</p><p> 

98、 wait for 10 ns;--時鐘為上升沿時 等待10ns</p><p>  end process;</p><p><b>  END;</b></p><p><b>  三、操作過程</b></p><p>  1. 項目實現(xiàn)功能:本項目主要實現(xiàn)功能為揚聲器輸出音樂,LED燈顯示音符

99、,撥碼開關控制音樂的暫停和繼續(xù),以及可調電阻調節(jié)音量大小。</p><p>  2. 電路的連接:VHDL代碼部分編寫仿真并綜合編譯通過后,需要實現(xiàn)硬件電路的連接。把BASYS2開發(fā)板與電腦相連,開發(fā)板的B2引腳連接到集成運放電路的輸入,集成運放的輸出連接到揚聲器。</p><p>  3. 燒寫程序:首先打開開發(fā)板的電源按鈕。打開adept軟件,點擊FPGA欄右邊的‘browse’按鈕,

100、找到‘zxmzf_rst’文件夾所在的目錄,選擇‘songer.bit’文件,點擊‘確定’,這時會出現(xiàn)一個是否選擇框,點‘是’。再點擊FPGA欄右邊的‘program’按鈕,這時又會出現(xiàn)一個是否選擇框,還是點‘是’。等到顯示programing successful時,表示程序已經正確燒進了開發(fā)板。</p><p><b>  4. 功能操作</b></p><p>

101、  揚聲器播放音樂:把電路連好,程序一燒進開發(fā)板后就揚聲器就開始播放音樂了。</p><p>  LED燈顯示音符:LD0、LD1、LD2三個LED燈顯示的是當前音符的簡譜代碼二進制數(shù)值,即休止符、1、2、3、4、5、6、7,LD3顯示的是當前音符的高/低音,音符為高音時LD3亮,音符為低音時LD3滅。只要有音樂輸出,這三個LED燈隨著音樂的播放不停的閃爍。</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

提交評論