2.3 音符產生電路模塊( Tone 模塊)
該模塊的作用是產生各音符的分頻預置值。根據各音名與頻率的關系( 如表 1) 以及聲音輸出控制模塊( speaker 模塊) 中數控分頻器的設計, 分別計算出高音區、中音區、低音區不同音符的分頻預置值, 如表 2 所示。( 在表 1、表 2 中, 音符 1、2、3、4、5、6、7 對應電子琴的 7 個白色琴鍵, 音符 1*、2*、4*、5*、6* 對應電子琴的 5個黑色琴鍵。) 程序中 Index 為 AUTOMUSIC 模塊傳入的音符編碼, high0, med0, low0 為 AUTOMUSIC 模塊傳入表示音符所處音區, 如 high0=‘1’表示音符處于高音區 ; low0=‘1’表 示音符處于低音區 ; 程序中 Tone 為輸出音符分頻預置值, 因最大的預置數為 6 668, 為節省硬件資源及提高系統運行速度, 將 Tone 取值范圍定為0~16#1E00#; HIGH, med, low 輸出音符所處音區, 接外電路的發光二極管 , 高電平有效 ; CODE 端口接數碼管, 輸出音符的顯示數碼。該模塊 VHDL 程序的結構如圖 4 所示, 程序主要部分 se 進程流程圖如圖 5 所示。
2.4 聲音輸出控制模塊( speaker 模塊)
該模塊主要電路為數控分頻器。其 VHDL 程序結構如圖 6 所示。程序中 CLK1 輸入系統的基準頻率 6 MHz, TONE1 接 Tone 模塊傳來的分頻預置值, SPKS 輸出端接音色產生器, 輸出各音符所對應的頻率。該程序包括 3 個進程 , 其中 DivideCLK : PROCESS( clk1) 進程功能將系統的基準頻率 6 MHz 進行 3 分頻得到 2 MHz 的頻率, 由信號 PreCLK 傳給 GenSpkS:PROCESS( PreCLK, Tone1) 進程。在設計中 PreCLK 頻率太大,會使在 GenSpkS 進程分頻中占用太多的硬件資源 ,PreCLK 頻率太小 GenSpkS 進程分頻后輸出音符頻率誤差太大, 綜合考慮這兩個方面, PreCLK 選用 2 MHz的頻率。GenSpkS 進程由一個初值可變的加法計數器構成, 初值為 Tone 模塊傳來的分頻預置值( Tone1) 。分頻后得到的頻率 FullSpkS 為對應的音符頻率的 2 倍。由于 FullSpkS 頻率的脈寬很窄, 為便于驅動揚聲器, 將FullSpkS 信 號 傳 給 進 程 DelaySpkS:PROCESS ( Full-SpkS) , 在此進程中利用一個 D 觸發器將 FullSpkS 信號進行二分頻, 使到達揚聲器的波形為對稱方波, 此時輸出的頻率即達到所對應音符的實際頻率。
2.4 在 FPGA 芯片中頂層文件的原理圖該原理圖
如圖 7 所示。輸入端 CLK1, CLK 接系統的基準頻率 6 MHz, AUTO 接鍵盤輸入演奏與自動演奏的切換開關 , 總線 INDEX2[11..0]接鍵盤上的 12 個琴鍵, HIGH2, MED2, LOW2 分別接鍵盤上高、中、低音的控制開關; 輸出端 HIGH, MED, LOW 分別接發光二極管, 指示音調的音區信息( 分別對應高音、中音、低音區) , CODE[7..0]接 LED 數碼管, 輸出音符的顯示數碼,SPKS 輸出端接音色產生器,輸出各音符所對應的頻率。
2.6 音色產生器
音色指樂音的音域范圍、頻譜成分及其包絡特性等。音色產生器的功能是模擬各種傳統樂器如笛子、小 號、雙簧、風琴等的樂音。這些樂音的區別表現在發同風琴一音符時, 波形的頻譜與包絡特性不同。由此設計的一種簡單音色產生電路如圖 8 所示。其中, 74LS93 的輸入脈沖 CLK0 來自 FPGA 芯片的音符頻率輸出端 spks; 74LS93 的輸出端 Q0~Q3 為音符頻率 spks 的 2,4, 8 及 16 分頻信號。電阻 R1~R10 組成權電阻相加網絡, 可產生由不同頻率成分與不同幅度組成的各種波形。適當選擇 R1~R10 的阻值或一定比值( 與樂器標準音比較后定) , 可獲得如圖 8 所示的笛子、小號、雙簧、風琴等的基本樂音。再經 RC 濾波輸出, 以改善音色。
該設計將電子琴系統的核心部分集成在可編程邏輯器件FPGA 芯片上, 大大簡化了外部電路, 較以前的傳統設計, 既減少了所用芯片的種類和數量 ,縮小了體積, 降低了功耗, 提高了系統的整體性能,對系統在使用中的故障率大為減少。此外, 這種基于可編程邏輯器件以 VHDL 硬件描述語言進行設計, 在電子設計的各個階段、各個層次進行計算機模擬驗證, 保證設計過程的正確性, 可降低設計成本 , 縮短設計周期, 具有廣闊的應用前景。
評論
查看更多