本系列將帶來FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開始,最詳細(xì)操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業(yè)學(xué)生、初入職場(chǎng)小白及打算進(jìn)階提升的職業(yè)開發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會(huì)。
系統(tǒng)性的掌握技術(shù)開發(fā)以及相關(guān)要求,對(duì)個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對(duì)大家有所幫助。后續(xù)會(huì)陸續(xù)更新 Xilinx 的 Vivado、ISE 及相關(guān)操作軟件的開發(fā)的相關(guān)內(nèi)容,學(xué)習(xí)FPGA設(shè)計(jì)方法及設(shè)計(jì)思想的同時(shí),實(shí)操結(jié)合各類操作軟件,會(huì)讓你在技術(shù)學(xué)習(xí)道路上無比的順暢,告別技術(shù)學(xué)習(xí)小BUG卡破腦殼,告別目前忽悠性的培訓(xùn)誘導(dǎo),真正的去學(xué)習(xí)去實(shí)戰(zhàn)應(yīng)用,這種快樂試試你就會(huì)懂的。話不多說,上貨。
音樂蜂鳴器設(shè)計(jì)
蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子產(chǎn)品中作發(fā)聲器件。
圖1 :蜂鳴器實(shí)物圖
蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。
壓電式蜂鳴器
壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。有的壓電式蜂鳴器外殼上還裝有發(fā)光二極管。多諧振蕩器由晶體管或集成電路構(gòu)成,當(dāng)接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號(hào),阻抗匹配器推動(dòng)壓電蜂鳴片發(fā)聲。
電磁式蜂鳴器
電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號(hào)電流通過電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)。振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性地振動(dòng)發(fā)聲。
按照內(nèi)部有無震蕩源可以分為有源蜂鳴器和無源蜂鳴器。有源蜂鳴器內(nèi)部帶震蕩源,所以只要一通電就會(huì)發(fā)出聲音;而無源內(nèi)部不帶震蕩源,所以如果用直流信號(hào)無法令其鳴叫。必須用一定頻率的方波去驅(qū)動(dòng)它。
首先設(shè)計(jì)分頻器,設(shè)計(jì)一個(gè)1KHz的方波,驅(qū)動(dòng)蜂鳴器,觀測(cè)蜂鳴器是否會(huì)有聲音產(chǎn)生。
本小節(jié)研究如何利用蜂鳴器演唱一首曲子《世上只有媽媽好》。
下圖為《世上只有媽媽好》的簡(jiǎn)譜。
圖2:世上只有媽媽好的簡(jiǎn)譜
簡(jiǎn)譜是一種比較簡(jiǎn)單易學(xué)的音樂記譜法。據(jù)說簡(jiǎn)譜是由法國(guó)思想家盧梭于1742年發(fā)明的。而最早把簡(jiǎn)譜引進(jìn)我國(guó)的是我國(guó)近代音樂教育家沈心工。簡(jiǎn)譜應(yīng)該說是一種比較簡(jiǎn)單易學(xué)的音樂記譜法。它的最大好處是僅用7個(gè)阿拉伯?dāng)?shù)字----1234567,就能將萬千變化的音樂曲子記錄并表示出來.
在簡(jiǎn)譜中,用以表示音的高低及相互關(guān)系的基本符號(hào)為七個(gè)阿拉伯?dāng)?shù)字,即1、2、3、4、5、6、7,唱作do、re、mi、fa、sol、la、si,稱為唱名。
音符:1234567
唱名:do re mi fa sol la si
漢字:哆來米發(fā)梭拉西
顯然,單用以上七個(gè)音是無法表現(xiàn)眾多的音樂形象的。在實(shí)際作品中,還有一些更高或更低的音,如在基本音符上方加記一個(gè)"·",表示該音升高一個(gè)八度,稱為高音;加記兩個(gè)" :",則表示該音升高兩個(gè)八度,稱為倍高音。在基本音符下方加記一個(gè)"·",表示該音降低一個(gè)八度,稱為低音;加記兩個(gè)" :",則表示該音降低兩個(gè)八度,稱為倍低音。
在一般歌曲中,無論是在基本音符上方或下方加記兩個(gè)以上的"·"的音符都是很少見的。
在簡(jiǎn)譜中,1、2、3、4、5、6、7這七個(gè)基本音符,不僅表示音的高低,而且還是表示時(shí)值長(zhǎng)短的基本單位,稱為四分音符,其他音符均是在四分音符的基礎(chǔ)上,用加記短橫線"-"和附點(diǎn)"·"表示。
在基本音符右側(cè)加記一條短橫線,表示增長(zhǎng)一個(gè)四分音符的時(shí)值。這類加記在音符右側(cè)、使音符時(shí)值增長(zhǎng)的短橫線,稱為增時(shí)線。增時(shí)線越多,音符的時(shí)值越長(zhǎng)。
在基本音符下方加記一條短橫線,表示縮短原音符時(shí)值的一半。這類加記在音符下方、使音符時(shí)值縮短的短橫線,稱為減時(shí)線。減時(shí)線越多,音符的時(shí)值越短。
在簡(jiǎn)譜中,加記在單純音符的右側(cè)的、使音符時(shí)值增長(zhǎng)的小圓點(diǎn)"·",稱為附點(diǎn)。加記附點(diǎn)的音符稱為附點(diǎn)音符。附點(diǎn)本身并無一定的長(zhǎng)短,其長(zhǎng)短由前面的單純音符來決定。附點(diǎn)的意義在于增長(zhǎng)原音符時(shí)值的一半,常用于四分音符和小于四分音符的各種音符之后。
在《世上只有媽媽好》的簡(jiǎn)譜中,每?jī)蓚€(gè)豎線之間為2秒鐘的時(shí)長(zhǎng)。每?jī)蓚€(gè)豎線之間有4個(gè)音符時(shí)長(zhǎng),但是其中有較多半個(gè)音符的長(zhǎng),本設(shè)計(jì)采用1/4秒為基本單位。
蜂鳴器給予不同的頻率是可以發(fā)出近似1、2、3、4、5、6、7這七個(gè)基本音符。
圖3 :各個(gè)音符所對(duì)應(yīng)的頻率
此模塊命名為music_beep,clk為50MHz的時(shí)鐘,rst_n為低電平有效的復(fù)位,beep為蜂鳴器的驅(qū)動(dòng)信號(hào)。
圖4 :music_beep的模型
在設(shè)計(jì)時(shí),首先將簡(jiǎn)譜中的音符存起來;利用計(jì)數(shù)器產(chǎn)生1/4秒為周期的脈沖,在此脈沖驅(qū)動(dòng)下,將事先存好的音符一個(gè)個(gè)輸出;根據(jù)音符的值,計(jì)算出分頻比;根據(jù)分頻比,產(chǎn)生對(duì)應(yīng)頻率的波形。將此波形輸出即可。
圖5 :架構(gòu)圖
在進(jìn)行多模塊設(shè)計(jì)時(shí),可以對(duì)每個(gè)模塊只設(shè)計(jì)端口,將架構(gòu)完成后。再分別設(shè)計(jì)每個(gè)模塊。
《世上只有媽媽好》的簡(jiǎn)譜中共有8個(gè)四拍,每個(gè)四拍我們用8個(gè)音符來表示,合計(jì)共64個(gè)音符。在speed_ctrl中,輸出的cnt為6位,正好可以表示64個(gè)狀態(tài)。
在speed_ctrl中,每1/8秒讓cnt增加1即可。
speed_ctrl 模塊的設(shè)計(jì)代碼如下:
在music_mem中存儲(chǔ)音符,存儲(chǔ)方式為低音用1到7表示,中音用8到14表示,高音用15到21表示,music為5bit位寬。
music_mem模塊的設(shè)計(jì)代碼如下:
根據(jù)頻率和音符的關(guān)系,將音符對(duì)應(yīng)的頻率值取出來,根據(jù)頻率值算出分頻比。驅(qū)動(dòng)時(shí)鐘為50MHz,所以分頻比為50M除以頻率。
cal_divmum模塊的設(shè)計(jì)代碼如下:
知道分頻數(shù)后,利用任意分頻的方式,產(chǎn)生對(duì)的波形即可。
wave_gen模塊的設(shè)計(jì)代碼如下:
設(shè)計(jì)好上述四個(gè)模塊后,將它們之前設(shè)計(jì)架構(gòu)的連接方式,連接起來。
music_beep頂層模塊的設(shè)計(jì)代碼如下:
RTL視圖如下,和所設(shè)計(jì)架構(gòu)相同。
圖11 :RTL視圖
在testbench中,將speed_ctrl_inst模塊中的T_250ms改成10。
testbench代碼如下:
由于輸出的頻率都較低,所以仿真時(shí)間都很長(zhǎng)。
將參數(shù)改小,也只是加快切換輸出音符的頻率。由于wave_gen模塊和分頻模塊相同,故而不在驗(yàn)證。只看RTL視圖中,分頻數(shù)是不是正確即可。
圖13 :RTL視圖
在RTL視圖中,也看到cnt每10個(gè)周期增長(zhǎng)1,然后對(duì)應(yīng)輸出音符。音符得出頻率,根據(jù)頻率得出分頻數(shù)。經(jīng)過驗(yàn)證,數(shù)據(jù)都是正確的。
分配管腳,全編譯形成下載文件,下板后就可以聽到《世上只有媽媽好》的歌曲了。
通過更改speed_crtl中的控制音符前進(jìn)的速度,可以控制播放的速度。如果將速度控制到1/2秒的話,那么聽到的歌曲將會(huì)變慢。如果將速度控制到1/8秒的話,那么聽到的歌曲將會(huì)變快。
編輯:黃飛
?
評(píng)論
查看更多