实验十一电子琴电路设计 1.实验目的 学习利用数控分频器设计硬件电子琴。 2.实验原理 主系统由3个模块组成,例3是顶层设计文件,其内部由两个功能模块(如图1-所示): TONE.VHD(例2)和SPEAKER VHD(例I)。 模块TONE是音阶发生器,当8位发生控制输入NDEXZHONG中某一位为高电平时, 则对应某一音阶的数值将从端口TONE输出,作为获得该音阶的分频预置值:同时由CODE 输出对应该音阶简谱的 示数码,如“5 并由HⅢGH输出指示音节高8度显示。由例 可见,其语句结构只是类似与真值表的纯组合电路描述,其中的音阶分频预置值,例 Tone∝=l290是根据产生该音阶频率所对应的分频比获得的。 模块SPEAKER中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器 构成,。当模块SPEAKER由端口TONE获得一个2进制数后,将以此值为计数器的预置数, 对端口CLK12M业输入的频率进行分频,之后由SPEAKER向扬声器输出发声, 例1 SPEAKER数控分颜器设计。 源程序: Library ieee; Use iece.std_logic_1164.all; Entity speaker Port(clkl:in std_logic: Tonel:in integer range 0 to 16#7FF#; spks:out std logic; End: Architecture rtl of speaker is Signal preclk,fullspks:std logie. begin divideclk:Proces(clk1) variable count4:integer range 0 to 15; Begin preclks='0'. if count4>11 then preclk<= ount4:-0: elsif(clkl'event and clkl='1)then count4:=count4+1; end if. end process genspks:process(preclk,tonel)
实验十一 电子琴电路设计 1.实验目的 学习利用数控分频器设计硬件电子琴。 2.实验原理 主系统由 3 个模块组成,例 3 是顶层设计文件,其内部由两个功能模块(如图 11-所示): TONE.VHD(例 2)和 SPEAKER.VHD(例 1)。 模块 TONE 是音阶发生器,当 8 位发生控制输入 INDEXZHONG 中某一位为高电平时, 则对应某一音阶的数值将从端口 TONE 输出,作为获得该音阶的分频预置值;同时由 CODE 输出对应该音阶简谱的显示数码,如“5”,并由 HIGH 输出指示音节高 8 度显示。由例 2 可见,其语句结构只是类似与真值表的纯组合电路描述,其中的音阶分频预置值,例 Tone<=1290 是根据产生该音阶频率所对应的分频比获得的。 模块 SPEAKER 中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器 构成,。当模块 SPEAKER 由端口 TONE 获得一个 2 进制数后,将以此值为计数器的预置数, 对端口 CLK12MHz 输入的频率进行分频,之后由 SPEAKER 向扬声器输出发声。 例 1 SPEAKER 数控分频器设计。 源程序: Library ieee; Use ieee.std_logic_1164.all; Entity speaker is Port(clk1:in std_logic; Tone1:in integer range 0 to 16#7FF#; spks:out std_logic; ); End; Architecture rtl of speaker is Signal preclk,fullspks: std_logic; begin divideclk:Process(clk1) variable count4:integer range 0 to 15; Begin preclk<=’0’; if count4 >11 then preclk<=’1’; count4:=0; elsif( clk1'event and clk1='1')then count4:=count4+1; end if; end process; genspks:process(preclk,tone1)
variable count11:integer range 0 to 16#7FF#; Begin if count11=16#7FF#then countll:=tonel: fullspks<=*1'; else count:coun+ fulIspks-0 end if. end if; end process, variable count2:std logic. begin if fullspks'event and fullspks='1'then count2:=not count2: if count2='l'then spks<='1' else pks<=0】 end if. end if: end process; End 例2TONE音阶发生器设计 源程序: Library ieee. Use ieee.std logic_1164.all; Entity tone is Port(index:in std_logic_vector(7 downto 0). code:out integer range 0 to 15; high:out std_logic; tonel:out integer range 0 to 16#7ff# End; Architecture rtl of tone is begin search:Process(index) Begin Case index is When 00000001"=>tone<=773;code<=1:high<='0'; When“00000010=>tone<-912:code<-2:high<='0': When“00000100"=>tone<=1036:code<=3:high<='0
variable count11:integer range 0 to 16#7FF#; Begin if ( preclk'event and preclk='1')then if count11=16#7FF# then count11:=tone1; fullspks<=’1’; else count11:=count11+1; fullspks<=’0’; end if; end if; end process; delayspks:process(fullspks) variable count2:std_logic; begin if fullspks’event and fullspks=’1’ then count2:=not count2; if count2=’1’ then spks<=’1’; else spks<=’0’; end if; end if; end process; End; 例 2 TONE 音阶发生器设计。 源程序: Library ieee; Use ieee.std_logic_1164.all; Entity tone is Port(index:in std_logic_vector(7 downto 0); code:out integer range 0 to 15; high:out std_logic; tone1:out integer range 0 to 16#7ff# ); End; Architecture rtl of tone is begin search:Process(index) Begin Case index is When “00000001”=>tone<=773;code<=1;high<=’0’; When “00000010”=>tone<=912;code<=2;high<=’0’; When “00000100”=>tone<=1036;code<=3;high<=’0’;
when“00001000"=>tone=1116:code=4:high<='0' When “00010000=>tone1197,code<=5,.high<'0' Wher “00100000=>tone=1290code<=6,high='0 When“01000000"=>tone=1372:code<=7:high<='0' When "10000000"=>tone<=1410;code<=1;high<='1', When others=>tone<=2047.code<=0:high<='0' End case. end process. End; 例3电子琴顶层文件设计。 源程序: Library ieee: Use ieee.std_logic_1164.all; Entity top is Port(clk12MHzin std_logic; Indexl:in std_logie_vector(7 downto 0). code:ou range 0 to 15; high:out std_logic End; Architecture rtl of top is Component Port(index:in std logic vector(7 downto 0); code:out integer range 0 to 15. high out std logic. tone:out integer range 0 to 16#7FF#); Component speaker Port(clkl:in std_logic; Tonel:in integer range 0 to 16#7FF#; spks:out std_logic): end com signal tone2:integer range 0 to 16#7FF# begin ul:tone port map(index=>indexl,tone=>tone2, code=>codel.high=>high1): u2:speaker port map(clkI=>clk12MHz.tonel=>tone2. spks->spkout): End; 3.实验内容 3.1编译适配以上3个示例文件,给出仿真波形,最后进行下载和硬件测试实验
When “00001000”=>tone<=1116;code<=4;high<=’0’; When “00010000”=>tone<=1197;code<=5;high<=’0’; When “00100000”=>tone<=1290;code<=6;high<=’0’; When “01000000”=>tone<=1372;code<=7;high<=’0’; When “10000000”=>tone<=1410;code<=1;high<=’1’; When others=>tone<=2047;code<=0;high<=’0’; End case; end process; End; 例 3 电子琴顶层文件设计。 源程序: Library ieee; Use ieee.std_logic_1164.all; Entity top is Port(clk12MHz:in std_logic; Index1:in std_logic_vector(7 downto 0); code:out integer range 0 to 15; high:out std_logic ); End; Architecture rtl of top is Component tone Port(index:in std_logic_vector(7 downto 0); code:out integer range 0 to 15; high:out std_logic; tone:out integer range 0 to 16#7FF#); end component; Component speaker Port(clk1:in std_logic; Tone1:in integer range 0 to 16#7FF#; spks:out std_logic); end component; signal tone2: integer range 0 to 16#7FF#; begin u1:tone port map(index=>index1,tone=>tone2, code=>code1,high=>high1); u2:speaker port map(clk1=>clk12MHz,tone1=>tone2, spks=>spkout); End; 3.实验内容 3.1 编译适配以上 3 个示例文件,给出仿真波形,最后进行下载和硬件测试实验
3.2在原设计的基础上,增加一个NOT正TABS模块(如图12-所示),用于产生节拍 控制(INDEX数据存留时间)和音阶选择信号,即在NOTETABS模块放置一个乐曲曲谱真 一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐 值表,风可个吸的东演泰定取收武,报 EDA实验系统上的FPGA目标器件中实现。 3.3利用核LPM_ROM和FPGA中的EAB设计一个ROM,用于存储演奏歌曲的曲谱, 重新设计此实验,争取可以在一个ROM装上多首歌曲 4.注意事项 电路工作之前应进行初始化 5.预习要求 (1)完成实验内容。的电路设计任务。 (2)分析本实验例1中的进程delayspks对扬声器的影响。 (3)分析怎样用数字器件直接输出的方波驱动扬声器发生 6.实验报告 用仿真波形和电路原理图,详细叙述硬件电子琴的工作原理及其3个VHDL文件中项关 语句的功能,叙述硬件实验情况,提出硬件乐曲演奏电路的设计和实验方案
3.2 在原设计的基础上,增加一个 NOTETABS 模块(如图 12-所示),用于产生节拍 控制(INDEX 数据存留时间)和音阶选择信号,即在 NOTETABS 模块放置一个乐曲曲谱真 值表,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐 曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。完成此项设计,并在 EDA 实验系统上的 FPGA 目标器件中实现。 3.3 利用核 LPM_ROM 和 FPGA 中的 EAB 设计一个 ROM,用于存储演奏歌曲的曲谱, 重新设计此实验,争取可以在一个 ROM 装上多首歌曲。 4.注意事项 电路工作之前应进行初始化。 5.预习要求 (1)完成实验内容。的电路设计任务。 (2)分析本实验例 1 中的进程 delayspks 对扬声器的影响。 (3)分析怎样用数字器件直接输出的方波驱动扬声器发生。 6.实验报告 用仿真波形和电路原理图,详细叙述硬件电子琴的工作原理及其 3 个 VHDL 文件中项关 语句的功能,叙述硬件实验情况,提出硬件乐曲演奏电路的设计和实验方案