基于VHDL文本输入法的电子琴电路设计
EDA课程设计
基于VHDL文本输入法的电子琴电路设计
摘 要:本课程设计主要采用EDA技术设计一个简易的八音符电子琴,它可通过按键输入来控制音响从而演奏出已存入的乐曲。在课程设计中,系统开发平台为Windows 8,程序设计采用VHDL语言,程序运行平台为QuartusⅡ。然后编写程序实现电子琴的各项功能,使不同的音阶对应不同频率的正弦波,按下不同的键时发出对应频率的声音。程序通过调试运行,时序仿真,电路功能验证,顺利地实现了设计目标。
关键词 :电子琴,EDA,VHDL,音阶,频率
1 引 言
随着信息科学的进步,现代电子产品的性能越来越高,复杂度越来越大,更新步伐
也越来越快,电子技术的发展进入了划时代的阶段。其中电子技术的核心便是电子设计自动化EDA(Electronic Design Automatic)技术。EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。本课程设计就是采用EDA技术描述语言VHDL编程实现简易电子琴的各项功能,是EDA技术应用于实际的一个很好的例子。
1.1 课程设计目的
本课程设计主要是基于VHDL文本输入法设计乐曲演奏电路,该系统基于计算机中
时钟分频器的原理,采用自顶向下的设计方法来实现,通过按键输入来控制音响或者自动演奏已存入的歌曲。系统由乐曲自动演奏模块、音调发生模块和数控分频模块三个部分组成。系统实现是用硬件描述语言VHDL按模块化方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲。该设计最重要的一点就是通过按键控制不同的音调发生,每一个音调对应不同的频率,从而输出对应频率的声音。
1.2 课程设计内容
(1)设计一个简易的八音符电子琴,它可通过按键输入来控制音响。
(2)系统演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存入的乐曲。 (3)能够自动演奏多首乐曲,且乐曲可重复演奏。
1.3 课程设计原理
本课程设计目的在于灵活运用EDA技术编程实现一个简易电子琴的乐曲演奏,它要求在实验箱上构造一个电子琴电路,不同的音阶对应不同频率的正弦波。按下每个代表不同音阶的按键时,能够发出对应频率的声音。故系统可分为乐曲自动演奏模块(AUTO)、音调发生模块(TONE)和数控分频模块(FENPIN)三部分。系统的整体组装设计原理图如图1-1所示。
图1-1 系统的整体组装设计原理图
由于设计分模块组成,每个单独的模块都是一个完整的源程序,分别实现不同性质的功能,但是每个模块又是紧密关联的,前一个模块的输出很可能是后一模块的输入。如AUTO模块的音符信号输出就是TONE模块的音符信号输入。另外,时钟脉冲信号在本课程设计中用的最多,用处也最大,一般情况下时钟信号处上升沿有效,判断和控制各个计数器计数多少。
2 EDA、VHDL简介
EDA
技术是以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理
及智能化技术的最新成果,进行电子产品的自动设计。EDA可提供文本输入以及图形编辑的方法将设计者的意图用程序或者图形方式表达出来,而我们经常用到的VHDL语言便是用于编写源程序所需的最常见的硬件描述语言(HDL)之一。
2.1 EDA技术
EDA是电子设计自动化(Electronic Design Automation)缩写,是90年代初从CAD、
CAM、CAT和CAE的概念发展而来的。EDA技术是电子设计的发展趋势,利用EDA工具可以代替设计者完成电子系统设计中的大部分工作。EDA工具从数字系统设计的单一领域,发展到今天,应用范围已涉及模拟、微波等多个领域,可以实现各个领域电子系统设计的测试、设计方针和布局布线等。
现在对EDA的概念或范畴用得很宽,包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA主要辅助进行三个方面的设计工作:IC设计、电子电路设计和PCB设计。
2.2 VHDL语言
常用硬件描述语言有VHDL、Verilog和ABEL语言,而VHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的语句外,VHDL的结构特点是将设计实体的内部功能和算法完成部分。
相对于其他硬件语言,VHDL有许多优点。比如VHDL的行为描述能力更强,而且具有丰富的仿真语句和库函数,随时可对系统进行仿真模拟,使设计者对整个工程的结构和功能可行性做出判断;另外,由于具有类属描述语句和子程序调用等功能,对于完成的设计,在不改变源程序的条件下,只需改变类属参量和函数,就能轻易地改变设计的规模和结构。
3 简易电子琴的设计过程
根据系统设计要求,系统该系统基于计算机中时钟分频器的原理,设计采用自顶向下的设计方法,通过按键输入来控制音响或者自动演奏已存入的歌曲。它由乐曲自动演奏模块、音调发生模块和数控分频模块三部分组成。
3.1 乐曲自动演奏模块
乐曲自动演奏模块的作用是产生8位发生控制输入信号。当进行自动演奏时,由存储在此模块的8位二进制数作为发声控制输入,从而自动演奏乐曲。
该模块的VHDL源程序主要由3个工作进程组成,分别为PULSE0,MUSIC和COM1。PULSE0的作用是根据键盘输入(自动演奏)的值(0或1)来判断计数器COUNT以及脉冲CLK2的输出值。部分源程序如下:
PULSE0:PROCESS(CLK,AUTO) --工作进程开始
VARIABLE COUNT:INTEGER RANGE 0 TO 8; --定义计数器变量,值从0到8 IF AUTO='1'THEN --键盘输入为1
COUNT:=0;CLK2<='0'; --计数器值指0,时钟信号为0 ELSIF(CLK'EVENT AND CLK='1')THEN --时钟输入信号为1 COUNT:=COUNT+1; --计数器加1
当确定了时钟信号输出的值后,在第二个PROCESS中就可以由它控制8位发声控制输入信号了。即CLK2的值为0时,COUNT0为1。最后的COM1便是由前两个PROCESS所确定的COUNT0、AUTO和键盘输入信号值INDEX2将8位的二进制数转化为音符信号的输出,达到自动演奏的目的。部分源程序如下:
IF AUTO='0'THEN CASE COUNT0 IS
WHEN 0=>INDEX0<=\ --3 WHEN 4=>INDEX0<=\ --5
该模块最主要的用途就是将输入二进制数转化为发声控制输入,是产生音符的重要步骤, AUTO模块的源程序符号编辑图如图3-1。
图3-1 AUTO模块的符号编辑图
3.2 音调发生模块
音调发生模块的作用是产生音阶的分频预置值。当8位发声控制输入信号中的某一位为高电平时,则对应某一音阶的数值将输出,该数值即为该音阶的分频预置值,分频