乐曲硬件演奏电路设计_verilog
EDA课程设计---乐曲硬件演奏电路的VHDL设计

EDA课程设计题目:乐曲硬件演奏电路的VHDL设计一、 设计题目:乐曲硬件演奏电路的VHDL 设计二、 设计目标:1)能够播放“梁祝”乐曲。
2)能够通过LED 显示音阶。
3)具有“播放/停止”功能,并在此基础上实现“按键演奏”的电子琴功能。
三、 设计原理:1. 音乐基础知识一段简单乐谱由音调和节拍组成,音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
音符的节拍我们可以举例来说明。
在一张乐谱中,我们经常会看到这样的表达式,如1=C 44、1=G 43……等等。
以43为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。
比如:图1其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。
1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。
那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 。
我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。
2.原理图框图:图2.框图3.原理图说明音乐播放原理说明音符的频率由数控分频器模块Speakera产生。
ToneTaba模块从NoteTabs模块中输入的音符数据,将对应的分频预置数据传送给Speakera模块,并将音符数据送到LED模块显示音阶。
NoteTabs模块中包含有一个音符数据ROM,里面存有歌曲“梁祝”的全部音调,在此模块中设置了一个8位二进制计数器,作为音符数据ROM的地址发生器。
这个计数器的计数频率为4Hz,即每一个数值的停留时间为0.25秒。
例如:“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒钟时间,所对应的“3”音符分频预置数为1036,在Speakera的输入端停留了1秒。
基于Verilog HDL的简易电子琴控制电路设计与实现

基于Verilog HDL的简易电子琴控制电路设计与实现
张皓祎;郑冰;卢炽杏;郑惠之;胡锦程
【期刊名称】《电子制作》
【年(卷),期】2024(32)2
【摘要】介绍了一种基于硬件描述语言(Verilog HDL)的简易电子琴控制电路设计,在系统可编程门阵列(FPGA)芯片上实现,可实现自动演奏预存乐曲、弹奏及音符码制显示等常用功能。
该设计采用自顶向下的模块化设计,基于硬件描述语言(Verilog HDL)编程实现。
根据产生各个音符的频率不同,通过将系统的基准频率通过分频器进行分频,得到曲谱中所有音符的频率,再由驱动电路驱动蜂鸣器发声,便可实现乐曲的弹奏或播放功能,用八段数码管显示弹奏或播放音符对应的数字。
该方法设计简单、修改方便、设计周期短。
通过FPGA验证了所设计的控制电路,并完成了简易电子琴的调试及制作。
【总页数】4页(P94-97)
【作者】张皓祎;郑冰;卢炽杏;郑惠之;胡锦程
【作者单位】航天工程大学信息学院
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于Verilog HDL的逻辑分析仪电路设计
2.基于Verilog HDL的CMOS图像敏感器驱动电路设计
3.基于Verilog HDL的LED显示屏扫描控制模块的实现
4.基于FPGA的简易电子琴控制电路设计
5.基于Verilog HDL的洗衣机控制电路设计
因版权原因,仅展示原文概要,查看原文内容请购买。
乐曲硬件演奏电路设计

目录目录 0前言: (1)1.题目分析 (1)1.1 功能要求 (1)1.2 性能指标 (1)2.设计方案 (2)2.1顶层实体描述 (2)2.2模块划分 (3)2.3模块描述 (3)2.3.1 Speakera模块 (3)2.3.2 ToneTaba模块 (3)2.3.3 NoteTabs模块 (4)2.4顶层电路图 (5)3.方案实现 (5)3.1 NoteTabs模块仿真及描述 (5)3.2 ToneTaba模块仿真及描述 (5)3.3 Speakera模块仿真及描述 (6)3.4顶层电路仿真及描述 (6)4.硬件测试及说明 (6)5.结论 (7)6.课程总结 (7)7.附录 (8)前言:这次设计实验我做的是乐曲硬件演奏电路设计,通过在系统编程技术课程的学习,我已经学会了用VHDL语言来实现系统要求的电路设计。
VHDL语言具有良好的电路行为描述和系统描述的能力,用VHDL语言进行电子系统的设计非常方便和实用,而基于VHDL的自顶向下的设计方法是其很大的一个优点。
1.题目分析1.1 功能要求(1)播放歌曲(2)简谱码输出显示在数码管显示(3)通过LED灯显示音阶1.2 性能指标(1)乐曲硬件演奏电路的基本原理乐曲都是由一连串的音符组成,每一音符对应着一个确定的频率,按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。
我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,所以,掌握好一首歌曲的节奏,就能完整地演奏出来。
(2)音符频率和乐曲节奏多个不同频率的信号可通过对某个基准频率进行分频器获得,本设计中选取750KHz的基准频率,由于clk端输入的是较高频率12MHz信号,可以对其进行16分频。
计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低。
电子课程设计 EDA课程设计 乐曲硬件演奏电路

