VHDL音乐播放器
EDA2

EDA设计(二)课程设计报告南京理工大学2015 年月目录1 引言 (2)2 系统总体设计 (2)2.1 系统功能概述 (2)2.2 系统总体组成结构 (2)3 系统各组成模块详细设计 (3)3.1 地址发生器模块 (3)3.2 分频预置数模块 (4)3.3 分频模块 (5)4 系统调试 (7)4.1 系统仿真调试 (7)4.2 系统实际验证 (8)4.3 调试程序遇到的问题及解决方法 (8)5 总结与体会心得 (8)6 参考文献 (9)1 引言电子设计自动化技术(Electronic Design Automation,EDA)已经成为现代电子设计技术的核心。
EDA技术就是依赖功能强大的计算机,在EDA工具平台上,对以硬件描述语言(HDL)为系统逻辑描述手段完成的设计文件,自动的完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至下载到可编程逻辑器件CPLD/FPGA或专用集成电路ASIC芯片中。
硬件描述语言(HDL)是EDA技术的重要组成部分,其中VHDL语言应用广泛,是电子设计主流硬件的描述语言之一,它以强大的系统描述能力、规范的程序设计结构、灵活的语句表达风格和多层次的仿真测试手段,受到了业界的普遍认同和广泛接受。
本设计采用SE-5M 型EDA 实验开发系统,以Altera 公司的MAX+PLUS II 为开发软件,用VHDL语言采用自顶向下的设计方法,实现了一个音乐播放器,实现播放完整曲目的动能。
2 系统总体设计2.1 系统功能概述本文设计的数字系统是一个音乐播放器,其主要功能如下:(1)对系统时钟频率进行分频,可以发出高音、中音、低音区任意的音符。
(2)可以播放完整的曲目《怒放的生命》,此外,也可以输入其他乐谱,演奏相应的曲目。
2.2系统总体组成结构系统由地址发生器模块、分频预置数模块、分频模块3个模块构成。
硬件电路的发生原理是利用程序来控制FPGA某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。
(完整word版)基于VHDL的简易音乐播放器

EDA技术实用教程课程设计简易音乐播放器电子12-11206040124简易音乐播放器设计1.MIDI概述MIDI(Musical Instrument Digital Interface)乐器数字接口,是20 世纪80 年代初为解决电声乐器之间的通信问题而提出的。
MIDI是编曲界最广泛的音乐标准格式,可称为“计算机能理解的乐谱”。
它用音符的数字控制信号来记录音乐.一首完整的MIDI音乐只有几十KB大,而能包含数十条音乐轨道。
MIDI应用也比较广泛,电视晚会的音乐编导可以用MIDI功能辅助音乐创作,或按MIDI标准生成音乐数据传播媒介,或直接进行乐曲演奏.如果在计算机上装备了高级的MIDI软件库,可将音乐的创作、乐谱的打印、节目编排、音乐的调整、音响的幅度、节奏的速度、各声部之间的协调、混响由MIDI来控制完成.利用MIDI技术将电子合成器、电子节奏机(电子鼓机)和其他电子音源与序列器连接在一起即可演奏模拟出气势雄伟、音色变化万千的音响效果,又可将演奏中的多种按键数据存储起来,极大的改善了音乐演奏的能力和条件。
2.工作原理MIDI 音乐是Windows下的一种合成音乐,由于它通过记谱的方式来记录一段音乐.因此与wave音乐相比,它可以极大的减少存储容量。
MIDI 音乐的基本原理为:组成乐曲的每一个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和每一个频率信号持续时间,就可以使扬声器发生连续的乐曲。
图1 是歌曲《生日快乐歌》开头一句的简谱。
由图1 可知,该乐典涉及:中音5,6 ,7 ;高音1,2,3,4,5 .以此为例下面介绍在本音乐发生器芯片中音乐的形成过程。
前两个音符为中音5 ,1/16 音符,它对应的编码为1000 ,所占的脉冲个数为2 ,这样逐个将以上的简谱翻译成代码如下:|1000 1000 1001 1001 1000 1000 |1011 1011 1010 1010 1010 1010||1000 1000 1001 1001 1000 1000 |1100 1100 1011 1011 1011 1011||1000 1000 1111 1111 1101 1101 |1011 1011 1010 1010 1001 1001||1110 1110 1101 1101 1011 1011 |1100 1100 1011 1011 1011 1011|图1 《生日快乐歌》歌谱在节奏时钟脉冲的控制下,将每个代码所对应的分频系数逐一赋给基频,得到对应的音调,这样连续起来就形成一段美妙的音乐。
基于FPGA的音乐播放器的设计

