乐曲硬件演奏电路设计

更新时间:2023-05-19 01:53:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

湖南人文科技学院

课程设计报告

课程名称:VHDL语言与EDA课程设计

设计题目: 乐曲硬件演奏电路设计

系 别: 通信与控制工程系

专 业: 电子信息工程

班 级: 08电信二班

学生姓名: 王世伟 朱彩虹

学 号: 08409249 08409231 起止日期: 2011年06月13日 ~ 20年 06月26日 指导教师: 姚 毅 成继中

教研室主任: 侯海良

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

指导教师评语: 指导教师评语

指导教师签名:

权重 0.2 0.5 0.3

成绩 王世伟 朱彩虹

绩 1、设计过程中出勤、学习态度等方面 评 定2、课程设计质量与答辩 3、设计报告书写及图纸规范程度 总 成 绩

教研室审核意见:

教研室主任签字:

教学系审核意见:

主任签字:

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

摘 要

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数化库单元LPM器件。通过引入支持LPM的EDA软件工具,设计者可以设计出结构独立而且硅片的使用效率非常高的产品。

本课设在EDA开发平台上利用VHDL语言设计数控分频器电路,利用数控分频的原理设计乐曲硬件演奏电路,并定制LPM-ROM存储音乐数据,以“两只老虎”乐曲为例,将音乐数据存储到LPM-ROM,就达到了以纯硬件的手段来实现乐曲的演奏效果。只要修改LPM-ROM所存储的音乐数据,将其换成其他乐曲的音乐数据,再重新定制LPM-ROM,连接到程序中就可以实现其它乐曲的演奏。

关键词:FPGA;EDA;VHDL;音乐

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

目 录

设计要求............................................................ 1

1、方案论证与对比................................................... 1

1.1方案一....................................................... 1

1.2方案二....................................................... 1

1.3综合对比..................................................... 1

2 乐曲演奏电路原理.................................................. 2

2.1 音乐演奏电路原理 ............................................ 2

2.2 音符频率的获得 .............................................. 2

2.3 乐曲节奏的控制 .............................................. 3

2.4 乐谱发生器 .................................................. 3

2.5 乐曲演奏电路原理框图 ........................................ 3

3音乐硬件演奏电路的设计实现 ........................................ 4

3.1 地址发生器模块 .............................................. 4

3.1.1 地址发生器的VHDL设计.................................. 4

3.2 分频预置数模块 .............................................. 6

3.2.1 分频预置数模块的VHDL设计.............................. 6

3.3 数控分频模块 ................................................ 8

3.3.1 数控分频模块的VHDL设计................................ 8

3.4 music模块.................................................. 10

3.4.1 音符数据文件.......................................... 10

3.5.2 LPM-ROM定制 .......................................... 12

3.6 顶层文件 ................................................... 14

4 时序仿真及下载调试过程........................................... 16

4.1 时序仿真图 ................................................ 16

4.2 引脚锁定以及下载 ........................................... 17

4.3调试过程及结果.............................................. 17

5扩大乐曲硬件演奏电路的通用性 ..................................... 18

5.1 完善分频预置数模块的功能 ................................... 18

设计总结与心得体会................................................. 21

参考文献........................................................... 22

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

乐曲硬件演奏电路设计

设计要求

利用FPGA,设计一个乐曲硬件演奏电路。乐曲的12平均率规定:每2个八度(如简谱中的中音1与高音1)之间的频率相差1倍。在2个八度音之间,又可分为12个半音,每2个半音的频率比为12/2。另外,音符A的频率为440HZ,音符B到C之间,E到F之间为半音,其余为全音。由此可以计算出简谱中从低音l至高音1之间每个音符的频率。设计音符查找表电路模块,时钟模块,数控分频器模块,音乐节拍产生模块电路。

1、方案论证与对比

1.1方案一

利用FPGA来实现乐曲硬件演奏电路。乐曲的12平均率规定:每2个八度(如简谱中的中音1与高音1)之间的频率相差1倍。在2个八度音之间,又可分为12个半音,每2个半音的频率比为12/2。另外,音符A的频率为440HZ,音符B到C之间,E到F之间为半音,其余为全音。由此可以计算出简谱中从低音l至高音1之间每个音符的频率。设计音符查找表电路模块,时钟模块,数控分频器模块,音乐节拍产生模块电路。

1.2方案二

制作一个纯硬件电路来完成乐曲演奏。

1.3综合对比

与利用微处理器来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。所以选择方案一。

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

