本文主要是介绍南京邮电大学可编程电子音乐自动演奏电路报告(电子电路课程设计),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
可编程电子音乐自动演奏电路设计报告
资源包链接
摘 要
此课程设计作品是一个可编程电子音乐自动演奏电路,可以通过开关选择预先设定好的音乐曲目并在选定曲目后自动演奏所选曲目,手动切换曲目后电路将从头开始演奏所选曲目。电路内包含了三首长度为1分04秒的乐曲,乐曲根据电子播放器的特点进行了适应性的改编从而达到最佳播放效果,每首乐曲对应着不同颜色的LED指示灯,同时该电路还具有休止状态,当三个LED均不亮时,表示没有选中任何乐曲,电路没有乐曲输出。电路同时具有声音响度控制模块,可以根据音乐的情感加入节拍的强弱变化。在播放音乐时,电路中的拾音灯模块可以根据声音的响度变换亮起LED灯数量的多少从而直观的让我们看出声音的大小,兼具美观性和实用性。
电路采用Xilinx公司的Spartan-3AN系列的XC3S50AN-4TQG144型FPGA搭配外围器件实现。FPGA使用ISE14.7软件通过Verilog-HDL语言与原理图混合编译的方法编程,电路的时钟信号由SN74HC132芯片(带有施密特触发器的与非门)搭配电阻电容震荡产生。音乐信号从FPGA输出后经响度调整电路,外部放大电路后接入喇叭实现音乐的播放,同时电路中附带了由LM358驱动的拾音灯以便于调整声音的强弱变化。整体电路的搭建简洁美观,横平竖直,具有较高的观赏价值和创新价值。
本次课程设计巩固和强化了之前电工电子实验课所学习到的知识,培养了我们自学的能力,提高了我们的创新意识,同时还让我们了解到了许多乐理知识,这是一次宝贵的综合性电子电路设计实践经验。
关键词:自动演奏;FPGA;Verilog-HDL;原理图;声音响度可视化
Design Report on Programmable Music Automatic Performance Circuit
Abstract: The design project is a programmable electronic music automatic playing circuit, which can select pre-set music tracks through switches and automatically play the selected track. The circuit contains three 1 minute and 4 second-long music tracks, which have been adapted to the characteristics of the electronic player for optimal playback. The circuit also has a sound intensity control module, which can add variations in beat strength and weakness according to the emotions of the music. During music playback, the pick-up light module in the circuit visually indicates the volume of the sound by the number of illuminated LED lights, combining aesthetics and practicality.
The circuit is implemented using Xilinx’s Spartan-3AN series XC3S50AN-4TQG144 FPGA with peripheral components. The FPGA is programmed using ISE 14.7 software, which uses a combination of Verilog-HDL language and schematic compilation. The clock signal of the circuit is generated through an SN74HC132 chip with Schmitt triggers and resistors and capacitors for oscillation. The music signal is output from the FPGA, adjusted in volume, amplified through external amplification circuit, and then played through a speaker. The circuit also includes a pick-up light driven by LM358 to enable adjustment of sound intensity. The overall design of the circuit is simple, aesthetically pleasing, and has both visual and innovative value.
Key Words: automatic playing; FPGA; Verilog-HDL; schematic; sound visualization
目录
- 第1章:技术指标
- 1.1系统功能要求
- 1.2系统结构要求
- 1.3基本技术指标
- 1.4电气指标
- 1.5扩展技术指标
- 1.6设计条件
- 第2章:乐理知识补充
- 2.1电子乐器信号的简述
- 2.2音乐的频率
- 2.2.1十二平均律
- 2.2.2音名与唱名
- 2.2.3乐曲的调号
- 2.3乐曲的速度
- 2.3.1音符的时值
- 2.3.2乐曲的节拍
- 2.3.3乐曲的每分钟拍数(BPM)
- 2.4音乐的响度
- 2.5乐谱的类别
- 2.6乐谱的寻找
- 2.7乐曲的选择与改编
- 第3章:整体方案设计
- 3.1整体电路结构
- 3.2整体方框图
- 第4章:单元电路设计
- 4.1振荡电路
- 4.1.1振荡电路的频率
- 4.1.2振荡电路的构造
- 4.2 8Hz分频电路
- 4.3控制电路
- 4.3.1系统任务分析
- 4.3.2初始结构框图
- 4.3.3算法流程图
- 4.3.4算法状态机图(ASM图)
- 4.3.5控制器的状态转移图
- 4.3.6数据处理器电路
- 4.3.7控制器电路
- 4.3.8控制电路部分电路图
- 4.4 12音阶分频电路
- 4.5八度分频电路
- 4.6响度控制电路
- 4.6.1 FPGA内部
- 4.6.2 FPGA外部
- 4.7功率放大电路
- 4.8时序电路分析
- 4.9拾音灯电路
- 4.10乐曲编码
- 4.10.1乐曲节拍
- 4.10.2乐曲音调
- 4.10.3音符强弱
- 4.10.4乐曲改编与适应
- 4.10.5综合编写实例
- 4.10.6乐曲原谱与编码
- 4.11整体电路图
- 第5章:调试
- 5.1 FPGA仿真
- 5.1.1仿真方法与操作
- 5.1.2仿真结果
- 5.2外部电路调试
- 5.2.1振荡电路
- 5.2.2响度控制电路与放大电路
- 5.3实验故障及处理
- 第6章:设计小结
- 6.1设计任务完成情况
- 6.2问题分析与改进
- 6.3心得体会
- 参考文献
- 附 录
- 附录1:预习报告电路草图
- 附录2:整体电路图
- 附录3:Verilog 8Hz分频模块代码
- 附录4:Verilog激励文件代码
- 附录5:ROM测试乐谱编码
- 附录6:ROM乐谱编码
- 附录7:乐曲原谱图片
- 附录8:实物照片
第1章:技术指标
1.1系统功能要求
可编程电子音乐自动演奏电路可以通过开关选择预先设定好的音乐曲目,选定曲目后则能自动演奏所选曲目。
1.2系统结构要求
可编程电子音乐自动演奏电路系统结构框图如图1所示。图中K1用于选择预先设置在电路中的乐曲,选中某一乐曲后对应的LED亮,音乐演奏电路反复自动演奏所选的乐曲,经功率放大后由扬声器播出,直至选中下一首为止。
图1 可编程电子音乐自动演奏电路系统结构框图
1.3基本技术指标
① 乐曲数目为3首;
② 每首乐曲长度在20s~30s之间;
③ 所选择的乐曲应在4个八度内,以第6个8度作为最高的8度;
④乐曲演奏速度为100~120拍/min。
1.4电气指标
① 音频功放输入为方波信号;
② 音阶频率误差E<=5;
③ 负载(扬声器)阻抗为8Ω,功率为1/8W(也可以用蜂鸣器);
④ 输出音量可调。
1.5扩展技术指标
①加入节拍的强弱变化;
1.6设计条件
①直流稳压电源提供+5V电压;
②主要元器件清单
序号 | 元件型号 | 数量 |
---|---|---|
1 | XC3S50AN-4TQG144型FPGA | 1 |
2 | SN74HC132施密特触发器 | 1 |
3 | LM386运算放大器 | 1 |
4 | 电容,电阻,可调电阻,导线 | 若干 |
5 | LED 发光二极管 | 3 |
6 | 单刀单位自复开关 | 1 |
7 | 1/8W 喇叭 | 1 |
8 | 面包板 | 1 |
表1 主要元器件清单表
第2章:乐理知识补充
2.1电子乐器信号的简述
电子乐器是一种应用电子技术模仿各种乐器的声音(例如,钢琴、笛子、提琴、锣鼓等)的声音。模仿各种乐器的基本原理是:先将某种乐器的声音转换为电信号,再分析该乐器的电信号的波形和频谱,利用电子技术产生与该乐器相仿的电信号。
电子乐器所模仿的各种乐器时所产生的电信号具有各自不同的特点,若对电子乐器所模仿的各种乐器的电信号进行分析,区别主要是频谱的不同。
在演奏电子乐器时,除了演奏员在情感上的处理之外,仅从乐器发出的信号电特性而言,其表现力主要体现在四个方面:音高(基本频率)、长短(也称音的时值,指某一频率持续的时间)、强弱(信号的电压幅度或输出功率)和音色(信号的波形和频谱)。本课题是一种简易的电子乐器,它没有模仿特定的乐器,音色单一。演奏时它所产生的信号是方波,其波形是占空比为50%的脉冲波,频谱仅含基频与其偶次谐波。所以,在设计本课题时,在保证输出信号为方波的前提下,主要考虑如何用电子电路控制音高(频率)、长短(音的时值)和强弱(信号幅度) 电子乐器信号这三方面的基本特性。
2.2音乐的频率
2.2.1十二平均律
人对音调(声音频率)的辨别率不是线性的,而是呈对数关系的。也就是说人类听感上的音高是一个等比数列。基于此关系我们在人耳的听力范围内进行划分,规定频率每相差一倍称为一个8度,划分出8度音程后再在每个8度音程中细分,将一个8度均等的分为12份,这12个音调分别为:C,#C,D,#D,E,F,#F,G,#G,A,#A,B。相邻两个音高的频率比M为12√2≈1.0595,这便是十二平均律的由来。根据十二平均律我们可以算出所有音高对应的频率。为了使用方便,将钢琴键盘中央一组的八度称为小字一组,该组的第一个键的音名称为中央C,这一组音调A的频率为440HZ。国际上将440HZ作为标准音高。下表为十二音调等调整音阶标准频率表。
八度音编 号 | 音调名称 | 音调名称 | 音调名称 | 音调名称 | 音调名称 | 音调名称 | 音调名称 | 音调名称 | 音调名称 | 音调名称 | 音调名称 | 音调名称 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
C | # C | D | # D | E | F | # F | G | # G | A | # A | B | |
0 | 16.351 | 17.324 | 18.354 | 19.445 | 20.601 | 21.827 | 23.124 | 24.499 | 25.956 | 27.5 | 29.135 | 30.867 |
1 | 32.703 | 34.648 | 36.708 | 38.891 | 41.203 | 43.654 | 46.249 | 48.999 | 51.913 | 55 | 58.27 | 61.735 |
2 | 65.406 | 69.296 | 73.416 | 77.782 | 82.407 | 87.307 | 92.499 | 97.999 | 103.83 | 110 | 116.54 | 123.47 |
3 | 130.81 | 138.59 | 146.83 | 155.56 | 164.81 | 174.61 | 184.99 | 195.99 | 207.65 | 220 | 233.08 | 246.94 |
4 | 261.62 | 277.18 | 293.67 | 311.13 | 329.63 | 349.23 | 369.99 | 391.99 | 415.31 | 440 | 466.16 | 493.88 |
5 | 523.25 | 554.36 | 587.33 | 622.25 | 659.26 | 698.46 | 739.99 | 783.99 | 830.61 | 880 | 932.32 | 987.76 |
6 | 1046.5 | 1108.7 | 1174.7 | 1244.5 | 1318.5 | 1396.9 | 1479.9 | 1567.9 | 1661.2 | 1760 | 1864.7 | 1975.5 |
7 | 2093 | 2217.5 | 2349.3 | 2489 | 2637 | 2739.8 | 2959.9 | 3135.9 | 3322.4 | 3520 | 3729.3 | 3951.1 |
8 | 4186 | 4434.9 | 4698.6 | 4978 | 5274 | 5587.7 | 5919.9 | 6271.9 | 6644.9 | 7040 | 7458.6 | 7902.1 |
表2 十二音调等调整音阶标准频率表
在固定调简谱中,C,#C,D,#D,E,F,#F,G,#G,A,#A对应1,#1,2,#2,3,4,#4,5,#5,6,#6 ,7,值得注意的是音高相同但是意义和记法不同的各音之间互为等音例如C,#B,♭♭D(这种记法不常见)均代指同一个音,如图2所示。
图2 等音示意图
中音8度(即钢琴键盘上的小字一组)不加符号,高音8度(小字二组)上加1点,倍高音8度(小字三组)上加2点,低音8度(小字组)下加1点,倍低音8度(大字组)下加2点。
图3 钢琴键盘音级名称与分组
2.2.2音名与唱名
为了便于记忆,我们为每个8度中的不同音高规定了音名,不同8度中相同位置的音拥有相同的音名。每一个音名都有固定的频率值,比如中音C只能是261.62Hz。不同8度中的音名与频率的对应关系已在上表中给出,这里不再赘述。
唱名就是大家所熟知的Do,Re,Mi,Fa,Sol,La,Si,最初由意大利人发明,目的是把谱子唱出来。唱名分为两种,分别为固定唱名法和首调唱名法,不同的唱名法有着很大的区别,这里我们着重来讲首调唱名法。
不同于音名,唱名是一个相对的概念,它没有固定的物理意义,也就是说没有固定的频率。唱名的关系是相对的,每一个唱名间的相对音高是确定的,换言之,唱名只是大家的一种感觉,这种感觉来源于自然C大调中的CDEFGAB,其中EF和BC之间为半音,其余为全音。不同的人唱出相同的唱名可能是CDEFGAB在整个频谱上的任意平移。这里举个例子,我们在唱一些音调比较高的歌时会将声音稍微压低一点方便演唱,但是压低之后依然有那种声音的旋律感,我们依然可以唱出Do,Re,Mi,Fa,Sol,La,Si即使我们发出的声音可能并不是标准的自然C大调中的CDEFGAB。
2.2.3乐曲的调号
乐曲的调号可以简单的理解为在整体上乐曲频率的偏移,如果偏移的频率恰好为一倍,那这就是升8度或者降8度,但如果偏移的频率并不是一倍这时候我们便可以用调号来记录,对于同学们常见的调式来说,我们可以理解为将唱名Do,安排在了其他的音调上,并且根据自然大调式音阶的全半音关系往下找规律,重新组成一个听起来和Do,Re,Mi,Fa,Sol,La,Si差不多的调。请注意,并不是所有的调式都有着相同的全半音关系,调式最根本的目的是为了改变乐曲的感情色彩与特色风格。
2.3乐曲的速度
乐曲演奏的快慢称为速度,如果一首歌给人的感觉很快那就说明它的每一个音符演奏的时间都很短,如果感觉一首歌慢就说明他的每个音符演奏时间都比较长,为了理解这个概念,我们需要先去了解音符的时值和乐曲的每分钟拍数。
2.3.1音符的时值
音符的时值是一个相对的概念,描述的是一首歌曲中音符弹奏时间的相对长短,这里我们可以通过饼图来理解这个概念。在简谱中音符的时值表示如图4[1]。
图4 简谱音符与休止符时值表示图
2.3.2乐曲的节拍
节拍是一个衡量节奏的单位,在音乐中,有一定强弱分别的一系列拍子在每隔一定时间重复出现。
常见的节拍如(2/4 、 4/4 、 3/4 拍等),/前的数字表示一小节有几拍,斜杠后的数字表示每一拍以什么音符为基础,例如2/4拍(读作四二拍),意为以四分音符为一拍,每小节有两拍。一般情况下节拍有固定的强弱规律,体现了乐曲的节奏感。
2.3.3乐曲的每分钟拍数(BPM)
在乐谱的左上角,我们常常能见到如图5红框所示的速度标记,它的名字叫做每分钟拍速,决定了乐曲演奏的快慢,可通俗理解为规定时值的音符每分钟应该弹奏多少个。结合BPM和音符的时值我们便可以确定一首曲子的绝对快慢。
图5 速度标记示例乐谱
2.4音乐的响度
音乐的响度也称音乐的强弱,是由声源振幅的大小决定的。声音的大小对于人类的感觉同样是非线性的,所以我们使用指数单位分贝来表示。在本次课程设计中,为了反映出不同的声音大小,最终输入到喇叭的电压也是指数的对应关系。在编曲时声音的响度并不一定完全按照节拍的强弱要求来,有时还需要根据乐曲的情感由演奏者自行判断。
2.5乐谱的类别
乐谱一般分为五线谱和简谱,这里我们介绍同学们更容易上手也更容易遇到的简谱。
简谱分为两种,分别是首调式和固定调式。首调式简谱传承了五线谱的精神。同学们可以借助上面提到的首调式唱名法来理解,按照相对的音高去重新为音调命名,在同学们刚刚接触时识谱比较困难。
更加推荐大家的是固定调式的简谱,在固定调式的简谱中,我们不需要去考虑任何调式,原因是谱子已经帮我们全部翻译为C调,这对于初学者是极为友好的。
2.6乐谱的寻找
推荐大家使用“虫虫钢琴”APP,这是一款钢琴陪练APP,里面有非常多的改编钢琴谱,无论是流行音乐,纯音乐,古典音乐,还是游戏音乐爱好者都能在其中找到自己喜欢的谱子,并且该应用支持五线谱,简谱首调,简谱固定调的一键转换,如图6红色标记处,更加利于同学们识谱。谱子的查看是免费的可以通过截屏将谱子保存下来,如果和其他同学合作去淘宝上用极少的代价买短期会员将会有更好的体验。
图6 “虫虫钢琴”APP功能示例
2.7乐曲的选择与改编
鉴于可编程自动演奏电路的特点,太快或太慢还有音调变化不明显的乐谱往往都不能起到很好的效果。由于存在最小的时长分辨率,本次课程设计的作品不能很好的去演奏时值较短的音符,同时该演奏电路没有断奏或是音的衰减变化,所以如果音调变化不明显的歌将会很枯燥。为了提高演奏的通用性,这里建议大家对原始的乐谱进行修改,第一是将时值较长的音符缩短并加入低音和弦,这能有效的去改善听感并强化节奏感。第二是人为的制造断奏,在某些音调变化不明显的地方故意的将某个音的最后一个最小单位改为休止符制造出节奏感。第三是对于音调较高的乐曲,可以适当的降一个八度,该自动演奏电路并不适合演奏过高的频率,适当的降低频率可以带来更好的听感。不过最好不要变调,这会影响乐曲的情感。
第3章:整体方案设计
3.1整体电路结构
在整体结构设计中,将电路粗分为振荡电路,选曲控制电路,音乐演奏电路和放大电路。
振荡电路负责产生整个系统的时钟信号,用于音调的产生和节拍的控制,是整个系统的基础;选曲控制电路可通过外部按钮输入来执行乐曲的切换,通过LED灯对外显示当前系统的状态,同时其内部存储乐曲数据可以根据节拍信号对音乐演奏电路进行控制,从而产生正确的音调等参数;音乐演奏电路是整个电路的核心,负责将振荡电路的原始时钟信号根据控制电路的指令转化为所需的音调频率信号并进行声音强弱的控制。最后将音调频率信号输入放大电路可以对信号进行放大,接入扬声器即可播放出音乐。
演奏电路有两种分频方案,第一种是先进行十二音阶分频然后进行八度分频;第二种是先进行八度分频然后进行十二音阶分频,两种方案示意图如图7所示[2]。为了简化电路结构同时使得最终的音调更为准确选择第一种方案作为最终方案。
图7 演奏电路的两种分频方案
3.2整体方框图
整体方框图如图8所示。
图8 整体方框图
第4章:单元电路设计
4.1振荡电路
4.1.1振荡电路的频率
要确定振荡电路的频率,首先要从需求进行推导。我们需要产生第3,4,5,6个8度内所有的声音频率,所以从第7个8度开始进行分频,在第7个8度中我们选择频率最低的C音为基准音,通过计数器实现256分频将原始振荡电路频率转化为第七个8度中的所有音阶。因此振荡电路的频率为2093Hz×256=535808Hz。
4.1.2振荡电路的构造
这里我们选取的振荡电路构造为两极施密特触发器搭配电阻电容。器件的选型为:SN74HC132,器件管脚图如图9所示。
图9 SN74HC132器件管脚图
经f0=1/2RC的粗略估算,电容为10000pF,电阻为10kΩ的可调电阻,整体电路图如下。
图10 振荡电路电路图
4.2 8Hz分频电路
为了获得8Hz的节拍控制信号,我们需要从振荡电路中产生的535808Hz中分频。分频模块采用Verilog代码[3]编写实现66976分频,且分频后占空比均为50%的方波。代码编写好后通过生成原理图器件的方式与原理图进行混合编译。代码详情见附录,顶层RTL网表如图所示。
图11 8Hz分频电路RTL网表
4.3控制电路
控制电路分为控制器,数据处理器和输入输出接口,其中数据处理器完成信息的传送与处理,控制器完成对系统的控制,输入接口负责接收信号,输出接口负责控制其他模块。接下来将从控制器和数据处理器两个最主要方面进行自顶向下法设计。
4.3.1系统任务分析
对于本次课程设计,我们的控制电路有两个输入,分别是按钮和8Hz时钟;输出部分有:十二分频控制输出,八度控制输出,响度控制输出,以及休止控制输出。通过数据处理器和控制器我们要实现通过外部输入切换四个大状态,分别是一个休止状态和三首不同歌曲的状态,在每一个状态中,不同的输出部分各司其职,共同完成对于演奏部分的控制。
4.3.2初始结构框图
系统输入输出明细如下表:
信号名称 | 描述 |
---|---|
Button | 按钮输入信号 |
CLK_8 | 8Hz时钟信号 |
D(7:0) | 十二分频控制信号 |
A(5:4) | 八度分频控制信号 |
A(7:6) | 响度控制信号 |
INV | 休止状态标记信号 |
D(7) | 休止符信号 |
A(3:0) | 控制器1,2间内部信号 |
Q(9:8) | 曲地址信号 |
Q(7:0) | 音符单元地址信号 |
CLR | 音符单元地址清零信号 |
表3 系统输入输出明细表
初始结构框图12定义了整个控制系统的输入输出。
图12 控制电路初始结构框图
通过对于系统的分析,我们可以进一步将框图细化为系统分解图。
图13 系统分解框图
4.3.3算法流程图
按照此设想的算法流程图如图所示[4]:
图14 算法流程图
4.3.4算法状态机图(ASM图)
得出算法流程图后,我们按照系统时序来描述系统的工作过程得到了ASM图。
图15 算法状态机图
4.3.5控制器的状态转移图
由ASM图可知,本控制系统的状态机较多,全部写成状态转移图不利于思考与阅读,因此我们将状态机划分为大状态机和小状态机,并省略小状态机使其作为大状态机下的附属状态。以下是除去暂态以外的所有大状态机组成的状态转移图。
图16 状态转移图
4.3.6数据处理器电路
有了状态转移图和对应的输入输出后,我们便能清晰明了的知晓系统的状态与结构,从数据处理器的角度去看,我们需要的输入输出如下。
输入:Button,CLK_8;
对控制器输出:Q(9:0);
对外部输出:INV,LED_1,LED_2,LED_3;
其中,Q(7:0)是音符单元地址,Q(9:8)是曲地址,INV是休止状态标识。
对于输入的Button信号,开关每按动一次切换上拉和下拉信号进入FPGA,为了便于按钮信号保持,我们在按钮输入端加入触发器。
经过触发器的按钮信号被输入到两位二进制计数器中,输出信号实现曲地址Q(9:8)的循环切换,构成了四个大状态机。曲地址信号同时进入译码器和对控制器输出Q(9:8),进入译码器后分别接非门和三个LED,实现对外部输出INV,LED_1,LED_2,LED_3。
数据处理器的第二部分是一个八位计数器,负责音符单元地址的输出,其时钟端接入CLK_8,CLR端接入按钮信号,实现按下按钮后音符单元地址清零的操作。计数器的输出Q(7:0)即为音符单元地址。
至此,控制电路中的数据处理器设计完成,电路图如下[5]。
图17 数据处理器电路图
4.3.7控制器电路
从控制器的角度来看,我们需要的输入输出如下。
输入:Q(9:0);输出:A(7:4),D(7:0)。
对于控制器的第一部分,我们选取ROM来存储三首歌曲的数据。输入控制器的Q(9:0)即为输入ROM的地址,控制器一的对外输出和对控制器二的输出为ROM地址中存储的值。每一个音的要素有强弱,八度和十二音阶。四个强弱需要两位编码,四个8度需要两位编码,十二音阶则需要四个编码,因此我们规定ROM的宽度为8,具体编码定义如下:
图18 ROM编码定义图
为了简化数据处理器,我们规定每首歌的音符数量固定为256个。这样数据处理器输入ROM的Q(9:0)中的低八位为音符单元地址,高两位为曲地址,每一首歌曲结束标志即为Q(7:0)=11111111,并且在下一个CLK_8上升沿到来时自动跳转到歌曲开头,Q(7:0)=00000000。如果手动按动按钮,则Q(9:0)中的高两位变化,ROM直接跳转到下一首乐曲的开头地址。状态机中Q(9:8)=00的休止状态使用占位符填充ROM并搭配INV信号输出到组合逻辑电路实现静音操作。
ROM的输出共有8位编码,其中A(7:4)所包含的八度和响度控制命令由ROM直接输出,A(3:0)中的十二音阶控制命令传输到控制器二(GAL)中。
控制器二(GAL)的作用是翻译ROM中存储的十二音阶指令,使其转化为可以被计数器直接读取的分频指令用于控制十二音阶分频电路。因此我们需要编写一张表格来对应GAL的输入输出关系。表格左侧为ROM中存储的不同音阶指令,表格右侧为GAL输出的分频命令,分频系数的计算将在十二音阶分频电路中详细解释,这里给出最终结果。
输入(D3-D0) | 输出(F7-F0) |
---|---|
0000 | 00000000 |
0001 | 00001110 |
0010 | 00011100 |
0011 | 00101001 |
0100 | 00110101 |
0101 | 00111100 |
0110 | 01001011 |
0111 | 01010101 |
1000 | 01011111 |
1001 | 01101000 |
1010 | 01110000 |
1011 | 01111000 |
1100 | 10000000 |
表4 GAL输入输出关系表
值得注意的是,休止符1100的分频编码为10000000,是唯一一个用到了输出最高位的指令。因此,我们将GAL输出的最高位D(7)作为休止符特征位输入到和INV相同的组合逻辑网络中实现休止符的作用,由于休止状态组合逻辑电路接在八度分频电路的输出端,因此休止符的分频指令对于十二音阶分频电路是没有意义的。
至此,控制电路中的控制器部分设计完毕。电路图如下。
图19 控制器电路图
4.3.8控制电路部分电路图
图20 控制电路部分电路图
4.4 12音阶分频电路
十二音阶分频电路的功能是在控制电路发出的分频指令下,利用输入的535808Hz产生第七个8度12个音阶频率中指定的一个频率。
为了使分频尽可能的准确,我们采用八位二进制计数器进行分频。八位二进制计数器可以实现从0至256的任意分频,通过控制信号置入初始数实现指定的分频,根据第二章中所提到的十二音调等调整音阶标准频率表,我们列出了不同音调的预置数和分频数,并根据预置数设计了控制电路的输出D(7:0),将此输出接入计数器的置数端便可以实现我们想要的12音阶分频。音调控制编码表见下表。
表5 音调控制编码表
音调名 | 输入 | 输出 | 计数器 | 计数器 |
---|---|---|---|---|
D3-D0 | F7-F0 | 预置数 | 分频数(舍尾) | |
C | 0000 | 00000000 | 0 | 256 |
#C | 0001 | 00001110 | 14 | 242 |
D | 0010 | 00011100 | 28 | 228 |
#D | 0011 | 00101001 | 41 | 215 |
E | 0100 | 00110101 | 53 | 203 |
F | 0101 | 00111100 | 60 | 196 |
#F | 0110 | 01001011 | 75 | 181 |
G | 0111 | 01010101 | 85 | 171 |
#G | 1000 | 01011111 | 95 | 161 |
A | 1001 | 01101000 | 104 | 152 |
#A | 1010 | 01110000 | 112 | 144 |
B | 1011 | 01111000 | 120 | 136 |
休止符 | 1100 | 10000000 |
该部分电路图如下图所示。
图21 12音阶分频电路电路图
4.5八度分频电路
由乐理知识可知,相邻两个8度之间的对应音调为二分频关系,因此为了获得所需的四个八度,我们需要可以至少进行16分频的电路,这里我们选择四位二进制计数器进行分频的操作,并搭配M4_1E数据选择器进行八度的控制。
将十二分频电路的输出作为时钟信号输入四位二进制计数器,则其输出端口Q(3:0)分别对应着第3,4,5,6八度;然后将Q(3:0)接入数据选择器的D(3:0),数据选择器的控制端S0,S1分别接入控制电路输出端D5,D4,实现八度分频的控制。电路图如下。
图22 八度分频电路电路图
4.6响度控制电路
八度分频电路的输出经过控制器的休止态组合逻辑电路之后,实现了除响度控制之外所有的功能。由于响度控制电路的特殊性(同时存在于FPGA内和FPGA外),所以将其作为音频信号处理的最后一级。
4.6.1 FPGA内部
在响度控制电路的前半部分电路中,我巧妙的使用了二四线译码器,通过将音频信号输入译码器的使能端,我们实现了可控制的信号一分四。译码器的控制端A0,A1分别接入控制电路输出端的D6,D7。通过ROM中规定的强弱编码将完整的音频信号拆分到四个输出端口,分别是Ruo(弱),ZhongRuo(中弱),ZhongQiang(中强),Qiang(强)。通过外部电路对四路信号输出进行进一步的处理最终实现响度的调整。FPGA内部电路图如下。
图23 FPGA内部响度控制电路图
4.6.2 FPGA外部
在响度控制电路的后半部分,我们将FPGA引出的四路信号分别通过10k可调电阻接地,调节每一路可调电阻的阻值,可调端子输出的电压不同,信号的强弱不同,最终实现声音的响度变化。
将四路信号分别从可调电阻端子引出后,我们将其并成一路信号通向功放电路,为了防止各路信号互相干扰,我们在并入前为每一路信号加上二极管1N4148,利用其单向导通信防止串扰。
整体电路图如下。
图24 FPGA外部响度控制电路图
4.7功率放大电路
在功率放大电路中,使用LM386构建放大电路[6],器件管角图如下:
图25 LM386管角图
整体电路图如下:
图26 功率放大电路电路图
4.8时序电路分析
在控制电路的控制器ASM图章节,为了简化设计我们只关注了大状态机而忽略了许多小状态机,这就导致控制电路的时序不够严谨,可能会导致时序不同步的问题。
控制器中的ROM和GAL共用8Hz时钟。ROM在接收到曲地址和音符单元地址Q(9:0)后,对外部输出8度分频控制和响度控制信号,在控制器内部对GAL输出A(3:0),GAL根据ROM的输入对十二音阶分频电路输出控制信号,完成最短时间单元音符的产生与控制。但是在这个过程中,GAL接收到ROM的输入后需再等待一个时钟的上升沿才能对外输出十二音阶分频电路控制信号,原本应该在一个时钟周期内完成的操作分列在了两个时钟周期,这就导致了时序的不同步。
为了解决这个问题,我们为ROM直接对外输出的每个控制信号分别加上FD触发器,触发器的时钟接CLK_8,强制将这些信号向后顺延一个时钟周期,从而实现控制信号的时序同步。时序模块电路图如下。
图27 时序模块电路图
4.9拾音灯电路
人耳对于声音响度的辨别不是线性的而是指数的,因此电阻的调节可能会出现不同强弱通道阻值极为接近的情况,一点细微的差别都可能“差之毫厘,谬以千里”,单纯依靠人耳去调节可能会十分困难。
而拾音灯电路可以将声音的强弱转化为亮起灯珠的数量来展示,这十分利于响度控制电路中可调电阻的调整。拾音灯的灯珠有不同颜色,不同颜色数量按指数关系排列,因此我们只需要让不同强弱的声音使拾音灯刚好亮起对应颜色的灯珠即可较为精准的调节声音的响度。
拾音灯使用LM358做为电压比较器驱动,通过对比麦克风的电压控制不同数量的灯珠亮起,模块中的可调电阻可用于调节整体灵敏度,使整体声音强弱在测量范围内。拾音灯的电路图如下。
图28 拾音灯电路图
4.10乐曲编码
ROM中每一个音的要素有强弱,八度和十二音阶三个部分。四个强弱需要两位编码,四个八度需要两位编码,十二音阶则需要四个编码,因此我们规定ROM的宽度为8,具体编码定义如下:
图29 ROM编码定义图
4.10.1乐曲节拍
ROM中每位深度存储均代表最短时间间隔音符,因此乐曲的节奏是依靠存储相同音符的相邻存储字单元的多少来完成的。在找到一首乐谱后,根据其速度和最小时值音符综合确定乐曲节拍中的每个音符时值用几位深度存储,这样可以粗略的保证和原曲的速度相近,保留原曲的情感。在速度均可的情况下用更少的存储深度位数存储标准时值音符可以延长乐曲的播放时间。
4.10.2乐曲音调
通过将其他乐谱转化为固定调式简谱,我们可以非常轻松的从中得出音符的十二音阶和八度信息。
4.10.3音符强弱
每一种音乐的节拍都有其固定的强弱变化规律,例如四四拍的强弱变化规律为:强,弱,中强,弱。但并非所有乐曲的所有部分都严格按照此规律变化,所以判断音符强弱更重要的是体会乐曲的情感,乐曲情感可以通过播放录音或是轻声哼唱的方式来获得,体会出情感后可以用笔在乐谱上以趋势线的形式将声音的强弱画出。将歌曲的高潮顶点确认为强,将乐曲的低点确认为弱,然后根据趋势线进行延伸,便能较为简单地判断出整首乐曲的强弱。
4.10.4乐曲改编与适应
受限于可编程自动演奏电路的缺陷,直接照搬乐谱可能并不会获得最好的播放效果。
可编程自动演奏电路无法断奏,所以在遇到节奏较慢或是出现连续相同音时将无法听出区别。如果试听时出现以上问题,可以尝试将出现连音的音符的最后一个最小单元改为休止符人为制造断奏效果,尤其适用于不同小节首尾音相同的情景。
例如歌曲《信达天下》中,第12小节和13小节(图30中红框处)首尾音调相同,在播放时会出现连音的现象。编写ROM时将第12小节存储器最后一位深度改为休止符,可以使播放有明显的节奏感。
图30 《信达天下》固定调简谱片段
可编程自动演奏电路音色单调,没有层次感。若某一乐句结尾的音时值很长听起来将非常枯燥。如果存在上述问题,我们可以尝试进行改编,加入低音和弦,将时值长的音时值减少一半,剩下的一半使用伴奏低音和弦中的主音替代,主音一般为伴奏和弦中最高的音。
例如在乐曲《众水之诗》中,通过在空白节拍处加入低音和弦(红色圈出的部分)可以明显的丰富乐曲的层次感。
图31 《众水之诗》固定调简谱片段
可编程自动演奏电路音色单一,在高频时人耳听取会有不适感。对此建议将乐谱整体降低8度可能会有更好的播放表现。
4.10.5综合编写实例
这里以本作品存储的第一首乐曲为例进行说明。
图32为南京邮电大学校歌《信达天下》的固定调简谱,由左上角的信息可知,这是一首四四拍的歌,每小节有四拍,每拍一个四分音符。
规定ROM中每两位最小深度单元代表一个四分音符,一个小节就有八位深度。
图32 《信达天下》固定调简谱片段
在第一小节中,我们先来判断每个音符的时值,时值的简谱记法如图33所示。
图33 时值的简谱记法
根据此表格,“3”为二分音符,占用ROM中4位深度;“1”为四分音符,占用ROM中两位深度;“高音1”为四分音符,占用ROM中两位深度。
接下来是十二音阶判断,判断规则如下表。
表6 十二音阶ROM编码对照表
简谱音调名 | 对应ROM编码 |
---|---|
1 | 0000 |
♭2,#1 | 0001 |
2 | 0010 |
♭3,#2 | 0011 |
3 | 0100 |
4 | 0101 |
♭5,#4 | 0110 |
5 | 0111 |
♭6,#5 | 1000 |
6 | 1001 |
♭7,#6 | 1010 |
7 | 1011 |
0 | 1100 |
由表格可知,“3”对应的编号为0100,“1”对应的编号为0000。
八度判断的规则如下:
图34 简谱八度符号与ROM编码对应图
第三个8度为低音8度,通过在数字上下加一点表示;第四个8度为中音8度,无附加符号;第五个8度为高音8度,在数字上上加一点表示;第六个8度为倍高音8度,在数字上上加两点表示。
在歌曲信达天下的第一小节中,“3”无附加符号,所以是中音8度,8度编码为:01;“1”无附加符号,所以是中音8度,8度编码为:01;“高音1”有上加一点,所以是高音8度,8度编码为:10。
歌曲的前两小节中,“峰”为最高音,开头的“齐”为中弱音,“鲁”的前半部分为最低,后半部分有突然升高的感觉,因此,综合评判第一小节中音符的声音强弱为:中弱,弱,中强,对应的编码为:01,00,10。
因此,乐曲的第一小节整体编码为:
表7 示例乐曲第一小节ROM编码
序号 | D7 | D6 | D5 |
---|---|---|---|
强弱 | 八度 | 十二音阶 | |
1 | 0 | 1 | 0 |
2 | 0 | 1 | 0 |
3 | 0 | 1 | 0 |
4 | 0 | 1 | 0 |
5 | 0 | 0 | 0 |
6 | 0 | 0 | 0 |
7 | 1 | 0 | 1 |
8 | 1 | 0 | 1 |
转化为16进制编码后为:
54,54,54,54,10,10,A0,A0。
4.10.6乐曲原谱与编码
本次课程设计写入的三首歌曲分别为《信达天下》,《众水之诗》,《所念皆星河》,乐曲原谱与ROM编码详见附录。
4.11整体电路图
整体电路图如图35所示。
图35 整体电路图
电路RTL网表如图36所示。
图36 总电路RTL网表
第5章:调试
5.1 FPGA仿真
得益于ISE编辑器可以随时仿真的特性,我们可以在不烧录FPGA的情况下方便快捷的排查原理图和代码的问题,提高排查效率。
5.1.1仿真方法与操作
由于仿真时需要加入中间变量输出,故将仿真状态下的整体工程单独另存为一个新的文件夹,文件夹名为electronicorgan_testbench。
首先在原始原理图中添加测试引脚,修改过后的引脚信号列表如表8所示。
信号类别 | 信号名 | 说明 |
---|---|---|
输入信号 | CLK_535808 | 535808Hz时钟信号 |
CLR | 清零信号 | |
CLK_8 | CLK_8时钟信号 | |
内部信号 | [7:0] XLXN_15 | 十二音阶分频控制命令 |
输出信号 | LED_1 | 红色LED |
LED_2 | 蓝色LED | |
LED_3 | 绿色LED | |
Shierfenpin | 十二音阶分频输出 | |
Badufenpin | 八度分频输出 | |
Qiang; ZhongQiang; ZhongRuo; Ruo; | 响度电路输出 |
表8 仿真信号表
修改后的原理图如下图所示。
图37 仿真原理图
由于该系统输入输出变量较多,仿真时间长且操作复杂,编写Verilog Test Fixture可以极大的提升效率。
将Verilog Test Fixture文件命名为:electronicorgan_tb.v,Verilog测试代码详见附录。
值得注意的是,由于ISE仿真器的特性,部分器件需要CLR信号先置1然后置0来激活,所以原理图特别设置了CLR总线。但由于本设计时序结构较为复杂,单纯的一次CLR信号变动无法使所有器件同时启动,所以测试代码中有两次CLR变动信号。此外CLR激活信号在实际的FPGA上是不需要的,实际烧录后直接将CLR信号输入端悬空即可,不必删除整个CLR总线。
编写好测试代码后,选中electronicorgan_tb.v文件,点击下方的Simulate Behavioral Model即可进入仿真界面。
由于仿真时间过长,为了避免仿真器因长时间仿真报错和多次点击仿真按钮,我们将CLK_535808频率加快的同时将单次仿真时间调整为1.00s,如图38红圈所示,然后点击仿真按钮,仿真结束后将视图调整为合适的大小。
图38 单次仿真时间调整按钮位置图
5.1.2仿真结果
在仿真中,通过人为激励时钟信号来获得输出,仿真波形图结构从上至下分别是:535808Hz时钟信号,CLK_8时钟信号,十二音阶分频控制命令,十二音阶分频输出,八度分频输出,响度电路输出,LED输出,按钮输入,清零信号输入。
第一首乐曲的仿真结果如图所示。
图39 第一首乐曲仿真结果图
通过观察乐曲强弱信号输出我们可以很方便的看出整体的仿真情况。图中两个红框标出的位置为乐曲重头播放的重复部分,证明乐曲可以循环播放:
将时间轴缩短,观察局部区域各信号,局域信号如图40所示,可以看出十二分频控制信号切换后输出信号频率明显改变。
图40 第一首乐曲局部区域仿真结果图
在模拟按钮按下并弹起后,LED_1熄灭,LED_2亮起,播放器切入第二首乐曲并从头开始播放,仿真截图如图41所示。
图41 乐曲切换区域仿真结果图
第二首乐曲的仿真结果如图42所示。
图42 第二首乐曲仿真结果图
第三首乐曲的仿真结果如图43所示。
图43 第三首乐曲仿真结果图
休止状态的仿真结果如图44所示。
图44 休止状态仿真结果图
整体仿真结果如图所示。
图45 整体仿真结果图
由上述图片可知,系统各部分功能运行正常,成功输出了带有强弱信号的声音信号。
5.2外部电路调试
5.2.1振荡电路
振荡电路实物与波形图如图46和图47所示,通过将输出接入示波器我们可以看出输出方波较为准确,频率较为准确,符合设计要求。
图46 振荡电路实物图
图47 振荡电路波形图
5.2.2响度控制电路与放大电路
响度控制电路与放大电路部分实物电路图如图48。
图48 响度控制电路与放大电路实物电路图
通过编写测试音频播放文件,使用拾音灯查看声音响度并对各路电阻器进行调整,我们得到了与人耳听感相符合的声音强弱变化规律,电阻实测值如图49。
图49 响度控制电路与放大电路电阻实测值图
最终导入正式音乐文件播放,电路圆满完成设计要求。
5.3实验故障及处理
这里重申一下之前设计中提到的易错注意点。
实验故障1:初次仿真后发现八度控制混乱,四个八度的测试音阶被重新排列组合。
解决方法:检查原理图和分析后发现八度分频电路中计数器和数据选择器的接线错误,修改后恢复正常。
实验故障2:控制电路中部分信号的发出并不在同一个时钟周期,导致信号混乱。
解决方法:通过给超前的信号增加FD触发器来实现信号的同步。
实验故障3:响度控制电路的外部部分中,不同响度信号通道最后并入放大器后会产生严重的信号干扰。
解决方法:为每路信号的结尾加上二极管即可防止信号干扰。
第6章:设计小结
6.1设计任务完成情况
经过为期两周的设计,本次课程设计的所有基础指标圆满实现,同时增加了音乐强弱变化,音乐强弱可视化等扩展技术指标;电路按照高标准搭建,横平竖直,具有电路美学;写入的乐曲经过多次调整优化,并非直接照抄原谱,音乐富有层次感,更加适合可编程电子音乐演奏电路播放,同时单曲播放时长高达1分04秒。
6.2问题分析与改进
问题一:该播放电路的最短时间间隔音符较大,无法很好的播放某些快节奏的乐曲。
改进方法:可以通过提高节拍信号的频率来实现播放更短的音符,同时需要增加ROM深度防止出现演奏时间大幅缩短的情况。
问题二:该播放电路单位时间内只能播放一个音调,无法真正实现和弦导致音乐的层次感减弱。
改进方法:和弦的本质是声音的共振,直接实现较为复杂,比较可行的改进思路是建立两路单独的演奏电路分别演奏不同的音调,最后在放大电路中并联或使用两路放大电路。
问题三:该演奏电路的音域范围不够广,只能实现四个八度,无法满足某些音域较广的乐曲需求。
改进方法:可以整体提高十二音阶分频电路的基准频率,然后在八度分频中采用位数更多的计数器和数据选择器以实现更多的八度,需要注意的是控制电路中的ROM宽度也需要随之更改。
6.3心得体会
两周的电工电子课程设计即将结束,虽然时光短暂,但其中的收获却是终身难忘的。
首先,我感到十分幸运能够得到唐老师的悉心指导,他是一位循循善诱的好老师,不仅拥有着出色的专业技能,还表现出极大的耐心。在整个课程设计过程中,唐老师与我们一直保持着积极的交流,并鼓励同学之间进行讨论。遇到难题时,他总是通过启发我们的思考来引导我们找到答案。这不仅让我们学到了知识,更重要的是教会了我们独立思考的方法。在后学习时代,真正值得珍视的是学习的方法和思考的过程,从别处获取的知识永远只是别人的知识,通过自己思考独立总结出的知识才是属于自己的知识,唐老师的教导让我懂得了学习与思考的真谛,他的言传身教深深感染着身边的每一位同学。
在具体的电路设计上,课程设计要求我们采用自顶而下的设计方法,这在无形中培养了我们的宏观意识和大局观,每一个微小的电路单元能力有限,但是如果用巧妙的电路将它们组合起来便可以发挥强大的功能。这让我想到一滴水只有融入广袤的湖海中才能发挥最大的价值,我们的人生亦如此。作为新时代的青年,我们要有海纳百川的胸襟,观大局,识时务,入细微,这要求我们不仅要有宏观规划和统筹协调的能力,更要有深入分析的能力,把大目标化为分目标,再化为小目标,自上而下,统筹设计,做到不顾此失彼,全局均衡。
在电路的搭建上,我十分注重电路的细节与美学,每一条导线都在草稿本上经过精心规划,确保没有出现跨越;横平竖直不仅仅是对自己的高要求,更是一种匠心精神,将电路当成一件艺术品去对待,小心的弯曲每一个引脚,用心布置每一个元器件,使得每一条导线都横平竖直,每一颗电阻都整齐划一。在FPGA的原理图中,我同样不忘初心,让原理图尽可能的整洁美观,极大的增强了原理图的可读性。对匠心精神的追求使我的精神达到了更高的境界,这是对自我的一次突破。
为什么我们要进行课程设计实验周?过去,我和许多同学一样,认为这门课离我们的生活很远,与我们的专业也很远,上两周的课不如去学习考研数学。但是当我真正接触了这门课之后,才发现了学校编排课程体系的良苦用心。在这里,我要纠正某些同学认为实践课不如理论课重要的错误看法,课程设计是微电子科学与工程课程体系中不可或缺的一环,它带给我们的不仅是理论,更是一次设计的实践,它补全了我们数字电路课程中的实践版图,使得理论和实践相结合。纸上得来终觉浅,绝知此事要躬行。只有真正的体会到了设计的全流程,我们才能更好地理解所学的数电知识。
难忘的实验周即将结束,天下也没有不散的宴席。“齐鲁烽火,战邮发祥”,正如我所录制的第一首乐曲一样,集家国情怀和和国脉担当为一体的战邮精神需要我们新时代南邮人去继续发扬光大,我将怀揣着对匠心精神的憧憬与向往,继续在我的专业方向上努力奔跑,早日成长为对国家对社会有贡献的人。
参考文献
[1]20分钟乐理通俗讲解[EB/OL].https://www.bilibili.com/video/BV1Vf4y1H75Y,2021-08-31.
[2]郭宇峰.电子系统设计与实践教程第2版[M].北京:人民邮电出版社,2022年:101-107.
[3]王金明.数字系统设计与Verilog HDL(第7版)[M].北京:电子工业出版社,2019年:117-133.
[4]黄丽亚,杨恒新,朱莉娟,张苏.数字电路与系统设计[M].北京:人民邮电出版社,2015年:233-290.
[5]ISE中总线-分支的连接方法[EB/OL]. https://www.bilibili.com/video/BV1nR4y1A7AN,2022-05-08.
[6]清华大学电子学教研组.模拟电子技术基础(第五版)[M].北京:高等教育出版社,2015年:123-174.
附 录
附录1:预习报告电路草图
附录2:整体电路图
附录3:Verilog 8Hz分频模块代码
module div(clk,rst_n,clk_div
);input clk,rst_n;output clk_div;reg clk_div;reg [16:0] counter;
always @(posedge clk or posedge rst_n)if(rst_n)counter <= 0;else if(counter==33487)counter <= 0;elsecounter <= counter+1;always @(posedge clk or posedge rst_n)if(rst_n)clk_div <= 0;else if(counter==33487)clk_div <= ~clk_div;
endmodule
附录4:Verilog激励文件代码
`timescale 1ns / 1psmodule electronicorgan_electronicorgan_sch_tb();// Inputsreg CLK_535808;reg CLR;reg Button;// Outputwire [7:0] XLXN_15;wire LED_1;wire LED_2;wire LED_3;wire Shierfenpin;wire Qiang;wire ZhongQiang;wire ZhongRuo;wire Ruo;wire Badufenpin;wire CLK_8;// Bidirs// Instantiate the UUTelectronicorgan UUT (.CLK_535808(CLK_535808), .CLR(CLR), .XLXN_15(XLXN_15), .Button(Button), .LED_1(LED_1), .LED_2(LED_2), .LED_3(LED_3), .Shierfenpin(Shierfenpin), .Qiang(Qiang), .ZhongQiang(ZhongQiang), .ZhongRuo(ZhongRuo), .Ruo(Ruo), .Badufenpin(Badufenpin), .CLK_8(CLK_8));
// Initialize Inputsinitial beginCLK_535808 = 0;CLR = 0;Button = 0;#40000CLR = 1;#40000CLR = 0;#5000000Button = 1; #5000000Button = 0; #4000000CLR = 1;#4000000CLR = 0;#5000000Button = 1;#5000000Button = 0; #250000000Button = 1;#5000000Button = 0; #250000000Button = 1;#5000000Button = 0; #250000000Button = 1;#5000000Button = 0; #250000000Button = 1;#5000000Button = 0; #250000000Button = 1;#5000000Button = 0; endalways #5 CLK_535808 = ~CLK_535808;
endmodule
附录5:ROM测试乐谱编码
memory_initialization_radix=16;
memory_initialization_vector=
80,82,84,85,87,89,8B,90,
92,94,95,97,99,9B,A0,A2,
A4,A5,A7,A9,AB,B0,B2,B4,
B5,B7,B9,BB,BB,BB,BB,BB,
10,10,10,10,10,10,10,10,
10,10,10,10,10,10,10,10,
50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,
90,90,90,90,90,90,90,90,
90,90,90,90,90,90,90,90,
D0,D0,D0,D0,D0,D0,D0,D0,
D0,D0,D0,D0,D0,D0,D0,D0,
D0,D0,D0,D0,D0,D0,D0,D0,
D0,D0,D0,D0,D0,D0,D0,D0,
90,90,90,90,90,90,90,90,
90,90,90,90,90,90,90,90,
50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,
10,10,10,10,10,10,10,10,
10,10,10,10,10,10,10,10,
20,20,20,20,20,20,20,20,
20,20,20,20,20,20,20,20,
60,60,60,60,60,60,60,60,
60,60,60,60,60,60,60,60,
A0,A0,A0,A0,A0,A0,A0,A0,
A0,A0,A0,A0,A0,A0,A0,A0,
E0,E0,E0,E0,E0,E0,E0,E0,
E0,E0,E0,E0,E0,E0,E0,E0,
2B,2B,2B,2B,2B,2B,2B,2B,
6B,6B,6B,6B,6B,6B,6B,6B,
AB,AB,AB,AB,AB,AB,AB,AB,
EB,EB,EB,EB,EB,EB,EB,EB,
附录6:ROM乐谱编码
memory_initialization_radix=16;
memory_initialization_vector=
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
80,80,80,80,80,80,80,80,
54,54,54,54,10,10,A0,A0,
E0,E0,E0,E0,97,97,97,97,
99,99,99,57,55,54,12,12,
10,10,10,10,10,10,10,10,
54,54,54,54,57,57,A0,A0,
E2,E2,A2,A0,59,59,99,97,
55,55,54,54,52,52,52,54,
12,12,12,12,12,12,12,12,
54,54,54,54,10,10,A0,A0,
E0,E0,E0,E0,17,17,57,57,
9B,9B,9B,A0,E2,E2,E0,DB,
99,99,99,99,99,99,99,9C,
59,59,59,9B,A0,A0,9B,A0,
E2,E2,A0,9B,99,99,59,57,
55,55,54,54,12,12,12,14,
10,10,10,10,10,10,57,57,
54,54,55,55,97,97,97,A0,
E0,E0,E0,E0,E0,EC,A0,9B,
59,59,9B,9B,E0,E0,E0,99,
97,97,97,97,9C,9C,57,57,
54,54,55,55,57,57,57,A0,
99,99,99,99,99,9C,99,97,
55,55,54,54,54,54,14,14,
12,12,12,12,1C,1C,59,59,
57,57,57,59,97,97,A0,A0,
E4,E4,E4,E4,E4,E4,A2,A0,
5B,5B,60,60,E2,E2,E2,E0,
99,99,99,99,99,99,17,17,
59,59,5B,5B,A0,A0,A4,A4,
A2,A2,A2,A0,D9,D9,D9,D9,
DB,DB,E0,E0,E0,E0,E0,E2,
E2,E2,E2,E2,E2,E2,E2,E2,
17,17,59,59,9A,9A,9A,E5,
9A,9A,80,80,A4,A4,60,60,
59,59,59,59,59,59,07,07,
17,17,59,59,9A,9A,9A,E5,
9A,9A,00,00,E7,E7,A4,A4,
60,60,60,60,60,60,05,05,
54,54,60,60,A1,A1,A1,E8,
E7,E5,E7,E7,5A,5A,5A,5A,
A0,A0,A0,E7,E5,E3,E5,E5,
58,58,57,58,5A,5A,5A,A5,
A4,62,A4,A4,A4,A4,65,65,
65,65,50,50,52,52,54,54,
54,54,52,52,F0,F0,F0,F0,
F2,F2,F4,F4,F4,F4,F5,F5,
6C,6C,61,61,A3,A3,A4,A4,
A4,EB,A4,A4,06,56,AA,AA,
66,66,63,63,63,63,63,63,
0B,0B,61,61,A3,A3,A4,A4,
A4,EB,E4,E4,06,16,F1,F1,
AA,AA,A6,A6,A6,A6,A6,A6,
23,23,64,64,A6,A6,A7,A7,
A7,F2,F1,EB,F1,F1,64,64,
64,64,66,66,66,B1,AB,A9,
AB,AB,62,62,61,62,64,64,
64,6B,69,67,66,66,A8,A8,
EA,EA,EB,EB,25,67,68,AA,
F1,F2,F2,F0,F0,FC,F5,F2,
F2,E7,E7,E5,E7,F2,F2,EA,
EA,EC,E7,F2,F2,F0,F0,EA,
EA,F0,F0,F0,5A,58,5A,60,
60,60,6A,68,6A,70,70,70,
60,6A,60,A2,A2,A2,A2,A2,
23,25,71,B0,B1,68,68,68,
A3,A5,B1,B0,B1,68,68,68,
A3,A5,B1,B0,B1,68,68,68,
A5,A3,68,65,65,65,65,1A,
63,65,B1,B0,B1,68,68,68,
A3,A5,B1,B0,B1,68,68,68,
68,68,68,31,75,55,55,9A,
9A,A0,A0,A1,A1,A1,A1,1A,
63,65,B1,B0,B1,68,68,68,
A3,A5,B1,B0,B1,68,68,68,
A3,A5,B1,B0,B1,68,68,68,
A5,A3,68,A5,A5,A5,A5,1A,
63,65,B1,B0,B1,68,68,68,
A3,A5,B1,B0,B1,68,68,68,
B1,B0,B3,B1,B1,98,98,61,
61,66,66,65,65,65,65,65,
18,5A,A5,E3,E5,A1,A1,A1,
D8,DA,E5,E3,E5,A1,A1,A1,
D8,DA,E5,E3,E5,A1,A1,A1,
E3,A1,E0,A1,A1,D1,D1,15,
58,9A,E5,E3,E5,A1,A1,A1,
D8,DA,E5,E3,E5,A1,A1,A1,
E8,A1,E3,E5,E5,48,48,91,
91,D6,D6,D5,D5,08,08,4B,
98,9A,E5,E3,E5,A1,A1,A1,
D8,DA,E5,E3,E5,A1,A1,A1,
D8,DA,E5,E3,E5,A1,A1,A1,
E3,A1,E0,A1,A1,11,11,55,
98,9A,E5,E3,E5,A1,A1,A1,
D8,DA,E5,E3,E5,A1,A1,A1,
E8,A1,E0,A1,A1,88,88,56,
56,08,08,15,15,15,15,15,
附录7:乐曲原谱图片
附录图1 《信达天下》固定调简谱第一页
附录图2 《信达天下》固定调简谱第二页
附录图3 《众水之诗》原始五线谱第一页
附录图4 《众水之诗》原始五线谱第二页
附录图5 《众水之诗》固定调简谱第一页
附录图6 《众水之诗》固定调简谱第二页
**
**
附录图7 《所念皆星河》原始五线谱第一页
附录图8 《所念皆星河》原始五线谱第二页
附录图9 《所念皆星河》固定调简谱第一页
附录图10 《所念皆星河》固定调简谱第二页
附录8:实物照片
附录图11 俯视图
附录图12 震荡电路图
附录图13 响度控制与放大电路图
未经作者许可禁止转载
这篇关于南京邮电大学可编程电子音乐自动演奏电路报告(电子电路课程设计)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!