VerilogHDL乐曲演奏电路设计Word文档格式.docx
- 文档编号:20889818
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:12
- 大小:330.23KB
VerilogHDL乐曲演奏电路设计Word文档格式.docx
《VerilogHDL乐曲演奏电路设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《VerilogHDL乐曲演奏电路设计Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
2)通过三位动态数码管输出相应的高中低音符;
3)通过一个开关实现两首乐曲的切换;
4)在音乐播放的同时,会有led流水灯的闪烁.
应用工具介绍
作为当今最流行的计算机软件系统,EDA技术是以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
EDA可提供文本输入以及图形编辑的方法将设计者的意图用程序或者图形方式表达出来,而我们经常用到的VHDL语言便是用于编写源程序所需的最常见的硬件描述语言(HDL)之一。
EDA技术介绍
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来。
EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计[1]。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。
综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。
综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。
也就是说,综合器是软件描述与硬件实现的一座桥梁。
综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。
在今天,EDA技术已经成为电子设计的普遍工具,无论设计芯片还是设计系统,没有EDA工具的支持,都是难以完成的。
EDA工具已经成为设计师必不可少的武器,起着越来越重要的作用。
从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用广泛、工具多样、软件功能强大。
EDA技术发展迅猛,完全可以用日新月异来描述。
EDA技术的应用广泛,现在已涉及到各行各业。
EDA水平不断提高,设计工具趋于完美的地步。
VerilogHDL语言介绍
VerilogHDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。
被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。
数字系统能够按层次描述,并可在相同描述中显式地进行时序建模[2]。
作为一种通用化的硬件描述语言,VerilogHDL语言具有下述描述能力:
设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。
所有这些都使用同一种建模语言。
此外,VerilogHDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行[3]。
VerilogHDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。
因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。
语言从C编程语言中继承了多种操作符和结构。
VerilogHDL提供了扩展的建模能力,其中许多扩展最初很难理解。
但是,VerilogHDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。
当然,完整的硬件描述语句足以对从最复杂的芯片到完整的电子系统进行描述。
VerilogHDL语言已经成为一种标准的硬件描述语言。
它具有以下特点:
(1)作为一种多用途的硬件描述语言,它具有很好的易学性和易用性。
(2)VerilogHDL语言允许在同一个模块中进行不同抽象层次的描述。
(3)大多数逻辑综合工具都支持VerilogHDL,使得它成为设计人员的一个很好的选择。
(4)所有的制造厂商都提供了VerilogHDL的工艺库,用以支持仿真。
(5)VerilogHDL的程序语言接口拥有强大的功能,允许用户用C语言对内部数据结构进行描述[3]。
正是以上优点,使得VerilogHDL语言广泛流行。
下面是verilog的设计流程
Verilog的设计流程图
基本原理
乐曲演奏的原理是这样的:
组成乐曲的每个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和持续的时间,就可以使扬声器发出连续的乐曲声[4]。
1、音调的控制
频率的高低决定了音调的高低。
音乐的十二平均率规定:
每两个8度音(如简谱中的中音1与高音1)之间的频率相差一倍。
在两个8度音之间,又可分为12个半音,每两个半音的频率比为12√2。
另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音[4]。
由此可以计算出简谱中从低音1至高音1之间每个音名对应的频率,如表所示:
表简谱中的音名与频率的关系
音名
频率/Hz
低音1
中音1
高音1
低音2
中音2
高音2
低音3
中音3
高音3
低音4
中音4
高音4
低音5
392
中音5
784
高音5
1568
低音6
440
中音6
880
高音6
1760
低音7
中音7
高音7
所有不同频率的信号都是从同一个基准频率分频得到的。
由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。
若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大;
若基准频率过高,虽然误差变小,但分频数将变大。
实际的设计综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率[4]。
本例中选取6MHz为基准频率。
若无6MHz的基准频率,则可以先分频得到6MHz,或换一个新的基准频率。
实际上,只要各个音名间的相对频率关系不变,演奏出的乐曲听起来都不会"
走调"
。
本例需要演奏的是梁祝乐曲,该乐曲各音阶频率及相应的分频比如表2所示。
为了减小输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。
表2中的分频比就是从6MHz频率二分频得到的3MHz频率基础上计算得出的。
由于最大的分频系数为9102,故采用14位二进制计数器分频可满足需要。
在表2中,除给出了分频比以外,还给出了对应于各个音阶频率时计数器不同的预置数。
对于不同的分频系数,只要加载不同的预置数即可。
采用加载预置数实现分频的方法比采用反馈复零法节省资源,实现起来也容易一些,如表所示:
表各音阶频率对应的分频比及预置数
分频比
预置数
9102
7281
5111
11272
7653
8730
4552
11831
6818
9565
3827
12556
6073
10310
3409
12974
5736
10647
2867
13516
此外,对于乐曲中的休止符,只要将分频系数设为0,即初始值为2141=16383即可,此时扬声器将不会发声。
2、音长的控制
音符的持续时间必须根据乐曲的速度及每个音符的节拍数来确定。
本例演奏的梁祝片段,最短的音符为4分音符,如果将全音符的持续时间设为1s的话,则只需要再提供一个4Hz的时钟频率即可产生4分音符的时长[4]。
如图所示是乐曲演奏电路的原理框图,其中,乐谱产生电路用来控制音乐的音调和音长。
控制音调通过设置计数器的预置数来实现,预置不同的数值可以使计数器产生不同频率的信号,从而产生不同的音调。
控制音长是通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间越长。
每个音符的演奏时间都是的整数倍,对于节拍较长的音符,如2分音符,在记谱时将该音名连续记录两次即可。
乐曲演奏电路的系统框图
音名显示电路用来显示乐曲演奏时对应的音符。
可以用3个数码管,分别显示高、中、低音的音名,实现演奏的动态显示,十分直观。
在本例中,high[3:
0]、med[3:
0]、low[3:
0]等信号分别用于显示高音、中音、低音音符。
为了使演奏能循环进行,需另外设置一个时长计数器,当乐曲演奏完成时,保证能自动从头开始演奏。
方案实现
由系统框图可以看到本方案分成8个模块。
1)48MHz分频成12MHz波形分频器,源代码和顶层模块如下
PleaseReferToThe
ModuleBlock1(
Clk_48mhz,
Speaker,
Dig,
Seg
);
InputClk_48mhz;
OutputSpeaker;
Output[7:
0]Dig;
0]Seg;
WireSynthesized_Wire_12;
WireSynthesized_Wire_4;
Wire[6:
0]Synthesized_Wire_5;
WireSynthesized_Wire_6;
WireSynthesized_Wire_7;
WireSynthesized_Wire_8;
Wire[3:
0]Synthesized_Wire_9;
0]Synthesized_Wire_10;
0]Synthesized_Wire_11;
Div_Clk12mhzB2v_Inst(.Clk_48mhz(Clk_48mhz),
.Clk_12mhz(Synthesized_Wire_12));
Div_Clk1khzB2v_Inst1(.Clk_12mhz(Synthesized_Wire_12),
.Clk_1khz(Synthesized_Wire_4));
Div_Clk1mhzB2v_Inst2(.Clk_12mhz(Synthesized_Wire_12),
.Clk_1mhz(Synthesized_Wire_8));
Div_Clk4hzB2v_Inst3(.Clk_12mhz(Synthesized_Wire_12),
.Clk_4hz(Synthesized_Wire_7));
Div_Clk6mhzB2v_Inst4(.Clk_12mhz(Synthesized_Wire_12),
.Clk_6mhz(Synthesized_Wire_6));
DispB2v_Inst5(.Clk_1khz(Synthesized_Wire_4),
.Duan(Synthesized_Wire_5),.Seg(Seg));
SongB2v_Inst6(.Clk_6mhz(Synthesized_Wire_6),
.Clk_4hz(Synthesized_Wire_7),.Speaker(Speaker),.High(Synthesized_Wire_9),.Low(Synthesized_Wire_10),.Med(Synthesized_Wire_11));
QumaB2v_Inst9(.Clk_1mhz(Synthesized_Wire_8),
.High(Synthesized_Wire_9),.Low(Synthesized_Wire_10),.Med(Synthesized_Wire_11),.Dig(Dig),.Duan(Synthesized_Wire_5));
Endmodule
实训心得
经过2个周的实训,我深刻体会到了自己知识的匮乏原来,我们学习的只是一个理论知识,通过这次实习。
使我的理论知识上升到了一个实践的过程。
同时在实践中也加深了我们对理论知识的理解。
另外,这次实习不仅使我的verilog有一个很大的提高,而且还使我学到了许多其他方面的知识,提高了我的动手能力。
在本次实训中,我们遇到了不少问题,其中就是由12mhz分频4hz的时候仿真波形不能仿真出来,经过一步一步的分析才发现,原来我们设置的endtime时间太长,本来想仿真出多个波形,便于观察设置了10s,结果仿真到百分之49然后就仿真不动了。
经过调试设置了秒,这样经过十几分钟的仿真,把仿真波形给调试出来了。
其次,在编程的时候,程序综合也出现了好多错误,比如在song模块中阻塞非阻塞赋值同时出现在一个程序中,在显示模块中,开始编写的是七位二进制共阴数码管,结果在硬件测试的时候数码管显示不正常,才发现小数点没有赋值,而且数码管是共阳的,经过调试和修改程序,成功的使高中低音调和音节显示出来。
再次,在想编译2首歌,用switch切换演唱不同歌曲时,经过我们小组成员共同研究歌谱和例子进行对比,经过一下午写出了两只蝴蝶的程序,经过修改song程序,成功的进行了仿真。
最后,再用点阵显示歌名的时候,发现芯片点阵输出引脚只有3个,经过老师的分析讲解,让我们又学会了一个新的程序。
通过这次实习,不仅使我们对所学过的知识有了一个新的认识。
而且提高了我考虑问题,分析问题的全面性以及动手操作能力。
培养了我的团队合作精神、学以致用的意识以及做事情要规范的认真态度。
使我的综合能力有了一个很大的提高。
总之,课程设计是一个学习新知识、巩固加深所学课本理论知识的过程,它培养了我们综合运用知识的能力,思考和解决问题的能力。
它不仅加深了我对电子技术课程的理解,还让我感受到了设计电路的乐趣。
不怕麻烦,反复设计、绘图与修改,就是希望能把这次课程设计做好。
因此对我来说,这次课程设计是非常有意义的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VerilogHDL 乐曲 演奏 电路设计