当前位置:文档之家› 乐曲硬件演奏电路设计

乐曲硬件演奏电路设计

江西理工大学应用科学学院SOPC/EDA综合课程设计报告设计题目:硬件音乐演奏电路设计者:徐达健学号:08040108131班级:测控081指导老师:王忠锋完成时间:2011年01月07日设计报告综合测试总评格式(10)内容(40)图表(10)答辩(20)平时(20)目录一:设计原理 (3)二:总体框图 (5)三:选择器件 (7)四:功能模块: (8)1:NoteTabs模块(程序仿真图) (8)2:ToneTaba模块(程序仿真图) (11)3:Speakera模块(程序仿真图) (12)五:总体设计电路图 (16)1.顶层设计的电路原理图(Songer模块) (16)2.Songer模块的程序 (16)3.Songer顶层文件的仿真图形 (17)4、锁定引脚 (17)5、下载验证 (18)六:结束语 (19)七:心得体会 (20)八:参考文献 (21)一、设计原理1.音乐演奏电路原理这种频率的振荡可以用不同音符的代码所控制,从而分出不同频率的振荡,它采用编程方式将各种音符的代码预先存的计算机的内存中,利用软件和一定硬件电路配合将存放的乐曲代码有节地进行演奏,产生电子音乐。

乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。

图1.1 音乐演奏电路原理图2.音符频率的获得多本文中选取750KHz的基准频率。

由于现有的高频时钟脉冲信号的频率为12MHz,故需先对其进行16分频,才能获得750KHz的基准频率。

对基准频率分频后的输出信号是一些脉宽极窄的尖脉冲信号(占空比=1/分频系数)。

为提高输出信号的驱动能力,以使扬声器有足够的功率发音,需要再通过一个分频器将原来的分频器的输出脉冲均衡为对称方波(占空比=1/2),但这时的频率将是原来的1/2。

表1中各音符的分频系数就是从750KHz 的基准频率二分频得到的375KHz频率基础上计算得到的。

由于最大分频系数是1274,故分频器采用11位二进制计数器能满足要求,乐曲中的休止符,只要将分频系数设为0,即初始值=2048-1=2047,此时扬声器不会发声。

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

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

4.乐谱发生器本文将乐谱中的音符数据存储在NoteTABS中,如“梁祝”乐曲中的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,音符“3”就要在NoteTABS 中连续的四个地址上都存储。

当一个4Hz的时钟来时,相应地存入NoteTABS中一个音符数据。

二、总体框图图2.1总体框图该主系统由三个模块:tonetaba.vhd、notetabs.vhd、speakera.vhd组成。

①首先定制notetabs.vhd、模块中的音符数据。

②根据给出的乘法器逻辑原理图及其模块的VHDL描述在Quartus II完成设计。

③完成编译,综合,仿真,管教分配,编程下载。

1.对于模块NoteTabs的功能描述:该模块的功能就是定义音符数据随着该模块中的计数器控制时钟频率速率作加法计数时,即地址值递增时,音符数据中的音符数据。

将从中通过ToneIndex[4..0]端口输向ToneT aba模块,演奏《梁祝》。

在该模块中设置了一个8位二进制计数器(计数最大值为256)。

这个计数器的计数频率为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。

2.对于模块ToneTaba,是乐曲简谱码对应的分频预置数查找表电路,其中设置了乐曲的全部音符所对应的分频置数,每一音符的停留时间由音乐节拍和音调发生器模块NoteT abs的CLK的输入频率决定,这些值由对应于ToneTaba的5位输入值Index[4..0]确定,最多有32种可选值。

输向ToneT aba中Index[4..0]的值ToneIndex[4..0]的输出值与持续的时间由模块NoteTabs决定。

3.模块Speakera是一个数控分频器,音符的频率可由此模块获得。

由CLK端输入一个具有较高频率的信号,通过Speakera分频后由SPKOUT输出。

由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号。

