实验九 硬件乐曲自动演奏电路设计

合集下载

eda乐曲硬件演奏电路课程设计

eda乐曲硬件演奏电路课程设计

eda乐曲硬件演奏电路课程设计一、课程目标知识目标:1. 学生能够理解EDA乐曲硬件演奏电路的基本原理,掌握电路组成及各部分功能。

2. 学生能够描述常见电子元件在演奏电路中的作用,并运用相关知识分析电路性能。

3. 学生能够掌握编程软件及硬件设计工具,完成简单的EDA乐曲演奏电路设计。

技能目标:1. 学生能够运用所学知识,独立完成演奏电路的搭建与调试。

2. 学生能够通过编程软件,编写简单的乐曲程序,实现乐曲演奏。

3. 学生能够运用团队协作能力,共同解决演奏电路设计过程中遇到的问题。

情感态度价值观目标:1. 学生通过本课程的学习,培养对电子技术和音乐艺术的热爱,提高审美情趣。

2. 学生在学习过程中,养成积极探究、勇于创新的精神,增强实践操作能力。

3. 学生能够认识到科技与艺术的结合在生活中的应用,增强社会责任感和团队合作意识。

课程性质:本课程为实践性较强的课程,结合电子技术与音乐艺术,旨在培养学生的动手能力、创新思维和团队协作能力。

学生特点:本年级学生具备一定的电子技术基础知识,对音乐艺术有一定兴趣,好奇心强,善于动手实践。

教学要求:教师应注重理论与实践相结合,引导学生积极参与实践操作,鼓励学生创新思维,提高团队协作能力。

同时,关注学生的个体差异,因材施教,确保每位学生都能在课程中收获成长。

二、教学内容本课程教学内容主要包括以下三个方面:1. 理论知识学习:- 电路基础知识:回顾电路的基本概念、原理及电路图的识别。

- 电子元件介绍:学习常用电子元件的原理、功能及在演奏电路中的应用。

- EDA软件使用:介绍编程软件及硬件设计工具的使用方法,如Multisim、Proteus等。

2. 实践操作能力培养:- 电路搭建:学习演奏电路的搭建方法,熟悉各类电子元件的连接方式。

- 程序编写:编写简单的乐曲程序,掌握编程技巧,实现乐曲演奏。

- 调试与优化:对搭建的演奏电路进行调试,找出问题并进行优化。

3. 创新思维与团队协作:- 设计实践:运用所学知识,小组合作完成指定乐曲的演奏电路设计。

EDA课程设计---乐曲硬件演奏电路的VHDL设计

EDA课程设计---乐曲硬件演奏电路的VHDL设计

EDA课程设计题目:乐曲硬件演奏电路的VHDL设计一、 设计题目:乐曲硬件演奏电路的VHDL 设计二、 设计目标:1)能够播放“梁祝”乐曲。

2)能够通过LED 显示音阶。

3)具有“播放/停止”功能,并在此基础上实现“按键演奏”的电子琴功能。

三、 设计原理:1. 音乐基础知识一段简单乐谱由音调和节拍组成,音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。

音符的节拍我们可以举例来说明。

在一张乐谱中,我们经常会看到这样的表达式,如1=C 44、1=G 43……等等。

以43为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。

比如:图1其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。

1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。

那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 。

我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。

2.原理图框图:图2.框图3.原理图说明音乐播放原理说明音符的频率由数控分频器模块Speakera产生。

ToneTaba模块从NoteTabs模块中输入的音符数据,将对应的分频预置数据传送给Speakera模块,并将音符数据送到LED模块显示音阶。

NoteTabs模块中包含有一个音符数据ROM,里面存有歌曲“梁祝”的全部音调,在此模块中设置了一个8位二进制计数器,作为音符数据ROM的地址发生器。

这个计数器的计数频率为4Hz,即每一个数值的停留时间为0.25秒。

例如:“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒钟时间,所对应的“3”音符分频预置数为1036,在Speakera的输入端停留了1秒。

乐曲硬件演奏电路设计

乐曲硬件演奏电路设计

目录目录 0前言: (1)1.题目分析 (1)1.1 功能要求 (1)1.2 性能指标 (1)2.设计方案 (2)2.1顶层实体描述 (2)2.2模块划分 (3)2.3模块描述 (3)2.3.1 Speakera模块 (3)2.3.2 ToneTaba模块 (3)2.3.3 NoteTabs模块 (4)2.4顶层电路图 (5)3.方案实现 (5)3.1 NoteTabs模块仿真及描述 (5)3.2 ToneTaba模块仿真及描述 (5)3.3 Speakera模块仿真及描述 (6)3.4顶层电路仿真及描述 (6)4.硬件测试及说明 (6)5.结论 (7)6.课程总结 (7)7.附录 (8)前言:这次设计实验我做的是乐曲硬件演奏电路设计,通过在系统编程技术课程的学习,我已经学会了用VHDL语言来实现系统要求的电路设计。