2 乐曲演奏电路原理

2.1 音乐演奏电路原理

图1 电路原理框图

该主系统由三个模块:Songer顶层文件、div分频器、译码器组成。且Songer顶层文件还包括3个子文件分别是NoteTabs,ToneTaba和Speakera,此外,我们还需建立一个名为“music”的LPM_ROM模块与NoteTabs模块连接。

2.2 音符频率的获得

多个不同频率的信号可通过对某个基准频率进行分频器获得。由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。本文中选取750KHz的基准频率。由于现有的高频时钟脉冲信号的频率为12MHz,故需先对其进行16分频,才能获得750KHz的基准频率。对基准频率分频后的输出信号是一些脉宽极窄的尖脉冲信号(占空比=1/分频系数)。为提高输出信号的驱动能力,以使扬声器有足够的功率发音,需要再通过一个分频器将原来的分频器的输出脉冲均衡为对称方波(占空比=1/2),但这时的频率将是原来的1/2。

由于最大分频系数是1274,故分频器采用11位二进制计数器才能满足要求。

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

2.3 乐曲节奏的控制

本课设的两只老虎乐曲,最小的节拍为1/4拍,若将1拍的时间定为1秒,则只需要提供一个4Hz的时钟频率即可产生1/4拍的时长(0.25秒),对于其它占用时间较长的节拍(必为1/4拍的整数倍)则只需要将该音符连续输出相应的次数即可。

计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低。

2.4 乐谱发生器

本文将乐谱中的音符数据存储在LPM-ROM中,如“两只老虎”乐曲中的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,音符“3”就要在LPM-ROM中连续的四个地址上都存储。当一个4Hz的时钟来时,相应地就从LPM-ROM中输出一个音符数据。

2.5 乐曲演奏电路原理框图

我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,问题是如何来获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果。图1中,模块U1类似于弹琴人的手指;U2类似于琴键;U3类似于琴弦或音调发声器。

音符的频率可以由图1中的SPEAKERA获得,这是一个数控分频器。由其clk端输入一具有较频率(这里是12MHz)的信号,通过SPEAKERA分频后由SPKOUT输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/2。SPEAKERA对clk输入信号的分频比由11位预置数Tone[10..0]决定。SPKOUT的输出频率将决定每一音符的音调,这样,分频计数器的预置值Tone[10..0]与SPKOUT的输出频率,就有了对应关系。

音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,图1中模块TONETABA的功能首先是为SPEAKERA提供决定所发音符的分频预置数,而此数在SPEAKERA输入口停留的时间即为此音符的节拍值。输向TONETABA

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

中Index[3..0]的值ToneIndex[3..0]的输出值与持续的时间由模块NOTETABS决定。在NOTETABS中设置了一个8位二进制计数器,作为音符数据ROM的地址发生器。得到乐曲演奏电路的原理框图如图1所示:

图1 电路原理图

3音乐硬件演奏电路的设计实现

音乐硬件演奏电路主要是用VHDL语言来设计,并利用QuartusII软件工具来编译、测试和仿真。根据顶层原理图,共分为地址发生器模块、分频预置数模块、数控分频模块这三个模块。而music模块是存放乐曲中的音符数据,在我们的顶层原理图中并没有显示出来,地址发生器模块作为music模块中所定制的音符数据ROM的地址发生器,分频预置数模块提供分频预置数即给数控分频模块提供计数初值。数控分频模块根据分频预置数输出各个音符所对应的频率。

3.1 地址发生器模块

地址发生器模块设置了一个8位二进制计数器(计数最大值为138),作为音符数据ROM的地址发生器。每来一个时钟脉冲信号(Clk),8位二进制计数器就计数一次,ROM文件中的地址也就随着递增,音符数据ROM中的音符也就一个接一个连续的取出来了。

3.1.1 地址发生器的VHDL设计

这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒,四四拍的4分音符持续时间。例如,地址发生器在以下的

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

VHDL逻辑描述中,“两只老虎”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间。那么相应随着程序中的计数器按4Hz的时钟频率作加法计数时,即随地址递增时,将从音符数据ROM中将连续取出4个音符“3”通过toneindex[3..0]端口输向分频预置数模块。这样两只老虎乐曲中的音符就一个接一个的通过toneindex[3..0]端口输向分频预置数模块。程序如下 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY NoteTabs IS

PORT (clk: IN STD_LOGIC;

ToneIndex:OUT STD_LOGIC_VECTOR (3 DOWNTO 0));

