用户名: 密码: 免费注册 免费试用 简体中文 | ENGLISH
中国·芯片交易在线  
www.ic112.com
IC72论坛
广告服务
网页制作
用户帮助
首页 供应信息 求购信息 库存查询 新闻中心 展会资讯 IC厂商 技术资料 自由区域
当前位置:首页>> 技术资料 >> 正文
基于FPGA的乐曲发生器设计
时间:2006/9/13 11:26:00  作者:  来源:ic72  浏览人数:1374
 
 

      1 概 述 

       随着EDA技术的进展,基于可编程ASIC的数字电子系统设计的完整方案越来越受到人们的重视,并且以EDA技术为核心的能在可编程ASIC上进行系统芯片集成的新设计方法,也正在快速地取代基于PCB板的传统设计方式。

      与利用微处理器(CPU或MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。如何使用EDA工具设计电子系统是人们普遍关心的问题,本设计在美国ALTERA公司MAX + plusⅡ的EDA软件平台上,使用层次化设计方法,实现了乐曲发生器的设计。乐曲选取《梁祝》中化蝶部分,其简谱如图1所示。

ic72新闻中心

      2音符与频率的关系

      我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素,首先让我们来了解音符与频率的关系。

      乐曲的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。在2个八度音之间,又可分为12个半音,每2个半音的频率比为12√2。另外,音符A(简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音l至高音1之间每个音符的频率,如表1所示。

ic72新闻中心

       产生各音符所需的频率可用一分频器实现,由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但会增加分频器的分频级数。实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取合适的时钟频率。本文设计的乐曲发生器选取6MHz的基准频率。若无6MHz的时钟频率,则可以先分频得到6MHz或换一个新的基准频率。实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会"走调"。

      化蝶简谱中各音符对应的分频系数如表2所示。为了减小输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。表2中的分频系数是从6MHz频率二分频得到的3MHz频率基础上计算得出的。由于最大的分频系数为9101,故采用14位二进制计数器已能满足分频要求。

ic72新闻中心

      每个音符持续的时间是乐曲能连续演奏所需的另一个基本要素。化蝶的最小的节拍为1/4拍,将1拍的时间长度定为1s,则只需要再提供一个4Hz的时钟频率即可产生1/4拍的时长。演奏的时间控制通过记录来完成,对于占用时间较长的节拍(一定是1/4拍的整数倍,如2/4拍),只需将该音符连续记录2次即可。

      3 层次化设计

      我们在美国AI。TERA公司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(13 DOWNTO 0);

      --分频预置数输入

      fout:OUTSTD_LOGIC); 一一发音输出

      END pulses

      ARCHITECTURE behav OF pulse IS

      SIGNAL count : STD_LOGIC-VECTOR(13DOWNTO 0);

      SIGNAL cao,caoo1,cao2,load:STD_LOGIC'

      BEGIN

      PROCESS(clk,load,d)

      BEGIN

      IF clk'EVENT AND clk='l'THEN

      IF load='1'THEN count<=d;

      ELSE count<=count一1;

      END IF;

      END PROCESS;

      PROCESS(count)

      BEGIN

      IF count=0 THEN cao<='l';

      ELSE cao<='0'; END IF;

      load<=cao;

      END PROCESS;

      PROCESS(clk) --去毛刺

      BEGIN

      IF clk'EVENT ANDclk='1'THEN

      caol<=cao;

      END IF;

      END PROCESS;

      PROCESS(cao1)

      BEGIN

      IF cao1'EVENT AND cao1='1'THEN

      ca02<=NOT cao2;

      END IF

      fout<=cao2;

      END PROCESS;

      END behav;

      一一TABLE元件

      IBRARY IEEE;

      USE IEEE.STD_LOGIC_1164.ALL;

      ENTITY table IS

      PORT(clk:IN STD_LOGIC;

      af:OUT INTEGER RANGE 0 TO 16#3FFF#)

      一一14位二进制数

      END;

      ARCHITECTURE one OF table IS

      CONSTANT 1ow_3:INTEGER:=9100;

      CONSTANT 1ow_5;INTEGER:=7652;

      CONSTANT 1ow_6:INTEGER:=6817;

      CONSTANT 1ow_7:INTEGER:=6073;

      CONSTANT mid_1:INTEGER;=5732;

      CONSTANT mid_2:INTEGER:=5107;

      CONSTANT mid_3:INTEGER:=4550;

      CONSTANT mid_5:INTEGER:=3826;

      CONSTANT mid_6:INTEGER:=3408;

      CONSTANT highl:INTEGER: =2866

      CONSTANT stop:INTEGER:=0;

      --休止符分频系数

      SIGNAL counter:INTEGER RANGE 0 TO 138;

      BEGIN

      PROCESS(clk)

      BEGIN

      IF counter=138 THEN counter<=0;

      ELSIF(clk'EVENT AND clk='l')THEN

      counter<=counter+1;

      END IF;

      END PROCESS;

      PROCESS(counter)

      BEGIN

      CASE counter IS

      WHEN 00=>af<=low_3; --低音3

      WHEN 01=>af<=low_3;

      WHEN 02=>af<=low_3;

      WHEN 03=>af<=low_3;

      WHEN 04?gt;af<=low_5;

      WHEN 05=>af<=low_5;

      WHEN 06=>af<=low_5;

      WHEN 07=>af<=low_6;

      WHEN 08=>af<=low_1;

      WHEN 09=>af<=low_1;

      WHEN 10=>af<=low_1;

      WHEN 11=>af<=low_2;

      ……

      WHEN 134=>af<=low_5;

      WHEN 135=>>af<=low_5;

      WHEN 136=>>af<=stop;

      WHEN 137=>af<=stop;

      WHEN 138=>>af<=stop;

      WHEN OTHERS=>NULL;

      END CASE;

      END PROCESS;

      END;

      4 实验验证

      需要说明的是不同的数字系统其引脚锁定是不一样的,为了便于在实验系统上验证设计结果,必须按照实验系统的结构对输入和输出引脚进行锁定。本设计采用的是杭州康芯电子有限公司生产的GW48-CK实验系统,FPGA目标芯片的型号为EPFl0K10LC84。芯片配置成功后即可进行硬件测试:选择实验电路结构图NO.6,使CLK 6MH2与C10ck9相接(接受6MHz时钟频率),CLK 4Hz与Clock2相接(接受4Hz时钟频率),发音输出接SPEAK,当乐曲一遍演奏完成后,乐曲发生器能自动从头开始循环演奏。

 
【相关文章】
·世界最大电子公司(一)
·世界最大电子公司(四)
·世界最大电子公司(三)
·世界最大电子公司(二)
·基于GPRS无线通信的配变自动化系统研究
·家用医疗保健智能机器人设计
·双降压式DC/DC转换器LM2717-ADJ的设计
·基于PIC单片机的SPWM控制技术
·基于FPGA的乐曲发生器设计
·用电源管理器件管理分布式电路板电源
·汽车倒车障碍检测系统的解决方案
 
 
新闻搜索
 
新闻热点
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
Zetex迷你晶体管功率达1.25W
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9