摘 要:大多數(shù)的電子琴設(shè)計(jì)都有彈奏和播放功能,但能自動(dòng)對(duì)彈奏的樂(lè)曲進(jìn)行動(dòng)態(tài)錄音并可改變回放快慢的設(shè)計(jì)卻很少,而該設(shè)計(jì)采用VHDL語(yǔ)言有限狀態(tài)機(jī)的設(shè)計(jì)方法對(duì)ROM/RAM控制電路進(jìn)行編程,基于QuartusⅡ6.0開(kāi)發(fā)平臺(tái)仿真編譯,下載到FPGA芯片(CycloneII EP2C8Q208)中測(cè)試,準(zhǔn)確地實(shí)現(xiàn)了電子琴動(dòng)態(tài)錄音與回放并快慢可調(diào)功能。實(shí)驗(yàn)表明采用FPGA實(shí)現(xiàn)音樂(lè)存儲(chǔ)、動(dòng)態(tài)錄音與回放演奏系統(tǒng)是可行的,為實(shí)現(xiàn)音樂(lè)存儲(chǔ)與播放展示了良好的應(yīng)用前景,也為各類(lèi)多媒體大容量語(yǔ)音芯片系統(tǒng)設(shè)計(jì)提供了一種新的技術(shù)方法。
關(guān)鍵詞:FPGA;VHDL;狀態(tài)機(jī);錄音與回放
中圖分類(lèi)號(hào):TN40文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1004-373X(2009)03-130-03
Design of Electronic Organ System Recording and Replaying Based on FPGA
LI Xuemei
(Leshan Teachers College,Leshan,614000,China)
Abstract:Most designs of electronic organs have the essential functions of playing and replaying,but few are equipped with the device of dynamic recorging of the music being played and the device of speed adjustment.This design is based upon QuartusⅡ6.0,adopting the design of VHDL state machine,thus making the recording and replaying speed of the electronic organ adjustable,which indicates that it is feasible to adopt FPGA to record and replay music.This design brings forth a favorable prospect for music recording and replaying and provids a new technic for the design of bulky sound chips of diversified multimedia.
Keywords:FPGA;VHDL;state machine;recording and repalying
0 引 言
樂(lè)曲都是由一連串的音符組成,因此按照樂(lè)曲的樂(lè)譜依次輸出這些音符所對(duì)應(yīng)的頻率,就可以在揚(yáng)聲器上連續(xù)地發(fā)出各個(gè)音符的音調(diào)。大多數(shù)的電子琴設(shè)計(jì)都有彈奏和播放功能,但能自動(dòng)對(duì)彈奏的樂(lè)曲進(jìn)行錄音并可改變回放快慢可調(diào)的設(shè)計(jì)卻很少[1-3]。要實(shí)現(xiàn)錄音和回放功能,就必須將彈奏的音符值在相應(yīng)的寫(xiě)控制信號(hào)控制下存儲(chǔ)到FPGA芯片內(nèi)部的隨機(jī)存儲(chǔ)器(RAM)中,而在相應(yīng)的讀控制信號(hào)控制下,將RAM中存儲(chǔ)的音符值讀出來(lái),送給相應(yīng)的發(fā)聲控制等模塊。進(jìn)入20 世紀(jì)90 年代以后,EDA 技術(shù)得到了飛速的發(fā)展,電子系統(tǒng)的設(shè)計(jì)方法發(fā)生了很大的變化,傳統(tǒng)的設(shè)計(jì)方法正逐步退出歷史舞臺(tái),而基于EDA 技術(shù)的可編程邏輯芯片設(shè)計(jì)成為電子系統(tǒng)設(shè)計(jì)的主流。本設(shè)計(jì)基于QuartusⅡ6.0開(kāi)發(fā)平臺(tái),采用VHDL語(yǔ)言在FPGA芯片上成功地實(shí)現(xiàn)了電子琴動(dòng)態(tài)錄音與回放功能[4-6]。
1 電子琴動(dòng)態(tài)錄音與回放系統(tǒng)設(shè)計(jì)
已經(jīng)設(shè)計(jì)成功的多功能電子琴樂(lè)曲硬件演奏設(shè)計(jì)電路主要包括:鍵盤(pán)演奏、人工選曲并播放樂(lè)曲、錄音/回放、可控制播放歌曲的節(jié)奏快慢、液晶顯示當(dāng)前系統(tǒng)狀態(tài)等功能。其中在FPGA芯片中實(shí)現(xiàn)的電路設(shè)計(jì)有4個(gè)模塊,分別為鍵盤(pán)掃描和按鍵功能設(shè)置模塊、ROM/RAM控制器模塊、發(fā)聲控制模塊、LCD驅(qū)動(dòng)控制模塊。系統(tǒng)設(shè)計(jì)框圖如圖1所示。
工作原理如下:首先通過(guò)鍵盤(pán)掃描和按鍵功能設(shè)置模塊將一個(gè)4*4的鍵盤(pán)上各按鍵進(jìn)行功能設(shè)置,然后根據(jù)相應(yīng)的操作要求進(jìn)行發(fā)聲和液晶顯示。如果選中當(dāng)前狀態(tài)是彈奏模式,則發(fā)聲控制模塊直接把琴鍵送來(lái)的音符對(duì)應(yīng)的分頻系數(shù)轉(zhuǎn)換成相應(yīng)頻率送到揚(yáng)聲器發(fā)聲,字幕信息通過(guò)液晶顯示驅(qū)動(dòng)模塊驅(qū)動(dòng)液晶顯示;如果選中當(dāng)前工作模式為播放模式,則ROM/RAM控制器模塊把事先存儲(chǔ)在ROM中的音樂(lè)數(shù)據(jù)提出來(lái)送至發(fā)聲模塊,完成自動(dòng)播放功能;如果選中當(dāng)前工作狀態(tài)是錄音回放模式,則啟動(dòng)ROM/RAM控制器模塊中RAM狀態(tài)機(jī)控制器進(jìn)行讀寫(xiě)操作。
這里重點(diǎn)介紹由ROM/RAM控制模塊通過(guò)狀態(tài)機(jī)設(shè)計(jì)產(chǎn)生錄音/回放功能的實(shí)現(xiàn)。
2 ROM/RAM控制模塊的設(shè)計(jì)
ROM/RAM控制模塊的作用是通過(guò)對(duì)系統(tǒng)當(dāng)前所處的模式進(jìn)行判斷,并根據(jù)輸入的控制信號(hào),對(duì)CycloneⅡ FPGA內(nèi)嵌的RAM的讀寫(xiě)信號(hào)、讀寫(xiě)時(shí)鐘及讀寫(xiě)地址進(jìn)行控制。其中ROM/RAM控制模塊的外部接口符號(hào)圖如圖2所示。
此模塊定義了10個(gè)輸入端口,分別為:mode_key(鍵盤(pán)演奏模式)、mode_auto(播放歌曲模式)、mode_tape(錄音回放模式)、time_up(節(jié)奏上升)、time_down(節(jié)奏下降)、song_select(曲目選擇)、tape(錄音)、playback(放音)、reset(系統(tǒng)復(fù)位)、clk(時(shí)鐘)。定義了15個(gè)輸出端口:rom_add(ROM地址)、rom_clk(ROM時(shí)鐘)、rom_en(ROM時(shí)鐘使能)、ram_wradd(RAM寫(xiě)地址)、ram_wren(RAM寫(xiě)使能)、ram_wrclk(RAM寫(xiě)時(shí)鐘)、ram_rdadd(RAM讀地址)、ram_rden(RAM讀地址)、ram_rdclk(RAM讀地址)、full(錄音滿(mǎn)信號(hào))、over(回放完畢信號(hào))以及5個(gè)提供LCD驅(qū)動(dòng)顯示用的信號(hào)。
RAM/ROM控制模塊中的RAM控制部分分成兩個(gè)小部分,采用有限狀態(tài)機(jī)(FSM)分別對(duì)RAM讀狀態(tài)和RAM寫(xiě)狀態(tài)進(jìn)行操作控制。當(dāng)系統(tǒng)當(dāng)前模式為“錄音/回放模式”時(shí),如果“錄音”按鍵按下,則RAM進(jìn)行寫(xiě)操作,從首地址開(kāi)始進(jìn)行存儲(chǔ)。如果存儲(chǔ)滿(mǎn)1 024個(gè)地址空間,則提示“錄音滿(mǎn)”,寫(xiě)操作終止,等待用戶(hù)命令,以進(jìn)行下一步操作。當(dāng)系統(tǒng)當(dāng)前模式為“錄音/回放模式”時(shí),如果“回放”按鍵按下,則RAM進(jìn)行讀操作,從首地址開(kāi)始將RAM單元中的數(shù)據(jù)送給發(fā)聲控制模塊進(jìn)行播放。如果讀完1 024個(gè)地址空間,則提示“回放完畢”,讀操作終止,等待用戶(hù)命令,以進(jìn)行下一步操作。
寫(xiě)操作的FSM狀態(tài)轉(zhuǎn)移流程以及轉(zhuǎn)移條件如圖3所示;讀操作的FSM狀態(tài)轉(zhuǎn)移流程以及轉(zhuǎn)移條件如圖4所示。
用狀態(tài)機(jī)對(duì)RAM進(jìn)行讀寫(xiě)控制的部分源程序如下:
--------------------------
process( ram_wrclk000,reset,mode_tape,tape,playback)
begin
if reset=′0′then tape_state<=tape_state0;
elsif ram_wrclk000′event and ram_wrclk000=′1′ then
tape_state<=tape_state;
case tape_state is
when tape_state0 => if mode_tape=′0′ then tape_state<=tape_state0;
ram_wren<=′0′;
ram_wradd000<=″0000000000″;
else tape_state<=tape_state1;
--如果電子琴使能端reset為0或者錄音模式mode_tape為0,則狀態(tài)機(jī)處于等待狀態(tài)tape_state0,否則進(jìn)入下一狀態(tài)tape_state1。
end if;
when tape_state1 => if tape=′0′ then tape_state<=tape_state0;
ram_wren<=′0′;
ram_wradd000<=″0000000000″;
else tape_state<=tape_state2;
end if;
--如果錄音控制鍵tape為0,則回到初始狀態(tài)。否則進(jìn)入下一狀態(tài)tape_state2。
when tape_state2 => if (playback=′1′ or mode_tape=′0′) then full<=′0′;
ram_wren<=′0′;
ram_wradd000<=″0000000000″;
tape_state<=tape_state0;
elsif tape=′1′ thenfull<=′0′;
ram_wren<=′1′;ram_wradd000<=ram_wradd000+1;
tape_state<=tape_state2;
--如果回放控制鍵playback為1,或錄音模式mode_tape為0則回到初始狀態(tài),且對(duì)RAM寫(xiě)控制端ram_wren為0。否則進(jìn)入下一狀態(tài)tape_state2。
elsif ram_wradd000=″1111111111″ then full<=′1′;
--錄滿(mǎn)音提示
ram_wren<=′0′;tape_state<=tape_state0;
--如果錄音地址飽和,則回到為tape_state0初始狀態(tài),且對(duì)RAM寫(xiě)控制端ram_wren為0。
else full<=′0′;
ram_wren<=′1′;
tape_over_add<=ram_wradd000;--錄音截止地址,作為RAM讀地址的末地址
tape_state<=tape_state2;
end if;
when others => tape_state<=tape_state0;
end case;
end if;
ram_wradd<=ram_wradd000;
end process;
---------------------------
其仿真波形圖如圖5所示。從仿真圖上可以看出,RAM/ROM控制模塊電路既產(chǎn)生了控制RAM存儲(chǔ)器的時(shí)鐘ram_wrclk信號(hào),也產(chǎn)生了相應(yīng)的控制RAM的使用使能信號(hào)ram_wren和寫(xiě)入地址ram_wradd。
3 RAM隨機(jī)存儲(chǔ)器的設(shè)計(jì)
設(shè)計(jì)一個(gè)雙端口的存儲(chǔ)深度為1 024、存儲(chǔ)寬度為6位的隨機(jī)存儲(chǔ)器RAM,用來(lái)存儲(chǔ)彈奏的樂(lè)曲,并可播放出來(lái)。生成的RAM單元如圖6所示。data[5..0]端口為彈奏電子琴時(shí)由發(fā)聲控制模塊產(chǎn)生的音符數(shù)據(jù)。當(dāng)系統(tǒng)處于“錄音/回放模式”的“錄音”狀態(tài)時(shí),將當(dāng)前所彈奏的音符進(jìn)行轉(zhuǎn)換,輸出作為RAM的存儲(chǔ)數(shù)據(jù)“DATA”。wraddress[9..0]代表十位寬度的寫(xiě)地址端口,rdaddress[9..0]代表十位寬度的讀地址端口。wrclock為RAM寫(xiě)入時(shí)鐘,rdclock為RAM讀出時(shí)鐘。Q[5..0]為從RAM中讀出所存放數(shù)據(jù),即data。
從圖6可以看出,此雙口RAM具有獨(dú)立的讀寫(xiě)時(shí)鐘和讀寫(xiě)使能。選擇這樣的RAM的目的是為了以一個(gè)固定頻率wrclock(本設(shè)計(jì)取4 Hz)的時(shí)鐘對(duì)RAM進(jìn)行寫(xiě)操作,即以一個(gè)固定的采樣頻率對(duì)所彈奏的樂(lè)曲進(jìn)行采樣存儲(chǔ);另一方面以節(jié)奏控制部分輸出的時(shí)鐘rdclock作為RAM的讀時(shí)鐘信號(hào),使得回放過(guò)程可以以不同的節(jié)奏將儲(chǔ)存的樂(lè)曲播放出來(lái)。這是其新穎之處,使電子琴在回放過(guò)程中更加靈活多變,功能更多。
其仿真波形圖如圖7所示。從仿真圖上可以看出,RAM存儲(chǔ)器在寫(xiě)使能信號(hào)和讀使能信號(hào)控制作用下依次寫(xiě)入數(shù)據(jù)信號(hào),并按寫(xiě)入地址先后次序再準(zhǔn)確地讀出來(lái),實(shí)現(xiàn)了錄音和回放的功能要求。
本設(shè)計(jì)采用杭州康芯電子有限公司開(kāi)發(fā)的電子設(shè)計(jì)應(yīng)用板(型號(hào): KX-DVP3F)進(jìn)行對(duì)系統(tǒng)的調(diào)試與功能驗(yàn)證。利用QuartusⅡ6.0軟件生成.sof或者.pof編程文件,通過(guò)USB下載器將編程文件配置到CycloneⅡ EP2C8Q208芯片中,經(jīng)過(guò)數(shù)次的調(diào)試,多功能電子琴的全部技術(shù)指標(biāo)和功能很好地符合設(shè)計(jì)要求,發(fā)聲準(zhǔn)確,易操作,可視性強(qiáng)。
有限狀態(tài)機(jī)設(shè)計(jì)技術(shù)是實(shí)用數(shù)字系統(tǒng)中的重要組成部分,也是實(shí)現(xiàn)高效率高可靠邏輯控制的重要途徑。它具有類(lèi)似CPU的高速運(yùn)算和控制能力,程序?qū)哟畏置?結(jié)構(gòu)清晰,易讀易懂;在排錯(cuò)、修改和模塊移植方面也有獨(dú)到之處。
參考文獻(xiàn)
[1]王思聰,康潤(rùn)生.用CPLD實(shí)現(xiàn)簡(jiǎn)易音樂(lè)發(fā)生器[J].焦作工學(xué)院學(xué)報(bào):自然科學(xué)版,2001,20(2):98-99.
[2]杜世民,楊潤(rùn)萍,張川.用VHDL設(shè)計(jì)樂(lè)曲演奏電路[J].寧波高等專(zhuān)科學(xué)校學(xué)報(bào),2003,15(4):41-49.
[3]姜田華.基于FPGA的樂(lè)曲發(fā)生器設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2003,26(18):67-69.
[4]郭培源,喬美華.基于FPGA,CPLD芯片的音樂(lè)存儲(chǔ)與回放系統(tǒng)設(shè)計(jì)[J] .電聲技術(shù),2004(10):54-57.
[5]楊國(guó)慶.基于FPGA動(dòng)態(tài)顯示樂(lè)曲演奏片上系統(tǒng)的分析與設(shè)計(jì)[J].電聲技術(shù),2006(19):162-164.
[6]楊國(guó)慶.基于VHDL動(dòng)態(tài)顯示樂(lè)曲播放器的設(shè)計(jì)與實(shí)現(xiàn)[J].天津工業(yè)大學(xué)學(xué)報(bào),2006,25(4):34-37.
[7]潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程[M].北京:科學(xué)出版社,2006.
[8]陳瓊,潘禮,黃松.FPGA系統(tǒng)設(shè)計(jì)與實(shí)踐[M].北京:電子工業(yè)出版社,2004.
[9]王振紅.VHDL數(shù)字電路設(shè)計(jì)與應(yīng)用實(shí)踐教程[M].北京:機(jī)械工業(yè)出版社,2006.
[10]顧斌,趙明忠,姜志鵬.數(shù)字電路EDA設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社,2004.
[11]朱明程,董爾令.可編程邏輯器件原理與應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2004.
作者簡(jiǎn)介
李雪梅 女,1964年出生,副教授,主要從事教學(xué)及實(shí)驗(yàn)室建設(shè)。研究方向?yàn)楝F(xiàn)代電子技術(shù)應(yīng)用。