【文章內(nèi)容簡(jiǎn)介】
(2) 地址發(fā)生器模塊 地址發(fā)生器模塊設(shè)置了一個(gè) 8 位二進(jìn)制計(jì)數(shù)器 (計(jì)數(shù)最大值為 256),作為音符數(shù)據(jù) ROM 的地址發(fā)生器。每來(lái)一個(gè)時(shí)鐘脈沖信號(hào) (Clk), 8位二進(jìn)制計(jì)數(shù)器就計(jì)數(shù)一次, ROM 文件中的地址也就隨著遞增,音符數(shù)據(jù) ROM 中的音符也就一個(gè)接一個(gè)連續(xù)的取出來(lái)了。 在 地址發(fā)生器的 VHDL 設(shè)計(jì) 中, 這個(gè) 計(jì)數(shù)器的計(jì)數(shù)頻率選為 4Hz,即每一計(jì)數(shù)值的停留時(shí)間為 秒,恰為當(dāng)全音符設(shè)為 1秒,四四拍的 4分音符持續(xù)時(shí)間。例如,地址發(fā)生器在以下的 VHDL 邏輯描述中,“梁祝”樂(lè)曲的第一個(gè)音符為“ 3”,此音在邏輯中停留了 4個(gè)時(shí)鐘節(jié)拍,即 1秒時(shí)間。那么相應(yīng)隨著程序 [4]中的計(jì)數(shù)器按 4Hz的時(shí)鐘頻率作加法計(jì)數(shù)時(shí),即隨地址遞增時(shí),將從音符數(shù)據(jù) ROM 中將連續(xù)取出 4 個(gè)音符“ 3”通過(guò) toneindex[3..0]端口輸向分頻預(yù)置數(shù)模塊。這樣梁祝樂(lè)曲中的音符就一個(gè)接一個(gè)的通過(guò) toneindex[3..0]端口輸向分頻預(yù)置數(shù)模塊。 音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路模塊 (1) 音樂(lè)譜分頻預(yù)置數(shù)模塊 (2) 音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路 VHDL 程序 設(shè)計(jì) 音樂(lè)譜分頻預(yù)置數(shù)模塊是樂(lè)曲簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù)置數(shù)查表電路。它提供了每個(gè)音符所對(duì)應(yīng)的分頻預(yù)置數(shù),即給數(shù)控分頻模塊提供計(jì)數(shù)初值,這里以“梁?!睒?lè)曲為例,列出了在這個(gè)樂(lè)曲中所用到的 13 個(gè)音符的分頻預(yù)置數(shù)。 河南機(jī)電高等??茖W(xué)校課程設(shè)計(jì)論文 《 VHDL 硬件語(yǔ)言》課程設(shè)計(jì)論文 在這個(gè)模塊的 VHDL 邏輯描述中設(shè)置了 四四拍 樂(lè)曲中全部音符所對(duì)應(yīng)的分頻預(yù)置數(shù),共 13個(gè),每一音符的停留時(shí)間由音樂(lè)節(jié)拍和地址發(fā)生器模塊的時(shí)鐘( Clk)的輸入頻率 決定,在此為 4Hz。這 13個(gè)值的輸出由程序 [3]的 4位輸入值 index[3..0]確定。輸向程序 [4]中 index[3..0]的值又由地址發(fā)生器模塊的輸出 toneindex[3..0]的輸出值和持續(xù)時(shí)間決定。 模塊的功能是輸出各個(gè)音符所對(duì)應(yīng)的分頻預(yù)置數(shù), 即 當(dāng) index 是“ 0000”, tone輸出為 2047,即休止符的分頻預(yù)置數(shù);當(dāng) index 是“ 0101”時(shí), tone 輸出為 1197即低音 5 的分頻預(yù)置數(shù);當(dāng) index 是“ 1111”時(shí), tone 輸出為 1728 即高音 1的分頻預(yù)置數(shù)等等其它狀態(tài)時(shí), tone 分別輸出 相應(yīng)音符的分頻預(yù)置數(shù)。 分頻預(yù)置數(shù)模塊的 VHDL 設(shè)計(jì)程序如下: LIBRARY IEEE。音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路模塊 USE 。 ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) 。4 位 預(yù)制數(shù)查表 CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) 。 HIGH : OUT STD_LOGIC。音樂(lè)高 8 度 指示 Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) )。音樂(lè)符對(duì)應(yīng)分頻 11位 END。 ARCHITECTURE one OF ToneTaba IS BEGIN Search : PROCESS(Index) BEGIN CASE Index IS 譯碼電路,查表方式,控制音調(diào)的預(yù)置數(shù) 13組頻率 WHEN 0000 = Tone=11111111111 。 CODE=0000。 HIGH =39。039。 2047 WHEN 0001 = Tone=01100000101 。 CODE=0001。 HIGH =39。039。 773。 WHEN 0010 = Tone=01110010000 。 CODE=0010。 HIGH =39。039。 912。 WHEN 0011 = Tone=10000001100 。 CODE=0011。 HIGH =39。039。1036。 WHEN 0101 = Tone=10010101101 。 CODE=0101。 HIGH =39。039。1197。 WHEN 0110 = Tone=10100001010 。 CODE=0110。 HIGH =39。039。1290。 WHEN 0111 = Tone=10101011100 。 CODE=0111。 HIGH =39。039。1372。 WHEN 1000 = Tone=10110000010 。 CODE=0001。 HIGH =39。139。1410。 WHEN 1001 = Tone=10111001000 。 CODE=0010。 HIGH =39。139。1480。 河南機(jī)電高等專科學(xué)校課程設(shè)計(jì)論文 《 VHDL 硬件語(yǔ)言》課程設(shè)計(jì)論文 S pe ak erain s tc lkT on e[ 10 . . 0]S pk SDE N AQP R EC L RA [ 3 . . 0 ]B [ 3 . . 0 ]O U T [ 3 . . 0 ]A D D E RA [ 1 0 . . 0 ]B [ 1 0 . . 0 ]O U T [ 1 0 . . 0 ]A D D E RA [ 1 1 . . 0 ]B [ 1 1 . . 0 ]O U TE Q U A LDE N AQP R EC L RA [ 3 . . 0 ]B [ 3 . . 0 ]O U TL E S S _ T H A NDE N AQP R EC L RD QP R EE N AC L RD QP R EE N AC L RSELD A T A AD A T A BO U T 0M U X 2 1\ D e l a y Sp kS : C o u n t 2 Sp kS ~re g 0cl kSp kST o n e [ 1 0 . . 0 ]F u l l Sp kS\ G e n Sp kS : C o u n t 1 1 [ 1 0 . . 0 ]Eq u a l 01 39。 h 0 1 2 39。 h 7 F F \ D i v i d e C L K: C o u n t 4 [ 3 . . 0 ]A d d 04 39。 h 1 A d d 11 1 39。 h 0 0 1 C o u n t 1 1 ~[ 1 0 . . 0 ]L e s s T h a n 04 39。 h B WHEN 1010 = Tone=11000000110 。 CODE=0011。 HIGH =39。139。1542。 WHEN 1100 = Tone=11001010110 。 CODE=0101。 HIGH =39。139。1622。 WHEN 1101 = Tone=11010000100 。 CODE=0110。 HIGH =39。139。1668。 WHEN 1111 = Tone=11011000000 。 CODE=0001。 HIGH =39。139。1728。 WHEN OTHERS = NULL。 END CASE。 END PROCESS。 END。 音樂(lè)符數(shù)控 11 分頻電路模塊 (1) 音樂(lè)符數(shù)控 11 分頻電路模塊 (2) 音樂(lè)符數(shù)控 11 分頻電路模塊 RTL 電路圖 河南機(jī)電高等專科學(xué)校課程設(shè)計(jì)論文 《 VHDL 硬件語(yǔ)言》課程設(shè)計(jì)論文 (3) 音樂(lè)符數(shù)控 11 分頻 模塊 電路 VHDL 程序 設(shè)計(jì) 音符的頻率由數(shù)控分頻模塊獲得,這是一個(gè)數(shù)控分頻電路。它是由一個(gè)初值可變的加法計(jì)數(shù)器構(gòu)成。該計(jì)數(shù)器的模為 2047,當(dāng)計(jì)數(shù)器記滿時(shí),計(jì)數(shù)器產(chǎn)生一個(gè)溢出信號(hào) FULL,此溢出信號(hào)就是用作發(fā)音的頻率信號(hào)。在計(jì)數(shù)器的輸入端給定不同的初值,而此預(yù)置數(shù)就是表 1 中的計(jì)數(shù)初值,就可得到不同音符的發(fā)音頻率信號(hào) 。它計(jì)滿時(shí)所需要的計(jì)數(shù)初值可由下式來(lái)表示。 計(jì)數(shù)初值( Tone) =2047分頻系數(shù) 而分頻系數(shù)又可有下式來(lái)求: 分頻系數(shù) =基準(zhǔn)頻率 /音符的發(fā)生頻率 低音時(shí) Tone 值小,分頻系數(shù)大,溢出信號(hào)周期長(zhǎng),揚(yáng)聲器發(fā)出的聲音低, Tone隨音樂(lè)的樂(lè)譜變化大,自動(dòng)控制分頻比,實(shí)現(xiàn)了數(shù)控分頻,發(fā)生信號(hào)的頻率與音調(diào)Tone 成正比。這就是利用數(shù)控分頻器自動(dòng)演奏音樂(lè)的原理。 時(shí)鐘( Clk)端輸入的是在十六進(jìn)制模塊里對(duì) 12MHz 的信號(hào)進(jìn)行 16 分頻得到的750KHz, 750KHz 的信號(hào)根據(jù)分頻預(yù)置數(shù)模塊中所提供的計(jì)數(shù)初值,分別得出相 應(yīng)音符頻率的兩倍值。此時(shí)從數(shù)控分頻器中出來(lái)的輸出信號(hào)是脈寬極窄的脈沖式信號(hào),為了有利于驅(qū)動(dòng)揚(yáng)聲器,需另加一個(gè) D 觸發(fā)器以均衡其占空比,這時(shí)的頻率就變?yōu)樵瓉?lái)的 1/2,剛好就是相應(yīng)音符的頻率。數(shù)控分頻模塊中對(duì) Clk 輸入信號(hào)的分頻比由 11 位預(yù)置數(shù) tone[10..0]決定。 Fout 的輸出頻率將決定每一個(gè)音符的音調(diào),這樣,分頻計(jì)數(shù)器的預(yù)置值 tone[10..0]與 Fout 的輸出頻率就有了對(duì)應(yīng)關(guān)系。例如在分頻預(yù)置數(shù)模塊中若取 tone[10..0]=1036,將發(fā)出音符為“ 3”音的信號(hào)頻率。 音符的頻率由數(shù)控分頻模塊 VHDL 程序如下: LIBRARY IEEE。音樂(lè)符數(shù)控分頻電路模塊 USE 。 USE 。 ENTITY Speakera IS PORT ( clk : IN STD_LOGIC。音調(diào)頻率信號(hào) 12MHZ Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0)。音樂(lè)符對(duì)應(yīng)分頻 11 位