版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习情境三:简易电子琴《EDA技术》1Doc.numbertobeenteredby"HeaderandFooter"主要内容A.项目任务B.项目目标C.实施步骤D.相关知识E.评价与总结《EDA技术》2Doc.numbertobeenteredby"HeaderandFooter"A.项目任务
掌握基本的VHDL语言。用VHDL语言设计乐音的节拍与音符产生电路;用VHDL语言设计分频系数、音符显示数据产生电路;用VHDL语言设计可控分频器电路;用VHDL语言设计琴键输入电路。理解简易电子琴总体设计方案,把音乐播放与演奏电路总装成简易电子琴。B.项目目标任务1.1目标:掌握基本的VHDL语言;理解音乐播放电路设计方案。掌握用VHDL语言设计节拍与音符产生电路;掌握用VHDL语言设计分频系数、音符显示数据产生电路;掌握用VHDL语言设计可控分频器电路。设计结果:原理图与原程序、电路仿真图、能在实训系统上播放悦耳动听的音乐。任务1.2目标:掌握键盘电路设计、键盘输入去抖动方法;掌握层次电路设计方法;初步具备独立的VHDL编程能力。设计结果:原理图与原程序、电路仿真图、能在实训系统上弹奏曲子或播放悦耳动听的音乐。C.实施步骤任务3.1实施步骤一、资讯
1.明确任务一般来说,所有乐音有四个基本要素——“音的长短”(决定节拍)、“音的高低”(频率决定)、“音的强度”、“音色”。而其中最重要的是“音的长短”和“音的高低”。为了简化设计,本任务设计的音乐播放电路只考虑音的最重要的两个方面:“音的长短”和“音的高低”,忽略音的强度和音色。要求音乐播放电路最少能连续循环播放一首歌曲,在此基础上可再做进一步的扩展。为实现播放“音的长短”和“音的高低”,可根据乐谱用一个控制电路模块产生“音的长短”和“音的高低”信号,控制电路模块包括一个节拍产生子模块(控制“音的长短”)与音符产生子模块(控制“音的高低”)。用一个分频系数、音符显示数据产生模块把音符信号转换为分频系数、音符显示数据和高低音显示电平。用一个可控分频模块根据分频系数产生不同频率信号驱动喇叭或蜂鸣器播放音乐。《EDA技术》6Doc.numbertobeenteredby"HeaderandFooter"电路输入是两路时钟信号:一路作为可控分频电路模块的输入时钟,经可控分频电路模块分频后,得到各种所需的乐音信号。另一路作为控制电路模块的输入时钟,用来产生节拍。这两路时钟信号的频率根据具体的实验条件和所选歌曲可有所不同。电路的输出有:一路一线是乐音信号输出,用来驱动外接喇叭或蜂鸣器播放音乐;一路四线用来驱动外接的数码管,显示播放的音符简谱符号;一路一线用来驱动外接的一个LED,播放高音时发光。
2.查阅资料到图书馆、互联网查找有关资料。前人发表的有关音乐电路的文章主要散见在学术期刊和有关网页上。可用乐曲播放电路、音乐发生器等关键词查找。另外,要理解这些文章所介绍的原理,还要具有音乐谱、乐音频率的有关知识。任务3.1实施步骤《EDA技术》7Doc.numbertobeenteredby"HeaderandFooter"二、计划音乐电路是模仿人歌唱的电路,故可用人歌唱作为原型来分析设计本任务的总体方案。人通过声带振动发出声音,声带振动频率不同发出不同声音。故在用数字电路来模仿时,用一个控制电路,实现声带振动功能,控制音符信号的产生;用一个电路把音符信号转换为可控分频模块可用的分频系数;可控分频电路在分频系数作用下产生不同频率信号来驱动外接喇叭或蜂鸣器播放音乐。控制电路模块根据歌谱控制可控分频电路模块按照一定节拍在不同时间发出不同的乐音。而控制电路模块应该分为两个子模块,一个用于产生节拍,称节拍产生模块;另一个用于根据歌谱控制可控分频电路模块在不同时间发出不同的乐音,称音符产生模块。音乐电路是连续循环播放的,故控制电路模块的核心部分——节拍产生模块是一个计数器,每个状态持续的时间是需播放的所有音的音长的最小公因数,比如是一个十六分音符时值,具体时间长度应根据需播放的歌曲而定。这样,每个音符持续的时间是每个状态持续的时间的整数倍,故占据整数倍个状态。具体占据状态的个数要根据每个音的音长来决定。控制电路的计数器的模即状态数,可由需播放歌曲的各个音所占据状态个数累加而得。例如,一首用于播放“梁祝”乐曲的音乐电路的控制电路的计数器的模是139。节拍产生电路的计数器是用来产生节拍定的,音符产生模块则将节拍产生电路的计数器的状态翻译成对应的音符,如需播放的歌曲中所用到的音符为9~16个,则音符产生模块的输出信号应有四位,其他情况依此类推。任务3.1实施步骤《EDA技术》8Doc.numbertobeenteredby"HeaderandFooter"控制电路模块只是根据歌谱产生控制可控分频模块按照一定节拍在不同时间发出不同乐音的音符信号。控制电路模块要具体控制可控分频模块,还要把音符信号转换为分频系数作为可控分频模块的输入信号,也要根据音符信号决定提供给外围数码管的用于显示简谱音符符号的数据和提供给外围LED的用于显示高低音的数据,这就需要另一个模块——分频系数、LED数据产生模块。分频系数、LED数据产生模块根据音符产生模块输出的音符信息,产生每个时刻提供给可控分频模块的分频系数、提供给外围数码管的用于显示谱音符符号的数据和提供给外围LED的用于显示高低音的数据。可控分频模块根据分频系数产生不同频率信号驱动喇叭或蜂鸣器播放音乐。播放音乐电路设计总体参考方案如图3-1所示,其中的两个时钟频率的取值将在下面介绍实施的部分做分析。任务3.1实施步骤《EDA技术》9Doc.numbertobeenteredby"HeaderandFooter"。图3-1播放电路总体方案任务3.1实施步骤《EDA技术》10Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤三、决策本音乐电路设计重点在控制电路模块和可控分频模块设计,下面讨论这两个模块以及顶层模块的设计方案的选择。1、控制电路模块(节拍产生模块与音符产生模块)设计方案的选择节拍产生模块是一个计数器,可采用通常的方法设计。音符产生模块的输入信号是节拍产生模块输出的计数值,输出信号是表示音符的音符序号。在节拍产生模块输出的计数值变化范围不大并且音符产生模块的输出数值不需灵活改变时,可用VHDL语句直接来描述音符产生模块。在节拍产生模块输出的计数值变化范围较大或音符产生模块的输出数值需灵活改变时,可使用LPM_ROM来存储对应于不同计数值的音符序号。2、可控分频模块设计方案的选择
(1)等占空比和非等占空比方案选择可控分频电路按输出时钟的占空比来分,有等占空比和非等占空比两类方案。为了得到足够驱动蜂鸣器的功率,采用等占空比输出的可控分频电路方案。《EDA技术》11Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤(2)偶数分频、整数分频方案的选择常见的分频电路有偶数分频、奇数分频和整数分频电路,本任务从原理来看,既有偶数分频又有奇数分频,故应属于整数分频电路。非等占空比的偶数分频、奇数分频电路有统一的设计方法并且比较简单,但等占空比的偶数分频、奇数分频电路设计方法则不相同。对于偶数(2N)的等占空比分频,可先做N非等占空比分频,再做2分频即可,比较简单。对于等占空比的奇数分频电路则不能采用这种方法,比较复杂。本任务可采取用较高频率(比如12MHz)的输入时钟,这样分频比就比较大,故对于初学者,作为初步解决方案,可采用偶数分频比近似代替奇数分频比的方法,把整数分频电路变成偶数(2N)分频电路,用先做N非等占空比分频,再做2分频这种较简单的方法来设计;作为提高,可采用比较复杂的真正的整数分频电路设计方法设计。3.、VHDL输入设计法和原理图输入设计法的选择在本任务中,底层模块采用VHDL语言设计较简单,顶层模块采用原理图设计与VHDL设计均可,我们采用原理图设计顶层电路。《EDA技术》12Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤四、实施下面以用于播放“梁祝”乐曲的音乐电路为例,对音乐电路各模块的实施进行进一步的设计实现。
(一)控制电路模块控制电路模块包含节拍产生模块和音符产生模块两个子模块,合写成一个文件。
1、节拍产生模块设计分析根据以上分析,此模块为一个计数器,现在需进一步决定计数器的模与输入时钟频率。根据乐曲“梁祝”简谱,见图3—2,此乐曲以四分音符为一拍,四拍为一节,所有音的音长最小公因数是一个十六分音符时值,所以,以十六分音符时值作为一个状态持续时间,把乐曲“梁祝”中各个音符所占据状态个数累加而得知节拍产生模块计数器的模是139,其中最后体止符用了3个时间单位。乐曲“梁祝”的简谱没有明确标出播放速度,根据经验设定1min播放60拍,因此一拍持续时间即四分音符的时值为1s,一个状态持续时间即一个十六分音符时值为0.25s。故节拍产生模块输入时钟周期为0.25s,频率为4Hz。《EDA技术》13Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤图3-2《梁祝化蝶》简谱《EDA技术》14Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤2、音符产生模块设计分析音符产生模块的功能是将节拍产生电路的计数器的值按照乐曲“梁祝”的简谱翻译成对应的音符。规定用Counter表示计数器的值,Index表示15个音符符号。播放乐曲“梁祝”需低音7个、中音7个与高音1个,共15个音符,用15个数字(Index)1—15来表示,则乐曲“梁祝”简谱的15个音符与数字(Index)的对应关系见表3-1。表3-1乐曲“梁祝”简谱音符与数字对应关系《EDA技术》15Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤根据乐曲“梁祝”简谱可得其计数器值与音符对应关系,见表3-2。见表3-2音符产生模块——计数器值与音符对应表《EDA技术》16Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤3、控制电路模块(节拍产生模块和音符产生模块)VHDL描述控制电路模块的输入时钟信号与C1k4Hz相连;Index表示音符信息,因为Index取值为1~15,故为四位二进制信号。此控制电路模块VHDL描述有两个进程,CNT8进程描述的是一个时序逻辑电路计数器(节拍产生模块),Search进程描述的是一个组合逻辑译码电路(音符产生模块),两模块由Counter信号相连,这是一个数字系统的控制模块描述。具体程序描述如下:LIBRARYieee;USEieee.std_logic_1164.ALL;USEieee.std_logic_arith.ALL;ENTITYaaaIS
PORT(clk:INSTD_LOGIC;
Index:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;《EDA技术》17Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤ARCHITECTUREoneOFaaaISSIGNALCounter:INTEGERRANGE0TO138;SIGNALDateOut:INTEGERRANGE0TO15;BEGINCNT8:PROCESS(clk,Counter)BEGINIFCounter=138THENCounter<=0;ELSIF(clk'EVENTANDclk='1')THENCounter<=Counter+1;ENDIF;ENDPROCESS;《EDA技术》18Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤Search:PROCESS(Counter)BEGINCASECounterISWHEN00=>DateOut<=3;WHEN01=>DateOut<=3;WHEN02=>DateOut<=3;WHEN03=>DateOut<=3;WHEN04=>DateOut<=5;WHEN05=>DateOut<=5;WHEN06=>DateOut<=5;WHEN07=>DateOut<=6;WHEN08=>DateOut<=8;WHEN09=>DateOut<=8;WHEN10=>DateOut<=8;WHEN11=>DateOut<=9;WHEN12=>DateOut<=6;WHEN13=>DateOut<=8;WHEN14=>DateOut<=5;WHEN15=>DateOut<=5;WHEN16=>DateOut<=12;WHEN17=>DateOut<=12;WHEN18=>DateOut<=12;WHEN19=>DateOut<=15;WHEN20=>DateOut<=13;WHEN21=>DateOut<=12;WHEN22=>DateOut<=10;WHEN23=>DateOut<=12;WHEN24=>DateOut<=9;WHEN25=>DateOut<=9;WHEN26=>DateOut<=9;WHEN27=>DateOut<=9;WHEN28=>DateOut<=9;WHEN29=>DateOut<=9;WHEN30=>DateOut<=9;WHEN31=>DateOut<=9;《EDA技术》19Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤WHEN32=>DateOut<=9;WHEN33=>DateOut<=9;WHEN34=>DateOut<=9;WHEN35=>DateOut<=10;WHEN36=>DateOut<=7;WHEN37=>DateOut<=7;WHEN38=>DateOut<=6;WHEN39=>DateOut<=6;WHEN40=>DateOut<=5;WHEN41=>DateOut<=5;WHEN42=>DateOut<=5;WHEN43=>DateOut<=6;WHEN44=>DateOut<=8;WHEN45=>DateOut<=8;WHEN46=>DateOut<=9;WHEN47=>DateOut<=9;WHEN48=>DateOut<=3;WHEN49=>DateOut<=3;WHEN50=>DateOut<=8;WHEN51=>DateOut<=8;WHEN52=>DateOut<=6;WHEN53=>DateOut<=5;WHEN54=>DateOut<=6;WHEN55=>DateOut<=8;WHEN56=>DateOut<=5;WHEN57=>DateOut<=5;WHEN58=>DateOut<=5;WHEN59=>DateOut<=5;WHEN60=>DateOut<=5;WHEN61=>DateOut<=5;WHEN62=>DateOut<=5;WHEN63=>DateOut<=5;WHEN64=>DateOut<=10;WHEN65=>DateOut<=10;WHEN66=>DateOut<=10;WHEN67=>DateOut<=12;《EDA技术》20Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤WHEN68=>DateOut<=7;WHEN69=>DateOut<=7;WHEN70=>DateOut<=9;WHEN71=>DateOut<=9;WHEN72=>DateOut<=6;WHEN73=>DateOut<=8;WHEN74=>DateOut<=5;WHEN75=>DateOut<=5;WHEN76=>DateOut<=5;WHEN77=>DateOut<=5;WHEN78=>DateOut<=5;WHEN79=>DateOut<=5;WHEN80=>DateOut<=3;WHEN81=>DateOut<=5;WHEN82=>DateOut<=3;WHEN83=>DateOut<=3;WHEN84=>DateOut<=5;WHEN85=>DateOut<=6;WHEN86=>DateOut<=7;WHEN87=>DateOut<=9;WHEN88=>DateOut<=6;WHEN89=>DateOut<=6;WHEN90=>DateOut<=6;WHEN91=>DateOut<=6;WHEN92=>DateOut<=6;WHEN93=>DateOut<=6;WHEN94=>DateOut<=5;WHEN95=>DateOut<=6;WHEN96=>DateOut<=8;WHEN97=>DateOut<=8;WHEN98=>DateOut<=8;WHEN99=>DateOut<=9;WHEN100=>DateOut<=12;WHEN101=>DateOut<=12;WHEN102=>DateOut<=12;WHEN103=>DateOut<=10;《EDA技术》21Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤WHEN104=>DateOut<=9;WHEN105=>DateOut<=9;WHEN106=>DateOut<=10;WHEN107=>DateOut<=9;WHEN108=>DateOut<=8;WHEN109=>DateOut<=8;WHEN110=>DateOut<=6;WHEN111=>DateOut<=5;WHEN112=>DateOut<=3;WHEN113=>DateOut<=3;WHEN114=>DateOut<=3;WHEN115=>DateOut<=3;WHEN116=>DateOut<=8;WHEN117=>DateOut<=8;WHEN118=>DateOut<=8;WHEN119=>DateOut<=8;WHEN120=>DateOut<=6;WHEN121=>DateOut<=8;WHEN122=>DateOut<=6;WHEN123=>DateOut<=5;WHEN124=>DateOut<=3;WHEN125=>DateOut<=5;WHEN126=>DateOut<=6;WHEN127=>DateOut<=8;WHEN128=>DateOut<=5;WHEN129=>DateOut<=5;WHEN130=>DateOut<=5;WHEN131=>DateOut<=5;WHEN132=>DateOut<=5;WHEN133=>DateOut<=5;WHEN134=>DateOut<=5;WHEN135=>DateOut<=5;WHEN136=>DateOut<=0;WHEN137=>DateOut<=0;WHEN138=>DateOut<=0;WHENOTHERS=>DateOut<=0;ENDCASE;ENDPROCESS;Index<=CONV_STD_LOGIC_VECTOR(DateOut,4);END;《EDA技术》22Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤4、仿真图图3-3是控制电路模块在Quartus软件中的仿真图,其中四位二进制数Index用十进制表示。图3-3控制电路模块《EDA技术》23Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤(二)分频系数、音符显示数据产生模块
1、设计分析此模块的功能是产生提供给可控分频模块的分频系数、提供给外围数码管和外围LED的数据。乐曲“梁祝”是F调,其音符对应的频率数据见表3-3,又因为可控分频模块的输入时钟设为12MHz,可控分频模块设计有12预分频和2后分频,经12预分频和2后分频后的频率为500000Hz,故供给可控分频模块的分频系数Tone=211-500000/f,又考虑到最大分频系数为1397,其二进制表示是11010011010,故可控分频模块的计数器为十一位二进制计数器。可得音符信号对应的分频系数、音符显示数据和高低音指示电平见表3-3《EDA技术》24Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤表3-3音符信号对应的分频系数、音符显示数据和高低音指示电平《EDA技术》25Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤2、设计文件VHDL描述对于简单的组合逻辑模块的VHDL描述,最常用的方法是应用CASE语句或IF语句来描述。在设计文件中:Index为四位二进制信号,表示输入音符信息;CODE为四位二进制信号,是提供给外围数码管的用于显示简谱音符符号的数据;LED是提供给外围LED的用于显示高低音的数据;Tone是供给可控分频模块的分频系数。《EDA技术》26Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYToneTabaISPORT(Index:INSTD_LOGIC_VECTOR(3DOWNTO0);CODE:OUTSTD_LOGIC_VECTOR(3DOWNTO0);LED:OUTSTD_LOGIC;Tone:OUTSTD_LOGIC_VECTOR(10DOWNTO0));END;ARCHITECTUREoneOFToneTabaISBEGINSearch:PROCESS(Index)BEGINCASEIndexIS--译码电路,查表方式,控制音调的预置数WHEN"0000"=>Tone<="11111111111";CODE<="0000";LED<='0';WHEN"0001"=>Tone<="01001101000";CODE<="0001";LED<='0';WHEN"0010"=>Tone<="01100000101";CODE<="0010";LED<='0';WHEN"0011"=>Tone<="01110010000";CODE<="0011";LED<='0';WHEN"0100"=>Tone<="01111010000";CODE<="0100";LED<='0';WHEN"0101"=>Tone<="10001000100";CODE<="0101";LED<='0';《EDA技术》27Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤WHEN"0110"=>Tone<="10010101101";CODE<="0110";LED<='0';WHEN"0111"=>Tone<="10100001010";CODE<="0111";LED<='0';WHEN"1000"=>Tone<="10101011100";CODE<="0001";LED<='1';WHEN"1001"=>Tone<="10110000010";CODE<="0010";LED<='1';WHEN"1010"=>Tone<="10111001000";CODE<="0011";LED<='1';WHEN"1011"=>Tone<="10111101000";CODE<="0110";LED<='1';WHEN"1100"=>Tone<="11000100010";CODE<="0101";LED<='1';WHEN"1101"=>Tone<="11001010110";CODE<="0110";LED<='1';WHEN"1110"=>Tone<="11010000100";CODE<="0111";LED<='1';WHEN"1111"=>Tone<="11010011010";CODE<="0001";LED<='1';WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;END;《EDA技术》28Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤3、仿真图图3-4是分频系数、音符显示数据产生模块在Quartus软件中的仿真图,其中CODE用十进制(总线形式)表示简谱音符符号的数据,Index用二进制(总线形式)表示输入音符信息、Tone用二进制(总线形式)表示分频系数。图3-4分频系数、音符显示数据产生模块仿真图《EDA技术》29Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤(三)可控分频模块1、设计分析此模块的功能是用一个可控分频电路来产生播放音乐所需的每个音。其实质是设计一个可预置数的计数器,预置数就是分频系数。作为初步解决方案,本任务采用偶数分频近似代替奇数分频的方法,把整数分频电路变成偶数分频电路来设计。可控分频模块是一个具有12预分频和2后分频的可控分频电路。可控分频模块的输入时钟clk频率选12MHz,为了使可控分频模块分频系数取值范围比较合适,输入时钟先经12分频,同时为了使输出信号SpkS具有较高的驱动功率,可控分频后再经2分频,使输出信号SpkS具有50%的占空比,从而具有较高的驱动功率。2、设计文件VHDL描述《EDA技术》30Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSpeakeraISPORT(clk:INSTD_LOGIC;Tone:INSTD_LOGIC_VECTOR(10DOWNTO0);
SpkS:OUTSTD_LOGIC);END;ARCHITECTUREoneOFSpeakeraISSIGNALPreCLK,FullSpkS:STD_LOGIC;BEGINDivideCLK:PROCESS(clk)--12分频计数器VARIABLECount4:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFclk'EVENTANDclk='1'THENifCount4>11THENPreCLK<='1';Count4:="0000";elseCount4:=Count4+1;PreCLK<='0';ENDIF;ENDIF;ENDPROCESS;《EDA技术》31Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤GenSpkS:PROCESS(PreCLK,Tone)--11位可预置计数器,非等占空比分频电路VARIABLECount11:STD_LOGIC_VECTOR(10DOWNTO0);BEGINIFPreCLK'EVENTANDPreCLK='1'THENIFCount11=16#7FF#THENCount11:=Tone;FullSpkS<='1';ELSECount11:=Count11+1;FullSpkS<='0';ENDIF;ENDIF;ENDPROCESS;DelaySpkS:PROCESS(FullSpkS)--将输出再2分频,等占空比频电路,故整个电路构成等占空比频电路,使扬声器有足够功率发音VARIABLECount2:STD_LOGIC;BEGINIFFullSpkS'EVENTANDFullSpkS='1'THENCount2:=NOTCount2;IFCount2='1'THENSpkS<='1';ELSESpkS<='0';ENDIF;ENDIF;ENDPROCESS;END;《EDA技术》32Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤3、仿真图图3-5是可控分频模块在Quartus软件中的仿真图。其中clk输入频率为12M,由于频率太大,显示的是一条黑带,Tone是用二进制(总线形式)表示的分频系数,Spks是可控分频模块输出音频信号。图3-5可控分频模块仿真图《EDA技术》33Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤(四)播放电路顶层模块设计播放电路顶层模块用原理图输入法设计。把以上各子模块在Quartus创建图元,新建一个原理图编辑文件,然后把创建的图元组装起来构成一个完整的电路进行编译,仿真。
1、播放电路顶层原理图输入描述。图3-6播放电路原理图输入《EDA技术》34Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤2、播放电路仿真图图3-7播放电路仿真图《EDA技术》35Doc.numbertobeenteredby"HeaderandFooter"任务3.1实施步骤五、检查分别编译各底层模块和顶层电路,并分别仿真底层模块和顶层电路。通过后,应将源代码下载到硬件中做最后的验证。六、评估对本次设计进行评估,可尝试更好的方案、方法。写出设计报告,设计报告应包括所应用到的EDA方法及知识的总结。《EDA技术》36Doc.numbertobeenteredby"HeaderandFooter"任务3.2实施步骤一、资讯音乐演奏电路由琴键输入识别模块电路;分频系数、LED数据产生模块;可控分频模块电路构成。在音乐播放电路设计中我们已设计分频系数、LED数据产生模块;可控分频模块电路。所以设计音乐演奏电路重点在设计琴键输入识别模块电路;以及把音乐演奏电路与音乐播放电路总装成一个简易电子琴。二、计划设计一个琴键输入识别模块电路,产生歌谱的音符信号;改进分频系数、LED数据产生模块电路,设置音乐演奏与播放功能选择端;把音乐演奏电路与音乐播放电路总装成一个简易电子琴。《EDA技术》37Doc.numbertobeenteredby"HeaderandFooter"任务3.2实施步骤三、决策
1.琴键输入识别模块电路设计方案琴键输入识别模块电路主要解决按键后产生相应的音符信号与键盘去抖动。音符信号产生用VHDL选择语句容易实现;键盘去抖动的方法有计数器、移位寄存器、D型触发器延时、采样型防抖微分电路四种,可选择一种完成去抖动设计2.改进分频系数、LED数据产生模块电路主要改进分频系数、LED数据产生模块电路,实现音乐演奏与播放功能选择3.音乐演奏电路与音乐播放电路总装把音乐演奏电路与音乐播放电路总装成简易电子琴,然后编译、仿真、下载。四、实施这个任务学生自己动手做,老师现场指导,学生在做中完成学习任务。下面给出演奏电路与简易电子琴参考设计方案。1.演奏电路设计(参考)学生在方案实施过程中,可先设计一个琴键输入识别模块电路(注意键盘去抖动设计)。然后利用琴键输入识别模块电路,音乐播放电路中已设计好的分频系数、LED数据产生模块,可控分频模块组装音乐演奏电路顶层文件(原理图输入或VHDL设计输入均可)。演奏电路顶层设计文件,见图3-8。《EDA技术》38Doc.numbertobeenteredby"HeaderandFooter"任务3.2实施步骤图3-8演奏电路顶层设计文件
《EDA技术》39Doc.numbertobeenteredby"HeaderandFooter"任务3.2实施步骤2.简易电子琴总装电路设计(参考)改进分频系数、LED数据产生模块电路设计,使其具有音乐播放与演奏选择功能。然后把各模块总装成一个简易电子琴电路如图3-9所示,仿真图如图3-10所示图3-9简易电子琴顶层设计文件《EDA技术》40Doc.numbertobeenteredby"HeaderandFooter"任务3.2实施步骤图3-10简易电子琴仿真《EDA技术》41Doc.numbertobeenteredby"HeaderandFooter"任务3.2实施步骤五、检查分别编译各底层模块和整个电路设计,并分别仿真控制电路模块和分频系数、LED数据产生模块。通过后,将源代码下载到硬件中做最后的验证。六、评估对本次设计进行评估,可尝试更好的方案、方法。写出设计报告,设计报告应包括所应用到的EDA方法及知识的总结。《EDA技术》42Doc.numbertobeenteredby"HeaderandFooter"D.
相关知识硬件描述语言VHDL音乐知识3.1引言
3.2VHDL的基础知识
3.3VHDL结构体的描述方式
3.4结构体的子结构形式
3.5顺序语句和并发语句
3.6VHDL中的信号和信号处理
3.7元件例化
3.8配置
硬件描述语言VHDL--目录《EDA技术》44Doc.numbertobeenteredby"HeaderandFooter"VHDL的特点:1.支持多种设计方法和技术。2.与工艺技术独立。3.多层次描述能力。4.标准化,易于共享和复用。VHDL程序的构件实体结构体程序包配置库VHDL的版本:IEEESTD1076.1987[LRM87]IEEESTD1076.1993[LRM93]3.1引言《EDA技术》45Doc.numbertobeenteredby"HeaderandFooter"3.2VHDL的基础知识《EDA技术》46Doc.numbertobeenteredby"HeaderandFooter"8位计数器ENTITYcounterISPORT(data_in:ININTEGERRANGE0TO255;
clk,ena,load,clear:INSTD_LOGIC;Count_out:OUTINTEGERRANGE0TO255);ENDcounter;
enaclkloadcleardata_incount_out实体countLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;3.2.1VHDL程序的结构《EDA技术》47Doc.numbertobeenteredby"HeaderandFooter"8位计数器的功能描述:
ARCHITECTUREbehav_countOFcounterIS
SIGNALcounter_data:INTEGERRANGE0TO255;
BEGIN
PROCESS(clk,clear,load)
BEGIN
IF(clear=‘0’)THENcounter_data=0;
ELSIF(clk‘EVENTANDclk=‘1’)THEN
IF(load=‘1’)THENcounter_data<=data_in;
ELSE
IF(ena=‘1’)THEN
IFcounter_data=255THENcounter_data<=0;
ELSEcounter_data<=counter_data+1;
ENDIF;
ELSE
counter_data<=counter_data;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
count_out<=counter_data;
ENDbehav_count;进程结构体3.2.1VHDL程序的结构《EDA技术》48Doc.numbertobeenteredby"HeaderandFooter"ENTITY实体名IS[GENERIC(类属表);][PORT(端口表);]
[实体说明部分;]
[BEGIN实体语句部分;]
END实体名;
GENERIC(端口名{,端口名}:类型名[:=初始值]{端口名{,端口名}:类型名[:=初始值]});例GENERIC(m:TIME:=3ns);
1实体(ENTITY)说明(1)类属说明3.2.1VHDL程序的结构《EDA技术》49Doc.numbertobeenteredby"HeaderandFooter"PORT(端口名{,端口名}:方向数据类型;::端口名{,端口名}:方向数据类型);端口方向实体INOUTINOUTBUFFERLINKAGE(2)端口说明3.2.1VHDL程序的结构《EDA技术》50Doc.numbertobeenteredby"HeaderandFooter"
2结构体(ARCHITECTURE)ARCHITECTURE
结构体名
OF
实体名
IS[定义语句]
BEGIN
[并行处理语句]
END
结构体名;=DQclk3.2.1VHDL程序的结构《EDA技术》51Doc.numbertobeenteredby"HeaderandFooter"
设计库IEEE库预定义库(隐含打开)STD库STANDARD(隐含说明)TEXTIO(用UES说明)WORK库资源库(用LIBRARY)其它库STD_LOGIC_1164STD_LOGIC_ARITHSTD_LOGIC_UNSIGNEDNUMERIC_STDNUMERIC_BITMATH_REALMATH_COMPLEXVITAL_TIMINGVITAL_PRIMITIVE3库(LIBRARY)3.2.1VHDL程序的结构《EDA技术》52Doc.numbertobeenteredby"HeaderandFooter"PACKAGE程序包名IS[说明语句]
END[PACKAGE][程序包名];
PACKAGEBODY程序包名IS[说明语句]
END[PACKAGEBODY][程序包名];
程序包说明程序包体4程序包(PACKAGE)3.2.1VHDL程序的结构《EDA技术》53Doc.numbertobeenteredby"HeaderandFooter"
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEupacISCONSTANTk:INTEGER:=4;TYPEinstructionIS(add,sub,adc,inc,
srf,slf,mov);SUBTYPEcpu_busISSTD_LOGIC_VECTOR(k-1DOWNTO0);ENDupac;
程序包设计举例13.2.1VHDL程序的结构《EDA技术》54Doc.numbertobeenteredby"HeaderandFooter"PACKAGEexampleISCONSTANTpi:REAL:=3.1415926;
CONSTANTdefer:INTEGER;
FUNCTIONmean(a,b,c:REAL)RETURNREAL;
COMPONENTandISGENERIC(tpd1,tpd2:TIME:=3ns);PORT(in1,in2:INBIT;y:OUTBIT);ENDCOMPONENTand;
ENDexample;
PACKAGEBODYexampleISCONSTANTdefer:INTEGER:=5;FUNCTIONmean(a,b,c:REAL)RETURNREALISBEGINRETURN(a+b+c)/3.0;ENDFUNCTIONmean;ENDPACKAGEBODYexample;
程序包体的应用3.2.1VHDL程序的结构《EDA技术》55Doc.numbertobeenteredby"HeaderandFooter"1.STANDARDD程序包
2.TEXTIO程序包
3.STD_LOGIC_1164程序包
4.NUMERICSTD和NUMERIC_BIT程序包
5.VITAL_TIMING和VITAL_PRIMITIVE程序包
6.MATH_REAL和MATH_COMPLEX程序包
STDIEEE3.2.2VHDL常用资源库中的程序包《EDA技术》56Doc.numbertobeenteredby"HeaderandFooter"1.对象常量(CONSTANT)变量(VARIABLE)
信号(SIGNAL)
文件(FILE)
(1)常量
CONSTANT常量名:数据类型∶=标达式;例如:
CONSTANTVcc:REAL∶=5.0;(2)变量
VARIABLE变量名:数据类型约束条件∶=表达式;
例:VARIABLEx:STD_LOGIC∶=’0’;
VARIABLEa,b:INTEGER;
3.2.3数据对象和类型《EDA技术》57Doc.numbertobeenteredby"HeaderandFooter"SIGNAL信号名:数据类型约束条件∶=表达式;例如:SIGNALclk:BIT∶=‘0’;除了基本信号之外,信号也用于表示不同宽度的总线,例如:
SIGNALbus_a:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALbus_b:STD_LOGIC_VECTOR(0DOWNTO7);信号在说明语句中用赋值号“:=”赋初始值,信号量用代入语句赋值,并可延时,信号量的代入:
y<=aANDb;在VHDL语言中,信号是全局量。
(3)信号3.2.3数据对象和类型《EDA技术》58Doc.numbertobeenteredby"HeaderandFooter"(1)VHDL语言所定义的标准数据类型有10个:整数类型1,-2实数类型1.2,1.2E+3位
‘0’,‘1’
位矢量“001100”,X“00BE”
布尔量真(TRUE),假(FALSE)字符
字符是用单引号括起来的字母或符号,字符区分大小写,‘A’、’a’、‘B’、’b’都是不同的字符。
字符串字符串是由双引号括起来的一个字符序列。例如:“COUNTER”、“8bit_bus”等。3.2.3数据对象和类型2.数据类型(1)VHDL语言所定义的标准数据类型(2)用户自定义的数据类型(3)用户定义的子类型(4)数据类型的转换
(5)IEEE标准数据类型“STD_LOGIC”和“STD_LOGIC_VECTOR”《EDA技术》59Doc.numbertobeenteredby"HeaderandFooter"3.2.3数据对象和类型时间类型55sec;2min。在STANDARD程序包中给出的时间预定义单位为:fs,ps,ns,μs,ms,sec,min,hr。错误等级错误等级在仿真时用于表示系统工作的状态。错误等级分为四钟:NOTE(注意)、WARING(警告)、ERROR(错误)和FAILURE(失败)。自然数(NATURAL)和正整数(POSITIVE)《EDA技术》60Doc.numbertobeenteredby"HeaderandFooter"TYPE数据类型名{,数据类型名}数据类型定义;枚举类型
TYPE数据类型名IS(元素,元素,……);例如:TYPEinstructionIS(add,sub,inc,srl,srf,
mov,dec,);3.2.3数据对象和类型(2)用户定义的数据类型
《EDA技术》61Doc.numbertobeenteredby"HeaderandFooter"
整数类型和实数类型
TYPEdigitISINTEGERRANGE0TO9;
数组
TYPE数组名ISARRAY[下标约束]OF数组元素的类型名;
TYPEword8ISARRAY(1TO8)OFBIT;TYPEword8ISARRAY(INTEGERRANGE1TO8)OFBIT;TYPEword8ISARRAY(INTEGERRANGE<>)OFSTD_LOGIC;--无界数组
TYPERAMISARRAY(1TO8,1TO10)OFBIT;--二维数组
TYPEinstructionIS(add,sub,inc,dec,srl,srf,mov,xfr);TYPEinsflagISARRAY(instructionaddTOsrf)OFSTD_LOGIC;
多维数组仅用于仿真生成硬件的抽象模型,而不能用于逻辑综合。
3.2.3数据对象和类型《EDA技术》62Doc.numbertobeenteredby"HeaderandFooter"时间类型(物理类型)TYPE数据类型名IS范围
UNITS基本单位;单位;
ENDUNITS;例如:TYPEtimeISRANGE–1E18TO1E18UNITSfs;
ps=1000fs;
ns=1000ps;us=1000ns;ms=1000us;sec=1000ms;min=60sec;hr=60min;ENDUNITS;
3.2.3数据对象和类型《EDA技术》63Doc.numbertobeenteredby"HeaderandFooter"TYPEcapacitorISRANGE0TO1E18UNITSfF;
pF=1000fF;
nF=1000pF;
uF=1000nF;mF=1000uF;F=1000mF;ENDUNITS;3.2.3数据对象和类型物理量的定义应用《EDA技术》64Doc.numbertobeenteredby"HeaderandFooter"记录是由不同类型的数据集合在一起形成的数据类型,
TYPE数据类型名ISRECODE
元素名:数据类型;元素名:数据类型;∶
ENDRECODE;记录经常用于描述总线和通讯协议。例如:
TYPEPCI_busISRECODE
Addr:STD_LOGIC_VECTOR(31DOWNTO0);
Data:STD_LOGIC_VECTOR(31DOWNTO0);
R0:INTEGER;Inst:instruction;ENDRECODE;
3.2.3数据对象和类型记录《EDA技术》65Doc.numbertobeenteredby"HeaderandFooter"文件类型是在系统环境中定义为代表文件的一类客体。其说明格式为:
TYPE文件类型名ISFILE限制;例如:TYPEtextISFILEOFstring;在TEXTIO中有两个预定义的标准文本文件:
FILEinput:textOPENread_modeIS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《焊接生产与管理》教学大纲
- 北京青年政治学院学生会学习部2012年辩响青春辩论赛策划案
- 基础业务素质真题
- 教案模板-数据库原理
- 建筑装饰施工电子教案
- 玉溪师范学院《社区工作》2023-2024学年第一学期期末试卷
- 化学实验基本技能训练(一)第二课时(教案)
- 眼镜片账务处理实例-记账实操
- 国标苏教版第十册数学全册教案
- 2019粤教版 高中美术 选择性必修6 现代媒体艺术《第一单元 认识现代媒体艺术》大单元整体教学设计2020课标
- 2023年公共营养师之三级营养师真题及答案
- 研学安全主题班会课件
- 六年级上册数学《圆的面积》教学课件-A3演示文稿设计与制作【微能力认证优秀作业】
- 派出所消防监督执法培训课件
- 儿童青少年情绪障碍课件
- 物业培训课件
- 4 15《自然资源的开发与保护》教案六年级科学上册人教版
- 小学道德和法治课程学习评价课件
- 大学生心理健康教育之新生入学适应课件
- 初中学生职业人生规划课件
- 胸痛单元建设课件
评论
0/150
提交评论