欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    EDA课程设计——乐曲硬件演奏电路.doc

    • 资源ID:23960846       资源大小:248KB        全文页数:41页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    EDA课程设计——乐曲硬件演奏电路.doc

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateEDA课程设计乐曲硬件演奏电路EDA课程设计乐曲硬件演奏电路电子技术基础项目设计报告课程名称 任课教师 设计题目 乐曲硬件演奏电路设计 班级 姓名学号 成绩 日期 一、 题目分析1.设计要求利用FPGA,设计一硬件乐曲硬件演奏电路,能够利用硬件电路,自动播放音乐。2.题目分析乐曲是由一连串的音符组成,而每个音符的发音频率值及其持续时间是乐曲能连续演奏所需的两个基本因素。所以,设计音乐发生电路,需要得到相应音符的频率值,及其持续时间。如果能够得到这两个基本元素,利用程序来控制FPGA某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。所以,获取这两个要素是本实验的关键。(1)频率值频率的高低决定了音调的高低。由于乐曲都是由一连串的音符组成,因此按照乐曲的乐谱,依次输出这些音符相对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。简谱的音名与频率的关系如下表:表1简谱中的音名与频率的关系音名频率/Hz音名频率/Hz音名频率/Hz低音1261.6中音1523.3高音11045.5低音2293.7中音2587.3高音21174.7低音3329.6中音3659.3高音31318.5低音4349.2中音4698.5高音41396.9低音5392中音5784高音51568低音6440中音6880高音61760低音7493.9中音7987.8高音71975.5(2)时长这次设计中所演奏的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s的话,那么一拍所应该持续的时间为0.25秒,则只需要再提供一个4Hz的时钟频率即可产生四分音符的时长。系统工作时就按4Hz的频率依次读取简谱,当系统读到某个音符的简谱时就对应发这个音符的音调,持续时间为0.25秒,如果在曲谱文件中某个音符为三拍音长,只要将该音符连续书写三遍,系统读乐曲文件的时候就会连续读到三次,也就会发三个0.25秒的音长,这时我们听上去就会持续了三拍的时间,这样就可以控制音乐的音长了。二、 设计方案1.顶层实体描述音乐播放器,是能够演奏一曲完整的乐曲,在外部时钟的作用下,产生相应频率的方波信号,即在乐曲中对应相应的音符。并且信号要持续一定的时间,即对应乐曲中的节拍。得到了音调和节拍后,就可以组成相应的乐曲了。2.模块划分采用“自顶向下”的设计方法,将音乐播放器模块主要划分为地址发生模块、数控分频模块、music模块和预置数模块。(1)地址发生模块:增地址计数器,用于产生地址数。(2)music模块:用于存储乐曲,本次设计,将梁祝的一段乐曲存储在rom中;(3)预置数模块:给分频器提供预置数,需要计算分频预置数;(4)数控分频模块:为了提供乐曲发音所需要的发音频率,编写数控分频器程序,对一输入高频信号,进行分频,生成每个音符发音的相应频率;Music模块分频预置数数控分频器扬声器地址发生器图1 模块划分图3.模块描述(1)地址发生器图2 CNT138实体地址发生器,即是一个计数器,由于存储了梁祝138个音符,所以此计数器的最大值为138。(2)Music模块Music模块存放乐曲的音符数据。由地址发生器为music模块提供地址,每来一个时钟脉冲信号,8位二进制计数器就计数一次,ROM文件中的地址就随着递增,音符数据ROM中的音符也就一个接着一个连续的取出了。图3 rom实体此计数器时钟频率为4Hz,每读一个数据,音符持续时间为0.25秒,恰为当全音符为1s,四四拍的四分音符持续的时间。若需持续较长的时间,需要在ROM中连续写入相应的音符。例如音符数据中的中音3为一拍,持续时间1秒,所以,音符数据ROM中需要连续写入四次音符3,随着4Hz时钟速率读取地址递增,音符数据ROM中的音符数据输出给分频预置数模块。将从音符数据ROM中取出的值,通过q3.0端口输向分频预置数模块。这样乐曲中的音符就可以连续的取出了。(2) 分频预置数模块分频预置数模块是乐曲简谱码对应的分频预置数查表电路,提供了梁祝乐曲全部音符对应的分频预置数,即给数控分频器提供计数初值。图4 F_code实体梁祝乐曲全部音符对应的分频预置数,共13个,此数在TN输入口停留时间即为此音符的节拍值。这13个值的输出由对应于F_code的4位输入值INX3.0确定,而INX3.0最多有16种选择。输向F_code中INX3.0的值在speaker中对应的输出频率值与持续时间由模块music决定。 (3) 数控分频模块音符的频率由数控分频模块获得,该计数器的模为2047,当计数器计满时,计数器产生溢出信号FOUT,此溢出信号就是作为发音的频率信号。由分频预置数模块,提供的计数初值,可以产生对应的信号频率。图5 数控分频模块实体其时钟输入信号为1MHz,模块对CLK输入信号的分频比由11位预置数TN10.0决定,FOUT的输出频率将决定每一个音符的音调,这样,分频计数器的预置值与输出频率就有了对应关系。4.顶层电路图图6 顶层RTL电路图图为顶层实体生成的RTL电路。外部时钟信号由两路组成,一路为4Hz,接CNT138和rom模块,即在时钟信号作用下,存储在rom中的音乐被相应的取出给F_code模块,F_code模块经音符查找表,得到相应音符的分频预置数;另一路时钟信号为1MHz,提供给speaker模块,用作分频时钟,由F_code得到的分频预置数,经数控分频后,输出相应频率的信号给蜂鸣器,便可连续播放音乐了。三、 方案实现1.各模块仿真及描述(1)地址发生器由图可以看出,地址数在4Hz时钟作用下进行累加。 (2)music模块设置WIDTH=4,表示数据输出宽为4;DEPTH=256,表示共有256个4位数据点。在ROM中配置数据文件,编辑.mif文件。初始化数据如下:图8 music存储文件由地址发生器传入相应的地址,对应ROM中相应的音符数据,将音符连续地输出。仿真时序如下:从图中可以看出,随着地址的增加,ROM中存储的音符数据被连续地取出。(3)分频预置数模块从music模块传来相应音符的代码,对应本模块中的分频预置数。(4)数控分频模块若取出的音符为1,对应的分频预置数位773,输出FOUT的频率为,近似和表1中的值相等。2.顶层电路仿真及描述从图中可以看出,在rom中的音符,在4Hz的时钟频率下被连续地取出来,对应的数控分频模块,在1MHz的时钟频率下,输出对应音符的频率值。四、 硬件测试及说明(1)引脚锁定编译仿真无误后,进行硬件测试,首先进行引脚锁定及程序下载,引脚对应如下表:(2)功能描述enable是使能键,enable按下后,开始播放一段梁祝音乐,若按下reset键,则复位,音乐从新播放。在播放音乐的同时,数码管会显示此时播放音乐对应的音符,若为高音,则在数码管上方红灯会亮,若为中音,则不亮。若enable键未按下,则不能播放音乐。五、 结论经过时序仿真,可以看出,在外部输入的两路时钟信号作用下,音符被相应的取出,对应的频率被数控分频器输出给蜂鸣器。并进行硬件验证,可以较为完整地演奏梁祝乐曲。六、 课程总结本次的课程设计基于FPGA的乐曲硬件演奏电路的设计,通过本次设计,我更加深入地了解了VHDL语言的应用。在EDA“自顶向下”总的设计思想的指导下,将整个设计划分为3个主体模块,主要通过数控分频和定制LPMROM来完成相应的功能。在这次课程设计中,主要通过查阅EDA技术实用教程教材,并通过在网上查阅相关的资料,逐步了解整个设计的过程,然后逐个完成划分的层次,最终完成了总体的设计。期间,也遇到了一些问题,对数控分频,由于不能理解和音符频率的对应关系,所以对后续设计有所耽误。不过后来通过查阅资料,结合相应的仿真,逐步了解了其原理。在设计中,也逐渐熟悉了VHDL语言的编程方法。七、 附录1.顶层实体模块library ieee;use ieee.std_logic_1164.all;entity MusicMain is port(clk1M,clk4H:in std_logic; reset:in std_logic; enable:in std_logic; CODE:out std_logic_vector(3 downto 0); H:out std_logic; spkout:out std_logic);end;architecture one of MusicMain iscomponent CNT138 port (clk:in std_logic; reset:in std_logic; enable:in std_logic; address:out std_logic_vector(7 downto 0);end component;component rom ISPORT(address: IN STD_LOGIC_VECTOR (7 DOWNTO 0); clock: IN STD_LOGIC := '1' q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END component;component F_codeport(INX:in std_logic_vector(3 downto 0);CODE:out std_logic_vector(3 downto 0); H:out std_logic;TONE:out std_logic_vector(10 downto 0);end component;component speaker PORT(CLK:IN STD_LOGIC; TN:IN STD_LOGIC_VECTOR(10 DOWNTO 0); FOUT:OUT STD_LOGIC);end component;signal addressNum:std_logic_vector(7 downto 0); signal tone:std_logic_vector(3 downto 0); signal divNum:std_logic_vector(10 downto 0);beginu1:CNT138 port map(clk=>clk4H,address=>addressNum,reset=>reset,enable=>enable);u2:rom port map(address=>addressNum,clock=>clk4H,q=>tone);u3:F_code port map(INX=>tone,TONE=>divNum,CODE=>CODE,H=>H);u4:speaker port map(clk=>clk1M,TN=>divNum,FOUT=>spkout);end;2.地址发生器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT138 is port (clk:in std_logic; reset:in std_logic; enable:in std_logic; address:out std_logic_vector(7 downto 0);end;architecture one of CNT138 is signal counter:std_logic_vector(7 downto 0); begin process(clk) begin if enable='1' then if reset='1' then counter<="00000000" else if counter=138 then counter<="00000000" elsif clk'event and clk='1' then counter<=counter+1; end if; end if; elsif enable='0' then counter<="10001010" end if; end process; address<=counter;end;3.romLIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.all;ENTITY rom ISPORT(address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);clock: IN STD_LOGIC ;q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END rom;4.分频预置数模块library ieee;use ieee.std_logic_1164.all;entity F_code isport(INX: in std_logic_vector(3 downto 0);CODE:out std_logic_vector(3 downto 0); H:out std_logic;TONE:out std_logic_vector(10 downto 0);end F_code;architecture one of F_code isbegin search:process(INX) begin case INX is when "0000" => TONE <="11111111111"CODE<="0000"H<='0'-2047 when "0001" => TONE <="01100000101"CODE<="0001"H<='0'-773 when "0010" => TONE <="01110010000"CODE<="0010"H<='0'-912 when "0011" => TONE <="10000001100"CODE<="0011"H<='0'-1036 when "0101" => TONE <="10010101101"CODE<="0101"H<='0'-1197 when "0110" => TONE <="10100001010"CODE<="0110"H<='0'-1290 when "0111" => TONE <="10101011100"CODE<="0111"H<='0'-1372 when "1000" => TONE <="10110000010"CODE<="0001"H<='1'-1410 when "1001" => TONE <="10111001000"CODE<="0010"H<='1'-1480 when "1010" => TONE <="11000000110"CODE<="0011"H<='1'-1542 when "1100" => TONE <="11001010110"CODE<="0101"H<='1'-1622 when "1101" => TONE <="11010000100"CODE<="0110"H<='1'-1678 when "1111" => TONE <="11011000000"CODE<="0001"H<='1'-1728 when others => TONE <="11111111111"CODE<="0000"H<='0'-2047 end case;end process;end; 5.数控分频器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY speaker IS PORT(CLK:IN STD_LOGIC; TN:IN STD_LOGIC_VECTOR(10 DOWNTO 0); FOUT:OUT STD_LOGIC);END speaker;ARCHITECTURE one OF speaker IS SIGNAL FULL:STD_LOGIC; BEGIN P_REG:PROCESS(CLK) VARIABLE CNT11:STD_LOGIC_VECTOR(10 DOWNTO 0); BEGIN IF CLK'EVENT AND CLK='1' THEN IF CNT11=16#7ff# THEN CNT11:=TN; FULL<='1' ELSE CNT11:=CNT11+1; FULL<='0' END IF; END IF; END PROCESS P_REG; P_DIV:PROCESS(FULL) VARIABLE CNT2:STD_LOGIC; BEGIN IF FULL'EVENT AND FULL='1'THEN CNT2:=NOT CNT2; IF CNT2='1'THEN FOUT<='1' ELSE FOUT<='0' END IF; END IF; END PROCESS P_DIV;END one;-

    注意事项

    本文(EDA课程设计——乐曲硬件演奏电路.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开