VHDL语言具有良好的电路行为描述和系统描述的能力,用VHDL语言进行电子系统的设计非常方便和实用,而基于VHDL的自顶向下的设计方法是其很大的一个优点。

1.题目分析1.1 功能要求(1)播放歌曲(2)简谱码输出显示在数码管显示(3)通过LED灯显示音阶1.2 性能指标(1)乐曲硬件演奏电路的基本原理乐曲都是由一连串的音符组成,每一音符对应着一个确定的频率,按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。

我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,所以,掌握好一首歌曲的节奏,就能完整地演奏出来。

(2)音符频率和乐曲节奏多个不同频率的信号可通过对某个基准频率进行分频器获得,本设计中选取750KHz的基准频率,由于clk端输入的是较高频率12MHz信号,可以对其进行16分频。

计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低。

自动奏乐器一

自动奏乐器一

一、设计题目及要求1、开机能自动奏一个乐曲,可以反复演奏;2、演奏速度可变;1 1 5 5 6 6 5—4 4 3 3 2 2 1—5 5 4 4 3 3 2—5 5 4 4 3 3 2—3、附加:用数码管显示乐谱。

二、设计过程及内容:(1)实验采用23.438KHZ的时钟信号。

为产生6种不同音符,必须有一分频器能够在控制下产生与六种音符相对应的时钟频率。

(2)为实现反复自动奏乐,需要一个32循环顺序脉冲发射器,脉冲控制分频器,在32个循环周期的相应节拍产生相应的音符频率,从而达到开机自动反复演奏32个节拍音乐效果。

(3)为了能够调节奏乐速度,需有一套组合分频器在控制下可以产生0.5秒/节拍和 0.25 秒/节拍的奏乐速度。

设计内容:电路设计总图:设计总图仿真图:当shuru为高电平时,仿真波形为:当shuru为低电平时,仿真波形为:(1)Part1调频部分:一次分频,采用四片74160产生16HZ和32HZ两种时钟信号;当控制端shuru为低电平时,输出时钟频率为16HZ,当shuru接高电平时,输出时钟频率为32HZ,从而初步达到快慢两种奏乐速度。

Part1仿真波形图:(二) Part2顺序脉冲选通部分:控制按顺序反复演奏32个节拍。

Part2电路图:Part2仿真图:1.Part2-3部分,实现二次分频,产生2HZ和4HZ频率,接于顺序脉冲选通主电路;Part2-3电路图:时于Part2-3输出端相与,实现演奏同步。

3.产生一个32顺序脉冲,然后用组合电路控制在相应脉冲时刻产生应对的音频信号,将所有需要段音音节与Part2-3部分相并。

其中,Part2-1部分电路图如下:(三)Part3音频调节:产生六种音符频率。

在s0—s5的控制下,用不同的计数器置位信号从而产生6种音符对应的频率。

Part3仿真图:(四)Part4数码管显示控制部分:相应音符显示相应数字用74148对1-6个控制信号译码产生000,001,010,011,100,101,110然后经过7448译码产生数码管显示的7个控制信号。

EDA硬件乐曲演奏电路设计梁祝两只老虎

EDA硬件乐曲演奏电路设计梁祝两只老虎

编号:EDA综合设计实验报告课题:硬件乐曲演奏电路设计专业:智能科学与技术学生姓名:黎良贵学号: 12008502112014 年11 月30 日一、概述:硬件乐曲演奏电路顶层模块图如图1-1所示,电路图由11个子模块组成,能够实现:(1)梁祝乐曲的自动演奏;(2)键盘弹奏歌曲;(3)ROM中能存两首歌曲,并能手动选歌。

二、实验原理:①音符的频率可以由图1-1中的SPKER获得。

这是一个数控分频器。

由其CLK端输入一具有较高频率(1MHz)的时钟,通过SPKER分频后,经由D触发器构成的分频电路,由SPK_KX口输出。

由于直接从分频器中出来的输出信号是脉宽极窄的信号,为了有利于驱动扬声器,需另加一个D触发器分频以均衡其占空比,但这时的频率将是原来的1/2。

SPKER对CLK输入信号的分频比由输入的11位预置数TN[10..0]决定。

