乐曲硬件演奏电路设计.docx

上传人:b****3 文档编号:24787239 上传时间:2023-06-01 格式:DOCX 页数:19 大小:122.86KB
下载 相关 举报
乐曲硬件演奏电路设计.docx_第1页
第1页 / 共19页
乐曲硬件演奏电路设计.docx_第2页
第2页 / 共19页
乐曲硬件演奏电路设计.docx_第3页
第3页 / 共19页
乐曲硬件演奏电路设计.docx_第4页
第4页 / 共19页
乐曲硬件演奏电路设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

乐曲硬件演奏电路设计.docx

《乐曲硬件演奏电路设计.docx》由会员分享,可在线阅读,更多相关《乐曲硬件演奏电路设计.docx(19页珍藏版)》请在冰豆网上搜索。

乐曲硬件演奏电路设计.docx

乐曲硬件演奏电路设计

江西理工大学应用科学学院

 

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描述在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=>ToneIndex<=5;WHEN77=>ToneIndex<=5;

WHEN78=>ToneIndex<=5;WHEN79=>ToneIndex<=5;

WHEN80=>ToneIndex<=3;WHEN81=>ToneIndex<=5;

WHEN82=>ToneIndex<=3;WHEN83=>ToneIndex<=3;

WHEN84=>ToneIndex<=5;WHEN85=>ToneIndex<=6;

WHEN86=>ToneIndex<=7;WHEN87=>ToneIndex<=9;

WHEN88=>ToneIndex<=6;WHEN89=>ToneIndex<=6;

WHEN90=>ToneIndex<=6;WHEN91=>ToneIndex<=6;

WHEN92=>ToneIndex<=6;WHEN93=>ToneIndex<=6;

WHEN94=>ToneIndex<=5;WHEN95=>ToneIndex<=6;

WHEN96=>ToneIndex<=8;WHEN97=>ToneIndex<=8;

WHEN98=>ToneIndex<=8;WHEN99=>ToneIndex<=9;

WHEN100=>ToneIndex<=12;WHEN101=>ToneIndex<=12;

WHEN102=>ToneIndex<=12;WHEN103=>ToneIndex<=10;

WHEN104=>ToneIndex<=9;WHEN105=>ToneIndex<=9;

WHEN106=>ToneIndex<=10;WHEN107=>ToneIndex<=9;

WHEN108=>ToneIndex<=8;WHEN109=>ToneIndex<=8;

WHEN110=>ToneIndex<=6;WHEN111=>ToneIndex<=5;

WHEN112=>ToneIndex<=3;WHEN113=>ToneIndex<=3;

WHEN114=>ToneIndex<=3;WHEN115=>ToneIndex<=3;

WHEN116=>ToneIndex<=8;WHEN117=>ToneIndex<=8;

WHEN118=>ToneIndex<=8;WHEN119=>ToneIndex<=8;

WHEN120=>ToneIndex<=6;WHEN121=>ToneIndex<=8;

WHEN122=>ToneIndex<=6;WHEN123=>ToneIndex<=5;

WHEN124=>ToneIndex<=3;WHEN125=>ToneIndex<=5;

WHEN126=>ToneIndex<=6;WHEN127=>ToneIndex<=8;

WHEN128=>ToneIndex<=5;WHEN129=>ToneIndex<=5;

WHEN130=>ToneIndex<=5;WHEN131=>ToneIndex<=5;

WHEN132=>ToneIndex<=5;WHEN133=>ToneIndex<=5;

WHEN134=>ToneIndex<=5;WHEN135=>ToneIndex<=5;

WHEN136=>ToneIndex<=0;WHEN137=>ToneIndex<=0;

WHEN138=>ToneIndex<=0;WHENOTHERS=>ToneIndex<=0;

ENDCASE;

ENDPROCESS;

END;

该模块的波形图为

图4.2模块NoteTabs的波形图

2.对于模块ToneTaba

图4.3模块ToneTaba

ToneTaba是乐曲简谱码对应的分频预置数查表电路。

以下为ToneTaba的程序:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYToneTabaIS

