两只老虎EDA课程设计详细.docx

上传人:b****5 文档编号:6067825 上传时间:2023-01-03 格式:DOCX 页数:13 大小:175.87KB
下载 相关 举报
两只老虎EDA课程设计详细.docx_第1页
第1页 / 共13页
两只老虎EDA课程设计详细.docx_第2页
第2页 / 共13页
两只老虎EDA课程设计详细.docx_第3页
第3页 / 共13页
两只老虎EDA课程设计详细.docx_第4页
第4页 / 共13页
两只老虎EDA课程设计详细.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

两只老虎EDA课程设计详细.docx

《两只老虎EDA课程设计详细.docx》由会员分享,可在线阅读,更多相关《两只老虎EDA课程设计详细.docx(13页珍藏版)》请在冰豆网上搜索。

两只老虎EDA课程设计详细.docx

两只老虎EDA课程设计详细

课程设计

课程设计名称:

专业班级

学生姓名:

学号:

指导教师:

课程设计时间:

1设计任务及要求

设计任务:

乐曲自动播放器。

自行选择一首自己喜爱的经典乐曲,用FPGA设计实现一个该曲目的自动演奏电路。

要求:

(1)根据设计题目要求编写相应程序代码

(2)对编写的VHDL程序代码进行编译和仿真

(3)利用实验箱完成硬件验证

(4)总结设计内容,完成课程设计说明书

与利用微处理器,以纯硬件完成乐曲演奏电路的逻辑要复杂得多。

本实验设计项目作为“两只老虎”乐曲演奏电路的实现,组成每个乐曲的每个音符的发音频率值及持续的时间是乐曲能连续演奏所需要的两个基本要素。

(1)音乐硬件演奏电路基本原理

硬件电路的发声原理,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。

乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。

乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。

而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。

(2)音符频率的获得

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

由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。

若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。

若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。

实际上应

该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。

本设计中选取1MHz的基准频率。

数控分频器采用12位二进制计数器,乐曲中的休止符,只要将分频系数设为0,即初始值=4095,此时扬声器不会发声。

根据分频系数,可计算数控分频器得到的初始值。

初始值的计算公式如下:

由于所设计的数控分频计采用12MHZ作为时钟源,并通过一次12分频给出频率为1MHZ的脉冲溢出信号,再对该1MHZ的溢出信号进行12位2进制码的带预置数进行计数,并给出一个频率随预置数变化的脉冲信号。

由于该脉冲信号不具有驱动蜂鸣器的能力,故对此脉冲信号进行2分频以推动蜂鸣器发声,故最终输出信号的频率与预置数的关系如下:

其中九为音阶对应的频率。

表1简谱中的音名与频率的关系

音名

频率/Hz

音名

频率/Hz

音名

频率/Hz

]

低音1

中音1

高音1

低音2

中音2

高音2

低音3

中音3

高音3

低音4

中音4

高音4

低音5

中音5

高音5

低音6

440

中音6

880

高音6

1760

低音7

中音7

高音7

 

表2各音阶频率对应的分频值

音名

分频

系数

初始

音名

分频

系数

初始

音名

分频

系数

初始

低音1

7644

547

中音1

3822

4369

高音1

1911

6280

低音2

6810

1381

中音2

3405

4786

高音2

1270

6921

低音3

6067

2124

中音3

3034

5157

高音3

1517

6674

低音4

5727

2464

中音4

2864

5327

高音4

1432

6759

低音5

5102

3089

中音5

2551

5640

高音5

1256

6935

低音6

4545

3646

中音6

2273

5918

高音6

1137

7054

低音7

4050

4141

中音7

2025

6166

高音7

1013

7178

(3)乐曲节奏的控制

一般乐曲最小的节拍为1/4拍,若将1拍的时间定为1秒,则只需要输出

4Hz的1/4拍的时长(秒),对于其它占用时间较长的节拍(必为1/4拍的整数倍)则只需要将该音符连续输出相应的次数即可。