目录引言 (1)1 VHDL及QUARTUSII软件简介 (2)1.1EDA简介 (2)1.2硬件描述语言VHDL (2)1.3软件介绍 (3)2 简易音乐演奏器设计 (5)2.1硬件电路设计 (5)2.2软件代码设计 (6)2.2.1音符储存单元 (6)2.2.2选择播放模式及手动模块单元 (6)2.2.3分频模块单元 (8)2.2.4预置数模块单元 (9)2.2.5音频发声模块单元 (10)3引脚锁定及下载 (10)3.1引脚锁定 (10)3.2结果分析 (11)4设计总结 (11)参考文献 (116)附录 (16)引言VHDL语言是一种用于电路设计的高级语言。
它在80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。
随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLD/FPGA的出现,给设计人员带来了诸多方便。
利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。
突出了其作为硬件描述语言的良好的可读性、可移植性和易读性等优点。
本文基于FPGA开发系统,在QuartusII 7.2软件平台上,完成了简易乐曲演奏器设计和与仿真,并下载到试验箱进行硬件实现。
首先,本文介绍了QuartusII 7.2软件的基本使用方法和VHDL硬件描述语言的特点,采用VHDL 硬件描述语言描述简易信号发生器,完成对电路的功能仿真。
在设计过程中,重点探讨了简易乐曲演奏设计思路和功能模块划分。
然后,初步探讨了电路逻辑综合的原理,该软件对简易乐曲演奏器进行了逻辑综合。
最后,使用EDA实验开发系统进行电路的下载和验证。
验证结果表明设计的简易乐曲演奏器完成了预期的功能。
本设计是采用VHDL来实现的简易乐曲演奏器。
它能实现自动播放和手动播放。
1 VHDL及QuartusII软件简介1.1 EDA简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
第4章应用VHDL设计数字系统-电子琴和音乐播放器的设计

