版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、江西理工大學(xué)應(yīng)用科學(xué)學(xué)院SOPC/EDA綜合課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目: 硬件樂(lè)曲自動(dòng)演奏電路設(shè)計(jì)設(shè) 計(jì) 者: 學(xué) 號(hào): 班 級(jí): 指導(dǎo)老師: 王忠鋒完成時(shí)間: 2012年01月6日設(shè)計(jì)報(bào)告綜合測(cè)試總評(píng)格式(10)內(nèi)容(40)圖表(10)答辯(20)平時(shí)(20)目錄前 言3樂(lè)曲硬件演奏電路EDA設(shè)計(jì)41設(shè)計(jì)要求42設(shè)計(jì)方案43原理描述53.1 音名與頻率的關(guān)系53.2 控制音長(zhǎng)的節(jié)拍發(fā)生器74樂(lè)曲硬件演奏電路的層次化設(shè)計(jì)方案74.1 音樂(lè)節(jié)拍發(fā)生器NoteTabs74.2 音符譯碼電路Tonetaba模塊154.3數(shù)控分頻模塊(speaker)設(shè)計(jì)174.4樂(lè)曲硬件演奏電路頂層電路的設(shè)計(jì)和仿真215
2、實(shí)驗(yàn)總結(jié)與心得246參考文獻(xiàn)25前 言樂(lè)曲演奏廣泛用于自動(dòng)答錄裝置、手機(jī)鈴聲、集團(tuán)電話、及智能儀器儀表設(shè)備。實(shí)現(xiàn)方法有許多種,隨著FPGA集成度的提高,價(jià)格下降,EDA設(shè)計(jì)工具更新?lián)Q代,功能日益普及與流行,使這種方案的應(yīng)用越來(lái)越多。如今的數(shù)字邏輯設(shè)計(jì)者面臨日益縮短的上市時(shí)間的壓力,不得不進(jìn)行上萬(wàn)門的設(shè)計(jì),同時(shí)設(shè)計(jì)者不允許以犧牲硅的效率達(dá)到保持結(jié)構(gòu)的獨(dú)特性。使用現(xiàn)今的EDA軟件工具來(lái)應(yīng)付這些問(wèn)題,并不是一件簡(jiǎn)單的事情。FPGA預(yù)裝了很多已構(gòu)造好的參數(shù)化庫(kù)單元LPM器件。通過(guò)引入支持LPM的EDA軟件工具,設(shè)計(jì)者可以設(shè)計(jì)出結(jié)構(gòu)獨(dú)立而且硅片的使用效率非常高的產(chǎn)品。本課設(shè)在EDA開(kāi)發(fā)平臺(tái)上利用VHDL
3、語(yǔ)言設(shè)計(jì)數(shù)控分頻器電路,利用數(shù)控分頻的原理設(shè)計(jì)樂(lè)曲硬件演奏電路,以“歡樂(lè)頌”樂(lè)曲為例,將音樂(lè)數(shù)據(jù)存儲(chǔ)到音樂(lè)節(jié)拍器中,就達(dá)到了以純硬件的手段來(lái)實(shí)現(xiàn)樂(lè)曲的演奏效果。只要修改音樂(lè)節(jié)拍器所存儲(chǔ)的音樂(lè)數(shù)據(jù),將其換成其他樂(lè)曲的音樂(lè)數(shù)據(jù),連接到程序中就可以實(shí)現(xiàn)其它樂(lè)曲的演奏。關(guān)鍵詞:FPGA;EDA;VHDL;音樂(lè)樂(lè)曲硬件演奏電路EDA設(shè)計(jì)1設(shè)計(jì)要求利用可編程邏輯器件FPGA,設(shè)計(jì)一個(gè)樂(lè)曲硬件演奏電路。由鍵盤輸入控制音響,同時(shí)可自動(dòng)演奏樂(lè)曲。演奏時(shí)可選擇鍵盤輸入樂(lè)曲或者已存入的樂(lè)曲,并配以一個(gè)小揚(yáng)聲器。其結(jié)構(gòu)如圖所示,該設(shè)計(jì)產(chǎn)生的音樂(lè)選自歡樂(lè)頌片段?;鶞?zhǔn)時(shí)鐘12MHZ時(shí)鐘電路數(shù)控分頻器音樂(lè)節(jié)拍產(chǎn)生電路音符譯
4、碼電路圖2.1樂(lè)曲演奏電路結(jié)構(gòu)方框圖2設(shè)計(jì)方案利用FPGA來(lái)實(shí)現(xiàn)樂(lè)曲硬件演奏電路。樂(lè)曲的12平均率規(guī)定:每2個(gè)八度(如簡(jiǎn)譜中的中音1與高音1)之間的頻率相差1倍。在2個(gè)八度音之間,又可分為12個(gè)半音,每2個(gè)半音的頻率比為12/2。另外,音符A的頻率為440HZ,音符B到C之間,E到F之間為半音,其余為全音。由此可以計(jì)算出簡(jiǎn)譜中從低音l至高音1之間每個(gè)音符的頻率。設(shè)計(jì)音符查找表電路模塊,時(shí)鐘模塊,數(shù)控分頻器模塊,音樂(lè)節(jié)拍產(chǎn)生模塊電路。3原理描述產(chǎn)生音樂(lè)的兩個(gè)因素是音樂(lè)頻率和音樂(lè)的持續(xù)時(shí)間(即音高和節(jié)拍),以純硬件完成演奏電路比利用微處理器(CPU)來(lái)實(shí)現(xiàn)樂(lè)曲演奏要復(fù)雜的多如果不借助于功能強(qiáng)大的E
5、DA工具和硬件描述語(yǔ)言,憑借傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡(jiǎn)單的演奏電路也難以實(shí)現(xiàn)。根據(jù)設(shè)計(jì)要求,樂(lè)曲硬件演奏電路系統(tǒng)主要由數(shù)控分頻器和樂(lè)曲存儲(chǔ)模塊組成。數(shù)控分頻器對(duì)FPGA的基準(zhǔn)頻率進(jìn)行分頻,得到與各個(gè)音階對(duì)應(yīng)的頻率輸出。樂(lè)曲存儲(chǔ)模塊產(chǎn)生節(jié)拍控制和音階選擇信號(hào),即在此模塊中可存放一個(gè)樂(lè)曲曲譜真值表,由一個(gè)計(jì)數(shù)器來(lái)控制此真值表的輸出,而由計(jì)數(shù)器的計(jì)數(shù)時(shí)鐘信號(hào)作為樂(lè)曲節(jié)拍控制信號(hào)。3.1 音名與頻率的關(guān)系音樂(lè)的十二平均率規(guī)定:每?jī)蓚€(gè)八度音(如簡(jiǎn)譜中的中音與高音)之間的頻率相差一倍在兩個(gè)八度音之間,又可分為十二個(gè)半音,每?jī)蓚€(gè)半音的頻率比為4。另外,音名(簡(jiǎn)譜中的低音)的頻率為440Hz,音名B到C之間
6、,E到F之間為半音,其余為全音,由此可以計(jì)算出簡(jiǎn)譜中從低音1到高音1之間每個(gè)音名的頻率如下表所示.表3-1簡(jiǎn)譜中的音名與頻率的關(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)頻率過(guò)低,則由于分頻系數(shù)過(guò)小,四舍五入取整后的誤差較大,若基準(zhǔn)頻率過(guò)高,雖然誤碼差變小,但分頻結(jié)構(gòu)將變大。實(shí)際的設(shè)計(jì)應(yīng)綜合考慮兩方面的因素,在盡量減小頻率誤差的前提下取舍合適的基準(zhǔn)頻率。本設(shè)計(jì)中選取4MHz的基準(zhǔn)頻率,若無(wú)4MHz的時(shí)鐘頻率,實(shí)際上,只要各個(gè)音名間的相對(duì)品頻率關(guān)系不變,C作1與D作1演奏出的音樂(lè)聽(tīng)起來(lái)都不會(huì)“走調(diào)”。各音階頻率及相應(yīng)的分頻系數(shù)如下表所示。為了減少輸出的偶次諧波分量,最后輸出到揚(yáng)聲器的波形應(yīng)為對(duì)稱方波,因此在到達(dá)揚(yáng)聲器之前,有一個(gè)二分頻的分頻器。由于最大的分頻系數(shù)為7644,故采用13位二進(jìn)制計(jì)數(shù)器已能滿足分頻要求。在下面表中除給
8、出了分頻比以外,給出了對(duì)應(yīng)于各個(gè)音階頻率時(shí)計(jì)數(shù)器不同的初始值,對(duì)于樂(lè)曲中的休止符,要將分頻系數(shù)設(shè)為0,即初始值為8191即可,此時(shí)揚(yáng)聲器將不會(huì)發(fā)聲。對(duì)于不同的分頻系數(shù),加載不同的初始值即可。用加載初始值而不是將分頻輸出譯碼反饋,可以有效地減少本設(shè)計(jì)占用可編程邏輯器件的資源,也是同步計(jì)數(shù)器的一個(gè)常用設(shè)計(jì)技巧。3.2 控制音長(zhǎng)的節(jié)拍發(fā)生器該演奏電路演奏的樂(lè)曲是“歡樂(lè)頌”片段,其最小的節(jié)拍為1拍。將1拍的時(shí)長(zhǎng)定為0.25秒,則只需要再提供一個(gè)4Hz的時(shí)鐘頻率即可產(chǎn)生1拍的時(shí)長(zhǎng),演奏的時(shí)間控制通過(guò)ROM查表的方式來(lái)完成。對(duì)于占用時(shí)間較長(zhǎng)的節(jié)拍(一定是拍的整數(shù)倍),如全音符為4拍(重復(fù)4),2/4音符為
9、2拍(重復(fù)2),1/4音符為1拍(重復(fù)1)。要求演奏時(shí)能循環(huán)進(jìn)行,因此需另外設(shè)置一個(gè)時(shí)長(zhǎng)計(jì)數(shù)器,當(dāng)樂(lè)曲演奏完成時(shí),保證能自動(dòng)從頭開(kāi)始演奏。該計(jì)數(shù)器控制真值表按順序輸出簡(jiǎn)譜。 4樂(lè)曲硬件演奏電路的層次化設(shè)計(jì)方案根據(jù)層次化的設(shè)計(jì)思路,可把樂(lè)曲硬件演奏電路分為三個(gè)模塊,音樂(lè)節(jié)拍發(fā)生器NoteTabs模塊,音符譯碼電路Tonetaba模塊,數(shù)控分頻模塊(speaker)。下面給出其EDA設(shè)計(jì)過(guò)程:4.1 音樂(lè)節(jié)拍發(fā)生器NoteTabs該模塊將利用FPGA的片內(nèi)ROM存放樂(lè)曲簡(jiǎn)譜真值表,由一個(gè)二進(jìn)制計(jì)數(shù)器為樂(lè)曲數(shù)據(jù)存儲(chǔ)器ROM的地址發(fā)生器。該計(jì)數(shù)器的計(jì)數(shù)頻率為4Hz,即每一計(jì)數(shù)值的停留時(shí)間為0.25秒,
10、隨著NoteTaba中計(jì)數(shù)器按4Hz的時(shí)鐘頻率作加法計(jì)數(shù)時(shí),即隨地址值遞增時(shí),樂(lè)曲數(shù)據(jù)ROM中的音符數(shù)據(jù),將從ROM中的輸出口輸向音符譯碼電路Tonetaba,所存儲(chǔ)樂(lè)曲就開(kāi)始連續(xù)自然地演奏起來(lái)。二進(jìn)制計(jì)數(shù)器的位數(shù)將根據(jù)所存放樂(lè)曲簡(jiǎn)譜基本節(jié)拍數(shù)來(lái)決定,對(duì)于樂(lè)曲“歡樂(lè)頌”片段其節(jié)拍數(shù)為138,即選擇計(jì)數(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;音樂(lè)節(jié)拍發(fā)生器的仿真輸出波形文件如圖4.1(a)所示,分析可知仿真結(jié)果正確無(wú)誤,將以上設(shè)計(jì)的音樂(lè)節(jié)拍發(fā)生器電路設(shè)置成可調(diào)用的元件,以備
28、高層設(shè)計(jì)中使用,其元件符號(hào)如圖4.1(b)所示(a) (b) 圖4.1音樂(lè)節(jié)拍發(fā)生器 (a) 仿真輸出波形(b)元件符號(hào)圖圖4.2歡樂(lè)頌曲譜4.2 音符譯碼電路Tonetaba模塊音符譯碼電路即音調(diào)發(fā)生器實(shí)際上是一個(gè)查表電路,放置21個(gè)音樂(lè)簡(jiǎn)譜對(duì)應(yīng)的頻率表,根據(jù)該表為數(shù)控分頻模塊(speaker)提供所發(fā)音符頻率的初始值,而此數(shù)在數(shù)控分頻模塊入口的停留時(shí)間即為此音符的節(jié)拍數(shù),不失一般性,以下VDHL程序中僅設(shè)置了“歡樂(lè)頌”樂(lè)曲全部音符所對(duì)應(yīng)的音符頻率的初始值,共16個(gè),每個(gè)音符停留時(shí)間由音樂(lè)節(jié)拍發(fā)生器的時(shí)鐘頻率決定,在此為4Hz信號(hào),這16個(gè)值的輸出由對(duì)應(yīng)于音符譯碼電路的4位輸入值Index3
29、.0確定,該值中音符的停留時(shí)間由音樂(lè)節(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是音樂(lè)節(jié)拍發(fā)生器輸出的音符數(shù)據(jù); TONE12.0是為數(shù)控分頻模塊
36、提供的音符頻率初始值,為方便測(cè)試,特設(shè)置一個(gè)音名代碼顯示輸出CODE3.0和音高指示信號(hào)HIGH,可以通過(guò)一個(gè)數(shù)碼管或LED來(lái)顯示樂(lè)曲演奏時(shí)對(duì)應(yīng)的音符和高音名。音符譯碼電路Tonetaba模塊的仿真輸出波形如圖4.2(a)所示, 例如當(dāng)輸入Index=9,產(chǎn)生的分頻系數(shù)便是6921,CODE輸出對(duì)應(yīng)該音階簡(jiǎn)譜的顯示數(shù)碼2,high輸出為高電平,指示音階為高音,high輸出為低電平時(shí)則指示音階為中音,分析可知仿真結(jié)果正確無(wú)誤。將以上設(shè)計(jì)的音符譯碼電路Tonetaba設(shè)置成可調(diào)用的元件,以備高層設(shè)計(jì)中使用,其元件符號(hào)如圖4.2(b)所示: (a) (b) 圖4.3 音符譯碼電路Tonetaba(a
37、) 仿真輸出波形;(b)元件符號(hào)圖4.3數(shù)控分頻模塊(speaker)設(shè)計(jì)數(shù)控分頻器對(duì)FPGA的基準(zhǔn)頻率進(jìn)行分頻,得到與各個(gè)音階對(duì)應(yīng)的頻率輸出。數(shù)控分頻模塊是由一個(gè)初值可變的13位加法計(jì)數(shù)器構(gòu)成。該計(jì)數(shù)器的模為8192,當(dāng)計(jì)數(shù)器計(jì)滿時(shí),產(chǎn)生一個(gè)進(jìn)位信號(hào)FullSpkS,該信號(hào)就是用作發(fā)音的頻率信號(hào)。在計(jì)數(shù)器的預(yù)置端給定不同的初值,其輸出將產(chǎn)生不同的頻率信號(hào),頻率信號(hào)初值Tone就是前級(jí)音符譯碼電路Tonetaba的輸出,它計(jì)滿所需要的分頻比可由下式?jīng)Q定: Tone12.0+ 分頻比=8192+進(jìn)位信號(hào)FullSpkS 結(jié)合表4-1和以上分析式可知,低音時(shí),Tone值小,分頻比大,進(jìn)位信號(hào)Spk
38、S的周期長(zhǎng),揚(yáng)聲器發(fā)出的聲音低,Tone隨音樂(lè)的樂(lè)譜而變化,自動(dòng)控制分頻比,從而實(shí)現(xiàn)數(shù)控分頻,發(fā)生信號(hào)的頻率與Tone成正比,這就是利用數(shù)控分頻器自動(dòng)演奏音樂(lè)的原理。音名分頻系數(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各音階頻率對(duì)應(yīng)的分頻值數(shù)控分頻器的輸入時(shí)鐘頻率為4MHz,通過(guò)分頻后其進(jìn)位信號(hào)FullSpkS是一周期脈沖信號(hào),為有利于驅(qū)動(dòng)揚(yáng)聲器,在音調(diào)輸出時(shí)再進(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程序的第一個(gè)進(jìn)程,首先對(duì)FPGA的MHz的時(shí)基脈沖按照tone輸入的分頻系數(shù)對(duì)MHz的脈沖分頻,得到所需要的音符頻率;第二個(gè)進(jìn)程的作用是在音調(diào)輸出時(shí)再進(jìn)行二分頻,將脈沖展寬,使揚(yáng)聲器有足夠發(fā)聲功率。數(shù)控分頻模塊的仿真輸出波形和元件符號(hào)如圖所示, 當(dāng)輸入Tone=6280,產(chǎn)生高音的發(fā)聲頻率信號(hào)SpkS。(a)(b)圖4.4數(shù)控分頻模塊圖(a) 仿真輸出波形(b)元件符號(hào)圖4.4樂(lè)曲硬件演奏電路頂層電路的設(shè)計(jì)和仿真樂(lè)曲硬件演奏電路頂層電路分為三個(gè)模塊,音樂(lè)節(jié)拍發(fā)生器NoteTabs模塊,音符譯碼電路Tonetaba模塊,數(shù)控
44、分頻模塊(speaker),如圖所示的是頂層電路原理圖。圖4.5樂(lè)曲硬件演奏電路頂層原理圖CLK為音調(diào)頻率信號(hào)為4MHz,CLK8HZ是樂(lè)曲硬件演奏電路節(jié)拍頻率信號(hào)為8Hz;index為手控輸入的音符數(shù)據(jù);auto為手動(dòng)/自動(dòng)選擇按扭,auto=1時(shí)為自動(dòng)演奏,auto=0時(shí)為手動(dòng)輸入。CODE簡(jiǎn)譜碼輸出顯示,HIGH為高8度指示,Sp為聲音頻率輸出。其頂層設(shè)計(jì)的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. 本站所有資源如無(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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能門禁系統(tǒng)數(shù)據(jù)安全保護(hù)合同8篇
- 2025年度個(gè)人房產(chǎn)租賃市場(chǎng)調(diào)研分析合同4篇
- 2024年09月江蘇蘇州銀行常熟支行招考(153)號(hào)筆試歷年參考題庫(kù)附帶答案詳解
- 2024年09月江蘇浙商銀行徐州分行招考筆試歷年參考題庫(kù)附帶答案詳解
- 2024年09月江蘇2024年江蘇句容農(nóng)村商業(yè)銀行校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 2024年08月招商銀行合肥分行2024秋季校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 加油站的燃油稅收與政策解讀
- 2024年08月中信銀行廣州分行綜合柜員崗招聘(819)筆試歷年參考題庫(kù)附帶答案詳解
- 2024年02月廣西2024年中信銀行南寧分行社會(huì)招考(0222)筆試歷年參考題庫(kù)附帶答案詳解
- 2025年度個(gè)人房產(chǎn)抵押貸款擔(dān)保及風(fēng)險(xiǎn)管理合同4篇
- 大學(xué)生國(guó)家安全教育意義
- 2024年保育員(初級(jí))培訓(xùn)計(jì)劃和教學(xué)大綱-(目錄版)
- 河北省石家莊市2023-2024學(xué)年高二上學(xué)期期末考試 語(yǔ)文 Word版含答案
- 企業(yè)正確認(rèn)識(shí)和運(yùn)用矩陣式管理
- 分布式光伏高處作業(yè)專項(xiàng)施工方案
- 陳閱增普通生物學(xué)全部課件
- 檢驗(yàn)科主任就職演講稿范文
- 人防工程主體監(jiān)理質(zhì)量評(píng)估報(bào)告
- 20225GRedCap通信技術(shù)白皮書
- 燃?xì)庥邢薰究蛻舴?wù)規(guī)范制度
- 延遲交稿申請(qǐng)英文
評(píng)論
0/150
提交評(píng)論