《EDA技术》ElectronicDesignAutomation1学习情境三:简易电子琴《EDA技术》ElectronicDesignAutomation2主要内容A.项目任务B.项目目标C.实施步骤D.相关知识E.评价与总结绵阳职业技术学院信息工程系A.项目任务掌握基本的VHDL语言。用VHDL语言设计乐音的节拍与音符产生电路;用VHDL语言设计分频系数、音符显示数据产生电路;用VHDL语言设计可控分频器电路;用VHDL语言设计琴键输入电路。理解简易电子琴总体设计方案,把音乐播放与演奏电路总装成简易电子琴。绵阳职业技术学院信息工程系B.项目目标任务1.1目标:掌握基本的VHDL语言;理解音乐播放电路设计方案。掌握用VHDL语言设计节拍与音符产生电路;掌握用VHDL语言设计分频系数、音符显示数据产生电路;掌握用VHDL语言设计可控分频器电路。设计结果:原理图与原程序、电路仿真图、能在实训系统上播放悦耳动听的音乐。任务1.2目标:掌握键盘电路设计、键盘输入去抖动方法;掌握层次电路设计方法;初步具备独立的VHDL编程能力。设计结果:原理图与原程序、电路仿真图、能在实训系统上弹奏曲子或播放悦耳动听的音乐。绵阳职业技术学院信息工程系C.实施步骤《EDA技术》ElectronicDesignAutomation6任务3.1实施步骤一、资讯1.明确任务一般来说,所有乐音有四个基本要素——“音的长短”(决定节拍)、“音的高低”(频率决定)、“音的强度”、“音色”。而其中最重要的是“音的长短”和“音的高低”。为了简化设计,本任务设计的音乐播放电路只考虑音的最重要的两个方面:“音的长短”和“音的高低”,忽略音的强度和音色。要求音乐播放电路最少能连续循环播放一首歌曲,在此基础上可再做进一步的扩展。为实现播放“音的长短”和“音的高低”,可根据乐谱用一个控制电路模块产生“音的长短”和“音的高低”信号,控制电路模块包括一个节拍产生子模块(控制“音的长短”)与音符产生子模块(控制“音的高低”)。用一个分频系数、音符显示数据产生模块把音符信号转换为分频系数、音符显示数据和高低音显示电平。用一个可控分频模块根据分频系数产生不同频率信号驱动喇叭或蜂鸣器播放音乐。《EDA技术》ElectronicDesignAutomation7电路输入是两路时钟信号:一路作为可控分频电路模块的输入时钟,经可控分频电路模块分频后,得到各种所需的乐音信号。另一路作为控制电路模块的输入时钟,用来产生节拍。这两路时钟信号的频率根据具体的实验条件和所选歌曲可有所不同。电路的输出有:一路一线是乐音信号输出,用来驱动外接喇叭或蜂鸣器播放音乐;一路四线用来驱动外接的数码管,显示播放的音符简谱符号;一路一线用来驱动外接的一个LED,播放高音时发光。2.查阅资料到图书馆、互联网查找有关资料。前人发表的有关音乐电路的文章主要散见在学术期刊和有关网页上。可用乐曲播放电路、音乐发生器等关键词查找。另外,要理解这些文章所介绍的原理,还要具有音乐谱、乐音频率的有关知识。任务3.1实施步骤《EDA技术》ElectronicDesignAutomation8二、计划音乐电路是模仿人歌唱的电路,故可用人歌唱作为原型来分析设计本任务的总体方案。人通过声带振动发出声音,声带振动频率不同发出不同声音。故在用数字电路来模仿时,用一个控制电路,实现声带振动功能,控制音符信号的产生;用一个电路把音符信号转换为可控分频模块可用的分频系数;可控分频电路在分频系数作用下产生不同频率信号来驱动外接喇叭或蜂鸣器播放音乐。控制电路模块根据歌谱控制可控分频电路模块按照一定节拍在不同时间发出不同的乐音。而控制电路模块应该分为两个子模块,一个用于产生节拍,称节拍产生模块;另一个用于根据歌谱控制可控分频电路模块在不同时间发出不同的乐音,称音符产生模块。音乐电路是连续循环播放的,故控制电路模块的核心部分——节拍产生模块是一个计数器,每个状态持续的时间是需播放的所有音的音长的最小公因数,比如是一个十六分音符时值,具体时间长度应根据需播放的歌曲而定。这样,每个音符持续的时间是每个状态持续的时间的整数倍,故占据整数倍个状态。具体占据状态的个数要根据每个音的音长来决定。控制电路的计数器的模即状态数,可由需播放歌曲的各个音所占据状态个数累加而得。例如,一首用于播放“梁祝”乐曲的音乐电路的控制电路的计数器的模是139。节拍产生电路的计数器是用来产生节拍定的,音符产生模块则将节拍产生电路的计数器的状态翻译成对应的音符,如需播放的歌曲中所用到的音符为9~16个,则音符产生模块的输出信号应有四位,其他情况依此类推。任务3.1实施步骤《EDA技术》ElectronicDesignAutomation9控制电路模块只是根据歌谱产生控制可控分频模块按照一定节拍在不同时间发出不同乐音的音符信号。控制电路模块要具体控制可控分频模块,还要把音符信号转换为分频系数作为可控分频模块的输入信号,也要根据音符信号决定提供给外围数码管的用于显示简谱音符符号的数据和提供给外围LED的用于显示高低音的数据,这就需要另一个模块——分频系数、LED数据产生模块。分频系数、LED数据产生模块根据音符产生模块输出的音符信息,产生每个时刻提供给可控分频模块的分频系数、提供给外围数码管的用于显示谱音符符号的数据和提供给外围LED的用于显示高低音的数据。可控分频模块根据分频系数产生不同频率信号驱动喇叭或蜂鸣器播放音乐。播放音乐电路设计总体参考方案如图3-1所示,其中的两个时钟频率的取值将在下面介绍实施的部分做分析。任务3.1实施步骤《EDA技术》ElectronicDesignAutomation10。图3-1播放电路总体方案任务3.1实施步骤《EDA技术》ElectronicDesignAutomation11任务3.1实施步骤三、决策本音乐电路设计重点在控制电路模块和可控分频模块设计,下面讨论这两个模块以及顶层模块的设计方案的选择。1、控制电路模块(节拍产生模块与音符产生模块)设计方案的选择节拍产生模块是一个计数器,可采用通常的方法设计。音符产生模块的输入信号是节拍产生模块输出的计数值,输出信号是表示音符的音符序号。在节拍产生模块输出的计数值变化范围不大并且音符产生模块的输出数值不需灵活改变时,可用VHDL语句直接来描述音符产生模块。在节拍产生模块输出的计数值变化范围较大或音符产生模块的输出数值需灵活改变时,可使用LPM_ROM来存储对应于不同计数值的音符序号。2、可控分频模块设计方案的选择(1)等占空比和非等占空比方案选择可控分频电路按输出时钟的占空比来分,有等占空比和非等占空比两类方案。为了得到足够驱动蜂鸣器的功率,采用等占空比输出的可控分频电路方案。《EDA技术》ElectronicDesignAutomation12任务3.1实施步骤(2)偶数分频、整数分频方案的选择常见的分频电路有偶数分频、奇数分频和整数分频电路,本任务从原理来看,既有偶数分频又有奇数分频,故应属于整数分频电路。非等占空比的偶数分频、奇数分频电路有统一的设计方法并且比较简单,但等占空比的偶数分频、奇数分频电路设计方法则不相同。对于偶数(2N)的等占空比分频,可先做N非等占空比分频,再做2分频即可,比较简单。对于等占空比的奇数分频电路则不能采用这种方法,比较复杂。本任务可采取用较高频率(比如12MHz)的输入时钟,这样分频比就比较大,故对于初学者,作为初步解决方案,可采用偶数分频比近似代替奇数分频比的方法,把整数分频电路变成偶数(2N)分频电路,用先做N非等占空比分频,再做2分频这种较简单的方法来设计;作为提高,可采用比较复杂的真正的整数分频电路设计方法设计。3.、VHDL输入设计法和原理图输入设计法的选择在本任务中,底层模块采用VHDL语言设计较简单,顶层模块采用原理图设计与VHDL设计均可,我们采用原理图设计顶层电路。《EDA技术》ElectronicDesignAutomation13任务3.1实施步骤四、实施下面以用于播放“梁祝”乐曲的音乐电路为例,对音乐电路各模块的实施进行进一步的设计实现。(一)控制电路模块控制电路模块包含节拍产生模块和音符产生模块两个子模块,合写成一个文件。1、节拍产生模块设计分析根据以上分析,此模块为一个计数器,现在需进一步决定计数器的模与输入时钟频率。根据乐曲“梁祝”简谱,见图3—2,此乐曲以四分音符为一拍,四拍为一节,所有音的音长最小公因数是一个十六分音符时值,所以,以十六分音符时值作为一个状态持续时间,把乐曲“梁祝”中各个音符所占据状态个数累加而得知节拍产生模块计数器的模是139,其中最后体止符用了3个时间单位。乐曲“梁祝”的简谱没有明确标出播放速度,根据经验设定1min播放60拍,因此一拍持续时间即四分音符的时值为1s,一个状态持续时间即一个十六分音符时值为0.25s。故节拍产生模块输入时钟周期为0.25s,频率为4Hz。《EDA技术》ElectronicDesignAutomation14任务3.1实施步骤图3-2《梁祝化蝶》简谱《EDA技术》ElectronicDesignAutomation15任务3.1实施步骤2、音符产生模块设计分析音符产生模块的功能是将节拍产生电路的计数器的值按照乐曲“梁祝”的简谱翻译成对应的音符。规定用Counter表示计数器的值,Index表示15个音符符号。播放乐曲“梁祝”需低音7个、中音7个与高音1个,共15个音符,用15个数字(Index)1—15来表示,则乐曲“梁祝”简谱的15个音符与数字(Index)的对应关系见表3-1。表3-1乐曲“梁祝”简谱音符与数字对应关系《EDA技术》ElectronicDesignAutomation16任务3.1实施步骤根据乐曲“梁祝”简谱可得其计数器值与音符对应关系,见表3-2。见表3-2音符产生模块——计数器值与音符对应表《EDA技术》ElectronicDesignAutomation17任务3.1实施步骤3、控制电路模块(节拍产生模块和音符产生模块)VHDL描述控制电路模块的输入时钟信号与C1k4Hz相连;Index表示音符信息,因为Index取值为1~15,故为四位二进制信号。此控制电路模块VHDL描述有两个进程,CNT8进程描述的是一个时序逻辑电路计数器(节拍产生模块),Search进程描述的是一个组合逻辑译码电路(音符产生模块),两模块由Counter信号相连,这是一个数字系统的控制模块描述。具体程序描述如下:LIBRARYieee;USEieee.std_logic_1164.ALL;USEieee.std_logic_arith.ALL;ENTITYaaaISPORT(clk:INSTD_LOGIC;Index:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;《EDA技术》ElectronicDesignAutomation18任务3.1实施步骤ARCHITECTUREoneOFaaaISSIGNALCounter:INTEGERRANGE0TO138;SIGNALDateOut:INTEGERRANGE0TO15;BEGINCNT8:PROCESS(clk,Counter)BEGINIFCounter=138THENCounter=0;ELSIF(clk'EVENTANDclk='1')THENCounter=Counter+1;ENDIF;ENDPROCESS;《EDA技术》ElectronicDesignAutomation19任务3.1实施步骤Search:PROCESS(Counter)BEGINCASECounterISWHEN00=DateOut=3;WHEN01=DateOut=3;WHEN02=DateOut=3;WHEN03=DateOut=3;WHEN04=DateOut=5;WH