色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

學(xué)會(huì)這些,用FPGA開(kāi)發(fā)板制作音樂(lè)盒就是這么簡(jiǎn)單!

電子工程技術(shù) ? 來(lái)源:YXQ ? 2019-08-12 17:11 ? 次閱讀

相信大家已經(jīng)在網(wǎng)上見(jiàn)識(shí)過(guò)很多“民間大神”們的天才(奇葩)手工DIY了,一些簡(jiǎn)簡(jiǎn)單單的材料在他們的搗鼓下,瞬間華麗轉(zhuǎn)身,變廢為寶。今天,我們?yōu)榇蠹艺砹艘晃皇止ご笊竦?a target="_blank">DIY心得——如何利用FPGA開(kāi)發(fā)板DIY一個(gè)音樂(lè)盒,也就是如何使我們的FPGA播放聲音和音樂(lè)!

首先需生成單個(gè)音調(diào),然后慢慢地做更有趣的事情,如制作警報(bào)聲和播放曲調(diào)。

需要準(zhǔn)備的硬件

該項(xiàng)目使用的是一個(gè)Pluto的FPGA開(kāi)發(fā)板,還有一個(gè)揚(yáng)聲器和一個(gè)1kΩ的電阻

更加直觀(guān)的展示是下面這樣的:

本次DIY的音樂(lè)盒分為4個(gè)部分:

1.簡(jiǎn)單的嗶嗶聲

2.警報(bào)聲

3.音調(diào)

4.曲子

1.簡(jiǎn)單的嗶嗶聲

FPGA可以輕松實(shí)現(xiàn)二進(jìn)制計(jì)數(shù)器。例如,在回滾之前,16位計(jì)數(shù)器將從0到65535(65536個(gè)不同的值)計(jì)數(shù)。Pluto板具有一個(gè)25MHz的時(shí)鐘振蕩器,因此我們可以輕松構(gòu)建一個(gè)25MHz時(shí)鐘16位自動(dòng)計(jì)數(shù)器。其最高位切換頻率為25000000/65536 = 381Hz。

VerilogHDL的代碼如下:

modulemusic(clk,speaker);

inputclk;

outputspeaker;

// 首先創(chuàng)建一個(gè)16位二級(jí)制計(jì)數(shù)器

reg[15:0]counter;

always@(posedgeclk)counter<=counter+1;

// 使用計(jì)數(shù)器的最高有效位來(lái)驅(qū)動(dòng)揚(yáng)聲器

assignspeaker=counter[15];

endmodule

詳細(xì)講解的話(huà)就是,“clk”在25MHz下運(yùn)行,“counter [0]”看起來(lái)像是一個(gè)12.5MHz信號(hào)(它以25MHz的頻率進(jìn)行更新變化,變化的值為0 1 0 1 ......因此看起來(lái)像12.5MHz信號(hào)),“counter [1]“是6.125MHz信號(hào),依此類(lèi)推。

由于我們使用計(jì)數(shù)器的最高有效位(第15位)來(lái)驅(qū)動(dòng)輸出,因此“揚(yáng)聲器”輸出會(huì)產(chǎn)生一個(gè)完美的381Hz方波信號(hào)。

2.警報(bào)聲

我們可以在兩個(gè)音調(diào)之間循環(huán)。我們首先用一個(gè)24位計(jì)數(shù)器的“音調(diào)”來(lái)產(chǎn)生一個(gè)較慢的方波。其MSB(最高有效位)“tone[23]”是一1.5Hz的頻率進(jìn)行變換的。

然后我們就可以用這個(gè)最高有效位切換到另一個(gè)計(jì)數(shù)器,從而在兩個(gè)頻率之間切換。

代碼如下:

modulemusic(clk,speaker);

inputclk;

outputspeaker;

parameterclkdivider=25000000/440/2;

reg[23:0]tone;

always@(posedgeclk)tone<=tone+1;

reg[14:0]counter;

always@(posedgeclk)if(counter==0)counter<=(tone[23]?clkdivider-1:clkdivider/2-1);elsecounter<=counter-1;

regspeaker;

always@(posedgeclk)if(counter==0)speaker<=~speaker;

endmodule

3.演奏音符

現(xiàn)在我們想要演奏一首曲子,所以需要來(lái)獲取不同的音符,就像電子琴一樣。

如果我們用6位來(lái)實(shí)現(xiàn)音符,那么我可以獲得64個(gè)音符。每個(gè)八度一共有12個(gè)音符,所以64個(gè)音符可以實(shí)現(xiàn)5個(gè)八度,完全足夠彈奏一首曲目了。

