沈阳工程学院课程设计(论文)
附 录
程序1 顶层设计 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Songer IS -- 顶层设计 PORT ( CLK12MHZ : IN STD_LOGIC; --音调频率信号 CLK8HZ : IN STD_LOGIC; --节拍频率信号 CODE1 : OUT INTEGER RANGE 0 TO 15;--音节输出 HIGH1 : OUT STD_LOGIC; --高音输出 SPKOUT : OUT STD_LOGIC );---扬声器 END;
ARCHITECTURE one OF Songer IS COMPONENT NoteTabs ---定义模块 PORT ( clk : IN STD_LOGIC;
ToneIndex : OUT INTEGER RANGE 0 TO 15 ); END COMPONENT; COMPONENT ToneTaba
PORT ( Index : IN INTEGER RANGE 0 TO 15; CODE : OUT INTEGER RANGE 0 TO 15; HIGH : OUT STD_LOGIC;
Tone : OUT INTEGER RANGE 0 TO 16#17FF# ); --13位2进制数 END COMPONENT; COMPONENT Speakera
PORT ( clk : IN STD_LOGIC;
Tone : IN INTEGER RANGE 0 TO 16#1FFF#; --13位2进制数 SpkS : OUT STD_LOGIC ); END COMPONENT;
SIGNAL Tone : INTEGER RANGE 0 TO 16#7FF#; SIGNAL ToneIndex : INTEGER RANGE 0 TO 15; BEGIN
-- 安装U1, U2, U3
- 24 -
沈阳工程学院课程设计(论文)
u1 : NoteTabs PORT MAP (clk=>CLK8HZ, ToneIndex=>ToneIndex);
u2:ToneTaba PORT MAP (Index=>ToneIndex, Tone=>Tone,CODE=>CODE1,HIGH=>HIGH1); u3 : Speakera PORT MAP(clk=>CLK12MHZ,Tone=>Tone, SpkS=>SPKOUT ); END;
------------------------------------------------------------------------------------------------------------------- 程序1 音乐节拍 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY NoteTabs IS
PORT ( clk : IN STD_LOGIC;
ToneIndex : OUT INTEGER RANGE 0 TO 15 ); END;
ARCHITECTURE one OF NoteTabs IS
SIGNAL Counter : INTEGER RANGE 0 TO 145; BEGIN
CNT8 : PROCESS(clk) BEGIN
IF Counter = 138 THEN Counter <= 0; ELSIF (clk'EVENT AND clk = '1') THEN Counter <= Counter + 1; END IF; END PROCESS;
Search : PROCESS(Counter) BEGIN
CASE Counter IS -- 译码器,查歌曲的乐谱表,查表结果为音调表的索引值
WHEN 00 => ToneIndex <= 5; WHEN 01 => ToneIndex <= 3; WHEN 02 => ToneIndex <= 5; WHEN 03 => ToneIndex <= 3; WHEN 04 => ToneIndex <= 2;
- 25 -
沈阳工程学院课程设计(论文)
WHEN 05 => ToneIndex <= 2; WHEN 06 => ToneIndex <= 2; WHEN 07 => ToneIndex <= 6; WHEN 08 => ToneIndex <= 8; WHEN 09 => ToneIndex <= 8; WHEN 10 => ToneIndex <= 8; WHEN 11 => ToneIndex <= 9; WHEN 12 => ToneIndex <= 6; WHEN 13 => ToneIndex <= 8; WHEN 14 => ToneIndex <= 5; WHEN 15 => ToneIndex <= 5; WHEN 16 => ToneIndex <= 12; WHEN 17 => ToneIndex <= 12; WHEN 18 => ToneIndex <= 12; WHEN 19 => ToneIndex <= 15; WHEN 20 => ToneIndex <= 13; WHEN 21 => ToneIndex <= 12; WHEN 22 => ToneIndex <= 10; WHEN 23 => ToneIndex <= 12; WHEN 24 => ToneIndex <= 9; WHEN 25 => ToneIndex <= 9; WHEN 26 => ToneIndex <= 9; WHEN 27 => ToneIndex <= 9; WHEN 28 => ToneIndex <= 9; WHEN 29 => ToneIndex <= 9; WHEN 30 => ToneIndex <= 9; WHEN 31 => ToneIndex <= 0; WHEN 32 => ToneIndex <= 9; WHEN 33 => ToneIndex <= 9; WHEN 34 => ToneIndex <= 9; WHEN 35 => ToneIndex <= 10; WHEN 36 => ToneIndex <= 7; WHEN 37 => ToneIndex <= 7;
- 26 -
沈阳工程学院课程设计(论文)
WHEN 38 => ToneIndex <= 6; WHEN 39 => ToneIndex <= 6; WHEN 40 => ToneIndex <= 5; WHEN 41 => ToneIndex <= 5; WHEN 42 => ToneIndex <= 5; WHEN 43 => ToneIndex <= 6; WHEN 44 => ToneIndex <= 8; WHEN 45 => ToneIndex <= 8; WHEN 46 => ToneIndex <= 9; WHEN 47 => ToneIndex <= 9; WHEN 48 => ToneIndex <= 3; WHEN 49 => ToneIndex <= 3; WHEN 50 => ToneIndex <= 8; WHEN 51 => ToneIndex <= 8; WHEN 52 => ToneIndex <= 6; WHEN 53 => ToneIndex <= 5; WHEN 54 => ToneIndex <= 6; WHEN 55 => ToneIndex <= 8; WHEN 56 => ToneIndex <= 5; WHEN 57 => ToneIndex <= 5; WHEN 58 => ToneIndex <= 5; WHEN 59 => ToneIndex <= 5; WHEN 60 => ToneIndex <= 5; WHEN 61 => ToneIndex <= 5; WHEN 62 => ToneIndex <= 5; WHEN 63 => ToneIndex <= 5; WHEN 64 => ToneIndex <= 10; WHEN 65 => ToneIndex <= 10; WHEN 66 => ToneIndex <= 10; WHEN 67 => ToneIndex <= 12; WHEN 68 => ToneIndex <= 7; WHEN 69 => ToneIndex <= 7; WHEN 70 => ToneIndex <= 9;
- 27 -
沈阳工程学院课程设计(论文)
WHEN 71 => ToneIndex <= 9; WHEN 72 => ToneIndex <= 6; WHEN 73 => ToneIndex <= 8; WHEN 74 => ToneIndex <= 5; WHEN 75 => ToneIndex <= 5; WHEN 76 => ToneIndex <= 5; WHEN 77 => ToneIndex <= 5; WHEN 78 => ToneIndex <= 5; WHEN 79 => ToneIndex <= 5; WHEN 80 => ToneIndex <= 3; WHEN 81 => ToneIndex <= 5; WHEN 82 => ToneIndex <= 3; WHEN 83 => ToneIndex <= 3; WHEN 84 => ToneIndex <= 5; WHEN 85 => ToneIndex <= 6; WHEN 86 => ToneIndex <= 7; WHEN 87 => ToneIndex <= 9; WHEN 88 => ToneIndex <= 6; WHEN 89 => ToneIndex <= 6; WHEN 90 => ToneIndex <= 6; WHEN 91 => ToneIndex <= 6; WHEN 92 => ToneIndex <= 6; WHEN 93 => ToneIndex <= 6; WHEN 94 => ToneIndex <= 5; WHEN 95 => ToneIndex <= 6; WHEN 96 => ToneIndex <= 8; WHEN 97 => ToneIndex <= 8; WHEN 98 => ToneIndex <= 8; WHEN 99 => ToneIndex <= 9; WHEN 100 => ToneIndex <= 12; WHEN 101 => ToneIndex <= 12; WHEN 102 => ToneIndex <= 12; WHEN 103 => ToneIndex <= 10;
- 28 -