VHDL简易电子琴设计Word文档格式.docx
- 文档编号:19784004
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:11
- 大小:21.07KB
VHDL简易电子琴设计Word文档格式.docx
《VHDL简易电子琴设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《VHDL简易电子琴设计Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。
目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。
硬件描述语言—VHDL
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。
1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
应用VHDL进行工程设计的优点是多方面的。
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(4)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
VHDL的设计流程:
(1)设计输入根据电路设计所提出的要求,将程序输入到VHDL编辑器中去编辑。
(2)功能级模拟用VHDL,模拟器对编辑后的程序进行模拟,如果达不到设计要求,则可以重新修改程序,直到通过功能模拟。
(3)逻辑综合与优化将通过功能模拟的程序放到VHDL编译器中,进行逻辑综合与优化。
(4)门级模拟对电路用VHDL。
仿真器仿真。
可对门级电路的延时、定时状态、驱动能力等进行仿真。
如不符合要求,可重复步骤(3),再门级模拟,直到符合要求止。
(5)版图生成用相应的软件处理后,就可以拿去制版。
3设计过程
设计规划
根据系统设计要求,系统设计采用自顶向下的设计方法,系统的整体组装设计原理图如图3-1所示,它由乐曲自动演奏模块、音调发生模块和数控分频模块三部分组成。
图3-1系统的整体组装设计原理图
各模块的原理及其程序
(1)乐曲自动演奏模块
乐曲自动演奏模块()的作用是产生8位发声控制输入信号/当进行自动演奏时,由存储在此模块中的8位二进制数作为发声控制输入,从而自动演奏乐曲。
VHDL源程序()
LIBRARYIEEE;
USEAUTOIS
PORT(CLK:
INSTD_LOGIC;
AUTO:
CLK2:
BUFFERSTD_LOGIC;
INDEX2:
INSTD_LOGIC_VECTOR(7DOWNTO0);
INDEX0:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDAUTO;
ARCHITECTUREBEHAVIORALOFAUTOIS
SIGNALCOUNT0:
INTEGERRANGE0TO31;
BEGIN
PULSE0:
PROCESS(CLK,AUTO)
VARIABLECOUNT:
INTEGERRANGE0TO8;
BEGIN
IFAUTO='
1'
THEN
COUNT:
=0;
CLK2<
='
0'
;
ELSIF(CLK'
EVENTANDCLK='
)THEN
=COUNT+1;
IFCOUNT=4THEN
CLK2<
ELSIFCOUNT=8THEN
COUNT:
=0;
ENDIF;
ENDPROCESS;
MUSIC:
PROCESS(CLK2)
IF(CLK2'
EVENTANDCLK2='
IF(COUNT0=31)THEN
COUNT0<
ELSE
=COUNT0+1;
COM1:
PROCESS(COUNT0,AUTO,INDEX2)
CASECOUNT0IS
WHEN0=>
INDEX0<
="
00000100"
--3
WHEN1=>
WHEN2=>
WHEN3=>
WHEN4=>
00010000"
--5
WHEN5=>
WHEN6=>
WHEN7=>
00100000"
--6
WHEN11=>
WHEN12=>
00000010"
--2
WHEN13=>
WHEN14=>
00000001"
--1
WHEN15=>
WHEN16=>
WHEN17=>
WHEN18=>
00001000"
--4
WHEN19=>
WHEN20=>
WHEN21=>
WHEN22=>
WHEN23=>
WHEN24=>
WHEN25=>
WHEN26=>
WHEN27=>
WHEN28=>
WHEN29=>
WHEN30=>
WHEN31=>
WHENOTHERS=>
NULL;
ENDCASE;
ELSEINDEX0<
=INDEX2;
ENDIF;
ENDBEHAVIORAL;
(2)音调发生模块
音调发生模块的作用是产生音阶的分频预置值。
当8位发声控制输入信号中的某一位为高电平时,则对应某一音节的数值将输出,该数值即为该音阶的分频预置值,分频预置值控制数控分频模块进行分频,由此可得到每个音阶对应的频率。
VHDL源程序
USETONEIS
PORT(INDEX:
CODE:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
HIGH:
OUTSTD_LOGIC;
TONE0:
OUTINTEGERRANGE0TO2047);
ENDTONE;
ARCHITECTUREARTOFTONEIS
BEGIN
SEARCH:
PROCESS(INDEX)
CASEINDEXIS
WHEN"
=>
TONE0<
=773;
CODE<
1001111"
HIGH<
WHEN"
=912;
0010010"
=1036;
0000110"
=1116;
1001100"
=1197;
0100100"
=1290;
0100000"
01000000"
=1372;
0001111"
WHENOTHERS=>
TONE0<
=2047;
0000001"
ENDCASE;
ENDPROCESS;
ENDART;
(3)数控分频模块
数控分频模块是对时基脉冲进行分频,得到与1、2、3、4、5、6、7七个音符相对应的频率。
USEFENPINIS
PORT(CLK1:
TONE1:
ININTEGERRANGE0TO2047;
SPKS:
OUTSTD_LOGIC);
ENDENTITYFENPIN;
ARCHITECTUREARTOFFENPINIS
SIGNALPRECLK:
STD_LOGIC;
SIGNALFULLSPKS:
PROCESS(CLK1)
VARIABLECOUNT:
IF(CLK1'
EVENTANDCLK1='
COUNT:
IFCOUNT=2THEN
PRECLK<
ELSIFCOUNT=4THEN
PROCESS(PRECLK,TONE1)
VARIABLECOUNT11:
INTEGERRANGE0TO2047;
IF(PRECLK'
EVENTANDPRECLK='
IFCOUNT11<
TONE1THEN
COUNT11:
=COUNT11+1;
FULLSPKS<
PROCESS(FULLSPKS)
VARIABLECOUNT2:
STD_LOGIC:
IF(FULLSPKS'
EVENTANDFULLSPKS='
)THEN
COUNT2:
=NOTCOUNT2;
IFCOUNT2='
THEN
SPKS<
ELSE
(4)顶层设计
USEDIANZIQINIS
PORT(CLK32MHZ:
HANDTOAUTO:
INSTD_LOGIC;
CODE1:
--音符显示信号
INDEX1:
--键盘输入信号
HIGH1:
--高低音节信号
SPKOUT:
--音频信号
END;
ARCHITECTUREARTOFDIANZIQINIS
COMPONENTAUTO
PORT(CLK:
AUTO:
INDEX2:
INDEX0:
ENDCOMPONENT;
COMPONENTTONE
PORT(INDEX:
COMPONENTFENPIN
PORT(CLK1:
ININTEGERRANGE0TO2047;
SIGNALTONE2:
SIGNALINDX:
STD_LOGIC_VECTOR(7DOWNTO0);
U0:
AUTOPORTMAP(CLK=>
CLK32MHZ,INDEX2=>
INDEX1,INDEX0=>
INDX,AUTO=>
HANDTOAUTO);
U1:
TONEPORTMAP(INDEX=>
INDX,TONE0=>
TONE2,CODE=>
CODE1,HIGH=>
HIGH1);
U2:
FENPINPORTMAP(CLK1=>
CLK32MHZ,TONE1=>
TONE2,SPKS=>
SPKOUT);
4波形仿真
(1)乐曲自动演奏模块的仿真(如图4-1所示)
图4-1乐曲自动演奏模块的仿真图
(2)音调发生模块的仿真(如图4-2)
图4-2音调发生模块的仿真图
(3)数控分频模块的仿真(如图4-3)
图4-3数控分频模块仿真图
(4)简易电子琴整个系统的仿真(如图4-4)
图4-4简易电子琴整个系统的仿真图
5结束语
经过努力,简易电子琴的设计基本上完成了。
在整个设计过程中,包括前期中期和后期,我都有着许多不同的体会:
1)这个设计的基本是接触一门新的语言并加以应用,对于我来说,没有想到的是入手的速度比我的预料快,在以前编程的基础上,从接触到开始动手编程的时间得到了很大的缩短。
知识的接收速度在很大的程度上决定了动手的时间。
2)VHDL的编程与C语言的编程有着本质的不同,然而以往形成的旧编程习惯在VHDL编程中依然起着很大的作用。
一通百通,不是没有道理的。
对于学习新的知识并予以应用的信心,显得更足了。
3)VHDL的设计关键是电路逻辑设计,而一个程序的关键是总体设计。
对于硬件设计接触不多的我们清楚这一点也许不无好处。
4)通过这个程序设计让我学会一种新的语言,对数字系统结构也有了更进一步的了解和认识,对我以后的学习有很大的帮助。
希望其他人在看再做类似设计时有所借鉴。
通过几天的课程设计,我对数据库软件EDA技术、VHDL、等系列知识都有了一定的了解。
使用EDA技术开发页面的能力也有了很大提高。
在整个设计过程中,有很多人对任务的完成给予了重要的支持和帮助。
感谢老师给了我本次设计的机会并提供指导;
感谢许多同学在我此课程设计遇到问题时给我的帮助使我能够顺利地进行设计的工作;
论坛中有很多认识不认识的朋友也都为我的设计提出了很宝贵的建议,同样在这里感谢他们。
参考文献
《VHDL与数字电路设计》.卢毅,赖杰.科学出版社
《VHDL语言100例详解——北京理工大学ASIC研究所》.北京理工大学ASIC研究所.清华大学出版社
《VHDL程序设计》(第二版).曾繁泰等.清华大学出版社
《VHDL入门与应用》陈雪松,滕立中.人民邮电出版社
《VHDL简明教程》.王小军.清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 简易 电子琴 设计