END ART;
附录4:顶层设计源程序清单
--程序名称:DIANZIQIN.VHD
--程序功能:采用VHDL语言编写主程序调用3个子程序,实现乐曲演奏的功能。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DIANZIQIN IS
PORT(CLK32MHZ: IN STD_LOGIC; --系统时钟信号
HANDTOAUTO: IN STD_LOGIC; --键盘输入/自动演奏信号 CODE1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --音符显示信号 INDEX1: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘输入信号 HIGH1: OUT STD_LOGIC; --高低音节信号 SPKOUT: OUT STD_LOGIC); --音频信号 END;
ARCHITECTURE ART OF DIANZIQIN IS
COMPONENT AUTO --引用 AUTO元件 PORT(CLK: IN STD_LOGIC;
AUTO: IN STD_LOGIC; --输入自动演奏信号 INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --输入8位控制信号 INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --输出8位的音符 END COMPONENT;
COMPONENT TONE --引用TONE元件 PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0); CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); HIGH: OUT STD_LOGIC;
TONE0: OUT INTEGER RANGE 0 TO 2047); END COMPONENT;
COMPONENT FENPIN --引用FENPIN元件 PORT(CLK1: IN STD_LOGIC;
TONE1: IN INTEGER RANGE 0 TO 2047; SPKS: OUT STD_LOGIC); END COMPONENT;
SIGNAL TONE2:INTEGER RANGE 0 TO 2047; --定义主程序音调频率信号 SIGNAL INDX:STD_LOGIC_VECTOR(7 DOWNTO 0); --定义8位的音符信号 BEGIN U0:AUTO PORT MAP(CLK=>CLK32MHZ,INDEX2=>INDEX1,INDEX0=>INDX,AUTO=>HANDTOAUTO); --调用自动演奏模块 U1:TONE PORT
MAP(INDEX=>INDX,TONE0=>TONE2,CODE=>CODE1,HIGH=>HIGH1); --调用音调发
生模块
U2:FENPIN PORT MAP(CLK1=>CLK32MHZ,TONE1=>TONE2,SPKS=>SPKOUT); END ART; --调用数控分频模块