摘 要:介紹了在MAX+plusⅡ的EDA軟件平臺(tái)上,一種基于FPGA的樂曲發(fā)生器的設(shè)計(jì)方法,并給出了設(shè)計(jì)的頂層電路圖和底層元件的VHDL源程序。該設(shè)計(jì)的正確性已通過硬件實(shí)驗(yàn)得到驗(yàn)證。<!--摘要CH(結(jié)束)←-->
<!--→關(guān)鍵CH(開始)--> 關(guān)鍵詞:樂曲發(fā)生器;電子設(shè)計(jì)自動(dòng)化;現(xiàn)場(chǎng)可編程門陣列;VHDL
<!--關(guān)鍵EN(結(jié)束)←-->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工具和硬件描述語(yǔ)言,僅憑傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡(jiǎn)單的演奏電路也難以實(shí)現(xiàn)。如何使用EDA工具設(shè)計(jì)電子系統(tǒng)是人們普遍關(guān)心的問題,本設(shè)計(jì)在美國(guó)ALTERA公司MAX+plusⅡ的EDA軟件平臺(tái)上,使用層次化設(shè)計(jì)方法,實(shí)現(xiàn)了樂曲發(fā)生器的設(shè)計(jì)。樂曲選取《梁!分谢糠郑浜(jiǎn)譜如圖1所示。

2 音符與頻率的關(guān)系
我們知道,組成樂曲的每個(gè)音符的發(fā)音頻率值及其持續(xù)的時(shí)間是樂曲能連續(xù)演奏所需的2個(gè)基本要素,首先讓我們來了解音符與頻率的關(guān)系。
樂曲的12平均率規(guī)定:每2個(gè)八度音(如簡(jiǎn)譜中的中音1與高音1)之間的頻率相差1倍。在2個(gè)八度音之間,又可分為12個(gè)半音,每2個(gè)半音的頻率比為外,音符A(簡(jiǎn)譜中的低音6)的頻率為440 Hz,音符B到C之間、E到F之間為半音,其余為全音。由此可以計(jì)算出簡(jiǎn)譜中從低音1至高音1之間每個(gè)音符的頻率,如表1所示。

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

每個(gè)音符持續(xù)的時(shí)間是樂曲能連續(xù)演奏所需的另一個(gè)基本要素。化蝶的最小的節(jié)拍為1/4拍,將1拍的時(shí)間長(zhǎng)度定為1 s,則只需要再提供一個(gè)4 Hz的時(shí)鐘頻率即可產(chǎn)生1/4拍的時(shí)長(zhǎng)。演奏的時(shí)間控制通過記錄來完成,對(duì)于占用時(shí)間較長(zhǎng)的節(jié)拍(一定是1/4拍的整數(shù)倍,如2/4拍),只需將該音符連續(xù)記錄2次即可。
3 層次化設(shè)計(jì)
我們?cè)诿绹?guó)ALTERA公司MAX+plusⅡ的EDA軟件平臺(tái)上,使用層次化設(shè)計(jì)手段,實(shí)現(xiàn)了化蝶樂曲發(fā)生器的設(shè)計(jì)。圖2為化蝶樂曲發(fā)生器的頂層電路。

音符的頻率可以由PULSE元件的輸出SPEAK獲得,這是一個(gè)數(shù)控分頻器,由其CLK6 MHz端輸入6 MHz脈沖信號(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.25 s,即四四拍的4分音符持續(xù)時(shí)間。例如,化蝶樂曲的第一個(gè)音符為“低音3”(1拍),停留的時(shí)間需用4個(gè)計(jì)數(shù)時(shí)鐘節(jié)拍,即1 s。相應(yīng)地,所對(duì)應(yīng)的“低音3”音符分頻預(yù)置值為9 100,其值在AF[13..0]輸出端停留了1 s。隨著TABLE元件中的計(jì)數(shù)器按4 Hz的時(shí)鐘速率作加法計(jì)數(shù)時(shí),化蝶樂曲就開始連續(xù)自然地演奏起來了。






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)對(duì)輸入和輸出引腳進(jìn)行鎖定。本設(shè)計(jì)采用的是杭州康芯電子有限公司生產(chǎn)的GW48-CK 實(shí)驗(yàn)系統(tǒng),F(xiàn)PGA目標(biāo)芯片的型號(hào)為EPF10K10LC84。芯片配置成功后即可進(jìn)行硬件測(cè)試:選擇實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.6,使CLK6 MHz與Clock9相接(接受6 MHz時(shí)鐘頻率),CLK4 Hz與Clock2相接(接受4 Hz時(shí)鐘頻率),發(fā)音輸出接SPEAK,當(dāng)樂曲一遍演奏完成后,樂曲發(fā)生器能自動(dòng)從頭開始循環(huán)演奏。
<!--→參考文獻(xiàn)CH(開始)-->
[2] 徐志軍,徐光輝.CPLD/FPGA的開發(fā)與應(yīng)用[M].北京:電子工業(yè)出版社,2002.
[3] ALTERA DigitalLibrary 2002.