电子课程设计——乐曲硬件演奏电路设计学院太原科技大学华科学院专业、班级电子信息工程姓名学号指导教师2011年12月目录一、设计任务与要求 (3)二、总框体图 (3)三、选择器件 (4)四、功能模块 (4)1、音乐数据模块 (4)2、音符控制输出模块 (7)3、音符译码模块 (8)4、数控分频器模块 (11)5、分频器模块 (12)6、译码模块 (13)五、总体设计电路图 (15)1、总体电路原理图 (15)2、管脚分配图 (15)3、电路仿真结果 (15)4、硬件验证 (16)六、设计心得 (17)七、附录 (19)乐曲硬件演奏电路设计一、设计任务与要求:1、实验内容利用可编程逻辑器件FPGA,设计乐曲硬件演奏电路,可自动演奏乐曲。
2、实验要求(1)利用数控分频器设计硬件乐曲演奏电路。
(2)利用给定的音符数据定制ROM“music”。
(3)设计乘法器逻辑框图,并在QuartusII上完成全部设计。
(4)将音乐通过实验箱上的喇叭播放出来。
(5)与演奏发音相对应的简谱码输出在数码管上显示。
二、总体框图设计思路:C调音阶频率表:同的预置数即可发出不同频率的声音。
由此,可以以此为设计基础。
设计一功能模块,能够将乐曲中的音符逐一以对应的频率以预置数的形式置入数控分频计中,即可利用该数控分频计产生不同的声音,演奏出设定好的音乐。
ROM中的音乐数据文件刚可由编辑好的音符填入MIF文件中再定制LPM_ROM将音符数据加载入ROM中,并设计程序在运行时自动读取ROM中的文件并置入数控分频器中。
当采用四四拍曲子时,每节拍持续时间为0.5秒。
置入数控分频器的速度也应与此同步或一致,避免音乐过快或过快慢而失真。
由已知的C调音阶频率表,各频率对应的预置数就与数控分频推动蜂鸣器发出声音的频率对应。
在编写数控分频器时,不仅要考虑预置数的输入方式,还要考虑输入的速度,以及驱动蜂鸣器发声的频率。
为了显示高音音调,可在音符预置数的译码过程中,同时译出高音音阶的信号,并利用LED灯输出信号。
梁祝基于-VerilogHDL的演奏设计

设计题目:“梁祝乐曲发生器”一、设计任务及要求:利用EDA/SOPC实验开发平台提供的16*16点阵LED以及EP2C35核心板,实现“梁祝”乐曲发生器。
1、查阅相关资料,明确设计步骤;2、采用Verilog HDL编程语言设计程序;3、能够按照设定节拍(每拍持续1s)顺畅的播放“梁祝”乐曲并且听着基本无错;4、扩张要求:自主设计(如快放、倒放、换歌等)。
二、设计原理及方案乐曲播放器的基本原理是,一个音符对应一个频率信号。
频率的高低决定了音调的高低。
音乐的十二个平均率规定:每两个八度音之间的频率相差一倍。
在两个八度音之间又可以分为十二个半音,每两个半音的频率比为2.另外,音名A(简谱中的低音6)的频率为440HZ,音名B到C之间、E到F之间为半音,其余为全音。
由此可以计算出简谱中从低音1至高音1之间每个音名对应的频率,;利用高低音如下关系可得下表:低8度音:基本音频率/2 ,例如低音1的频率为523/2=261.5;高8度音:基本音频率×2,例如高音1的频率为523×2=1046音符与频率的对应关系如下各音阶频率对应的分频比及预置数对于乐曲中的休止符,只要将分频系数设为0,即初始值为1047,此时扬声器不发音。
从上表中可以看出,最大分频系数为1912,所以采用11位二进制计数器分频可满足需要。
对于不同的分频系数,只要加载不同的预置数即可。
采用加载预置数实现分频的方法比采用反馈复零法节约资源,实现起来也容易一些。
音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。
本设计中将全音的持续时间设为1s,提供的4Hz的时钟频率即可产生四分音符的时长。
控制音长通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间也就越长。
每个音符的演奏时间都是0.25s的整数倍,对于节拍较长的音符,如二分音符,在记谱时将该音名联系记录两次即可。
对照以上规则可编制乐谱的程序。
EDA实验报告5_乐曲硬件演奏电路设计

