乐曲硬件演奏电路设计.docx
《乐曲硬件演奏电路设计.docx》由会员分享,可在线阅读,更多相关《乐曲硬件演奏电路设计.docx(16页珍藏版)》请在冰豆网上搜索。
乐曲硬件演奏电路设计
理工大学应用科学学院
SOPC/EDA综合课程设计报告
设计题目:
硬件音乐演奏电路
设计者:
徐达健
学号:
班级:
测控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描述在QuartusII完成设计。
③完成编译,综合,仿真,管教分配,编程下载。
1.对于模块NoteTabs的功能描述:
该模块的功能就是定义音符数据随着该模块中的计数器控制时钟频率速率作加法计数时,即地址值递增时,音符数据中的音符数据。
将从过ToneIndex[4..0]端口输向ToneTaba模块,演奏《梁祝》。
在该模块中设置了一个8位二进制计数器(计数最大值为256)。
这个计数器的计数频率为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。
2.对于模块ToneTaba,是乐曲简谱码对应的分频预置数查找表电路,其中设置了乐曲的全部音符所对应的分频置数,每一音符的停留时间由音乐节拍和音调发生器模块NoteTabs的CLK的输入频率决定,这些值由对应于ToneTaba的5位输入值Index[4..0]确定,最多有32种可选值。
输向ToneTaba中Index[4..0]的值ToneIndex[4..0]的输出值与持续的时间由模块NoteTabs决定。
3.模块Speakera是一个数控分频器,音符的频率可由此模块获得。
由CLK端输入一个具有较高频率的信号,通过Speakera分频后由SPKOUT输出。
由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号。
为了利用驱动扬声器,需加一个D触发器以均衡其占空比,频率将是原来的1/2。
Speakera对CLK输入信号的分频比由预置数Tone决定。
SPKOUT的输出频率将决定每一音符的音调。
三、选择器件
模块NoteTabs,模块ToneTaba,模块Speakera,装有QuartusII软件的电脑。
四、功能模块
1.对于模块NoteTabs
图4.1模块NoteTabs
我们可以直接将音符数据输送到NoteTabs模块中,它首先是编写音符数据文件,将乐谱中相应的音符存放在一个连续的地址上。
因为1拍的时间定为1秒,提供的是4Hz的时钟频率(即1/4拍的整数倍),则需将这个音符存储在相应次数的连续几个地址上。
随着NoteTabs中的计数器按时钟频率速度作加法计数时,音符数据将从过ToneIndex端口输向ToneTaba模块。
NoteTabs中的音符数据模块程序为
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYNoteTabsIS
PORT(clk1:
INSTD_LOGIC;--4HZ;
ToneIndex:
OUTINTEGERRANGE0TO15);
END;
ARCHITECTUREoneOFNoteTabsIS
SIGNALCounTer:
INTEGERRANGE0TO138;
BEGIN
CNT8:
PROCESS(clk1,Counter)
BEGIN
IFCounter=138THEN
Counter<=0;
elsif(clk1'EVENTANDclk1='1')THEN
Counter<=Counter+1;
ENDIF;
ENDPROCESS;
Search:
PROCESS(Counter)
BEGIN
CASECounterIS
WHEN00=>ToneIndex<=3;WHEN01=>ToneIndex<=3;
WHEN02=>ToneIndex<=3;WHEN03=>ToneIndex<=3;
WHEN04=>ToneIndex<=5;WHEN05=>ToneIndex<=5;
WHEN06=>ToneIndex<=5;WHEN07=>ToneIndex<=6;
WHEN08=>ToneIndex<=8;WHEN09=>ToneIndex<=8;
WHEN10=>ToneIndex<=8;WHEN11=>ToneIndex<=9;
WHEN12=>ToneIndex<=6;WHEN13=>ToneIndex<=8;
WHEN14=>ToneIndex<=5;WHEN15=>ToneIndex<=5;
WHEN16=>ToneIndex<=12;WHEN17=>ToneIndex<=12;
WHEN18=>ToneIndex<=12;WHEN19=>ToneIndex<=15;
WHEN20=>ToneIndex<=13;WHEN21=>ToneIndex<=12;
WHEN22=>ToneIndex<=10;WHEN23=>ToneIndex<=12;
WHEN24=>ToneIndex<=9;WHEN25=>ToneIndex<=9;
WHEN26=>ToneIndex<=9;WHEN27=>ToneIndex<=9;
WHEN28=>ToneIndex<=9;WHEN29=>ToneIndex<=9;
WHEN30=>ToneIndex<=9;WHEN31=>ToneIndex<=0;
WHEN32=>ToneIndex<=9;WHEN33=>ToneIndex<=9;
WHEN34=>ToneIndex<=9;WHEN35=>ToneIndex<=10;
WHEN36=>ToneIndex<=7;WHEN37=>ToneIndex<=7;
WHEN38=>ToneIndex<=6;WHEN39=>ToneIndex<=6;
WHEN40=>ToneIndex<=5;WHEN41=>ToneIndex<=5;
WHEN42=>ToneIndex<=5;WHEN43=>ToneIndex<=6;
WHEN44=>ToneIndex<=8;WHEN45=>ToneIndex<=8;
WHEN46=>ToneIndex<=9;WHEN47=>ToneIndex<=9;
WHEN48=>ToneIndex<=3;WHEN49=>ToneIndex<=3;
WHEN50=>ToneIndex<=8;WHEN51=>ToneIndex<=8;
WHEN52=>ToneIndex<=6;WHEN53=>ToneIndex<=5;
WHEN54=>ToneIndex<=6;WHEN55=>ToneIndex<=8;
WHEN56=>ToneIndex<=5;WHEN57=>ToneIndex<=5;
WHEN58=>ToneIndex<=5;WHEN59=>ToneIndex<=5;
WHEN60=>ToneIndex<=5;WHEN61=>ToneIndex<=5;
WHEN62=>ToneIndex<=5;WHEN63=>ToneIndex<=5;
WHEN64=>ToneIndex<=10;WHEN65=>ToneIndex<=10;
WHEN66=>ToneIndex<=10;WHEN67=>ToneIndex<=12;
WHEN68=>ToneIndex<=7;WHEN69=>ToneIndex<=7;
WHEN70=>ToneIndex<=9;WHEN71=>ToneIndex<=9;
WHEN72=>ToneIndex<=6;WHEN73=>ToneIndex<=8;
WHEN74=>ToneIndex<=5;WHEN75=>ToneIndex<=5;
WHEN76=>ToneInd