基于VHDL的简易音乐播放器
用VHDL实现乐曲播放与音乐键盘功能

用VHDL实现乐曲播放与音乐键盘功能附有VHDL程序摘要本设计目的是用VHDL实现乐曲播放与音乐键盘两用的系统。
该系统有两种工作模式:一个是作为音乐按键使用;一个是播放乐曲。
作为音乐键盘,首先系统要能播放每个音符的声音,我们知道声音的高低由声音的频率来决定,实现每个音符不同的发音频率值,主要是通过一个可预置数的分频器,将时钟信号进行分频,分频后得到不同的发音频率。
音乐播放是该系统的附加功能。
作为音乐键盘,系统已经实现每个音符不同的发音频率值,要使系统能够实现演奏音乐的功能还需要确定每个音符的发声持续时间,通过将时钟信号适当分频,即每个节拍的持续时间,还需要按顺序存储乐曲的每个音符,每个节拍向蜂鸣器输出一个音符的声音。
正文2.1. 系统设计设计要求:本设计目的是用VHDL实现乐曲播放与音乐键盘两用的系统。
该系统有两种工作模式:一个是作为音乐键盘使用;一个是播放乐曲。
设计方案:本设计由三个模块构成:(1)模块NOTETABS模块NOTETABS有两种工作模式。
其中设置了全部音符对应的分频预置数,当系统作为音乐键盘时当有键盘按下时,模块TONETABA向当Tone输出一个与键盘对应的分频预置数;当系统作为音乐播放使用时模块,该模块是置了一个8位二进制计数器,这个计数器的计数频率为4HZ,即每一个计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间,每个音符的停留时间由音乐节拍和音调发生器模块NOTETABS的clk的出入频率决定。
这个分频预置数的输出由对应于TONETABA中的Index[3..0]确定。
输向TONETABA中Index[3..0]的值ToneIndex[3..0]的输出值与持续时间由模块NOTETABS决定。
(2)模块TONETABA模块TONETABA是乐曲简谱码对应的分频预置数查表电路,模块TONETABA接收模块NOTETABS发出的所要发生的音符的信息,然后查表,找出该音符所对应的分频预置数,并通过Tone端口向模块SREAKERA输出该预置数。
(完整word版)基于VHDL的简易音乐播放器

EDA技术实用教程课程设计简易音乐播放器电子12-11206040124简易音乐播放器设计1.MIDI概述MIDI(Musical Instrument Digital Interface)乐器数字接口,是20 世纪80 年代初为解决电声乐器之间的通信问题而提出的。
MIDI是编曲界最广泛的音乐标准格式,可称为“计算机能理解的乐谱”。
它用音符的数字控制信号来记录音乐.一首完整的MIDI音乐只有几十KB大,而能包含数十条音乐轨道。
MIDI应用也比较广泛,电视晚会的音乐编导可以用MIDI功能辅助音乐创作,或按MIDI标准生成音乐数据传播媒介,或直接进行乐曲演奏.如果在计算机上装备了高级的MIDI软件库,可将音乐的创作、乐谱的打印、节目编排、音乐的调整、音响的幅度、节奏的速度、各声部之间的协调、混响由MIDI来控制完成.利用MIDI技术将电子合成器、电子节奏机(电子鼓机)和其他电子音源与序列器连接在一起即可演奏模拟出气势雄伟、音色变化万千的音响效果,又可将演奏中的多种按键数据存储起来,极大的改善了音乐演奏的能力和条件。
2.工作原理MIDI 音乐是Windows下的一种合成音乐,由于它通过记谱的方式来记录一段音乐.因此与wave音乐相比,它可以极大的减少存储容量。
MIDI 音乐的基本原理为:组成乐曲的每一个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和每一个频率信号持续时间,就可以使扬声器发生连续的乐曲。
图1 是歌曲《生日快乐歌》开头一句的简谱。
由图1 可知,该乐典涉及:中音5,6 ,7 ;高音1,2,3,4,5 .以此为例下面介绍在本音乐发生器芯片中音乐的形成过程。
前两个音符为中音5 ,1/16 音符,它对应的编码为1000 ,所占的脉冲个数为2 ,这样逐个将以上的简谱翻译成代码如下:|1000 1000 1001 1001 1000 1000 |1011 1011 1010 1010 1010 1010||1000 1000 1001 1001 1000 1000 |1100 1100 1011 1011 1011 1011||1000 1000 1111 1111 1101 1101 |1011 1011 1010 1010 1001 1001||1110 1110 1101 1101 1011 1011 |1100 1100 1011 1011 1011 1011|图1 《生日快乐歌》歌谱在节奏时钟脉冲的控制下,将每个代码所对应的分频系数逐一赋给基频,得到对应的音调,这样连续起来就形成一段美妙的音乐。
数电实验报告-音乐播放器

