FPGA课程设计报告 简易电子琴的设计文档格式.docx
《FPGA课程设计报告 简易电子琴的设计文档格式.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计报告 简易电子琴的设计文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
三、使用环境:
等编程仿真软件;
、软件:
Modelsim和QuartusII1开发板。
2、硬件:
FPGA四、课程设计详细方案及功能验证:
、总体实现方案:
19、简易电子琴的设计通过软硬件结合实现,硬件系统包括主控器芯片、1程序的应用软件HDLLED、蜂鸣器等,软件资源包括编写Verilog个按键、。
电子琴有按键代替琴键的弹奏功能和自动播放QuartusIIModelsim和仿真软件功能。
模块,模块,曲目2个模块:
主模块,按键模块,曲目152、整个程序总共分3模块。
曲目作为琴键,通过key1~key7)整个方案总共用了9,按键个按键(key1~key9这七个按键键入不同的音阶。
主模块中key8、key9两个按键用于选择是自动播放还是弹奏曲目,令mm=(key8、key9),用mm值的不同选择调用不同模块。
如果mm=00,则程序调用按键模块;
如果mm=01,则调用曲目1模块,播放曲目1;
如果mm=10,则调用曲目2模块,播放曲目2;
如果mm11,则调用曲目3模块,播放曲目3。
本次设计的框图:
主模块曲目1mm=01
键按9个)key1~key9(控制播放曲目以及手动弹奏2
曲目mm=10
奏弹手动key1~key7()目放曲播)key8(、key93
曲目mm=11
mm=00
按键模块即琴键键入音阶,Key1~key7
2、输入输出信号描述:
[7:
0]numInclk电子琴Key(1~9)Out_r(beep)
具体功能描述:
信号源
输入/输出
功能描述
inclk
Input
时钟频率50M
key(1~9)
键入以及选择曲目
num
Output
数码管显示
out_r
根据r选择不同模块
3、顶层划分:
主模块(key1.key2.key3.key4.key5.key6.key7.key8.key9)outclkbeep_r
inclk分Keymmnum[7:
0]50MHZclk_6M频(8~9)
分clk_6MKeybeep4
频(1~7)
clk_6Mcount分beep1
频
clk_4HZstate
countclk_6M分beep2
频clk_4HZstate
clk_6Mcount分beep3频
clk_4HZstate
4、主要模块:
主模块:
功能描述:
是四个子模块的核心,通过主模块分别调用四个不同的子模块。
管脚描述:
信号名称
输入/输出
源
功能描述
inclk
Input
Pin
系统时钟50MHz
Key(1~9)
按键选择,键入作用
outclk
Output
模块选择输出
按键模块:
通过按键key1~key7键入不同的7个音阶,频率不同则蜂鸣器发音就不同;
通过mm=(key8、key9)的值选择调用不同曲目模块。
Key(1~7)
按键键入7个不同音阶
Beep4
个不同音阶7输出
曲目模块:
功能描述:
不同的曲目模块输出不同的曲调,根据高低音对应的频率不同输出不同曲调的曲目。
在50MHZ的情况下对主时钟分频得到6MHZ的频率,得到在6MHZ下对应的音阶及其对应频率,以及分频数,通过计数分频数,来对不同频率的声音进行输出,实验箱原始时钟为50MHz,分频后变成不同的频率输出,通过蜂鸣器输出不同频率的声音。
音乐的节拍通过分频变为4Hz,作为1/4拍,即每个单位时长0.25s。
管脚描述:
Key(8~9)
选择曲目
Beep3
输出曲目
5、功能仿真:
1、综合:
、总体电路图:
2.
3、所有输入输出信号:
4、管脚分配:
输入信号:
一个时钟信号,9个按键;
输出信号:
一个数码管输出,一个蜂鸣器输出音调。
5、时序仿真:
仿真结果;
设置输入信号key1~key7为高电平,此时设置key8~key9=01,即mm=01,在数码管应该显示1,在仿真结束后,如图示数码管为11111001,即为1,outclk为蜂鸣器的输出,如图示也正确,所以本设计经过仿真证明正确可行。
6、硬件测试结果:
在时序验证后下载,通过硬件测试,实验达到预期效果,当mm(key8~key9)=00时,通过key1~key7这7个按键的键入蜂鸣器可以发出do~xi的七个音阶的音,即表示了电子琴的弹奏功能;
当mm=01时,播放了第一首歌;
mm=10时,播放了第二首歌;
mm=11时,播放第三首歌。
通过硬件的测试,所有的设计目标均实现。
7、对结果和结论的问题讨论:
实验过程中,蜂鸣器发音时好时坏,有时比较低沉,有时却比较尖锐,这可能是对主系统分频不精确导致的结果,当对主系统时钟不同分频时,结果都不同,最终在多次试验下,得到在6M时钟频率下效果最为理想。
8、音阶及其对应频率(时钟频率为50MHz分为6MHz)
音阶
频率/Hz
/us周期
半周期/us
分频数
中音
1
523
1912
956
11472
2
578
1684
842
10380
659
1518
759
9104
4
698
1432
716
8595
5
784
1276
638
7653
6
880
1136
568
6818
7
988
1012
506
6073
高音
H1
1046
478
5736
H2
1175
852
426
5106
五、心得体会:
上手起来其实做过了单片机关于蜂鸣器方面的实验,在这次课程设计之前,还是很快的,开始时,先按照老师的要求,写规范,确定实现方案,然后在逐一软件,由于quartusII细化,一步一步按照要求去完成整个设计。
本次设计要用所以这次课程设计之前对此软件不是太熟悉所以导致了一些错误和问题的发生,软件的具体使用步骤和操作流程,对所有可能出现的问quartusII中认真学习了软件,也了解了开发quartusII题进行逐一攻破。
通过这次实验,我不但熟悉了编程语言的理解,最重要的是Verilog的最基本流程和方法,也进一步加深了对锻炼了我独立思考和分析的逻辑能力,通过从顶向下的设计方法,一步步实现,然后将整个设计串套起来,是我对设计的流程以及编程有了很大的提高。
编程对项目实现有着至关通过此次硬件课程设计,使我越来越认识到一点,将编程看作是完善开发的我们在硬件开发的过程中必须重视编程,重要的作用,不仅提高了逻辑分析论证和测试中,不可缺少的一部分。
在一次次的反复设计、能力、全面分析问题的能力,还提升了发现问题、解决问题的能力。
虽然设计过通过各方面大大小小也出现了许多问题,但这却磨练了我的意志。
程比较繁琐,的学习,使我的知识面进一步拓宽了。
同时,通过本次课程设计,使我也发现了解决问题的能力不足,编程能力不足,自己的不足,例如:
逻辑分析能力不突出,我提升自我能力。
使我认识到在以后的学习中在这些方面要多努力,加以改进,相信通过这次课程设计的学习,对我以后有着十分重要的影响和作用。
.
附代码:
moduledianziqin(inclk,outclk,key1,key2,key3,key4,key5,key6,key7,key8,key9,num);
inputinclk;
inputkey1,key2,key3,key4,key5,key6,key7,key8,key9;
outputoutclk;
output[7:
0]num;
reg[7:
0]num;
regoutclk,clk_6M;
reg[3:
0]c;
wireout1,out2,out3,out4;
wire[8:
0]key;
reg[1:
0]mm;
assignkey={key1,key2,key3,key4,key5,key6,key7,key8,key9};
//由按键拼键为变量key
//调用子调块
digital_pianom1(
.inclk(inclk),
.key1(key1),
.key2(key2),
.key3(key3),
.key4(key4),
.key5(key5),
.key6(key6),
.key7(key7),
.beep4(out4)
);
bellm2(
.beep1(out1)
);
bell2m3(
.beep2(out2)
bell3m4(
.beep3(out3)
always@(posedgeinclk)
begin
if(c<
4'
d8)
c<
=c+4'
d1;
else
begin
c<
=4'
d0;
clk_6M<
=~clk_6M;
end
end
always@(posedgeclk_6M)在时钟的上升沿检测是否有按键按下//begin
if(key==9'
b111111110)
mm<
=2'
b01;
elseif(key==9'
b111111101)
b10;
b11111110