FPGA课程设计_第1页
FPGA课程设计_第2页
FPGA课程设计_第3页
FPGA课程设计_第4页
FPGA课程设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-作者xxxx-日期xxxxFPGA课程设计【精品文档】FPGA课程设计报告题 目: 简易电子琴设计及FPGA功能验证 院 系: 电子工程学院专业班级: 学生姓名: 导师姓名: 黄海生 起止时间: 2012-6-18 至 2012-6-29 2012年 6 月 29 日 目录1.任务.22.目的23.使用环境2课程设计详细内容24.1 技术规范24.1.1 总体描述24.1.2 结构框图24.1.3 引脚描述34.1.3 应用范围.54.2 设计方案54.2.1 顶层方案设计54.2.2 顶层模块程序74.3 功能验证方案及源程序7 4.3.1按键输入控制模块方案设计及源程序.7 4.3.2控

2、制模块方案设计及源程序.8 4.3.3LCD驱动模块方案设计及源程序.114.4 电路设计及功能仿真报告194.5 综合及布局布线报告和引脚分布报告214.6 硬件测试结果报告215.课程设计的心得体会226.参考资料221 任务:a、设计一个简单电子琴。(内置24首简单音调曲)b、用FPGA开发板的按键可选择演奏内置曲调,用数码管显示当前演奏的哪个演奏曲目或停止。c、要求电子琴具有自主选择,自动播放所选曲目或停止曲目。2 目的:a、在掌握计算机组成原理理论相关的基础上,了解 EDA技术,掌握 Verilog HDL 硬件描述语言的设计方法和思想,通过学习的 Verilog HDL 语言结合电

3、子电路的设计知识理论联系实际,掌握所学的课程知识;b、深入学习Verilog HDL、FPGA,了解其编程环境;c、学会运用Modelsim和Quartus II等编程仿真软件;d、将硬件语言编程与硬件实物功能演示相结合,加深理解Verilog HDL、FPGA的学习;3 使用环境 (软件/硬件环境,设备等)软硬件环境:软件:Quartus II 7.2, Modelsim6.1;硬件环境:DEII开发板;设备:PC一台,USB下载线,FPGA开发板及电源。 在 EDA 软件平台上,根据硬件描述语言Verilog 完成的设计文件,自动的完成逻辑编译、化简、分割、综合及优化、布局布线、仿真、目标

4、芯片的适配编译、逻辑映射和编程下载等工作。Verilog HDL语言,用Modelsim进行前仿真,以及代码的生成,验证程序验证,也可进行综合。用Quartus II进行后仿真。4 FPGA课程设计详细内容4.1 技术规范4.1.1 原理简易电子琴的设计通过软硬件结合实现,硬件系统包括主控制器芯片、LED、蜂鸣器等,软件资源包括编写Verilog HDL程序的应用软件Modelsim和仿真软件Quartus II。电子琴有自动播放功能。播放功能中有三首曲子。程序共有六个模块,分别为主模块、数码管显示模块、分频模块、计数器模块、存储器模块、音频输出模块。硬件实现是用一个数码管显示当前播放的曲目,

5、另外四个按键key1、key2用来选择曲目。通过主模块调用各模块实现电子琴的功能。乐曲演奏的原理:乐曲演奏的原理:组成乐曲的每个音符的频率值(音调)以及持续时间(音长)是乐曲能持续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号的频率的高低和持续的时间,就可以使扬声器发出持续的乐曲声。l 音调的控制频率的高低决定了音调的高低。音乐的十二平均率规定:每两个八度音(如简谱中的中音1与高音1)之间的频率相差一倍。在两个八度音之间,又可分为十二个半音,每半个音的频率比为。另外,音名A(简谱中的低音6)的频率为440HZ,音名B到C之间,E到F之间为半音,其余为全音。由此可以计算出简谱中从低音

6、1至高音1之间的每个音名对应的频率如图所示:音名频率(HZ)音名频率(HZ)音名频率(HZ)低音1中音1高音1低音2中音2高音2低音3中音3高音3低音4中音4高音4低音5392中音5784高音51568低音6440中音6880高音61760低音7中音7高音7所有不同频率均从同一基准频率分频得到。将分频数四舍五入进行取整,并尽量减小误差。在本设计中选取5MHZ作为基准频率。从下表中可以看出最大分频系数为11468,采用14位二进制计数器分频可满足要求。此外还应给出预置数,对应不同的预置数,只需加载不同的预置数即可。采用加载预置数实现分频的方法比采用反馈复零法节省资源,实现起来更加容易。音名分频比