为了利用驱动扬声器,需加一个D触发器以均衡其占空比,频率将是原来的1/2。

Speakera对CLK输入信号的分频比由预置数Tone决定。

SPKOUT的输出频率将决定每一音符的音调。

三、选择器件模块NoteTabs,模块ToneT aba,模块Speakera,装有Quartus II软件的电脑。

四、功能模块1.对于模块NoteTabs图4 .1模块NoteT abs我们可以直接将音符数据输送到NoteT abs模块中,它首先是编写音符数据文件,将乐谱中相应的音符存放在一个连续的地址上。

因为1拍的时间定为1秒,提供的是4Hz的时钟频率(即1/4拍的整数倍),则需将这个音符存储在相应次数的连续几个地址上。

随着NoteTabs中的计数器按时钟频率速度作加法计数时,音符数据将从中通过ToneIndex 端口输向ToneT aba模块。

NoteTabs中的音符数据模块程序为LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY NoteT abs ISPORT(clk1 : IN STD_LOGIC;--4HZ;ToneIndex : OUT INTEGER RANGE 0 TO 15);END;ARCHITECTURE one OF NoteTabs ISSIGNAL CounT er : INTEGER RANGE 0 TO 138;BEGINCNT8 : PROCESS(clk1, Counter)BEGINIF Counter = 138 THENCounter<=0;elsif (clk1'EVENT AND clk1 ='1') THENCounter<=Counter+1;END IF;END PROCESS;Search : PROCESS(Counter)BEGINCASE Counter ISWHEN 00=>ToneIndex<=3;WHEN 01=>ToneIndex<=3;WHEN 02=>ToneIndex<=3;WHEN 03=>ToneIndex<=3;WHEN 04=>ToneIndex<=5;WHEN 05=>ToneIndex<=5;WHEN 06=>ToneIndex<=5;WHEN 07=>ToneIndex<=6;WHEN 08=>ToneIndex<=8;WHEN 09=>ToneIndex<=8;WHEN 10=>ToneIndex<=8;WHEN 11=>ToneIndex<=9;WHEN 12=>ToneIndex<=6;WHEN 13=>ToneIndex<=8;WHEN 14=>ToneIndex<=5;WHEN 15=>ToneIndex<=5;WHEN 16=>ToneIndex<=12;WHEN 17=>ToneIndex<=12;WHEN 18=>ToneIndex<=12;WHEN 19=>ToneIndex<=15;WHEN 20=>ToneIndex<=13;WHEN 21=>ToneIndex<=12;WHEN 22=>ToneIndex<=10;WHEN 23=>ToneIndex<=12;WHEN 24=>ToneIndex<=9;WHEN 25=>ToneIndex<=9;WHEN 26=>ToneIndex<=9;WHEN 27=>ToneIndex<=9;WHEN 28=>ToneIndex<=9;WHEN 29=>ToneIndex<=9;WHEN 30=>ToneIndex<=9;WHEN 31=>ToneIndex<=0;WHEN 32=>ToneIndex<=9;WHEN 33=>ToneIndex<=9;WHEN 34=>ToneIndex<=9;WHEN 35=>ToneIndex<=10;WHEN 36=>ToneIndex<=7;WHEN 37=>ToneIndex<=7;WHEN 38=>ToneIndex<=6;WHEN 39=>ToneIndex<=6;WHEN 40=>ToneIndex<=5;WHEN 41=>ToneIndex<=5;WHEN 44=>ToneIndex<=8;WHEN 45=>ToneIndex<=8; WHEN 46=>ToneIndex<=9;WHEN 47=>ToneIndex<=9; WHEN 48=>ToneIndex<=3;WHEN 49=>ToneIndex<=3; WHEN 50=>ToneIndex<=8;WHEN 51=>ToneIndex<=8; WHEN 52=>ToneIndex<=6;WHEN 53=>ToneIndex<=5; WHEN 54=>ToneIndex<=6;WHEN 55=>ToneIndex<=8; WHEN 56=>ToneIndex<=5;WHEN 57=>ToneIndex<=5; WHEN 58=>ToneIndex<=5;WHEN 59=>ToneIndex<=5; WHEN 60=>ToneIndex<=5;WHEN 61=>ToneIndex<=5; WHEN 62=>ToneIndex<=5;WHEN 63=>ToneIndex<=5; WHEN 64=>ToneIndex<=10;WHEN 65=>ToneIndex<=10; WHEN 66=>ToneIndex<=10;WHEN 67=>ToneIndex<=12; WHEN 68=>ToneIndex<=7;WHEN 69=>ToneIndex<=7; WHEN 70=>ToneIndex<=9;WHEN 71=>ToneIndex<=9; WHEN 72=>ToneIndex<=6;WHEN 73=>ToneIndex<=8; WHEN 74=>ToneIndex<=5;WHEN 75=>ToneIndex<=5; WHEN 76=>ToneIndex<=5;WHEN 77=>ToneIndex<=5; WHEN 78=>ToneIndex<=5;WHEN 79=>ToneIndex<=5; WHEN 80=>ToneIndex<=3;WHEN 81=>ToneIndex<=5; WHEN 82=>ToneIndex<=3;WHEN 83=>ToneIndex<=3; WHEN 84=>ToneIndex<=5;WHEN 85=>ToneIndex<=6; WHEN 86=>ToneIndex<=7;WHEN 87=>ToneIndex<=9; WHEN 88=>ToneIndex<=6;WHEN 89=>ToneIndex<=6; WHEN 90=>ToneIndex<=6;WHEN 91=>ToneIndex<=6; WHEN 92=>ToneIndex<=6;WHEN 93=>ToneIndex<=6; WHEN 94=>ToneIndex<=5;WHEN 95=>ToneIndex<=6; WHEN 96=>ToneIndex<=8;WHEN 97=>ToneIndex<=8; WHEN 98=>ToneIndex<=8;WHEN 99=>ToneIndex<=9; WHEN 100=>ToneIndex<=12;WHEN 101=>ToneIndex<=12; WHEN 102=>ToneIndex<=12;WHEN 103=>ToneIndex<=10; WHEN 104=>ToneIndex<=9;WHEN 105=>ToneIndex<=9; WHEN 106=>ToneIndex<=10;WHEN 107=>ToneIndex<=9; WHEN 108=>ToneIndex<=8;WHEN 109=>ToneIndex<=8;WHEN 112=>ToneIndex<=3;WHEN 113=>ToneIndex<=3;WHEN 114=>ToneIndex<=3;WHEN 115=>ToneIndex<=3;WHEN 116=>ToneIndex<=8;WHEN 117=>ToneIndex<=8;WHEN 118=>ToneIndex<=8;WHEN 119=>ToneIndex<=8;WHEN 120=>ToneIndex<=6;WHEN 121=>ToneIndex<=8;WHEN 122=>ToneIndex<=6;WHEN 123=>ToneIndex<=5;WHEN 124=>ToneIndex<=3;WHEN 125=>ToneIndex<=5;WHEN 126=>ToneIndex<=6;WHEN 127=>ToneIndex<=8;WHEN 128=>ToneIndex<=5;WHEN 129=>ToneIndex<=5;WHEN 130=>ToneIndex<=5;WHEN 131=>ToneIndex<=5;WHEN 132=>ToneIndex<=5;WHEN 133=>ToneIndex<=5;WHEN 134=>ToneIndex<=5;WHEN 135=>ToneIndex<=5;WHEN 136=>ToneIndex<=0;WHEN 137=>ToneIndex<=0;WHEN 138=>ToneIndex<=0;WHEN OTHERS=>T oneIndex<=0;END CASE;END PROCESS;END;该模块的波形图为图4.2 模块NoteTabs的波形图2.对于模块ToneTaba图4.3 模块ToneTabaToneTaba是乐曲简谱码对应的分频预置数查表电路。

相关主题