1、简易电子琴的设计主要功能:(1)设计一个八音电子琴。(2)由键盘输入控制音响,同时可自动演奏乐曲。(3)用户可以将自己编制的乐曲存入电子琴,演奏时可选择键盘输入乐曲或者已存入的乐曲。三、课程设计报告内容 3.1设计原理与思路 系统由数控分频器、乐曲存储模块以及发声模块组成。数控分频器对FPGA的基准频率进行分频,得到与各个音阶对应的频率输出。乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由计数器的计数时钟信号作为乐曲节拍控制信号。由发声模块产生音符对应的频率的信号来使扬声器发音。(1)模块automusic模块automsic
2、由auto信号来选择发声的方式,auto=0时系统自动播放内置的音乐,auto=1时由键盘来手动演奏音乐。(2)模块TONE 模块Tone是音阶发生器,当8位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code输出对应该音阶简谱的显示数码,如5,并由High输出指示音阶高8度显示。(3)模块Speaker模块Speaker中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块Speaker由端口Tone获得一个2进制数后,将以此值为计数器的预置数,对端口Clk12MHZ输入的频率进行分频,之后由Spko
3、ut向扬声器输出发声。 3.2操作过程新建工程添加模块查找对应芯片调试程序波形仿真生成逻辑图设置管脚3.3设计和调试过程中出现的问题及解决方法 在初次编写分频模块时候,使用的是比较基本的计数器分频法,编写程序后在modelsim软件中进行了仿真,发现无法观察到分频情况。经过分析,原因是由于分频比过大,因此在波形图中很难观察到。而且由于预分频的占空比很小,更难以观察到高电平。在原因找到后,为了考察程序的性能,我们将输入频率减小。同时适当缩小分频比,这样就得到了模块仿真中的分频波形。4、设计总结和心得体会通过这次课程设计发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践
4、,以增强自己的动手能力。这个实验十分有意义 我获得很深刻的经验。通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,也从中得知了很多书本上无法得知的知识。学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。参考文献:(五号,宋体加粗)1 潘松,EDA实用教程,科
5、学出版社,2004年附录:(源程序)module top(clk32MHz,handTOauto, code1,index1,high1,spkout);input clk32MHz,handTOauto; /32MHz系统时钟,键盘输入/自动演奏input 7:0 index1;/键盘输入信号output 6:0 code1; /音符显示信号output high1,spkout;/高低音节信号,音频信号wire 10:0 tone;wire 7:0 indx;automusic u0(.clk(clk32MHz),.index2(index1),.index0(indx),.auto(ha
6、ndTOauto);tone u1(.index(indx),.tone0(tone),.code(code1),.high(high1);speaker u2(.clk1(clk32MHz),.tone1(tone),.spks(spkout);Endmodulemodule automusic(clk,auto,index2,index0);/实现自动演奏功能。input clk,auto;/系统时钟;键盘输入/自动演奏0 index2;output 7:0 index0;/音符信号输出reg 7:reg 4:0 count0;reg clk2;reg 22:0 count;always
7、(clk,auto) /此过程完成对系统时钟8M的分频,得到4Hz的信号clk2begin if (auto) begin count=23d0; clk2=1b1; end else if (clk) begin count=count+1 if (count=23d4000000) clk2 else if (count=23d8000000) begin clk2b0; count=23end endalways (posedge clk2)/此过程完成自动演奏部分曲的地址累加 if (count0=5d31) count0=5 else =count0+1always (count0,
8、auto,index2) if (!auto) case(count0) /此case语句:存储自动演奏部分的曲 5d0: index0=8b00000100; /3d1:d2:d3:d4:b00010000;/5d5:d6:d7:b00100000;/6d8:b10000000;/8d9:d10:d11:d12:b00000010;/2d13:d14:b00000001;/1d15:d16:d17:d18:b00001000;/4 d19:d20:d21:d22:d23:d24:d25:d26:d27:d28:d29:d30:d31: default: ; endcaseelse index
9、0=index2; /键盘输入音符信号输出 end module tone(index,code,high,tone0); /音阶发生器程序。0 index;/音符输入信号0 code;/音符显示信号output high;/高低音显示信号output 10:0 tone0;/音符的分频系数reg high;reg 6:reg 10:always (index)/此过程完成音符到音符的分频系数译码,音符的显示,高低音阶 case(index) 8b00000001: begin tone0=11d773; code=6b1001111;high=1b00000010:d912;b0010010
10、;b00000100:d1116;code=6b1001100;b00010000:d1197;b0100100;b00100000:d1290;b0100000;b01000000:d1372;b0001111;b10000000:d1410;b0000000; default:d2047;b0000001;endmodule module speaker(clk1,tone1, spks);/实现数控分频input clk1;/系统时钟input 10:0 tone1;/音符分频系数output spks;/驱动扬声器的音频信号0 tone2;reg spks;reg preclk,full
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1