1、友谊地久天长乐曲演奏电路设计黑龙江科技学院课程设计任务书一、设计题目: 二、设计的主要内容: 指导教师: 日 期: 教师评语: 评阅成绩: 评 阅 人: 日 期: 摘 要与利用微处理器(CPU或MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。如何使用EDA工具设计电子系统是人们普遍关心的问题,本设计在美国ALTERA公司MAX + plus的EDA软件平台上,使用层次化设计方法,实现了乐曲发生器的设计。本系统是利用硬件描述语言VHDL的设计思想设计的一个乐曲演奏电路,该
2、系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现。系统由音调发生模块和数控分频模块两个部分组成。系统实现是用硬件描述语言VHDL按模块化方式进行设计,然后进行编程、时序仿真、整合。本系统功能比较齐全,有一定的使用价值。关键词:乐曲;4MHz时钟;VHDL;EDA 第1章友谊地久天长乐曲演奏电路设计概述 1.1 系统设计目的本系统是利用硬件描述语言VHDL的设计思想设计的一个乐曲演奏电路,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现。系统由音调发生模块和数控分频模块两个部分组成。系统实现是用硬件描述语言VHDL按模块化方式进行设计,然后进行编程、时序仿真、整合,
3、本系统功能比较齐全,有一定的使用价值。1.2 设计要求1.2.设计任务(1)音高与频率的对应关系见下表1_1: 1234567低音131147165175196221248中音262294330350393441496高音525589661700786882990音高与频率的对应关系见下表1_1(2)友谊地久天长乐谱见图1_2: 第2章友谊地久天长乐曲演奏电路设计思想2.1 系统设计方案2.1.1 音符与频率的关系我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素,首先让我们来了解音符与频率的关系。乐曲的12平均率规定:每2个八度音(如简谱中的中音1与高音
4、1)之间的频率相差1倍。在2个八度音之间,又可分为12个半音,每2个半音的频率比为122。另外,音符A(简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音l至高音1之间每个音符的频率,如表1所示: 产生各音符所需的频率可用一分频器实现,由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但会增加分频器的分频级数。实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取合适的时钟频率。本文设计的
5、乐曲发生器选取4MHz的基准频率。若无4MHz的时钟频率,则可以先分频得到4MHz或换一个新的基准频率。实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会走调。表1_1中的分频系数是从8MHz频率二分频得到的4MHz频率基础上计算得出的。由于最大的分频系数为9101,故采用14位二进制计数器已能满足分频要求。1234567低音131147165175196221248中音262294330350393441496高音525589661700786882990音高与频率的对应关系见下表1_12.1.2 程序设计原理我们在美国AI.TERA公司MAX + plus的EDA软件平台上
6、,使用层次化设计手段,实现了友谊地久天长乐曲发生器的设计。图2为友谊地久天长乐曲发生器的顶层电路音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,TABLE元件首先是为PULSE元件提供决定所发音符的分频预置数,而此数停留的时间即为此音符的节拍值。在TABLE元件中设置了一个8位二进制计数器(计数最大值为138),这个计数器的计数频率选为4 Hz,所以每一计数值的停留时间为025s,即四四拍的4分音符持续时间。例如,友谊地久天长乐曲的第一个音符低音3(1拍),停留的时间需用4个计数时钟节拍,即1s。相应地,所对应的低音3音符分频预置值为9 100,其值在AF130输出端停留了1s。随着T
7、ABLE元件中的计数器按4Hz的时钟速率作加法计数时,友谊地久天长乐曲就开始连续自然地演奏起来了。2.2 各模块功能模块总体框图如下:模块PAIA控制每一个音的长短,送初值给FANA模块,从而控制音高。音符的持续时间必须根据乐曲的速度以及每个音符的节拍数决定,因此此模块的功能也就是为FANA 提供决定所发音的分频预置值,而此数在FANA输入口停留时间即为此音节节拍值。模块FANA的功能是根据PAIA送来的初值倒计时,每次计到0时就使信号Q反转,由于初值不同,从而产生不同的音高。所以音符的频率可以由此模块得到。 2.3 系统工作原理及其流程本程序设计主要应用了一下知识点:(1) 根据本程序的基本
8、要求,设定脉冲上升沿有效;(2) 在尽量减小频率误差的前提下取合适的时钟频率,根据音高与频率的对应关系设定程序输入、输出;(3) 在元件中设置了一个8位二进制计数器(计数最大值为138),这个计数器的计数频率选为4 Hz,所以每一计数值的停留时间为025s,即四四拍的4分音符持续时间(4) 使CLK 6MH2与C10ck9相接(接受6MHz时钟频率),CLK 4Hz与Clock2相接(接收4Hz时钟频率),发音输出接SPEAK(5) 设计输入根据电路设计所提出的要求,将程序输入到 VHDL编辑器中去编辑。(6) 功能级模拟用VHDL,模拟器对编辑后的程序进行模拟,如果达不到设计要求,则可以重新
9、修改程序,直到通过功能模拟。 (7) 逻辑综合与优化 将通过功能模拟的程序放到VHDL编译器中,进行逻辑综合与优化。(8) 门级模拟对电路用VHDL。仿真器仿真。可对门级电路的延时、定时状态、驱动能力等进行仿真。如不符合要求,可重复步骤(3),再门级模拟,直到符合要求止。第3章 系统仿真/硬件验证系统的有关仿真结果:模块PAIA控制每一个音的长短,此模块输出Q送初值给FANA模块,从而控制音高。音符的持续时间必须根据乐曲的速度以及每个音符的节拍数决定,因此此模块的功能也就是为FANA 提供决定所发音的分频预置值,而此数在FANA输入口停留时间即为此音节节拍值即为图中q值。模块FANA的功能是根
10、据PAIA送来的初值倒计时,每次计到0时就使信号Q反转,由于初值不同,从而产生不同的音高。第4章 课程设计总结与分析在完成此次课程设计后,我发现自己还有很多不足,所学到的知识还远不够,以至于还有一些功能被动完成。但通过学习一次实践,增强了我的动手能力,提高和巩固了VHDL语言方面的知识,特别是对程序的总体熟练程度。从中增强了我们的团队合作精神,并让我们认识到吧理论联系实际中式那么的重要。经过努力,友谊地久天长乐曲演奏电路的设计基本上完成了。在整个设计过程中,我收获了很多,现总结如下:1) 这个设计的基本是接触一门新的语言并加以应用,对于我来说,没有想到的是入手的速度比我的预料快,在以前编程的基
11、础上,从接触到开始动手编程的时间得到了很大的缩短。知识的接收速度在很大的程度上决定了动手的时间。2) VHDL的编程与C语言的编程有着本质的不同,然而以往形成的旧编程习惯在VHDL编程中依然起着很大的作用。一通百通,不是没有道理的。对于学习新的知识并予以应用的信心,显得更足了。3) VHDL的设计关键是电路逻辑设计,而一个程序的关键是总体设计。对于硬件设计接触不多的我们清楚这一点也许不无好处。4)通过这个程序设计让我学会一种新的语言,对数字系统结构也有了更进一步的了解和认识,对我以后的学习有很大的帮助。希望其他人在看再做类似设计时有所借鉴。通过几天的课程设计,我对数据库软件EDA技术、VHDL
12、、等系列知识都有了一定的了解。使用EDA技术开发页面的能力也有了很大提高。 在整个设计过程中,有很多人对任务的完成给予了重要的支持和帮助。感谢老师给了我本次设计的机会并提供指导;感谢许多同学在我此课程设计遇到问题时给我的帮助使我能够顺利地进行设计的工作;论坛中有很多认识不认识的朋友也都为我的设计提出了很宝贵的建议,同样在这里感谢他们。参考文献l 16 付家才,EDA原理与应用,化学工业出版社,2000年2 黄仁欣,EDA技术使用教程,清化大学出版社,2006年3 潘松,王国栋,VHDL使用教,电子科技大学出版社,2005年4 孙国丽,朱维勇,栾铭,EDA与数字系统设计,机械工业出版社,2004
13、年5李国洪,沈明山.可编程器件EDA技术与实践.北京机械工业出版社,2004年程序清单:LIBRARY ieee; USE ieee.std_logic_1164.all; entity paia is port(clk:in std_logic ; q:out integer range 0 to 10204); end paia;architecture pai_arc of paia is begin process(clk) variable cnt1:integer range 0 to 1500000; variable cnt2:integer range 0 to 8; var
14、iable n:integer range 0 to 45; begin if clkevent and clk=1 then if cnt1q=10204; if cnt2q=7634; if cnt2q=6061; if cnt2q=6803; if cnt2qq=6803; if cnt2q=6061; if cnt2q=7634; if cnt2q=6061; if cnt2q=5089; if cnt2q=4534; if cnt2q=5089; if cnt2q=6061; if cnt2q=7634; if cnt2q=6803; if cnt2qq=6803; if cnt2q
15、=6061; if cnt2q=7634; if cnt2q=9050; if cnt2q=10204; if cnt2q=7634; if cnt2q=4534; if cnt2q=5089; if cnt2q=6061; if cnt2q=7634; if cnt2q=6834; if cnt2qq=6803; if cnt2q=4534; if cnt2q=5089; if cnt2q=6061; if cnt2q=5089; if cnt2q=4534; if cnt2q=3809; if cnt2q=5089; if cnt2q=6061; if cnt2q=7634; if cnt
16、2q=6803; if cnt2qq=6803; if cnt2q=6061; if cnt2q=7634; if cnt2q=9050; if cnt2q=10204; if cnt2q=7634; if cnt27 then cnt2:=cnt2+1; else cnt2:=0; n:=0; end if; end case; end if; end if; end process; end pai_arc;LIBRARY ieee; USE ieee.std_logic_1164.all; entity fana is port(a:in integer range 0 to 10204
17、; clk:in std_logic; q:out std_logic); end fana; architecture fan_arc of fana is begin process(clk) variable b,d:std_logic; variable c:integer range 0 to 10204; begin if clkevent and clk=1then if b=0then c:=a; b:=1; else if c=0 then b:=0; d:=not d; else c:=c-1; end if; end if; end if; q=d; end process; end fan_arc; 黑龙江科技学院课程设计任务书一、设计题目:友谊地久天长乐曲演奏电路设计 二、设计的主要内容:演奏电路可以控制每一个音的长短,从而控制音高。音符的持续时间根据乐曲的速度以及每个音符的节拍数决定,而此数在电路一模块输入口停留时间即为此音节节拍值。模块根据上一模块送来的初值倒计时,每次计到0时就使信号Q反转,由于初值不同,从而产生不同的音高。所以音符的频率可以由此模块得到。 指导教师: 日 期: 教师评语: 评阅成绩: 评 阅 人: 日 期:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1