收藏 分享(赏)

FPGA课程设计报告--简易电子琴的设计[1].doc.doc

上传人:weiwoduzun 文档编号:2730382 上传时间:2018-09-26 格式:DOC 页数:29 大小:658KB
下载 相关 举报
FPGA课程设计报告--简易电子琴的设计[1].doc.doc_第1页
第1页 / 共29页
FPGA课程设计报告--简易电子琴的设计[1].doc.doc_第2页
第2页 / 共29页
FPGA课程设计报告--简易电子琴的设计[1].doc.doc_第3页
第3页 / 共29页
FPGA课程设计报告--简易电子琴的设计[1].doc.doc_第4页
第4页 / 共29页
FPGA课程设计报告--简易电子琴的设计[1].doc.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、西安邮电大学FPGA 课程设计报告题 目:简易电子琴设计及 FPGA 功能验证院 系: 专业班级: 学生姓名: XX 导师姓名: XX 起止时间: 2012、6、18 至 2012、6、29 一、课程设计任务:本设计一个简易电子琴,具体功能如下:1、具有手动弹奏和自动播放功能;2、以按键或开关作为电子琴的琴键,输出 7 个音节的音阶;3、可以自动播放曲目至少两首。二、课程设计目的: 1、培养综合运用知识和独立开展实践创新的能力;2、深入学习 Verilog HDL,了解其编程环境;3、学会运用 Modelsim 和 Quartus II 等编程仿真软件;4、将硬件语言编程与硬件实物功能演示相结

2、合,加深理解 Verilog HDL 的学习;三、使用环境:1、软件:Modelsim 和 Quartus II 等编程仿真软件;2、硬件:FPGA 开发板。四、课程设计详细方案及功能验证:1、总体实现方案:1、简易电子琴的设计通过软硬件结合实现,硬件系统包括主控器芯片、9个按键、LED 、蜂鸣器等,软件资源包括编写 Verilog HDL 程序的应用软件Modelsim 和仿真软件 Quartus II。电子琴有按键代替琴键的弹奏功能和自动播放功能。2、整个程序总共分 5 个模块:主模块,按键模块,曲目 1 模块,曲目 2 模块,曲目 3 模块。整个方案总共用了 9 个按键(key1key9

3、) ,按键 key1key7 作为琴键,通过这七个按键键入不同的音阶。主模块中 key8、key9 两个按键用于选择是自动播放还是弹奏曲目,令 mm=(key8 、key9) ,用 mm 值的不同选择调用不同模块。如果 mm=00,则程序调用按键模块;如果 mm=01,则调用曲目 1 模块,播放曲目 1;如果 mm=10,则调用曲目 2 模块,播放曲目 2;如果 mm11,则调用曲目 3 模块,播放曲目 3。本次设计的框图:主模块9 个按键(key1key9)控制播放曲目以及手动弹奏手动弹奏(key1key7)播放曲目(key8、key9)按键模块即琴键键入音阶,Key1key7mm=00mm

4、=11 曲目 3曲目 1 曲目 2mm=01mm=102、输入输出信号描述: 具体功能描述:信号源 输入/输出 功能描述inclk Input 时钟频率 50Mkey( 19) Input 键入以及选择曲目num Output 数码管显示out_r Output 根据 r 选择不同模块3、顶层划分:主模块 (key1.key2.key3.key4.key5.key6.key7.key8.key9) outclk beep_r电子琴Key(19)Inclk 7:0numOut_r(beep)4、主要模块:主模块:功能描述:是四个子模块的核心,通过主模块分别调用四个不同的子模块。管脚描述:信号名称

5、 输入 / 输出 源 功能描述inclk Input Pin 系统时钟 50MHzKey(19) Input Pin 按键选择,键入作用outclk Output Pin 模块选择输出按键模块:功能描述:通过按键 key1key7 键入不同的 7 个音阶,频率不同则蜂鸣器发音就不同;通过 mm=(key8 、key9)的值选择调用不同曲目模块。 管脚描述: 信号名称 输入 / 输出 源 功能描述inclk Input Pin 系统时钟 50MHzKey(17) Input Pin 按键键入 7 个不同音阶inclk50MHZ分频 clk_6M mm num7:0Key(89)分频 clk_6M

