乐曲硬件演奏电路设计.doc
文本预览下载声明
实验十四 乐曲硬件演奏电路设计
一、实验目的:学习利用数控分频器设计硬件乐曲演奏电路。
二、实验原理: 主系统如下图所示由三个模块组成,分别为NOTETABS、TONETABA、SPEAKERA。
NOTETABS模块类似于弹琴人的手指;TONETABA模块类似于琴键;SPEAKERA类似于琴弦或音调发生器。
音符的频率由SPEAKERA模块获得,这是一个数控分频器。由其CLK端输入一具有较高频率(12MHZ)的信号,通过SPEAKERA分频后由SPKOUT输出。SPEAKERA对CLK输入信号的分频比由11位预置数TONE[10..0]决定。SPKOUT的输出频率将决定每一音符的音调,这样,分频计数器的预置值TONE[10..0]与SPKOUT的输出频率就有了对应关系。例如在TONETABA模块中若取TONE[10..0]=1036,将发出音符“3”音的信号频率。
音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,TONETABA模块的功能首先是为SPEAKERA提供决定所发音符的分频预置数,而此数在SPEAKERA输入口停留的时间即为此音符的节拍值。TONETABA模块是乐曲简谱码对应的分频预置数查表电路,其中需设置“梁祝”乐曲全部音符所对应的分频预置数,共13个,每一音符的停留时间由音乐节拍和音调发生器模块NOTATABS的CLK的输入频率决定,在此为4HZ。这13个值的输出由对应于TONETABA的4位输入值INDEX[3..0]确定。
在NOTETABS中设置了一个8位二进制计数器(计数最大值为138),作为音符数据ROM的地址发生器。这个计数器的计数频率选为4HZ,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。例如,“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间,相应地,所对应的“3”音符分频预置值为1036,在SPEAKERA的输入端停留了1秒。随着NOTETABS中的计数器按4HZ的时钟频率作加法计数时,即随地址递增时,音符数据ROM中的音符数据将从ROM通过TONEINDEX[3..0]端口输向TONETABA模块,“梁祝”乐曲就开始连续自然地演奏起来了。
三、实验内容与要求
1、定制NOTETABS模块中的音符数据ROM“music”。该ROM中的音符数据列在后面。注意数据表中的数据位宽、深度和数据的表达类型。最后对该ROM进行仿真。
2、根据以上的原理图及原理分析,给出各模块的VHDL描述及顶层VHDL设计,给出仿真波形,并在硬件上进行验证。
3、实验报告:根据以上的要求,给出完整的乐曲硬件演奏电路的VHDL程序。
“梁祝”乐曲演奏数据(文件后缀位.mif)
WIDTH=4;
DEPTH=256;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENT BEGIN――注意实用文件中要展开以下数据,
――每一组占一行
00:3;01:3;02:3;03:3;04:5;05:5;06:5;07:6;08:8;09:8;10:8;11:9;12:6;
13:8;14:5;15:5;16:12;17:12;18:12;19:15;20:13;21:12;22:10;23:12;
24:9;25:9;26:9;27:9;28:9;29:9;30:9;31:0;32:9;33:9;34:9;35:10;36:7;
37:7;38:6;39:6;40:5;41:5;42:5;43:6;44:8;45:8;46:9;47:9;48:3;49:3;
50:8;51:8;52:6;53:5;54:6;55:8;56:5;57:5;58:5;59:5;60:5;61:5;62:5;
63:5;64:10;65:10;66:10;67:12;68:7;69:7;70:9;71:9;72:6;73:8;74:5;
75:5;76:5;77:5;78:5;79:5;80:3;81:5;82:3;83:3;84:5;85:6;86:7;87:9;
88:6;89:6;90:6;91:6;92:6;93:6;94:5;95:6;96:8;97:8;98:8;99:9;100:12;
101:12;102:12;103:10;104:9;105:9;106:10;107:9;108:8;109:8;110:6;
111:5;112:3;113:3;114:3;115:3;116:8;117:8;118:8;119:8;120:6;121:8;
122:6;123:5;124:3;125:5;126:6;127:8;128:5;129:5;130:5;131:5;
132:5;133:5;134:5;135:
显示全部