基于EDA音乐播放器的设计
EDA乐曲播放器设计

实验报告学生姓名:EDA小王子学号:国家机密专业班级:国家机密实验类型:□验证□综合√设计□创新实验日期:国家机密实验成绩:很高实验六乐曲播放器设计一、实验目的1、进一步掌握QuartusII的使用全过程;2、学习多层次的设计方法,掌握基本的VHDL语言的设计方法;3、进一步熟悉和掌握VHDL语言。
二、实验内容与要求使用层次化设计方法,实现乐曲播放器的设计。
乐曲选取《梁祝》中化蝶部分三、实验设计1、实验分析1232、实验程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yy ISPORT(clk4hz:IN STD_LOGIC;……………………………………音调频率信号 CLK1kHz:IN STD_LOGIC; …………………………动态数码管扫描频率 clk6Mhz:IN STD_LOGIC; …………………………………节拍频率信号rt:IN STD_LOGIC;………………………………………………复位信号 SEG:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);…………简谱码输出显示MAX: BUFFER INTEGER RANGE 0 TO 9110;……………………分频系数 h,m,l:OUT STD_LOGIC;…………………………………………音调指示 speakout:BUFFER STD_LOGIC …………………………………声音输出 );END ENTITY yy ;ARCHITECTURE behave OF yy ISSIGNAL addr1:INTEGER RANGE 0 TO 255;SIGNAL yf1:STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL yinfu :STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL count: INTEGER RANGE 0 TO 9110;SIGNAL tout: STD_LOgIC;BEGINp1:PROCESS(addr1,clk4hz)BEGINIF(clk4hz'EVENT AND clk4hz='1') THENIF(addr1<112)THENaddr1<=addr1+1;ELSIF(addr1=112) THENaddr1<=0;END IF;CASE addr1 ISWHEN 0 => yf1<="00011";WHEN 1 => yf1<="00011";WHEN 2 => yf1<="00011";WHEN 3 => yf1<="00011";WHEN 4 => yf1<="00101";WHEN 5 => yf1<="00101";WHEN 6 => yf1<="00110";WHEN 7 => yf1<="01001";WHEN 8 => yf1<="01001";WHEN 9 => yf1<="01010";WHEN 10 => yf1<="01110";…………WHEN 110 => yf1<="00101";WHEN 111 => yf1<="00101";WHEN 112 => yf1<="00101";WHEN OTHERS =>yf1<="00000";END CASE;END IF;IF(rt='1') THENaddr1<=0;END IF;END PROCESS p1;p2:PROCESS(clk6Mhz)BEGINIF(clk6Mhz'EVENT AND clk6Mhz='1') THEN IF(count<MAX) THENcount<=count+1;tout<='0';ELSIF(count=MAX) THENcount<=0;tout<='1';END IF;END IF;END PROCESS p2;p3:PROCESS(tout)BEGINIF(tout'EVENT AND tout='1') THENspeakout<=NOT speakout;END IF;END PROCESS p3;p4:PROCESS(yf1)BEGINCASE yf1 ISWHEN "00011" =>MAX<=9101;l<='1';m<='0';h<='0';WHEN "00101" =>MAX<=7653;l<='1';m<='0';h<='0';WHEN "00110" =>MAX<=6818;l<='1';m<='0';h<='0';WHEN "00111" =>MAX<=6074;l<='1';m<='0';h<='0';WHEN "01001" =>MAX<=5733;l<='0';m<='1';h<='0';WHEN "01010" =>MAX<=5108;l<='0';m<='1';h<='0';WHEN "01011" =>MAX<=4551;l<='0';m<='1';h<='0';WHEN "01101" =>MAX<=3827;l<='0';m<='1';h<='0';WHEN "01110" =>MAX<=3409;l<='0';m<='1';h<='0';WHEN "10001" =>MAX<=2867;l<='0';m<='0';h<='1';WHEN OTHERS =>MAX<=0;l<='0';m<='0';h<='0';END CASE;END PROCESS p4;yinfu<='0'&yf1(2)&yf1(1)&yf1(0);………………显示简谱的低三位,音调不论中低高,简谱数字都一样p5:PROCESS(CLK1kHz,yinfu)VARIABLE SEL : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINIF(rt='1') THENSEL:="000";ELSIF (CLK1kHz'EVENT AND CLK1kHz='1')THENIF SEL="000" THENSEG<=yinfu;SEL:="000";END IF;END IF;END PROCESS p5;END behave;四、实验步骤1、建立工作库文件夹和编辑设计文件1)建立一个文件夹保存工程文件;2)打开QuartusII,建立新的VHDL文件,再打开的页面下输入程序2、编译过程1)输入完程序之后逐个编译2)逐个编译无错之后进行全程编3、系统仿真1)建立新的波形激励文件2)在波形编辑器窗口添加节点3)通过Edit->End Time 来设定仿真结束时间4)在CLOCK窗口中设置clk4hz的时钟周期为1us,clk1khz时钟周期为200ns,clk6mhz时钟周期为20ns如图:5)点击save保存6) 通过Tools下的Simulator Tools项进行仿真,然后观察输出波形。
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某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。
基于EDA技术的乐曲演奏电路的设计摘要