实验课题:简易乐曲播放器学院:班级:姓名:学号:班内序号:一、设计课题要求 (2)二、设计思路和总体框图 (2)三、分块电路设计 (4)四、仿真波形 (6)五、源程序 (7)六、功能说明 (20)七、所用元器件情况 (20)八、故障及问题分析 (21)九、总结和结论 (22)十、参考文献 (22)一设计课题的任务要求设计制作一个简易乐曲播放器:1. 播放器内预存3 首乐曲;2. 播放模式:顺序播放、随机播放,并用数码管或LED 显示当前播放模式;顺序播放:按内部给定的顺序依次播放3 首乐曲;随机播放:随机产生一个顺序播放3 首乐曲;3. 用数码管显示当前播放乐曲的顺序号;4. 设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;5. 设置Next 和Previous 键,按Next 键可以听下一首,按Previous 键回到本首开始;6. 选做:用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;7. 选做:自拟其它功能。
二设计思路和总体框图设计思路:组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素。
乐曲的12平均律规定:每2个八度音之间的频率相差1倍。
在2个八度音之间,又可分为12个半音,每两个半音的频率比为2开12次方。
另外,音符A (简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。
由此可以计算出简谱中从低音1至高音1之间每个音符的频率,如下表所示。
产生各音符所需的频率可用分频器实现。
本次实验使用的是MAXⅡ实验板,时钟频率为50MHz,计算出各个音符对应的分频系数,进行50%占空比的分频,即可得到各音符对应的频率。
对于节拍,如果将一拍的长度定为1秒,则1/4拍的时间为1/4秒,为其提供一个4Hz的时钟频率即可产生出1/4拍的效果了。
若需要半拍,只需将该音符记录两次就可以了。
产生节拍时钟也用分频器实现,本次实验中时钟频率为5Hz。
VHDL音乐播放器

洛阳理工学院课程设计报告课程名称 EDA技术与VHDL设计题目音乐播放器的设计与仿真专业通信工程班级 B1105学号 B1105姓名完成日期 2014年12月22日前言随着科学技术的进步,电子器件和电子系统设计方法日新月异,电子设计自动化(Electronics Design Automation,EDA)技术正是适应了现代电子产品设计的要求,吸收了多学科最新成果而形成的一门新技术。
现如今掌握EDA技术是电子信息类专业的学生、工程技术人员所必备的基本能力和技能。
传统电子电路的设计,首先要对系统进行分析,然后按功能对系统进行划分,接下来就要选择特定芯片,焊接成PCB电路板,最后对成品PCB电路板进行调试。
这样的设计没有灵活性可言,搭成的系统需要的芯片种类多且数目大,而且对于电路图的设计和电路板的设计都需要很大的工作量,工作难度也很高。
随着可编程器件和EDA技术的发展,传统设计的劣势被克服,采用可编程逻辑器件基于芯片的设计方法,期间的内部逻辑和引脚可以由设计者自行决定,提高了设计的灵活性和工作效率;同时,将系统集成在一个芯片上的设计,使系统具有体积小、功耗低、可靠性高等特点。
EDA技术即电子设计自动化技术,它是以可编程逻辑器件(PLD)为载体,以硬件描述语言(HDL)为主要的描述方式,以EDA软件为主要的开发软件的电子设计过程。
它主要采用“自顶向下”的设计方法,设计流程主要包括:设计输入、综合、仿真、适配、下载。
EDA技术主要有以下特征:(1)高层综合的理论和方法取得进展,从而将EDA设计层次由RT级提高到了系统级,并推出了系统级综合优化工具,缩短了复杂ASIC的设计周期。
(2)采用硬件描述语言来描述10万门以上的设计,并形成了VHDL和Verilog-HDL两种标准硬件描述语言。
(3)采用平面规划技术对逻辑综合和物理版图设计联合管理,做到在逻辑设计综合早期阶段就考虑到物理设计信息的影响。
(4)可测性综合设计。
第4章应用VHDL设计数字系统-电子琴和音乐播放器的设计

CLK
IF EN = '1' THEN
--检测是否允许计数(同步使能)
IF CNTI < 9 THEN --检测是否小于9
RST
CNTI := CNTI + 1; --小于9,允许加1计数
EN
ELSE
CNTI := (OTHERS =>‘0’); --大于等于9,计数值清零 END IF;
inst
END IF;
END IF;
IF CNTI = 9 THEN COUT <= ‘1’; --计数等于9,输出进位信号
ELSE COUT <= '0';
END IF;
CNT <= CNTI; --将计数值向端口输出
END PROCESS;
END behav;
CNT[3..0] COUT
项目1:电子琴的设计
仿真结果:10进制计数器设计
结论: 计数器就可以完成分频器的任务!
项目1:电子琴的设计
设计关键:N进制计数器设计——可变分频器
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
CNT_N CLK
RST
ENTITY CNT_N IS PORT (
CNT[11..0] COUT
项目1:电子琴的设计
设计关键:N进制计数器设计——可变分频器
ARCHITECTURE behav OF CNT_N IS
BEGIN
PROCESS(CLK, RST, EN)
VARIABLE CNTI : STD_LOGIC_VECTOR(11 DOWNTO 0);
简易音乐播放器数电实验

数字电路与逻辑设计综合设计实验报告实验名称:简易音乐播放器姓名:班级:班班内序号:27一、设计任务要求设计制作一个简易乐曲播放器。
1)播放器内预存3首乐曲;2)播放模式:顺序播放、随机播放,并用数码管或LED显示当前播放模式;3)顺序播放:按内部给定的顺序依次播放3首乐曲;4)随机播放:随机产生一个顺序播放3首乐曲;5)用数码管显示当前播放乐曲的顺序号;6)设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;7)设置Next和Previous键,按Next键可以听下一首,按Previous键回到本首开始;8)选做:用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;9)选做:自拟其它功能。
二、系统设计1)设计思路首先音乐有音高和节拍两个因素。
音高可以通过对时钟信号不同的分频得到不同频率的信号进而发出不同的音,节拍可以定义一个音符计数器,计数器的每一个值对应一个音高。
对播放的控制包括播放/暂停、复位、上一首、下一首、本首重放、顺序播放/随机播放,用一个状态机,共播放和暂停两个状态,另外歌曲的切换以和暂停都是利用音符计数器赋不同的值或保持不变来实现。
音高的显示是通过不同的音符对应不同的点阵row和col的值来实现的。
歌曲号是通过音符计数器的值来得出并送到数码管显示的。
播放、暂停、顺序、随机这些的显示是通过对状态和模式变量的判别进而送到LED显示的。
2)总体框图50M3)分块设计共分为9个模块。
Div1,div2,div3都是用来分频的,分别是将50mhz变为1mhz,将1mhz变为4hz,将1mhz变为2hz。
Rand模块用来产生随机数,用于随机播放模式。
Keycontrol是核心模块,用来实现顺序播放、随机播放、播放/暂停、上一首、下一首、本首重放、复位、显示顺序或随机播放状态、显示播放/暂停态。
Melody模块是将音符计数器的每一个值与一个音高相对应,即记录曲谱。
Index模块是用melody模块传来的音高信号通过查表得到它所对应的音高的分频数,然后将这个分频数送给speaker模块,以发出不同的音,另外对应不同的音它还对点阵进行不同的输出,进而显示出音高。
简易乐曲播放器-数字电路与逻辑设计报告

