1、FPGA课程设计汇报题 目: 简易电子琴设计及FPGA功效验证 院 系: 电子工程学院专业班级: 学生姓名: 导师姓名: 黄海生 起止时间: -6-18 至 -6-29 6 月 29 日 目录1.任务.22.目标23.使用环境24.FPGA课程设计具体内容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控制模块方案设计及源程序.8 4.3.3LCD驱动模块方案设计及源程序.1
2、14.4 电路设计及功效仿真汇报194.5 综合及布局布线汇报和引脚分布汇报214.6 硬件测试结果汇报215.课程设计心得体会226.参考资料221 任务:a、设计一个简单电子琴。(内置24首简单音调曲)b、用FPGA开发板按键可选择演奏内置曲调,用数码管显示目前演奏哪个演奏曲目或停止。c、要求电子琴含有自主选择,自动播放所选曲目或停止曲目。2 目标:a、在掌握计算机组成原理理论相关基础上,了解 EDA技术,掌握 Verilog HDL 硬件描述语言设计方法和思想,经过学习 Verilog HDL 语言结合电子电路设计知识理论联络实际,掌握所学课程知识;b、深入学习Verilog HDL、F
3、PGA,了解其编程环境;c、学会利用Modelsim和Quartus II等编程仿真软件;d、将硬件语言编程和硬件实物功效演示相结合,加深了解Verilog HDL、FPGA学习;3 使用环境 (软件/硬件环境,设备等)软硬件环境:软件:Quartus II 7.2, Modelsim6.1;硬件环境:DEII开发板;设备:PC一台,USB下载线,FPGA开发板及电源。 在 EDA 软件平台上,依据硬件描述语言Verilog 完成设计文件,自动完成逻辑编译、化简、分割、综合及优化、布局布线、仿真、目标芯片适配编译、逻辑映射和编程下载等工作。Verilog HDL语言,用Modelsim进行前仿
4、真,和代码生成,验证程序验证,也可进行综合。用Quartus II进行后仿真。4 FPGA课程设计具体内容4.1 技术规范4.1.1 原理简易电子琴设计经过软硬件结合实现,硬件系统包含主控制器芯片、LED、蜂鸣器等,软件资源包含编写Verilog HDL程序应用软件Modelsim和仿真软件Quartus II。电子琴有自动播放功效。播放功效中有三首曲子。程序共有六个模块,分别为主模块、数码管显示模块、分频模块、计数器模块、存放器模块、音频输出模块。硬件实现是用一个数码管显示目前播放曲目,另外四个按键key1、key2用来选择曲目。经过主模块调用各模块实现电子琴功效。乐曲演奏原理:乐曲演奏原理
5、:组成乐曲每个音符频率值(音调)和连续时间(音长)是乐曲能连续演奏所需两个基础数据,所以只要控制输出到扬声器激励信号频率高低和连续时间,就能够使扬声器发出连续乐曲声。l 音调控制频率高低决定了音调高低。音乐十二平均率要求:每两个八度音(如简谱中中音1和高音1)之间频率相差一倍。在两个八度音之间,又可分为十二个半音,每半个音频率比为。另外,音名A(简谱中低音6)频率为440HZ,音名B到C之间,E到F之间为半音,其它为全音。由此能够计算出简谱中从低音1至高音1之间每个音名对应频率图所表示:音名频率(HZ)音名频率(HZ)音名频率(HZ)低音1261.6中音1523.3高音11046.5低音229
6、3.7中音2587.3高音21174.7低音3329.6中音3659.3高音31318.5低音4349.2中音4698.5高音41396.9低音5392中音5784高音51568低音6440中音6880高音61760低音7493.9中音7987.8高音71975.5全部不一样频率均从同一基准频率分频得到。将分频数四舍五入进行取整,并尽可能减小误差。在本设计中选择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分音符,在记谱时将该音符统计两次即可。4.1.2总体方案此次设计课程目标是让我们在学习verilogHDL基础上愈加深入了解硬件设计语言功效、作用及其特征,而且将我们动手能力和创新能力结合起来。此次试验总体框图为: 设计框图说明4.
9、1.3引脚描述信号名输入/输出目标/源功效描述CLK InputPin主时钟频率,5MHZ,占空比为1:1DIR InputPin使能端,控制时钟产生,和读写同时OUT OutputPin输出乐曲信号(方波形式)SCREEN OutputPin数码管显示信号4.1.4 顶层划分顶层模块说明:1 D触发器:实现信号读取,产生内部使能端,控制分频器;2 分频器: 实现和基按时钟同时操作,读取存放器数据进行分频操作,实现音调和音长改变和输出;3 节拍发生器: 依据使能端,产生对应频率产生对应音符时长;4 存放器:实现将预置数传送给分频器,实现曲目标不停音调和音长;5 2分频器:将产生信号再次进行2分
10、频;注: 音名显示控制 音名显示电路用来显示演奏乐曲时对应音乐曲曲目名。能够用三个数码管,加以显示,本设计中使用HIGH3:0,MED3;0,LOW3;0等信号加以显示,为了能使其循环显示,需要一时长计数器,等音乐演奏完成后,确保自动从头开始演奏。4.1.5子模块描述 按键接收器 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预置数SPEAK输出P
12、IN乐曲输出;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 设计方案4.2.1顶层方案设计顶层关键是对各个子模块进行调用和连接,顶层关键调用以下模块:(1)按键驱动模块 该模块用于选择所要播放曲目。(2)控制模块:该模块用于处理比较所选择功效。(3)数码管显示模块:该模块用于显示用户是否登陆成功,即LCD驱动。4.2.2顶层模块程序/信号定义和说明/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 decode
15、out; 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
16、_4HZ(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; wire
17、 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=b; 1: high,med,low=b; 2: high,med,low=b;
18、 3: high,med,low=b; 4: high,med,low=b; 5: high,med,low=b; 6: high,med,low=b; 7: high,med,low=b; 8: high,med,low=b; 9: high,med,low=b; 10: high,med,low=b; 11: high,med,low=b; 12: high,med,low=b; 13: high,med,low=b; 14: high,med,low=b; 15: high,med,low=b; 16: high,med,low=b; 17: high,med,low=b; 18: hi
19、gh,med,low=b; 19: high,med,low=b; 20: high,med,low=b; 21: high,med,low=b; 22: high,med,low=b; 23: high,med,low=b; 24: high,med,low=b; 25: high,med,low=b; 26: high,med,low=b; 27: high,med,low=b; 28: high,med,low=b; 29: high,med,low=b; 30: high,med,low=b; 31: high,med,low=b; 32: high,med,low=b; 33: hi
20、gh,med,low=b; 34: high,med,low=b; 35: high,med,low=b; 36: high,med,low=b; 37: high,med,low=b; 38: high,med,low=b; 39: high,med,low=b; 40: high,med,low=b; 41: high,med,low=b; 42: high,med,low=b; 43: high,med,low=b; 44: high,med,low=b; 45: high,med,low=b; 46: high,med,low=b; 47: high,med,low=b; 48: hi
21、gh,med,low=b; 49: high,med,low=b; 50: high,med,low=b; 51: high,med,low=b; 52: high,med,low=b; 53: high,med,low=b; 54: high,med,low=b; 55: high,med,low=b; 56: high,med,low=b; 57: high,med,low=b; 58: high,med,low=b; 59: high,med,low=b; 60: high,med,low=b; 61: high,med,low=b; 62: high,med,low=b; 63: hi
22、gh,med,low=b; default: high,med,low=b; endcase end else if(dir=2b10) /天空之城乐曲演奏电路 begin if(counter=195) counter=0; else counter=counter+1; case(counter) 0: high,med,low=b;/中6 1: high,med,low=b;/中7 2: high,med,low=b;/高1 3: high,med,low=b;/高1 4: high,med,low=b;/高1 5: high,med,low=b;/中7 6: high,med,low=
23、b;/高1 7: high,med,low=b;/高1 8: high,med,low=b;/高3 9: high,med,low=b;/高3 10: high,med,low=b;/中7 11: high,med,low=b;/中7 12: high,med,low=b;/中7 13: high,med,low=b;/中7 14: high,med,low=b;/中7 15: high,med,low=b;/中7 16: high,med,low=b;/中3 17: high,med,low=b;/中3 18: high,med,low=b;/中6 19: high,med,low=b;/中
24、6 20: high,med,low=b;/中6 21: high,med,low=b;/中5 22: high,med,low=b;/中6 23: high,med,low=b;/中6 24: high,med,low=b;/中1 25: high,med,low=b;/中1 26: high,med,low=b;/中5 27: high,med,low=b;/中5 28: high,med,low=b;/中5 29: high,med,low=b;/中5 30: high,med,low=b;/中5 31: high,med,low=b;/中5 32: high,med,low=b;/中3
25、 33: high,med,low=b;/中3 34: high,med,low=b;/中4 35: high,med,low=b;/中4 36: high,med,low=b;/中4 37: high,med,low=b;/中3 38: high,med,low=b;/中4 39: high,med,low=b;/高1 40: high,med,low=b;/高1 41: high,med,low=b;/高1 42: high,med,low=b;/中3 43: high,med,low=b;/中3 44: high,med,low=b;/中3 45: high,med,low=b;/高1
26、46: high,med,low=b;/高1 47: high,med,low=b;/高1 48: high,med,low=b;/中7 49: high,med,low=b;/中7 50: high,med,low=b;/中7 51: high,med,low=b;/中4 52: high,med,low=b;/中4 53: high,med,low=b;/中4 54: high,med,low=b;/中7 55: high,med,low=b;/中7 56: high,med,low=b;/中7 57: high,med,low=b;/中7 58: high,med,low=b;/中7 5
27、9: high,med,low=b;/中7 60: high,med,low=b;/中7 61: high,med,low=b;/中7 62: high,med,low=b;/中6 63: high,med,low=b;/中7 64: high,med,low=b;/高1 65: high,med,low=b;/高1 66: high,med,low=b;/高1 67: high,med,low=b;/高7 68: high,med,low=b;/高1 69: high,med,low=b;/高1 70: high,med,low=b;/高3 71: high,med,low=b;/高3 72
28、: high,med,low=b;/中7 73: high,med,low=b;/中7 74: high,med,low=b;/中7 75: high,med,low=b;/中3 76: high,med,low=b;/中3 77: high,med,low=b;/中6 78: high,med,low=b;/中6 79: high,med,low=b;/中6 80: high,med,low=b;/中5 81: high,med,low=b;/中6 82: high,med,low=b;/中6 83: high,med,low=b;/中1 84: high,med,low=b;/中1 85:
29、 high,med,low=b;/中5 86: high,med,low=b;/中5 87: high,med,low=b;/中5 88: high,med,low=b;/中5 89: high,med,low=b;/中5 90: high,med,low=b;/中5 91: high,med,low=b;/中3 92: high,med,low=b;/中3 93: high,med,low=b;/中4 94: high,med,low=b;/中4 95: high,med,low=b;/高1 96: high,med,low=b;/中7 97: high,med,low=b;/中7 98:
30、high,med,low=b;/中7 99: high,med,low=b;/高1 100: high,med,low=b;/高1 101: high,med,low=b;/高2 102: high,med,low=b;/高2 103: high,med,low=b;/高3 104: high,med,low=b;/高1 105: high,med,low=b;/高1 106: high,med,low=b;/高1 107: high,med,low=b;/高1 108: high,med,low=b;/高1 109: high,med,low=b;/高1 110: high,med,low=
31、b;/中7 111: high,med,low=b;/中6 112: high,med,low=b;/中6 113: high,med,low=b;/中7 114: high,med,low=b;/中7 115: high,med,low=b;/中5 116: high,med,low=b;/中5 117: high,med,low=b;/中6 118: high,med,low=b;/中6 119: high,med,low=b;/中6 120: high,med,low=b;/中6 121: high,med,low=b;/中6 122: high,med,low=b;/中6 123: h
32、igh,med,low=b;/中1 124: high,med,low=b;/中1 125: high,med,low=b;/高2 126: high,med,low=b;/高3 127: high,med,low=b;/高3 128: high,med,low=b;/高3 129: high,med,low=b;/高2 130: high,med,low=b;/高3 131: high,med,low=b;/高3 132: high,med,low=b;/高5 133: high,med,low=b;/高5 134: high,med,low=b;/高2 135: high,med,low=
33、b;/高2 136: high,med,low=b;/高2 137: high,med,low=b;/高2 138: high,med,low=b;/高2 139: high,med,low=b;/高2 140: high,med,low=b;/中5 141: high,med,low=b;/中5 142: high,med,low=b;/高1 143: high,med,low=b;/高1 144: high,med,low=b;/高1 145: high,med,low=b;/中7 146: high,med,low=b;/高1 147: high,med,low=b;/高1 148: high,med,low=b;/高3