基于硬件电路的电子琴设计.doc
文本预览下载声明
电子科学与技术专业
《集成电路课程设计》
简易电子琴设计
实验目的
使用VerilogHDL语言进行前端设计,并使用Quaruts软件在GW48-PK2实验上实现仿真,实现硬件电子琴。电子琴要求有8个音阶,使用外部时钟信号3MHz,能同步显示音阶。
二、设计要求
1、 设计一个简易电子琴。要求能演奏的音域为D调的do到E调do。
2、 用GW48-PK2中的8个按键作为琴键。
3、 GW48-PK2中有蜂鸣器。
4、 可以使用GW48-PK2上的12MHz作为输入时钟信号
三、设计思路
通过可编程逻辑器件(PLD)和VHDL硬件描述语言来实现电子琴的基本要求。 设计的主体是数控分频器,对输入的频率按照与每个音阶对应的分频系数进行分频,得到各个音阶对应的频率分别在蜂鸣器和数码管上以声音和频率数值的形式作为输出。
四、设计组成与原理
下图为系统的工作原理框图。
五、模块设计
音名与频率的关系
音乐的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。在2个八度音之间,又可分为12个半音。灵位,音符A(简谱中的低音6)的频率为440HZ,音符B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中所有的音符的频率,在这我们只需计算出中音1到高音1的频率即可。如下所示:
表一 简谱音名与频率的对应关系
音名 中音1 中音2 中音3 中音4 中音4 中音6 中音
7 高音
1 频率/HZ
523.3
587.3
659.3
698.5
784
880
987.8
1046.5 由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。实际的设计应综合考虑两方面的因素,在尽量减少频率误差的前提下取合适的时钟频率。本实验要求用12MHZ的时钟脉冲信号,所以不必考虑这方面的因素。实际上,只要各个音符间的相对频率关系不变,弹奏出来的音调听起来是不会走调的。
分频系数与初始值(预置数)
本例设计的音乐电子琴选取12MHZ的系统时钟频率。在数控分频器模块中,由于数控分频器输出的波形是脉宽极窄的脉冲波,为了更好地驱动扬声器发生,减少输出的偶次谐波分量,在到达扬声器之前需要均衡占空比,从而生成各音符对应频率的对称方波输出。这个过程实际上进行了一次二分频,频率变为原来的二分之一,即6MHZ。
因此,分频系数的计算可以按照下面的方法进行。以中音1为例,对应的频率值为523.3HZ,它的分频系数应该为:
Divider=6MHz/523.3=6*106 /523.3=11466
至于其他音符,同样由上式求出对应的分频系数,这样利用程序可以轻松地得到相应的乐声。各音名对应的分频系数如下表:
表二 各音名对应的分频系数
音名 中音1 中音2 中音3 中音4 中音5 中音6 中音7 高音1 分频系数(divider) 11466 10216 9101 8590 7653 6818 6074 5733 由于最大的分频系数为11466,故采用14位二进制计数器已能满足分频要求。将分频系数设为0,其初始值为16383(214 -1 )即可,此时扬声器不会发声。对于不同的分频系数,加载不同的初始值即可。本实验参考王金明:《Verilog HDL程序设计教程》,采用差值法进行分频。把差值作为初始值,为不同音阶的发声的来源。各音名对应的初始值如下表:
表三 各音名对应的初始值
音名 中音1 中音2 中音3 中音4 中音5 中音6 中音7 高音1 初始值(origin) 4917 6167 7282 7793 8730 9565 10309 10650
数控分频器
数控分频器是对基准频率进行分频,得到与各个音阶对应的频率输出。数控分频模块是由一个初始值可变的14位加法计数器构成,该计数器的模为214=16384,当计数器记满时,产生一个进位信号,该信号就是用作发音的频率信号。其分为预分频和脉冲展宽两部分。
预分频
assign preclk=(divider==16383)?1:0;
always@(posedge clk)
begin
if(preclk)
divider=origin;
else
divide
显示全部