![硬件樂曲自動演奏電路設(shè)計_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/f5ca6203-3978-4880-804a-dd3f6e45694c/f5ca6203-3978-4880-804a-dd3f6e45694c1.gif)
![硬件樂曲自動演奏電路設(shè)計_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/f5ca6203-3978-4880-804a-dd3f6e45694c/f5ca6203-3978-4880-804a-dd3f6e45694c2.gif)
![硬件樂曲自動演奏電路設(shè)計_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/f5ca6203-3978-4880-804a-dd3f6e45694c/f5ca6203-3978-4880-804a-dd3f6e45694c3.gif)
![硬件樂曲自動演奏電路設(shè)計_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/f5ca6203-3978-4880-804a-dd3f6e45694c/f5ca6203-3978-4880-804a-dd3f6e45694c4.gif)
![硬件樂曲自動演奏電路設(shè)計_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/23/f5ca6203-3978-4880-804a-dd3f6e45694c/f5ca6203-3978-4880-804a-dd3f6e45694c5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、江西理工大學(xué)應(yīng)用科學(xué)學(xué)院SOPC/EDA綜合課程設(shè)計報告設(shè)計題目: 硬件樂曲自動演奏電路設(shè)計設(shè) 計 者: 學(xué) 號: 班 級: 指導(dǎo)老師: 王忠鋒完成時間: 2012年01月6日設(shè)計報告綜合測試總評格式(10)內(nèi)容(40)圖表(10)答辯(20)平時(20)目錄前 言3樂曲硬件演奏電路EDA設(shè)計41設(shè)計要求42設(shè)計方案43原理描述53.1 音名與頻率的關(guān)系53.2 控制音長的節(jié)拍發(fā)生器74樂曲硬件演奏電路的層次化設(shè)計方案74.1 音樂節(jié)拍發(fā)生器NoteTabs74.2 音符譯碼電路Tonetaba模塊154.3數(shù)控分頻模塊(speaker)設(shè)計174.4樂曲硬件演奏電路頂層電路的設(shè)計和仿真215
2、實(shí)驗(yàn)總結(jié)與心得246參考文獻(xiàn)25前 言樂曲演奏廣泛用于自動答錄裝置、手機(jī)鈴聲、集團(tuán)電話、及智能儀器儀表設(shè)備。實(shí)現(xiàn)方法有許多種,隨著FPGA集成度的提高,價格下降,EDA設(shè)計工具更新?lián)Q代,功能日益普及與流行,使這種方案的應(yīng)用越來越多。如今的數(shù)字邏輯設(shè)計者面臨日益縮短的上市時間的壓力,不得不進(jìn)行上萬門的設(shè)計,同時設(shè)計者不允許以犧牲硅的效率達(dá)到保持結(jié)構(gòu)的獨(dú)特性。使用現(xiàn)今的EDA軟件工具來應(yīng)付這些問題,并不是一件簡單的事情。FPGA預(yù)裝了很多已構(gòu)造好的參數(shù)化庫單元LPM器件。通過引入支持LPM的EDA軟件工具,設(shè)計者可以設(shè)計出結(jié)構(gòu)獨(dú)立而且硅片的使用效率非常高的產(chǎn)品。本課設(shè)在EDA開發(fā)平臺上利用VHDL
3、語言設(shè)計數(shù)控分頻器電路,利用數(shù)控分頻的原理設(shè)計樂曲硬件演奏電路,以“歡樂頌”樂曲為例,將音樂數(shù)據(jù)存儲到音樂節(jié)拍器中,就達(dá)到了以純硬件的手段來實(shí)現(xiàn)樂曲的演奏效果。只要修改音樂節(jié)拍器所存儲的音樂數(shù)據(jù),將其換成其他樂曲的音樂數(shù)據(jù),連接到程序中就可以實(shí)現(xiàn)其它樂曲的演奏。關(guān)鍵詞:FPGA;EDA;VHDL;音樂樂曲硬件演奏電路EDA設(shè)計1設(shè)計要求利用可編程邏輯器件FPGA,設(shè)計一個樂曲硬件演奏電路。由鍵盤輸入控制音響,同時可自動演奏樂曲。演奏時可選擇鍵盤輸入樂曲或者已存入的樂曲,并配以一個小揚(yáng)聲器。其結(jié)構(gòu)如圖所示,該設(shè)計產(chǎn)生的音樂選自歡樂頌片段?;鶞?zhǔn)時鐘12MHZ時鐘電路數(shù)控分頻器音樂節(jié)拍產(chǎn)生電路音符譯
4、碼電路圖2.1樂曲演奏電路結(jié)構(gòu)方框圖2設(shè)計方案利用FPGA來實(shí)現(xiàn)樂曲硬件演奏電路。樂曲的12平均率規(guī)定:每2個八度(如簡譜中的中音1與高音1)之間的頻率相差1倍。在2個八度音之間,又可分為12個半音,每2個半音的頻率比為12/2。另外,音符A的頻率為440HZ,音符B到C之間,E到F之間為半音,其余為全音。由此可以計算出簡譜中從低音l至高音1之間每個音符的頻率。設(shè)計音符查找表電路模塊,時鐘模塊,數(shù)控分頻器模塊,音樂節(jié)拍產(chǎn)生模塊電路。3原理描述產(chǎn)生音樂的兩個因素是音樂頻率和音樂的持續(xù)時間(即音高和節(jié)拍),以純硬件完成演奏電路比利用微處理器(CPU)來實(shí)現(xiàn)樂曲演奏要復(fù)雜的多如果不借助于功能強(qiáng)大的E
5、DA工具和硬件描述語言,憑借傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡單的演奏電路也難以實(shí)現(xiàn)。根據(jù)設(shè)計要求,樂曲硬件演奏電路系統(tǒng)主要由數(shù)控分頻器和樂曲存儲模塊組成。數(shù)控分頻器對FPGA的基準(zhǔn)頻率進(jìn)行分頻,得到與各個音階對應(yīng)的頻率輸出。樂曲存儲模塊產(chǎn)生節(jié)拍控制和音階選擇信號,即在此模塊中可存放一個樂曲曲譜真值表,由一個計數(shù)器來控制此真值表的輸出,而由計數(shù)器的計數(shù)時鐘信號作為樂曲節(jié)拍控制信號。3.1 音名與頻率的關(guān)系音樂的十二平均率規(guī)定:每兩個八度音(如簡譜中的中音與高音)之間的頻率相差一倍在兩個八度音之間,又可分為十二個半音,每兩個半音的頻率比為4。另外,音名(簡譜中的低音)的頻率為440Hz,音名B到C之間
6、,E到F之間為半音,其余為全音,由此可以計算出簡譜中從低音1到高音1之間每個音名的頻率如下表所示.表3-1簡譜中的音名與頻率的關(guān)系音名頻率/Hz音名頻率/Hz音名頻率/Hz低音1261.63中音1532.25高音11046.50低音2293.67中音2587.33高音21174.66低音3329.63中音3659.25高音31318.51低音4349.23中音4698.46高音41396.92低音5391.99中音5783.99高音51567.98低音6440中音6880高音61760低音7493.88中音7987.76高音71975.52由于音階頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須
7、將得到的分頻數(shù)四舍五入取整。若基準(zhǔn)頻率過低,則由于分頻系數(shù)過小,四舍五入取整后的誤差較大,若基準(zhǔn)頻率過高,雖然誤碼差變小,但分頻結(jié)構(gòu)將變大。實(shí)際的設(shè)計應(yīng)綜合考慮兩方面的因素,在盡量減小頻率誤差的前提下取舍合適的基準(zhǔn)頻率。本設(shè)計中選取4MHz的基準(zhǔn)頻率,若無4MHz的時鐘頻率,實(shí)際上,只要各個音名間的相對品頻率關(guān)系不變,C作1與D作1演奏出的音樂聽起來都不會“走調(diào)”。各音階頻率及相應(yīng)的分頻系數(shù)如下表所示。為了減少輸出的偶次諧波分量,最后輸出到揚(yáng)聲器的波形應(yīng)為對稱方波,因此在到達(dá)揚(yáng)聲器之前,有一個二分頻的分頻器。由于最大的分頻系數(shù)為7644,故采用13位二進(jìn)制計數(shù)器已能滿足分頻要求。在下面表中除給
8、出了分頻比以外,給出了對應(yīng)于各個音階頻率時計數(shù)器不同的初始值,對于樂曲中的休止符,要將分頻系數(shù)設(shè)為0,即初始值為8191即可,此時揚(yáng)聲器將不會發(fā)聲。對于不同的分頻系數(shù),加載不同的初始值即可。用加載初始值而不是將分頻輸出譯碼反饋,可以有效地減少本設(shè)計占用可編程邏輯器件的資源,也是同步計數(shù)器的一個常用設(shè)計技巧。3.2 控制音長的節(jié)拍發(fā)生器該演奏電路演奏的樂曲是“歡樂頌”片段,其最小的節(jié)拍為1拍。將1拍的時長定為0.25秒,則只需要再提供一個4Hz的時鐘頻率即可產(chǎn)生1拍的時長,演奏的時間控制通過ROM查表的方式來完成。對于占用時間較長的節(jié)拍(一定是拍的整數(shù)倍),如全音符為4拍(重復(fù)4),2/4音符為
9、2拍(重復(fù)2),1/4音符為1拍(重復(fù)1)。要求演奏時能循環(huán)進(jìn)行,因此需另外設(shè)置一個時長計數(shù)器,當(dāng)樂曲演奏完成時,保證能自動從頭開始演奏。該計數(shù)器控制真值表按順序輸出簡譜。 4樂曲硬件演奏電路的層次化設(shè)計方案根據(jù)層次化的設(shè)計思路,可把樂曲硬件演奏電路分為三個模塊,音樂節(jié)拍發(fā)生器NoteTabs模塊,音符譯碼電路Tonetaba模塊,數(shù)控分頻模塊(speaker)。下面給出其EDA設(shè)計過程:4.1 音樂節(jié)拍發(fā)生器NoteTabs該模塊將利用FPGA的片內(nèi)ROM存放樂曲簡譜真值表,由一個二進(jìn)制計數(shù)器為樂曲數(shù)據(jù)存儲器ROM的地址發(fā)生器。該計數(shù)器的計數(shù)頻率為4Hz,即每一計數(shù)值的停留時間為0.25秒,
10、隨著NoteTaba中計數(shù)器按4Hz的時鐘頻率作加法計數(shù)時,即隨地址值遞增時,樂曲數(shù)據(jù)ROM中的音符數(shù)據(jù),將從ROM中的輸出口輸向音符譯碼電路Tonetaba,所存儲樂曲就開始連續(xù)自然地演奏起來。二進(jìn)制計數(shù)器的位數(shù)將根據(jù)所存放樂曲簡譜基本節(jié)拍數(shù)來決定,對于樂曲“歡樂頌”片段其節(jié)拍數(shù)為138,即選擇計數(shù)器的位數(shù)為8即可。其VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY NoteTabs IS PORT ( clk : IN STD_LOGIC; ToneIndex : OUT INTEGER RANGE 0 TO 15 );EN
11、D;ARCHITECTURE one OF NoteTabs IS SIGNAL Counter : INTEGER RANGE 0 TO 138;BEGIN CNT8 : PROCESS(clk) BEGIN IF Counter = 138 THEN Counter <= 0; ELSIF (clk'EVENT AND clk = '1') THEN Counter <= Counter + 1; END IF; END PROCESS; Search : PROCESS(Counter) BEGIN CASE Counter IS WHEN 00 =&
12、gt; ToneIndex <= 10; WHEN 01 => ToneIndex <= 10; WHEN 02 => ToneIndex <= 10; WHEN 03 => ToneIndex <= 10; WHEN 04 => ToneIndex <= 10; WHEN 05 => ToneIndex <= 10; WHEN 06 => ToneIndex <= 10; WHEN 07 => ToneIndex <= 10; WHEN 08 => ToneIndex <= 11; WHEN
13、 09 => ToneIndex <= 11; WHEN 10 => ToneIndex <= 11; WHEN 11 => ToneIndex <= 11; WHEN 12 => ToneIndex <= 12; WHEN 13 => ToneIndex <= 12; WHEN 14 => ToneIndex <= 12; WHEN 15 => ToneIndex <= 12; WHEN 16 => ToneIndex <= 12; WHEN 17 => ToneIndex <= 12
14、; WHEN 18 => ToneIndex <= 12; WHEN 19 => ToneIndex <= 12; WHEN 20 => ToneIndex <= 11; WHEN 21 => ToneIndex <= 11; WHEN 22 => ToneIndex <= 11; WHEN 23 => ToneIndex <= 11; WHEN 24 => ToneIndex <= 10; WHEN 25 => ToneIndex <= 10; WHEN 26 => ToneIndex &l
15、t;= 10; WHEN 27 => ToneIndex <= 10; WHEN 28 => ToneIndex <= 9; WHEN 29 => ToneIndex <= 9; WHEN 30 => ToneIndex <= 9; WHEN 31 => ToneIndex <= 9; WHEN 32 => ToneIndex <= 8; WHEN 33 => ToneIndex <= 8; WHEN 34 => ToneIndex <= 8; WHEN 35 => ToneIndex <
16、;= 8; WHEN 36 => ToneIndex <= 8; WHEN 37 => ToneIndex <= 8; WHEN 38 => ToneIndex <= 8; WHEN 39 => ToneIndex <= 8; WHEN 40 => ToneIndex <= 9; WHEN 41 => ToneIndex <= 9; WHEN 42 => ToneIndex <= 9; WHEN 43 => ToneIndex <= 9; WHEN 44 => ToneIndex <=
17、10; WHEN 45 => ToneIndex <= 10; WHEN 46 => ToneIndex <= 10; WHEN 47 => ToneIndex <= 10; WHEN 48 => ToneIndex <= 10; WHEN 49 => ToneIndex <= 10; WHEN 50 => ToneIndex <= 10; WHEN 51 => ToneIndex <= 10; WHEN 52 => ToneIndex <= 10; WHEN 53 => ToneIndex
18、<= 10; WHEN 54 => ToneIndex <= 9; WHEN 55 => ToneIndex <= 9; WHEN 56 => ToneIndex <= 9; WHEN 57 => ToneIndex <= 9; WHEN 58 => ToneIndex <= 9; WHEN 59 => ToneIndex <= 9; WHEN 60 => ToneIndex <= 9; WHEN 61 => ToneIndex <= 9; WHEN 62 => ToneIndex &l
19、t;= 9; WHEN 63 => ToneIndex <= 9; WHEN 64 => ToneIndex <= 10; WHEN 65 => ToneIndex <= 10; WHEN 66 => ToneIndex <= 10; WHEN 67 => ToneIndex <= 10; WHEN 68 => ToneIndex <= 10; WHEN 69 => ToneIndex <= 10; WHEN 70 => ToneIndex <= 10; WHEN 71 => ToneInde
20、x <= 10; WHEN 72 => ToneIndex <= 11; WHEN 73 => ToneIndex <= 11; WHEN 74 => ToneIndex <= 11; WHEN 75 => ToneIndex <= 11; WHEN 76 => ToneIndex <= 12; WHEN 77=> ToneIndex <= 12; WHEN 78 => ToneIndex <= 12; WHEN 79 => ToneIndex <= 12; WHEN 80 => Ton
21、eIndex <= 12; WHEN 81 => ToneIndex <= 12; WHEN 82 => ToneIndex <= 12; WHEN 83 => ToneIndex <= 12; WHEN 84 => ToneIndex <= 11; WHEN 85=> ToneIndex <= 11; WHEN 86 => ToneIndex <= 11; WHEN 87 => ToneIndex <= 11; WHEN 88 => ToneIndex <= 10; WHEN 89 =>
22、; ToneIndex <= 10; WHEN 90 => ToneIndex <= 10; WHEN 91 => ToneIndex <= 10; WHEN 92 => ToneIndex <= 9; WHEN 93 => ToneIndex <= 9; WHEN 94 => ToneIndex <= 9; WHEN 95 => ToneIndex <= 9; WHEN 96 => ToneIndex <= 8; WHEN 97 => ToneIndex <= 8; WHEN 98 =>
23、; ToneIndex <= 8; WHEN 99 => ToneIndex <= 8; WHEN 100 => ToneIndex <= 8; WHEN 101 => ToneIndex <= 8; WHEN 102 => ToneIndex <= 8; WHEN 103 => ToneIndex <= 8; WHEN 104 => ToneIndex <= 9; WHEN 105 => ToneIndex <= 9; WHEN 106 => ToneIndex <= 9; WHEN 107
24、 => ToneIndex <= 9; WHEN 108 => ToneIndex <= 10; WHEN 109 => ToneIndex <= 10; WHEN 110 => ToneIndex <= 10; WHEN 111 => ToneIndex <= 10; WHEN 112 => ToneIndex <= 9; WHEN 113 => ToneIndex <= 9; WHEN 114 => ToneIndex <= 9; WHEN 115 => ToneIndex <= 9
25、; WHEN 116 => ToneIndex <= 9; WHEN 117 => ToneIndex <= 9; WHEN 118 => ToneIndex <= 8; WHEN 119 => ToneIndex <= 8; WHEN 120 => ToneIndex <= 8; WHEN 121 => ToneIndex <= 8; WHEN 122 => ToneIndex <= 8; WHEN 123 => ToneIndex <= 8; WHEN 124 => ToneIndex &
26、lt;= 8; WHEN 125 => ToneIndex <= 8; WHEN 126 => ToneIndex <= 8; WHEN 127 => ToneIndex <= 8; WHEN 128 => ToneIndex <= 0; WHEN 129 => ToneIndex <= 0; WHEN 130 => ToneIndex <= 0; WHEN 131 => ToneIndex <= 0; WHEN 132 => ToneIndex <= 0; WHEN 133 => ToneI
27、ndex <= 0; WHEN 134 => ToneIndex <= 0; WHEN 135 => ToneIndex <= 0; WHEN 136 => ToneIndex <= 0; WHEN 137 => ToneIndex <= 0; WHEN 138 => ToneIndex <= 0; WHEN OTHERS => NULL; END CASE;END PROCESS;END;音樂節(jié)拍發(fā)生器的仿真輸出波形文件如圖4.1(a)所示,分析可知仿真結(jié)果正確無誤,將以上設(shè)計的音樂節(jié)拍發(fā)生器電路設(shè)置成可調(diào)用的元件,以備
28、高層設(shè)計中使用,其元件符號如圖4.1(b)所示(a) (b) 圖4.1音樂節(jié)拍發(fā)生器 (a) 仿真輸出波形(b)元件符號圖圖4.2歡樂頌曲譜4.2 音符譯碼電路Tonetaba模塊音符譯碼電路即音調(diào)發(fā)生器實(shí)際上是一個查表電路,放置21個音樂簡譜對應(yīng)的頻率表,根據(jù)該表為數(shù)控分頻模塊(speaker)提供所發(fā)音符頻率的初始值,而此數(shù)在數(shù)控分頻模塊入口的停留時間即為此音符的節(jié)拍數(shù),不失一般性,以下VDHL程序中僅設(shè)置了“歡樂頌”樂曲全部音符所對應(yīng)的音符頻率的初始值,共16個,每個音符停留時間由音樂節(jié)拍發(fā)生器的時鐘頻率決定,在此為4Hz信號,這16個值的輸出由對應(yīng)于音符譯碼電路的4位輸入值Index3
29、.0確定,該值中音符的停留時間由音樂節(jié)拍發(fā)生器中的音符數(shù)據(jù)決定,該數(shù)據(jù)重復(fù)的次數(shù)為該音符的節(jié)拍數(shù),如為2則為四二拍,如為4則為四四拍即全音符。其VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; HIGH : OUT STD_LOGIC; Tone : OUT STD_LOGIC_VECTOR (12 DOWNTO 0) )
30、;END;ARCHITECTURE one OF ToneTaba ISBEGINPROCESS(Index) BEGIN CASE Index IS WHEN "0000" => Tone<="1111111111111" ; CODE<="0000" HIGH <='0'- 8191 WHEN "0001" => Tone<="1000100010001" ; CODE<="0001" HIGH <='
31、;0'- 4369; WHEN "0010" => Tone<="1001010110010" ; CODE<="0010" HIGH <='0'- 4786; WHEN "0011" => Tone<="1010000011111" ; CODE<="0011" HIGH <='0'-5151; WHEN "0101" => Tone<="101
32、1000001000" ; CODE<="0101" HIGH <='0'-5640; WHEN "0110" => Tone<="1011100011110" ; CODE<="0110" HIGH <='0'-5918; WHEN "0111" => Tone<="1100000010110" ; CODE<="0111" HIGH <='0&
33、#39;-6166; WHEN "1000" => Tone<="1100010001000" ; CODE<="0001" HIGH <='1'-6280; WHEN "1001" => Tone<="1101100001001" ; CODE<="0010" HIGH <='1'-6921; WHEN "1010" => Tone<="11010000
34、10010" ; CODE<="0011" HIGH <='1'-6674; WHEN "1100" => Tone<="1101001100111" ; CODE<="0101" HIGH <='1'-6759; WHEN "1101" => Tone<="1101110001110" ; CODE<="0110" HIGH <='1'-
35、7054; WHEN "1111" => Tone<="1110001000010" ; CODE<="0001" HIGH <='1'-7234; WHEN OTHERS => Tone<="1111111111111" ; CODE<="0000" HIGH <='0' END CASE; END PROCESS;END;在源程序中Index3.0是音樂節(jié)拍發(fā)生器輸出的音符數(shù)據(jù); TONE12.0是為數(shù)控分頻模塊
36、提供的音符頻率初始值,為方便測試,特設(shè)置一個音名代碼顯示輸出CODE3.0和音高指示信號HIGH,可以通過一個數(shù)碼管或LED來顯示樂曲演奏時對應(yīng)的音符和高音名。音符譯碼電路Tonetaba模塊的仿真輸出波形如圖4.2(a)所示, 例如當(dāng)輸入Index=9,產(chǎn)生的分頻系數(shù)便是6921,CODE輸出對應(yīng)該音階簡譜的顯示數(shù)碼2,high輸出為高電平,指示音階為高音,high輸出為低電平時則指示音階為中音,分析可知仿真結(jié)果正確無誤。將以上設(shè)計的音符譯碼電路Tonetaba設(shè)置成可調(diào)用的元件,以備高層設(shè)計中使用,其元件符號如圖4.2(b)所示: (a) (b) 圖4.3 音符譯碼電路Tonetaba(a
37、) 仿真輸出波形;(b)元件符號圖4.3數(shù)控分頻模塊(speaker)設(shè)計數(shù)控分頻器對FPGA的基準(zhǔn)頻率進(jìn)行分頻,得到與各個音階對應(yīng)的頻率輸出。數(shù)控分頻模塊是由一個初值可變的13位加法計數(shù)器構(gòu)成。該計數(shù)器的模為8192,當(dāng)計數(shù)器計滿時,產(chǎn)生一個進(jìn)位信號FullSpkS,該信號就是用作發(fā)音的頻率信號。在計數(shù)器的預(yù)置端給定不同的初值,其輸出將產(chǎn)生不同的頻率信號,頻率信號初值Tone就是前級音符譯碼電路Tonetaba的輸出,它計滿所需要的分頻比可由下式?jīng)Q定: Tone12.0+ 分頻比=8192+進(jìn)位信號FullSpkS 結(jié)合表4-1和以上分析式可知,低音時,Tone值小,分頻比大,進(jìn)位信號Spk
38、S的周期長,揚(yáng)聲器發(fā)出的聲音低,Tone隨音樂的樂譜而變化,自動控制分頻比,從而實(shí)現(xiàn)數(shù)控分頻,發(fā)生信號的頻率與Tone成正比,這就是利用數(shù)控分頻器自動演奏音樂的原理。音名分頻系數(shù)初始值音名分頻系數(shù)初始值音名分頻系數(shù)初始值低音17644547中音138224369高音119116280低音268101381中音234054786高音212706921低音360672124中音330345157高音315176674低音457272464中音428645327高音414326759低音551023089中音525515640高音512566935低音645453646中音622735918高音61
39、1377054低音740504141中音720256166高音710137178表4-1各音階頻率對應(yīng)的分頻值數(shù)控分頻器的輸入時鐘頻率為4MHz,通過分頻后其進(jìn)位信號FullSpkS是一周期脈沖信號,為有利于驅(qū)動揚(yáng)聲器,在音調(diào)輸出時再進(jìn)行二分頻,將脈沖展寬,使之占空比為50%,揚(yáng)聲器這樣就有足夠的發(fā)聲功率。其VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera IS PORT ( clk : IN STD_LOGIC; Tone : IN STD_LO
40、GIC_VECTOR (12 DOWNTO 0); SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Speakera IS SIGNAL PreCLK, FullSpkS : STD_LOGIC;BEGIN DivideCLK : PROCESS(clk)VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ;BEGIN PreCLK <= '0' IF Count4>11 THEN PreCLK <= '1' Count4 := "0000&qu
41、ot; ELSIF clk'EVENT AND clk = '1' THEN Count4 := Count4 + 1; END IF;END PROCESS; GenSpkS : PROCESS(PreCLK, Tone) VARIABLE Count13 : STD_LOGIC_VECTOR (12 DOWNTO 0);BEGINIF PreCLK'EVENT AND PreCLK = '1' THENIF Count13 = 16#1FFF# THEN Count13 := Tone ; FullSpkS <= '1'
42、 ELSE Count13 := Count13 + 1; FullSpkS <= '0'END IF;END IF;END PROCESS; DelaySpkS : PROCESS(FullSpkS) VARIABLE Count2 : STD_LOGIC;BEGINIF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2; IF Count2 = '1' THEN SpkS <= '1' ELSE SpkS <= '0'
43、; END IF;END IF;END PROCESS;END;VHDL程序的第一個進(jìn)程,首先對FPGA的MHz的時基脈沖按照tone輸入的分頻系數(shù)對MHz的脈沖分頻,得到所需要的音符頻率;第二個進(jìn)程的作用是在音調(diào)輸出時再進(jìn)行二分頻,將脈沖展寬,使揚(yáng)聲器有足夠發(fā)聲功率。數(shù)控分頻模塊的仿真輸出波形和元件符號如圖所示, 當(dāng)輸入Tone=6280,產(chǎn)生高音的發(fā)聲頻率信號SpkS。(a)(b)圖4.4數(shù)控分頻模塊圖(a) 仿真輸出波形(b)元件符號圖4.4樂曲硬件演奏電路頂層電路的設(shè)計和仿真樂曲硬件演奏電路頂層電路分為三個模塊,音樂節(jié)拍發(fā)生器NoteTabs模塊,音符譯碼電路Tonetaba模塊,數(shù)控
44、分頻模塊(speaker),如圖所示的是頂層電路原理圖。圖4.5樂曲硬件演奏電路頂層原理圖CLK為音調(diào)頻率信號為4MHz,CLK8HZ是樂曲硬件演奏電路節(jié)拍頻率信號為8Hz;index為手控輸入的音符數(shù)據(jù);auto為手動/自動選擇按扭,auto=1時為自動演奏,auto=0時為手動輸入。CODE簡譜碼輸出顯示,HIGH為高8度指示,Sp為聲音頻率輸出。其頂層設(shè)計的VHDL程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY m_top IS PORT ( CLK4hz : IN STD_LOGIC; CLK4mhz : IN STD_LOGIC; CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; HIGH1 : OUT STD_LOGIC; SPK : OUT STD_LOGIC );END;ARCHITECTURE one OF m_top IS COMPONENT Note
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐廳前臺服務(wù)總結(jié)
- 酷咖食品科技產(chǎn)業(yè)園建設(shè)項(xiàng)目可行性研究報告模板-立項(xiàng)拿地
- 10月石家莊房地產(chǎn)市場調(diào)研總結(jié)報告
- 2025-2030全球環(huán)錠細(xì)紗機(jī)單錠檢測系統(tǒng)行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國有機(jī)天然肥料行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國風(fēng)冷單螺桿式冷水機(jī)組行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國航空航天設(shè)備零部件用超聲波清洗機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國網(wǎng)紅孵化服務(wù)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球電池護(hù)照(DDP)行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國冷加工噴丸機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 蘇教版四年級數(shù)學(xué)下冊第三單元第二課時《常見的數(shù)量關(guān)系》課件
- 浙江省臺州市2021-2022學(xué)年高一上學(xué)期期末質(zhì)量評估政治試題 含解析
- 寧夏“8·19”較大爆燃事故調(diào)查報告
- 中國高血壓防治指南(2024年修訂版)解讀課件
- 2024年浙江省中考科學(xué)試卷
- 初三科目綜合模擬卷
- 2024年全國高考新課標(biāo)卷物理真題(含答案)
- 勞動合同薪酬與績效約定書
- 消除醫(yī)療歧視管理制度
- 足療店?duì)I銷策劃方案
- 學(xué)校安全一崗雙責(zé)
評論
0/150
提交評論