好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

乐曲硬件演奏电路设计.doc

9页
  • 卖家[上传人]:cn****1
  • 文档编号:386453337
  • 上传时间:2022-10-25
  • 文档格式:DOC
  • 文档大小:117KB
  • / 9 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 《兰花草》乐曲硬件演奏电路设计专业:电子信息工程 学号:2010012145 姓名:程营前言乐曲演奏广泛应用于自动答录装置,铃声,集团,及智能仪器仪表设备实现方法有许多种,在众多的实验方法中,以纯硬件完成乐曲演奏,随着FPGA集成度的提高,价格下降,EDA设计工具更新换代,功能日益普及与流行,使这种方案的应用越来越多本文分析了乐曲演奏设计中音符,频率,节拍与编码的相互关系,并在EDA开发工具MAX-plus II平台上,采用VHDL语言及原理图的设计方法,实现基于FPGA片上系统动态显示可选择多首乐谱的乐曲演奏器的设计,使乐曲演奏数字电路的设计得到了更好的优化,提高了设计得灵活性目录目录.................................................................................................................1前言…………………………..........................................................................11.题目分析………...........................................................................................11.1功能要求……………………………………………………………...11.2性能指标………………………………………………………………22.设计方案…………………………………………………………………….2 2.1顶层实体描述………………………………………………………….3 2.2模块划分……………………………………………………………….3 2.3模块描述 2.3.1 Speakera模块…………………………………………………….4 2.3.2 ToneTaba模块……………………………………………………5 2.3.3 NoteTabs 模块……………………………………………………6 2.4顶层电路图……………………………………………………………..83硬件测试及说明………………………………………………………………84.课程总结………………………………………………………………………85.参考文献……………………………………………………………………….81. 题目分析1.1功能要求(1)播放歌曲(2)简谱码输出显示在数码管显示(3)通过LED灯显示音阶1.2性能指标(1)乐曲硬件演奏电路的基本原理乐曲都是由一连串的音符组成,每一音符对应着一个确定的频率,按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。

      我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,所以,掌握好一首歌曲的节奏,就能完整地演奏出来2)音符频率和乐曲节奏多个不同频率的信号可通过对某个基准频率进行分频器获得,本设计中选取750KHz的基准频率,由于clk端输入的是较高频率12MHz信号,可以对其进行16分频计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低简谱音符和频率关系如下表所示: 表1 各音阶频率对应的分频值音名分频系数初始值音名分频系数初始值音名分频系数初始值低音11274773中音16371410高音13191728低音21135912中音25871480高音22771770低音310111036中音35051542高音32481799低音49701077中音44681579高音42331814低音59501197中音54251622高音52081839低音67571290中音63791668高音61851862低音76751372中音73301717高音716518822. 设计方案自顶向下的设计框图乐曲硬件电路设计数控分频器音乐节拍和音调发生器预置数查表电路2.1顶层实体描述当一个4Hz的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系数模块,分频系数模块输出此音符相应的分频系数,将分频系数送给数控分频器模块,当12MHz的时钟脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连续的4Hz的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发出音符数据所对应的声音来。

      曲子也就流畅的播放出来了,当乐曲一遍演奏完成后,乐曲发生器能自动从头开始循环演奏顶层设计程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Songer ISPORT(CLK12MHz:IN STD_LOGIC;CLK8Hz :IN STD_LOGIC; CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)HIGH1: OUT STD_LOGICSPKOUT: OUT STD_LOGIC);ENDARCHITECTURE one OF Songer ISCOMPONENT 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); CODE: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); HIGH: OUT STD_LOGIC; Tone: OUT STD_LOGIC_VECTOR (10 DOWNTO 0)); END COMPONENT;COMPONENT Speakera PORT ( 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, ToneIndex=> ToneIndex);u2: ToneTaba PORT MAP (Index => ToneIndex, Tone=>Tone,CODE=>CODE1,HIGH=>HIGH1);u3: Speakera PORT MAP (clk=>CLK12HZ, Tone=> Tone, SpkS=>SPKOUT);END;2.2模块划分主系统由三个模块组成,分别为Speakera模块、ToneTaba模块、NoteTabs模块。

      1)Speakera是数控分频模块;(2)ToneTaba是分频预置数查找表电路模块;(3)NoteTabs音调发生器模块2.3模块描述2.3.1 Speakera模块SpeakeraclkTone[10:0]SpkS Speakera模块实体图音符的频率可以由此模块获得,这是一个数控分频器,由其clk端输入一具有较高频率的信号,通过Speakera分频后由SPKOUT输出,由于直接从数控分频器中出来的输出信号是脉冲极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/2Speakera对clk输入信号的分频比由11位预置数Tone[10..0]决定SPKOUT的输出频率将决定每一音符的音调,这样,分频计数器的预置值Tone[10..0]与SPKOUT的输出频率就有了对应关系例如在ToneTaba模块中若取Tone[10..0]=1036,将发出音符为“3”音的信号频率程序如下LIBRARY IEEE;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 IS SIGNAL PreCLK, FullSpkS : STD_LOGIC;BEGINDivideCLK : PROCESS(clk) VARIABLE Count4: STD_LOGIC_VECTOR (3 DOWNTO 0) ; BEGINPreCLK<=’0’ if Count4>11 THEN PreCLK <=’1’; Count4:= "0000"; ELSIF clk'EVENT AND clk = '1' then Count4:=Count4+1;end if;END PROCESS;GenSpkS : PROCESS(PreCLK, Tone)-- 11位可预置计数器 VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0); BEGIN IF PreCLK'EVENT AND PreCLK = '1' THEN IF Count11 = 16#7FF# THEN Count11 := Tone ; FullSpkS <= '1'; ELSE Count11 := Count11 + 1; FullSpkS <= '0'; END IF;END IF;END PROCESS;DelaySpkS : PROCESS(FullSpkS)--将输出再2分频,展宽脉冲,使扬声器有足够功率发音 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;2.3.2 ToneTaba模块ToneTabaIndex[3:0]HIGHCODE[3:0]Tone[10:0] 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.