版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> MP3播放器說(shuō)明文檔</p><p><b> 一、實(shí)現(xiàn)過(guò)程</b></p><p> 1. 制作樂(lè)譜查找表:找出不同音符的發(fā)音頻率,尋找最佳待分頻頻率,計(jì)算分頻數(shù)和分頻預(yù)置數(shù),制作樂(lè)譜查找表。如何選擇基準(zhǔn)頻率很關(guān)鍵。若基準(zhǔn)頻率比較小,用他除以音符頻率得到的分頻系數(shù)也就比較小,這樣的話進(jìn)行四舍五入后誤差相對(duì)而言會(huì)比較大。若基準(zhǔn)頻率偏大,分頻系
2、數(shù)也就偏大,這會(huì)增加系統(tǒng)的負(fù)擔(dān)。綜合考慮分頻系數(shù)的準(zhǔn)確性和大小,基準(zhǔn)頻率為750 khz是比較合適的。由于我們從開(kāi)發(fā)板的內(nèi)部時(shí)鐘分頻得到的750 khz的頻率信號(hào)是脈寬極窄的尖脈沖信號(hào),為了提高揚(yáng)聲器有足夠的功率發(fā)音,我們對(duì)尖脈沖信號(hào)再進(jìn)行二分頻,得到對(duì)稱方波后再輸出。因此,在表1中,就是以375 khz為基準(zhǔn)頻率計(jì)算了各個(gè)音符的分頻系數(shù)和分頻預(yù)置數(shù)。選擇11位二進(jìn)制數(shù)表示分頻系數(shù)和分頻預(yù)置數(shù)(計(jì)數(shù)初值),因此最大值為2047。休止符不
3、用進(jìn)行分頻,分頻系數(shù)為0,頻率為375000hz。</p><p> 分頻系數(shù)和分頻預(yù)置數(shù)的計(jì)算方法:</p><p> 分頻系數(shù)=375000/音符頻率</p><p> 分頻預(yù)置數(shù)(計(jì)數(shù)初值)=2047-分頻系數(shù)</p><p> 表1 各個(gè)音符的頻率及其對(duì)應(yīng)的分頻系數(shù)(基準(zhǔn)頻率375KHz)</p><p&g
4、t; 2. 預(yù)置曲譜:定義一個(gè)轉(zhuǎn)換規(guī)則,將音樂(lè)音符轉(zhuǎn)換為代碼預(yù)置在程序里。我們稱預(yù)置在程序里的代碼為樂(lè)譜代碼。音符轉(zhuǎn)換為樂(lè)譜代碼的規(guī)則為:休止符轉(zhuǎn)換為代碼0,低音1-低音7轉(zhuǎn)換為代碼1-7,中音1-中音7轉(zhuǎn)換為代碼8-14,高音1-高音7轉(zhuǎn)換為15-21?,F(xiàn)在一般樂(lè)曲中,最小的節(jié)拍為1/4拍。若定義1拍的持續(xù)時(shí)間為1秒,那么1/4拍的持續(xù)時(shí)間就為1/4秒,即0.25秒。其他的節(jié)拍數(shù)為1/4拍的整數(shù)倍,因此他們的持續(xù)時(shí)間就為0.25秒的
5、整數(shù)倍。將樂(lè)曲中每個(gè)音符以及持續(xù)的節(jié)拍數(shù)寫(xiě)進(jìn)程序,定義一個(gè)4hz的時(shí)鐘頻率,每當(dāng)時(shí)鐘上升沿來(lái)臨時(shí)就輸出1/4拍音符,若是其他1/4拍整數(shù)倍的音符就連續(xù)輸出整數(shù)倍的次數(shù)。這樣,音符就源源不斷的輸出了。</p><p> 3. 對(duì)預(yù)置的曲譜碼在樂(lè)譜查表碼里進(jìn)行查找,找出相應(yīng)音符對(duì)應(yīng)頻率的分頻系數(shù)和分頻預(yù)置數(shù)。</p><p> 4. 根據(jù)查找到的分頻預(yù)置數(shù)對(duì)待分頻頻率(750khz)進(jìn)行分
6、頻并把輸出連接到集成運(yùn)放電路Vin實(shí)現(xiàn)音量調(diào)節(jié)。音量調(diào)節(jié)的原理圖如圖1所示。按圖1所示電路圖連接電路,Vout接揚(yáng)聲器。通過(guò)調(diào)節(jié)滑動(dòng)變阻器R2就調(diào)節(jié)音量。</p><p><b> 圖1 音量控制電路</b></p><p><b> 二、代碼說(shuō)明</b></p><p><b> 2.1設(shè)計(jì)代碼</
7、b></p><p> 2.1.1頂層模塊:【songer.vhd】</p><p> library IEEE;</p><p> use IEEE.STD_LOGIC_1164.ALL;--加入函數(shù)庫(kù)</p><p> ENTITY Songer IS</p><p> PORT (clock :
8、 in STD_LOGIC;--時(shí)鐘信號(hào)輸入</p><p> rst : in STD_LOGIC;--復(fù)位信號(hào)輸入</p><p> CODE1: OUT INTEGER RANGE 0 TO 7 ; --簡(jiǎn)譜碼輸出顯示</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# ; --定義信號(hào)量,連接ToneTaba的輸出</p><p> SIGNAL ToneIndex1 : INTEGER RANGE 0 TO 15 ; ----定義信號(hào)量,連接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;--定義信號(hào)量,連接DCM_12MHZ的4hz輸出</p><p> signal clkout_750khz:std_logic
16、;--定義信號(hào)量,連接DCM_12MHZ的750khz輸出</p><p><b> BEGIN </b></p><p><b> --定義映射關(guān)系</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樂(lè)譜發(fā)生模塊【N
19、oteTabs.vhd】</p><p> library IEEE;</p><p> use IEEE.STD_LOGIC_1164.ALL;--加入函數(shù)庫(kù)</p><p> entity NoteTabs is--定義實(shí)體</p><p> Port ( clk : in STD_LOGIC;--音樂(lè)節(jié)拍時(shí)鐘</p>
20、;<p> ToneIndex : out integer range 0 to 15);--樂(lè)譜碼輸出</p><p> end NoteTabs;</p><p> architecture Behavioral of NoteTabs is</p><p> signal Counter:integer range 0 to 2000;
21、--樂(lè)譜碼計(jì)數(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)計(jì)數(shù)</p>
22、<p> elsif (clk'event and clk='1') --時(shí)鐘上升沿觸發(fā)</p><p> then Counter <=Counter + 1;--計(jì)數(shù)器加1</p><p><b> end if;</b></p><p> end process;</p>&
23、lt;p> Search:process(Counter)-- 譯碼器查歌曲的樂(lè)譜表查表結(jié)果為音調(diào)表的索引值</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;--寫(xiě)入的歌為最炫民族風(fēng)的前奏</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樂(lè)譜碼查表模塊【ToneTaba.vhd】</p><p> library IEEE;</p><p> use IEEE.STD_LOGIC_1164.ALL;--加入函數(shù)庫(kù)</p><p> entity ToneTaba is</p><p> P
40、ort ( Index : in INTEGER RANGE 0 TO 21;--簡(jiǎn)譜代碼輸入</p><p> CODE : out INTEGER RANGE 0 TO 7;--簡(jiǎn)譜代碼輸出</p><p> HIGH : out std_logic;--高八度音顯示</p><p> Tone : out INTEGER RANGE 0 TO 1
41、6#7FF#);--輸入的簡(jiǎn)譜碼查表值</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輸出對(duì)應(yīng)分頻預(yù)置數(shù), CODE輸出對(duì)應(yīng)的簡(jiǎn)譜碼,HIGH輸出對(duì)應(yīng)的音調(diào)高低</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時(shí)鐘分頻模塊【DCM_12MHZ.vhd】</p><p> library IEEE;</p><p> use IEEE.STD_LOGIC_1164.ALL;--加入函數(shù)庫(kù)</p><p> entity DCM_12MHZ is—定義實(shí)體</p>
53、;<p><b> port(</b></p><p> clkin: in std_logic;--時(shí)鐘信號(hào)輸入</p><p> rst: in std_logic;--復(fù)位信號(hào)輸入</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--語(yǔ)句結(jié)構(gòu)對(duì)所要調(diào)用的元件作了聲明</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)--進(jìn)程</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--當(dāng)變量等于7時(shí),信號(hào)量為上升沿</p
61、><p> clk_750khz<='1';</p><p> counter750<=counter750+1;--計(jì)數(shù)器加1</p><p> elsif(7<counter750 and counter750<15) then--當(dāng)變量在7與15之間是,信號(hào)量處于下降沿</p><p> cl
62、k_750khz<='0';</p><p> counter750<=counter750+1;--計(jì)數(shù)器加一</p><p> elsif (counter750=15) then </p><p> counter750<=0;--計(jì)數(shù)器為15時(shí) 再返回 繼續(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時(shí) 信號(hào)量為上升沿</p><p> clk_4hz<='1';</p><p> counter4<=counter4+1;--計(jì)數(shù)器加一</p><p> elsif(1499999<counter4 and counter4<2999999) then--變量在1499999與2
66、99999之間時(shí)</p><p> clk_4hz<='0';--信號(hào)量為下降沿</p><p> counter4<=counter4+1;--計(jì)數(shù)器加一 </p><p> elsif (counter4=2999999) then--計(jì)數(shù)器加到2999999時(shí)為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ù)庫(kù)</p><p> entity Speakera is--數(shù)控分頻與演奏發(fā)生器</p><p> Port ( clk : in STD_LOGIC;--待分頻時(shí)鐘</p>
69、<p> Tone : in integer range 0 to 16#7ff#;--分頻預(yù)置數(shù)輸入,11位二進(jìn)制數(shù)</p><p> Spks1 : out STD_LOGIC);--發(fā)聲輸出</p><p> end Speakera;</p><p> architecture Behavioral of Speakera is--
70、結(jié)構(gòu)體</p><p><b> begin</b></p><p> GenSpks:process(clk,Tone)--進(jìn)程</p><p> VARIABLE Count1:integer range 0 to 16#7FF#;--11位2進(jìn)制數(shù)</p><p><b> begin</b
71、></p><p> if clk'event and clk='1' then</p><p> if Count1=2047 then -- 11 位可預(yù)置計(jì)數(shù)器</p><p> Count1:=Tone;--若計(jì)數(shù)已滿在時(shí)鐘的上升沿將預(yù)數(shù)鎖入</p><p> Spks1<='1&
72、#39;;--11 位計(jì)數(shù)器并使FullSpkS 輸出高電平</p><p> else Count1:=Count1+1;--否則繼續(xù)計(jì)數(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.測(cè)試代碼</b></p><p> 2.2.1測(cè)試頂層模塊 【tb_songer.vhd】</p><p> LIBRARY ieee
74、;</p><p> USE ieee.std_logic_1164.ALL;--加入函數(shù)庫(kù)</p><p> ENTITY tb_songer IS--實(shí)體</p><p> END tb_songer;</p><p> ARCHITECTURE behavior OF tb_songer IS </p><p
75、> COMPONENT Songer--原件說(shuō)明</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—時(shí)鐘進(jìn)程</p><p><b> begin</b&
80、gt;</p><p> rst <= '1--復(fù)位為下降沿時(shí) 等待10us</p><p> wait for 10 us;</p><p> rst <= '0';--復(fù)位為下降沿時(shí) 等待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';--時(shí)鐘為下降沿時(shí) 等待10ns</p><p> wait for 10 ns;</
82、p><p> clock<='1';--時(shí)鐘為上升沿時(shí) 等待10ns</p><p> wait for 10 ns;</p><p> end process;</p><p><b> END;</b></p><p> 2.2.2測(cè)試Speakera模塊 【tb_
83、spk.vhd】</p><p> LIBRARY ieee;</p><p> USE ieee.std_logic_1164.ALL;--加入函數(shù)庫(kù)</p><p> ENTITY tb_spk IS--定義實(shí)體</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;--輸出信號(hào)</p><p><b> BEGIN</b></p><p> uut: Speakera PORT MAP (--包括測(cè)試元件</p><p> spk
87、s1 => spks1,</p><p> Tone => Tone,</p><p> Spks => Spks</p><p><b> );</b></p><p> clk_process :process--時(shí)鐘進(jìn)程定義</p><p><b> b
88、egin</b></p><p> spks1 <= '0';--spks1為下降沿時(shí)等待2300ns</p><p> wait for 2300 ns;</p><p> spks1 <= '1';--spks1為上升沿時(shí)等待1ns</p><p> wait for 1 n
89、s;</p><p> end process;</p><p><b> END;</b></p><p> 2.2.3測(cè)試DCM_12MHZ模塊 【tb_clk12mhz.vhd】</p><p> LIBRARY ieee;</p><p> USE ieee.std_logic_
90、1164.ALL;--加入函數(shù)庫(kù)</p><p> ENTITY tb_clk12mhz IS--實(shí)體</p><p> END tb_clk12mhz;</p><p> ARCHITECTURE behavior OF tb_clk12mhz IS --結(jié)構(gòu)體</p><p> COMPONENT DCM_12MHZ</p&
91、gt;<p><b> port(</b></p><p> clkin: in std_logic;--時(shí)鐘輸入</p><p> rst: in std_logic;--復(fù)位輸入</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;--輸出信號(hào)量</p><p> signal clk_4hz: std_logic;--輸出信號(hào)量</p><p
94、><b> BEGIN</b></p><p> uut: DCM_12MHZ PORT MAP (--定義測(cè)試使用到的接口元件</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--進(jìn)程</p><p><b> begin</b></p><p> rst <= '1';</
96、p><p> wait for 10 us;--復(fù)位為下降沿時(shí) 等待10us</p><p> rst <= '0';</p><p> wait for 10000 ms;--復(fù)位為下降沿時(shí) 等待10000ms</p><p> end process;</p><p> process
97、--進(jìn)程</p><p><b> begin</b></p><p> clkin<='0';</p><p> wait for 10 ns;--時(shí)鐘為下降沿時(shí) 等待10ns</p><p> clkin<='1';</p><p>
98、 wait for 10 ns;--時(shí)鐘為上升沿時(shí) 等待10ns</p><p> end process;</p><p><b> END;</b></p><p><b> 三、操作過(guò)程</b></p><p> 1. 項(xiàng)目實(shí)現(xiàn)功能:本項(xiàng)目主要實(shí)現(xiàn)功能為揚(yáng)聲器輸出音樂(lè),LED燈顯示音符
99、,撥碼開(kāi)關(guān)控制音樂(lè)的暫停和繼續(xù),以及可調(diào)電阻調(diào)節(jié)音量大小。</p><p> 2. 電路的連接:VHDL代碼部分編寫(xiě)仿真并綜合編譯通過(guò)后,需要實(shí)現(xiàn)硬件電路的連接。把BASYS2開(kāi)發(fā)板與電腦相連,開(kāi)發(fā)板的B2引腳連接到集成運(yùn)放電路的輸入,集成運(yùn)放的輸出連接到揚(yáng)聲器。</p><p> 3. 燒寫(xiě)程序:首先打開(kāi)開(kāi)發(fā)板的電源按鈕。打開(kāi)adept軟件,點(diǎn)擊FPGA欄右邊的‘browse’按鈕,
100、找到‘zxmzf_rst’文件夾所在的目錄,選擇‘songer.bit’文件,點(diǎn)擊‘確定’,這時(shí)會(huì)出現(xiàn)一個(gè)是否選擇框,點(diǎn)‘是’。再點(diǎn)擊FPGA欄右邊的‘program’按鈕,這時(shí)又會(huì)出現(xiàn)一個(gè)是否選擇框,還是點(diǎn)‘是’。等到顯示programing successful時(shí),表示程序已經(jīng)正確燒進(jìn)了開(kāi)發(fā)板。</p><p><b> 4. 功能操作</b></p><p>
101、 揚(yáng)聲器播放音樂(lè):把電路連好,程序一燒進(jìn)開(kāi)發(fā)板后就揚(yáng)聲器就開(kāi)始播放音樂(lè)了。</p><p> LED燈顯示音符:LD0、LD1、LD2三個(gè)LED燈顯示的是當(dāng)前音符的簡(jiǎn)譜代碼二進(jìn)制數(shù)值,即休止符、1、2、3、4、5、6、7,LD3顯示的是當(dāng)前音符的高/低音,音符為高音時(shí)LD3亮,音符為低音時(shí)LD3滅。只要有音樂(lè)輸出,這三個(gè)LED燈隨著音樂(lè)的播放不停的閃爍。</p><p> 撥碼開(kāi)關(guān)控
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于fpga的mp3音樂(lè)播放器說(shuō)明書(shū)說(shuō)明書(shū)
- 基于fpga的mp3音樂(lè)播放器設(shè)計(jì)
- mp3音樂(lè)播放器軟件課程設(shè)計(jì)報(bào)告(mfc)
- 基于mp3播放器的設(shè)計(jì)
- 基于vs1003的mp3音樂(lè)播放器設(shè)計(jì)
- mp3播放器設(shè)計(jì)設(shè)計(jì)
- 基于dsp的mp3播放器設(shè)計(jì)
- 基于FPGA的MP3播放器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 課程設(shè)計(jì)(論文)基于fpga的音樂(lè)播放器設(shè)計(jì)
- 基于android的mp3音樂(lè)播放器設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
- 電子綜合課程設(shè)計(jì)報(bào)告--基于arm+linux的mp3播放器
- 基于ZSP的MP3播放器SoC設(shè)計(jì).pdf
- 基于vc++mp3播放器的課程設(shè)計(jì)
- 基于linux的mp3播放器設(shè)計(jì)與實(shí)現(xiàn)
- dsp數(shù)字信號(hào)處理課程設(shè)計(jì)--基于dsp的mp3播放器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于陀螺儀的智能mp3播放器
- dsp數(shù)字信號(hào)處理課程設(shè)計(jì)報(bào)告--基于dsp的mp3播放器設(shè)計(jì)
- 基于dsp的多功能mp3播放器設(shè)計(jì)
- 基于arm的mp3播放器設(shè)計(jì)與實(shí)現(xiàn)
- 基于java的mp3播放器設(shè)計(jì)與實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論