SPK_KX的输出频率将决定每一音符的音调;这样,分频计数器的预置值TN[10..0] 与输出频率就有了对应关系,而输出的频率又与音乐音符的发声有对应关系,例如在F_CODE模块中若取TN[10..0]=11'H40C,将由SPK_KX发出音符为“3”音的信号频率。

②音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,图1-1中模块F_CODE的功能首先是为模块SPKER(11位分频器)提供决定所发音符的分频预置数,而此数在SPKER输入口停留的时间即为此音符的节拍周期。

模块F_CODE是乐曲简谱码对应的分频预置数查表电路,每一音符的停留时间则由音乐节拍和音调发生查表模块MUSIC中简谱码和工作时钟inclock的频率决定,在此为4Hz。

这4Hz频率来自分频模块FDIV,模块MUSIC是一个LPM_ROM。

它的输入频率来自锁相环PLL20的2kHz输出频率。

而模块F_CODE的14个值的输出由对应于MUSIC模块输出的q[3..0]及4位输入值INX[3..0]确定,而INX[3..0]最多有16种可选值。

乐曲硬件演奏电路EDA设计

乐曲硬件演奏电路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)、通用寄存器、通用微处理器等电路。

实验硬件乐曲自动演奏电路实施方案

实验硬件乐曲自动演奏电路实施方案