7、预置数音名分频比预置数音名分频比预置数低音195576826中音1477711606高音1238913994低音285127871中音2425712126高音2212814255低音375858798中音3379212591高音3189614487低音471599224中音4357912804高音4179014593低音5637810005中音5318913194高音5159414789低音6568210701中音6284113524高音6142014963低音7506211321中音7253113852高音7126615117l 音长的控制音符的持续时间须根据音乐的速度及每个音符的节拍数来确

8、定。如果设定全音符的持续时间为1S的话,假设产生4分音符,则产生四分频即可实现四分音符的时长,并提供4HZ分频器。如图为乐曲演奏的原理图,其中,乐谱产生电路用来控制音乐的音调和时长。控制音调通过设置计数器的预置数来实现,预置不同的数值会可以使计数器产生不同频率的信号,从而产生不同的音调。控制音长是通过控制计数器预置数的停留时间来实现的,预置数的停留时间越长,则该音符的演奏时间越长,如2分音符,在记谱时将该音符记录两次即可。本次设计课程的目的是让我们在学习verilogHDL的基础上更加深入的了解硬件设计语言的功能、作用及其特征,并且将我们的动手能力与创新能力结合起来。本次试验的总体框图为: 设

9、计框图说明引脚描述信号名输入/输出目标/源功能描述CLK InputPin主时钟频率,5MHZ,占空比为1:1DIR InputPin使能端,控制时钟产生,以及读写同步OUT OutputPin输出乐曲信号(方波形式)SCREEN OutputPin数码管显示信号4.1.4 顶层划分顶层模块说明:1 D触发器:实现信号读取,产生内部使能端,控制分频器;2 分频器: 实现与基准时钟同步操作,读取存储器数据进行分频操作,实现音调与音长的改变与输出;3 节拍发生器: 根据使能端,产生对应的频率产生对应音符时长;4 存储器:实现将预置数传送给分频器,实现曲目的不停音调和音长;5 2分频器:将产生的信号

10、再次进行2分频;注: 音名显示控制 音名显示电路用来显示演奏乐曲时对应的音乐曲曲目名。可以用三个数码管,加以显示,本设计中使用HIGH3:0,MED3;0,LOW3;0等信号加以显示,为了能使其循环显示,需要一时长计数器,等音乐演奏完成后,保证自动从头开始演奏。 按键接收器 D触发器1、功能描述 运用D触发器和数据锁存器实现数据线输出的使能端。2、管脚描述信号名称输入/输出源目标功能描述DIR输入Pin按键输入信号DR输出Pin使能端3、实现说明:l 在按键信号产生后,进行信号的锁存和产生使能信号。 4、验证方案l 正常的信号锁存,和信号转换;l 是否实现正确使能输出;节拍发生器 分频器 1、

11、功能描述 根据信号的输入,对应产生对应曲目的节拍频率时钟用来读取存储器音调音长数据,产生不同的预置数 2、管脚描述信号名称输入 / 输出源目标功能描述DIR输入PIN按键输入CLK输入PIN基准时钟频率CK输出PIN1位节拍频率时钟 3、实现说明 在CLK的上升沿,将锁存后的DIR信号输入到内部,并根据对应时钟节拍分频,产生对应节拍频率。 4、测试 略; 分频器 1、功能描述 将基准时钟按照预置数的信息进行分频,且与时钟同步,并当使能端低电平时,停止输出,也可实现循环播放。2、管脚描述信号名称输入/输出源目标功能描述DIR输入PIN使能端CK输入PIN基准频率VOICE输入PIN预置数SPEA

12、K输出PIN乐曲输出;3、实现说明通过计数器、存储器、D触发器,实现分频。当计数从预置数到初始值时Speaker翻转一次,即为分频。4、测试用modelsim仿真,观察波形是否为所需方波;存储器 1、功能描述 按照使能端的数据,选择对应的预置数据进行读操作,并且于时钟同步。2、管脚描述信号名称输入/输出源目标功能描述DR输入PIN使能端CLK输入PIN基准频率VOICE输出PIN读取的预置数SCREEN输出PIN数码管信号输出;3、实现说明通过选择,在时钟的上升沿进行数据的读取,并将读出的数据同时传至数码管,与分频器。4、测试用modelsim仿真,观察预置数的值是否为对应曲目;4.1.6 验