END;

ARCHITECTURE one OF NoteTabs IS

COMPONENT MUSIC

PORT (address: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

inclock: IN STD_LOGIC;

q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0));

END COMPONENT;

SIGNAL Counter: STD_LOGIC_VECTOR (7 DOWNTO 0);

BEGIN

CNT8: PROCESS(clk,Counter)

BEGIN

IF Counter=138 THEN Counter<="00000000";

ELSIF (clk'EVENT AND clk='1') THEN Counter<=Counter+1;

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

END IF;

END PROCESS;

u1:MUSICPORT MAP(address=>Counter,q=>ToneIndex,inclock=>clk); END one;

程序的功能是每来一个时钟,地址值递增1,并将这个地址上所存储的音符数据输出。当Clk来了一个时钟脉冲,输出相应地址上的音符3,地址值递增1;接下来的三个时钟脉冲来时,输出也是音符3,地址连续递增3次;再下一个脉冲来时,输出为音符5等等都符合模块中的音符数据文件中的地址/数据表。

3.2 分频预置数模块

分频预置数模块是乐曲简谱码对应的分频预置数查表电路。它提供了每个音符所对应的分频预置数,即给数控分频模块提供计数初值,以”两只老虎”乐曲为例,列出了在这个乐曲中所用到的13个音符的分频预置数。

3.2.1 分频预置数模块的VHDL设计

在这个模块的VHDL逻辑描述中设置了“两只老虎”乐曲中全部音符所对应的分频预置数,共13个,每一音符的停留时间由音乐节拍和地址发生器模块的时钟(Clk)的输入频率决定,在此为4Hz。这13个值的输出由程序的4位输入值index[3..0]确定。输向程序[4]中index[3..0]的值又由地址发生器模块的输出toneindex[3..0]的输出值和持续时间决定。程序如下:

library ieee;

use ieee.std_logic_1164.all;

entity tonetaba is

port(index: in std_logic_vector(3 downto 0);

code: out std_logic_vector(3 downto 0);

high: out std_logic;

tone: out std_logic_vector(10 downto 0));

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

end entity tonetaba;

architecture one of tonetaba is

begin

search:process(index)

begin

case index is

when"0000"=>tone<="11111111111";code<="0000";high<='0';--2047; when"0001"=>tone<="01100000101";code<="0001";high<='0';-- 773; when"0010"=>tone<="01110010000";code<="0010";high<='0';-- 912; when"0011"=>tone<="10000001100";code<="0011";high<='0';--1036; when"0101"=>tone<="10010101101";code<="0101";high<='0';--1197; when"0110"=>tone<="10100001010";code<="0110";high<='1';--1290; when"0111"=>tone<="10101011100";code<="0111";high<='1';--1372; when"1000"=>tone<="10110000010";code<="0001";high<='1';--1410; when"1001"=>tone<="10111001000";code<="0010";high<='1';--1480; when"1010"=>tone<="11000000110";code<="0011";high<='1';--1542; when"1100"=>tone<="11001010110";code<="0101";high<='1';--1622; when"1101"=>tone<="11010000100";code<="0110";high<='1';--1668; when"1111"=>tone<="11011000000";code<="0001";high<='1';--1728; when others=>null;

end case;

end process;

end one;

模块的功能是输出各个音符所对应的分频预置数,当index是“0000”,

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

tone输出为2047,即休止符的分频预置数;当index是“0101”时, tone输出为1197即低音5的分频预置数;当index是“1111”时, tone输出为1728即高音1的分频预置数等等其它状态时,tone分别输出相应音符的分频预置数。

3.3 数控分频模块

音符的频率由数控分频模块获得,这是一个数控分频电路。它是由一个初值可变的加法计数器构成。该计数器的模为2047,当计数器记满时,计数器产生一个溢出信号FULL,此溢出信号就是用作发音的频率信号。在计数器的输入端给定不同的初值,而此预置数就是表1中的计数初值,就可得到不同音符的发音频率信号。它计满时所需要的计数初值可由下式来表示。计数初值(Tone)=2047分频系数而分频系数又可有下式来求:分频系数=基准频率/音符的发生频率 低音时Tone值小,分频系数大,溢出信号周期长,扬声器发出的声音低,Tone随音乐的乐谱变化大,自动控制分频比,实现了数控分频,发生信号的频率与音调Tone成正比。这就是利用数控分频器自动演奏音乐的原理。

3.3.1 数控分频模块的VHDL设计

其时钟(Clk)端输入的是12MHz的信号,从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,这时的频率就变为原来的1/2,刚好就是相应音符的频率。数控分频模块中对Clk输入信号的分频比由11位预置数tone[10..0]决定。Fout的输出频率将决定每一个音符的音调,这样,分频计数器的预置值tone[10..0]与Fout的输出频率就有了对应关系。例如在分频预置数模块中若取tone[10..0]=1036,将发出音符为“3”音的信号频率。程序如下:

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity speakera is

port(clk: in std_logic;

tone: in std_logic_vector(10 downto 0);

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

spks: out std_logic);

end entity speakera;

architecture one of speakera is

signal preclk,fullspks: std_logic;

begin

divideclk: process(clk)

variable count4: std_logic_vector(3 downto 0);

begin

preclk<='0';

if count4>11 then preclk<='1';count4:="0000";

elsif clk'event and clk='1' then count4:=count4+1;

end if;

end process;

genspks: process(preclk,tone)--11

variable count11: std_logic_vector(10 downto 0);

begin

if preclk'event and preclk='1'then

if count11=16#7ff#then count11:=tone;fullspks<='1';

else count11:=count11+1;fullspks<='0';end if;

end if;

end process;

delayspks: process(fullspks)

variable count2: std_logic;

begin

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

if fullspks'event and fullspks='1' then count2:=not count2;

if count2='1' then spks<='1';

else spks<='0';

end if;

end if;

end process;

end one;

此模块的功能是根据初始值d的值,对输入时钟信号Clk的频率进行分频,得到想要的音符的发声频率。d的值设为6c0(即高音1的分频预置数1728),Clk的频率为750KHz,Fout输出的脉冲信号的周期为849.9291us(即1176.568Hz),接近高音1的发声频率。由表1中可知高音1的分频系数为319,即对输入时钟Clk进行319次分频就可得高音1的发声频率。

3.4 music模块

Music模块存放乐曲中的音符数据,它是利用LPM-ROM来实现的,将乐谱中相应的音符放在一个连续的地址上。它首先是编写音符数据文件,将乐谱中相应的音符存放在一个连续的地址上。因为1拍的时间定为1秒,提供的是4Hz的时钟频率(即1/4拍的整数倍),则需将这个音符存储在相应次数的连续几个地址上。然后对音符数据进行ROM定制,最后对定制好的ROM文件进行测试和仿真。

3.4.1 音符数据文件

width=4;--“两只老虎”乐曲演奏数据

depth=256;

address_radix=dec;

data_radix=dec;

content begin

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

其中WIDTH=4,表示数据输出为宽为4;DEPTH=256,表示共有256个4位数据点;ADDRESS-RADIX=DEC,表示地址信号用十进制;DATA-RADIX=DEC,表示输出数据是十进制数。

形成ROM中的配置数据(初始化数据)文件的方法如下:在QuartusII中编辑.mif文件。文件中的关键词WIDTH设置ROM的数据宽度;DEPTH设置ROM数据的深度,即4位数据的数量,文件中设置的256等效于8位地址线宽度,初始化数据如下:

图2 ROM初始化数据

ADDRESS-RADIX=DEC和DATA-RADIX=DEC表示设置地址和数据的表达式格式都是十进制;地址/数据表以CONTENT BEGIN开始,以END结束;其中的地址/数据表达方式是冒号左边写ROM地址值,冒号右边写对应此地址放置的十进制数据,如46:9,表示46为地址,9为该地址中的数据。这样每读到一个地址,即可输出其相应的数据。文件编辑好后,保存时取文件名为“mucic.mif”,存盘的路径为“D:\altera\mucic”。

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

3.5.2 LPM-ROM定制

定制的基本步骤如下:

(1)进入QuartusII,选菜单 file->megawizard plug-in manager,选择“creat a new ”,然后按“next”键,进入图2所示界面。选择LPM-ROM;最后在browse下的栏中键入路径与输出文件名:“D:\mucic.vhd”,注意后缀vhd小写。

图3 选择路径

(2)单击“next”键,将出现图3所示的界面,选择ROM数据位宽度为4,地址线宽为8,即设置此ROM能存储8位二进制数据共64个,然后进入图4所示的窗口。

(3)通过在图4所示窗口的“browse”钮,找ROM中的加载文件路径和文件名:“D:\altera\QuartusII\music.mif”,注意ROM元件的inclock文件名:“D:\altera\QuartusII\music.mif”,注意ROM元件的inclock是地址锁存钟。

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

此模块的功能是输出相应地址上所存储的音符数据,当address是0、1、2、3时,q的输出是3;当address是4、5、6时,q的输出是5;当address是7时,q的输出是6等等都符合模块中的音符数据文件中的地址/数据表。这里必须选择AUTO和Dual clock:used separate ‘input’ and ‘output’Clocks选项

图4 芯片的选择

(4)单击“next”键,将出现图5所示的界面,选择允许在线编程,地址线宽为8,即设置此ROM能存储8位二进制数据共64个,通过在图4所示窗口的“browse”钮,找ROM中的加载文件路径和文件名:“D:\altera\QuartusII\music.mif”,注意ROM元件的inclock文件名:“D:\altera\QuartusII\music.mif”,注意ROM元件的inclock是地址锁存钟,然后单击’Next’完成LPM_ROM的定制。

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

如下图所示:

图5 选择是否在线编程

3.6 顶层文件

程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY Songer IS

PORT (CLK12MHZ: IN STD_LOGIC;

CLK8HZ: IN STD_LOGIC;

CODE1: OUT STD_LOGIC_VECTOR (3DOWNTO 0);

HIGH1: OUT STD_LOGIC;

SPKOUT: OUT STD_LOGIC);

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

END ENTITY Songer;

ARCHITECTURE one OF Songer IS

COMPONENT NoteTabs

PORT (clk: IN STD_LOGIC;

ToneIndex: OUT STD_LOGIC_VECTOR (3 DOWNTO 0));

END COMPONENT;

COMPONENT ToneTaba

PORT (Index: IN STD_LOGIC_VECTOR (3 DOWNTO 0);

CODE: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);

HIGH: OUT STD_LOGIC;

Tone: OUT STD_LOGIC_VECTOR (10 DOWNTO 0));