基于EDA技术的乐曲演奏电路的设计摘要:此次设基于EDA技术,通过对输入脉冲的分频来实现对不同音符(高、中、低音)的控制,通过计数来实现对不同音符所持续时间长短的控制;通过Verilog语言来编程来实现乐曲演奏电路及扬声器的模拟,最后利用对Max+plusⅡ软件的仿真的时序波形图的额分析来完成“欢乐颂”片段的演奏。
关键字:EDA;乐曲演奏;Verilog语言;Max+plusⅡ软件前言EDA是英文“Electronics DesignAutomation(电子设计自动化)”的缩写。
EDA技术是近几年迅速发展起来的计算机软件、硬件和微电子交叉的现代电子设计学科,是现代电子工程领域的一门新技术。
它是以可编程逻辑器件(PLD)为物质基础,以计算机为工作平台,以EDA 工具软件为开发环境,以硬件描述语言(HDL)作为电子系统功能描述的主要方式,以电子系统设计为应用方向的电子产品自动化设计过程。
【1】目前以硬件描述语言(Verilog 或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。
【2】超高速集成电路硬件描述语言VHDL是HDL的一种,是一种标准化程度较高的硬件描述语言,主要用于描述数字系统的结构、行为、功能和接口。
进入到21世纪后,EDA技术得到了更快的发展,开始步入了一个新的时期,突出地表现在以下几个方面:电子技术各个领域全方位融入EDA技术,除了日益成熟的数字技术外,可编程模拟器件的设计技术也有了很大的进步。
EDA技术使得电子领域各学科的界限更加模糊,它们相互渗透和包容,如模拟与数字、软件和硬件、系统和器件、ASIC与FPGA、行为与结构等,软、硬协同设计技术也成为EDA技术的一个发展方向。
IP核在电子设计领域得到了广泛的应用,基于IP核的SOC设计技术趋向成熟,电子设计成果的可重用性进一步提高。
嵌入式微处理器软核的出现,更大规模的FPGA/CPLD器件的不断推出,使得可编程芯片系统步入实用化阶段,在一片FPGA芯片中实现一个完备的系统已成为可能。
EDA音乐播放器详解

EDA技术及应用课程设计说明书 2013 届电子信息工程专业 1班级题目音乐播放器学号姓名指导教师二О一五年 6 月25 日一、音乐播放器基本原理1 硬件电子琴设计原理乐曲演奏的原理是:由于组成乐曲的每个音符的频率值(音调)及其持续时间(音长)是乐曲演奏的2个基本数据,因此需要控制输出到扬声器的激励信号的频率高低和该频率信号持续的时间。
频率的高低决定了音调的高低,而乐曲的简谱与各音名的频率对应关系在后面将给出。
所有不同频率的信号都是从一基准频率分频而得来的,由于音阶频率多为非整数,而分频系数有不能为小数,故必须将计算得到的分频数进行向下取整,基准频率和分频系数应综合考虑加以选择,从而保证音乐不会走调。
如在48MHz 时钟下,中音1(对应的频率值是523.3Hz)的分频系数应该为:48000000/(2*523.3)=45863,这样只需对系统时钟进行45863次分频即可得到所要的中音M1(分频系数计算公式为D=F/2K,由于F/2K之后,会使分频系数D变小,所以功能模块中语句:beep_r<=!beep_r,使得输出取反,K=F/2count_end,消除了前面除以2K的影响)。
2 乐曲自动演奏设计原理硬件电路和自动演奏的原理同硬件电子琴实验原理类似。
至于其他音符,同样可由一式求出对应的分频系数。
在程序中设置一个状态机,每250ms改变一个状态(即一个节拍),组成乐曲的每个音符的频率值(音调)相对应于状态机的每一个状态。
只要让状态机的状态按顺序转换,就可以自动演奏播放音乐了。
《欢乐颂》乐曲的简谱如图所示:3 消抖原理作为机械开关的键盘,在按键操作时,由于机械触点的弹性及电压突跳等原因,在触点闭合或开启的瞬间会出现电压抖动,实际应用中如果不进行处理将会造成误触发。
由于这里是低电平表示按键按下,所以按键去抖动的关键在于提取稳定的低电平状态,虑除前沿、后沿抖动毛刺。
对于一个按键信号,可以用一个脉冲对他进行取样,如果连续三次取样为低电平,可以认为信号已经处于键稳定状态,这时输出一个低电平按键信号。
基于EDA音乐播放器的设计说明

长沙学院课程设计说明书题目音乐播放器的设计系(部) 电子与通信工程专业(班级) 电气工程及其自动化(一班)姓名学号指导教师起止日期2010-11-29至2010-12-10EDA技术课程设计任务书系(部):电子与通信工程系专业:电气工程及其自动化指导教师:长沙学院课程设计鉴定表目录摘要 (6)设计原理 (7)程序: (8)实验现象: (16)引脚分配: (16)仿真波形: (17)心得体会: (18)参考文献: (18)摘要:在SOPC开发平台上实现一个音频信号发生器,编写3段音乐,利用开发平台的蜂鸣器来播放几段音乐。
可进行自动循环播放和手动播放两个模式的选择。
如果为手动播放,则通过拨动拨码开关第1、2位选择。
播放音乐时,要求将该音乐的序号(分别为A1、A2,A3)以及该音乐播放剩余的时间(分、秒)显示在数码管上。
当某首音乐开始播放时,音乐序号闪烁显示3秒钟。
关键字:SOPC、音频信号、音乐、蜂鸣器、自动循环、手动播放、剩余时间(分钟、秒钟)显示、音乐序号(A1、A2、A3)显示。
设计原理:首先采用分块设计法,将设计分为分频模块、时间动态扫描显示模块、音乐播放模块、顶层模块。
其中音乐播放模块又可分为音频模块、音乐代码模块,预置数模块利用计数的方式将50MHZ的频率分为12MHz、100Hz、8Hz、1Hz。
音乐播放模块需要完成以下设计:①预置乐曲,本次设计选取了《梁祝》的一段作预置,在作预置时,需要将乐曲音符转换成相应的代码,通过计算逐一将音符转换成代码,通过EDA开发平台quartus Ⅱ进行乐曲定制;②为了提供乐曲发音所需要的发音频率,编写数控分频器程序,对单一输入高频,进行预置数分频,生成每个音符发音的相应频率;③为了给分频提供预置数,需要计算分频预置数;对每部分结构单元逐一进行编译,生成相应的元器件符号,并对独立结构单元功能进行仿真。
音调的控制频率的高低决定了音调的高低。
综合考虑各因素,本次设计中选取12MHZ作为CLK 的分频计数器的输入分频信号。
乐曲硬件演奏电路EDA设计

摘要随着科学技术的飞速发展,微电子技术、集成技术和计算机技术也有了迅速的发展,电子系统的设计方法也随之发生变革,基于EDA技术的设计方法也成为现代电子系统设计的主流。
大规模可编程逻辑器件FPGA/CPLD是当今应用最广泛的两类可编程专用集成电路(ASIC)。
由于结构和工艺的改进,可编程ASIC 芯片上包含的资源越来越丰富,可实现的功能越来越强,它已成为实现电子系统集成化的重要手段。
特别是可编程逻辑器件的功能和容量的不断扩大,如FPGA(Field Programmable Gate Array,现场可编程门阵列)使集成电路的设计进入片上系统(System on a Chip,SOC)或可编程片上系统(System on a Programmable Chip,SOPC)的设计时代。
同时采用超高速集成电路硬件描述语言VHDL (Very High Speed Integrated Circuit Hard—ware Description Language),其具有多层次描述系统硬件功能的能力,既支持模块化设计,也支持层次化设计,使各种数字化电子系统的设计通过描述芯片功能实现系统功能,从而有效地缩短了产品开发周期,减少了设计芯片的数量,缩小了系统体积,降低了系统能耗,提高了系统的灵活性和可靠性。
关键词FPGA, 音乐节拍发生器模块,音乐译码电路模块,数控分频模块AbstractTechnically fly to soon develop along with science, micro-electronics technique, integration technique and calculator technique also had a quick development and the design method of electronics system also immediately took place a change and also become modern main current of design of the electronics system according to the EDA technical design rge-scale and programmable FPGA/CPLD of the logic spare part is nowadays to apply two types of most extensive programmable appropriation integrated circuits(ASIC).Because of the improvement of structure and craft, include on the programmable ASIC chip of the resources be more and more abundant, can carry out of the function be more and more strong, it has become to carry out electronics system the integration turn of important means.Function and capacity of especially programmable logic spare part continuously extend and make the design of integrated circuit get into a slice of top system(the System on a Chip, SOC) or programmable slice the top system(a Programmable of the System on Chip, SOPC) such as the FPGA(the Gate Array of the Field Programmable, the spot programmable door array) of design ages.Adopt in the meantime extremely high soon the integrated circuit hardware describe language VHDL(the Circuit Description Language of the Hard-ware of the Speed Integrated of the Very High), it has the system hardware of the multilayers description the ability of the function, since support the mold piece turn a design, also support layer's turn a design and make various numeral turn the design of electronics system to pass description chip function to carry out system function, thus and availably shortenned a product a development a period, reduced to design chip of amount, contracted a system physical volume, lowering system can consume and raised the vivid and credibility of the system.Keywords FPGA, the music rhythm occurrence machine mold piece, music translates the code electric circuit mold piece and the number controls the Pin mold of cent a piece目录摘要 (I)ABSTRACT (II)1引言 (1)1.1 ASIC技术 (1)1.2可编程专用集成电路ASIC (1)1.2.1 概述 (1)1.2.2主要特点 (1)1.2.3发展前景 (2)1.3EDA技术 (2)1.3.1概述 (2)1.3.2 EDA技术的发展趋势 (2)2乐曲演奏系统设计原理分析 (3)2.1乐曲演奏基本要求 (3)2.2乐曲演奏原理 (3)3系统硬件设计 (6)3.1FPGA的介绍 (6)3.1.1 FPGA的基本结构 (6)3.1.2 Altera公司的FPGA (6)3.2FLEX系列的结构特点 (7)3.2.1 概述 (7)3.2.2 FLEX的特点 (7)4乐曲硬件演奏电路的层次化设计方案 (8)4.1音乐节拍发生器N OTE T ABS (8)4.2音符译码电路T ONE T ABA模块 (13)4.3数控分频模块S PEAKERA设计 (15)4.4乐曲硬件演奏电路的顶层设计和仿真 (17)总结 (20)致谢 (21)参考文献 (22)附录 (23)1引言1.1ASIC技术ASIC(Application Specific Integrated Circuits)专用集成电路,与通用集成电路相比,它是面向专门用途的电路,以此区别于标准逻辑(Standard Logic)、通用寄存器、通用微处理器等电路。
eda乐曲演奏电路的设计

北华航天工业学院课程设计报告(论文)设计课题:乐曲演奏电路的设计专业班级:学生姓名:指导教师:设计时间北华航天工业学院电子工程系乐曲演奏电路的设计课程设计任务书指导教师:胡辉内容摘要在EDA开发工具Quartus II 6.0平台上,采用VHDL语言层次化和模块化的设计方法,通过音符编码的设计思想,预先定制乐曲,实现动态显示乐曲演奏电路的设计,并在此基础上,基于同一原理,使此电路同时具备了简易电子琴的功能,使基于CPLD/FPGA芯片的乐曲播放数字电路得到了更好的优化,提高了设计的灵活性和可扩展性。
关键字:EDA;Quartus II;VHDL;CPLD/FPGA;乐曲演奏电路;简易电子琴目录一概述 (1)二方案设计与论证 (2)三单元电路设计与参数计算 (2)四总原理图 (14)五安装与调试 (14)六性能测试与分析 (14)七结论 (15)八心得体会 (15)九参考文献 (15)一、概述(一)本实验的设计原理是不同的音名对应不同的频率,设计的难点是准确的产生各音名对应的频率。
简谱音名与频率的关系各音名所对应的频率可由一频率较高的基准频率进行整数分频得到,所以实际中产生各音名频率为近似的整数值。
基准频率越高,近似程度越好,音准也越好,但同时分频系数会很大,耗费芯片资源也越多。
本实验选取fo=1MHZ的信号作为基准频率。
分频系数A及n的公式如下:分频系数A=fo÷音名频率分频系数n=分频系数A÷2分频系数n=fo÷音名频率÷2以中音1为例来说明:由fo=1MHZ产生中音1的523.25Hz,其中分频系数A=1000000÷523.25≈1911.13,取整数值为A=1911,此分频系数可由计数器实现。
但若不加处理语句,其分频后的523Hz信号不是对称方波,而占空比很小的方波将很难使扬声器有效的发出声音。
为了得到对称方波,可将分频系数A分解为:分频系数A=分频系数n×2。
EDA乐曲播放器设计

实验六乐曲播放器设计一、实验目的1.熟悉EDA技术开发流程;2.学习利用数控分频器设计硬件乐曲演奏电路。
二、实验要求使用层次设计方法,实现乐曲播放器的设计。
可以通过LPM_ROM存储节拍音符数,装载多首乐曲供播放选择,可手动或自动选择歌曲。
三、实验设计思路/原理图主系统由三个模块组成,分别为NoteTabs、tonetaba、SPEAK三个功能模块;如下图所示:下面分别来介绍这三个模块的功能:1) 音符的频率由SPEAK(数控分频器)得到,由其clk端输入一具有较高频率(实验箱上6MHz效果不错)的信号,通过SPEAK分频后由SPEAKER输出,由于直接从数控分频器中出来的输出信号是脉冲极窄的脉冲式信号为有利于驱动扬声器,再进行2分频,然后送到输出端;2) 音符的持续时间根据乐曲的速度即每个音符的节拍数来确定。
tonetaba模块的功能首先是为SPEAK提供决定所发音符的分频预置数,而此数在SPEAK输入口停留的时间即为此音符的节拍值,每一音符的停留时间由音乐节拍和音调发生器模块NoteTabs的clk的输入频率共同决定;3) 音符数据ROM的地址发生器。
在NoteTabs中设置了一个10位二进制计数器,最大计数值为1014,作为音符数据ROM的地址发生器。
这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4 分音符持续时间。
随着NoteTabs 中的计数器按4Hz 的时钟速率做加法计数时,即随地址值递增时,音符数据将从ROM 中通过q 端口输出到tonetaba 模块,乐曲就这样连续地演奏起来了。
原理图如下:四、实验程序1、NoteTabs模块1)可供选择控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count ISPORT(CLK,RST:IN STD_LOGIC;SEC:IN STD_LOGIC_VECTOR(1 DOWNTO 0);--选择控制;CQ: OUT STD_LOGIC_VECTOR(9 DOWNTO 0));--控制输出;END;ARCHITECTURE BEHAV OF count ISBEGINPROCESS(CLK,RST,SEC)VARIABLE CQI:STD_LOGIC_VECTOR(9 DOWNTO 0);BEGINIF CQI=1015 OR RST='1' THEN CQI:=(OTHERS=>'0');--复位或计数溢出;ELSIF CLK'EVENT AND CLK='1' THENCASE SEC ISWHEN "00"=>IF CQI<1014 THEN—SEC为00时正常播放乐曲;CQI:=CQI+1;ELSE CQI:=(OTHERS=>'0');END IF;WHEN "01"=>IF CQI>135 THEN-- SEC为01时播放第一首乐曲;CQI:=(OTHERS=>'0');ELSE CQI:=CQI+1;END IF;WHEN "10"=>IF CQI<135 OR CQI>551 THEN -- SEC为10时播放第二首乐曲;CQI:="0010010000";--从144开始计数;ELSE CQI:=CQI+1;END IF;WHEN "11"=>IF CQI<551 THEN—SEC为11时播放第三首乐曲;CQI:="1000110000";--从560开始计数;ELSE CQI:=CQI+1;END IF;END CASE;END IF;CQ<=CQI;END PROCESS;END BEHAV;2)ROM地址发生器LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY lpm;USE lpm.all;ENTITY music ISPORT(address : IN STD_LOGIC_VECTOR (9 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0));END music;ARCHITECTURE SYN OF music ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0);COMPONENT lpm_romGENERIC (intended_device_family : STRING;lpm_address_control : STRING;lpm_file : STRING;lpm_outdata : STRING;lpm_type : STRING;lpm_width : NATURAL;lpm_widthad : NATURAL);PORT (address : IN STD_LOGIC_VECTOR (9 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0));END COMPONENT;BEGINq<= sub_wire0(4 DOWNTO 0);lpm_rom_component : lpm_romGENERIC MAP (intended_device_family => "ACEX1K",lpm_address_control => "REGISTERED",lpm_file => "music.mif",lpm_outdata => "UNREGISTERED",lpm_type => "LPM_ROM",lpm_width => 5,lpm_widthad => 10)PORT MAP (address => address,inclock => inclock,q => sub_wire0);END SYN;3)NoteTab顶层文件LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY work;ENTITY NoteTabs ISport(CLK,RST: IN STD_LOGIC;SEC : IN STD_LOGIC_VECTOR(1 downto 0);q : OUT STD_LOGIC_VECTOR(4 downto 0));END NoteTabs;ARCHITECTURE bdf_type OF NoteTabs IScomponent musicPORT(inclock : IN STD_LOGIC;address : IN STD_LOGIC_VECTOR(9 downto 0);q : OUT STD_LOGIC_VECTOR(4 downto 0));end component;component countPORT(CLK,RST : IN STD_LOGIC;SEC : IN STD_LOGIC_VECTOR(1 downto 0);CQ : OUT STD_LOGIC_VECTOR(9 downto 0));end component;signal SYNTHESIZED_WIRE_0 : STD_LOGIC_VECTOR(9 downto 0);BEGINb2v_inst : musicPORT MAP(inclock => CLK,address => SYNTHESIZED_WIRE_0,q => q);b2v_inst1 : countPORT MAP(CLK => CLK,RST => RST,SEC => SEC,CQ => SYNTHESIZED_WIRE_0);END;2、tonetaba模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tonetaba ISPORT(Index:IN STD_LOGIC_VECTOR(4 DOWNTO 0);--ROM存储器中音符输入;Code:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);——音符HML:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--高低音TONE:OUT STD_LOGIC_VECTOR(14 DOWNTO 0));--分频预置数END;ARCHITECTURE BEHAV OF tonetaba ISBEGINPROCESS(Index)BEGINCASE Index ISWHEN "00000"=>TONE<="000000000000000";Code<="0000";HML<="0000";WHEN "00001"=>TONE<="101100110010101";Code<="0001";HML<="0001";--低1音预置数22933 WHEN "00010"=>TONE<="100111111001111";Code<="0010";HML<="0001";--低2音预置数20431 WHEN "00011"=>TONE<="100011100011010";Code<="0011";HML<="0001";--低3音预置数18202 WHEN "00100"=>TONE<="100001100011101";Code<="0100";HML<="0001";--低4音预置数17181 WHEN "00101"=>TONE<="011101111001011";Code<="0101";HML<="0001";--低5音预置数15307 WHEN "00110"=>TONE<="011010101000100";Code<="0110";HML<="0001";--低6音预置数13636 WHEN "00111"=>TONE<="010111101110101";Code<="0111";HML<="0001";--低7音预置数12149 WHEN "01000"=>TONE<="010110011001011";Code<="0001";HML<="0010";--中1音预置数11467 WHEN "01001"=>TONE<="010011111101000";Code<="0010";HML<="0010";--中2音预置数10216 WHEN "01010"=>TONE<="010001110001010";Code<="0011";HML<="0010";--中3音预置数9098 WHEN "01011"=>TONE<="010000110001110";Code<="0100";HML<="0010";--中4音预置数8590 WHEN "01100"=>TONE<="001110111100101";Code<="0101";HML<="0010";--中5音预置数7653 WHEN "01101"=>TONE<="001101010100010";Code<="0110";HML<="0010";中6音预置数--6818 WHEN "01110"=>TONE<="001011110111010";Code<="0111";HML<="0010";中7音预置数--6074 WHEN "01111"=>TONE<="001011001101011";Code<="0001";HML<="0100";高1音预置数--5739 WHEN "10000"=>TONE<="001001111110100";Code<="0010";HML<="0100";高2音预置数--5108 WHEN OTHERS => NULL;END CASE;END PROCESS;END;3、SPEAK模块LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SPEAK ISPORT(CLK:IN STD_LOGIC;Tone:IN STD_LOGIC_VECTOR(14 DOWNTO 0);--预置分频系数CQ:OUT STD_LOGIC);--音符输出END;ARCHITECTURE BEHAV OF SPEAK ISSIGNAL N:STD_LOGIC;BEGINPROCESS(Tone)VARIABLE Count11:STD_LOGIC_VECTOR(14 DOWNTO 0);--15位可预置计数器;BEGINIF CLK'EVENT AND CLK='1' THENIF Count11=Tone THEN Count11:="000000000000000";N<='1';ELSE Count11:=Count11+1;N<='0';END IF;END IF;END PROCESS;PROCESS(N)VARIABLE COUNT2:STD_LOGIC;BEGINIF N'EVENT AND N='1'THEN COUNT2:=NOT COUNT2;--将输出再2分频,展宽脉冲,使扬声器有足够的功率;IF COUNT2='1'THEN CQ<='1';ELSE CQ<='0';END IF;END IF;END PROCESS;END;五、实验步骤1、建立工作库文件和编辑设计文件(1)在D盘新建一个文件夹用来保存工程文件(2)打开QuartusⅡ8.0软件,选择菜单File->New->VHDL File,点击OK后在打开的界面下输入已经设计好的程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
长沙学院课程设计说明书题目音乐播放器的设计系(部) 电子与通信工程专业(班级) 电气工程及其自动化(一班)姓名学号指导教师起止日期 2010-11-29至2010-12-10EDA技术课程设计任务书系(部):电子与通信工程系专业:电气工程及其自动化指导教师:长沙学院课程设计鉴定表目录摘要 (4)设计原理 (5)程序: (6)实验现象: (14)引脚分配: (14)仿真波形: (15)心得体会: (16)参考文献: (16)摘要:在SOPC开发平台上实现一个音频信号发生器,编写3段音乐,利用开发平台的蜂鸣器来播放几段音乐。
可进行自动循环播放和手动播放两个模式的选择。
如果为手动播放,则通过拨动拨码开关第1、2位选择。
播放音乐时,要求将该音乐的序号(分别为A1、A2,A3)以及该音乐播放剩余的时间(分、秒)显示在数码管上。
当某首音乐开始播放时,音乐序号闪烁显示3秒钟。
关键字:SOPC、音频信号、音乐、蜂鸣器、自动循环、手动播放、剩余时间(分钟、秒钟)显示、音乐序号(A1、A2、A3)显示。
设计原理:首先采用分块设计法,将设计分为分频模块、时间动态扫描显示模块、音乐播放模块、顶层模块。
其中音乐播放模块又可分为音频模块、音乐代码模块,预置数模块利用计数的方式将50MHZ的频率分为12MHz、100Hz、8Hz、1Hz。
音乐播放模块需要完成以下设计:①预置乐曲,本次设计选取了《梁祝》的一段作预置,在作预置时,需要将乐曲音符转换成相应的代码,通过计算逐一将音符转换成代码,通过EDA开发平台quartus Ⅱ进行乐曲定制;②为了提供乐曲发音所需要的发音频率,编写数控分频器程序,对单一输入高频,进行预置数分频,生成每个音符发音的相应频率;③为了给分频提供预置数,需要计算分频预置数;对每部分结构单元逐一进行编译,生成相应的元器件符号,并对独立结构单元功能进行仿真。
音调的控制频率的高低决定了音调的高低。
综合考虑各因素,本次设计中选取12MHZ作为CLK的分频计数器的输入分频信号。
由于乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符相对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。
表1 简谱中的音名与频率的关系这次设计中所演奏的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s 的话,那么一拍所应该持续的时间为0.25秒,则只需要再提供一个4Hz的时钟频率即可产生四分音符的时长。
系统工作时就按4Hz的频率依次读取简谱,当系统读到某个音符的简谱时就对应发这个音符的音调,持续时间为0.25秒.如果在曲谱文件中某个音符为三拍音长,只要将该音符连续书写三遍,系统读乐曲文件的时候就会连续读到三次,也就会发三个0.25秒的音长,这时我们听上去就会持续了三拍的时间,这样就可以控制音乐的音长了程序:音乐播放器顶层模块library ieee;use ieee.std_logic_1164.all;entity songer isport(clk50mhz,c:in std_logic;led7s:buffer std_logic_vector(6 downto 0);led_selout:out std_logic_vector(7 downto 0);spkout:out std_logic);end;architecture one of songer iscomponent notetabsport(clk:in std_logic;f1s,f8,f12,fs:out std_logic);end component;component notetabsport(clk:in std_logic;toneindex:out std_logic_vector(3 downto 0));end component;component tonetabaport(index:in std_logic_vector(3 downto 0);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;component daojishiport(clk1,clk2,c:in std_logic;led7s:buffer std_logic_vector(6 downto 0);led_selout:out std_logic_vector(7 downto 0));end component;signal tone:std_logic_vector(10 downto 0);signal toneindex:std_logic_vector(3 downto 0);signal ff1,ff8,ff12,ffs:std_logic_vector;beginu1:fp port map(clk=>clk50mhz,f1s=>ff1,f8=>ff8,f12=>ff12,fs=>ffs);u2:notetabs port map(clk=>ff8,toneindex=>toneindex);u3:tonetaba port map(index=>toneindex,tone=>tone);u4:speakera port map(clk=>ff12,tone=>tone,spks=>spkout);u5:daojishi port map(clk1=>ff1,clk2=>ffs,c=>c,led7s=>led7s,led_selout=>led_selout); end;分频模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fp isport(clk:in std_logic;f1s,f8,f12,fs:out std_logic);end;architecture bhv of fp issignal a,c,f:std_logic;signal a2,c2,f2:std_logic;beginprocess(clk)variable cnt24:std_logic_vector(25 downto 0);variable cnt8:std_logic_vector(7 downto 0);beginif clk'event and clk='1' thenif cnt24<"01011111010111100001000000" thencnt24:=cnt24+1;f1s<='0';elsifcnt24<"10111110101111000010000000" thencnt24:=cnt24+1;f1s<='1';elsecnt24:="00000000000000000000000000";end if;if cnt8<"1100100" thencnt8:=cnt8+1;fs<='0';elsifcnt8<"11001000" thencnt8:=cnt8+1;fs<='1';elsecnt8:="00000000";end if;end if;end process;process(clk,a)variable cnt:std_logic_vector(2 downto 0);beginif clk'event and clk='1'thenif cnt="111"thencnt:="011";a<='1';elsecnt:=cnt+1;a<='0';end if;end if;if a'event and a='1'thenc<=not c;if c='1'then f<='1';else f<='0';end if;end if;f12<=f;end process;process(clk,a2)variable cn:std_logic_vector(22 downto 0);beginif clk'event and clk='1'thenif cn="10111110101111000010000"thencn:="01011111010111100001000";a2<='1';elsecn:=cn+1;a<='0';end if;end if;if a2'event and a2='1'thenc2<=not c2;if c2='1'then f2<='1';else f2<='0';end if;end if;f8<=f;end process;end;fp 模块将50MHz的频率分为所需要的频率。
预置数模块library ieee;use ieee.std_logic_1164.all;entity tonetaba isport(index:in std_logic_vector(3 downto 0);tone:out std_logic_vector(10 downto 0));end;architecture one of tonetaba issignal code:out std_logic_vector(3 downto 0);signal high:out std_logic;beginsearch:process(index)begincase index iswhen"0000"=>tone<="11111111111";code<="0000";high<='0';when"0001"=>tone<="01100000101";code<="0001";high<='0';when"0010"=>tone<="01110010000";code<="0010";high<='0';when"0011"=>tone<="10000001100";code<="0011";high<='0';when"0101"=>tone<="10010101101";code<="0101";high<='0';when"0110"=>tone<="10100001010";code<="0110";high<='0';when"0111"=>tone<="10101011100";code<="0111";high<='0';when"1000"=>tone<="10110000010";code<="0001";high<='1';when"1001"=>tone<="10111001000";code<="0010";high<='1';when"1010"=>tone<="11000000110";code<="0011";high<='1';when"1100"=>tone<="11001010110";code<="0101";high<='1';when"1101"=>tone<="11010000100";code<="0110";high<='1';when"1111"=>tone<="11011000000";code<="0001";high<='1';when others=>null;end case;end process;end;模块tonetaba的功能首先是为speakera提供决定音符发音的分频预置数,而此数在speakera输入口停留时间即为此音符的节拍值。