1、
数字电路实验报告
简易电子琴设计与实现
班级:2010211204
学号:10210992
姓名:许鹏
2012年11月11号
目录
一.实验介绍 2
1.实验目的 2
2.实验所用仪器及元器件 2
3.实验内容 2
基本内容 2
提高要求 3
4.实验原理 3
二.实验设计与实现 4
1.实验思路 4
2.程序设计 5
3.仿真波形及分析 9
三.故障及问题分析 10
四.实验总结 10
一.实验介绍
1.实验目的
(1)进一步掌握VHDL和Quartus II软件的使用;
2、
(2)理解状态机的工作原理和设计方法;
(3)掌握利用EDA工具进行自顶向下的电子系统设计方法。
2.实验所用仪器及元器件
(1)计算机;
(2)EDA开发板及相应元器件。
3.实验内容
基本内容
1.用8×8点阵显示“1 2 3 4 5 6 7”七个音符构成的电子琴键盘。其中点阵的第一列用一个LED点亮表示音符“1”,第二列用二个LED点亮表示音符“2”,依此类推,如下图所示:
2. 用BTN1~BTN7七个按键模拟电子琴手动演奏时的“1 2 3 4 5 6 7”七个音符。当某个按键按下时,数码管显示相应的音符,点阵上与之对应的音符显示列全灭,同时蜂鸣器演奏相
3、应的声音;当按键弹开时数码管显示的音符灭掉,点阵显示恢复,蜂鸣器停止声音的输出。下图所示为按下BTN3按键时点阵的显示情况:
3. 由拨码开关切换选择高、中、低音,并用数码管进行相应的显示。
4.通过按键BTN0进行复位,控制点阵显示图1的初始状态。
提高要求
1.可通过一个拨码开关进行手动/自动演奏的切换,并与点阵显示配合增加自动演奏乐曲的功能。
2.增加手动演奏的音符存储、播放功能。
4.实验原理
因为音阶的频率我们是知道的,设为f,而max2板上的clk信号是50MHz,所以要得到需要的f,只需要n=50M/f 就可以得到分频的倍数了。以下是已知的所需频
4、率f。
音名
频率(Hz)
音名
频率(Hz)
音名
频率(Hz)
低音1
261.63
中音1
523.25
高音1
1046.50
低音2
293.67
中音2
587.33
高音2
1174.66
低音3
329.63
中音3
659.25
高音3
1381.51
低音4
349.23
中音4
698.46
高音4
1396.92
低音5
391.99
中音5
783.99
高音5
1567.98
低音6
440
中音6
880
高音6
1760
低音7
439.88
中音7
987.76
5、高音7
1975.52
二.实验设计与实现
1.实验思路
逻辑实验图如下:
开始
档位选择
高音档位
低音档位
中音档位
蜂鸣器
不同档位不同分频
Btn按钮
简要设计思路及实现过程:
通过按下BTN1-BTN7七个按钮,结合拨码开关状态(高中低),将实验板上的原始时钟信号50MHZ进行21种不同的分频,分频系数M=50M/f。得到的clk_out直接给beep对应的管脚就行了。
2.
6、程序设计
首先从点阵模块和数码管显示档位开始写:
以上是in,out信号和signal信号的定义(ps包括我的自动播放)
点阵模块的分频器,其显示原理和去年的数码管一样,就是让点阵不停的闪动,其频率超过人眼识别的能力,于是就能看到一直亮着的点阵了。
这个是数码管显示音阶档位,三档分别对应数字1,2,3
因为点阵的显示要与btn的按钮有关,所以case里面嵌套了一个判断,如果btn有输入,就让对应的列点阵全部熄灭,已达到要求的效果。
这个就是三个音阶的分频了,switch控制音阶,然后num和num_2是分频系数。
得到的分频系
7、数,经过分频器,就能得到所需要的clk信号,输出到beep对应的管脚就能行了。
至此,已实现了点阵显示,数码管显示档位,按键出音,其实这前面的基本任务完成起来很快,只是后面的自动播放一直没有实现,虽然和同学讨论了很多次,但是最终还是以失败告终。感觉自己的想法和被人是一样的,却总是不能达到想要的结果……哎……
3.仿真波形及分析
因为分频器不好做仿真,我也只能做一个点阵的仿真了
可以看到,当a周期变化的时候,总有一个时刻是全零的状态,这是因为这个时刻受btn0的影响,使a=”00000000”,于是对应的点阵是熄灭状态(ps.a是row)
三.故障及问题分析
8、
1. 关于基本功能的实现,刚开始编译的时候,没按键的情况下蜂鸣器也会不停的想,后面经过和同学的讨论,发现当没有btn按键的时候,即case为when others的时候,会让先进行clk_out<=1的赋值,所以把它改成clk_out<=0,问题就解决了。
至于其他的基本功能基本上没费什么力气就解决了。
2.但是……关于自动播放,我真是下了好大的力气,还是没能解决,
①.自动播放的速度不是我按我想要的频率响的
②.我放进去的曲子也不是按我所规定的响
③.总是乱响……
各种问题都不能解决……
四.实验总结
因为暑假的时候自己有摸过VHDL,所以这次实验课的时候上手特别快,很快就把基本功能实现了,就剩下一个自动播放一直让我纠结。也许确实是投入了很多时间在这个自动播放上,却没有一个好的结果,但是其过程很让我充实,通过和同学的讨论,自己了解到了他们的想法,虽然他们大多都是参考了一个模板来构造自己的程序的。其实自己也做得挺好的了,因为所有的代码都是我自己一个一个的敲的,完全源于自己,已经把我所有的想法都放到代码里了,我觉得这也就足够了,“尽吾志者二部能至也,可以无悔矣”~
总的来说,这次试验还是蛮好玩的,而我也选了一个最好玩的电子琴来玩~~希望以后还有机会接触到类似的一些试验吧。
12