CLK
IF EN = '1' THEN
--检测是否允许计数(同步使能)
IF CNTI < 9 THEN --检测是否小于9
RST
CNTI := CNTI + 1; --小于9,允许加1计数
EN
ELSE
CNTI := (OTHERS =>‘0’); --大于等于9,计数值清零 END IF;
inst
END IF;
END IF;
IF CNTI = 9 THEN COUT <= ‘1’; --计数等于9,输出进位信号
ELSE COUT <= '0';
END IF;
CNT <= CNTI; --将计数值向端口输出
END PROCESS;
END behav;
CNT[3..0] COUT
项目1:电子琴的设计
仿真结果:10进制计数器设计
结论: 计数器就可以完成分频器的任务!
项目1:电子琴的设计
设计关键:N进制计数器设计——可变分频器
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
CNT_N CLK
RST
ENTITY CNT_N IS PORT (
CNT[11..0] COUT
项目1:电子琴的设计
设计关键:N进制计数器设计——可变分频器
ARCHITECTURE behav OF CNT_N IS
BEGIN
PROCESS(CLK, RST, EN)
VARIABLE CNTI : STD_LOGIC_VECTOR(11 DOWNTO 0);
vhdl实验报告--蜂鸣器

vhdl实验报告--蜂鸣器VHDL 实验报告蜂鸣器一、实验目的本次实验的主要目的是通过使用 VHDL 语言来设计并实现一个蜂鸣器的控制电路,深入理解数字电路的设计原理和 VHDL 编程的基本方法,掌握硬件描述语言在实际电路设计中的应用,提高自己的逻辑思维和问题解决能力。
二、实验原理蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电。
常见的蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。
有源蜂鸣器内部自带了振荡源,只要给其供电就能发出固定频率的声音;无源蜂鸣器则需要外部提供一定频率的脉冲信号才能发声。
在本实验中,我们使用 VHDL 语言来控制一个无源蜂鸣器。
通过编写代码,生成特定频率的脉冲信号,从而驱动蜂鸣器发声。
三、实验设备及工具1、计算机2、 Quartus II 软件3、开发板四、实验内容及步骤1、设计思路首先,需要确定蜂鸣器发声的频率。
通过计算得出所需的时钟周期数。
然后,使用计数器来产生特定频率的脉冲信号。
最后,将脉冲信号输出到蜂鸣器的控制引脚。
2、 VHDL 代码编写```vhdllibrary ieee;use ieeestd_logic_1164all;use ieeenumeric_stdall;entity buzzer_control isport(clk : in std_logic;rst : in std_logic;buzzer : out std_logic);end entity;architecture Behavioral of buzzer_control isconstant CLK_FREQ : integer := 50_000_000; 系统时钟频率constant BUZZER_FREQ : integer := 1000; 蜂鸣器发声频率signal counter : integer range 0 to CLK_FREQ/BUZZER_FREQ 1; signal clk_div : std_logic;beginprocess(clk, rst)beginif rst ='1' thencounter <= 0;clk_div <='0';elsif rising_edge(clk) thenif counter = CLK_FREQ/BUZZER_FREQ 1 thencounter <= 0;clk_div <= not clk_div;elsecounter <= counter + 1;end if;end if;end process;buzzer <= clk_div;end architecture;```3、编译与仿真将编写好的 VHDL 代码在 Quartus II 软件中进行编译。
fpga音乐播放器课程设计

fpga音乐播放器课程设计一、课程目标知识目标:1. 让学生掌握FPGA基础知识,理解FPGA的内部结构和编程原理;2. 帮助学生了解音乐播放器的原理,掌握数字信号处理基础知识;3. 使学生能够运用Verilog或VHDL等硬件描述语言设计简单的FPGA音乐播放器。
技能目标:1. 培养学生动手实践能力,能够独立完成FPGA音乐播放器的设计、编程、调试与验证;2. 提高学生团队协作能力,能够在小组合作中发挥个人优势,共同完成项目任务;3. 培养学生解决问题和分析问题的能力,能够针对实际问题提出合理的解决方案。
情感态度价值观目标:1. 激发学生对电子设计和硬件编程的兴趣,培养良好的学习习惯;2. 培养学生勇于尝试、敢于创新的精神,增强自信心;3. 培养学生具备良好的沟通能力和团队协作精神,提高综合素质。
分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 掌握FPGA基本原理,能够描述FPGA内部结构和编程方法;2. 学会使用硬件描述语言Verilog或VHDL编写简单的FPGA程序;3. 理解音乐播放器的基本原理,能够运用数字信号处理知识设计音乐播放器;4. 完成一个简易的FPGA音乐播放器设计项目,具备实际操作和调试能力;5. 在项目实践中,提高团队协作、沟通表达和问题解决能力。
二、教学内容1. FPGA基本原理及编程方法:包括FPGA内部结构、工作原理、硬件描述语言(Verilog/VHDL)基础、编程流程等;2. 数字信号处理基础知识:涉及采样定理、量化、编码、数字信号表示等基本概念;3. 音乐播放器原理:介绍音乐播放器的基本工作流程,包括音频信号的采集、处理、存储和播放;4. FPGA音乐播放器设计:结合教材章节内容,设计以下教学大纲:a. FPGA硬件设计:选用合适的FPGA开发板,了解硬件资源分配,设计FPGA硬件电路;b. 音频信号处理:学习音频信号的采样、量化、编码等处理方法,编写相应程序;c. 音乐播放器程序设计:运用Verilog或VHDL编写音乐播放器程序,实现音频信号播放功能;d. 系统调试与验证:对设计好的音乐播放器进行功能测试、性能优化和调试;5. 项目实践:根据教学进度,安排以下教学内容:a. 分组讨论:学生分组讨论设计方案,明确项目任务分工;b. 设计与编程:各组学生根据分工,完成FPGA音乐播放器的设计和编程;c. 调试与展示:学生调试音乐播放器,展示项目成果,分享设计经验;d. 评价与反馈:教师对各组项目成果进行评价,给予反馈和建议。
乐曲硬件演奏电路的VHDL设计

乐曲硬件演奏电路的VHDL设计1.Songer顶层文件模块:LIBRARY IEEE; -- 硬件演奏电路顶层设计 USE IEEE.STD_LOGIC_1164.ALL; ENTITY Songer ISPORT ( CLK4MHZ : IN STD_LOGIC; --音调频率信号 CLK8HZ : IN STD_LOGIC; --节拍频率信号 pause: IN STD_LOGIC;CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);-- 简谱码输出显示 HIGH1 : OUT STD_LOGIC; --高8度指示 SPKOUT : OUT STD_LOGIC );--声音输出 END; ARCHITECTURE one OF Songer IS COMPONENT NoteTabsPORT ( clk : IN STD_LOGIC;SWITCH: IN STD_LOGIC;ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ); END COMPONENT; COMPONENT ToneTabaPORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; CODE : OUTSTD_LOGIC_VECTOR (3 DOWNTO 0) ; HIGH : OUT STD_LOGIC;Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) ); END COMPONENT;COMPONENT SpeakeraPORT ( clk : IN STD_LOGIC;Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0); SpkS : OUT STD_LOGIC ); END COMPONENT;SIGNAL Tone : STD_LOGIC_VECTOR (10 DOWNTO 0);SIGNAL ToneIndex : STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINu1 : NoteTabs PORT MAP (clk=>CLK8HZ,SWITCH=>pause,ToneIndex=>ToneIndex); u2 : ToneTaba PORT MAP(Index=>ToneIndex,Tone=>Tone,CODE=>CODE1,HIGH=>HIGH1); u3 : Speakera PORT MAP(clk=>CLK4MHZ,Tone=>Tone, SpkS=>SPKOUT ); END;2.音乐节拍和音调发生器(NoteTabs.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY NoteTabs ISPORT ( clk : IN STD_LOGIC; switch: IN STD_LOGIC;ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ); END;ARCHITECTURE one OF NoteTabs ISCOMPONENT MUSIC --音符数据ROM PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END COMPONENT;SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0); BEGINCNT8 : PROCESS(clk,Counter)BEGINIF Counter=138 THEN Counter Counter , q=>ToneIndex, inclock=>clk); END;3.简谱码对应的分频预置数查表电路(ToneTaba.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba ISPORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; CODE : OUTSTD_LOGIC_VECTOR (6 DOWNTO 0) ; HIGH : OUT STD_LOGIC;Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) ); END;ARCHITECTURE one OF ToneTaba IS BEGINSearch : PROCESS(Index)BEGINCASE Index IS -- 译码电路,查表方式,控制音调的预置数 WHEN \WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN OTHERS => NULL; END CASE; END PROCESS; END;4.数控分频与演奏发生器(Speakera.VHD)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY Speakera ISPORT ( clk : IN STD_LOGIC;Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0); SpkS : OUT STD_LOGIC ); END; ARCHITECTURE one OF Speakera ISSIGNAL PreCLK, FullSpkS : STD_LOGIC; BEGINDivideCLK : PROCESS(clk)VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ; BEGINPreCLK 11 THEN PreCLK。
数字电路及系统设计课程设计