EDA技术与应用实验报告姓名学号专业年级电子信息工程实验题目乐曲硬件演奏电路设计实验目的1.学习利用数控分频器设计硬件乐曲演奏电路2.掌握模块化和层次化的设计方法以及音符编码的设计思想实验原理1.一定频率的矩形波通过扬声器可以发出相应频率的声音,乐曲是由一系列的音符组成的。
所以,如果我们通过控制每个音符的发音频率值及其持续的时间,就可以以纯硬件的手段,利用这些数值来实现所希望演奏的乐曲。
2.该硬件演奏电路由三个模块构成<1>音符数据ROM的地址发生器模块NoteTabs.vhdl内置8位二进制计数器,作为ROM的地址发生器,计数频率4Hz,即每一计数值的停留时间为0.25s,恰为全音符设为1s时,四四拍的4音符持续时间。
随着NoteTabs中的计数器按4Hz的时钟速率作加法计数即地址值递增时,ROM中的音符数据将通过ToneIndex[3..0]输向ToneTaba模块,乐曲即开始演奏起来。
<2>乐曲简谱码对应的分频预置数查表电路模块ToneTaba.vhdlToneTaba为Speakera提供决定所发音符的分频预置数,此数在Speakera输入口停留的时间即为此音符的节拍值。
输入Index[3..0]可确定乐曲全部音符所对应的分频预置数(13个)每一音符的停留时间由NoteTabs模块的clk决定(4Hz)。
<3>决定每一个音符音调的数控分频器模块Speakera.vhdl输入端clk输入一较高频率(12MHz)的信号,经Speakera分频,再经2分频以展宽脉冲后,由SpkOut输出。
11位预置数Tone[10..0]决定由clk输入信号的分频比,SpkOut输出的频率决定每一音符的音调。
实验内容1.定制存放LPM-ROM模块Music,在连续地址上存放乐曲的音符数据,2.用vhdl文本输入法和元件例化语句完成NoteTabs.vhdl的设计,该模块包含音符数据ROM模块Music.vhdl3.完成ToneTaba.vhdl的设计,此模块给数控分频模块提供每个音符所对应的分频预置数,即计数初值4.完成Speakera.vhdl的设计,该模块是一个初值可变的加法计数器。
Verilog_HDL—乐曲演奏电路设计

文理学院Verilog HDL乐曲演奏电路设计专业:自动化学号:2012118064:一天虹影设计目的与要求1.课程设计目的:1)加深对EDA技术的理解,掌握乐曲演奏电路的工作原理2)了解怎样控制音调的高低变化和音长,从而完成乐曲的自动循环演奏。
3)培养自主学习、正确分析和解决问题的能力2.课程设计要求:1)使用Verilog HDL设计乐曲演奏电路,系统实现是用硬件描述语言Verilog HDL按分频控制的方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲。
2) 通过控制输出到扬声器的激励信号频率的高低和持续的时间,从而使扬声器发出连续的乐曲声,且当乐曲演奏完成时,保证能自动从头开始演奏。
3.该方案可以实现的功能:1)通过蜂鸣器播放音乐;2)通过三位动态数码管输出相应的高中低音符;3)通过一个开关实现两首乐曲的切换;4)在音乐播放的同时,会有led流水灯的闪烁.应用工具介绍作为当今最流行的计算机软件系统,EDA技术是以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
EDA 可提供文本输入以及图形编辑的方法将设计者的意图用程序或者图形方式表达出来,而我们经常用到的VHDL语言便是用于编写源程序所需的最常见的硬件描述语言(HDL)之一。
2.1 EDA技术介绍EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来。
EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计[1]。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
硬件乐曲自动演奏电路设计.

