基于CPLD梁祝演奏电路设计.docx
- 文档编号:7426159
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:15
- 大小:250.06KB
基于CPLD梁祝演奏电路设计.docx
《基于CPLD梁祝演奏电路设计.docx》由会员分享,可在线阅读,更多相关《基于CPLD梁祝演奏电路设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于CPLD梁祝演奏电路设计
设计报告
课程名称在系统编程技术
任课教师
设计题目乐曲硬件演奏电路设计
班级
姓名
学号
日期2011-06-01
乐曲硬件演奏电路设计
一、题目分析
1,分析要求,确定总体方框图;
本设计需要在EDA开发平台上利用VHDL语言设计数控分频器电路,利用数控分频的原理设计音乐硬件演奏电路,并定制LPM-ROM存储音乐数据,以“梁祝”乐曲为例,将音乐数据存储到LPM-ROM,就达到了以纯硬件的手段来实现乐曲的演奏效果。
只要修改LPM-ROM所存储的音乐数据,将其换成其他乐曲的音乐数据,再重新定制LPM-ROM,连接到程序中就可以实现其它乐曲的演奏。
系统方框图
2、确定必须完成的技术指标或功能要求
下载硬件成功后选择蜂鸣器即发出声音,演奏出乐曲。
而且只要修改LPM-ROM所存储的音乐数据,将其换成其他乐曲的音乐数据,再重新定制LPM-ROM,连接到程序中就可以实现其它乐曲的演奏。
二、选择方案
在数控分频器设中,输入不同的预置数即可发出不同频率的声音。
由此,可以以此为设计基础。
设计一功能模块,能够将乐曲中的音符逐一以对应的频率以预置数的形式置入数控分频计中,即可利用该数控分频计产生不同的声音,演奏出设定好的音乐。
ROM中的音乐数据文件刚可由编辑好的音符填入MIF文件中再定制LPM_ROM将音符数据加载入ROM中,并设计程序在运行时自动读取ROM中的文件并置入数控分频器中。
三、细化框图
根据系统设计要求,系统设计采用自顶向下的设计方法。
首先定制Songer.Vhd。
然后依次设计3底层模块:
分别是Speakera模块,ToneTaba模块,NoteTabs模块,此外,我们还需建立一个名为“music”的LPM_ROM模块与NoteTabs模块连接。
然后根据给出的乘法器逻辑原理图及其模块的VHDL描述在Cyclone上完成设计。
最后完成编译,综合,仿真,管脚分配,编程下载。
Songer主模块
NoteTabs模块
NoteBar模块
Speakera模块
细化方框图
四、编写应用程序并仿真
1、模块Speakera是一个数控分频器,音符的频率可由此模块获得。
由CLK端输入一具有较高频率(这里是12MHZ)的信号,通过Speakera分频后由SPKOUT输出。
由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号。
为了利用驱动扬声器,需加一个D触发器以均衡其占空比,频率将是原来的1/2。
Speakera对CLK输入信号的分频比由预置数Tone[10..0]决定。
SPKOUT的输出频率将决定每一音符的音调。
该模块仿真图为:
Speakera仿真图
2、模块ToneTaba,是为了Speakera提供决定发音符的分频预置数,是乐曲简谱码对应的分频预置数查找表电路,其中设置了“梁祝”的全部音符所对应的分频置数功13个。
每一音符的停留时间由音乐节拍和音调发生器模块NoteTabs的CLK的输入频率决定,在此为4MHZ。
这些值由对应于ToneTaba的4位输入值Index[3..0]确定,最多有16种可选值。
输向ToneTaba中Index[3..0]的值ToneIndex[3..0]的输出值与持续的时间由模块NoteTabs决定。
该模块仿真图为:
ToneTaba仿真图
3、模块NoteTabs是乐曲简谱码对应的分频预置数查表电路。
在该模块中设置了一个8位二进制计数器(计数最大值为138),作为音符数据ROM的地址发生器。
这个计数器的计数频率为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。
该模块的功能就是定义音符数据ROM“music”随着该模块中的计数器控制时钟频率速率作加法计数时,即地址值递增时,音符数据ROM中的音符数据。
将从ROM中通过ToneIndex[3..0]端口输向ToneTaba模块,演奏“梁祝”乐曲。
该模块的波形图为:
该模块仿真图为:
NoteTabs仿真图
1.对于模块Songer
《梁祝》乐曲简谱如下:
其仿真波形如下
定制LPM_ROM模块
定义音符数据ROM“music”。
Music模块存放乐曲中的音符数据,它是利用LPM-ROM来实现的,将乐谱中相应的音符放在一个连续的地址上。
它首先是编写音符数据文件,将乐谱中相应的音符存放在一个连续的地址上。
因为1拍的时间定为1秒,提供的是4Hz的时钟频率(即1/4拍的整数倍),则需将这个音符存储在相应次数的连续几个地址上。
然后对音符数据进行ROM定制。
五、全系统联调,画出整机电路,波形图等。
1、顶层设计Songer的电路原理图
顶层设计Songer的电路原理图
Songer模块就是顶层设计文件,所有的模块都由它调用。
将Songer模块设为当前文件,进行编译,编译成功:
顶层设计的仿真结果如下:
2、电路的顶层文件管脚分配图如下:
六、硬件测试与说明
选择电路模块1,先将引脚锁定,使clk12Mhz与clock9相连,用短路帽在clock9接12Mhz;clk8Mhz与clock2相连,接受4Mhz;spkout接speaker;code1接引脚39~42;high1接引脚77.下载完成后,选择蜂鸣器即发出声音,演奏出“梁祝”乐曲。
最后一数码段显示音乐谱数。
硬件下载仿真图形
七、结论
次课程设计终于顺利完成了,在设计中遇到的一些问题,最后在老师和同学的帮助下,终于解决了,从中学习到了很多。
通过两个多周的紧张工作,终于完成了简易电子琴的设计,这个课程设计使我受益匪浅,使我了解了硬件设计的整个流程,并且加深了我对计算机组成原理这门的课内容的理解,通过这个课程设计,不仅使我了解了组成原理的脊髓,而且使我对VHDL语言从陌生到初步理解,扩充的我的知识面。
通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。
本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。
它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。
回顾此次课程设计,从书籍,网络不断的寻找到设计电路,从拿到题目到完成整个设计,从理论到实践,可以学到很多很多的的东西。
对课本知识的进一步加深的同时学到了很多在书本上没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的。
把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。
在设计的过程难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。
在课程设计的整个过程中,得到了谭敏老师的大力支持和精心指点。
所以非常感谢谭敏老师对我的指导与大力的帮助。
如果没有她严谨细致、一丝不苟地批阅和指正,本文很难在这个短时间内完成。
从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!
8、课程总结
1EDA简介
EDA(ElectronicsDesignAutomation)技术是随着集成电路和计算机技术的飞速发展应运而生的一种高级、快速、有效的电子设计自动化工具。
它是为解决自动控制系统设计而提出的,从70年代经历了计算机辅助设计(CAD),计算机辅助工程(CAE),电子系统设计自动化(ESDA)3个阶段。
前两个阶段的EDA产品都只是个别或部分的解决了电子产品设计中的工程问题;第三代EDA工具根据工程设计中的瓶颈和矛盾对设计数据库实现了统一管理,并提出了并行设计环境概念,提供了独立于工艺和厂家的系统级的设计工具。
EDA关键技术之一就是采用硬件描述语言对硬件电路进行描述,且具有系统级仿真和综合能力。
目前应用比较广泛的硬件描述语言就是VerilogHDL。
2VerilogHDL简介
VerilogHDL和VHDL一样,是目前大规模集成电路设计中最具代表性、使用最广泛的硬件描述语言之一。
VerilogHDL具有如下特点:
能够在不同的抽象层次上,如系统级、行为级、RTL级、门级和开关级,对设计系统进行精确而简练的描述。
(2)能够在每个抽象层次的描述上对设计进行仿真验证,及时发现及时发现可能存在的错误,缩短设计周期,并保存整个设计过程的正确性。
(3)由于代码描述与工艺过程实现无关,便于设计标准化,提高设计的可重用性。
如国有C语言的编程基础经验,只需很短的时间就能学会和掌握VerilogHDL,因此,VerilogHDL可以作为学习HDL设计方法的入门和基础。
本设计了基于FPGA的音乐硬件演奏电路的设计,实现了一个乐曲播放器,
而且描述了其工作原理、设计思路及实现方法,并在上选用目标芯片仿真实现了音乐硬件演奏电路的功能。
实践证明:
采用FPGA设计实现音乐硬件演奏电路的可行性和可靠性,而且更改乐曲容易,可根据需要修改ROM中的音符数据文件,从而使电路实现任一曲子的播放。
这种基于FPGA的音乐硬件演奏电路的设计与实现,不仅通过VHDL层次化和模块化设计方法,同时采用数控分频和定制LPM-ROM的设计思想,更好的优化了乐曲演奏数字电路的设计,在此基础上不必变化顶层文件架构可随意变更乐曲,有效缩短了产品开发周期、减少了设计芯片的数量、降低了功耗、提高了设计的灵活性、可靠性和可扩展性。
这个课程设计也培养了我们的耐心和毅力,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,由于这个课程设计也使我积累了一些经验,相信这些经验在我以后的学习工作中会有很大的作用。
此课程设计也使我了解了VHDL设计的方便灵活性,这是我们跨入计算机硬件行业很好的一次锻炼。
九、参考文献目录
一、潘松黄继业.EDA技术实用教程(第三版).科学出版社/2006年出版
二、曹新燕周凤臣聂春燕《EDA技术实验与课程设计》清华大学出版社
三、李莉路而红《电子设计自动化》中国电力出版社
十、附录(源程序)
Tonetaba模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYToNeTabaIS
PORT(INDEX:
INSTD_LOGIC_VECTOR(4DowNTO0);
CODE:
OUTSTD_LOGIC_VECTOR(4DowNTO0);
HIGH:
OUTSTD_LOGIC;
TONE:
OUTSTD_LOGIC_VECTOR(10DowNTO0));
END;
ARCHITECTUREONEOFTONETABAIS
BEGIN
SEARCH:
PROCESS(INDEX)
BEGIN
CASEInDexIS
WHEN"00000"=>TONE<="11111111111";CODE<="00000";HIGH<='0';--2047
WHEN"00001"=>TONE<="01100000101";CODE<="00001";HIGH<='0';--773
WHEN"00010"=>TONE<="01110010000";CODE<="00010";HIGH<='0';--912
WHEN"00011"=>TONE<="10000001100";CODE<="00011";HIGH<='0';--1036
WHEN"00100"=>TONE<="10000110101";CODE<="00100";HIGH<='0';--1077
WHEN"00101"=>TONE<="10010101101";CODE<="00101";HIGH<='0';--1197
WHEN"00110"=>TONE<="10100001010";CODE<="00110";HIGH<='0';--1290
WHEN"00111"=>TONE<="10101011100";CODE<="00111";HIGH<='0';--1372
WHEN"01000"=>TONE<="10110000010";CODE<="01000";HIGH<='1';--1410
WHEN"01001"=>TONE<="10111001000";CODE<="01001";HIGH<='1';--1480
WHEN"01010"=>TONE<="11000000110";CODE<="01010";HIGH<='1';--1542
WHEN"01011"=>TONE<="11000101000";CODE<="01011";HIGH<='1';--1576
WHEN"01100"=>TONE<="11001010110";CODE<="01100";HIGH<='1';--1622
WHEN"01101"=>TONE<="11010000100";CODE<="01101";HIGH<='1';--1668
WHEN"01110"=>TONE<="11010110101";CODE<="01110";HIGH<='1';--1717
WHEN"01111"=>TONE<="11011000000";CODE<="10001";HIGH<='1';--1728
WHEN"10000"=>TONE<="11011101010";CODE<="10010";HIGH<='1';--1770
WHEN"10001"=>TONE<="11100000111";CODE<="10011";HIGH<='1';--1799
WHEN"10010"=>TONE<="11100010110";CODE<="10100";HIGH<='1';--1814
WHEN"10011"=>TONE<="11100101111";CODE<="10101";HIGH<='1';--1839
WHEN"10100"=>TONE<="11101000110";CODE<="10110";HIGH<='1';--1862
WHEN"10101"=>TONE<="11101011010";CODE<="10111";HIGH<='1';--1882
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
END;
Speakera模块
LIBRARYIEEE;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSpeakeraIS
PORT(clk:
INSTD_LOGIC;
Tone:
INSTD_LOGIC_VECTOR(10DOWNTO0);
SpkS:
OUTSTD_LOGIC);
END;
ARCHITECTUREoneOFSpeakeraIS
SIGNALPreCLK,FullSpkS:
STD_LOGIC;
BEGIN
DivideCLK:
PROCESS(clk)
VARIABLECount4:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PreCLK<='0';
IFCount4>11THENPreCLK<='1';Count4:
="0000";
ELSIFclk'EVENTANDclk='1'THENCount4:
=Count4+1;
ENDIF;
ENDPROCESS;
GenSpkS:
PROCESS(PreCLK,Tone)
VARIABLECount11:
STD_LOGIC_VECTOR(10DOWNTO0);
BEGIN
IFPreCLK'EVENTANDPreCLK='1'THEN
IFCount11=16#7FF#thenCount11:
=Tone;FullSpkS<='1';
ELSECount11:
=Count11+1;FullSpkS<='0';ENDIF;
ENDIF;
ENDPROCESS;
DelaySpkS:
PROCESS(FullSpkS)
VARIABLECount2:
STD_LOGIC;
BEGIN
IFFullSpkS'EVENTANDFullSpkS='1'THENCount2:
=NOTCount2;
IFCount2='1'THENSpkS<='1';
ELSESpkS<='0';ENDIF;
ENDIF;
ENDPROCESS;
END;
NoteTabs模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYNoteTABSIS
PORT(clk:
INSTD_LOGIC;
ToneIndex:
OUTSTD_LOGIC_VECTOR(4DOWNTO0));
END;
ARCHITECTUREoneOFNoteTabsIS
COMPONENTMUSIC
PORT(address:
INSTD_LOGIC_VECTOR(7DOWNTO0);
inclock:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(4DOWNTO0));
ENDCOMPONENT;
SIGNALCounter:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
CNT8:
PROCESS(clk)
BEGIN
IFCounter=197THENCounter<="00000000";
ELSIF(clk'EVENTANDclk='1')THENCounter<=Counter+1;ENDIF;
ENDPROCESS;
u1:
MUSICPORTMAP(address=>Counter,q=>ToneIndex,inclock=>clk);
END;
顶层模块songer
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYsongerIS
PORT(CLK12MHZ:
INSTD_LOGIC;--音频频率信号
CLK8HZ:
INSTD_LOGIC;--节拍频率信号
CODE1:
OUTSTD_LOGIC_VECTOR(4DOWNTO0);--简谱码输出显示
HIGH1:
OUTSTD_LOGIC;--高8度指示
SPKOUT:
OUTSTD_LOGIC);--声音输出
END;
ARCHITECTUREoneOFSongerIS
COMPONENTNoteTabs
PORT(clk:
INSTD_LOGIC;
ToneIndex:
OUTSTD_LOGIC_VECTOR(4DOWNTO0));
ENDCOMPONENT;
COMPONENTToneTaba
PORT(Index:
INSTD_LOGIC_VECTOR(4DOWNTO0);
CODE:
OUTSTD_LOGIC_VECTOR(4DOWNTO0);
HIGH:
OUTSTD_LOGIC;
Tone:
OUTSTD_LOGIC_VECTOR(10DOWNTO0));
ENDCOMPONENT;
COMPONENTSpeakera
PORT(clk:
INSTD_LOGIC;
Tone:
INSTD_LOGIC_VECTOR(10DOWNTO0);
SpkS:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALTone:
STD_LOGIC_VECTOR(10DOWNTO0);
SIGNALToneIndex:
STD_LOGIC_VECTOR(4DOWNTO0);
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);
END;
通过两星期的紧张工作,最后完成了我的设计任务——基于VHDL语言的智能密码锁设计。
通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。
本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。
它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。
希望学校以后多安排一些类似的实践环节,让同学们学以致用。
在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。
在应用VHDL的过程中让我真正领会到了其并行运行与其他软件(C语言)顺序执行的差别及其在电路设计上的优越性。
用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 CPLD 梁祝 演奏 电路设计