FPGA简易电子琴设计Word文档下载推荐.docx
《FPGA简易电子琴设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《FPGA简易电子琴设计Word文档下载推荐.docx(43页珍藏版)》请在冰豆网上搜索。
用QuartusII进行后仿真。
4.FPGA课程设计详细内容
4.1技术规范
4.1.1原理
简易电子琴的设计通过软硬件结合实现,硬件系统包括主控制器芯片、LED、蜂鸣器等,软件资源包括编写VerilogHDL程序的应用软件Modelsim和仿真软件QuartusII。
电子琴有自动播放功能。
播放功能中有三首曲子。
程序共有六个模块,分别为主模块、数码管显示模块、分频模块、计数器模块、存储器模块、音频输出模块。
硬件实现是用一个数码管显示当前播放的曲目,另外四个按键key1、key2用来选择曲目。
通过主模块调用各模块实现电子琴的功能。
乐曲演奏的原理:
组成乐曲的每个音符的频率值(音调)以及持续时间(音长)是乐曲能持续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号的频率的高低和持续的时间,就可以使扬声器发出持续的乐曲声。
●音调的控制
频率的高低决定了音调的高低。
音乐的十二平均率规定:
每两个八度音(如简谱中的中音1与高音1)之间的频率相差一倍。
在两个八度音之间,又可分为十二个半音,每半个音的频率比为
。
另外,音名A(简谱中的低音6)的频率为440HZ,音名B到C之间,E到F之间为半音,其余为全音。
由此可以计算出简谱中从低音1至高音1之间的每个音名对应的频率如图所示:
音名
频率(HZ)
低音1
261.6
中音1
523.3
高音1
1046.5
低音2
293.7
中音2
587.3
高音2
1174.7
低音3
329.6
中音3
659.3
高音3
1318.5
低音4
349.2
中音4
698.5
高音4
1396.9
低音5
392
中音5
784
高音5
1568
低音6
440
中音6
880
高音6
1760
低音7
493.9
中音7
987.8
高音7
1975.5
所有不同频率均从同一基准频率分频得到。
将分频数四舍五入进行取整,并尽量减小误差。
在本设计中选取5MHZ作为基准频率。
从下表中可以看出最大分频系数为11468,采用14位二进制计数器分频可满足要求。
此外还应给出预置数,对应不同的预置数,只需加载不同的预置数即可。
采用加载预置数实现分频的方法比采用反馈复零法节省资源,实现起来更加容易。
分频比
预置数
9557
6826
4777
11606
2389
13994
8512
7871
4257
12126
2128
14255
7585
8798
3792
12591
1896
14487
7159
9224
3579
12804
1790
14593
6378
10005
3189
13194
1594
14789
5682
10701
2841
13524
1420
14963
5062
11321
2531
13852
1266
15117
●音长的控制
音符的持续时间须根据音乐的速度及每个音符的节拍数来确定。
如果设定全音符的持续时间为1S的话,假设产生4分音符,则产生四分频即可实现四分音符的时长,并提供4HZ分频器。
如图为乐曲演奏的原理图,其中,乐谱产生电路用来控制音乐的音调和时长。
控制音调通过设置计数器的预置数来实现,预置不同的数值会可以使计数器产生不同频率的信号,从而产生不同的音调。
控制音长是通过控制计数器预置数的停留时间来实现的,预置数的停留时间越长,则该音符的演奏时间越长,如2分音符,在记谱时将该音符记录两次即可。
4.1.2总体方案
本次设计课程的目的是让我们在学习verilogHDL的基础上更加深入的了解硬件设计语言的功能、作用及其特征,并且将我们的动手能力与创新能力结合起来。
本次试验的总体框图为:
设计框图说明
4.1.3引脚描述
信号名
输入/输出
目标/源
功能描述
CLK
Input
Pin
主时钟频率,5MHZ,占空比为1:
1
DIR
使能端,控制时钟产生,以及读写同步
OUT
Output
输出乐曲信号(方波形式)
SCREEN
数码管显示信号
4.1.4顶层划分
顶层模块说明:
1.D触发器:
实现信号读取,产生内部使能端,控制分频器;
2.分频器:
实现与基准时钟同步操作,读取存储器数据进行分频操作,实现音调与音长的改变与输出;
3.节拍发生器:
根据使能端,产生对应的频率产生对应音符时长;
4.存储器:
实现将预置数传送给分频器,实现曲目的不停音调和音长;
5.2分频器:
将产生的信号再次进行2分频;
注:
音名显示控制
音名显示电路用来显示演奏乐曲时对应的音乐曲曲目名。
可以用三个数码管,
加以显示,本设计中使用HIGH[3:
0],MED[3;
0],LOW[3;
0]等信号加以显示,为了能使其循环显示,需要一时长计数器,等音乐演奏完成后,保证自动从头开始演奏。
4.1.5子模块描述
<
1>
按键接收器D触发器
1、功能描述
运用D触发器和数据锁存器实现数据线输出的使能端。
2、管脚描述
信号名称
源
目标
输入
按键输入信号
DR
输出
使能端
3、实现说明:
●在按键信号产生后,进行信号的锁存和产生使能信号。
4、验证方案
●正常的信号锁存,和信号转换;
●是否实现正确使能输出;
2>
节拍发生器分频器
1、功能描述
根据信号的输入,对应产生对应曲目的节拍频率时钟用来读取存储器音调音长数据,产生不同的预置数
2、管脚描述
输入/输出
PIN
按键输入
基准时钟频率
CK
1位节拍频率时钟
3、实现说明
在CLK的上升沿,将锁存后的DIR信号输入到内部,并根据对应时钟节拍分频,产生对应节拍频率。
4、测试
略;
3>
分频器
将基准时钟按照预置数的信息进行分频,且与时钟同步,并当使能端低电平时,停止输出,也可实现循环播放。
基准频率
VOICE
SPEAK
乐曲输出
;
通过计数器、存储器、D触发器,实现分频。
当计数从预置数到初始值时Speaker翻转一次,即为分频。
4、测试
用modelsim仿真,观察波形是否为所需方波;
4>
存储器
按照使能端的数据,选择对应的预置数据进行读操作,并且于时钟同步。
读取的预置数
数码管信号输出
通过选择,在时钟的上升沿进行数据的读取,并将读出的数据同时传至数码管,与分频器。
用modelsim仿真,观察预置数的值是否为对应曲目;
4.1.6验证方案:
正常情况下,输入一个DIR的值,查看波形输出是否正常。
改变DIR的值,再次查看波形输出是否正常,并且其频率是否满足上述的公式计算出的值。
4.1.7应用范围:
简易电子琴可以应用于简单的设计中,亦可应用于娱乐方面。
4.2设计方案
4.2.1顶层方案设计
顶层主要是对各个子模块进行调用与连接,顶层主要调用以下模块:
(1)按键驱动模块
该模块用于选择所要播放曲目。
(2)控制模块:
该模块用于处理比较所选择的功能。
(3)数码管显示模块:
该模块用于显示用户是否登陆成功,即LCD驱动。
4.2.2顶层模块程序
//信号定义与说明
//CLK_4HZ:
用于控制音长(节拍)的时钟频率
//clk_6MHZ:
用于产生各种音阶频率的基准频率
//speak:
用于激励扬声器的输出信号,本例中为方波信号
//high,med,low:
分别用于显示高音,中音和低音音符,各驱动一个数码管来显示
modulemusic(clk,key1,key0,speak,high,low,decodeout);
//顶层模块:
inputclk,key1,key0;
outputspeak,high,low;
output[6:
0]decodeout;
wire[1:
0]dir;
wireclk,key1,key0;
wireclk_5MHZ,clk_4hz;
wirespeak;
wireck,dr;
wire[11:
0]voice;
wire[6:
wirehigh,low;
assignhigh=1;
assignlow=0;
assigndir={key1,key0};
clock5mhzmhz(.clk(clk),.dir(dir),.clk_5MHZ(clk_5MHZ));
clock4hzhz(.clk_5MHZ(clk_5MHZ),.dir(dir),.ck(ck),.clk_4HZ(clk_4HZ));
Dd1(.dir(dir),.dr(dr));
DDRddr1(.dir(dir),.ck(ck),.voice(voice));
mainm(.dr(dr),.clk_5MHZ(clk_5MHZ),.clk_4HZ(clk_4HZ),.voice(voice),.speak(speak));
decodedec(.dir(dir),.decodeout(decodeout));
endmodule
//信号定义与说明
//CLK_4HZ:
//clk_6MHZ:
//speak:
//high,med,low:
moduleDDR(dir,ck,voice);
input[1:
inputck;
output[11:
wireck;
reg[7:
0]counter;
reg[3:
0]high,med,low;
assignvoice={high,med,low};
always@(posedgeck)
if(dir==2'
b00)
counter<
=0;
elseif(dir==2'
b01)//《梁祝》乐曲演奏电路
begin
if(counter==63)counter<
elsecounter<
=counter+1;
case(counter)
0:
{high,med,low}<
='
b1;
1:
2:
3:
4:
5:
6:
7:
b0;
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
default:
endcase
end
b10)//《天空之城》乐曲演奏电路
begin
if(counter==195)counter<
{high,med,low}='
//中6
//中7
//高1
//高3
//中3
//中5
//中1
//中5
//中4
63