《应用VHDL设计数字系统-电子琴和音乐播放器的设计.ppt》由会员分享,可在线阅读,更多相关《应用VHDL设计数字系统-电子琴和音乐播放器的设计.ppt(24页珍藏版)》请在三一办公上搜索。
1、EDA技术及其应用,第4章 应用VHDL设计数字系统,项目1:电子琴的设计,设计目标:设计一个电子琴,具有8个按键,当按下某一个按键的时候,能够演奏8个音符之一:1、2、3、4、5、6、7、H1视频演示知识点:熟练掌握计数器的设计方法;熟练掌握可变分频器的设计方法;熟练掌握IF语句的使用;熟练掌握CASE语句的使用;,项目1:电子琴的设计,项目分析:设计问题:如何发出不同音调的声音?,需要:可变分频器(数控分配器),项目1:电子琴的设计,项目1:电子琴的设计,项目分析:设计关键1:可变分频器(数控分配器)!,项目1:电子琴的设计,LIBRARY IEEE;USE IEEE.STD_LOGIC_
2、1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT(CLK,RST,EN:IN STD_LOGIC;CNT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT10;,知识回顾:10进制计数器设计,项目1:电子琴的设计,ARCHITECTURE behav OF CNT10 ISBEGIN PROCESS(CLK,RST,EN)VARIABLE CNTI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN IF RST=1 THEN CN
3、TI:=(OTHERS=0);-计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN-检测时钟上升沿 IF EN=1 THEN-检测是否允许计数(同步使能)IF CNTI 0);-大于等于9,计数值清零 END IF;END IF;END IF;IF CNTI=9 THEN COUT=1;-计数等于9,输出进位信号 ELSE COUT=0;END IF;CNT=CNTI;-将计数值向端口输出 END PROCESS;END behav;,知识回顾:10进制计数器设计,仿真结果:10进制计数器设计,结论:计数器就可以完成分频器的任务!,项目1:电子琴的设计,项目1:电子琴的
4、设计,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT_N IS PORT(CLK,RST,EN:IN STD_LOGIC;N:IN STD_LOGIC_VECTOR(11 DOWNTO 0);CNT:OUT STD_LOGIC_VECTOR(11 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT_N;,设计关键:N进制计数器设计可变分频器,项目1:电子琴的设计,ARCHITECTURE behav OF CNT_N ISBEGIN PROCESS(C
5、LK,RST,EN)VARIABLE CNTI:STD_LOGIC_VECTOR(11 DOWNTO 0);BEGIN IF RST=1 THEN CNTI:=(OTHERS=0);-计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN-检测时钟上升沿 IF EN=1 THEN-检测是否允许计数(同步使能)IF CNTI 0);-大于等于N-1,计数值清零 END IF;END IF;END IF;IF CNTI=N-1 THEN COUT=1;-计数等于N-1,输出进位信号 ELSE COUT=0;END IF;CNT=CNTI;-将计数值向端口输出 END PROCE
6、SS;END behav;,设计关键:N进制计数器设计可变分频器,设计关键:N进制计数器设计可变分频器,结论:COUT实现了N分频,但是占空比是1/N,能量不足,无法驱动蜂鸣器工作。,N分频,占空1/N,项目1:电子琴的设计,项目1:电子琴的设计,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT_N IS PORT(CLK,RST,EN:IN STD_LOGIC;N:IN STD_LOGIC_VECTOR(11 DOWNTO 0);CNT:OUT STD_LOGIC_VECTO
7、R(11 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT_N;,设计关键:改进的N进制计数器可变分频器,COUT占空比50%,项目1:电子琴的设计,ARCHITECTURE behav OF CNT_N ISBEGIN PROCESS(CLK,RST,EN)VARIABLE CNTI:STD_LOGIC_VECTOR(11 DOWNTO 0);BEGIN IF RST=1 THEN CNTI:=(OTHERS=0);-计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN-检测时钟上升沿 IF EN=1 THEN-检测是否允许计数(同步使能)IF
8、 CNTI 0);-大于等于N/2,计数值清零 END IF;END IF;END IF;IF CNTI CONV_INTEGER(N)/2 THEN COUT=0;ELSE COUT=1;END IF;CNT=CNTI;COUT=COUTI;-将计数值向端口输出 END PROCESS;END behav;,设计关键:改进的N进制计数器可变分频器,COUT占空比50%,IF CNTI=N-1 THEN COUT=1;-计数等于N-1,输出进位信号 ELSE COUT=0;END IF;,占空比非50%,占空比接近50%,结论:COUT实现了N分频,当N比较大时,占空比是接近50%,能量足以驱
9、动蜂鸣器工作。,设计关键:改进的N进制计数器可变分频器,COUT占空比50%,项目1:电子琴的设计,项目1:电子琴的设计,项目分析:设计关键2:向可变分频器(数控分配器)提供分频数字,需要一个“频率”到“分频数”的转换模块。,项目1:电子琴的设计,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY converter IS PORT(key:IN STD_LOGIC_VECTOR(7 DOWNTO 0);en:OUT STD_LOGIC;div_num:OUT integer range
10、 0 to 4095;CODE:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH:OUT STD_LOGIC);END entity converter;,设计关键2:“频率”到“分频数”的转换模块。,项目1:电子琴的设计,ARCHITECTURE one OF converter IS BEGIN PROCESS(converter)BEGIN CASE key IS-译码电路,查表方式,控制音调的预置数 WHEN 00000000=div_num div_num div_num div_num div_num div_num div_num div_num div
11、_num div_num=0;en=0;CODE=0000;HIGH=0;-同时按多个键,0Hz,不响 END CASE;END PROCESS;END one;,设计关键2:“频率”到“分频数”的转换模块。,项目1:电子琴的设计,设计关键2:“频率”到“分频数”的转换模块。,设计关键3:在顶层原理图中组装各个功能模块。,项目1:电子琴的设计,项目1:电子琴的设计总结,知识点回顾:IF语句的使用;CASE语句的使用;计数器的设计;可变分频器的设计;,项目1:电子琴的设计总结,知识点回顾:IF语句的使用;IF语句既可以描述组合电路,也可以描述时序电路;完整条件IF语句用来描述组合电路;,IF s
12、=0 THEN y=a;ELSE y=b;END IF;,IF CLKEVENT AND CLK=1 THEN CNT=CNT+1;END IF;,不完整条件IF语句用来描述时序电路;,项目1:电子琴的设计总结,知识点回顾:CASE语句的使用;CASE语句最适合于描述译码器电路;不完整的CASE语句会生成不必要的锁存器;,CASE key IS-译码电路,查表方式,控制音调的预置数 WHEN 00000000=div_num div_num div_num div_num div_num div_num div_num div_num div_num div_num=0;en=0;CODE=0000;HIGH=0;-同时按多个键,0Hz,不响 END CASE;,项目1:电子琴的设计总结,知识点回顾:计数器的设计;可变分频器的设计;,项目2:课后练习,音乐播放器的设计,设计目标:设计一个音乐播放器,具有“开始播放”、“暂停播放”和“停止播放”3个按键;当按下“开始播放”按键的时候,能够重新开始演奏一首动听的乐曲;当按下“暂停播放”按键的时候能够在暂停演奏和继续演奏之间切换;当按下“停止播放”按键的时候能够中止播放。,