SOPC/EDA综合课程设计报告设计题目:硬件乐曲自动演奏电路设计设计者:学号:班级:指导老师:王忠锋完成时间:2012年01月6日目录前言 (3)乐曲硬件演奏电路EDA设计 (4)1.设计要求 (4)2.设计方案 (4)3.原理描述 (5)3.1 音名与频率的关系 (5)3.2 控制音长的节拍发生器 (7)4.乐曲硬件演奏电路的层次化设计方案 (7)4.1 音乐节拍发生器NoteTabs (7)4.2 音符译码电路Tonetaba模块 (15)4.3数控分频模块(speaker)设计 (18)4.4乐曲硬件演奏电路顶层电路的设计和仿真 (21)5.实验总结与心得 (24)6.参考文献 (25)前言乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。
实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。
如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。
使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。
FPGA预装了很多已构造好的参数化库单元LPM 器件。
通过引入支持LPM的EDA软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。
本课设在EDA开发平台上利用VHDL语言设计数控分频器电路,利用数控分频的原理设计乐曲硬件演奏电路,以“欢乐颂”乐曲为例,将音乐数据存储到音乐节拍器中,就达到了以纯硬件的手段来实现乐曲的演奏效果。
只要修改音乐节拍器所存储的音乐数据,将其换成其他乐曲的音乐数据,连接到程序中就可以实现其它乐曲的演奏。
关键词:FPGA;EDA;VHDL;音乐乐曲硬件演奏电路EDA 设计1.设计要求利用可编程逻辑器件FPGA ,设计一个乐曲硬件演奏电路。
由键盘输入控制音响,同时可自动演奏乐曲。
演奏时可选择键盘输入乐曲或者已存入的乐曲,并配以一个小扬声器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA技术及创新实践(设计报告)题目: 乐曲硬件演奏电路设计姓名: 漩涡鸣人学院: 数理与信息工程学院专业: 电子科学与技术班级: 112 学号: 1886****20 ****: ***2014年6 月一、设计目的及要求实验目的:1、理解音乐演奏的原理及分频器的原理与使用。
2、了解怎样控制音调的高低变化和音长,从而完成乐曲的自动循环演奏。
3、培养自主学习、正确分析和解决问题的能力。
要求:利用分频器设计硬件乐曲演奏电路;能通过数码管显示动态效果;通过一个开关实现两首乐曲的切换;在音乐播放的同时,会有led流水灯的闪烁。
二、设计原理乐曲演奏的原理是这样的:组成乐曲的每个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和持续的时间,就可以使扬声器发出连续的乐曲声。
图1、顶层模块图其中,乐谱产生电路用来控制音乐的音调和音长。
控制音调通过设置计数器的预置数来实现,预置不同的数值可以使计数器产生不同频率的信号,从而产生不同的音调。
控制音长是通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间越长。
每个音符的演奏时间都是0.25s的整数倍,对于节拍较长的音符,如2分音符,在记谱时将该音名连续记录两次即可。
1、音调的控制频率的高低决定了音调的高低。
音乐的十二平均率规定:每两个8度音(如简谱中的中音1与高音1)之间的频率相差一倍。
在两个8度音之间,又可分为12个半音,每两个半音的频率比为12√2。
另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音[4]。
由此可以计算出简谱中从低音1至高音1之间每个音名对应的频率,如表2所示:表2简谱中的音名与频率的关系所有不同频率的信号都是从同一个基准频率分频得到的。
由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。
若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大;若基准频率过高,虽然误差变小,但分频数将变大。
实际的设计综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率。
本例中选取6MHz为基准频率。
若无6MHz的基准频率,则可以先分频得到6MHz,或换一个新的基准频率。
实际上,只要各个音名间的相对频率关系不变,演奏出的乐曲听起来都不会"走调"。
本例需要演奏的是梁祝乐曲,该乐曲各音阶频率及相应的分频比如表2所示。
为了减小输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。
表2中的分频比就是从6MHz频率二分频得到的3MHz频率基础上计算得出的。
由于最大的分频系数为9102,故采用14位二进制计数器分频可满足需要。
在表2中,除给出了分频比以外,还给出了对应于各个音阶频率时计数器不同的预置数。
对于不同的分频系数,只要加载不同的预置数即可。
采用加载预置数实现分频的方法比采用反馈复零法节省资源,实现起来也容易一些,如表3所示:表3各音阶频率对应的分频比及预置数此外,对于乐曲中的休止符,只要将分频系数设为0,即初始值为2141=16383即可,此时扬声器将不会发声。
音长的控制音符的持续时间必须根据乐曲的速度及每个音符的节拍数来确定。
本例演奏的梁祝片段,最短的音符为4分音符,如果将全音符的持续时间设为1s的话,则只需要再提供一个4Hz的时钟频率即可产生4分音符的时长。
三、底层模块设计由顶层模块图可以看到本方案分成8个模块。
1、48MHz分频成12MHz波形分频器,源代码和顶层模块如下//48mhz分成12mhz的分频模块module div_clk12mhz(clk_48mhz,clk_12mhz);input clk_48mhz;output clk_12mhz;reg clk_12mhz;reg [21:0] cnt;always @(posedge clk_48mhz)if(cnt<1) cnt=cnt+1; // (48mhz/12mhz=4,cnt<[4/2-1=1])else begin cnt=0; clk_12mhz =!clk_12mhz; endendmodule2、12MHz分频成6MHz波形分频器,源代码和顶层模块如下://12mhz分成6mhz的分频模块,提供给song模块module div_clk6mhz(clk_12mhz,clk_6mhz); input clk_12mhz;output clk_6mhz;reg clk_6mhz; reg cnt;always @(posedge clk_12mhz) clk_6mhz=!clk_6mhz; endmodule3、12MHz分频成4Hz波形分频器,源代码和顶层模块如下://12mhz分成4hz的分频模块,提供给song模块module div_clk4hz(clk_12mhz,clk_4hz); input clk_12mhz;output clk_4hz;reg clk_4hz;reg [21:0] cnt; always @(posedge clk_12mhz)if(cnt<1499999) cnt=cnt+1; // (12mhz/4hz=3000000,cnt<[3000000/2-1=149 9999])else begin cnt=0; clk_4hz =! clk_4hz;end endmodule4、12MHz分频成1mhz波形分频器,源代码和顶层模块如下://12mhz分成1mhz的分频模块,提供给quma模块module div_clk1mhz(clk_12mhz,clk_1mhz); input clk_12mhz;output clk_1mhz;reg clk_1mhz;reg [21:0] cnt;always @(posedge clk_12mhz)if(cnt<5) cnt=cnt+1; // (12mhz/1mhz=12,cnt<[12/2-1=5])else begin cnt=0; clk_1mhz =! clk_1mhz; endendmodule5、12MHz分频成1khz波形分频器,源代码和顶层模块如下://12mhz分成1khz的分频模块,提供给quma模块module div_clk1khz(clk_12mhz,clk_1khz); input clk_12mhz;output clk_1khz;reg clk_1khz;reg [21:0] cnt;always @(posedge clk_12mhz) if(cnt<5999) cnt=cnt+1; // (12mhz/1khz=12000,cnt<[12000/2-1=5999])else begin cnt=0; clk_1khz =! clk_1khz; endendmodule6、 song模块源代码和顶层模块如下://音乐产生模块modulesong(clk_6mhz,clk_4hz,speaker,high,med,low ,k);input clk_6mhz,clk_4hz; input k;output speaker;output[3:0] high,med,low; reg[3:0] high,med,low;reg[13:0] divider,origin;reg[9:0] counter;reg speaker;wire carry;assign carry=(divider==16383);always @(posedge clk_6mhz)begin if(carry) divider<=origin;else divider<=divider+1;endalways @(posedge carry)begin speaker<=~speaker;end always @(posedge clk_4hz)begincase({high,med,low})'b000000000011:origin<=7281;//低音3'b000000000101:origin<=8730;//低音5'b000000000110:origin<=9565;//低音6'b000000000111:origin<=10310;//低音7'b000000010000:origin<=10647;//中音1'b000000100000:origin<=11272;//中音2'b000000110000:origin<=11831;//中音3'b000001010000:origin<=12556;//中音5'b000001100000:origin<=12974;//中音6'b000001110000:origin<=13347;//中音7'b000100000000:origin<=13516;//高音1'b000000000000:origin<=16383;//休止符endcaseendalways @(posedge clk_4hz)if (k==0)beginif(counter==149) counter<=0;elsecounter<=counter+1;case(counter)//记谱0: {high,med,low}<='b000000000011; //低音"3"1: {high,med,low}<='b000000000011; //持续4个时钟节拍2: {high,med,low}<='b000000000011;3: {high,med,low}<='b000000000011;4: {high,med,low}<='b000000000101; //低音"5"5: {high,med,low}<='b000000000101; //发3个时钟节拍6: {high,med,low}<='b000000000101;7: {high,med,low}<='b000000000110; //低音"6"8: {high,med,low}<='b000000010000; //中音"1"9: {high,med,low}<='b000000010000; //发3个时钟节拍10: {high,med,low}<='b000000010000;11: {high,med,low}<='b000000100000; //中音"2"12: {high,med,low}<='b000000000110; //低音"6"13: {high,med,low}<='b000000010000; //中音"1"14: {high,med,low}<='b000000000101; //低音"5"15: {high,med,low}<='b000000000101;16: {high,med,low}<='b000001010000; //中音"5"17: {high,med,low}<='b000001010000; //发3个时钟节拍18: {high,med,low}<='b000001010000;19: {high,med,low}<='b000100000000; //高音"1"20: {high,med,low}<='b000001100000; //中音"6"21: {high,med,low}<='b000001010000; //中音"5"22: {high,med,low}<='b000000110000; //中音"3"23: {high,med,low}<='b000001010000; //中音"5"24: {high,med,low}<='b000000100000; //中音"2"25: {high,med,low}<='b000000100000; //持续11个时钟节拍26: {high,med,low}<='b000000100000;27: {high,med,low}<='b000000100000;28: {high,med,low}<='b000000100000;29: {high,med,low}<='b000000100000;30: {high,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; //中音"3"36: {high,med,low}<='b000000000111; //低音"7"37: {high,med,low}<='b000000000111;38: {high,med,low}<='b000000000110; //低音"6"39: {high,med,low}<='b000000000110;40: {high,med,low}<='b000000000101; //低音"5"41: {high,med,low}<='b000000000101;42: {high,med,low}<='b000000000101;43: {high,med,low}<='b000000000110; //低音"6"44: {high,med,low}<='b000000010000; //中音"1"45: {high,med,low}<='b000000010000;46: {high,med,low}<='b000000100000; //中音"2"47: {high,med,low}<='b000000100000;48: {high,med,low}<='b000000000011; //低音"3"49: {high,med,low}<='b000000000011;50: {high,med,low}<='b000000010000; //中音"1"51: {high,med,low}<='b000000010000;52: {high,med,low}<='b000000000110; //低音"6"53: {high,med,low}<='b000000000101; //低音"5"54: {high,med,low}<='b000000000110; //低音"6"55: {high,med,low}<='b000000010000; //中音"1"56: {high,med,low}<='b000000000101; //低音"5"57: {high,med,low}<='b000000000101; //持续8个时钟节拍58: {high,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;64: {high,med,low}<='b000000110000; //中音"3"65: {high,med,low}<='b000000110000; //发3个时钟节拍66: {high,med,low}<='b000000110000;67: {high,med,low}<='b000001010000; //中音"5"68: {high,med,low}<='b000000000111; //低音"7"69: {high,med,low}<='b000000000111;70: {high,med,low}<='b000000100000; //中音"2"71: {high,med,low}<='b000000100000;72: {high,med,low}<='b000000000110; //低音"6"73: {high,med,low}<='b000000010000; //中音"1"74: {high,med,low}<='b000000000101; //低音"5"75: {high,med,low}<='b000000000101; //持续4个时钟节拍76: {high,med,low}<='b000000000101;77: {high,med,low}<='b000000000101;78: {high,med,low}<='b000000000000; //休止符79: {high,med,low}<='b000000000000;80: {high,med,low}<='b000000000011; //低音"3"81: {high,med,low}<='b000000000101;//低音"5"82: {high,med,low}<='b000000000101;83: {high,med,low}<='b000000000011; //低音"3"84: {high,med,low}<='b000000000101; //低音"5"85: {high,med,low}<='b000000000110; //低音"6"86: {high,med,low}<='b000000000111; //低音"7"87: {high,med,low}<='b000000100000; //中音"2"88: {high,med,low}<='b000000000110; //低音"6"89: {high,med,low}<='b000000000110; //持续6个时钟节拍90: {high,med,low}<='b000000000110;91: {high,med,low}<='b000000000110;92: {high,med,low}<='b000000000110;93: {high,med,low}<='b000000000110;94: {high,med,low}<='b000000000101; //低音"5"95: {high,med,low}<='b000000000110; //低音"6"96: {high,med,low}<='b000000010000; //中音"1"97: {high,med,low}<='b000000010000; //发3个时钟节拍98: {high,med,low}<='b000000010000;99: {high,med,low}<='b000000100000; //中音"2"100: {high,med,low}<='b000001010000; //中音"5"101: {high,med,low}<='b000001010000;102: {high,med,low}<='b000000110000; //中音"3"103: {high,med,low}<='b000000110000;104: {high,med,low}<='b000000100000; //中音"2"105: {high,med,low}<='b000000100000;106: {high,med,low}<='b000000110000; //中音"3"107: {high,med,low}<='b000000100000; //中音"2"108: {high,med,low}<='b000000010000; //中音"1"109: {high,med,low}<='b000000010000;110: {high,med,low}<='b000000000110; //低音"6"111: {high,med,low}<='b000000000101; //低音"5"112: {high,med,low}<='b000000000011; //低音"3"113: {high,med,low}<='b000000000011; //持续4个时钟节拍114: {high,med,low}<='b000000000011;115: {high,med,low}<='b000000000011;116: {high,med,low}<='b000000010000; //中音"1"117: {high,med,low}<='b000000010000; //持续4个时钟节拍118: {high,med,low}<='b000000010000;119: {high,med,low}<='b000000010000;120: {high,med,low}<='b000000000110; //低音"6"121: {high,med,low}<='b000000010000; //中音"1"122: {high,med,low}<='b000000000110; //低音"6"123: {high,med,low}<='b000000000101; //低音"5"124: {high,med,low}<='b000000000011; //低音"3"125: {high,med,low}<='b000000000101; //低音"5"126: {high,med,low}<='b000000000110; //低音"6"127: {high,med,low}<='b000000010000; //中音"1"128: {high,med,low}<='b000000000101; //低音"5"129: {high,med,low}<='b000000000101; //持续6个时钟节拍130: {high,med,low}<='b000000000101;131: {high,med,low}<='b000000000101;132: {high,med,low}<='b000000000101;133: {high,med,low}<='b000000000101;134: {high,med,low}<='b000000110000;//中音"3"135: {high,med,low}<='b000001010000; //中音"5"136: {high,med,low}<='b000000100000; //中音"2"137: {high,med,low}<='b000000110000; //中音"3"138: {high,med,low}<='b000000100000; //中音"2"139: {high,med,low}<='b000000010000; //中音"1"140: {high,med,low}<='b000000000111; //低音"7"141: {high,med,low}<='b000000000111;142: {high,med,low}<='b000000000110; //低音"6"143: {high,med,low}<='b000000000110;144: {high,med,low}<='b000000000101; //低音"5"145: {high,med,low}<='b000000000101; //持续8个时钟节拍146: {high,med,low}<='b000000000101;147: {high,med,low}<='b000000000101;148: {high,med,low}<='b000000000101;149: {high,med,low}<='b000000000101; endcaseendelse if( k==1)beginif(counter==149) counter<=0;//计时,以实现循环演奏elsecounter<=counter+1;case(counter)//记谱0: {high,med,low}<='b000000110000; //中音"3"1: {high,med,low}<='b000000110000; //持续2个时钟节拍2: {high,med,low}<='b000000100000; //中音23: {high,med,low}<='b000000100000; //持续2个时钟节拍4: {high,med,low}<='b000000110000; //中音"3"5: {high,med,low}<='b000000110000; //发10个时钟节拍6: {high,med,low}<='b000000110000;7: {high,med,low}<='b000000110000;8: {high,med,low}<='b000000110000;9: {high,med,low}<='b000000110000;10: {high,med,low}<='b000000110000;11: {high,med,low}<='b000000110000;12: {high,med,low}<='b000000110000;13: {high,med,low}<='b000000110000;14: {high,med,low}<='b000000100000; //中音215: {high,med,low}<='b000000100000; //持续2个时钟节拍16: {high,med,low}<='b000000110000; //中音"3"17: {high,med,low}<='b000000110000; //发2个时钟节拍18: {high,med,low}<='b000000100000; //中音219: {high,med,low}<='b000000100000; //中音220: {high,med,low}<='b000000010000; //中音"1"21: {high,med,low}<='b000000010000;22: {high,med,low}<='b000000010000;23: {high,med,low}<='b000000010000;24: {high,med,low}<='b000000010000;25: {high,med,low}<='b000000010000;26: {high,med,low}<='b000000010000;27: {high,med,low}<='b000000010000;28: {high,med,low}<='b000000010000;29: {high,med,low}<='b000000010000;30: {high,med,low}<='b000000010000;31: {high,med,low}<='b000000010000;32: {high,med,low}<='b000000000110;//低633: {high,med,low}<='b000000000110;34: {high,med,low}<='b000000010000; //中音"1"35: {high,med,low}<='b000000010000;36: {high,med,low}<='b000000100000; //中2 有6个37: {high,med,low}<='b000000100000;38: {high,med,low}<='b000000100000;39: {high,med,low}<='b000000100000;40: {high,med,low}<='b000000100000;41: {high,med,low}<='b000000100000;42: {high,med,low}<='b000000110000; //中音343: {high,med,low}<='b000000110000;44: {high,med,low}<='b000000100000; //中音"2"45: {high,med,low}<='b000000100000;46: {high,med,low}<='b000000010000; //中音"1"47: {high,med,low}<='b000000010000;48: {high,med,low}<='b000000000110; //低音"6"49: {high,med,low}<='b000000000110;50: {high,med,low}<='b000000010000; //中音"1"51: {high,med,low}<='b000000010000;52: {high,med,low}<='b000000000101; //低音"5"53: {high,med,low}<='b000000000101; //低音"5"54: {high,med,low}<='b000000000101;55: {high,med,low}<='b000000000101;56: {high,med,low}<='b000000000101; //低音"5"57: {high,med,low}<='b000000000101;58: {high,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;64: {high,med,low}<='b000000000101;65: {high,med,low}<='b000000000101;66: {high,med,low}<='b000000000101;67: {high,med,low}<='b000000000101;68: {high,med,low}<='b000000110000; //中音"3"69: {high,med,low}<='b000000110000;70: {high,med,low}<='b000000100000; //中音"2"71: {high,med,low}<='b000000100000;72: {high,med,low}<='b000000110000; //中音"3"73: {high,med,low}<='b000000110000; //中音"3"74: {high,med,low}<='b000000110000; //中音"3"75: {high,med,low}<='b000000110000; //中音"3"76: {high,med,low}<='b000000110000; //中音"3"77: {high,med,low}<='b000000110000; //中音"3"78: {high,med,low}<='b000000110000; //中音"3"79: {high,med,low}<='b000000110000; //中音"3"80: {high,med,low}<='b000000110000; //中音"3"81: {high,med,low}<='b000000110000; //中音"3"82: {high,med,low}<='b000000100000; //中音"2"83: {high,med,low}<='b000000100000;84: {high,med,low}<='b000000110000; //中音"3"85: {high,med,low}<='b000000110000; //中音"3"86: {high,med,low}<='b000000100000; //中音"2"87: {high,med,low}<='b000000100000; //中音"2"88: {high,med,low}<='b000000010000; //中音"1"89: {high,med,low}<='b000000010000; //中音"1"90: {high,med,low}<='b000000010000; //中音"1"91: {high,med,low}<='b000000010000; //中音"1"92: {high,med,low}<='b000000010000; //中音"1"93: {high,med,low}<='b000000010000; //中音"1"94: {high,med,low}<='b000000010000; //中音"1"95: {high,med,low}<='b000000010000; //中音"1"96: {high,med,low}<='b000000010000; //中音"1"97: {high,med,low}<='b000000010000; //中音"1"98: {high,med,low}<='b000000010000; //中音"1"99: {high,med,low}<='b000000010000; //中音"1"100: {high,med,low}<='b000000010000; //中音"1"101: {high,med,low}<='b000000010000; //中音"1"102: {high,med,low}<='b000000010000; //中音"1"103: {high,med,low}<='b000000010000; //中音"1"104: {high,med,low}<='b000000010000; //中音"1"105: {high,med,low}<='b000000000110; //低音"6"106: {high,med,low}<='b000000000110; //低音"6"107: {high,med,low}<='b000000010000; //中音"1"108: {high,med,low}<='b000000010000; //中音"1"109: {high,med,low}<='b000000100000; //中音"2"110: {high,med,low}<='b000000100000; //中音"2"111: {high,med,low}<='b000000100000; //中音"2"112: {high,med,low}<='b000000100000; //中音"2"113: {high,med,low}<='b000000100000; //中音"2"114: {high,med,low}<='b000000100000; //中音"2"115: {high,med,low}<='b000000110000; //中音3116: {high,med,low}<='b000000110000;117: {high,med,low}<='b000000100000; //中音"2"118: {high,med,low}<='b000000100000;119: {high,med,low}<='b000000010000; //中音"1"120: {high,med,low}<='b000000010000;121: {high,med,low}<='b000000000110; //低音"6"122: {high,med,low}<='b000000000110;123: {high,med,low}<='b000000010000; //中音"1"124: {high,med,low}<='b000000010000;125: {high,med,low}<='b000000100000; //中音"2"126: {high,med,low}<='b000000100000; //中音"2"127: {high,med,low}<='b000000100000; //中音"2"128: {high,med,low}<='b000000100000; //中音"2"129: {high,med,low}<='b000000100000; //中音"2"130: {high,med,low}<='b000000100000; //中音"2"131: {high,med,low}<='b000000100000; //中音"2"132: {high,med,low}<='b000000100000; //中音"2"133: {high,med,low}<='b000000100000; //中音"2"134: {high,med,low}<='b000000100000; //中音"2"135: {high,med,low}<='b000000100000; //中音"2"136: {high,med,low}<='b000000100000; //中音"2"137: {high,med,low}<='b000000100000; //中音"2"138: {high,med,low}<='b000000100000; //中音"2"139: {high,med,low}<='b000000100000; //中音"2"140: {high,med,low}<='b000000100000;//中音"2"141: {high,med,low}<='b000000110000; //中音"3"142: {high,med,low}<='b000000110000; //持续2个时钟节拍143: {high,med,low}<='b000000100000; //中音2144: {high,med,low}<='b000000100000; //持续2个时钟节拍145: {high,med,low}<='b000000110000; //中音"3"146: {high,med,low}<='b000000110000; //发10个时钟节拍147:{high,med,low}<='b000000110000;148:{high,med,low}<='b000000110000;149:{high,med,low}<='b000000110000; endcaseendendmodule //模块结束7、取码模块源代码和顶层模块如下://取码模块,从song模块取得数码管显示部分的位码和段码modulequma(high,med,low,clk_1mhz,dig,duan); input [3:0] high,med,low;input clk_1mhz;reg[7:0] dig;output [7:0]dig;//定义输出八位位码reg [7:0] duan;output [7:0] duan;//定义用于输出的段码的代码always @(posedge clk_1mhz)//扫描high,med,low三个寄存器的值,取出位码和段码的代码beginif (high!=0)begin dig<=8'b11111011;case (high)1:duan<=8'b00000001;2:duan<=8'b00000010;3:duan<=8'b00000011;4:duan<=8'b00000100; 5:duan<=8'b00000101;6:duan<=8'b00000110;7:duan<=8'b00000111;endcaseendelse if (med!=0)// 如果med的值不为0,则只输出med的值begin dig<=8'b11111101;case (med )1:duan<=8'b00000001;2:duan<=8'b00000010;3:duan<=8'b00000011;4:duan<=8'b00000100;5:duan<=8'b00000101;6:duan<=8'b00000110;7:duan<=8'b00000111;endcaseendelse if (low!=0)//如果low的值不为0,则只输出low的值begin dig<=8'b11111110;case (low )1:duan<=8'b00000001; 2:duan<=8'b00000010; 3:duan<=8'b00000011; 4:duan<=8'b00000100; 5:duan<=8'b00000101; 6:duan<=8'b00000110; 7:duan<=8'b00000111; endcaseendendendmodule8、disp:显示模块,每位输出转换为七段数码管显示。