数字电路与逻辑设计实验报告简易乐曲播放器一、设计课题的任务要求基本任务:设计制作一个简易乐曲播放器。
1. 播放器内预存3 首乐曲;2. 播放模式:顺序播放、随机播放,并用数码管或LED 显示当前播放模式;顺序播放:按内部给定的顺序依次播放3 首乐曲;随机播放:随机产生一个顺序播放3 首乐曲;3. 用数码管显示当前播放乐曲的顺序号;4. 设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;5. 设置Next 和Previous 键,按Next 键可以听下一首,按Previous 键回到本首开始;提高要求:1.用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;2.自拟其它功能。
二、系统设计(设计思路、总体框图、分块设计)设计思路:由于一般乐曲最短音符为四分音符,则总体设计思路为每次播放一个四分音符,持续时间1/4秒(分频),并依次循环播放每个四分音符,每个四分音符对应音调利用1M分频器分频产生,播放功能则利用蜂鸣器播放当前音调对应频率值即可。
主题设计完成后,加入各控制功能,显示功能。
总体框图:结构框图:方框图:ASM图:暂停暂停MDS图:分块设计:1.分频模块(1)音调:在声乐中,每个音调对应一个频率,而本次实验即应用1M的时钟分频为各个音调所对应的频率,由于每次输出仅有一个频率,则可以在某个四分音符播放时选择分频为哪个音调对应的频率。
由于宏单元使用不够,改为先将1M时钟4分频,再利用4分频后的时钟分为各个音调对应的频率以减小计数器最大计数值。
(2)音长:由于一般乐曲中最短音长为四分音符,并设定全音符音长为1s,四分音符音长为4s,利用每次播放一个四分音符的思路依次播放每个音符(全音符播放4次,半分音符2次)直至有其他控制。
即需对1MHz分频为4Hz。
2.控制模块(1)模式控制A.顺序模式:依次播放每个四分音符,播完3首歌曲后循环B.随机模式:利用异或产生随机数并在播完歌曲后(或按下一首)利用所产生的随机数播放另两首歌曲中的一首C.用户自定义模式:a.顺序播放:依次按1、2、3的顺序播放歌曲并循环b.倒序播放:依次按3、2、1的顺序播放歌曲并循环(2)按键控制A.暂停:在任意播放时刻按下即暂停播放,并记下断点处,蜂鸣器消声,所有彩灯数码管熄灭,一切功能键失效,释放时即从断点处恢复B.下一首:在任意播放时刻按下即按当前模式播放下一首歌曲C.本首重放:在任意播放时刻按下即从播放当前播放乐曲的第一个四分音符处开始播放D.上一首:在任意播放时刻按下即按当前模式播放上一首歌曲3.显示模块(1)彩灯播放某个四个分音符时,根据当前播放音调按七个简谱显示在七个彩灯上(2)数码管第一个数码管显示播放模式:顺序显示0,随机显示8,用户自定义正序显示1,用户自定义倒序显示2第二个数码管显示当前播放曲目序号需要控制两个数码管显示时的时钟分配问题(利用视觉暂留控制1M时钟二分频依次点亮两个数码管)(3)蜂鸣器依次播放所需播放的四分音符三、仿真波形及波形分析本实验仿真着实不易。
课程设计(论文)基于vhdl的简易乐曲演奏器的设计