6、 Key(17)beep4分频clk_6Mclk_4HZcountstatebeep1分频clk_6Mclk_4HZcountstate clk_4HZ beep2分频clk_6Mclk_4HZcount clk_4HZ state clk_4HZ beep3Beep4 Output Pin 输出 7 个不同音阶曲目模块:功能描述:不同的曲目模块输出不同的曲调,根据高低音对应的频率不同输出不同曲调的曲目。在 50MHZ 的情况下对主时钟分频得到 6MHZ 的频率,得到在 6MHZ 下对应的音阶及其对应频率,以及分频数,通过计数分频数,来对不同频率的声音进行输出,实验箱原始时钟为 50MHz,分

7、频后变成不同的频率输出,通过蜂鸣器输出不同频率的声音。音乐的节拍通过分频变为 4Hz,作为1/4 拍,即每个单位时长 0.25s。管脚描述:信号名称 输入 / 输出 源 功能描述inclk Input Pin 系统时钟 50MHzKey(89) Input Pin 选择曲目Beep3 Output Pin 输出曲目5、功能仿真:1、综合:2、总体电路图:3、所有输入输出信号:4、管脚分配:输入信号:一个时钟信号,9 个按键;输出信号:一个数码管输出,一个蜂鸣器输出音调。5、时序仿真:仿真结果;设置输入信号 key1key7 为高电平,此时设置 key8key9=01,即mm=01,在数码管应该

8、显示 1,在仿真结束后,如图示数码管为 11111001,即为 1,outclk 为蜂鸣器的输出,如图示也正确,所以本设计经过仿真证明正确可行。6、 硬件测试结果:在时序验证后下载,通过硬件测试,实验达到预期效果,当mm(key8key9)=00时,通过key1key7这7个按键的键入蜂鸣器可以发出doxi的七个音阶的音,即表示了电子琴的弹奏功能;当mm=01时,播放了第一首歌;mm=10时,播放了第二首歌;mm=11时,播放第三首歌。通过硬件的测试,所有的设计目标均实现。7、 对结果和结论的问题讨论:实验过程中,蜂鸣器发音时好时坏,有时比较低沉,有时却比较尖锐,这可能是对主系统分频不精确导致

9、的结果,当对主系统时钟不同分频时,结果都不同,最终在多次试验下,得到在6M时钟频率下效果最为理想。8、 音阶及其对应频率(时钟频率为50MHz分为6MHz)五、心得体会:在这次课程设计之前,其实做过了单片机关于蜂鸣器方面的实验,上手起来还是很快的,开始时,先按照老师的要求,写规范,确定实现方案,然后在逐一细化,一步一步按照要求去完成整个设计。本次设计要用 quartusII 软件,由于之前对此软件不是太熟悉所以导致了一些错误和问题的发生,所以这次课程设计中认真学习了 quartusII 软件的具体使用步骤和操作流程,对所有可能出现的问题进行逐一攻破。通过这次实验,我不但熟悉了 quartusI

10、I 软件,也了解了开发的最基本流程和方法,也进一步加深了对 Verilog 编程语言的理解,最重要的是锻炼了我独立思考和分析的逻辑能力,通过从顶向下的设计方法,一步步实现,然后将整个设计串套起来,是我对设计的流程以及编程有了很大的提高。通过此次硬件课程设计,使我越来越认识到一点,编程对项目实现有着至关重要的作用,我们在硬件开发的过程中必须重视编程,将编程看作是完善开发的不可缺少的一部分。在一次次的反复设计、论证和测试中,不仅提高了逻辑分析能力、全面分析问题的能力,还提升了发现问题、解决问题的能力。虽然设计过程比较繁琐,大大小小也出现了许多问题,但这却磨练了我的意志。通过各方面的学习,使我的知识

11、面进一步拓宽了。同时,通过本次课程设计,使我也发现了自己的不足,例如:逻辑分析能力不突出,编程能力不足,解决音阶 频率/Hz 周期/us 半周期/us 分频数1 523 1912 956 114722 578 1684 842 103803 659 1518 759 91044 698 1432 716 85955 784 1276 638 76536 880 1136 568 6818中音7 988 1012 506 6073H1 1046 956 478 5736高音H2 1175 852 426 5106问题的能力不足,使我认识到在以后的学习中在这些方面要多努力,加以改进,提升自我能力。

