<ruby id="lawmc"></ruby>
  1. <track id="lawmc"></track>

      <ruby id="lawmc"></ruby>

    <pre id="lawmc"></pre>
      <li id="lawmc"></li>
    機(jī)電之家資源網(wǎng)
    單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
    培訓(xùn)信息
    贊助商
    基于FPGA的樂曲發(fā)生器設(shè)計(jì)
    基于FPGA的樂曲發(fā)生器設(shè)計(jì)
     更新時(shí)間:2009-6-5 9:09:33  點(diǎn)擊數(shù):2
    【字體: 字體顏色
    1 概 述

      隨著EDA技術(shù)的進(jìn)展,基于可編程ASIC的數(shù)字電子系統(tǒng)設(shè)計(jì)的完整方案越來越受到人們的重視,并且以EDA技術(shù)為核心的能在可編程ASIC上進(jìn)行系統(tǒng)芯片集成的新設(shè)計(jì)方法,也正在快速地取代基于PCB板的傳統(tǒng)設(shè)計(jì)方式。

      與利用微處理器(CPU或MCU)來實(shí)現(xiàn)樂曲演奏相比,以純硬件完成樂曲演奏電路的邏輯要復(fù)雜得多,如果不借助于功能強(qiáng)大的EDA工具和硬件描述語言,僅憑傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡單的演奏電路也難以實(shí)現(xiàn)。如何使用EDA工具設(shè)計(jì)電子系統(tǒng)是人們普遍關(guān)心的問題,本設(shè)計(jì)在美國ALTERA公司MAX + plusⅡ的EDA軟件平臺(tái)上,使用層次化設(shè)計(jì)方法,實(shí)現(xiàn)了樂曲發(fā)生器的設(shè)計(jì)。樂曲選取《梁!分谢糠,其簡譜如圖1所示。

          

       2 音符與頻率的關(guān)系

      我們知道,組成樂曲的每個(gè)音符的發(fā)音頻率值及其持續(xù)的時(shí)間是樂曲能連續(xù)演奏所需的2個(gè)基本要素,首先讓我們來了解音符與頻率的關(guān)系。

      樂曲的12平均率規(guī)定:每2個(gè)八度音(如簡譜中的中音1與高音1)之間的頻率相差1倍。在2個(gè)八度音之間,又可分為12個(gè)半音,每2個(gè)半音的頻率比為12√2。另外,音符A(簡譜中的低音6)的頻率為440Hz,音符B到C之間、E到F之間為半音,其余為全音。由此可以計(jì)算出簡譜中從低音l至高音1之間每個(gè)音符的頻率,如表1所示。

          

        產(chǎn)生各音符所需的頻率可用一分頻器實(shí)現(xiàn),由于各音符對應(yīng)的頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將計(jì)算得到的分頻數(shù)四舍五入取整。若分頻器時(shí)鐘頻率過低,則由于分頻系數(shù)過小,四舍五入取整后的誤差較大;若時(shí)鐘頻率過高,雖然誤差變小,但會(huì)增加分頻器的分頻級(jí)數(shù)。實(shí)際的設(shè)計(jì)應(yīng)綜合考慮兩方面的因素,在盡量減小頻率誤差的前提下取合適的時(shí)鐘頻率。本文設(shè)計(jì)的樂曲發(fā)生器選取6MHz的基準(zhǔn)頻率。若無6MHz的時(shí)鐘頻率,則可以先分頻得到6MHz或換一個(gè)新的基準(zhǔn)頻率。實(shí)際上,只要各個(gè)音符間的相對頻率關(guān)系不變,演奏出的樂曲聽起來都不會(huì)"走調(diào)"。

      化蝶簡譜中各音符對應(yīng)的分頻系數(shù)如表2所示。為了減小輸出的偶次諧波分量,最后輸出到揚(yáng)聲器的波形應(yīng)為對稱方波,因此在到達(dá)揚(yáng)聲器之前,有一個(gè)二分頻的分頻器。表2中的分頻系數(shù)是從6MHz頻率二分頻得到的3MHz頻率基礎(chǔ)上計(jì)算得出的。由于最大的分頻系數(shù)為9101,故采用14位二進(jìn)制計(jì)數(shù)器已能滿足分頻要求。

        

        每個(gè)音符持續(xù)的時(shí)間是樂曲能連續(xù)演奏所需的另一個(gè)基本要素;淖钚〉墓(jié)拍為1/4拍,將1拍的時(shí)間長度定為1s,則只需要再提供一個(gè)4Hz的時(shí)鐘頻率即可產(chǎn)生1/4拍的時(shí)長。演奏的時(shí)間控制通過記錄來完成,對于占用時(shí)間較長的節(jié)拍(一定是1/4拍的整數(shù)倍,如2/4拍),只需將該音符連續(xù)記錄2次即可。

      3 層次化設(shè)計(jì)

      我們在美國AI。TERA公司MAX + plusⅡ的EDA軟件平臺(tái)上,使用層次化設(shè)計(jì)手段,實(shí)現(xiàn)了化蝶樂曲發(fā)生器的設(shè)計(jì)。圖2為化蝶樂曲發(fā)生器的頂層電路。

        

        音符的頻率可以由PUI。SE元件的輸出SPEAK獲得,這是一個(gè)數(shù)控分頻器,由其CLK 6MHz端輸入6MHz脈沖信號(hào),分頻比由預(yù)置輸入端D[13..0]決定。輸出為方波信號(hào),其頻率為3 000 000/(1+D[13..0]),單位為Hz。

      音符的持續(xù)時(shí)間需根據(jù)樂曲的速度及每個(gè)音符的節(jié)拍數(shù)來確定,TABLE元件首先是為PULSE元件提供決定所發(fā)音符的分頻預(yù)置數(shù),而此數(shù)停留的時(shí)間即為此音符的節(jié)拍值。在TABLE元件中設(shè)置了一個(gè)8位二進(jìn)制計(jì)數(shù)器(計(jì)數(shù)最大值為138),這個(gè)計(jì)數(shù)器的計(jì)數(shù)頻率選為4 Hz,所以每一計(jì)數(shù)值的停留時(shí)間為0.25s,即四四拍的4分音符持續(xù)時(shí)間。例如,化蝶樂曲的第一個(gè)音符?quot;低音3"(1拍),停留的時(shí)間需用4個(gè)計(jì)數(shù)時(shí)鐘節(jié)拍,即1s。相應(yīng)地,所對應(yīng)的"低音3"音符分頻預(yù)置值為9 100,其值在AF[13..0]輸出端停留了1s。隨著TABLE元件中的計(jì)數(shù)器按4Hz的時(shí)鐘速率作加法計(jì)數(shù)時(shí),化蝶樂曲就開始連續(xù)自然地演奏起來了。

      底層元件的VHDL邏輯描述如下:

    --PULSE元件
    LIBRARY IEEE;
    USE IEEE.STD_LOGIC_1164.ALL;
    USE IEEE.STD_LOGIC_UNSIGNED.ALL;
    ENTITY pulse IS
    PORT(clk:INSTD_LOGIC; 一一待分頻時(shí)鐘
    d:IN STD_LOGIC_VECTOR(13 DOWNTO 0);
    --分頻預(yù)置數(shù)輸入
    fout:OUTSTD_LOGIC); 一一發(fā)音輸出
    END pulses
    ARCHITECTURE behav OF pulse IS
    SIGNAL count : STD_LOGIC-VECTOR(13DOWNTO 0);
    SIGNAL cao,caoo1,cao2,load:STD_LOGIC'
    BEGIN
    PROCESS(clk,load,d)
    BEGIN
    IF clk'EVENT AND clk='l'THEN
    IF load='1'THEN count<=d;
    ELSE count<=count一1;
    END IF;
    END IF;
    END PROCESS;
    PROCESS(count)
    BEGIN
    IF count=0 THEN cao<='l';
    ELSE cao<='0'; END IF;
    load<=cao;
    END PROCESS;
    PROCESS(clk) --去毛刺
    BEGIN
    IF clk'EVENT ANDclk='1'THEN
    caol<=cao;
    END IF;
    END PROCESS;
    PROCESS(cao1)
    BEGIN
    IF cao1'EVENT AND cao1='1'THEN
    ca02<=NOT cao2;
    END IF
    fout<=cao2;
    END PROCESS;
    END behav;
    一一TABLE元件
    IBRARY IEEE;
    USE IEEE.STD_LOGIC_1164.ALL;
    ENTITY table IS
    PORT(clk:IN STD_LOGIC;
    af:OUT INTEGER RANGE 0 TO 16#3FFF#)
    一一14位二進(jìn)制數(shù)
    END;
    ARCHITECTURE one OF table IS
    CONSTANT 1ow_3:INTEGER:=9100;
    CONSTANT 1ow_5;INTEGER:=7652;
    CONSTANT 1ow_6:INTEGER:=6817;
    CONSTANT 1ow_7:INTEGER:=6073;
    CONSTANT mid_1:INTEGER;=5732;
    CONSTANT mid_2:INTEGER:=5107;
    CONSTANT mid_3:INTEGER:=4550;
    CONSTANT mid_5:INTEGER:=3826;
    CONSTANT mid_6:INTEGER:=3408;
    CONSTANT highl:INTEGER: =2866
    CONSTANT stop:INTEGER:=0;
    --休止符分頻系數(shù)
    SIGNAL counter:INTEGER RANGE 0 TO 138;
    BEGIN
    PROCESS(clk)
    BEGIN
    IF counter=138 THEN counter<=0;
    ELSIF(clk'EVENT AND clk='l')THEN
    counter<=counter+1;
    END IF;
    END PROCESS;
    PROCESS(counter)
    BEGIN
    CASE counter IS
    WHEN 00=>af<=low_3; --低音3
    WHEN 01=>af<=low_3;
    WHEN 02=>af<=low_3;
    WHEN 03=>af<=low_3;
    WHEN 04?gt;af<=low_5;
    WHEN 05=>af<=low_5;
    WHEN 06=>af<=low_5;
    WHEN 07=>af<=low_6;
    WHEN 08=>af<=low_1;
    WHEN 09=>af<=low_1;
    WHEN 10=>af<=low_1;
    WHEN 11=>af<=low_2;
    ……
    WHEN 134=>af<=low_5;
    WHEN 135=>>af<=low_5;
    WHEN 136=>>af<=stop;
    WHEN 137=>af<=stop;
    WHEN 138=>>af<=stop;
    WHEN OTHERS=>NULL;
    END CASE;
    END PROCESS;
    END;

      4 實(shí)驗(yàn)驗(yàn)證

      需要說明的是不同的數(shù)字系統(tǒng)其引腳鎖定是不一樣的,為了便于在實(shí)驗(yàn)系統(tǒng)上驗(yàn)證設(shè)計(jì)結(jié)果,必須按照實(shí)驗(yàn)系統(tǒng)的結(jié)構(gòu)對輸入和輸出引腳進(jìn)行鎖定。本設(shè)計(jì)采用的是杭州康芯電子有限公司生產(chǎn)的GW48-CK實(shí)驗(yàn)系統(tǒng),F(xiàn)PGA目標(biāo)芯片的型號(hào)為EPFl0K10LC84。芯片配置成功后即可進(jìn)行硬件測試:選擇實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.6,使CLK 6MH2與C10ck9相接(接受6MHz時(shí)鐘頻率),CLK 4Hz與Clock2相接(接受4Hz時(shí)鐘頻率),發(fā)音輸出接SPEAK,當(dāng)樂曲一遍演奏完成后,樂曲發(fā)生器能自動(dòng)從頭開始循環(huán)演奏。

    <!--插入廣告JS代碼-->
  2. 上一篇: 基于FPGA的四階IIR數(shù)字濾波器
  3. 下一篇: 基于TMS320C64xDSPs的MPEG-4實(shí)時(shí)編碼器設(shè)計(jì)與實(shí)現(xiàn)
  4. 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1