《eda设计课题论文硬件演奏电路》由会员分享,可在线阅读,更多相关《eda设计课题论文硬件演奏电路(12页珍藏版)》请在金锄头文库上搜索。
1、EDAEDA 技术课程设计技术课程设计乐曲硬件演奏电路设计乐曲硬件演奏电路设计(演奏音乐(演奏音乐梁祝梁祝 )学 院: 生物医学工程学院 专业、班级: 07 电子信息工程 组员: 翁健文 113200780200017 张平 113200780200026 刘正阳 113200780200007 指导教师: 刘娅琴老师 2010 年 5 月 4 日摘要摘要:与利用微处理器(CPU 或 Mcu)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的 EDA 工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。本文重点介绍用 EDA 实验系统,
2、利用数控分频器设计硬件乐曲演奏电路(电子琴),使读者初步了解 VHDL 硬件描述语言和 MAX+plus 开发环境。关关键词键词: :数控分频器、演奏电路、VHDLAbstract:Compare with using microprocessor (CPU or Mcu) to realize the music playing, pure hardware circuit logic to play music is much more complex, without powerful EDA tools and hardware description language, only w
3、ith the traditional digital logic technology, even the most simple circuit also play hard realization. This paper introduced by using CNC prescaler design hardware circuit (electronic music play), readers preliminary understanding VHDL language and hardware description MAX+ plusdevelopment environme
4、nt.Keywords: CNC prescaler, playing a circuit, VHDL一一、设计原理、设计原理1.音乐演奏电路原理音乐演奏电路原理应用电子音乐的机理,利用单片机定时器产生一定频率的电振荡推动扬声器演奏出乐曲。这种频率的振荡可以用不同音符的代码所控制,从而分出不同频率的振荡,它采用编程方式将各种音符的代码预先存的计算机的内存中,利用软件和一定硬件电路配合将存放的乐曲代码有节地进行演奏,产生电子音乐。乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。2.音符频率的获得音符频率的获得多本文中选取 750KHz 的基准频率。由于现有的高频时钟脉冲信号
5、的频率为 12MHz,故需先对其进行 16 分频,才能获得 750KHz 的基准频率。对基准频率分频后的输出信号是一些脉宽极窄的尖脉冲信号(占空比=1/分频系数) 。为提高输出信号的驱动能力,以使扬声器有足够的功率发音,需要再通过一个分频器将原来的分频器的输出脉冲均衡为对称方波(占空比=1/2) ,但这时的频率将是原来的 1/2。表 1 中各音符的分频系数就是从 750KHz的基准频率二分频得到的 375KHz 频率基础上计算得到的。由于最大分频系数是 1274,故分频器采用 11 位二进制计数器能满足要求,乐曲中的休止符,只要将分频系数设为 0,即初始值=211-1=2047,此时扬声器不会
6、发声。3.乐曲节奏的控制乐曲节奏的控制本文中的梁祝乐曲,最小的节拍为 1/4 拍,若将 1 拍的时间定为 1 秒,则只需要提供一个4Hz 的时钟频率即可产生 1/4 拍的时长(0.25 秒) ,对于其它占用时间较长的节拍(必为1/4 拍的整数倍)则只需要将该音符连续输出相应的次数即可。计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低。4.乐谱发生器乐谱发生器本文将乐谱中的音符数据存储在 LPM-ROM 中,如“梁祝”乐曲中的第一个音符为“3” ,此音在逻辑中停留了 4 个时钟节拍,即 1 秒的时间,相应地,音符“
7、3”就要在 LPM-ROM中连续的四个地址上都存储。当一个 4Hz 的时钟来时,相应地就从 LPM-ROM 中输出一个音符数据。二、总体框图该主系统由三个模块:tonetaba.vhd、notetabs.vhd、speakera.vhd 组成。首先定制 notetabs.vhd、模块中的音符数据 ROM”music” 。根据给出的乘法器逻辑原理图及其模块的 VHDL 描述在 MAX+plus上完成设计。完成编译,综合,仿真,管教分配,编程下载。1对于模块 NoteTabs 的功能描述:该模块的功能就是定义音符数据ROM“music”随着该模块中的计数器控制时钟频率速率作加法计数时,即地址值递增
8、时,音符数据 ROM 中的音符数据。将从 ROM 中通过 ToneIndex4.0端口输向 ToneTaba 模块,演奏梁祝 。在该模块中设置了一个 8 位二进制计数器(计数最大值为 197) ,作为音符数据 ROM 的地址发生器。这个计数器的计数频率为 4Hz,即每一计数值的停留时间为 0.25 秒,恰为当全音符设为 1 秒时,四四拍的 4 分音符持续时间。2对于模块 ToneTaba,是乐曲简谱码对应的分频预置数查找表电路,其中设置了乐曲的全部音符所对应的分频置数,每一音符的停留时间由音乐节拍和音调发生器模块 NoteTabs 的 CLK 的输入频率决定,这些值由对应于 ToneTaba
9、的 5 位输入值 Index4.0确定,最多有 22 种可选值。输向 ToneTaba 中 Index4.0的值ToneIndex4.0的输出值与持续的时间由模块 NoteTabs 决定。3模块 Speakera 是一个数控分频器,音符的频率可由此模块获得。由 CLK 端输入一具有较高频率的信号,通过 Speakera 分频后由 SPKOUT 输出。由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号。为了利用驱动扬声器,需加一个 D 触发器以均衡其占空比,频率将是原来的 1/2。Speakera 对 CLK 输入信号的分频比由预置数Tone 决定。SPKOUT 的输出频率将决定每一音符
10、的音调。三、选择器件EP1K100 芯片,模块 NoteTabs,模块 ToneTaba,模块 Speakera,四、功能模块1对于模块 NoteTabs定义音符数据 ROM“music” 。 Music 模块存放乐曲中的音符数据,它是利用LPM-ROM 来实现的,将乐谱中相应的音符放在一个连续的地址上。它首先是编写音符数据文件,将乐谱中相应的音符存放在一个连续的地址上。因为 1 拍的时间定为 1 秒,提供的是 8Hz 的时钟频率(即 1/4 拍的整数倍) ,则需将这个音符存储在相应次数的连续几个地址上。然后对音符数据进行 ROM 定制。随着 NoteTabs 中的计数器按时钟频率速度作加法计
11、数时,音符数据将从 ROM 中通过ToneIndex 端口输向 ToneTaba 模块。ROM 中的音符数据模块(music)程序为:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY NoteTabs ISPORT ( clk22 : IN STD_LOGIC;MODE : IN STD_LOGIC_VECTOR(1 DOWNTO 0);PLAY : IN STD_LOGIC_VECTOR(5 DOWNTO 0);ToneIndex : OUT INTEGER RANGE 0 T
12、O 15 ); END; ARCHITECTURE one OF NoteTabs ISSIGNAL Counter : INTEGER RANGE 0 TO 138;SIGNAL FP : INTEGER RANGE 0 TO 5529600;-22.1184M=8HZ SIGNAL clk : STD_LOGIC; BEGIN REG0:PROCESS(clk22)BEGINIF FP = 5529600 THEN FP ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneI
13、ndex ToneIndex ToneIndex ToneIndex NULL;END CASE; ELSE IF MODE = “01“ THENCASE Counter IS - 译码器WHEN 00 = ToneIndex ToneIndex ToneIndex ToneIndex NULL;END CASE;ELSE IF MODE = “11“ THEN CASE PLAY IS WHEN “000001“ = ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex ToneIndex NULL; END CASE; END IF; END
14、 IF; END IF;END PROCESS; END;2对于模块 ToneTabaToneTaba 是乐曲简谱码对应的分频预置数查表电路。以下为 ToneTaba 的程序:- 简谱码对应的分频预置数查表电路LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_unsigned.ALL; ENTITY ToneTaba ISPORT ( Index : IN INTEGER RANGE 0 TO 15;CODE : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);HIGH : OUT STD_LOGIC;
15、Tone : OUT INTEGER RANGE 0 TO 2500 ); END; ARCHITECTURE one OF ToneTaba IS BEGINSearch : PROCESS(Index)BEGINCASE Index IS - 译码电路,查表方式,控制音调的预置数WHEN 0 = Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone NULL;END CASE;END PROCESS; END;该模块的波形图为该仿真的结果符合 TONETABA 模块中的分频预置数及频率。3对于 Speakera 模
16、块音符的频率是由该模块获得音符频率的获得:多个不同频率的信号可通过对某个基准频率进行分频器获得。该程序选取 750KHz 的基准频率。由于现有的高频时钟脉冲信号的频率为 12MHz,需对其进行 16 分频,才能获得 750KHz 的基准频率。对基准频率分频后的输出信号是一些脉宽极窄的尖脉冲信号。为提高输出信号的驱动能力,以使扬声器有足够的功率发音,需要再通过一个分频器(D 触发器)将原来的分频器的输出脉冲均衡为对称方波,这时的频率将是原来的 1/2,即为 375KHz。各个音符的频率及其对应的分频系数(基准频率 375KHz)音符名频 率(Hz)分频系数计数初值休止符37500002047低音 1294.3491274773低音 2330.3961135912低音 3370.92101