数字电路及系统设计课程设计
简介
数字电路及系统设计课程是电子信息类专业中的重要专业基础课程之一。
本课程旨在培养学生对数字电路和系统的设计、分析和实现能力,为学生后续的专业课程打好扎实的基础。
在本次课程设计中,我们将通过实际设计数字电路及系统的案例,来巩固和加深学生的理论知识。
设计目标
本次课程设计的目标是设计一款音乐播放器。
音乐播放器具有以下功能:•支持音乐文件的格式:mp3、wav、flac
•支持音乐文件的存储介质:SD卡、U盘、内置存储
•支持音量控制和播放模式切换
•支持LCD屏幕显示音乐信息和操作提示
设计思路
本次课程设计的核心是数字电路和系统的设计,因此我们将采用FPGA作为设计工具。
FPGA可以通过可编程逻辑单元来实现数字电路的设计。
我们将对音乐播放器的各个功能模块进行分析和设计,如下:
音频解码模块
因为音频文件的格式多种多样,不同的格式会有不同的压缩算法和解码方式。
我们将采用DSP模块解码音频数据,DSP模块是FPGA内部的数字信号处理模块,能够高效地实现音频解码。
1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
洛阳理工学院课程设计报告课程名称 EDA技术与VHDL设计题目音乐播放器的设计与仿真专业通信工程班级 B1105学号 B1105姓名完成日期 2014年12月22日前言随着科学技术的进步,电子器件和电子系统设计方法日新月异,电子设计自动化(Electronics Design Automation,EDA)技术正是适应了现代电子产品设计的要求,吸收了多学科最新成果而形成的一门新技术。
现如今掌握EDA技术是电子信息类专业的学生、工程技术人员所必备的基本能力和技能。
传统电子电路的设计,首先要对系统进行分析,然后按功能对系统进行划分,接下来就要选择特定芯片,焊接成PCB电路板,最后对成品PCB电路板进行调试。
这样的设计没有灵活性可言,搭成的系统需要的芯片种类多且数目大,而且对于电路图的设计和电路板的设计都需要很大的工作量,工作难度也很高。
随着可编程器件和EDA技术的发展,传统设计的劣势被克服,采用可编程逻辑器件基于芯片的设计方法,期间的内部逻辑和引脚可以由设计者自行决定,提高了设计的灵活性和工作效率;同时,将系统集成在一个芯片上的设计,使系统具有体积小、功耗低、可靠性高等特点。
EDA技术即电子设计自动化技术,它是以可编程逻辑器件(PLD)为载体,以硬件描述语言(HDL)为主要的描述方式,以EDA软件为主要的开发软件的电子设计过程。
它主要采用“自顶向下”的设计方法,设计流程主要包括:设计输入、综合、仿真、适配、下载。
EDA技术主要有以下特征:(1)高层综合的理论和方法取得进展,从而将EDA设计层次由RT级提高到了系统级,并推出了系统级综合优化工具,缩短了复杂ASIC的设计周期。
(2)采用硬件描述语言来描述10万门以上的设计,并形成了VHDL和Verilog-HDL两种标准硬件描述语言。
(3)采用平面规划技术对逻辑综合和物理版图设计联合管理,做到在逻辑设计综合早期阶段就考虑到物理设计信息的影响。
(4)可测性综合设计。
(5)为带有嵌入式IP核的ASIC设计提供软、硬件协同设计工具。
(6)建立并设计工具框架结构的集成化设计环境,以适应当今ASIC规模大而复杂、数字与模拟电路并存、硬件与软件设计并存、产品上市速度快等特点。
总而言之,EDA技术的出现,给电子信息产业带来了革命性的变革。
一.设计任务及要求本次课程设计要求使用EDA工具,设计实现简易音乐播放器,理解音名与频率的关系及数控分频原理,经过对整体进行模块化分析、编程、综合、仿真及最终下载,完整实现简易音乐器的播放功能。
用VHDL语言设计乐音的节拍与音符产生电路;用VHDL语言设计分频系数、音符显示数据产生电路;用VHDL语言设计可控分频器电路;理解简易音乐播放器总体设计方案。
掌握基本的VHDL语言;理解音乐播放电路设计方案。
掌握用VHDL语言设计节拍与音符产生电路;掌握用VHDL语言设计分频系数、音符显示数据产生电路;掌握用VHDL语言设计可控分频器电路。
设计结果:原理图与原程序、电路仿真图、能在实训系统上播放悦耳动听的音乐。
二.设计实现2.1 准备知识在本次设计中采用了《梁祝》《茉莉花》《虫儿飞》作为要播放的乐曲,根据声乐知识,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果是本实验的关键。
该演奏电路演奏的乐曲是“梁祝”片段,其最小的节拍为1拍。
将1拍的时长定为0.25秒,则只需要再提供一个4Hz的时钟频率即可产生1拍的时长,演奏的时间控制通过ROM查表的方式来完成。
对于占用时间较长的节拍,如全音符为4拍(重复4),2/4音符为2拍(重复2),1/4音符为1拍(重复1)。
由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频数四舍五入取整。
若基准频率过低,则由于分频系数过小,四舍五入取整后的误差较大,若基准频率过高,虽然误码差变小,但分频结构将变大。
实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取舍合适的基准频率。
本设计中选取4MHz 的基准频率。
表2-1为简谱中音名与频率的对应关系。
表2.1 乐谱编码和乐音频率2.2乐曲演奏电路的结构示意2.3乐曲演奏电路的子结构顶层结构所包含的模块分别有地址计数器模块(ADDR )、乐音分频器模块分频器乐谱存储器扬声器时钟地址乐音(SPEAKER)、数据存储器(YP)以下便是对各个子模块的分析。
2.3.1 地址计数器模块1. 地址计数器功能在此模块中设置了一个9位二进制计数器(计数最大值为512),这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25s,恰好为当全音符设为1s时。
例如,《梁祝》乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即为1s时间,相应地所对应“1”音符分频预置数为1409在ADDR的输入端停留了1s。
随着ADDR中的计数器按4Hz的时钟频率做加法计数时,乐谱逐次被选取,《梁祝》乐曲就开始自然连续的演奏起来了。
2. 程序代码LIBRARY ieee;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDR ISPORT (clk : IN STD_LOGIC;A : BUFFER STD_LOGIC_VECTOR(8 DOWNTO 0));END;ARCHITECTURE ONE OF ADDR ISBEGINPROCESS (clk)BEGINIF (clk'event AND clk = '1')THENA <= A + 1;END IF;END PROCESS;END;3. 地址计数器符号图图2.1 地址计数器符号图4. 仿真波形图图2.2 地址计数器波形图图2.3 地址计数器波形图2.3.2 乐音分频器1. 乐音分频器模块的功能此模块的功能首先是提供决定所发音符的分频预置数,而此数在输入端口停留的时间即为此音符的节拍值。
电路中设置了《梁祝》《茉莉花》《虫儿飞》乐曲全部音符所对应的分频预置数,每一音符的停留时间由音乐节拍和音调发生器模块clk输入频率决定,在此为4Hz。
2.乐音分频器模块的VHDL源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speaker isport(clk : in std_logic;--1mhzTN : in std_logic_vector(3 downto 0);--乐谱编码spks : out std_logic);end;architecture rts of speaker issignal FM : std_logic;signal count : integer range 0 to 2047;signal temp : integer range 0 to 2048;beginprocess (TN)begincase TN iswhen "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)beginif(clk'event 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 乐音2的波形图图2.6 乐音3的波形图2.3.3 数据存储器从菜单里的Tools选择MegaWizard Plug-In Manager…,按照向导完成ROM的定制,ROM初始化文件见附录。
图2.7数据存储器设计图2.3.3 数据仿真1. 符号图图2.8 存储器和地址计数器符号图2. 波形图图2.9 存储器存入的数据存储器存入了《梁祝》《茉莉花》《虫儿飞》三首音乐,最小编程单元是八分音符即每个数字占0.37秒。
每首歌结束之后空0.37*8*2 = 6秒。
三首歌共424个地址,即0.37*424 = 155秒,即两分半左右。
2.3.4 时钟分频器1.二十分频器程序代码:library ieee;use ieee.std_logic_1164.all;entity fenpin20 isport(clk : in std_logic; --输入20MHZ信号out1 : out std_logic);-- 输出1MHZend;architecture one of fenpin20 issignal T1 : integer range 0 to 10-1;signal F1M : std_logic;beginprocess(clk)beginif(clk'event and clk='1')thenT1<=T1+1;if(T1=9) then F1M<= not F1M;T1<=0;end if;end if;end process;out1<=F1M;end;符号图:图2.10 分频器符号图波形图:图2.11 分频器波形图波形图意义:此分频器是20分频,即把频率分成其本身频率的1/20。