1 引言VHDL是一种硬件描述语言,它可以对电子电路和系统的行为进行描述,基于这种描述,结合相关的软件工具,可以得到所期望的实际电路与系统。
使用VHDL语言描述的电路,可以进行综合和仿真。
然而,值得注意的是,尽管所有VHDL代码都是可仿真的,但并不是所有代码都能综合。
VHDL被广泛使用的基本原因在于它是一种标准语言,是与工具和工艺无关的,从而可以方便地进行移植和重用。
VHDL两个最直接的应用领域是可编程逻辑器件(PLD)和专用集成电路(ASIC),其中可编程逻辑器件包括复杂可编程逻辑器件(CPLD)和现场可编程门阵列(FPGA)。
关于VHDL最后要说明的是:与常规的顺序执行的计算机程序不同,VHDL 从根本上讲是并发执行的。
在VHDL中,只有在进程(PROCESS)、函数(FUNCTION)和过程(PROCEDURE)内部的语句才是顺序执行的。
本课程设计主要是基于VHDL文本输入法设计乐曲演奏电路,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,通过按键输入来控制音响或者自动演奏已存入的歌曲。
系统实现是用硬件描述语言VHDL按模块化方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲(当然由于条件限制,暂不进行功能验证,只进行编程和时序仿真)。
该设计最重要的一点就是通过按键控制不同的音调发生,每一个音调对应不同的频率,从而输出对应频率的声音。
我们知道,与利用单片机来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具与硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
2 整体功能介绍2.1准备知识在本次设计中采用了铃声《北京欢迎你》作为要播放的乐曲,它的旋律如下:3 5 3 2 3 2 3 3 2 6 1 3 2 22 1 6 1 23 5 2 3 6 5 6 2 1 12 1 6 1 23 5 2 3 6 5 5 3 -2 3 2 1 5 6 2 5 3 3 2 3 (加粗表示低音,其他为中音)根据声乐知识,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果是本实验的关键。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA技术实用教程课程设计简易音乐播放器电子12-11206040124简易音乐播放器设计1.MIDI概述MIDI(Musical Instrument Digital Interface)乐器数字接口,是20 世纪80 年代初为解决电声乐器之间的通信问题而提出的。
MIDI是编曲界最广泛的音乐标准格式,可称为“计算机能理解的乐谱”。
它用音符的数字控制信号来记录音乐。
一首完整的MIDI音乐只有几十KB大,而能包含数十条音乐轨道。
MIDI 应用也比较广泛,电视晚会的音乐编导可以用MIDI功能辅助音乐创作,或按MIDI 标准生成音乐数据传播媒介,或直接进行乐曲演奏。
如果在计算机上装备了高级的MIDI软件库,可将音乐的创作、乐谱的打印、节目编排、音乐的调整、音响的幅度、节奏的速度、各声部之间的协调、混响由MIDI来控制完成。
利用MIDI 技术将电子合成器、电子节奏机(电子鼓机)和其他电子音源与序列器连接在一起即可演奏模拟出气势雄伟、音色变化万千的音响效果,又可将演奏中的多种按键数据存储起来,极大的改善了音乐演奏的能力和条件。
2.工作原理MIDI 音乐是Windows下的一种合成音乐,由于它通过记谱的方式来记录一段音乐。
因此与wave音乐相比,它可以极大的减少存储容量。
MIDI 音乐的基本原理为:组成乐曲的每一个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和每一个频率信号持续时间,就可以使扬声器发生连续的乐曲。
图 1 是歌曲《生日快乐歌》开头一句的简谱。
由图 1 可知,该乐典涉及:中音5,6 ,7 ;高音1,2,3,4,5 。
以此为例下面介绍在本音乐发生器芯片中音乐的形成过程。
前两个音符为中音 5 ,1/16 音符,它对应的编码为1000 ,所占的脉冲个数为2 ,这样逐个将以上的简谱翻译成代码如下:|1000 1000 1001 1001 1000 1000 |1011 1011 1010 1010 1010 1010| |1000 1000 1001 1001 1000 1000 |1100 1100 1011 1011 1011 1011| |1000 1000 1111 1111 1101 1101 |1011 1011 1010 1010 1001 1001| |1110 1110 1101 1101 1011 1011 |1100 1100 1011 1011 1011 1011|图1 《生日快乐歌》歌谱在节奏时钟脉冲的控制下,将每个代码所对应的分频系数逐一赋给基频,得到对应的音调,这样连续起来就形成一段美妙的音乐。
本设计的关键是要准确地产生音乐中各音符所对应的频率信号,并根据乐曲要求按节拍输出。
为了减少系统复杂性,本设计根据可变模值计数器的原理,按照乐曲要求定时改变计数器的预置数,即可产生乐曲所需要的频率信号。
芯片原理框图如图2 所示。
图2 中节拍控制电路产生节拍定时信号;音符产生电路按节拍要求产生乐曲所需要的音符;预值数产生电路受音符控制,产生该音符频率相对应的预置数,送计数器的置入数据输入端。
音符频率发生器根据不同的预置数产生相应的频率信号,从而完成乐曲的演奏功能。
图2 播放器原理3.音乐编码模块此模块包括节拍控制电路和音符产生电路。
节拍控制电路以乐曲中最短音符的节拍为基准,产生乐曲所需要的全部节拍。
因为乐曲《生日快乐歌》中最短音符为1/4 节拍,全曲共有48 个1/4 节拍,故节拍控制器至少需要产生48 个有效状态。
考虑到一遍演奏完需要间隔时间,所以选定节拍控制计数器CNT1 的计数状态为48 + 4 个,其中间隔时间为4个有效状态。
本例要求演奏时能循环进行,因此需要另外设置一个时长计数器,当乐曲演奏完成时,保证能自动从头开始演奏。
音符产生电路采用查找表形式.在节拍控制产生电路的节拍信号作用下,按乐曲中音符持续时间的长短输出相应音符名称。
以乐曲中前两个音节为例,其音符输出查找表如表1 所示。
4.音调发生模块此模块包括预值数产生电路和频率发生器。
预值数产生电路设计采用查找表形式,按照音符的频率要求产生相应的预置数。
根据可变模值计数器的设计原理及音符的分频系数,可计算出乐曲《生日快乐歌》中各音符的预置数如表 2 所示。
表2 音频的分频和预置数频率发生器由可变模值计数器实现.由于系统要求产出的信号频率较高,因此选用2 MHz 高频脉冲信号作为可变模值计数器的计数脉冲。
此片段内各音阶频率及相应的分频如表 3 所示。
为了减少输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,考虑到输出信号是脉冲极窄的脉冲式信号,为了有利于驱动扬声器,可以在到达扬声器之前,有一个二分的分频器,或在计数器输出端外加一个D触发器也可以均衡占空比。
当然,如果输出到扬声器的信号采用正弦波代替对称方波将会有更好的效果。
表3 音符与频率对照表由于最大的分频系数为5102,故采用13 位十二进制计数器已能满足分频要求。
在表 3 中除给出了分频比以外,还给出了相应于各个音节频率时计数器不同的初始值。
对于不同的分频系数,只要加载不同的初始值即可。
采用加载初始值而不将分频输出译码反馈,一个常用技巧。
表中“0”表示休止符。
对于乐曲的休止符。
只要将分频系数设为0,即初始值为213-1=8191,此时扬声器将不会发声。
5.顶层文件设计顶层文件采用原理图设计,根据图1所示原理框图,可设计出MIDI 音乐,发生器顶层原理如图3所示。
为了方便设计,图3中将节拍控制电路和音符产生电路设计在同一模块中,称为TONE 模块。
音调发生器电路称为FPQ模块,彩灯控制电路称为LIGH模块。
图3 顶层远离6.底层文件TONE 模块中的CLK 为4Hz 信号输入端,SEL[3 …0]为音符输出端,其输出用于驱动FPQ 和LIGHT模块。
图4为其时序仿真,其中SEL为各个音符的二进制编码。
从图4 可以看出,仿真结果和设计要求一致。
前两个脉冲SEL输出为1000,即为中音5的二进制编码,第三第四个脉冲下SEL 为1001,对应中音6,依次下去,第五第六个脉冲下SEL为1000,对应中音5,第七第八个脉冲下SEL 为1011,对应高音1,后面四个脉冲下SEL为1010对应中音7。
COUNT为节拍控制计数器。
图4 音乐编码器仿真FPQ模块中的CLKM为2 MHz输入端,MUS为音调输出端。
图5为其时序仿真,在这里只对音符中音5仿真,此时其编码为1000,NUM为其分频系数1276。
当CT 计数到1276时,MUS就输出计数脉冲,其效果就是频率784 的信号。
图5 音调发生器仿真7.部分代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity zy4668_music1 isport(clk:instd_logic;huifang: in std_logic;qiege: in std_logic;xuhuan: in std_logic;zanti: in std_logic;xuan: in std_logic_vector(1 downto 0);index:outstd_logic_vector(3 downto 0));end zy4668_music1;architecture behav of zy4668_music1 issubtype word is integer range 0 to 15;type memory is array(0 to 565) of word;signal rom:memory;signal clk_4Hz:std_logic;signal clk_cnt:integer range 0 to 249;signal adr:integer range 0 to 600;signal sar:integer range 0 to 600;signal sar1:integer range 0 to 600;beginprocess(clk,zanti)beginif zanti='1' thenif clk'event and clk='1' thenif clk_cnt=249 thenclk_cnt<=0;clk_4Hz<='1';elseclk_cnt<=clk_cnt+1;clk_4Hz<='0';end if;end if;end if;end process;process(clk_4Hz,xuan,zanti,xuhuan,qiege,huifang) beginif zanti='1' thenif xuan="00" and qiege='0' thenadr<=416;sar<=558;sar1<=416;elsifxuan="01" and qiege='0' thenadr<=0;sar<=138;sar1<=0;elsifxuan="10" and qiege='0' thenadr<=139;sar<=279;sar1<=139;elsifxuan="11" and qiege='0' thenadr<=280;sar<=415;sar1<=280;elseif clk_4hz'event and clk_4hz='1' thenif huifang='1' thenif xuhuan='1' thenif adr=sar then adr<=sar1;else adr<=adr+1;end if;elseif adr=558 then adr<=0;else adr<=adr+1;end if;if adr>415 then sar<=558;sar1<=416; elsifadr>279 then sar<=415;sar1<=279;elsifadr>138 then sar<=279;sar1<=139;else sar<=138;sar1<=0;end if;end if;elseif adr=sar1 then adr<=sar1;else adr<=adr-1;end if;end if;end if;end if;end if;end process;index<=conv_std_logic_vector(rom(adr),4);rom(0)<=3;rom(1)<=3;rom(2)<=3;rom(3)<=3;rom(4)<=5;rom(5)<=5;rom(6)<=5;rom(7)<=6;rom(8)<=8;rom(9)<=8;rom(10)<=8;rom(11)<=9;rom(12)<=6;rom(13)<=8;rom(14)<=5;rom(15)<=5; rom(16)<=12;rom(17)<=12;rom(18)<=12;rom(19)<=15; rom(20)<=13;rom(21)<=12;rom(22)<=10;rom(23)<=12; rom(24)<=9;rom(25)<=9;rom(26)<=9;rom(27)<=9; rom(28)<=9;rom(29)<=9;rom(30)<=9;rom(31)<=0; rom(32)<=9;rom(33)<=9;rom(34)<=9;rom(35)<=10; rom(36)<=7;rom(37)<=7;rom(38)<=6;rom(39)<=6; rom(40)<=5;rom(41)<=5;rom(42)<=5;rom(43)<=6; rom(44)<=8;rom(45)<=8;rom(46)<=9;rom(47)<=9; rom(48)<=3;rom(49)<=3;rom(50)<=8;rom(51)<=8; rom(52)<=6;rom(53)<=5;rom(54)<=6;rom(55)<=8; rom(56)<=5;rom(57)<=5;rom(58)<=5;rom(59)<=5; rom(60)<=5;rom(61)<=5;rom(62)<=5;rom(63)<=5; rom(64)<=10;rom(65)<=10;rom(66)<=10;rom(67)<=12; rom(68)<=7;rom(69)<=7;rom(70)<=9;rom(71)<=9; rom(72)<=6;rom(73)<=8;rom(74)<=5;rom(75)<=5; rom(76)<=5;rom(77)<=5;rom(78)<=5;rom(79)<=5; rom(80)<=3;rom(81)<=5;rom(82)<=3;rom(83)<=3; rom(84)<=5;rom(85)<=6;rom(86)<=7;rom(87)<=9; rom(88)<=6;rom(89)<=6;rom(90)<=6;rom(91)<=6; rom(92)<=6;rom(93)<=6;rom(94)<=5;rom(95)<=6;rom(96)<=8;rom(97)<=8;rom(98)<=8;rom(99)<=9;rom(100)<=12;rom(101)<=12;rom(102)<=12;rom(103)<=10;rom(104)<=9;rom(105)<=9;rom(106)<=10;rom(107)<=9;rom(108)<=8;rom(109)<=8;rom(110)<=6;rom(111)<=5;rom(112)<=3;rom(113)<=3;rom(114)<=3;rom(115)<=3;rom(116)<=8;rom(117)<=8;rom(118)<=8;rom(119)<=8;rom(120)<=6;rom(121)<=8;rom(122)<=6;rom(123)<=5;rom(124)<=3;rom(125)<=5;rom(126)<=6;rom(127)<=8;rom(128)<=5;rom(129)<=5;rom(130)<=5;rom(131)<=5;rom(132)<=5;rom(133)<=5;rom(134)<=5;rom(135)<=5;rom(136)<=0;rom(137)<=0;rom(138)<=0;rom(139)<=10;rom(140)<=10;rom(141)<=11;rom(142)<=12;rom(143)<=12;rom(144)<=11;rom(145)<=10;rom(146)<=9;rom(147)<=8;rom(148)<=8;rom(149)<=9;rom(150)<=10;rom(151)<=10;rom(152)<=9;rom(153)<=9;rom(154)<=9;rom(155)<=10;rom(156)<=10;rom(157)<=11;rom(158)<=12;rom(159)<=12;rom(160)<=11;rom(161)<=10;rom(162)<=9;rom(163)<=8;rom(164)<=8;rom(165)<=9;rom(166)<=10;rom(167)<=9;rom(168)<=8;rom(169)<=8;rom(170)<=8;rom(171)<=9; rom(172)<=9;rom(173)<=10;rom(174)<=8;rom(175)<=9;rom(176)<=10;rom(177)<=11;rom(178)<=10;rom(179)<=8;rom(180)<=9;rom(181)<=10;rom(182)<=11;rom(183)<=10;rom(184)<=9;rom(185)<=8;rom(186)<=9;rom(187)<=5;rom(188)<=10;rom(189)<=10;rom(190)<=10;rom(191)<=11;rom(192)<=12;rom(193)<=12;rom(194)<=11;rom(195)<=10;rom(196)<=9;rom(197)<=8;rom(198)<=8;rom(199)<=9;rom(200)<=10;rom(201)<=9;rom(202)<=8;rom(203)<=8;rom(204)<=8;rom(205)<=10;rom(206)<=10;rom(207)<=11;rom(208)<=12;rom(209)<=12;rom(210)<=11;rom(211)<=10;rom(212)<=9;rom(213)<=8;rom(214)<=8;rom(215)<=9;rom(216)<=10;rom(217)<=10;rom(218)<=9;rom(219)<=9;rom(220)<=9;rom(221)<=10;rom(222)<=10;rom(223)<=11;rom(224)<=12;rom(225)<=12;rom(226)<=11;rom(227)<=10;rom(228)<=9;rom(229)<=8;rom(230)<=8;rom(231)<=9;rom(232)<=10;rom(233)<=9;rom(234)<=8;rom(235)<=8;rom(236)<=8;rom(237)<=9;rom(238)<=9;rom(239)<=10;rom(240)<=8;rom(241)<=9;rom(242)<=10;rom(243)<=11;rom(244)<=10; rom(245)<=8;rom(246)<=9;rom(247)<=10;rom(248)<=11;rom(249)<=10;rom(250)<=9;rom(251)<=8;rom(252)<=9;rom(253)<=5;rom(254)<=10;rom(255)<=10;rom(256)<=10;rom(257)<=11;rom(258)<=12;rom(259)<=12;rom(260)<=11;rom(261)<=10;rom(262)<=9;rom(263)<=8;rom(264)<=8;rom(265)<=9;rom(266)<=10;rom(267)<=9;rom(268)<=8;rom(269)<=8;rom(270)<=8;rom(271)<=8;rom(272)<=8;rom(273)<=8;rom(274)<=9;rom(275)<=10;rom(276)<=9;rom(277)<=8;rom(278)<=8;rom(279)<=8;rom(280)<=6;rom(281)<=6;rom(282)<=6;rom(283)<=7;rom(284)<=8;rom(285)<=8;rom(286)<=8;rom(287)<=6;rom(288)<=8;rom(289)<=8;rom(290)<=7;rom(291)<=6;rom(292)<=7;rom(293)<=7;rom(294)<=3;rom(295)<=0;rom(296)<=7;rom(297)<=7;rom(298)<=7;rom(299)<=8;rom(300)<=9;rom(301)<=9;rom(302)<=9;rom(303)<=7;rom(304)<=9;rom(305)<=9;rom(306)<=8;rom(307)<=7;rom(308)<=6;rom(309)<=6;rom(310)<=6;rom(311)<=6;rom(312)<=10;rom(313)<=10;rom(314)<=13;rom(315)<=13;rom(316)<=12;rom(317)<=12;rom(318)<=13;rom(319)<=12;rom(320)<=11;rom(321)<=11;rom(322)<=10;rom(323)<=9;rom(324)<=10;rom(325)<=10;rom(326)<=6;rom(327)<=6;rom(328)<=0;rom(329)<=11;rom(330)<=11;rom(331)<=9;rom(332)<=10;rom(333)<=10;rom(334)<=10;rom(335)<=8;rom(336)<=7;rom(337)<=3;rom(338)<=8;rom(339)<=7;rom(340)<=6;rom(341)<=6;rom(342)<=6;rom(343)<=6;rom(344)<=0;rom(345)<=0;rom(346)<=0;rom(347)<=0;rom(348)<=6;rom(349)<=6;rom(350)<=6;rom(351)<=7;rom(352)<=8;rom(353)<=8;rom(354)<=8;rom(355)<=6;rom(356)<=8;rom(357)<=8;rom(358)<=7;rom(359)<=6;rom(360)<=7;rom(361)<=7;rom(362)<=3;rom(363)<=0;rom(364)<=7;rom(365)<=7;rom(366)<=7;rom(367)<=8;rom(368)<=9;rom(369)<=9;rom(370)<=9;rom(371)<=7;rom(372)<=9;rom(373)<=9;rom(374)<=8;rom(375)<=7;rom(376)<=6;rom(377)<=6;rom(378)<=6;rom(379)<=6;rom(380)<=10;rom(381)<=10;rom(382)<=13;rom(383)<=13;rom(384)<=12;rom(385)<=12;rom(386)<=13;rom(387)<=12;rom(388)<=11;rom(389)<=11;rom(390)<=10;rom(391)<=9;rom(392)<=10;rom(393)<=10;rom(394)<=6;rom(395)<=6;rom(396)<=0;rom(397)<=11;rom(398)<=11;rom(399)<=9;rom(400)<=10;rom(401)<=10;rom(402)<=10;rom(403)<=8;rom(404)<=7;rom(405)<=3;rom(406)<=8;rom(407)<=7;rom(408)<=6;rom(409)<=6;rom(410)<=6;rom(411)<=6;rom(412)<=0;rom(413)<=0;rom(414)<=0;rom(415)<=0;rom( 416)<=6;rom( 417)<=7;rom(418)<=8;rom( 419)<=8;rom(420) <=9; rom( 421)<=8;rom( 422)<=7;rom( 423)<=5;rom( 424)<=3;rom( 425)<=6;rom(426)<=6;rom(427)<=6;rom( 428) <=6;rom( 429)<=6;rom( 430)<=7;rom( 431)<=8;rom( 432)<=8;rom( 433)<=9;rom( 434)<=8;rom( 435)<=7;rom( 436)<=5;rom( 437)<=3;rom(438)<=10;rom( 439)<=10;rom( 440)<=10;rom(441)<=10;rom(442)<=10;rom( 443)<=10;rom( 444)<=13; rom( 445)<=13;rom( 446)<=13;rom(447)<=12;rom( 448)<=10; rom(449)<=0;rom( 450)<=9;rom( 451)<=8;rom( 452)<=9; rom( 453)<=9;rom( 454)<=9;rom( 455)<=8;rom( 456)<=6; rom( 457)<=6;rom(458)<=0;rom( 459)<=6;rom( 460)<=7; rom( 461)<=8;rom( 462)<=8;rom( 463)<=9;rom(464)<=8; rom( 465)<=9;rom(466)<=10;rom(467)<=5;rom( 468)<=6; rom( 469)<=6;rom( 470)<=6;rom( 471)<=6;rom( 472)<=15; rom(473)<=14;rom(474)<=13;rom(475)<=13;rom(476)<=10; rom(477)<=9;rom(478)<=10;rom(479)<=0;rom(480)<=10;rom(481)<=13;rom(482)<=12;rom(483)<=12;rom(484)<=12; rom(485)<=12;rom(486)<=12;rom(487)<=10;rom(488)<=12; rom(489)<=12;rom(490)<=15;rom(491)<=14;rom(492)<=13; rom(493)<=13;rom(494)<=10;rom(495)<=9;rom(496)<=8;rom(497)<=8;rom(498)<=8;rom(499)<=8;rom(500)<=9;rom(501)<=10;rom(502)<=10;rom(503)<=12;rom(504)<=10; rom(505)<=9;rom(506)<=10;rom(507)<=10;rom(508)<=15; rom(509)<=14;rom(510)<=13;rom(511)<=13;rom(512)<=10; rom(513)<=9;rom(514)<=10;rom(515)<=10;rom(516)<=10; rom(517)<=13;rom(518)<=12;rom(519)<=12;rom(520)<=12; rom(521)<=12;rom(522)<=10;rom(523)<=12;rom(524)<=13; rom(525)<=13;rom(526)<=6;rom(527)<=7;rom(528)<=8;rom(529)<=8;rom(530)<=8;rom(531)<=10;rom(532)<=9;rom(533)<=9;rom(534)<=12;rom(535)<=14;rom(536)<=13; rom(537)<=12;rom(538)<=13;rom(539)<=13;rom(540)<=13; rom(541)<=13;rom(542)<=6;rom(543)<=7;rom(544)<=8;rom(545)<=8;rom(546)<=8;rom(547)<=10;rom(548)<=12;rom(549)<=12;rom(550)<=12;rom(551)<=14;rom(552)<=13; rom(553)<=12;rom(554)<=12;rom(555)<=13;rom(556)<=13; rom(557)<=13;rom(558)<=13;end behav;。