



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、( 此文档为 word 格式,下载后您可任意编辑修改!)西安邮电大学FPGA 课程设计报告题目:简易电子琴设计及FPGA功能验证院系:电子工程学院专业班级:微电子 0901导师姓名:黄海生2012年6 月 29 日1目录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功能验证方案及源程序 .74.3.1按键输入控制模块方案设计及源程序 .74.3.2控制模块方案设计
2、及源程序 .84.3.3LCD 驱动模块方案设计及源程序 .114.4电路设计及功能仿真报告 .194.5综合及布局布线报告和引脚分布报告 .214.6硬件测试结果报告 .215.课程设计的心得体会 .226.参考资料 .221 任务:a、设计一个简单电子琴。 (内置 24 首简单音调曲)b、用 FPGA 开发板的按键可选择演奏内置曲调,用数码管显示当前演奏的哪个演奏曲目或停止。c、要求电子琴具有自主选择,自动播放所选曲目或停止曲目。2 目的:2a、在掌握计算机组成原理理论相关的基础上,了解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 技术规范原理简易电子琴的设计通过软硬件结合实现,硬件系统包括主控制器芯片、LED 、蜂鸣器等,软件资源包括编写Verilog HDL 程序的应用软件 Modelsim 和仿真软件 Quartus II 。电子琴有自动播放功能。播放功能中有三首曲子。程序共有六个模块,分别为主模块、数码管显示模块、分频模块、计数器模块、存储器模块
5、、音频输出模块。硬件实现是用一个数码管显示当前播放的曲目,另外四个按键key1、key2 用来选择曲目。通过主模块调用各模块实现电子琴的功能。乐曲演奏的原理:乐曲演奏的原理:组成乐曲的每个音符的频率值 (音调 )以及持续时间(音长)是乐曲能持续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号的频率的高低和持续的时间,就可以使扬声器发出持续的乐曲声。音调的控制3频率的高低决定了音调的高低。音乐的十二平均率规定:每两个八度音(如简谱中的中音1 与高音 1)之间的频率相差一倍。在两个八度音之间,又可分为十二个半音, 每半个音的频率比为。 另外,音名 A( 简谱中的低音 6)的频率为 440
6、HZ ,音名 B 到 C 之间, E 到 F 之间为半音,其余为全音。由此可以计算出简谱中从低音1 至高音 1 之间的每个音名对应的频率如图所示:音名频率 (HZ)音名频率 (HZ)音名频率 (HZ)低音 1261.6中音 1523.3高音 11046.5低音 2293.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所有不同频率均从同一基准频率分频
7、得到。将分频数四舍五入进行取整,并尽量减小误差。在本设计中选取5MHZ 作为基准频率。从下表中可以看出最大分频系数为11468 ,采用 14 位二进制计数器分频可满足要求。此外还应给出预置数,对应不同的预置数,只需加载不同的预置数即可。采用加载预置数实现分频的方法比采用反馈复零法节省资源,实现起来更加容易。音名分频预置音名分频预置音名分频预置比数比数比数低音 195576826中音 1477711606高音 1238913994低音 285127871中音 2425712126高音 2212814255低音 375858798中音 3379212591高音 3189614487低音 47159
8、9224中音 4357912804高音 4179014593低音 5637810005中音 5318913194高音 5159414789低音 6568210701中音 6284113524高音 6142014963低音 7506211321中音 7253113852高音 7126615117音长的控制音符的持续时间须根据音乐的速度及每个音符的节拍数来确定。如果设定全音符的持续时间为 1S 的话,假设产生4 分音符,则产生四分频即可实现四分音符的时长,并提供4HZ分频器。如图为乐曲演奏的原理图,其中,乐谱产生电路用来控制音乐的音调和时长。控制音调通过设置计数器的预置数来实现,预置不同的数值会可
9、以使计数器产生不同频率的信号,从而产生不同的音调。控制音长是通过控制计数器预置数的停留时间来实现的,预置数的停留时间越长,则该音符的演奏时间越长,如2 分音符,在记谱时将该音符记录两次即可。总体方案本次设计课程的目的是让我们在学习verilogHDL 的基础上更加深入的了解硬件设计语言的4功能、作用及其特征,并且将我们的动手能力与创新能力结合起来。本次试验的总体框图为:设计框图说明引脚描述信号名输入输出目标源功能描述CLKInputPin主时钟频率, 5MHZ ,占空比为 1:1DIRInputPin使能端,控制时钟产生,以及读写同步OUTOutputPin输出乐曲信号 (方波形式 )SCRE
10、ENOutputPin数码管显示信号4.1.4 顶层划分5顶层模块说明:1D 触发器:实现信号读取,产生内部使能端,控制分频器;2分频器 :实现与基准时钟同步操作, 读取存储器数据进行分频操作,实现音调与音长的改变与输出;3节拍发生器 : 根据使能端,产生对应的频率产生对应音符时长;4存储器:实现将预置数传送给分频器,实现曲目的不停音调和音长;52 分频器:将产生的信号再次进行2 分频;注: 音名显示控制音名显示电路用来显示演奏乐曲时对应的音乐曲曲目名。可以用三个数码管,加以显示,本设计中使用 HIGH3:0,MED3;0,LOW3;0 等信号加以显示,为了能使其循环显示,需要一时长计数器,等
11、音乐演奏完成后,保证自动从头开始演奏。子模块描述6<1>按键接收器D 触发器1、功能描述运用 D 触发器和数据锁存器实现数据线输出的使能端。2、管脚描述信号名称输入输出源目标功能描述DIR输入Pin按键输入信号DR输出Pin使能端3、实现说明:在按键信号产生后,进行信号的锁存和产生使能信号。4、验证方案正常的信号锁存,和信号转换;是否实现正确使能输出;<2>节拍发生器分频器1、功能描述根据信号的输入,对应产生对应曲目的节拍频率时钟用来读取存储器音调音长数据,产生不同的预置数2、管脚描述信号名称输入输出源目标功能描述DIR输入PIN按键输入CLK输入PIN基准时钟频率CK
12、输出PIN1 位节拍频率时钟3、实现说明在 CLK 的上升沿,将锁存后的 DIR 信号输入到内部,并根据对应时钟节拍分频,产生对应节拍频率。4、测试略;<3> 分频器1、功能描述将基准时钟按照预置数的信息进行分频,且与时钟同步,并当使能端低电平时,停止输出,也可实现循环播放。2、管脚描述信号名称输入输出源目标功能描述DIR输入PIN使能端CK输入PIN基准频率VOICE输入PIN预置数SPEAK输出PIN乐曲输出;3、实现说明通过计数器、存储器、 D 触发器,实现分频。当计数从预置数到初始值7时 Speaker 翻转一次,即为分频。4、测试用 modelsim仿真,观察波形是否为所
13、需方波;<4>存储器1、功能描述按照使能端的数据, 选择对应的预置数据进行读操作, 并且于时钟同步。2、管脚描述信号名称输入输出源目标功能描述DR输入PIN使能端CLK输入PIN基准频率VOICE输出PIN读取的预置数SCREEN输出PIN数码管信号输出;3、实现说明通过选择,在时钟的上升沿进行数据的读取,并将读出的数据同时传至数码管,与分频器。4、测试用 modelsim仿真,观察预置数的值是否为对应曲目;验证方案:正常情况下,输入一个 DIR 的值,查看波形输出是否正常。改变 DIR 的值,再次查看波形输出是否正常,并且其频率是否满足上述的公式计算出的值。应用范围 :简易电子琴
14、可以应用于简单的设计中,亦可应用于娱乐方面。4.2 设计方案顶层方案设计顶层主要是对各个子模块进行调用与连接,顶层主要调用以下模块:(1)按键驱动模块该模块用于选择所要播放曲目。(2)控制模块:该模块用于处理比较所选择的功能。(3)数码管显示模块:该模块用于显示用户是否登陆成功,即LCD 驱动。顶层模块程序信号定义与说明CLK_4HZ: 用于控制音长 ( 节拍 ) 的时钟频率clk_6MHZ:用于产生各种音阶频率的基准频率speak: 用于激励扬声器的输出信号, 本例中为方波信号low=0;assign dir=key1,key0;clock5mhz mhz(.clk(clk),.dir(di
15、r),.clk_5MHZ(clk_5MHZ);clock4hz8m(.dr(dr),.clk_5MHZ(clk_5MHZ),.clk_4HZ(clk_4HZ),.voice(voice),.speak (speak);decode dec(.dir(dir),.decodeout(decodeout);endmodule信号定义与说明CLK_4HZ:用于控制音长 ( 节拍 ) 的时钟频率clk_6MHZ:用于产生各种音阶频率的基准频率speak: 用于激励扬声器的输出信号 , 本例中为方波信号 voice=if(counter=63) counter<=0;else counter<
16、;=counter+1;case(counter)0: if(counter=195) counter<=0;else counter<=counter+1;case(counter)0: if(counter=103) counter<=0;else counter<=counter+1;case(counter)0: if(dir=2'b00) clk_5MHZ<=0; else if(cnt<4'b1010)cnt<=cnt+4'b0001;else begincnt<=4'b0000; clk_5MHZ&l
17、t;=clk_5MHZ; endendendmodulemodule clock4hz(clk_5MHZ,dir,ck,clk_4HZ);时钟频率 4Hz( 基于 clock6mhz 分频后的时钟再次分频 )input clk_5MHZ;input 1:0 dir;output clk_4HZ;output ck;wire clk_5MHZ,ck;wire 1:0 dir;reg clk_4HZ;reg 19:0 cnt;assign ck=clk_4HZ;9always(posedge clk_5MHZ)beginif(dir=2'b00)clk_4HZ<=0;elsebegi
18、ncnt<=20'b0;clk_4HZ<=clk_4HZ;endendendmodule触发器模块:module D(dir,dr);input 1:0 dir;output dr;wire dr;wire 1:0 dir;assign dr=dir0|dir1;endmodule数码管显示:module decode(dir,decodeout);input1:0 dir;output6:0 decodeout;reg 6:0 decodeout;wire 1:0 dir;always (dir)begincase(dir)endcaseendendmodule分频器模块
19、:module main(dr,clk_5MHZ,clk_4HZ,voice,speak);input dr;input clk_5MHZ;input 11:0 voice;input clk_4HZ;output speak;wire dr;wire clk_5MHZ,clk_4HZ;wire 11:0 voice;reg speak;10reg 13:0 divider,origin;wire carry;assign carry=(divider=16383);always (posedge clk_5MHZ)beginif(carry) divider<=origin;else
20、divider=divider+1;endalways (posedge carry)beginspeak<=speak;endalways (posedge clk_4HZ)beginif(dr=1'b0)origin<=16383;case(voice)default: origin<=16383;endcaseendendmodule激励module epiano_tb;reg clk50m,clk27m,rst,key1,key2;wire spk_out;wire 6:0 key_display;e_pianoa(.clk50m(clk),.clk27m(c
21、lk27m),.spk_out(speak),.rst(rst),.key1(key1),.key2(key2),.key_display(key_display);always #10 clk50m=clk50m;always #20 clk27m=clk27m;initialbeginclk50m=0;clk27m=0;#50 rst=0;#50 rst=1;#1500 key1=0;key2=1;#2000 key1=1;key2=1;endendmodule4.3 功能验证方案及源程序计数器模块11module counter(fenpin8,cout,rst,key1,key2);i
22、nput fenpin8,rst,key1,key2;output 10:0cout;reg 10:0 cout;always (posedge fenpin8 or negedge rst or negedge key1 or negedge key2)beginif(!rst)cout<=11'd0;elsebeginif(!key1)begincout<=11'd0;endelse if(!key2)begincout<=11'd512;endelse if(!key3)begincout<=11'd1024;endelse if(
23、!key4)begincout<=11'd1536;endelsecout<=cout+1;endendendmodule分频模块module fenpin8(clk27m,rst,clk_8hz);input clk27m,rst;output clk_8hz;reg clk_8hz;reg 31:0 cnt;always (posedge clk27m or negedge rst)beginif(!rst)begincnt<=0;12clk_8hz<=0;endelsebeginif(cnt=N2)begincnt<=0;clk_8hz<=!c
24、lk_8hz;endelsecnt<=cnt+1;endendendmodule激励module fenpin8_tb;reg clk27m,rst;wire clk_8hz;fenpin8 fenpin8_tb(.clk27m(clk27m),.clk_8hz(clk_8hz),.rst(rst);always #50 clk27m=clk27m;initialbeginclk27m=0;#20 rst=0;#80 rst=1;endendmodulemodule fenpin5m(clk50m,rst,clk_5m);input clk50m,rst;output clk_5m;re
25、g clk_5m;reg 3:0 cnt;parameter N=10;always (posedge clk50m or negedge rst)beginif(!rst)begincnt<=0;clk_5m<=0;endelsebegin13if(cnt=N2)begincnt<=0;clk_5m<=!clk_5m;endendendendmodule激励module fenpin5m_tb;reg clk50m,rst;wire clk_5m;fenpin5m fenpin5m_tb(.clk50m(clk50m),.clk_5m(clk_5m),.rst(rst
26、);always #50 clk50m=clk50m;initialbeginclk50m=0;#20 rst=0;#80 rst=1;endendmodule存数器模块module music_rom (address,clock,q);input10:0 address;inputclock;output 7:0 q;wire 7:0 sub_wire0;wire 7:0 q = sub_wire07:0;altsyncramaltsyncram_component (.clock0 (clock),.address_a (address),.q_a (sub_wire0),.aclr0
27、(1'b0),.aclr1 (1'b0),.address_b (1'b1),.addressstall_a (1'b0),.addressstall_b (1'b0),.byteena_a (1'b1),.byteena_b (1'b1),.clock1 (1'b1),14.clocken0 (1'b1),.clocken1 (1'b1),.clocken2 (1'b1),.clocken3 (1'b1),.data_a (81'b1),.data_b (1'b1),.eccsta
28、tus (),.q_b (),.rden_a (1'b1),.rden_b (1'b1),.wren_a (1'b0),.wren_b (1'b0);defparamaltsyncram_component.clock_enable_input_a = "BYPASS",altsyncram_component.clock_enable_output_a = "BYPASS",altsyncram_component.init_file = "zxmzf_mif.mif",altsyncram_comp
29、ended_device_family = "Cyclone II",altsyncram_component.lpm_mode = "ROM",altsyncram_component.outdata_aclr_a = "NONE",altsyncram_component.outdata_reg_a = "CLOCK0",altsyncram_component.widthad_a = 11,altsyncram_component.width_a = 8,altsyncram_compone
30、nt.width_byteena_a = 1;endmodule激励module music_rom_tb;reg 8:0address;reg clk;wire 7:0q;music_rommusic_rom_tb(.address(address),.clock(clk),.q(q);always #50 clk=clk;initialbeginclk=0;#100 address=3;#100 address=12;#40 address=10;endendmodule音频输出模块module SPK_OUT(data,spk_out,clk_5m,clk_8hz);input 7:0d
31、ata;input clk_5m,clk_8hz;output spk_out;15reg spk_out=0;reg 13:0reg_temp;reg 13:0 count=0;always (posedge clk_8hz)begincase(data)7'd0: reg_temp=16383;7'd1: reg_temp=9557;7'd2: reg_temp=8513;7'd3: reg_temp=7584;7'd4: reg_temp=7159;7'd5: reg_temp=6378;7'd6: reg_temp=5682;7&
32、#39;d7: reg_temp=5061;7'd8: reg_temp=4778;7'd9: reg_temp=4257;7'd10: reg_temp=3584;7'd11: reg_temp=3579;7'd12: reg_temp=3189;7'd13: reg_temp=2841;7'd14: reg_temp=2531;7'd15: reg_temp=2389;7'd16: reg_temp=2128;7'd17: reg_temp=1810;7'd18: reg_temp=1790;7'
33、;d19: reg_temp=1594;7'd20: reg_temp=1420;7'd21: reg_temp=1265;default: reg_temp=16383;endcaseendalways (posedge clk_5m)beginif(count>reg_temp)begincount<=0;spk_out<=spk_out;endelsecount<=count+1;endendmodule激励16module SPK_OUT_tb;reg clk_5m,clk_8hz;reg 5:0data;wire spk_out;SPK_OUT
34、uaa(.data(data),.clk_5m(clk_5m),.clk_8hz(clk_8hz),.spk_out(spk_out);always #25 clk_5m=clk_5m;always #3000 clk_8hz=clk_8hz;initialbeginclk_5m=0;clk_8hz=0;#3000 data=5;#6000 data=7;endendmodule数码管显示模块module shumaguan(key1,key2,key_display,rst);input key1,key2,rst;output 6:0 key_display;reg 6:0 key_dis
35、play;always (negedge rst or negedge key1 or negedge key2 )beginif(!rst)elsebeginif(!key1)else if(!key2)else if(!key3)else if(!key4)elseendendendmodule激励module shumaguan_tb;reg key1,key2,rst;wire 6:0 key_display;shumaguanuaa(.key1(key1),.key2(key2),.rst(rst),.key_display(key_display);17initialbegin#20 key1=0;key2=1;#80 key1=1;key2=1;#450 key1=1;key2=1;#650 key1=1;key2=1;endendmodul e4.4 电路设计及功能仿真报告主模块仿真结果:输出模块仿真结果:数码管模块仿真结果:4.5 综合及布局布线报告和引脚分布报告总体模块 RTL View :18引脚分布报告:4.6 硬件测试结果报告硬件测试结果与预期结果一样,可实现简易电子琴的操作。5.课程设计的心得体会通过对测试结果的分析 ,我们发现采用 FPGA 所设计的电子琴系统设计趋于简单、开发时间短;外围器件少,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五年级语文下册创新教学计划
- 电商平台年度营销工作计划
- 湖南大学自主招生个人陈述成功范文分享
- 美术社团活动计划
- IT项目管理中的应急措施
- 汽车销售公司费用报销流程及注意事项
- 2025福建省中考信息技术指导意见心得体会
- 钢结构抗震设计质量保障措施
- 南京中医药大学《仿真软件模拟实训》2023-2024学年第二学期期末试卷
- 渭南职业技术学院《影视特效化妆》2023-2024学年第二学期期末试卷
- 统编版语文七年级下第18课《井冈翠竹》公开课一等奖创新教学设计
- 针刺伤预防与处理-2024中华护理学会团体标准
- 基装合同范例版
- 永久性租房合同(2篇)
- 外卖员交通安全课件
- 车辆火灾应急处理方法
- 儿童绘本故事《蚂蚁搬家》
- 《全氟己酮灭火系统技术规范》
- 2025年安徽合肥东部新中心建设投资限公司招聘8人高频重点提升(共500题)附带答案详解
- 水循环课件完整版本
- 2024年公司政工专业技术工作总结样本(4篇)
评论
0/150
提交评论