两只老虎EDA课程设计详细Word格式文档下载.docx
《两只老虎EDA课程设计详细Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《两只老虎EDA课程设计详细Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
频率/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各音阶频率对应的分频值
分频
系数
初始
值
7644
547
3822
4369
1911
6280
6810
)
1381
3405
4786
1270
6921
6067
2124
3034
5157
1517
6674
5727
2464
2864
5327
1432
6759
5102
3089
2551
5640
1256
6935
4545
3646
2273
5918
1137
7054
4050
4141
2025
6166
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
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:
ToneIndex:
OUTINTEGERRANGE0TO15);
ENDCOMPONENT;
COMPONENTToneTaba
COMPONENTSpeakera
INSTD_LOGIC;
Tone:
ININTEGERRANGE0TO16#7FF#;
SpkS:
OUTSTDLOGIC):
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)是乐曲简谱码对应的分频预置数查表电路。
USEToneTabaIS
PORT(Index:
ININTEGERRANGE0TO15;
CODE:
HIGH:
OUTSTD_LOGIC;
OUTINTEGERRANGE0TO16#7FF#);
ARCHITECTUREoneOFToneTabaIS
(
Search:
PROCESS(Index)
CASEIndexIS
WHEN0=>
Tone<
=2047;
CODE<
=O:
HIGH<
=101;
WHEN1=>
=773;
C0DE<
=l;
=,0,:
WHEN2=>
=912:
=2:
='
01;
WHEN3=>
=1036;
=3;
=,0,;
WHEN4=>
=l110;
=4;
=,0r:
WHEN5=>
=l197;
=5;
=r0r:
WHEN6=>
=1290;
=6;
WHEN7=>
=1372;
=,11:
WHEN8=>
=1410;
=2;
=r11:
WHEN9=>
=1480;
=3;
WHEN10=>
=1542;
=rI1;
WHENOTHERS二〉NULL;
ENDCASE;
ENDPROCESS;
(3)是设计电路的数控分频器:
USESpeakeraIS
ININTEGERRANGE0TO16#7FF#;
OUTSTD_LOGIC);
ARCHITECTUREoneOFSpeakeraIS
SIGNALPreCLK:
STD_LOGIC;
SIGNALFullSpkS:
STDLOGIC;
DivideCLK:
PROCESS(elk)
VARIABLECount4:
PreCLK<
0'
;
IFCount4>
11THENPreCLK<
=r11;
Count4:
=0;
ELSIFelk1EVENTANDelk二iTHENCount4:
=Count4+l;
ENDIF;
GENSpkS:
PROCESS(PreCLK,Tone)
VARIABLECount11:
INTEGERRANGE0TO16#7FF#;
IFPreCLK*EVENTANDPreCLK二T'
THEN
IFCount11=16#7FF#THEN
Countll:
=Tone;
FullSpkS<
=,r;
ELSECount11:
=Count11+1;
FullSpkSU'
O'
De1aySpkS:
PROCESS(FullSpkS)
VARIABLECount2:
IFFullSpkS1EVENTANDFullSPKS二T'
THEN
Count2:
=NOTCount2;
IFCount2二TTHENSpkSO'
l'
ELSESpkS<
=,0,;
(4)NOTETABS模块决定音乐的输出值与持续时间:
c
USENoteTabsIS
INSTD丄OGIC;
Toneindex:
ARCHITECTUREoneOFNoteTabsIS
SIGNALCounter:
INTEGERRANGE0TO35;
CNT8:
IFCounter=35THENCounter<
ELSIF(elk1EVENTANDelk二'
)THEN
Counter<
=Counter+l;
PROCESS(Counter)
CASECounterIS
WHEN00=>
ToneIndex<
=l;
WHEN01=>
WHEN02=>
WHEN03=>
WHEN04=>
WHEN05=>
WHEN06=>
WHEN07=>
WHEN08=>
WHEN09=>
=5;
WHEN11=>
WHEN12=>
WHEN13=>
WHEN14=>
WHEN15=>
WHEN16=>
WHEN17=>
=6;
WHEN18=>
WHEN19=>
=4
WHEN20=>
WHEN
21
=>
22
23
24
25
Tonelndex〈=4;
26
27
28
29
30
Tonelndex〈=l;
31
32
33
34
35
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>
inputpin=126
CodelO>
outputpin=33
outputpin=32
outputpin=31
outputpin二30
Highl>
outputpin=81
SPKOUT>
outputpin=99
引脚锁定后再通过编译器对文件重新编译以便将引脚信息编入下载文件中。
然后再将文件下载到实验箱当中,观察实验结果,试验箱开始循环播放“两只老虎”乐曲O
心得体会
通过两周的课程设计,我对EDA的设计有了进一步的认识,对MAXPLUSII的设计步骤也有了更进一步的了解。
这种基于FPGA的音乐硬件演奏电路的设计与实现,不仅通过VHDL层次化和模块化设计方法,同时釆用数控分频和定制LPM-ROM的设计思想,更好的优化了乐曲演奏数字电路的设计,在此基础上不必变化顶层文件架构可随意变更乐曲,有效缩短了产品开发周期、减少了设计芯片的数量、降低了功耗、提高了设计的灵活性、可靠性和可扩展性通过课程设计,感觉还是学到了不少的实践动手能力。
本次课程设计使我对EDA设计的能力和兴趣有很大提髙,受益良多,对自己以后的发展也会起到一定的作用。