13、证方案:正常情况下,输入一个DIR的值,查看波形输出是否正常。改变DIR的值,再次查看波形输出是否正常,并且其频率是否满足上述的公式计算出的值。4.1.7 应用范围:简易电子琴可以应用于简单的设计中,亦可应用于娱乐方面。4.2 设计方案顶层主要是对各个子模块进行调用与连接,顶层主要调用以下模块:(1)按键驱动模块 该模块用于选择所要播放曲目。(2)控制模块:该模块用于处理比较所选择的功能。(3)数码管显示模块:该模块用于显示用户是否登陆成功,即LCD驱动。/信号定义与说明/CLK_4HZ: 用于控制音长(节拍)的时钟频率/clk_6MHZ:用于产生各种音阶频率的基准频率/speak:用于激励扬

14、声器的输出信号,本例中为方波信号/high,med,low:分别用于显示高音,中音和低音音符,各驱动一个数码管来显示module music(clk,key1,key0,speak,high,low,decodeout); /顶层模块: input clk,key1,key0; output speak,high,low; output 6:0 decodeout; wire 1:0 dir; wire clk,key1,key0; wire clk_5MHZ,clk_4hz; wire speak; wire ck,dr; wire 11:0 voice; wire 6:0 decodeou

15、t; wire high,low; assign high=1; assign low=0; assign dir=key1,key0; clock5mhz mhz(.clk(clk),.dir(dir),.clk_5MHZ(clk_5MHZ); clock4hz hz(.clk_5MHZ(clk_5MHZ),.dir(dir),.ck(ck),.clk_4HZ(clk_4HZ); D d1(.dir(dir),.dr(dr); DDR ddr1(.dir(dir),.ck(ck),.voice(voice); main m(.dr(dr),.clk_5MHZ(clk_5MHZ),.clk_4

16、HZ(clk_4HZ),.voice(voice),.speak(speak); decode dec(.dir(dir),.decodeout(decodeout);endmodule /信号定义与说明 /CLK_4HZ: 用于控制音长(节拍)的时钟频率 /clk_6MHZ:用于产生各种音阶频率的基准频率 /speak:用于激励扬声器的输出信号,本例中为方波信号 /high,med,low:分别用于显示高音,中音和低音音符,各驱动一个数码管来显示 module DDR(dir,ck,voice); input 1:0 dir; input ck; output 11:0 voice; wir

17、e 1:0 dir; wire ck; wire 11:0 voice; reg 7:0 counter; reg 3:0 high,med,low; assign voice=high,med,low; always (posedge ck) if(dir=2b00) counter=0; else if(dir=2b01) /梁祝乐曲演奏电路 begin if(counter=63) counter=0; else counter=counter+1; case(counter) 0: high,med,low=b000000000011; 1: high,med,low=b0000000

18、00011; 2: high,med,low=b000000000011; 3: high,med,low=b000000000011; 4: high,med,low=b000000000101; 5: high,med,low=b000000000101; 6: high,med,low=b000000000101; 7: high,med,low=b000000000110; 8: high,med,low=b000000010000; 9: high,med,low=b000000010000; 10: high,med,low=b000000010000; 11: high,med,

19、low=b000000100000; 12: high,med,low=b000000000110; 13: high,med,low=b000000010000; 14: high,med,low=b000000000101; 15: high,med,low=b000000000101; 16: high,med,low=b000001010000; 17: high,med,low=b000001010000; 18: high,med,low=b000001010000; 19: high,med,low=b000100000000; 20: high,med,low=b0000011

20、00000; 21: high,med,low=b000001010000; 22: high,med,low=b000000110000; 23: high,med,low=b000001010000; 24: high,med,low=b000000100000; 25: high,med,low=b000000100000; 26: high,med,low=b000000100000; 27: high,med,low=b000000100000; 28: high,med,low=b000000100000; 29: high,med,low=b000000100000; 30: h

21、igh,med,low=b000000100000; 31: high,med,low=b000000100000; 32: high,med,low=b000000100000; 33: high,med,low=b000000100000; 34: high,med,low=b000000100000; 35: high,med,low=b000000110000; 36: high,med,low=b000000000111; 37: high,med,low=b000000000111; 38: high,med,low=b000000000110; 39: high,med,low=

22、b000000000110; 40: high,med,low=b000000000101; 41: high,med,low=b000000000101; 42: high,med,low=b000000000101; 43: high,med,low=b000000000110; 44: high,med,low=b000000010000; 45: high,med,low=b000000010000; 46: high,med,low=b000000100000; 47: high,med,low=b000000100000; 48: high,med,low=b00000000001

23、1; 49: high,med,low=b000000000011; 50: high,med,low=b000000010000; 51: high,med,low=b000000010000; 52: high,med,low=b000000000110; 53: high,med,low=b000000000101; 54: high,med,low=b000000000110; 55: high,med,low=b000000010000; 56: high,med,low=b000000000101; 57: high,med,low=b000000000101; 58: high,

24、med,low=b000000000101; 59: high,med,low=b000000000101; 60: high,med,low=b000000000101; 61: high,med,low=b000000000101; 62: high,med,low=b000000000101; 63: high,med,low=b000000000101; default: high,med,low=b000000000000; endcase end else if(dir=2b10) /天空之城乐曲演奏电路 begin if(counter=195) counter=0; else

25、counter=counter+1; case(counter) 0: high,med,low=b000001100000;/中6 1: high,med,low=b000010000000;/中7 2: high,med,low=b000100000000;/高1 3: high,med,low=b000100000000;/高1 4: high,med,low=b000100000000;/高1 5: high,med,low=b000010000000;/中7 6: high,med,low=b000100000000;/高1 7: high,med,low=b000100000000

26、;/高1 8: high,med,low=b001100000000;/高3 9: high,med,low=b001100000000;/高3 10: high,med,low=b000010000000;/中7 11: high,med,low=b000010000000;/中7 12: high,med,low=b000010000000;/中7 13: high,med,low=b000010000000;/中7 14: high,med,low=b000010000000;/中7 15: high,med,low=b000010000000;/中7 16: high,med,low=

27、b000000110000;/中3 17: high,med,low=b000000110000;/中3 18: high,med,low=b000001100000;/中6 19: high,med,low=b000001100000;/中6 20: high,med,low=b000001100000;/中6 21: high,med,low=b000001010000;/中5 22: high,med,low=b000001100000;/中6 23: high,med,low=b000001100000;/中6 24: high,med,low=b000000000111;/中1 25

28、: high,med,low=b000000000111;/中1 26: high,med,low=b000001010000;/中5 27: high,med,low=b000001010000;/中5 28: high,med,low=b000001010000;/中5 29: high,med,low=b000001010000;/中5 30: high,med,low=b000001010000;/中5 31: high,med,low=b000001010000;/中5 32: high,med,low=b000000110000;/中3 33: high,med,low=b0000

29、00110000;/中3 34: high,med,low=b000000111000;/中4 35: high,med,low=b000000111000;/中4 36: high,med,low=b000000111000;/中4 37: high,med,low=b000000110000;/中3 38: high,med,low=b000000111000;/中4 39: high,med,low=b000100000000;/高1 40: high,med,low=b000100000000;/高1 41: high,med,low=b000100000000;/高1 42: hig

30、h,med,low=b000000110000;/中3 43: high,med,low=b000000110000;/中3 44: high,med,low=b000000110000;/中3 45: high,med,low=b000100000000;/高1 46: high,med,low=b000100000000;/高1 47: high,med,low=b000100000000;/高1 48: high,med,low=b000010000000;/中7 49: high,med,low=b000010000000;/中7 50: high,med,low=b000010000

31、000;/中7 51: high,med,low=b000000111000;/中4 52: high,med,low=b000000111000;/中4 53: high,med,low=b000000111000;/中4 54: high,med,low=b000010000000;/中7 55: high,med,low=b000010000000;/中7 56: high,med,low=b000010000000;/中7 57: high,med,low=b000010000000;/中7 58: high,med,low=b000010000000;/中7 59: high,med

32、,low=b000010000000;/中7 60: high,med,low=b000010000000;/中7 61: high,med,low=b000010000000;/中7 62: high,med,low=b000001100000;/中6 63: high,med,low=b000010000000;/中7 64: high,med,low=b000100000000;/高1 65: high,med,low=b000100000000;/高1 66: high,med,low=b000100000000;/高1 68: high,med,low=b000100000000;/

33、高1 69: high,med,low=b000100000000;/高1 70: high,med,low=b001100000000;/高3 71: high,med,low=b001100000000;/高3 72: high,med,low=b000010000000;/中7 73: high,med,low=b000010000000;/中7 74: high,med,low=b000010000000;/中7 75: high,med,low=b000000110000;/中3 76: high,med,low=b000000110000;/中3 77: high,med,low=

34、b000001100000;/中6 78: high,med,low=b000001100000;/中6 79: high,med,low=b000001100000;/中6 80: high,med,low=b000000000101;/中5 81: high,med,low=b000001100000;/中6 82: high,med,low=b000001100000;/中6 83: high,med,low=b000000000111;/中1 84: high,med,low=b000000000111;/中1 85: high,med,low=b000001010000;/中5 86

35、: high,med,low=b000001010000;/中5 87: high,med,low=b000001010000;/中5 88: high,med,low=b000001010000;/中5 89: high,med,low=b000001010000;/中5 90: high,med,low=b000001010000;/中5 91: high,med,low=b000000110000;/中3 92: high,med,low=b000000110000;/中3 93: high,med,low=b000000111000;/中4 94: high,med,low=b0000

36、00111000;/中4 95: high,med,low=b000100000000;/高1 96: high,med,low=b000010000000;/中7 97: high,med,low=b000010000000;/中7 98: high,med,low=b000010000000;/中7 99: high,med,low=b000100000000;/高1 100: high,med,low=b000100000000;/高1 101: high,med,low=b001000000000;/高2 102: high,med,low=b001000000000;/高2 103:

37、 high,med,low=b001100000000;/高3 104: high,med,low=b000100000000;/高1 105: high,med,low=b000100000000;/高1 106: high,med,low=b000100000000;/高1 107: high,med,low=b000100000000;/高1 108: high,med,low=b000100000000;/高1 109: high,med,low=b000100000000;/高1 110: high,med,low=b000010000000;/中7 111: high,med,lo

38、w=b000001100000;/中6 112: high,med,low=b000001100000;/中6 113: high,med,low=b000010000000;/中7 114: high,med,low=b000010000000;/中7 115: high,med,low=b000001010000;/中5 116: high,med,low=b000001010000;/中5 117: high,med,low=b000001100000;/中6 118: high,med,low=b000001100000;/中6 119: high,med,low=b000001100

39、000;/中6 120: high,med,low=b000001100000;/中6 121: high,med,low=b000001100000;/中6 122: high,med,low=b000001100000;/中6 123: high,med,low=b000000000111;/中1 124: high,med,low=b000000000111;/中1 125: high,med,low=b001000000000;/高2 126: high,med,low=b001100000000;/高3 127: high,med,low=b001100000000;/高3 128:

40、 high,med,low=b001100000000;/高3 129: high,med,low=b001000000000;/高2 130: high,med,low=b001100000000;/高3 131: high,med,low=b001100000000;/高3 134: high,med,low=b001000000000;/高2 135: high,med,low=b001000000000;/高2 136: high,med,low=b001000000000;/高2 137: high,med,low=b001000000000;/高2 138: high,med,lo

41、w=b001000000000;/高2 139: high,med,low=b001000000000;/高2 140: high,med,low=b000001010000;/中5 141: high,med,low=b000001010000;/中5 142: high,med,low=b000100000000;/高1 143: high,med,low=b000100000000;/高1 144: high,med,low=b000100000000;/高1 145: high,med,low=b000010000000;/中7 146: high,med,low=b000100000

42、000;/高1 147: high,med,low=b000100000000;/高1 148: high,med,low=b001100000000;/高3 149: high,med,low=b001100000000;/高3 150: high,med,low=b001100000000;/高3 151: high,med,low=b001100000000;/高3 152: high,med,low=b001100000000;/高3 153: high,med,low=b001100000000;/高3 154: high,med,low=b001100000000;/高3 155: high,med,low=b001100000000;/高3 156: high,med,low=b000001100000;/中6 157: high,med,low=b000001100000;/中6 158: high,med,low=b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论