END COMPONENT;

COMPONENT Speakera

PORT (clk: IN STD_LOGIC;

Tone: OUT STD_LOGIC_VECTOR (10 DOWNTO 0);

SpkS: out STD_LOGIC);

END COMPONENT;

SIGNAL Tone: STD_LOGIC_VECTOR (10 DOWNTO 0);

SIGNAL ToneIndex: STD_LOGIC_VECTOR (3 DOWNTO 0);

BEGIN

u1: NoteTabs PORT MAP(clk=>CLK8HZ,ToneIndex=>ToneIndex);

u2:ToneTabaPORTMAP(Index=>ToneIndex,Tone=>Tone,CODE=>CODE1,HIGH=>HIGH

1);

u3:SpeakeraPORTMAP(clk=>CLK12MHZ,Tone=>TONE,SpkS=>SPKOUT);

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

END one;

将所编写的顶层文件程序设为当前工程,通过对程序进行编译,仿真,确定工程没有错误后经过引脚锁定就可以下载到EDA试验箱中了。通过试验箱上的蜂鸣器我们可以听到“两只老虎”的乐曲。

4 时序仿真及下载调试过程

关于乐曲演奏电路设计的实现关键是要实现它的时序仿真,下面就是各部分的仿真图示。

4.1 时序仿真图