步驟1

要想實(shí)現(xiàn)一組音調(diào)不斷升高的聲音,我們用一個(gè)28位計(jì)數(shù)器來(lái)距離,提取其中6個(gè)MSB,從而給到6位的音調(diào)。

代碼如下:

reg[27:0]tone;

always@(posedgeclk)tone<=tone+1;

wire[5:0]fullnote=tone[27:22];

在25MHz的時(shí)鐘下,每個(gè)音符持續(xù)167ms,64個(gè)音符一共需要10.6s才能演奏完成。

步驟2

我們將“fullnote”分成12份。這樣就可以給到我們一個(gè)八度(一共有5個(gè)8度,所以我們只需要3位,從0到4)和音符(從0到11,需要4位)。

代碼如下:

wire[2:0]octave;

wire[3:0]note;

divide_by12 divby12(.numer(fullnote[5:0]),.quotient(octave),.remain(note));

此處用了一個(gè)叫divide_by12的子模塊來(lái)實(shí)現(xiàn)分頻。細(xì)節(jié)稍后講解。

步驟3

從一個(gè)八度到另一個(gè)八度,頻率乘以了“2”。這個(gè)在硬件上很容易實(shí)現(xiàn),我們?cè)诓襟E4上進(jìn)行實(shí)現(xiàn)。但是要從一個(gè)音符到另一個(gè)音符,頻率就要乘以1.0594。這樣的話(huà)就沒(méi)那么容易在硬件上實(shí)現(xiàn)了,所以我們需要看下提前計(jì)算好的音符值。

我們將主時(shí)鐘除以512得到音符A,除以483得到音符A#,除以456得到音符B…記住,除以一個(gè)更低的值得到的是更高的音符。

一個(gè)八度下的音符數(shù)值如下:

always@(note)

case(note)

0:clkdivider=512-1;// A

1:clkdivider=483-1;// A#/Bb

2:clkdivider=456-1;// B

3:clkdivider=431-1;// C

4:clkdivider=406-1;// C#/Db

5:clkdivider=384-1;// D

6:clkdivider=362-1;// D#/Eb

7:clkdivider=342-1;// E

8:clkdivider=323-1;// F

9:clkdivider=304-1;// F#/Gb

10:clkdivider=287-1;// G

11:clkdivider=271-1;// G#/Ab

12:clkdivider=0;// should never happen

13:clkdivider=0;// should never happen

14:clkdivider=0;// should never happen

15:clkdivider=0;// should never happen

endcase

always@(posedgeclk)if(counter_note==0)counter_note<=clkdivider;elsecounter_note<=counter_note-1;

每當(dāng)counter_note等于0時(shí),就進(jìn)入到下一個(gè)八度。

步驟4

現(xiàn)在我們要處理好不同的八度,對(duì)于最低的八度,我們將“counter_note”除以256,對(duì)于第二個(gè)八度,除以128,以此類(lèi)推。

reg[7:0]counter_octave;

always@(posedgeclk)

if(counter_note==0)

begin

if(counter_octave==0)

counter_octave<=(octave==0?255:octave==1?127:octave==2?63:octave==3?31:octave==4?15:7);

else

counter_octave<=counter_octave-1;

end

regspeaker;

always@(posedgeclk)if(counter_note==0&&counter_octave==0)speaker<=~speaker;

完整代碼如下:

modulemusic(clk,speaker);

inputclk;

outputspeaker;

reg[27:0]tone;

always@(posedgeclk)tone<=tone+1;

wire[5:0]fullnote=tone[27:22];

wire[2:0]octave;

wire[3:0]note;

divide_by12 divby12(.numer(fullnote[5:0]),.quotient(octave),.remain(note));

reg[8:0]clkdivider;

always@(note)

case(note)

0:clkdivider=512-1;// A

1:clkdivider=483-1;// A#/Bb

2:clkdivider=456-1;// B

3:clkdivider=431-1;// C

4:clkdivider=406-1;// C#/Db

5:clkdivider=384-1;// D

6:clkdivider=362-1;// D#/Eb

7:clkdivider=342-1;// E

8:clkdivider=323-1;// F

9:clkdivider=304-1;// F#/Gb

10:clkdivider=287-1;// G

11:clkdivider=271-1;// G#/Ab

12:clkdivider=0;// should never happen

13:clkdivider=0;// should never happen

14:clkdivider=0;// should never happen

15:clkdivider=0;// should never happen

endcase

reg[8:0]counter_note;

