- ·上一篇文章:浅析Pro/Engineer的参数化特征构建原则
- ·下一篇文章:对于汽车尾气污染的净化处理技术探析
对FPGA多首乐曲演奏电路系统的设计分析
摘要:本文分析了乐曲演奏设计中音符、频率、节拍与编码的相互关系,并在EDA开发工具QuartusII平台上,采用VHDL语言及原理图的设计方法,实现了基于FPGA片上系统动态显示可选择多首乐曲的乐曲演奏器的设计,使乐曲演奏数字电路的设计得到了更好的优化,提高了设计的灵活性。
关键词:FPGA;VHDL;编码;QuartusII
中图分类号: 文献标识码:A 文章编号:1672—545X(2007)02— —
Analysis and Design of the Music Player Based on FPGA to much music
SU Li-ping1, LI Zhi-Yuan2
(1.Department of Electrical Engineering, Guang Xi Technological College Of Machinery And Electcity,Nanning 530007,China;
2.China United Telecommunications Corporation GuangXi Branch,Nanning 520031,China)
Abstract:This paper analyzes the correlation between the coding with the note,frequency and rhythm in musical performante,Based on Quartus II—the EDA development tool,this design has adopted the method of classification of VHDL and principle picture design procedures.And the design of dynamic displayfing music player has been achieved on the basic of FPGA to much music,the design making music perform the figure circuit has got the much better optimization , has improved the flexibility designing that.
Keywords:FPGA;VHDL;coding;QuartusII
前言
随着微电子技术、集成技术和计算机技术的迅速发展,电子线路数字化已经成为一个发展趋势,数字化电子系统的设计方法和手段发生了很大的变化。特别是可编程逻辑器件的功能和容量的不断扩大,如FPGA(Field Programmable Gate Array,现场可编程门阵列)使集成电路的设计进入片上系统(System on a Chip,SOC)或可编程片上系统(System on a Programmable Chip,SOPC)的设计时代。同时采用超高速集成电路硬件描述语言VHDL (Very High Speed Integrated Circuit Hard—ware Description Language),其具有多层次描述系统硬件功能的能力,既支持模块化设计,也支持层次化设计,使各种数字化电子系统的设计通过描述芯片功能实现系统功能,从而有效地缩短了产品开发周期,减少了设计芯片的数量,缩小了系统体积,降低了系统能耗,提高了系统的灵活性和可靠性。
本文选取《我爱北京天安门》、《难忘今宵》、《莫斯科郊外的晚上》、《小燕子》四首乐曲的一部分为例(其中《我爱北京天安门》的部分简谱如下图1所示),在美国ALTERA公司Quartus II的EDA (ElectronicsDesign Automation)软件平台上,采用VHDL语言层次化和模块化的设计方法,实现了多首乐曲演奏电路的设计。
图1
1 系统设计分析
1.1 乐曲演奏原理
声音的频谱范围一般在几十到几千赫兹,利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐曲中的每一个音符对应着一个确定的频率,因此,要想发出不同音符的音调,只要能控制输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以往扬声器上连续地发出各个音符的音调 。而要准确地演奏出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间,也就是节拍。设计的关键是要准确地产生乐曲中每个音符的发音频率,并根据乐曲要求按音符需要的节拍输出,这是乐曲能够演奏的两个关键因素。
1.2 音符频率的获得
在基于FPGA的数字系统设计中,多个不同频率的信号,一般是通过对某个基准频率进行分频获得的。在尽量减少频率误差的前提下,选取合适的基准频率。由于现有FPGA芯片上外接的高频时钟频率为20 MHz,先对其进行分频或利用锁相环变成4 MHz和4 Hz的时钟频率,再对4 MHz通过数控分频器将根据高、中、低音音符编码分频成各音符所需要的声音频率的2倍,由于数控分频器输出的波形是脉宽极窄的脉冲波,为减小输出偶次谐波分量和更好的驱动扬声器发声,最后在到达扬声器之前再进行一次二分频,从而生成各音符对应频率的方波输出,以成功完成乐曲演奏的功能。
1.3 音符编码的设计分析
在动态显示乐曲演奏器的设计中,采用音符编码输出的方式,即乐曲中每一个高、中、低音音符对应着不同的编码,由编码确定对应音符的输出频率,同时控制编码输出的速度,决定音符的持续时间,也就是控制每个音符在乐曲中的节拍,从而达到乐曲演奏的目的,与此同时可以根据动态输出的编码来确定显示演奏乐曲的高、中、低音调及音符。各音符对应的分频系数见下表1。
表1
音名 分频比 预置数 音名 分频比 预置数 音名 分频比 预置
低音1 1911 137 中音1 956 1092 高音1 478 1570
低音2 1703 345 中音2 851 1197 高音2 426 1622
低音3 1517 531 中音3 758 1289 高音3 379 1669
低音4 1432 616 中音4 716 1332 高音4 358 1690
低音5 1276 772 中音5 638 1410 高音5 319 1729
低音6 1137 911 中音6 568 1480 高音6 284 1764
低音7 1012 1036 中音7 506 1542 高音7 26 2022
1.4 节拍控制电路的设计分析
每个音符持续的时间是乐曲能连续演奏所需的另一个基本要素。如本文的乐曲,最小的节拍为1/4拍,若将一拍的时长定为1 S,则只需由一个4 Hz的时钟频率即可产生1/4拍的时长。对于其它占用时间的节拍,则只需要将该音符连续输出若干遍即可。连续按节拍输出乐曲中各音符的编码,乐曲就自动连续演奏起来,若停止4 Hz时钟频率,则乐曲演奏也随即停止。动态显示乐曲演奏器原理框图如图2所示。
2 乐曲演奏器设计
根据动态显示乐曲演奏器系统的设计分析,采用VHDL语言使用模块化的设计方法设计的顶层电路文件如图3所示(已设置好管脚)。
图3
图中xuanzhe模块作为一个选择器,选择四首不同的乐曲,beijing模块、nanwang模块、mosike模块、yanzi模块分别四首不同的乐曲。其中beijing模块的VHDL源程序设计如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY beijing IS
PORT(CLK1:IN STD_LOGIC;
EN:IN STD_LOGIC;
S:OUT STD_LOGIC_VECTOR(4 DOWNTO 1));
END beijing;
ARCHITECTURE name OF beijing IS
SIGNAL count:INTEGER:=0;
BEGIN
PROCESS(ClK1)
BEGIN
IF EN='1' THEN
IF(ClK1'EVENT AND ClK1='1')THEN
IF(count<113) then count<=count+1;
IF(count=0) then s<="0000";
ELSIF(count=1)THEN S<="0101";
ELSIF(count=2)THEN S<="1000";
ELSIF(count=3)THEN S<="0101";
ELSIF(count=4)THEN S<="0100";
ELSIF(count=5)THEN S<="0011";
ELSIF(count=6)THEN S<="0010";
ELSIF(count=7)THEN S<="0001";
ELSIF(count=8)THEN S<="000
关键词:FPGA;VHDL;编码;QuartusII
中图分类号: 文献标识码:A 文章编号:1672—545X(2007)02— —
Analysis and Design of the Music Player Based on FPGA to much music
SU Li-ping1, LI Zhi-Yuan2
(1.Department of Electrical Engineering, Guang Xi Technological College Of Machinery And Electcity,Nanning 530007,China;
2.China United Telecommunications Corporation GuangXi Branch,Nanning 520031,China)
Abstract:This paper analyzes the correlation between the coding with the note,frequency and rhythm in musical performante,Based on Quartus II—the EDA development tool,this design has adopted the method of classification of VHDL and principle picture design procedures.And the design of dynamic displayfing music player has been achieved on the basic of FPGA to much music,the design making music perform the figure circuit has got the much better optimization , has improved the flexibility designing that.
Keywords:FPGA;VHDL;coding;QuartusII
前言
随着微电子技术、集成技术和计算机技术的迅速发展,电子线路数字化已经成为一个发展趋势,数字化电子系统的设计方法和手段发生了很大的变化。特别是可编程逻辑器件的功能和容量的不断扩大,如FPGA(Field Programmable Gate Array,现场可编程门阵列)使集成电路的设计进入片上系统(System on a Chip,SOC)或可编程片上系统(System on a Programmable Chip,SOPC)的设计时代。同时采用超高速集成电路硬件描述语言VHDL (Very High Speed Integrated Circuit Hard—ware Description Language),其具有多层次描述系统硬件功能的能力,既支持模块化设计,也支持层次化设计,使各种数字化电子系统的设计通过描述芯片功能实现系统功能,从而有效地缩短了产品开发周期,减少了设计芯片的数量,缩小了系统体积,降低了系统能耗,提高了系统的灵活性和可靠性。
本文选取《我爱北京天安门》、《难忘今宵》、《莫斯科郊外的晚上》、《小燕子》四首乐曲的一部分为例(其中《我爱北京天安门》的部分简谱如下图1所示),在美国ALTERA公司Quartus II的EDA (ElectronicsDesign Automation)软件平台上,采用VHDL语言层次化和模块化的设计方法,实现了多首乐曲演奏电路的设计。
图1
1 系统设计分析
1.1 乐曲演奏原理
声音的频谱范围一般在几十到几千赫兹,利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐曲中的每一个音符对应着一个确定的频率,因此,要想发出不同音符的音调,只要能控制输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以往扬声器上连续地发出各个音符的音调 。而要准确地演奏出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间,也就是节拍。设计的关键是要准确地产生乐曲中每个音符的发音频率,并根据乐曲要求按音符需要的节拍输出,这是乐曲能够演奏的两个关键因素。
1.2 音符频率的获得
在基于FPGA的数字系统设计中,多个不同频率的信号,一般是通过对某个基准频率进行分频获得的。在尽量减少频率误差的前提下,选取合适的基准频率。由于现有FPGA芯片上外接的高频时钟频率为20 MHz,先对其进行分频或利用锁相环变成4 MHz和4 Hz的时钟频率,再对4 MHz通过数控分频器将根据高、中、低音音符编码分频成各音符所需要的声音频率的2倍,由于数控分频器输出的波形是脉宽极窄的脉冲波,为减小输出偶次谐波分量和更好的驱动扬声器发声,最后在到达扬声器之前再进行一次二分频,从而生成各音符对应频率的方波输出,以成功完成乐曲演奏的功能。
1.3 音符编码的设计分析
在动态显示乐曲演奏器的设计中,采用音符编码输出的方式,即乐曲中每一个高、中、低音音符对应着不同的编码,由编码确定对应音符的输出频率,同时控制编码输出的速度,决定音符的持续时间,也就是控制每个音符在乐曲中的节拍,从而达到乐曲演奏的目的,与此同时可以根据动态输出的编码来确定显示演奏乐曲的高、中、低音调及音符。各音符对应的分频系数见下表1。
表1
音名 分频比 预置数 音名 分频比 预置数 音名 分频比 预置
低音1 1911 137 中音1 956 1092 高音1 478 1570
低音2 1703 345 中音2 851 1197 高音2 426 1622
低音3 1517 531 中音3 758 1289 高音3 379 1669
低音4 1432 616 中音4 716 1332 高音4 358 1690
低音5 1276 772 中音5 638 1410 高音5 319 1729
低音6 1137 911 中音6 568 1480 高音6 284 1764
低音7 1012 1036 中音7 506 1542 高音7 26 2022
1.4 节拍控制电路的设计分析
每个音符持续的时间是乐曲能连续演奏所需的另一个基本要素。如本文的乐曲,最小的节拍为1/4拍,若将一拍的时长定为1 S,则只需由一个4 Hz的时钟频率即可产生1/4拍的时长。对于其它占用时间的节拍,则只需要将该音符连续输出若干遍即可。连续按节拍输出乐曲中各音符的编码,乐曲就自动连续演奏起来,若停止4 Hz时钟频率,则乐曲演奏也随即停止。动态显示乐曲演奏器原理框图如图2所示。
2 乐曲演奏器设计
根据动态显示乐曲演奏器系统的设计分析,采用VHDL语言使用模块化的设计方法设计的顶层电路文件如图3所示(已设置好管脚)。
图3
图中xuanzhe模块作为一个选择器,选择四首不同的乐曲,beijing模块、nanwang模块、mosike模块、yanzi模块分别四首不同的乐曲。其中beijing模块的VHDL源程序设计如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY beijing IS
PORT(CLK1:IN STD_LOGIC;
EN:IN STD_LOGIC;
S:OUT STD_LOGIC_VECTOR(4 DOWNTO 1));
END beijing;
ARCHITECTURE name OF beijing IS
SIGNAL count:INTEGER:=0;
BEGIN
PROCESS(ClK1)
BEGIN
IF EN='1' THEN
IF(ClK1'EVENT AND ClK1='1')THEN
IF(count<113) then count<=count+1;
IF(count=0) then s<="0000";
ELSIF(count=1)THEN S<="0101";
ELSIF(count=2)THEN S<="1000";
ELSIF(count=3)THEN S<="0101";
ELSIF(count=4)THEN S<="0100";
ELSIF(count=5)THEN S<="0011";
ELSIF(count=6)THEN S<="0010";
ELSIF(count=7)THEN S<="0001";
ELSIF(count=8)THEN S<="000