计数时钟信号作为输出音符快幔的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低,由于最后的蜂鸣器前需加一个二分频的程序,因此计数器的时钟信号应为4Hz的2倍,即

8Hzo

(4)乐谱的发生

本设计将乐谱中的音符数据存储在LPM-ROM中,若某音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,该音符就要在LPM-ROM中连续的四个地址上都存储。

当一个4Hz的时钟来时,相应地就从LPM-ROM中输出一个音符数据。

(5)选择模块

选择模块将用一个4位数的控制信号控制乐谱模块数据的选择性,用vhdl语言描述。

两只老虎

1231

1231

345

346

两只老虎

两只老虎

龜待快

胞铸快

151弓

1515

1515

1616

法E艮歌

2设计原理及总体框图

SPEAKERA

J—

CL.K

■SPKS

TONECIO.

・O]

(1)音符的发音频率设定及实现

音符的频率可由一个数控分频器SPEAKERA获得,由其CLK端输入一个有较高频率的信号,通过SPEAKERA分频后由SPROUT输出。

由于直接从数控分频器中出来的输出信号是脉宽极窄的,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/对elk输入信号的分频比由11位预置数Tone[10..0]决定。

SPROUT的辙出频率就有了对应关系。

例如,在TONETABA模块中若取Tone[10..0]=1036,将对应法音符为"3”音的信号频率。

TONETapa:

CODE[3..©□

IMDEX[3.・OJHIGH:

TOMEI:

JL0・•0丁

(2)音符的持续时间XO1

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

模块TONETABA是乐曲简谱码对应的分频预置数查表电路,其中设置“两只老虎”乐曲全部音符所对应的分频预置数,共M个,每一音符的停留时间由音乐节拍和音调发生器模块NOTETABS的elk输入频率决定,这11个值的输出由对应于TONETABA中Index[3..0]的值ToneIndex[3..0]的输出值与持续时间由模块NOTETABS决定。

在NOTETABS中设置了一个8位二进制计数器(计数最大值为138),这个计数器的技术频率选为4Hz,即每一个计数值停留时间为,恰为当全音符设为Is时,四四拍的4分音符持续时间。

例如,NOTETABS在以下的VHDL逻辑描述中,“两只老虎”乐曲的第一个音符为“5”,此音在逻辑中停留了1个时钟节拍,即时间,相应地,所对应的“”音符分频预置值为在SPEAKERA的输入端开始连续自然地演奏起来了。

设计的总体框图如下:

3程序设计

VHDL程序如下:

(1)是设计电路的顶层设计

LIBRARYIEEE;

USESongerIS

•••

PORT(CLK12MHZ:

INSTDLOGIC;

CLK8HZ:

INSTD_LOGIC;

CODEI:

OUTINTEGERRANGE0TO15;

HIGH1:

OUTSTD_LOGIC;

SPKOUT:

()UTSTDLOGIC):

END;

ARCHITECTUREoneOFSongerIS

COMPONENTNoteTabs

•••

PORT(elk:

INSTD_LOGIC;

ToneIndex:

OUTINTEGERRANGE0TO15);

ENDCOMPONENT;

COMPONENTToneTaba

ENDCOMPONENT;

COMPONENTSpeakera

PORT(elk:

INSTD_LOGIC;

Tone:

ININTEGERRANGE0TO16#7FF#;

SpkS:

OUTSTDLOGIC):

ENDCOMPONENT;

SIGNALTone:

INTEGERRANGE0TO16#7FF#;

SIGNALToneindex:

INTEGERRANGE0TO15;

BEGIN

ul:

NoteTabsPORTMAP(elk二〉clk8HZ,Toneindex二〉Toneindex);

PORT

u2:

ToneTaba

MAP(Index=>ToneIndex,Tone=>Tone,CODE=>C()DE1,HIGH=>HIGH1);

u3:

SpeakeraPORTMAP(c1k=>CLK12MHZ,Tone=>Tone,SpkS=>SPKOUT);END;

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

LIBRARYIEEE;

USEToneTabaIS

PORT(Index:

ININTEGERRANGE0TO15;

CODE:

OUTINTEGERRANGE0TO15;

HIGH:

OUTSTD_LOGIC;

Tone:

OUTINTEGERRANGE0TO16#7FF#);

END;

ARCHITECTUREoneOFToneTabaIS

BEGIN

Search:

PROCESS(Index)

BEGIN

CASEIndexIS

WHEN0=>Tone<=2047;CODE<=O:

HIGH<=101;

WHEN1=>Tone<=773;C0DE<=l;HIGH<=,0,:

WHEN2=>Tone<=912:

CODE<=2:

HIGH<='01;

WHEN3=>Tone<=1036;C0DE<=3;HIGH<=,0,;

WHEN4=>Tone<=l110;CODE<=4;HIGH<=,0r:

WHEN5=>Tone<=l197;C0DE<=5;HIGH<=r0r:

WHEN6=>Tone<=1290;C0DE<=6;HIGH<=,0,:

WHEN7=>Tone<=1372;CODE<=l;HIGH<=,11:

WHEN8=>Tone<=1410;C0DE<=2;HIGH<=r11:

WHEN9=>Tone<=1480;C0DE<=3;HIGH<=,11:

WHEN10=>Tone<=1542;CODE<=4;HIGH<=rI1;

WHENOTHERS二〉NULL;

ENDCASE;

ENDPROCESS;

END;

(3)是设计电路的数控分频器:

LIBRARYIEEE;

USESpeakeraIS

PORT(elk:

INSTD_LOGIC;

Tone:

ININTEGERRANGE0TO16#7FF#;

SpkS:

OUTSTD_LOGIC);

END;

ARCHITECTUREoneOFSpeakeraIS

SIGNALPreCLK:

STD_LOGIC;

SIGNALFullSpkS:

STDLOGIC;

BEGIN

DivideCLK:

PROCESS(elk)

VARIABLECount4:

INTEGERRANGE0TO15;

BEGIN

PreCLK<='0';

IFCount4>11THENPreCLK<=r11;Count4:

=0;

ELSIFelk1EVENTANDelk二iTHENCount4:

=Count4+l;

ENDIF;

ENDPROCESS;

GENSpkS:

PROCESS(PreCLK,Tone)

VARIABLECount11:

INTEGERRANGE0TO16#7FF#;

BEGIN

IFPreCLK*EVENTANDPreCLK二T'THEN

IFCount11=16#7FF#THEN

Countll:

=Tone;

FullSpkS<=,r;

ELSECount11:

=Count11+1;

FullSpkSU'O';

ENDIF;

ENDIF;

ENDPROCESS;

De1aySpkS:

PROCESS(FullSpkS)

VARIABLECount2:

STDLOGIC;

BEGIN

IFFullSpkS1EVENTANDFullSPKS二T'THEN

Count2:

=NOTCount2;

IFCount2二TTHENSpkSO'l';

ELSESpkS<=,0,;

ENDIF;

ENDIF;

ENDPROCESS;

END;

(4)NOTETABS模块决定音乐的输出值与持续时间:

LIBRARYIEEE;

c

USENoteTabsIS

PORT(elk:

INSTD丄OGIC;

Toneindex:

OUTINTEGERRANGE0TO15);

END;

ARCHITECTUREoneOFNoteTabsIS

SIGNALCounter:

INTEGERRANGE0TO35;

BEGIN

CNT8:

PROCESS(elk)

BEGIN

IFCounter=35THENCounter<=0;

ELSIF(elk1EVENTANDelk二'l')THEN

Counter<=Counter+l;

ENDIF;

ENDPROCESS;

Search:

PROCESS(Counter)

BEGIN

CASECounterIS

WHEN00=>ToneIndex<=l;

WHEN01=>ToneIndex<=2;

WHEN02=>ToneIndex<=3;

WHEN03=>ToneIndex<=l;

WHEN04=>ToneIndex<=l;

WHEN05=>ToneIndex<=2;

WHEN06=>ToneIndex<=3;

WHEN07=>ToneIndex<=l;

WHEN08=>ToneIndex<=3;

WHEN09=>ToneIndex<=4;

WHEN10=>ToneIndex<=5;

WHEN11=>ToneIndex<=5;

WHEN12=>ToneIndex<=3;

WHEN13=>ToneIndex<=4;

WHEN14=>ToneIndex<=5;

WHEN15=>ToneIndex<=5;

WHEN16=>ToneIndex<=5;

WHEN17=>ToneIndex<=6;

WHEN18=>ToneIndex<=5;

WHEN19=>ToneIndex<=4

WHEN20=>ToneIndex<=3;

WHEN

21

=>ToneIndex<=l;

WHEN

22

=>ToneIndex<=5;

WHEN

23

=>ToneIndex<=6;

WHEN

24

=>ToneIndex<=5;

WHEN

25

=>Tonelndex〈=4;

WHEN

26

=>ToneIndex<=3;

WHEN

27

=>ToneIndex<=l;

WHEN

28

=>ToneIndex<=l;

WHEN

29

=>ToneIndex<=5;

WHEN

30

=>Tonelndex〈=l;

WHEN

31

=>ToneIndex<=l;

WHEN

32

=>ToneIndex<=l;

WHEN

33

=>ToneIndex<=5;

WHEN

34

=>ToneIndex<=l;

WHEN

35

=>ToneIndex<=l;

WHENOTHERS二〉NULL;

ENDCASE;

ENDPROCESS;

END;

4编译及仿真

在这次EDA课程设计过程中,用的是MAX+plusII,它是一种集成的开发环境,提供了一种与结构无关的设计环境,设计者无需精通器件的内部结构,而只需要用自己熟悉的设计输入方式去表达设计内容,MAX+plusII便会自动把这些设计转换成最终结构,所需的格式。

并且MAX+plusII使用方便,具有强大的编程,设计,仿真功能。

顶层设计仿真波形图如下:

-mwpuiirt?

tunutwwuuramijhuiiix%upuur*miuMnap

Rtf.|149笳|亟Tire阴收Irttfrt伽

5硬件调试与结果分析

本实验器件选用EP1K30TC144-1,利用GW48-CK实验开发系统,并使用其中结构图•引脚排列如下:

Clk8hz>chip=zuhe;inputpin=54

Clkl2mhz>chip=zuhe;inputpin=126

CodelO>chip=zuhe;outputpin=33

CodelO>chip=zuhe;outputpin=32

CodelO>chip=zuhe;outputpin=31

CodelO>chip=zuhe;outputpin二30

Highl>chip=zuhe;outputpin=81

SPKOUT>chip=zuhe;outputpin=99

引脚锁定后再通过编译器对文件重新编译以便将引脚信息编入下载文件中。

然后再将文件下载到实验箱当中,观察实验结果,试验箱开始循环播放“两只老虎”乐曲O

心得体会

通过两周的课程设计,我对EDA的设计有了进一步的认识,对MAXPLUSII的设计步骤也有了更进一步的了解。

这种基于FPGA的音乐硬件演奏电路的设计与实现,不仅通过VHDL层次化和模块化设计方法,同时釆用数控分频和定制LPM-ROM的设计思想,更好的优化了乐曲演奏数字电路的设计,在此基础上不必变化顶层文件架构可随意变更乐曲,有效缩短了产品开发周期、减少了设计芯片的数量、降低了功耗、提高了设计的灵活性、可靠性和可扩展性通过课程设计,感觉还是学到了不少的实践动手能力。

本次课程设计使我对EDA设计的能力和兴趣有很大提髙,受益良多,对自己以后的发展也会起到一定的作用。

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

当前位置:首页 > 求职职场 > 简历

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

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