always@(posedgeclk)if(counter_note==0)counter_note<=clkdivider;elsecounter_note<=counter_note-1;

reg[7:0]counter_octave;

always@(posedgeclk)

if(counter_note==0)

begin

if(counter_octave==0)

counter_octave<=(octave==0?255:octave==1?127:octave==2?63:octave==3?31:octave==4?15:7);

else

counter_octave<=counter_octave-1;

end

regspeaker;

always@(posedgeclk)if(counter_note==0&&counter_octave==0)speaker<=~speaker;

endmodule

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21796

    瀏覽量

    605727
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5121

    瀏覽量

    98102

原文標(biāo)題:大神教你DIY | 如何用一塊FPGA開(kāi)發(fā)板制作音樂(lè)盒?!

文章出處:【微信號(hào):EngicoolArabic,微信公眾號(hào):電子工程技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA設(shè)計(jì)實(shí)例】如何用FPGA制作音樂(lè)盒并播放音樂(lè)【原創(chuàng)

    本帖最后由 eehome 于 2013-1-5 10:01 編輯 【FPGA設(shè)計(jì)實(shí)例】如何用FPGA制作音樂(lè)盒并播放音樂(lè)HDL設(shè)計(jì)設(shè)計(jì)
    發(fā)表于 03-08 14:14

    TurnipBit - DIY音樂(lè)盒

    音樂(lè)盒!  首先材料準(zhǔn)備,我們所需材料很簡(jiǎn)單只需要:  1.TurnipBit開(kāi)發(fā)板(我這個(gè)是朋友送的,可以從某寶上購(gòu)買(mǎi)),給大家爆個(gè)照  2.隨便找個(gè)匹配大小的紙盒就行  3.需要一個(gè)外放,耳機(jī)喇叭都行
    發(fā)表于 07-18 16:24

    請(qǐng)問(wèn)wifi音樂(lè)盒的是dlna的dmp嗎,有源代碼嗎?

    通過(guò)手機(jī)推送的音樂(lè)推送到wifi音樂(lè)盒去播放,wifi音樂(lè)盒的是dlna的dmp么,求源代碼。
    發(fā)表于 10-31 07:10

    基于單片機(jī)的數(shù)字音樂(lè)盒設(shè)計(jì)

    基于單片機(jī)的數(shù)字音樂(lè)盒設(shè)計(jì),文檔包括電路圖,程序,論文基于單片機(jī)的音樂(lè)盒設(shè)計(jì)【摘要】本設(shè)計(jì)是一個(gè)基于A(yíng)T89C51系列單片機(jī)的音樂(lè)盒,依據(jù)單片機(jī)技術(shù)原理,通過(guò)硬件電路制作以及軟件編譯,
    發(fā)表于 07-19 06:31

    單片機(jī)音樂(lè)盒完整代碼 精選資料分享

    單片機(jī)音樂(lè)盒完整代碼該設(shè)計(jì)是使用C51單片機(jī)制作音樂(lè)盒制作的一個(gè)音樂(lè)盒,可以實(shí)現(xiàn)進(jìn)行歌曲的切換,暫停/播放。此外還增加了隨機(jī)點(diǎn)歌,獲取大氣
    發(fā)表于 07-22 08:17

    音樂(lè)盒電路圖

    音樂(lè)盒電路圖,此電路能發(fā)出優(yōu)美的舞曲,可作為音樂(lè)盒使用。
    發(fā)表于 01-03 19:33 ?7018次閱讀
    <b class='flag-5'>音樂(lè)盒</b>電路圖

    簡(jiǎn)單音樂(lè)盒

    簡(jiǎn)單音樂(lè)盒,是我大學(xué)的第一個(gè)作品,在大一寒假期末考試的時(shí)候的作品,希望能給大家一些幫助。
    發(fā)表于 12-15 14:19 ?8次下載

    基于單片機(jī)的音樂(lè)盒設(shè)計(jì)

    本設(shè)計(jì)是一個(gè)基于A(yíng)T89C51系列單片機(jī)的音樂(lè)盒,依據(jù)單片機(jī)技術(shù)原理,通過(guò)硬件電路制作以及軟件編譯,設(shè)計(jì)制作出一個(gè)多功能多功能音樂(lè)盒。該音樂(lè)盒
    發(fā)表于 01-13 15:38 ?45次下載

    diy音樂(lè)盒制作

    DIY一個(gè)愛(ài)的音樂(lè)盒吧!盡情的炫耀你的專(zhuān)業(yè)知識(shí)吧,這件獨(dú)一無(wú)二的音樂(lè)盒,保證能讓她在閨蜜們面前打開(kāi)禮物那一刻風(fēng)光無(wú)限!
    的頭像 發(fā)表于 08-18 10:40 ?2.1w次閱讀

    使用51單片機(jī)實(shí)現(xiàn)音樂(lè)盒的設(shè)計(jì)論文

    本設(shè)計(jì)是一個(gè)基于STC89C51RC系列單片機(jī)的音樂(lè)盒,依據(jù)單片機(jī)技術(shù)原理,通過(guò)硬件電路制作以及軟件編譯,設(shè)計(jì)制作出一個(gè)多功能多功能音樂(lè)盒。該音樂(lè)盒
    發(fā)表于 06-16 17:40 ?120次下載
    使用51單片機(jī)實(shí)現(xiàn)<b class='flag-5'>音樂(lè)盒</b>的設(shè)計(jì)論文

    Magicbit核心開(kāi)發(fā)板制作簡(jiǎn)單的雷達(dá)系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《Magicbit核心開(kāi)發(fā)板制作簡(jiǎn)單的雷達(dá)系統(tǒng).zip》資料免費(fèi)下載
    發(fā)表于 11-15 14:52 ?0次下載
    <b class='flag-5'>用</b>Magicbit核心<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>制作</b><b class='flag-5'>簡(jiǎn)單</b>的雷達(dá)系統(tǒng)

    夜光音樂(lè)盒開(kāi)源分享

    電子發(fā)燒友網(wǎng)站提供《夜光音樂(lè)盒開(kāi)源分享.zip》資料免費(fèi)下載
    發(fā)表于 11-23 09:36 ?1次下載
    夜光<b class='flag-5'>音樂(lè)盒</b>開(kāi)源分享

    可編程音樂(lè)盒的構(gòu)建

    電子發(fā)燒友網(wǎng)站提供《可編程音樂(lè)盒的構(gòu)建.zip》資料免費(fèi)下載
    發(fā)表于 06-28 09:31 ?7次下載
    可編程<b class='flag-5'>音樂(lè)盒</b>的構(gòu)建

    一種單片機(jī)控制的音樂(lè)盒制作

    電子發(fā)燒友網(wǎng)站提供《一種單片機(jī)控制的音樂(lè)盒制作.pdf》資料免費(fèi)下載
    發(fā)表于 10-10 11:05 ?0次下載
    一種單片機(jī)控制的<b class='flag-5'>音樂(lè)盒</b><b class='flag-5'>制作</b>

    單片機(jī)制作音樂(lè)盒

    電子發(fā)燒友網(wǎng)站提供《單片機(jī)制作音樂(lè)盒.pdf》資料免費(fèi)下載
    發(fā)表于 10-10 09:17 ?8次下載
    單片機(jī)<b class='flag-5'>制作</b><b class='flag-5'>音樂(lè)盒</b>
    主站蜘蛛池模板: 日韩一区二区三区视频在线观看 | 被滋润的艳妇疯狂呻吟白洁老七 | 亚洲三级精品 | 99热这里有精品 | 51vv视频社区 | 超碰caoporon最新视频 | 亚洲三区视频 | 女张腿男人桶羞羞漫画 | 亚洲综合日韩在线2019 | 起碰免费公开97在线视频 | 久久影院毛片一区二区 | 中国欧美日韩一区二区三区 | 中文日韩亚洲欧美字幕 | 人妻无码AV中文系列 | 女人 我狠狠疼你 | 成人影院久久久久久影院 | 欧美v1deossexo高清| 91av成年影院在线播放 | 日韩精品专区在线影院重磅 | 国产亚洲日韩欧美视频 | ppypp午夜限制不卡影院私人 | 日韩一卡二卡三卡四卡免费观在线 | 国产高潮久久精品AV无码 | 女人爽到高潮嗷嗷叫视频 | 成年人视频在线免费看 | 国产扒开美女双腿屁股流白浆 | 国产大片51精品免费观看 | 成人女人A级毛片免费软件 成人免费在线视频 | 国色天香社区视频免费高清3 | 青娱乐视觉盛宴国产视频 | 69夫妻交友网 | 亚洲视频黄 | 国产成人无码WWW免费视频在线 | 一色狗影院 | 99在线观看精品 | 忘忧草在线社区WWW日本-韩国 | 99久久国产露脸国语对白 | 野花日本高清在线观看免费吗 | 日本久久久 | 2022国产精品不卡a | 亚洲va精品中文字幕 |