PORT(Index:

ININTEGERRANGE0TO15;

CODE:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

HIGH:

OUTSTD_LOGIC;

Tone:

outintegerrange0to16#7FF#);

END;

ARCHITECTUREoneOFToneTabaIS

BEGIN

Search:

PROCESS(Index)

BEGIN

CASEIndexIS

WHEN0=>Tone<=2047;CODE<="0000";HIGH<='0';--16383;

WHEN1=>Tone<=773;CODE<="0001";HIGH<='0';--8738;

WHEN2=>Tone<=912;CODE<="0010";HIGH<='0';--9572;

WHEN3=>Tone<=1036;CODE<="0011";HIGH<='0';--10316;

WHEN5=>Tone<=1197;CODE<="0101";HIGH<='0';--11281;

WHEN6=>Tone<=1290;CODE<="0110";HIGH<='0';--11838;

WHEN7=>Tone<=1372;CODE<="0111";HIGH<='0';--12333;

WHEN8=>Tone<=1410;CODE<="0001";HIGH<='1';--12562;

WHEN9=>Tone<=1480;CODE<="0010";HIGH<='1';--12979;

WHEN10=>Tone<=1542;CODE<="0011";HIGH<='1';--13350;

WHEN12=>Tone<=1622;CODE<="0101";HIGH<='1';--13832;

WHEN13=>Tone<=1668;CODE<="0110";HIGH<='1';--14111;

WHEN15=>Tone<=1728;CODE<="0001";HIGH<='1';--14473;

WHENOTHERS=>Tone<=0;

ENDCASE;

ENDPROCESS;

END;

该模块的波形图为

图4.4模块ToneTaba的波形图

该仿真的结果符合TONETABA模块中的分频预置数及频率。

3.对于Speakera模块

图4.5Speakera模块

音符的频率是由该模块获得

音符频率的获得:

多个不同频率的信号可通过对某个基准频率进行分频器获得。

该程序选取750KHz的基准频率。

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

对基准频率分频后的输出信号是一些脉宽极窄的尖脉冲信号。

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

表1各个音符的频率及其对应的分频系数(基准频率375KHz)

音符名

频率(Hz)

分频系数

计数初值

休止符

375000

0

2047

低音1

294.349

1274

773

低音2

330.396

1135

912

低音3

370.92

1011

1036

低音4

386.598

970

1077

低音5

394.737

950

1197

低音6

495.376

757

1290

低音7

555.56

675

1372

中音1

588.697

637

1410

中音2

638.84

587

1480

中音3

742.574

505

1542

中音4

796.178

468

1579

中音5

882.353

425

1622

中音6

989.446

379

1668

中音7

1136.363

330

1717

高音1

1175.549

319

1728

高音2

1353.790

277

1770

高音3

1512.097

248

1799

高音4

1609.442

233

1814

高音5

1802.884

208

1839

高音6

2027.027

185

1862

高音7

2272.727

165

1882

Speakera的模块程序为:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYSpeakeraIS

PORT(clk2:

INSTD_LOGIC;

Tone:

ININTEGERRANGE0TO16#7FF#;

SpkS:

OUTSTD_LOGIC);

END;

ARCHITECTUREoneOFSpeakeraIS

SIGNALPreCLK:

STD_LOGIC;

SIGNALFullSpkS:

STD_LOGIC;

BEGIN

DivideCLK:

PROCESS(clk2)

VARIABLECount4:

INTEGERRANGE0TO15;

BEGIN

PreCLK<='0';

ifCount4>11then

PreCLK<='1';

Count4:

=0;

ELSIFclk2'EVENTANDclk2='1'THEN

Count4:

=Count4+1;

ENDIF;

ENDPROCESS;

GenSpkS:

PROCESS(PreCLK,Tone)

VARIABLECount11:

INTEGERRANGE0TO16#7FF#;

BEGIN

IFPreCLK'EVENTANDPreCLK='1'THEN

IFCount11=16#1FFF#THEN

Count11:

=Tone;

FullSpkS<='1';

ELSE

Count11:

=Count11+1;

FullSpkS<='0';

ENDIF;

ENDIF;

ENDPROCESS;

DelaySpkS:

PROCESS(FullSpkS)

VARIABLECount2:

STD_LOGIC;

BEGIN

IFFullSpkS'EVENTANDFullSpkS='1'THEN

Count2:

=NOTCount2;

IFCount2='1'THEN

SpkS<='1';

else

SpkS<='0';

ENDIF;

ENDIF;

ENDPROCESS;

END;

该模块的仿真图如下:

图4.6模块Speakera的仿真图

五:

总体设计

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1