用VHDL设计乐曲发生器.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用VHDL设计乐曲发生器

用VHDL设计乐曲发生器 /html/EDAjishu/2007/0323/1808.html 1 概 述 随着EDA 技术的进展,基于可编程 ASIC 的数字电子系统设计的完整方案越来越受到人们的重视,并且以 EDA 技术为核心的能在可编程 ASIC 上进行系统芯片集成的新设计方法,也正在快速地取代基于 PCB板的传统设计方式。 与利用微处理器(CPU 或MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的 EDA 工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。如何使用EDA工具设计电子系统是人们普遍关心的问题,本设计在美国ALTERA公司MAX + plusⅡ的 EDA 软件平台上,使用层次化设计方法,实现了乐曲发生器的设计。乐曲选取《梁祝》中化蝶部分,其简谱如图 1所示。 2 音符与频率的关系 我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素,首先让我们来了解音符与频率的关系。 乐曲的12平均率规定:每 2 个八度音(如简谱中的中音 1 与高音 1)之间的频率相差 1 倍。在2 个八度音之间,又可分为12个半音,每2个半音的频率比为12√2。另外,音符A(简谱中的低音6)的频率为440Hz,音符 B 到C之间、E 到F之间为半音,其余为全音。由此可以计算出简谱中从低音 l 至高音1 之间每个音符的频率,如表 1 所示。 产生各音符所需的频率可用一分频器实现,由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但会增加分频器的分频级数。实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取合适的时钟频率。本文设计的乐曲发生器选取6MHz 的基准频率。若无 6MHz 的时钟频率,则可以先分频得到 6MHz 或换一个新的基准频率。实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会走调。 化蝶简谱中各音符对应的分频系数如表 2所示。为了减小输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。表 2 中的分频系数是从 6MHz 频率二分频得到的 3MHz 频率基础上计算得出的。由于最大的分频系数为 9101,故采用 14位二进制计数器已能满足分频要求。 每个音符持续的时间是乐曲能连续演奏所需的另一个基本要素。化蝶的最小的节拍为 1/4 拍,将1拍的时间长度定为 1s,则只需要再提供一个 4Hz 的时钟频率即可产生 1/4 拍的时长。演奏的时间控制通过记录来完成,对于占用时间较长的节拍(一定是 1/4 拍的整数倍,如 2/4 拍),只需将该音符连续记录2 次即可。 3 层次化设计 我们在美国 ALTERA 公司MAX + plusⅡ的 EDA 软件平台上,使用层次化设计手段,实现了化蝶乐曲发生器的设计。图 2 为化蝶乐曲发生器的顶层电路。 音符的频率可以由 PUI。SE 元件的输出 SPEAK 获得,这是一个数控分频器,由其 CLK 6MHz 端输入 6MHz脉冲信号,分频比由预置输入端 D[13..0]决定。输出为方波信号,其频率为 3 000 000/(1+D[13..0]),单位为 Hz。 音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,TABLE 元件首先是为 PULSE 元件提供决定所发音符的分频预置数,而此数停留的时间即为此音符的节拍值。在 TABLE元件中设置了一个 8 位二进制计数器(计数最大值为 138),这个计数器的计数频率选为 4 Hz,所以每一计数值的停留时间为 0.25s,即四四拍的 4 分音符持续时间。例如,化蝶乐曲的第一个音符?quot;低音 3(1 拍),停留的时间需用 4 个计数时钟节拍,即 1s。相应地,所对应的低音3音符分频预置值为 9 100,其值在AF[13..0]输出端停留了 1s。随着 TABLE元件中的计数器按 4Hz的时钟速率作加法计数时,化蝶乐曲就开始连续自然地演奏起来了。 底层元件的 VHDL 逻辑描述如下: --PULSE 元件 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY pulse IS PORT(clk:INSTD_LOGIC; --待分频时钟 d:IN STD_LOGIC_VECTOR(

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档