基于FPGA的電子琴動(dòng)態(tài)錄音與回放系統(tǒng)的設(shè)計(jì)
O 引 言
樂曲都是由一連串的音符組成,因此按照樂曲的樂譜依次輸出這些音符所對應(yīng)的頻率,就可以在揚(yáng)聲器上連續(xù)地發(fā)出各個(gè)音符的音調(diào)。大多數(shù)的電子琴設(shè)計(jì)都有彈奏和播放功能,但能自動(dòng)對彈奏的樂曲進(jìn)行錄音并可改變回放快慢可調(diào)的設(shè)計(jì)卻很少。要實(shí)現(xiàn)錄音和回放功能,就必須將彈奏的音符值在相應(yīng)的寫控制信號控制下存儲(chǔ)到FPGA芯片內(nèi)部的隨機(jī)存儲(chǔ)器(RAM)中,而在相應(yīng)的讀控制信號控制下,將RAM中存儲(chǔ)的音符值讀出來,送給相應(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開發(fā)平臺(tái),采用VHDL語言在FPGA芯片上成功地實(shí)現(xiàn)了電子琴動(dòng)態(tài)錄音與回放功能。
l 電子琴動(dòng)態(tài)錄音與回放系統(tǒng)設(shè)計(jì)
已經(jīng)設(shè)計(jì)成功的多功能電子琴樂曲硬件演奏設(shè)計(jì)電路主要包括:鍵盤演奏、人工選曲并播放樂曲、錄音/回放、可控制播放歌曲的節(jié)奏快慢、液晶顯示當(dāng)前系統(tǒng)狀態(tài)等功能。其中在FPGA芯片中實(shí)現(xiàn)的電路設(shè)計(jì)有4個(gè)模塊,分別為鍵盤掃描和按鍵功能設(shè)置模塊、RoM/RAM控制器模塊、發(fā)聲控制模塊、LCD驅(qū)動(dòng)控制模塊。系統(tǒng)設(shè)計(jì)框圖如圖1所示。
工作原理如下:首先通過鍵盤掃描和按鍵功能設(shè)置模塊將一個(gè)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ū)動(dòng)模塊驅(qū)動(dòng)液晶顯示;如果選中當(dāng)前工作模式為播放模式,則ROM/RAM控制器模塊把事先存儲(chǔ)在ROM中的音樂數(shù)據(jù)提出來送至發(fā)聲模塊,完成自動(dòng)播放功能;如果選中當(dāng)前工作狀態(tài)是錄音回放模式,則啟動(dòng)ROM/RAM控制器模塊中RAM狀態(tài)機(jī)控制器進(jìn)行讀寫操作。
這里重點(diǎn)介紹由ROM/RAM控制模塊通過狀態(tài)機(jī)設(shè)計(jì)產(chǎn)生錄音/回放功能的實(shí)現(xiàn)。
2 ROM/RAM控制模塊的設(shè)計(jì)
ROM/RAM控制模塊的作用是通過對系統(tǒng)當(dāng)前所處的模式進(jìn)行判斷,并根據(jù)輸入的控制信號,對CycloneⅡFPGA內(nèi)嵌的RAM的讀寫信號、讀寫時(shí)鐘及讀寫地址進(jìn)行控制。其中ROM/RAM控制模塊的外部接口符號圖如圖2所示。
此模塊定義了10個(gè)輸入端口,分別為:mode_key(鍵盤演奏模式)、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寫地址)、ram_wren(RAM寫使能)、ram_wrclk(RAM寫時(shí)鐘)、ram_rdadd(RAM讀地址)、ram_rden(RAM讀地址)、ram_rdclk(RAM讀地址)、full(錄音滿信號)、over(回放完畢信號)以及5個(gè)提供LCD驅(qū)動(dòng)顯示用的信號。
RAM/ROM控制模塊中的RAM控制部分分成兩個(gè)小部分,采用有限狀態(tài)機(jī)(FSM)分別對RAM讀狀態(tài)和RAM寫狀態(tài)進(jìn)行操作控制。當(dāng)系統(tǒng)當(dāng)前模式為“錄音/回放模式”時(shí),如果“錄音”按鍵按下,則RAM進(jìn)行寫操作,從首地址開始進(jìn)行存儲(chǔ)。如果存儲(chǔ)滿1 024個(gè)地址空間,則提示“錄音滿”,寫操作終止,等待用戶命令,以進(jìn)行下一步操作。當(dāng)系統(tǒng)當(dāng)前模式為“錄音/回放模式”時(shí),如果“回放”按鍵按下,則RAM進(jìn)行讀操作,從首地址開始將RAM單元中的數(shù)據(jù)送給發(fā)聲控制模塊進(jìn)行播放。如果讀完1 024個(gè)地址空間,則提示“回放完畢”,讀操作終止,等待用戶命令,以進(jìn)行下一步操作。
寫操作的FSM狀態(tài)轉(zhuǎn)移流程以及轉(zhuǎn)移條件如圖3所示;讀操作的FSM狀態(tài)轉(zhuǎn)移流程以及轉(zhuǎn)移條件如圖4所示。
用狀態(tài)機(jī)對RAM進(jìn)行讀寫控制的部分源程序如下:
其仿真波形圖如圖5所示。從仿真圖上可以看出,RAM/ROM控制模塊電路既產(chǎn)生了控制RAM存儲(chǔ)器的時(shí)鐘ram_wrclk信號,也產(chǎn)生了相應(yīng)的控制RAM的使用使能信號ram_wren和寫入地址ram_wradd。
3 RAM隨機(jī)存儲(chǔ)器的設(shè)計(jì)
設(shè)計(jì)一個(gè)雙端口的存儲(chǔ)深度為1 024、存儲(chǔ)寬度為6位的隨機(jī)存儲(chǔ)器RAM,用來存儲(chǔ)彈奏的樂曲,并可播放出來。生成的RAM單元如圖6所示。data[5..O]端口為彈奏電子琴時(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..O]代表十位寬度的寫地址端口,rdaddress[9..0]代表十位寬度的讀地址端口。wrclock為RAM寫入時(shí)鐘,rdclock為RAM讀出時(shí)鐘。Q[5..0]為從RAM中讀出所存放數(shù)據(jù),即data。從圖6可以看出,此雙口RAM具有獨(dú)立的讀寫時(shí)鐘和讀寫使能。選擇這樣的RAM的目的是為了以一個(gè)固定頻率wrclock(本設(shè)計(jì)取4 Hz)的時(shí)鐘對RAM進(jìn)行寫操作,即以一個(gè)固定的采樣頻率對所彈奏的樂曲進(jìn)行采樣存儲(chǔ);另一方面以節(jié)奏控制部分輸出的時(shí)鐘rdclock作為RAM的讀時(shí)鐘信號,使得回放過程可以以不同的節(jié)奏將儲(chǔ)存的樂曲播放出來。這是其新穎之處,使電子琴在回放過程中更加靈活多變,功能更多。
其仿真波形圖如圖7所示。從仿真圖上可以看出,RAM存儲(chǔ)器在寫使能信號和讀使能信號控制作用下依次寫入數(shù)據(jù)信號,并按寫入地址先后次序再準(zhǔn)確地讀出來,實(shí)現(xiàn)了錄音和回放的功能要求。
本設(shè)計(jì)采用杭州康芯電子有限公司開發(fā)的電子設(shè)計(jì)應(yīng)用板(型號:KX—DVP3F)進(jìn)行對系統(tǒng)的調(diào)試與功能驗(yàn)證。利用QuartusⅡ6.O軟件生成.sol或者.pof編程文件,通過USB下載器將編程文件配置到CycloneⅡEP2C8Q208芯片中,經(jīng)過數(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)高效率高可靠邏輯控制的重要途徑。它具有類似CPU的高速運(yùn)算和控制能力,程序?qū)哟畏置?,結(jié)構(gòu)清晰,易讀易懂;在排錯(cuò)、修改和模塊移植方面也有獨(dú)到之處。