验十硬件乐曲自动演奏电路设计1、实验目地:学习利用数控分频器设计硬件电子琴实验.实验仪器:PC机,操作系统为Windows2000/xp,Quartus II 5.1 设计平台,GW48系列SOPE/EDA实验开发系统.3、实验原理:本设计乐曲选取《梁祝》中化蝶部分,其简谱如图1所示.图1 《梁祝》中化蝶部分简谱组成乐曲地每个音符地发音频率值及其持续地时间是乐曲能连续演奏所需地2个基本要素,首先让我们来了解音符与频率地关系.乐曲地12平均率规定:每2个八度音(如简谱中地中音1与高音1)之间地频率相差1倍.在2个八度音之间,又可分为12个半音,每2个半音地频率比为.另外,音符A(简谱中地低音6)地频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音.由此可以计算出简谱中从低音1至高音1之间每个音符地频率,如表1所示.表1 简谱中音符与频率地关系主系统由4个模块组成;例1-1是顶层设计文件,其内部有三个功能模块(如图2所示):Tone.VHD(例1-2)和Speaker.VHD(例1-3)及Notetabs.VHD(例1-4).模块TONE是音阶发生器,当4位发声控制输入INDEX中某一位为高电平时,则对应某一音阶地数值将从端口TONE输出,作为获得该音阶地分频预置值;同时由CODE输出对应该音阶简谱地显示数码,如‘5’,并由HIGH输出指示音阶高8度显示.由例6-28可见,其语句结构只是类似与真值表地纯组合电路描述,其中地音阶分频预置值,如Tone <= 1290是根据产生该音阶频率所对应地分频比获得地.图2 硬件电子琴电路结构模块SPEAKER中地主要电路是一个数控分频器,它由一个初值可预置地加法计数器构成,当模块SPEAKER由端口TONE获得一个2进制数后,将以此值为计数器地预置数,对端口CLK12MHZ输入地频率进行分频,之后由SPKOUT向扬声器输出发声.模块NOTETABS,用于产生节拍控制(INDEX数据存留时间)和音阶选择信号,即在NOTETABS模块放置一个乐曲曲谱真值表,由一个计数器地计数值来控制此真值表地输出,而由此计数器地计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件地乐曲自动演奏电路.试完成此项设计,并在EDA实验系统上地FPGA目标器件中实现之.5、实验内容:编译适配以上4个示例文件,给出仿真波形,最后进行下载和硬件测试实验.建议使用实验电路模式“3”(附图2-5),用短路帽选择“CLOCK9”地输入频率选择12MHz,此信号作为系统输入信号CLK12MHZ;CLK8HZ与clock2相接,接受4Hz频率;键8至键1 作为INDEX输入信号控制各音阶;选择数码管1显示琴音简谱码,发光管D1显示高8度.6、思考题1:例1-3中地进程DelaySpkS对扬声器发声有什么影响?7、思考题2:电路上应该满足哪些条件,才能用数字器件直接输出地方波驱动扬声器发声?8、实验报告:用仿真波形和电路原理图,详细叙述硬件电子琴地工作原理及其4个VHDL 文件中相关语句地功能,叙述硬件实验情况..附录;【例10-1】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY TOP IS -- 顶层设计PORT ( CLK12MHZ : IN STD_LOGIC;CLK8HZ : IN STD_LOGIC;CODE1 : OUTINTEGERRANGE 0 TO 15;HIGH1,SPKOUT : OUT STD_LOGIC);END;ARCHITECTURE one OF TOP ISCOMPONENT TonePORT ( Index : IN INTEGERRANGE 0 TO 15;CODE : OUTINTEGERRANGE 0 TO 15;HIGH : OUT STD_LOGIC;Tone : OUT INTEGER RANGE 0 TO 16#7FF# ); --11位2进制数 END COMPONENT;COMPONENT SpeakerPORT ( clk : IN STD_LOGIC;Tone1 : IN INTEGER RANGE 0 TO 16#7FF#; --11位2进制数 SpkS : OUT STD_LOGIC );END COMPONENT;component NotetabsPort ( clk :in std_logic;index0 : out INTEGERRANGE 0 TO 15);end component;SIGNAL Tone2 : INTEGERRANGE0 TO 16#7FF#;SIGNAL Indx: INTEGERRANGE 0 TO 15;BEGIN -- 安装U1, U2, U3u1 : Tone PORT MAP (Index=>Indx, Tone=>Tone2,CODE=>CODE1,HIGH=>HIGH1); u2 : Speaker PORT MAP (clk=>CLK12MHZ,Tone1=>Tone2, SpkS=>SPKOUT );u3 : Notetabs PORT MAP(clk=>CLK8HZ,Index0=>Indx);END;【例10-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Tone ISPORT ( Index : IN INTEGERRANGE 0 TO 15;CODE : OUTINTEGERRANGE 0 TO 15;HIGH : OUT STD_LOGIC;Tone : OUTINTEGERRANGE0 TO 16#7FF# );END;ARCHITECTURE one OF Tone ISBEGINSearch : PROCESS(Index)BEGINCASE Index IS -- 译码电路,查表方式,控制音调地预置数 WHEN 0=>Tone <= 2047; CODE <= 0; HIGH <= '0';WHEN 1=>Tone <= 773; CODE <= 1; HIGH <= '0';WHEN 2=>Tone <= 912; CODE <= 2; HIGH <= '0';WHEN 3=>Tone <= 1036; CODE <= 3; HIGH <= '0';WHEN 5=>Tone <= 1197; CODE <= 5; HIGH <= '0';WHEN 6=>Tone <= 1290; CODE <= 6; HIGH <= '0';WHEN 7=>Tone <= 1372; CODE <= 7; HIGH <= '0';WHEN 8=>Tone <= 1410; CODE <= 1; HIGH <= '1';WHEN 9=>Tone <= 1480; CODE <= 2; HIGH <= '1';WHEN 10=>Tone <= 1542; CODE <= 3; HIGH <= '1';WHEN 12=>Tone <= 1622; CODE <= 5; HIGH <= '1';WHEN 13=>Tone <=1668; CODE <= 6; HIGH <= '1';WHEN 15=>Tone <= 1728; CODE <= 1; HIGH <= '1';WHEN OTHERS =>NULL;END CASE;END PROCESS;END;【例10-3】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Speaker ISPORT ( clk : IN STD_LOGIC;Tone1 : IN INTEGER RANGE 0 TO 16#7FF#;SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Speaker ISSIGNAL PreCLK , FullSpkS : STD_LOGIC;BEGINDivideCLK : PROCESS(clk) -- 将CLK进 11分频,PreCLK为C L 11K 6分频VARIABLE Count4 : INTEGERRANGE 0 TO 15;BEGINPreCLK <= '0';IF Count4 > 11 THEN PreCLK <= '1'; Count4 := 0;ELSIF clk'EVENT AND clk='1' THEN Count4 := Count4 + 1;END IF;END PROCESS;GenSpkS : PROCESS(PreCLK, Tone1)VARIABLE Count11 : INTEGERRANGE0 TO 16#7FF#;BEGIN -- 11位可预置计数器IF PreCLK'EVENT AND PreCLK = '1' THENIF Count11=16#7FF# THEN Count11 := Tone1; FullSpkS <= '1'; ELSE Count11:=Count11 + 1; FullSpkS <= '0';END IF;END IF;END PROCESS;DelaySpkS : PROCESS(FullSpkS)VARIABLE Count2 : STD_LOGIC;BEGINIF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2;IF Count2 = '1' THEN SpkS <= '1';ELSE SpkS <= '0';END IF;END IF;END PROCESS;END;【例10-4】library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity Notetabs isPort ( clk: in std_logic; --系统时钟;键盘输入/自动演奏 index0 : out INTEGER RANGE 0 TO 15); --音符信号输出end NOTETABS;architecture Behavioral of Notetabs issignal count0:integer range 0 to 138;--changebeginmusic:process(clk) --此进程完成自动演奏部分曲地地址累加beginif clk'event and clk='1' thenif count0=138 then count0<=0;else count0<=count0+1;end if;end if;end process;com1:process(count0)begincase count0 is --此case语句:存储自动演奏部分地曲when 00 =>index0<=3;when 01 =>index0<=3;when 02 =>index0<=3;when 03 =>index0<=3;when 04 =>index0<=5;when 05 =>index0<=5;when 06 =>index0<=3;when 07 =>index0<=6;when 08 =>index0<=8;when 09 =>index0<=8;when 10 =>index0<=8;when 11 =>index0<=9;when 12 =>index0<=6;when 13 =>index0<=8;when 14 =>index0<=5;when 15 =>index0<=5;when 16 =>index0<=12;when 17 =>index0<=12;when 18 =>index0<=12;when 19 =>index0<=15;when 20 =>index0<=13;when 21 =>index0<=12;when 22 =>index0<=10;when 23 =>index0<=12;when 25 =>index0<=9; when 26 =>index0<=9; when 27 =>index0<=9; when 28 =>index0<=9; when 29 =>index0<=9; when 30 =>index0<=9; when 31 =>index0<=0; when 32 =>index0<=9; when 33 =>index0<=9; when 34 =>index0<=9; when 35 =>index0<=10; when 36 =>index0<=7; when 37 =>index0<=7; when 38 =>index0<=6; when 39 =>index0<=6; when 40 =>index0<=5; when 41 =>index0<=5; when 42 =>index0<=5; when 43 =>index0<=6; when 44 =>index0<=8; when 45 =>index0<=8; when 46 =>index0<=9; when 47 =>index0<=9; when 48 =>index0<=3; when 49 =>index0<=3; when 50 =>index0<=8; when 51 =>index0<=8; when 52 =>index0<=6; when 53 =>index0<=5; when 54 =>index0<=6; when 55 =>index0<=8; when 56 =>index0<=5; when 57 =>index0<=5; when 58 =>index0<=5; when 59 =>index0<=5; when 60 =>index0<=5; when 61 =>index0<=5; when 62 =>index0<=5; when 63 =>index0<=5; when 64 =>index0<=10; when 65 =>index0<=10; when 66 =>index0<=10; when 67 =>index0<=12;when 69 =>index0<=7; when 70 =>index0<=9; when 71 =>index0<=9; when 72 =>index0<=6; when 73 =>index0<=8; when 74 =>index0<=5; when 75 =>index0<=5; when 76 =>index0<=5; when 77 =>index0<=5; when 78 =>index0<=5; when 79 =>index0<=5; when 80 =>index0<=3; when 81 =>index0<=5; when 82 =>index0<=3; when 83 =>index0<=3; when 84 =>index0<=5; when 85 =>index0<=6; when 86 =>index0<=7; when 87 =>index0<=9; when 88 =>index0<=6; when 89 =>index0<=6; when 90 =>index0<=6; when 91 =>index0<=6; when 92 =>index0<=6; when 93 =>index0<=6; when 94 =>index0<=5; when 95 =>index0<=6; when 96 =>index0<=8; when 97 =>index0<=8; when 98 =>index0<=8; when 99 =>index0<=9; when 100=>index0<=12; when 101=>index0<=12; when 102=>index0<=12; when 103=>index0<=10; when 104=>index0<=9; when 105=>index0<=9; when 106=>index0<=10; when 107=>index0<=9; when 108=>index0<=8; when 109=>index0<=8; when 110=>index0<=6; when 111=>index0<=5;when 113=>index0<=3;when 114=>index0<=3;when 115=>index0<=3;when 116=>index0<=8;when 117=>index0<=8;when 118=>index0<=8;when 119=>index0<=8;when 120=>index0<=6;when 121=>index0<=8;when 122=>index0<=6;when 123=>index0<=5;when 124=>index0<=3;when 125=>index0<=5;when 126=>index0<=6;when 127=>index0<=8;when 128=>index0<=5;when 129=>index0<=5;when 130=>index0<=5;when 131=>index0<=5;when 132=>index0<=5;when 133=>index0<=5;when 134=>index0<=5;when 135=>index0<=5;when 136=>index0<=0;when 137=>index0<=0;when 138=>index0<=0;when others => null;end case;end process;end Behavioral;版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.Zzz6Z。

实验09硬件电子琴

实验09硬件电子琴

实验九硬件电子琴一. 实验目的1. 了解交流蜂鸣器的发音原理;2. 利用蜂鸣器呵呵按键设计硬件电子琴;3. 学会在编写独立HDL顶层文件。

二. 准备知识与利用微处理器(CPU或MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂的多,仅凭传统的数字逻辑技术,很难完成简单的演奏电路,但是借助于功能强大的EDA工具与VHDL语言,就相对简单,很容易实现。

实验箱上有1个交流蜂鸣器BUZZER,通过跳线JP6的BEEP与可编程逻辑器件相连接。

其硬件原理图如图!!!!!!!!所示。

可以看出,为了增加I/O口的驱动能力,在此采用了PNP型三极管,这样只要在BEEP上输入一定频率的脉冲,蜂鸣器就会发出音乐。

从能量的角度来说,这个脉冲信号占空比最好为1:1,此时蜂鸣器的发声强度最大。

乐曲演奏的原理:由于组成乐曲的每个音符的频率值(音调)及其持续时间(音长)是乐曲演奏的2个基本数据,因此需要控制输出到蜂鸣器的激励信号的频率和该频率信号持续的时间。

频率的高低决定了音调的高低,而乐曲的简谱与个音名的频率对应关系如表9.1所示。

所以不同的频率的信号都从同一基准频率分频而来的。

由于音节频率为非整数,而把分频系数作为小数处理又太麻烦,故需将计算得到的分频数进行四舍五入取整处理,并且其基准频率和分频系数应综合考虑加以选择,从而保证音乐不会走调。

如在48MHz的时钟下,中音1(对应的频率值为523..25Hz)的分频系数应该为48000000/(2*523.25)=0xb327,这样只需对系统的时钟进行45863次分频,然后再进行占空比为1:1的二分频即可得到所要的中音1.至于其它音符,同样可以求出其对应的分频系数。

如表9.2所示。

表9.1 简谱中的音名与频率的关系表9.2 简谱中音名与分频次数的关系从表9.2可知,分频器即计数器的位宽为17位即可。

分频计数器的计数方式是0~N还是N~满量程,在程序中需要加以区别,实验中最好采用N~满量程的就是方式,那么计数器计满时的加载数就是计满最大值+1-48000000/(2*f)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

验十硬件乐曲自动演奏电路设计1、实验目的:学习利用数控分频器设计硬件电子琴实验。

2、实验仪器:PC机,操作系统为Windows2000/xp,Quartus II 5.1 设计平台,GW48系列SOPE/EDA实验开发系统。

3、实验原理:本设计乐曲选取《梁祝》中化蝶部分,其简谱如图1所示。

图1 《梁祝》中化蝶部分简谱组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素,首先让我们来了解音符与频率的关系。

乐曲的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。

在2个八度音之间,又可分为12个半音,每2个半音的频率比为。

另外,音符A(简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。

由此可以计算出简谱中从低音1至高音1之间每个音符的频率,如表1所示。

表1 简谱中音符与频率的关系4、主系统由4个模块组成;例1-1是顶层设计文件,其内部有三个功能模块(如图2所示):Tone.VHD(例1-2)和Speaker.VHD(例1-3)及Notetabs.VHD(例1-4).模块TONE是音阶发生器,当4位发声控制输入INDEX中某一位为高电平时,则对应某一音阶的数值将从端口TONE输出,作为获得该音阶的分频预置值;同时由CODE输出对应该音阶简谱的显示数码,如‘5’,并由HIGH输出指示音阶高8度显示。

由例6-28可见,其语句结构只是类似与真值表的纯组合电路描述,其中的音阶分频预置值,如Tone <= 1290是根据产生该音阶频率所对应的分频比获得的。

图2 硬件电子琴电路结构模块SPEAKER中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块SPEAKER由端口TONE获得一个2进制数后,将以此值为计数器的预置数,对端口CLK12MHZ输入的频率进行分频,之后由SPKOUT向扬声器输出发声。

模块NOTETABS,用于产生节拍控制(INDEX数据存留时间)和音阶选择信号,即在NOTETABS模块放置一个乐曲曲谱真值表,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。

试完成此项设计,并在EDA实验系统上的FPGA目标器件中实现之。

5、实验内容:编译适配以上4个示例文件,给出仿真波形,最后进行下载和硬件测试实验。

建议使用实验电路模式“3”(附图2-5),用短路帽选择“CLOCK9”的输入频率选择12MHz,此信号作为系统输入信号CLK12MHZ;CLK8HZ与clock2相接,接受4Hz频率;键8至键1 作为INDEX输入信号控制各音阶;选择数码管1显示琴音简谱码,发光管D1显示高8度。

6、思考题1:例1-3中的进程DelaySpkS对扬声器发声有什么影响?7、思考题2:电路上应该满足哪些条件,才能用数字器件直接输出的方波驱动扬声器发声?8、实验报告:用仿真波形和电路原理图,详细叙述硬件电子琴的工作原理及其4个VHDL 文件中相关语句的功能,叙述硬件实验情况.。

附录;【例10-1】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY TOP IS -- 顶层设计PORT ( CLK12MHZ : IN STD_LOGIC;CLK8HZ : IN STD_LOGIC;CODE1 : OUT INTEGER RANGE 0 TO 15;HIGH1,SPKOUT : OUT STD_LOGIC);END;ARCHITECTURE one OF TOP ISCOMPONENT TonePORT ( 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#7FF# ); --11位2进制数 END COMPONENT;COMPONENT SpeakerPORT ( clk : IN STD_LOGIC;Tone1 : IN INTEGER RANGE 0 TO 16#7FF#; --11位2进制数 SpkS : OUT STD_LOGIC );END COMPONENT;component NotetabsPort ( clk :in std_logic;index0 : out INTEGER RANGE 0 TO 15);end component;SIGNAL Tone2 : INTEGER RANGE 0 TO 16#7FF#;SIGNAL Indx: INTEGER RANGE 0 TO 15;BEGIN -- 安装U1, U2, U3u1 : Tone PORT MAP (Index=>Indx, Tone=>Tone2,CODE=>CODE1,HIGH=>HIGH1); u2 : Speaker PORT MAP (clk=>CLK12MHZ,Tone1=>Tone2, SpkS=>SPKOUT );u3 : Notetabs PORT MAP(clk=>CLK8HZ,Index0=>Indx);END;【例10-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Tone ISPORT ( 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#7FF# );END;ARCHITECTURE one OF Tone ISBEGINSearch : PROCESS(Index)BEGINCASE Index IS -- 译码电路,查表方式,控制音调的预置数 WHEN 0=>Tone <= 2047; CODE <= 0; HIGH <= '0';WHEN 1=>Tone <= 773; CODE <= 1; HIGH <= '0';WHEN 2=>Tone <= 912; CODE <= 2; HIGH <= '0';WHEN 3=>Tone <= 1036; CODE <= 3; HIGH <= '0';WHEN 5=>Tone <= 1197; CODE <= 5; HIGH <= '0';WHEN 6=>Tone <= 1290; CODE <= 6; HIGH <= '0';WHEN 7=>Tone <= 1372; CODE <= 7; HIGH <= '0';WHEN 8=>Tone <= 1410; CODE <= 1; HIGH <= '1';WHEN 9=>Tone <= 1480; CODE <= 2; HIGH <= '1';WHEN 10=>Tone <= 1542; CODE <= 3; HIGH <= '1';WHEN 12=>Tone <= 1622; CODE <= 5; HIGH <= '1';WHEN 13=>Tone <=1668; CODE <= 6; HIGH <= '1';WHEN 15=>Tone <= 1728; CODE <= 1; HIGH <= '1';WHEN OTHERS =>NULL;END CASE;END PROCESS;END;【例10-3】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Speaker ISPORT ( clk : IN STD_LOGIC;Tone1 : IN INTEGER RANGE 0 TO 16#7FF#;SpkS : OUT STD_LOGIC );END;ARCHITECTURE one OF Speaker ISSIGNAL PreCLK , FullSpkS : STD_LOGIC;BEGINDivideCLK : PROCESS(clk) -- 将CLK进 11分频,PreCLK为C L 11K 6分频VARIABLE Count4 : INTEGER RANGE 0 TO 15;BEGINPreCLK <= '0';IF Count4 > 11 THEN PreCLK <= '1'; Count4 := 0;ELSIF clk'EVENT AND clk='1' THEN Count4 := Count4 + 1;END IF;END PROCESS;GenSpkS : PROCESS(PreCLK, Tone1)VARIABLE Count11 : INTEGER RANGE 0 TO 16#7FF#;BEGIN -- 11位可预置计数器IF PreCLK'EVENT AND PreCLK = '1' THENIF Count11=16#7FF# THEN Count11 := Tone1; FullSpkS <= '1'; ELSE Count11:=Count11 + 1; FullSpkS <= '0';END IF;END IF;END PROCESS;DelaySpkS : PROCESS(FullSpkS)VARIABLE Count2 : STD_LOGIC;BEGINIF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2;IF Count2 = '1' THEN SpkS <= '1';ELSE SpkS <= '0';END IF;END IF;END PROCESS;END;【例10-4】library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity Notetabs isPort ( clk: in std_logic; --系统时钟;键盘输入/自动演奏 index0 : out INTEGER RANGE 0 TO 15); --音符信号输出end NOTETABS;architecture Behavioral of Notetabs issignal count0:integer range 0 to 138;--changebeginmusic:process(clk) --此进程完成自动演奏部分曲的地址累加beginif clk'event and clk='1' thenif count0=138 then count0<=0;else count0<=count0+1;end if;end if;end process;com1:process(count0)begincase count0 is --此case语句:存储自动演奏部分的曲when 00 =>index0<=3;when 01 =>index0<=3;when 02 =>index0<=3;when 03 =>index0<=3;when 04 =>index0<=5;when 05 =>index0<=5;when 06 =>index0<=3;when 07 =>index0<=6;when 08 =>index0<=8;when 09 =>index0<=8;when 10 =>index0<=8;when 11 =>index0<=9;when 12 =>index0<=6;when 13 =>index0<=8;when 14 =>index0<=5;when 15 =>index0<=5;when 16 =>index0<=12;when 17 =>index0<=12;when 18 =>index0<=12;when 19 =>index0<=15;when 20 =>index0<=13;when 21 =>index0<=12;when 22 =>index0<=10;when 23 =>index0<=12;when 25 =>index0<=9; when 26 =>index0<=9; when 27 =>index0<=9; when 28 =>index0<=9; when 29 =>index0<=9; when 30 =>index0<=9; when 31 =>index0<=0; when 32 =>index0<=9; when 33 =>index0<=9; when 34 =>index0<=9; when 35 =>index0<=10; when 36 =>index0<=7; when 37 =>index0<=7; when 38 =>index0<=6; when 39 =>index0<=6; when 40 =>index0<=5; when 41 =>index0<=5; when 42 =>index0<=5; when 43 =>index0<=6; when 44 =>index0<=8; when 45 =>index0<=8; when 46 =>index0<=9; when 47 =>index0<=9; when 48 =>index0<=3; when 49 =>index0<=3; when 50 =>index0<=8; when 51 =>index0<=8; when 52 =>index0<=6; when 53 =>index0<=5; when 54 =>index0<=6; when 55 =>index0<=8; when 56 =>index0<=5; when 57 =>index0<=5; when 58 =>index0<=5; when 59 =>index0<=5; when 60 =>index0<=5; when 61 =>index0<=5; when 62 =>index0<=5; when 63 =>index0<=5; when 64 =>index0<=10; when 65 =>index0<=10; when 66 =>index0<=10; when 67 =>index0<=12;when 69 =>index0<=7; when 70 =>index0<=9; when 71 =>index0<=9; when 72 =>index0<=6; when 73 =>index0<=8; when 74 =>index0<=5; when 75 =>index0<=5; when 76 =>index0<=5; when 77 =>index0<=5; when 78 =>index0<=5; when 79 =>index0<=5; when 80 =>index0<=3; when 81 =>index0<=5; when 82 =>index0<=3; when 83 =>index0<=3; when 84 =>index0<=5; when 85 =>index0<=6; when 86 =>index0<=7; when 87 =>index0<=9; when 88 =>index0<=6; when 89 =>index0<=6; when 90 =>index0<=6; when 91 =>index0<=6; when 92 =>index0<=6; when 93 =>index0<=6; when 94 =>index0<=5; when 95 =>index0<=6; when 96 =>index0<=8; when 97 =>index0<=8; when 98 =>index0<=8; when 99 =>index0<=9; when 100=>index0<=12; when 101=>index0<=12; when 102=>index0<=12; when 103=>index0<=10; when 104=>index0<=9; when 105=>index0<=9; when 106=>index0<=10; when 107=>index0<=9; when 108=>index0<=8; when 109=>index0<=8; when 110=>index0<=6; when 111=>index0<=5;when 113=>index0<=3; when 114=>index0<=3; when 115=>index0<=3; when 116=>index0<=8; when 117=>index0<=8; when 118=>index0<=8; when 119=>index0<=8; when 120=>index0<=6; when 121=>index0<=8; when 122=>index0<=6; when 123=>index0<=5; when 124=>index0<=3; when 125=>index0<=5; when 126=>index0<=6; when 127=>index0<=8; when 128=>index0<=5; when 129=>index0<=5; when 130=>index0<=5; when 131=>index0<=5; when 132=>index0<=5; when 133=>index0<=5; when 134=>index0<=5; when 135=>index0<=5; when 136=>index0<=0; when 137=>index0<=0; when 138=>index0<=0; when others => null; end case;end process;end Behavioral;。

相关文档
最新文档