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