EDA音乐播放器课程设计.docx
《EDA音乐播放器课程设计.docx》由会员分享,可在线阅读,更多相关《EDA音乐播放器课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
EDA音乐播放器课程设计
摘要
本课程设计是实现演奏三首乐曲演奏电路的硬件实现。
总共分为五个模块,分别为20MHZ转换1MHZ分频模块,1MHZ转换4HZ分频模块,地址计数器模块,rom存储器模块,乐音分频模块。
音符的频率由乐音分频模块获得,这是一个数控分频器。
由时钟端输入一具有1MHZ的信号,分频比由预置数值决定,其输出频率将决定每一个音符的音调。
音符的持续时间根据乐曲的速度及每个音符的节拍数来决定。
三首乐曲分别为”两只老虎”,“找朋友”,“世上只有妈妈好”。
关键词:
乐曲演奏电路,20MHZ转换1MHZ分频模块,1MHZ转换4HZ分频模块,地址计数器模块,rom存储器模块,乐音分频模块
Pickto
Thiscourseisdesignedtoplaymusicthreeplayhardwareimplementationofthecircuit.Atotalisdividedintofivemodules,respectivelyfor20MHZconversion1MHZfrequencymodule,1MHZconversion4HZfrequencymodule,addresscountermodule,ROMmemorymodule,dividingsoundmodule.Notethefrequencyofthesoundfrequencymodule,aCNCdivider.Bytheinput,asignalwith1MHZclockend,frequencydivisionratiodeterminedbythepresetvalue,theoutputfrequencywilldeterminethetonesofeverynote.Thedurationofthenotesaccordingtothenumberofspeedandeverynoteofthebeatofthemusictodecide.Threepiecerespectively"twotigers","findfriends","onlyamothergoodintheworld".
Keywords:
musicplayingcircuit,20MHZconversion1MHZfrequencymodule,1MHZconversion4HZfrequencymodule,addresscount
前 言
电子技术飞速发展,传统的电子电路设计已经满足不了人们的要求,可编程逻辑逻辑器件和EDA技术的运用大大地提高了工作效率。
大大地减轻了电路设计和PCB设计的难度。
由于本人出于对音乐的热爱,故用EDA技术设计了一款音乐播放器。
设计要求连续播放三首乐曲。
设计采取用quartusII进行仿真,然后用开发板进行测试。
基于工程领域中EDA技术应用的巨大实用价值,以及重视实践能力和创新意识培养的重要性,所以对各个模块进行了严格的测试。
这是本人的第一次的关于EDA的作品,如果有不足之处,欢迎指正,。
第1章分频器
1.1分频器
分频器有三个,分别是20MHZ转换为1MHZ分频器,1MHZ转换为4HZ分频器,乐音分频器。
1.220MHZ转换为1MHZ分频器
因为开发板提供的时钟信号为20MHZ的时钟信号,为了给乐音分频器和1MHZ转换为4HZ的分频器提供1MHZ的时钟信号,故设计了此分频器。
主要实现的功能是20MHZ的输出信号转换为1MHZ的输出信号,分频器的符号图如图1-1所示。
图1-120MHZ转换为1MHZ分频器
波形如图1-2所示。
图1-220MHZ转换为1MHZ分频器波形
1.31MHZ转换为4HZ分频器
4HZ的时钟信号是乐谱节拍信号,为地址计数器与rom存储器提供信
号。
分频器的符号图如图1-3所示。
图1-31MHZ转换为4HZ分频器
波形如图1-4所示。
图1-41MHZ转换为4HZ分频器
1.4乐音分频器
由1MHZ提供时钟信号,根据乐谱存储器的输出得到对应音符的分频值,然后输出相应的方波信号。
符号图如图1-5所示。
图1-5乐音分频器
本人设计的乐音分频器有87个分频值,由于播放固定三首乐曲,使用到11个音符的分频值,篇幅有限,故只列出11个波形图。
乐音分频输出部分波形如图1-6所示。
图1-6乐音分频器输出部分波形
乐音分频输出部分波形如图1-7所示。
图1-7乐音分频器输出部分波形
乐音分频输出部分波形如图1-8所示。
图1-8乐音分频器输出部分波形
乐音分频输出部分波形如图1-9所示。
图1-9乐音分频器输出部分波形
乐音分频输出部分波形如图1-10所示。
图1-10乐音分频器输出部分波形
乐音分频输出部分波形如图1-11所示。
图1-11乐音分频器输出部分波形
乐音分频输出部分波形如图1-12所示。
图1-12乐音分频器输出部分波形
乐音分频输出部分波形如图1-13所示。
图1-13乐音分频器输出部分波形
乐音分频输出部分波形如图1-14所示。
图1-14乐音分频器输出部分波形
乐音分频输出部分波形如图1-15所示。
图1-15乐音分频器输出部分波形
乐音分频输出部分波形如图1-16所示。
图1-16乐音分频器输出部分波形
第2章存储器与地址发生器
2.1地址发生器
九位二进制计数器,内部设置计数最大值为474,作为音符数据rom存储器的地址发生器。
这个计数器的计数频率为4HZ。
其符号图如图2-1所示。
图2-1地址发生器
2.2rom存储器
rom存储器存放的数据是三首乐曲的信息,分别为“两只老虎”,“找朋友”,“世上只有妈妈好”。
由4HZ的信号控制时间,根据地址发生器的输出值作为rom存储器的地址输入,驱动rom存储器相对应的数据输出。
其符号图如图2-2所示。
图2-2rom存储器
rom存储器mif文件如表2-1所示。
表2-1rom存储器mif文件数据
rom存储器输出数据波形如图2-3所示。
图2-3rom存储器波形
rom存储器输出数据波形如图2-4所示。
图2-4rom存储器波形
rom存储器输出数据波形如图2-5所示。
图2-5rom存储器波形
rom存储器输出数据波形如图2-6所示。
图2-6rom存储器波形
rom存储器输出数据波形如图2-7所示。
图2-7rom存储器波形
rom存储器输出数据波形如图2-8所示。
图2-8rom存储器波形
rom存储器输出数据波形如图2-9所示。
图2-9rom存储器波形
rom存储器输出数据波形如图2-10所示。
图2-10rom存储器波形
rom存储器输出数据波形如图2-11所示。
图2-11rom存储器波形
rom存储器输出数据波形如图2-12所示。
图2-12rom存储器波形
rom存储器输出数据波形如图2-13所示。
图2-13rom存储器波形
rom存储器输出数据波形如图2-14所示。
图2-14rom存储器波形
rom存储器输出数据波形如图2-15所示。
图2-15rom存储器波形
rom存储器输出数据波形如图2-16所示。
图2-16rom存储器波形
rom存储器输出数据波形如图2-17所示。
图2-17rom存储器波形
rom存储器输出数据波形如图2-18所示。
图2-18rom存储器波形
rom存储器输出数据波形如图2-19所示。
图2-19rom存储器波形
rom存储器输出数据波形如图2-20所示。
图2-20rom存储器波形
rom存储器输出数据波形如图2-21所示。
图2-21rom存储器波形
rom存储器输出数据波形如图2-22所示。
图2-22rom存储器波形
rom存储器输出数据波形如图2-23所示。
图2-23rom存储器波形
rom存储器输出数据波形如图2-24所示。
图2-24rom存储器波形
rom存储器输出数据波形如图2-25所示。
图2-25rom存储器波形
第3章顶层电路设计
3.1播放器的顶层电路
顶层原理图如图3-1所示。
图3-1顶层原理图
3.2播放器的组成
实验板的时钟输出是20MHZ,经过分频产生1MHZ的周期信号用作乐音分频器的时钟,4HZ的信号用作乐谱存储器的时钟。
乐谱存储器存放乐谱的编码,乐音分频器输出每个乐音对应的频率,驱动扬声器发音。
乐谱存储器地址保持时间就是每个乐音的发音时间,由乐谱存储器的时钟周期决定。
播放器如图3-2所示。
图3-2播放器组成
第4章课程设计总结
通过此次课程设计,我学到了许多,加深了对EDA技术的了解。
将学到的知识付诸实践,更好地从结合工程实际层面来检验学习效果。
实践出真知,实践是检验真理的唯一标准。
此次课程设计使我明白了实践的重要。
这次课程设计虽然面临很多困难,但是都被我一一克服。
EDA是一门很重要的课程,所以我为此做了充分的准备。
参考文献
[1]潘松,黄继业.EDA技术与VHDL.北京:
清华出版社,2014
附录
--20MHZ转换为1MHZ分频器的VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFENPIN20IS
PORT(CLK:
INSTD_LOGIC;
OUT1:
OUTSTD_LOGIC);
ENDENTITYFENPIN20;
ARCHITECTUREONEOFFENPIN20IS
SIGNALT1:
INTEGERRANGE0TO9;
SIGNALFIM:
STD_LOGIC;
BEGIN
PROCESS(CLK)BEGIN
IFCLK'EVENTANDCLK='1'thenT1<=T1+1;
IFT1=9THENFIM<=NOTFIM;T1<=0;
ENDIF;
ENDIF;
ENDPROCESS;
OUT1<=FIM;
ENDONE;
--1MHZ转换为4HZ分频器的VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFENPIN1IS
PORT(CLK:
INSTD_LOGIC;
OUT1:
OUTSTD_LOGIC);
ENDENTITYFENPIN1;
ARCHITECTUREFOUROFFENPIN1IS
SIGNALT1:
INTEGERRANGE0TO124999;
SIGNALFIM:
STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THENT1<=T1+1;
IFT1=124999THENFIM<=NOTFIM;T1<=0;
ENDIF;
ENDIF;
ENDPROCESS;
OUT1<=FIM;
ENDFOUR;
--地址发生器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT8IS
PORT(CLK:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC_VECTOR(8DOWNTO0));
END;
ARCHITECTUREBHVOFCNT8IS
SIGNAlq1:
sTD_LOGIC_vector(8downto0);
BEGIN
process(clk)
begin
IFCLK'EVENTANDCLK='1'THENQ1<=Q1+1;
ENDIF;
ifq1="111011010"thenq1<=(others=>'0');
endif;
ENDPROCESS;
Q<=Q1;
ENDBHV;
--存储器
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYaltera_mf;
USEaltera_mf.all;
ENTITYrom3IS
PORT
(
address:
INSTD_LOGIC_VECTOR(8DOWNTO0);
clock:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(6DOWNTO0)
);
ENDrom3;
ARCHITECTURESYNOFrom3IS
SIGNALsub_wire0:
STD_LOGIC_VECTOR(6DOWNTO0);
COMPONENTaltsyncram
GENERIC(
address_aclr_a:
STRING;
init_file:
STRING;
intended_device_family:
STRING;
lpm_hint:
STRING;
lpm_type:
STRING;
numwords_a:
NATURAL;
operation_mode:
STRING;
outdata_aclr_a:
STRING;
outdata_reg_a:
STRING;
widthad_a:
NATURAL;
width_a:
NATURAL;
width_byteena_a:
NATURAL
);
PORT(
clock0:
INSTD_LOGIC;
address_a:
INSTD_LOGIC_VECTOR(8DOWNTO0);
q_a:
OUTSTD_LOGIC_VECTOR(6DOWNTO0)
);
ENDCOMPONENT;
BEGIN
q<=sub_wire0(6DOWNTO0);
altsyncram_component:
altsyncram
GENERICMAP(
address_aclr_a=>"NONE",
init_file=>"E:
/作业/lessonEDA/毕业设计/播放器(3)/顶层原理图/mus.mif",
intended_device_family=>"Stratix",
lpm_hint=>"ENABLE_RUNTIME_MOD=NO",
lpm_type=>"altsyncram",
numwords_a=>512,
operation_mode=>"ROM",
outdata_aclr_a=>"NONE",
outdata_reg_a=>"UNREGISTERED",
widthad_a=>9,
width_a=>7,
width_byteena_a=>1
)
PORTMAP(
clock0=>clock,
address_a=>address,
q_a=>sub_wire0
);
ENDSYN;
--乐音分频器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYYUEYINFENPINIS
PORT(INX:
INSTD_LOGIC_VECTOR(6DOWNTO0);--乐音编码
CLK:
INSTD_LOGIC;--1MHZ时钟信号
SPK:
OUTSTD_LOGIC);--输出频率
ENDENTITYYUEYINFENPIN;
ARCHITECTUREONEOFYUEYINFENPINIS
SIGNALTEMP:
INTEGERRANGE0TO30000;--分频计数值
SIGNALCOUNT:
INTEGERRANGE0TO20000;--计数
SIGNALFIM:
STD_LOGIC;--分频
BEGIN
PROCESS(INX,CLK)
BEGIN
CASEINXIS
WHEN"0000000"=>TEMP<=30000;
WHEN"0000001"=>TEMP<=18181;
WHEN"0000010"=>TEMP<=17160;
WHEN"0000011"=>TEMP<=16197;
WHEN"0000100"=>TEMP<=15288;
WHEN"0000101"=>TEMP<=14430;
WHEN"0000110"=>TEMP<=13620;
WHEN"0000111"=>TEMP<=12855;
WHEN"0001000"=>TEMP<=12134;
WHEN"0001001"=>TEMP<=11453;
WHEN"0001010"=>TEMP<=10810;
WHEN"0001011"=>TEMP<=10203;
WHEN"0001100"=>TEMP<=9630;
WHEN"0001101"=>TEMP<=9090;
WHEN"0001110"=>TEMP<=8580;
WHEN"0001111"=>TEMP<=8098;
WHEN"0010000"=>TEMP<=7644;
WHEN"0010001"=>TEMP<=7214;
WHEN"0010010"=>TEMP<=6810;
WHEN"0010011"=>TEMP<=6427;
WHEN"0010100"=>TEMP<=6066;
WHEN"0010101"=>TEMP<=5726;
WHEN"0010110"=>TEMP<=5404;
WHEN"0010111"=>TEMP<=5101;
WHEN"0011000"=>TEMP<=4815;
WHEN"0011001"=>TEMP<=4544;
WHEN"0011010"=>TEMP<=4289;
WHEN"0011011"=>TEMP<=4049;
WHEN"0011100"=>TEMP<=3821;
WHEN"0011101"=>TEMP<=3607;
WHEN"0011110"=>TEMP<=3404;
WHEN"0011111"=>TEMP<=3232;
WHEN"0100000"=>TEMP<=3033;
WHEN"0100001"=>TEMP<=2863;
WHEN"0100010"=>TEMP<=2702;
WHEN"0100011"=>TEMP<=2550;
WHEN"0100100"=>TEMP<=2407;
WHEN"0100101"=>TEMP<=2272;
WHEN"0100110"=>TEMP<=2145;
WHEN"0100111"=>TEMP<=2024;
WHEN"0101000"=>TEMP<=1910;
WHEN"0101001"=>TEMP<=1803;
WHEN"0101010"=>TEMP<=1702;
WHEN"0101011"=>TEMP<=1606;
WHEN"0101100"=>TEMP<=1516;
WHEN"0101101"=>TEMP<=1431;
WHEN"0101110"=>TEMP<=1350;
WHEN"0101111"=>TEMP<=1275;
WHEN"0110000"=>TEMP<=1203;
WHEN"0110001"=>TEMP<=1135;
WHEN"0110010"=>TEMP<=1072;
WHEN"0110011"=>TEMP<=1011;
WHEN"0110100"=>TEMP<=955;
WHEN"0110101"=>TEMP<=901;
WHEN"0110110"=>TEMP<=850;
WHEN"0110111"=>TEMP<=803;
WHEN"0111000"=>TEMP<=757;
WHEN"0111001"=>TEMP<=715;
WHEN"0111010"=>TEMP<=675;
WHEN"0111011"=>TEMP<=637;
WHEN"0111100"=>TEMP<=601;
WHEN"0111101"=>TEMP<=567;
WHEN"0111110"=>TEMP<=535;
WHEN"0111111"=>TEMP<=505;
WHEN"1000000"=>TEMP<=477;
WHEN"1000001"=>TEMP<=450;
WHEN"1000010"=>TEMP<=425;
WHEN"1000011"=>TEMP<=401;
WHEN"1000100"=>TEMP<=378;
WHEN"1000101"=>TEMP<=357;
WHEN"1000110"=>TEMP<=337;
WHEN"1000111"=>TEMP<=318;
WHEN"1001000"=>TEMP<=300;
WHEN