1、= 1290是根据产生该音阶频率所对应的分频比获得的。简易电子琴电路结构模块SPEAKER中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块SPEAKER由端口TONE获得一个2进制数后,将以此值为计数器的预置数,对端口CLK12MHZ输入的频率进行分频,之后由SPKOUT向扬声器输出发声。模块NOTETABS,用于控制音乐的暂停与播放,产生节拍控制(INDEX数据存留时间)和音阶选择信号,即在NOTETABS模块放置一个乐曲曲谱真值表,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。试
2、完成此项设计,并在EDA实验系统上的FPGA目标器件中实现之。5、实验内容:编译适配以上4个示例文件,给出仿真波形,最后进行下载和硬件测试实验。建议使用实验电路模式“3”,用短路帽选择“CLOCK9”的输入频率选择12MHz,此信号作为系统输入信号CLK12MHZ;CLK8HZ与clock2相接,接受4Hz频率;键盘按键0-7作为输入信号控制各音阶。3、实验代码enc16_4library ieee ; use ieee.std_logic_1164.all ; entity enc16_4 is port ( I : in std_logic_vector(7 downto 0);-输入的待
3、编码信号 Y : out std_logic_vector(3 downto 0) ;-编码输出 end enc16_4;architecture one of enc16_4 isSIGNAL L: STD_LOGIC_VECTOR(7 DOWNTO 0); begin Search : PROCESS(I) CASE I IS WHEN 01101100 = Y0000 END CASE; end process ; end one ;ToneLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTI
4、TY Tone IS PORT ( Index : IN STD_LOGIC_VECTOR(3 DOWNTO 0); CODE : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); HIGH : OUT STD_LOGIC; Tone : OUT STD_LOGIC_VECTOR(10 DOWNTO 0);END;ARCHITECTURE one OF Tone ISBEGIN PROCESS(Index) BEGIN CASE Index IS - 译码电路,查表方式,控制音调的预置数 WHEN Tone = CONV_STD_LOGIC_VECTOR(2047,11);-
5、CONV_STD_LOGIC_VECTOR(139,11); CODE = CONV_STD_LOGIC_VECTOR(1,4);HIGH = 0= CONV_STD_LOGIC_VECTOR(347,11);CODE = CONV_STD_LOGIC_VECTOR(2,4); HIGH = CONV_STD_LOGIC_VECTOR(533,11);= CONV_STD_LOGIC_VECTOR(3,4);= CONV_STD_LOGIC_VECTOR(615,11);= CONV_STD_LOGIC_VECTOR(4,4);= CONV_STD_LOGIC_VECTOR(773,11);=
6、 CONV_STD_LOGIC_VECTOR(5,4);= CONV_STD_LOGIC_VECTOR(912,11); CODE = CONV_STD_LOGIC_VECTOR(0,4); HIGH END PROCESS;PS2VHDL- VHDL library Declarations USE IEEE.STD_LOGIC_UNSIGNED.ALL;- The Entity Declarations ENTITY PS2VHDL IS PORT(ClkFilter: IN STD_LOGIC;-1MHzRESET: IN STD_LOGIC;KBDATA:KBCLK:EOC:PDATA
7、: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END PS2VHDL;- The Architecture of Entity Declarations ARCHITECTURE Behavioral OF PS2VHDL ISSIGNAL spdata: STD_LOGIC_VECTOR(10 DOWNTO 0);SIGNAL TT: STD_LOGIC;SIGNAL cnt8: INTEGER RANGE 0 TO 10;BEGIN- Optimize PROCESS( RESET, KBCLK, ClkFilter )VARIABLE Count : STD_LO
8、GIC_VECTOR(3 DOWNTO 0);IF(RESET = OR KBCLK = )THEN TT );ELSIF( ClkFilterEVENT AND ClkFilter = ) THEN IF( Count ) THEN = Count + 1; TT ELSE= END IF;END PROCES- Recevie Recevie: PROCESS( RESET, TT, KBDATA, spdata, cnt8 )IF RESET = THEN cnt8 = 0; spdata ELSIF TTevent AND TT = IF( cnt8 10 ) THEN spdata(
9、cnt8) = KBDATA;= cnt8 + 1;ELSE END PROCESS;- End of recevie PROCESS( RESET, cnt8 )THEN EOC ELSIF cnt8 /= 0 ELSE EOC -PDATA = spdata( 8 downto 1 );END Behavioral;clkdiv10-占空比为1:1的任意偶数倍分频Library IEEE;Use IEEE.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity clkdiv10 is Port( clk: in std_logic
10、; clk_out: out std_logic);end clkdiv10;architecture arch of clkdiv10 issignal count : integer range 0 to 49; -分频倍数-1beginprocess (clk) -分频器 if clkevent and clk= then if count=counthigh then count=0; else countcounthigh/2 then clk_out= else clk_out-count_out PULSE12ENTITY PULSE12 IS PORT ( CLK : D :
11、IN STD_LOGIC_VECTOR(10 DOWNTO 0); FOUT : OUT STD_LOGIC );ARCHITECTURE one OF PULSE12 ISSIGNAL FULL :SIGNAL CNT8 :SIGNAL CNT2 :P_REG: PROCESS(CLK) BEGIN IF CLKEVENT AND CLK = THEN IF CNT8 = 11111111111 CNT8 = D; -当CNT8计数计满时,输入数据D被同步预置给计数器CNT8 FULL -同时使溢出标志信号FULL输出为高电平 ELSE = CNT8 + 1; -否则继续作加1计数 -且输出溢出标志信号FULL为低电平 END IF; END PROCESS P_REG ; P_DIV: PROCESS(FULL) IF FULLEVENT AND FULL = CNT2 = NOT CNT2; -如果溢出标志信号FULL为高电平,D触发器输出取反END PROCESS P_DIV ;FOUT = CNT2;4、实验总结 通过本次实验,使我对使用VHDL编写模块来实现音乐播放有了更深一步的了解,在本次实验中,在原先的基础上加入了播放暂停的功能,并更换了歌曲。使仿真更具有功能性,并且更加熟悉了利用数控分频器设计硬件,受益匪浅。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1