12、我相信通过这次课程设计的学习,对我以后有着十分重要的影响和作用。附代码:module dianziqin(inclk,outclk,key1,key2,key3,key4,key5,key6,key7,key8,key9,num);input inclk;input key1,key2,key3,key4,key5,key6,key7,key8,key9;output outclk;output7:0num;reg 7:0 num;reg outclk,clk_6M;reg 3:0c;wire out1,out2,out3,out4;wire8:0 key;reg 1:0mm;assign k

13、ey = key1,key2,key3,key4,key5,key6,key7,key8,key9; /由按键拼键为变量 key /调用子调块digital_piano m1(.inclk(inclk),.key1(key1),.key2(key2),.key3(key3),.key4(key4),.key5(key5),.key6(key6),.key7(key7),.beep4(out4);bell m2(.inclk(inclk),.beep1(out1);bell2 m3(.inclk(inclk),.beep2(out2);bell3 m4(.inclk(inclk),.beep3(

14、out3);always(posedge inclk) begin if(cbeginif(state =63) state = 0;/计时,以实现循环演奏elsestate = state + 1;case(state)0,1: high,med,low=12b000000010000;/mid12,3:high,med,low=12b000000100000;/mid24,5:high,med,low=12b000000110000;/mid36,7:high,med,low=12b000000010000;/mid18,9: high,med,low=12b000000010000;/m

15、id110,11:high,med,low=12b000000100000;/mid212,13:high,med,low=12b000000110000;/mid314,15:high,med,low=12b000000010000;/mid116,17:high,med,low=12b000000110000;/mid318,19: high,med,low=12b000001000000;/mid420,21,22,23: high,med,low=12b000001010000;/mid524,25:high,med,low=12b000000110000;/mid326,27: hi

16、gh,med,low=12b000001000000;/mid428,29,30,31: high,med,low=12b000001010000;/mid532: high,med,low=12b000001010000;/mid533: high,med,low=12b000001100000;/mid634:high,med,low=12b000001010000;/mid535:high,med,low=12b000001000000;/mid436,37:high,med,low=12b000000110000;/mid338,39:high,med,low=12b000000010

17、000;/mid140:high,med,low=12b000001010000;/mid541: high,med,low=12b000001100000;/mid642:high,med,low=12b000001010000;/mid543:high,med,low=12b000001000000;/mid444,45:high,med,low=12b000000110000;/mid346,47:high,med,low=12b000000010000;/mid148,49:high,med,low=12b000000100000;/mid250,51:high,med,low=12b

18、000000000101;/low552,53,54,55: high,med,low=12b000000010000;/mid156,56:high,med,low=12b000000100000;/mid257,58:high,med,low=12b000000000101;/low559,60,61,62,63: high,med,low=12b000000010000;/mid1default : high,med,low=12bx;endcaseendendmodule/bell2 子模块康定情歌module bell2 (inclk,beep2);input inclk; /系统时

19、钟output beep2; /蜂鸣器输出端reg 3:0high,med,low;reg 15:0origin;reg beep_r; /寄存器reg 7:0state; reg 15:0count;assign beep2=beep_r; /输出音乐/时钟频率 6MHzreg clk_6MHz;reg 2:0 cnt1; always(posedge inclk)begin if(cnt13d8) /8cnt1=cnt1+3b1;elsebegincnt1=3b0;clk_6MHz=clk_6MHz;endend/时钟频率 4MHzreg clk_4Hz;reg 24:0 cnt2; al

20、ways(posedge inclk)begin if(cnt225d13000000)/13000000cnt2=cnt2+25b1;elsebegincnt2=25b0;clk_4Hz=clk_4Hz;endendalways (posedge clk_6MHz)begincount = count + 1b1; /计数器加 1if(count = origin)begincount = 16h0; /计数器清零beep_r = !beep_r; /输出取反endendalways(posedge clk_4Hz)begincase(high,med,low)b000000000001:o

21、rigin=22900; /低 1b000000000010:origin=20408; /低 2b000000000011:origin=18181; /低 3b000000000101:origin=15267; /低 5b000000000110:origin=13605; /低 6b000000000111:origin=11472; /中 1b000000100000:origin=10216; /中 2b000000110000:origin=9101; /中 3b000001010000:origin=7653; /中 5b000001100000:origin=6818; /中

22、 6b000100000000:origin=5733; /高 1b001000000000:origin=5108; /高 2b001100000000:origin=4551; /高 3endcaseendalways (posedge clk_4Hz)beginif(state =103) state = 0;elsestate = state + 1; /康定情歌case(state)0,1: high,med,low=b000000110000;/中 32,3: high,med,low=b000001010000;/中 54,5: high,med,low=b00000110000

23、0;/中 66: high,med,low=b000001100000;/中 67: high,med,low=b000001010000;/中 58,9,10: high,med,low=b000001100000;/中 611: high,med,low=b000000110000;/中 312,13,14,15: high,med,low=b000000100000;/中 216,17: high,med,low=b000000110000;/中 318,19: high,med,low=b000001010000;/中 520,21: high,med,low=b00000110000

24、0;/中 622: high,med,low=b000001100000;/中 623: high,med,low=b000001010000;/中 524,25: high,med,low=b000001100000;/中 626,27,28,29,30,31:high,med,low=b000000110000;/中 332,33: high,med,low=b000000110000;/中 334,35: high,med,low=b000001010000;/中 536,37: high,med,low=b000001100000;/中 638: high,med,low=b00000

25、1100000;/中 639: high,med,low=b000001010000;/中 540,41,42: high,med,low=b000001100000;/中 643: high,med,low=b000000110000;/中 344,45,46,47: high,med,low=b000000100000;/中 248,49: high,med,low=b000000000101;/中 550,51: high,med,low=b000000110000;/中 352: high,med,low=b000000100000;/中 253: high,med,low=b0000

26、00110000;/中 354: high,med,low=b000000100000;/中 255: high,med,low=b000000000111;/156,57: high,med,low=b000000100000;/中 258,59,60,61,62,63:high,med,low=b000000000110;/低 664,65: high,med,low=b000001100000;/中 666,67,68,69,70,71:high,med,low=b000000100000;/中 272,73: high,med,low=b000000000101;/中 574,75,7

27、6,77,78,79:high,med,low=b000000110000;/中 380: high,med,low=b000000100000;/中 281: high,med,low=b000000000111;/182,83,84,85,86,87:high,med,low=b000001100000;/中 688,89: high,med,low=b000000000101;/中 590,91: high,med,low=b000000110000;/中 392: high,med,low=b000000100000;/中 293: high,med,low=b000000110000

28、;/中 394: high,med,low=b000000100000;/中 295: high,med,low=b000000000111;/196,97: high,med,low=b000000100000;/中 298,99,100,101,102,103:high,med,low=b000001100000;/中 6endcaseendendmodule/bell3 子模块天空之城module bell3 (inclk,beep3);input inclk; /系统时钟output beep3; /蜂鸣器输出端reg 3:0high,med,low;reg 15:0origin;re

29、g beep_r; /寄存器reg 7:0state; reg 15:0count;assign beep3=beep_r; /输出音乐/时钟频率 6MHzreg clk_6MHz;reg 2:0 cnt1; always(posedge inclk)begin if(cnt13d8)cnt1=cnt1+3b1;elsebegincnt1=3b0;clk_6MHz=clk_6MHz;endend/时钟频率 4MHzreg clk_4Hz;reg 24:0 cnt2; always(posedge inclk)begin if(cnt225d13000000)/cnt2=cnt2+25b1;el

30、sebegincnt2=25b0;clk_4Hz=clk_4Hz;endendalways (posedge clk_6MHz)begincount = count + 1b1; /计数器加 1if(count = origin)begincount = 16h0; /计数器清零beep_r = !beep_r; /输出取反endendalways(posedge clk_4Hz)begincase(high,med,low)b000000000001:origin=22900; /低 1b000000000010:origin=20408; /低 2b000000000011:origin=

31、18181; /低 3b000000000100:origin=17142; /低 4b000000000101:origin=15267; /低 5b000000000110:origin=13605; /低 6b000000000111:origin=12121; /低 7b000000000111:origin=11472; /中 1b000000100000:origin=10216; /中 2b000000110000:origin=9101; /中 3b000000111000:origin=8571; /中 4b000001010000:origin=7653; /中 5b000

32、001100000:origin=6818; /中 6b000010000000:origin=6060; /中 7b000100000000:origin=5733; /高 1b001000000000:origin=5108; /高 2b001100000000:origin=4551; /高 3b001010000000:origin=4294; /高 4b010000000000:origin=3826; /高 5b011000000000:origin=3409; /高 6b010100000000:origin=3050; /高 7endcaseendalways (posedge

33、 clk_4Hz)beginif(state =195)state = 0;elsestate = state + 1; /kang ding qing gecase(state)0: high,med,low=b000001100000;/中 61: high,med,low=b000010000000;/中 72,3,4: high,med,low=b000100000000;/高 15: high,med,low=b000010000000;/中 76,7: high,med,low=b000100000000;/高 18,9: high,med,low=b001100000000;/高

34、 310,11,12,13,14,15: high,med,low=b000010000000;/中 716,17: high,med,low=b000000110000;/中 318,19,20: high,med,low=b000001100000;/中 621: high,med,low=b000001010000;/中 522,23: high,med,low=b000001100000;/中 624,25: high,med,low=b000000000111;/中 126,27,28,29,30,31:high,med,low=b000001010000;/中 5 32: high

35、,med,low=b000000110000;/中 333: high,med,low=b000000110000;/中 334,35,36: high,med,low=b000000111000;/中 437: high,med,low=b000000110000;/中 338: high,med,low=b000000111000;/中 439,40,41: high,med,low=b000100000000;/高 142,43,44: high,med,low=b000000110000;/中 345,46,47: high,med,low=b000100000000;/高 148,4

36、9,50: high,med,low=b000010000000;/中 751,52,53: high,med,low=b000000111000;/中 454,55,56,57,58,59,60,61:high,med,low=b000010000000;/中 762: high,med,low=b000001100000;/中 663: high,med,low=b000010000000;/中 764,65,66: high,med,low=b000100000000;/高 167: high,med,low=b010100000000;/高 768,69: high,med,low=b

37、000100000000;/高 170,71: high,med,low=b001100000000;/高 372,73,74: high,med,low=b000010000000;/中 775,76: high,med,low=b000000110000;/中 377,78,79: high,med,low=b000001100000;/中 680: high,med,low=b000000000101;/中 581,82: high,med,low=b000001100000;/中 683,84: high,med,low=b000000000111;/中 185,86,87,88,89

38、,90:high,med,low=b000001010000;/中 5 91: high,med,low=b000000110000;/中 392: high,med,low=b000000110000;/中 393,94: high,med,low=b000000111000;/中 4 95: high,med,low=b000100000000;/高 196,97,98: high,med,low=b000010000000;/中 799,100: high,med,low=b000100000000;/高 1101,102: high,med,low=b001000000000;/高 2

39、103: high,med,low=b001100000000;/高 3104,105,106,107,108,109:high,med,low=b000100000000;/高 1110: high,med,low=b000010000000;/中 7111,112: high,med,low=b000001100000;/中 6113,114: high,med,low=b000010000000;/中 7115,116: high,med,low=b000001010000;/中 5117,118,119,120,121,122:high,med,low=b000001100000;/中

40、 6123,124: high,med,low=b000000000111;/中 1125: high,med,low=b001000000000;/高 2126,127,128: high,med,low=b001100000000;/高 3129: high,med,low=b001000000000;/高 2130,131: high,med,low=b001100000000;/高 3132,133: high,med,low=b010000000000;/高 5134,135,136,137,138,139:high,med,low=b001000000000;/高 2140,141

41、: high,med,low=b000001010000;/中 5142,143,144: high,med,low=b000100000000;/高 1145: high,med,low=b000010000000;/中 7146,147: high,med,low=b000100000000;/高 1148,149,150,151,152,153,154,155:high,med,low=b001100000000;/高 3156,157: high,med,low=b000001100000;/中 6158,159: high,med,low=b000010000000;/中 7160,

42、161,162,163:high,med,low=b000100000000;/高 1164,165: high,med,low=b000010000000;/中 7166,167: high,med,low=b000100000000;/高 1168,169: high,med,low=b001000000000;/高 2170,171,172: high,med,low=b000100000000;/高 1173,174,175,176,177,178:high,med,low=b000001010000;/中 5179,180: high,med,low=b001010000000;/高 4181,182: high,med,low=b001100000000;/高 3183,184,185: high,med,low=b001000000000;/高 2186,187: high,med,low=b000100000000;/高 1188,189,190,191,192,193,194,195:high,med,low=b001100000000;/高 3endcaseendendmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报