图6 Notetabas的时序仿真图

图7 Tonetaba的时序仿真

乐曲演奏广泛用于自动答录装置、手机铃声、集团电话、及智能仪器仪表设备。实现方法有许多种,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多。如今的数字逻辑设计者面临日益缩短的上市时间的压力,不得不进行上万门的设计,同时设计者不允许以牺牲硅的效率达到保持结构的独特性。使用现今的EDA软件工具来应付这些问题,并不是一件简单的事情。FPGA预装了很多已构造好的参数

图8 Speakerea的时序仿真

图9 Songer的时序仿真

4.2 引脚锁定以及下载

为实现所设计的功能,管脚锁定时,选用实验箱的模式5。

锁定管脚如下:

图10 引脚锁定

4.3调试过程及结果

这个乐曲硬件演奏电路的设计是仿照EDA实验例子设计的。一开始,我们仔细研究书本例子后,按照书上的例子建立工程,并在实验箱上下载测试实现,两只老虎乐曲可以播放,实验成功。接下来,根据设计要求,我们就选了《两只老虎》这首歌曲,把它翻译成需要的音符数据,并把它和前一首曲子放在一个数据ROM里。然后,通过地址的选择实现手动和自动播放歌曲。(详见前面实验原理)最后下载

本文来源:https://www.bwwdw.com/article/h5n4.html

Top