两只老虎EDA课程设计详细Word文档下载推荐.docx
《两只老虎EDA课程设计详细Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《两只老虎EDA课程设计详细Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
初始值的计算公式如下:
由于所设计的数控分频计采用12MHZ作为时钟源,并通过一次12分频给出频率为1MHZ的脉冲溢出信号,再对该1MHZ的溢出信号进行12位2进制码的带预置数进行计数,并给出一个频率随预置数变化的脉冲信号。
由于该脉冲信号不具有驱动蜂鸣器的能力,故对此脉冲信号进行2分频以推动蜂鸣器发声,故最终输出信号的频率与预置数的关系如下:
其中
为音阶对应的频率。
表1简谱中的音名与频率的关系
音名
频率/Hz
低音1
261.63
中音1
532.25
高音1
1046.50
低音2
293.67
中音2
587.33
高音2
1174.66
低音3
329.63
中音3
659.25
高音3
1318.51
低音4
349.23
中音4
698.46
高音4
1396.92
低音5
391.99
中音5
783.99
高音5
1567.98
低音6
440
中音6
880
高音6
1760
低音7
493.88
中音7
987.76
高音7
1975.52
表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拍的时长(0.25秒),对于其它占用时间较长的节拍(必为1/4拍的整数倍)则只需要将该音符连续输出相应的次数即可。
计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低,由于最后的蜂鸣器前需加一个二分频的程序,因此计数器的时钟信号应为4Hz的2倍,即8Hz。
(4)乐谱的发生
本设计将乐谱中的音符数据存储在LPM-ROM中,若某音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,该音符就要在LPM-ROM中连续的四个地址上都存储。
当一个4Hz的时钟来时,相应地就从LPM-ROM中输出一个音符数据。
(5)选择模块
选择模块将用一个4位数的控制信号控制乐谱模块数据的选择性,用vhdl语言描述。
2设计原理及总体框图
(1)音符的发音频率设定及实现
音符的频率可由一个数控分频器SPEAKERA获得,由其CLK端输入一个有较高频率的信号,通过SPEAKERA分频后由SPKOUT输出。
由于直接从数控分频器中出来的输出信号是脉宽极窄的,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/2.SPEAKERA对clk输入信号的分频比由11位预置数Tone[10..0]决定。
SPKOUT的输出频率就有了对应关系。
例如,在TONETABA模块中若取Tone[10..0]=1036,将对应法音符为“3”音的信号频率。
(2)音符的持续时间
音符的持续时间需根据乐曲的速度及每个一怒的节拍数来确定,图中模块TONETABA的功能首先是为SPEAKERA提供决定所发音符的分频预置数,而此数在SPEAKER输入口停留的时间即为次音符的节拍值。
模块TONETABA是乐曲简谱码对应的分频预置数查表电路,其中设置“两只老虎”乐曲全部音符所对应的分频预置数,共11个,每一音符的停留时间由音乐节拍和音调发生器模块NOTETABS的clk输入频率决定,这11个值的输出由对应于TONETABA中Index[3..0]的值ToneIndex[3..0]的输出值与持续时间由模块NOTETABS决定。
在NOTETABS中设置了一个8位二进制计数器(计数最大值为138),这个计数器的技术频率选为4Hz,即每一个计数值停留时间为0.25S,恰为当全音符设为1s时,四四拍的4分音符持续时间。
例如,NOTETABS在以下的VHDL逻辑描述中,“两只老虎”乐曲的第一个音符为“5”,此音在逻辑中停留了1个时钟节拍,即0.25S时间,相应地,所对应的“”音符分频预置值为在SPEAKERA的输入端开始连续自然地演奏起来了。
设计的总体框图如下:
3程序设计
VHDL程序如下:
(1)SONGER.VHD是设计电路的顶层设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSongerIS
PORT(CLK12MHZ:
INSTD_LOGIC;
CLK8HZ:
CODE1:
OUTINTEGERRANGE0TO15;
HIGH1:
OUTSTD_LOGIC;
SPKOUT:
OUTSTD_LOGIC);
END;
ARCHITECTUREoneOFSongerIS
COMPONENTNoteTabs
PORT(clk:
ToneIndex:
OUTINTEGERRANGE0TO15);
ENDCOMPONENT;
COMPONENTToneTaba
PORT(Index:
ININTEGERRANGE0TO15;
CODE:
HIGH:
Tone:
OUTINTEGERRANGE0TO16#7FF#);
COMPONENTSpeakera
ININTEGERRANGE0TO16#7FF#;
SpkS:
SIGNALTone:
INTEGERRANGE0TO16#7FF#;
SIGNALToneIndex:
INTEGERRANGE0TO15;
BEGIN
u1:
NoteTabsPORTMAP(clk=>
clk8HZ,ToneIndex=>
ToneIndex);
u2:
ToneTabaPORTMAP(Index=>
ToneIndex,Tone=>
Tone,CODE=>
CODE1,HIGH=>
HIGH1);
u3:
SpeakeraPORTMAP(clk=>
CLK12MHZ,Tone=>
Tone,SpkS=>
SPKOUT);
(2)TONETABA.VHD是乐曲简谱码对应的分频预置数查表电路。
ENTITYToneTabaIS
ARCHITECTUREoneOFToneTabaIS
Search:
PROCESS(Index)
BEGIN
CASEIndexIS
WHEN0=>
Tone<
=2047;
CODE<
=0;
HIGH<
='
0'
;
WHEN1=>
=773;
=1;
WHEN2=>
=912;
=2;
WHEN3=>
=1036;
=3;
WHEN4=>
=1110;
=4;
WHEN5=>
=1197;
=5;
WHEN6=>
=1290;
=6;
WHEN7=>
=1372;
1'
WHEN8=>
=1410;
WHEN9=>
=1480;
WHEN10=>
=1542;
WHENOTHERS=>
NULL;
ENDCASE;
ENDPROCESS;
END;
(3)SPEAKERA.VHD是设计电路的数控分频器:
ENTITYSpeakeraIS
ARCHITECTUREoneOFSpeakeraIS
SIGNALPreCLK:
STD_LOGIC;
SIGNALFullSpkS:
DivideCLK:
PROCESS(clk)
VARIABLECount4:
PreCLK<
IFCount4>
11THENPreCLK<
Count4:
ELSIFclk'
EVENTANDclk='
THENCount4:
=Count4+1;
ENDIF;
GENSpkS:
PROCESS(PreCLK,Tone)
VARIABLECount11:
IFPreCLK'
EVENTANDPreCLK='
THEN
IFCount11=16#7FF#THEN
Count11:
=Tone;
FullSpkS<
ELSECount11:
=Count11+1;
DelaySpkS:
PROCESS(FullSpkS)
VARIABLECount2:
IFFullSpkS'
EVENTANDFullSPKS='
THEN
Count2:
=NOTCount2;
IFCount2='
THENSpkS<
ELSESpkS<
(4)NOTETABS模块决定音乐的输出值与持续时间:
LIBRARYIEEE;
ENTITYNoteTabsIS
ARCHITECTUREoneOFNoteTabsIS
SIGNALCounter:
INTEGERRANGE0TO35;
CNT8:
IFCounter=35THENCounter<
ELSIF(clk'
)THEN
Counter<
=Counter+1;
PROCESS(Counter)
CASECounterIS
WHEN00=>
ToneIndex<
WHEN01=>
WHEN02=>
WHEN03=>
WHEN04=>
WHEN05=>
WHEN06=>
WHEN07=>
WHEN08=>
WHEN09=>
WHEN11=>
WHEN12=>
WHEN13=>
WHEN14=>
WHEN15=>
WHEN16=>
WHEN17=>
WHEN18=>
WHEN19=>
WHEN20=>
WHEN21=>
WHEN22=>
WHEN23=>
WHEN24=>
WHEN25=>
WHEN26=>
WHEN27=>
WHEN28=>
WHEN29=>
WHEN30=>
WHEN31=>
WHEN32=>
WHEN33=>
WHEN34=>
WHEN35=>
ENDCASE;
ENDPROCESS;
4编译及仿真
在这次EDA课程设计过程中,用的是MAX+plusII,它是一种集成的开发环境,提供了一种与结构无关的设计环境,设计者无需精通器件的内部结构,而只需要用自己熟悉的设计输入方式去表达设计内容,MAX+plusII便会自动把这些设计转换成最终结构,所需的格式。
并且MAX+plusII使用方便,具有强大的编程,设计,仿真功能。
顶层设计仿真波形图如下:
5硬件调试与结果分析
本实验器件选用EP1K30TC144-1,利用GW48-CK实验开发系统,并使用其中结构图NO.1.引脚排列如下:
Clk8hz>
chip=zuhe;
inputpin=54
Clk12mhz>
inputpin=126
Code10>
outputpin=33
outputpin=32
outputpin=31
outputpin=30
High1>
outputpin=81
SPKOUT>
outputpin=99
引脚锁定后再通过编译器对文件重新编译以便将引脚信息编入下载文件中。
然后再将文件下载到实验箱当中,观察实验结果,试验箱开始循环播放“两只老虎”乐曲。
心得体会
通过两周的课程设计,我对EDA的设计有了进一步的认识,对MAXPLUSII的设计步骤也有了更进一步的了解。
这种基于FPGA的音乐硬件演奏电路的设计与实现,不仅通过VHDL层次化和模块化设计方法,同时采用数控分频和定制LPM-ROM的设计思想,更好的优化了乐曲演奏数字电路的设计,在此基础上不必变化顶层文件架构可随意变更乐曲,有效缩短了产品开发周期、减少了设计芯片的数量、降低了功耗、提高了设计的灵活性、可靠性和可扩展性通过课程设计,感觉还是学到了不少的实践动手能力。
本次课程设计使我对EDA设计的能力和兴趣有很大提高,受益良多,对自己以后的发展也会起到一定的作用。