基于FPGA的電子琴動態(tài)錄音與回放系統(tǒng)的設計
O 引 言
樂曲都是由一連串的音符組成,因此按照樂曲的樂譜依次輸出這些音符所對應的頻率,就可以在揚聲器上連續(xù)地發(fā)出各個音符的音調。大多數(shù)的電子琴設計都有彈奏和播放功能,但能自動對彈奏的樂曲進行錄音并可改變回放快慢可調的設計卻很少。要實現(xiàn)錄音和回放功能,就必須將彈奏的音符值在相應的寫控制信號控制下存儲到FPGA芯片內部的隨機存儲器(RAM)中,而在相應的讀控制信號控制下,將RAM中存儲的音符值讀出來,送給相應的發(fā)聲控制等模塊。進入20世紀90年代以后,EDA技術得到了飛速的發(fā)展,電子系統(tǒng)的設計方法發(fā)生了很大的變化,傳統(tǒng)的設計方法正逐步退出歷史舞臺,而基于EDA技術的可編程邏輯芯片設計成為電子系統(tǒng)設計的主流。本設計基于QuartusⅡ6.0開發(fā)平臺,采用VHDL語言在FPGA芯片上成功地實現(xiàn)了電子琴動態(tài)錄音與回放功能。
l 電子琴動態(tài)錄音與回放系統(tǒng)設計
已經設計成功的多功能電子琴樂曲硬件演奏設計電路主要包括:鍵盤演奏、人工選曲并播放樂曲、錄音/回放、可控制播放歌曲的節(jié)奏快慢、液晶顯示當前系統(tǒng)狀態(tài)等功能。其中在FPGA芯片中實現(xiàn)的電路設計有4個模塊,分別為鍵盤掃描和按鍵功能設置模塊、RoM/RAM控制器模塊、發(fā)聲控制模塊、LCD驅動控制模塊。系統(tǒng)設計框圖如圖1所示。
工作原理如下:首先通過鍵盤掃描和按鍵功能設置模塊將一個4*4的鍵盤上各按鍵進行功能設置,然后根據(jù)相應的操作要求進行發(fā)聲和液晶顯示。如果選中當前狀態(tài)是彈奏模式,則發(fā)聲控制模塊直接把琴鍵送來的音符對應的分頻系數(shù)轉換成相應頻率送到揚聲器發(fā)聲,字幕信息通過液晶顯示驅動模塊驅動液晶顯示;如果選中當前工作模式為播放模式,則ROM/RAM控制器模塊把事先存儲在ROM中的音樂數(shù)據(jù)提出來送至發(fā)聲模塊,完成自動播放功能;如果選中當前工作狀態(tài)是錄音回放模式,則啟動ROM/RAM控制器模塊中RAM狀態(tài)機控制器進行讀寫操作。
這里重點介紹由ROM/RAM控制模塊通過狀態(tài)機設計產生錄音/回放功能的實現(xiàn)。
2 ROM/RAM控制模塊的設計
ROM/RAM控制模塊的作用是通過對系統(tǒng)當前所處的模式進行判斷,并根據(jù)輸入的控制信號,對CycloneⅡFPGA內嵌的RAM的讀寫信號、讀寫時鐘及讀寫地址進行控制。其中ROM/RAM控制模塊的外部接口符號圖如圖2所示。
此模塊定義了10個輸入端口,分別為:mode_key(鍵盤演奏模式)、mode_auto(播放歌曲模式)、mode_tape(錄音回放模式)、time_up(節(jié)奏上升)、time_down(節(jié)奏下降)、song_select(曲目選擇)、tape(錄音)、playback(放音)、reset(系統(tǒng)復位)、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驅動顯示用的信號。
RAM/ROM控制模塊中的RAM控制部分分成兩個小部分,采用有限狀態(tài)機(FSM)分別對RAM讀狀態(tài)和RAM寫狀態(tài)進行操作控制。當系統(tǒng)當前模式為“錄音/回放模式”時,如果“錄音”按鍵按下,則RAM進行寫操作,從首地址開始進行存儲。如果存儲滿1 024個地址空間,則提示“錄音滿”,寫操作終止,等待用戶命令,以進行下一步操作。當系統(tǒng)當前模式為“錄音/回放模式”時,如果“回放”按鍵按下,則RAM進行讀操作,從首地址開始將RAM單元中的數(shù)據(jù)送給發(fā)聲控制模塊進行播放。如果讀完1 024個地址空間,則提示“回放完畢”,讀操作終止,等待用戶命令,以進行下一步操作。
評論