VHDL音乐播放器.doc
文本预览下载声明
洛 阳 理 工 学 院
课 程 设 计 报 告
课程名称 EDA技术与VHDL音乐播放器的设计与仿真
姓 名
完成日期 2014年12月22日
前言在本次设计中采用了作为要播放的乐曲,根据声乐知识,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果是本实验的关键。表2-1为简谱中音名与频率的对应关系乐曲演奏电路的2.3乐曲演奏电路的子结构顶层结构所包含的模块分别有模块、模块以下便是对各个子模块的分析。在此模块中设置了一个位二进制计数器(计数最大值为),这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25s,恰好为当全音符设为1s时。例如,乐曲的第一个音符为“”,此音在逻辑中停留了4个时钟节拍,即为1s时间,相应地所对应“1”音符分频预置数为在的输入端停留了1s。随着中的计数器按4Hz的时钟频率做加法计数时,乐曲就开始自然连续的演奏起来了。LIBRARY ieee;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDR IS
PORT (clk : IN STD_LOGIC;
A : BUFFER STD_LOGIC_VECTOR(8 DOWNTO 0));
END;
ARCHITECTURE ONE OF ADDR IS
BEGIN
PROCESS (clk)
BEGIN
IF (clkevent AND clk = 1)
THEN
A = A + 1;
END IF;
END PROCESS;
END;
3. 地址计数器符号图
图2.1 地址计数器符号图
4. 仿真波形图
图2.2 地址计数器波形图
图2.3 地址计数器波形图
2.3.2 乐音分频器
1. 乐音分频器模块的功能
此模块的功能首先是提供决定所发音符的分频预置数,而此数在输入端口停留的时间即为此音符的节拍值。电路中设置了乐曲全部音符所对应的分频预置数,每一音符的停留时间由音乐节拍和音调发生器模块clk输入频率决定,在此为4Hz。模块的VHDL源程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity speaker is
port(clk : in std_logic;--1mhz
TN : in std_logic_vector(3 downto 0);--乐谱编码
spks : out std_logic);
end;
architecture rts of speaker is
signal FM : std_logic;
signal count : integer range 0 to 2047;
signal temp : integer range 0 to 2048;
begin
process (TN)
begin
case TN is
when 0000 = temp=2048;
when 0001 = temp=1907;
when 0010 = temp=1699;
when 0011 = temp=1514;
when 0101 = temp=1275;
when 0110 = temp=1136;
when 0111 = temp=1011;
when 1000 = temp=955;
when 1001 = temp=851;
when 1010 = temp=758;
when 1100 = temp=637;
when 1101 = temp=567;
when 1110 = temp=505;
when 1111 = temp=477;
when others = temp=2048;
end case;
end process;
process(clk)
begin
if(clkevent and clk=1) then count=count+1;
if(count=temp) then FM=not FM;count=0;end if;
end if;
end process;
spks=FM;
end;
3. 乐音分频器符号图
图2.4 乐音分频器符号图
4. 乐音分频器波形图
图2.5 乐音
显示全部