1、验十 硬件乐曲自动演奏电路设计1、 实验目的:学习利用数控分频器设计硬件电子琴实验。2、 实验仪器:PC 机,操作系统为 Windows2000/xp,Mux+Plus II 设计平台,GW48 系列 SOPE/EDA 实验开发系统。3、 实验原理:本设计乐曲选取梁祝中化蝶部分,其简谱如图1所示。图1 梁祝中化蝶部分简谱组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素,首先让我们来了解音符与频率的关系。乐曲的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。在2个八度音之间,又可分为12个半音,每2个半音的频率比为。另外,音符A(简谱中的
2、低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音1至高音1之间每个音符的频率,如表1所示。表1 简谱中音符与频率的关系4、 主系统由 4 个模块组成;例 1-1 是顶层设计文件,其内部有三个功能模块(如图2 所示):Tone.VHD(例 1-2)和 Speaker.VHD(例 1-3)及 Notetabs.VHD(例 1-4).模块 TONE 是音阶发生器,当 4 位发声控制输入 INDEX 中某一位为高电平时,则对应某一音阶的数值将从端口 TONE 输出,作为获得该音阶的分频预置值;同时由 CODE 输出对应该音阶简谱的显示数码,如5 ,并
3、由 HIGH 输出指示音阶高 8 度显示。由例 6-28 可见,其语句结构只是类似与真值表的纯组合电路描述,其中的音阶分频预置值,如 Tone Indx, Tone=Tone2,CODE=CODE1,HIGH=HIGH1);u2 : Speaker PORT MAP (clk=CLK12MHZ,Tone1=Tone2, SpkS=SPKOUT );u3 : Notetabs PORT MAP(clk=CLK8HZ,Index0=Indx);END;【例 10-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Tone ISPORT ( Inde
4、x : IN INTEGER RANGE 0 TO 15;CODE : OUT INTEGER RANGE 0 TO 15;HIGH : OUT STD_LOGIC; Tone : OUT INTEGER RANGE 0 TO 16#7FF# );END;ARCHITECTURE one OF Tone ISBEGINSearch : PROCESS(Index)BEGINCASE Index IS - 译码电路,查表方式,控制音调的预置数WHEN 0=Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone NULL;E
5、ND CASE;END PROCESS;END;【例 10-3】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Speaker ISPORT ( clk : IN STD_LOGIC;Tone1 : IN INTEGER RANGE 0 TO 16#7FF#;SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Speaker ISSIGNAL PreCLK , FullSpkS : STD_LOGIC;BEGINDivideCLK : PROCESS(clk) - 将 CLK 进 11 分频,PreCLK
6、 为 C L 11K 6 分频VARIABLE Count4 : INTEGER RANGE 0 TO 15;BEGINPreCLK 11 THEN PreCLK index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0in
7、dex0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0in
8、dex0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0index0 null;end case;end process;end Behavioral;