




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
EDA技术课程设计报告专 业:测控技术与仪器 学生姓名:刘鹏飞学 号:2010043123 完成年月日2013年6月23日摘要本次课程设计中我们成功设计出了具有自动播放和手动输入功能的音乐播放器,播放器由按键输入、音符输出、音调输出、选择输出、和数控分频五个模块组成。其中各个模块的功能如下:(1)按键输入模块主要由控制按键和音符输入按键组成,党控制按键按下时开始自动播放;(2)音符输出模块主要实现将存储在rom表中的音符读出并送入音调输出模块中;(3)音调输出模块主要是通过查表来实现找到各个音调对应的分频预置数;(4)选择输出模块主要是通过按键控制来实现自动播放和手动弹奏输出功能;(5)数控分频模块实现在给定分频预置数的情况下分频输出驱动蜂鸣器输出相应的音调。关键词:乐谱存储乐谱输出按键输入选择输出数控分频第一章 概述随着计算机技术和集成电路技术的发展,现代电子与电工设计,已经步入了电子设计自动化(EDA)的时代,采用虚拟仿真的手段对电子产品进行前期工作的调试,已成为一种发展的必然趋势。通过对实际电子线路的仿真分析,从而提高对电路的分析、设计和创新能力。EDA技术作为现代电子设计最新技术的结晶,其广阔的应用前景和深远的影响已毋庸置疑,它在信息工程类专业中的基础地位和核心作用也逐渐被人们所认识。许多高等学校开设了相应的课程,并为学生提供了课程设计、综合实践、电子设计竞赛、毕业设计、科学研究和产品开发等EDA技术的综合应用实践环节。相关的工程技术人员也特别重视学习EDA技术,并渴望提高其工程应用能力。本次设计是在EDA开发平台上利用VHDL语言设计一个乐曲硬件演奏电路,由键盘输入控制音响或自动演奏。用户可以将自己编制的乐曲存入硬件演奏电路,演奏时可以选择键盘输入乐曲或者自动演奏已存入的乐曲。第二章 设计要求2.1、FPGA配合按键、蜂鸣器演奏一段简单音乐;2.2、当前演奏音调对应的阿拉伯数字用一位数码管显示;2.3、用LED灯亮的个数指示当前演奏音调。第三章 总体构思首先将该任务分成五个模块进行设计,分别为:乐谱存储、乐谱输出、按键输入、选择输出、数控分频模块。系统设计框图如图3.1所示:按键控制notetabsTonetaba选择输出音符输出音调显示分频输出图3.0 系统框图3.1、乐谱存储(NoteTabs模块)该模块的功能就是定义音符数据ROM“music”随着该模块中的计数器控制时钟频率速率作加法计数时,即地址值递增时,ROM中的音符数据将从ROM中逐渐通过ToneIndex3.0端口输向ToneTaba模块,ROM中存储的曲目被读出。对应模块图如图3.1所示:图3.1 notebas模块图3.2、乐谱输出(ToneTaba模块)该模块主要是是乐曲简谱码对应的分频预置数查找表电路,其中设置了乐曲的全部音符对应的分频置数,每一音符的停留时间由音乐节拍和音调发生器模块NoteTabs的CLK的输入频率决定,这些值由对应于ToneTaba的4位输入值Index3.0确定,最多有16种可选值。输向ToneTaba中Index3.0的值ToneIndex3.0的输出值与持续的时间由模块NoteTabs决定。对应模块图如图3.2所示图3.2 tonetaba模块3.3、按键输入模块该模块主要由控制按键s8控制自动播放或者手动输入,输入音符按键s1- -s7分别代表音符1、2、3、4、5、6、7七个音符,控制时钟clk。同时states输出对应音符,led显示输出音符的变化,pl为十一位分频预置数来控制分频器分频输出。图3.3 按键输入模块图3.4、选择输出模块该模块通过控制按键s9来控制选择自动播放输出(s9为高电平)或者按键弹奏输出(s9为低电平)。图3.4 选择输出模块3.5、数控分频模块数控分频器的功能是当在输入端给定不同的输入数时,将对输入的时钟信号有不同的分频比,数控分频器是用计数值可并行预置的加法计数器来完成的。在此,音符的频率可由数控分频器Speakera获得。由其clk端输入一具有较高频率的信号,通过Speakera分频后由 SpkS 输出,输入的clk的频率经16分频后,在经一次二分频驱动蜂鸣器发生。Speakera对clk输入信号的分频比由11位预置数Tone10.0决定。SpkS 的输出频率将决定每一音符的音调,这样分频计数器的预置值Tone10.0与SpkS的输出频率就有了对应关系。图3.5 数控分频输出模块图3.6、顶层电路搭建对前几个模块实现综合编写的顶层电路。第四章 各单元电路的实现及仿真4.1、NoteTabs模块4.1.1VHD源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY notetabs IS PORT (clk1 : IN STD_LOGIC; ToneIndex : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); key : IN STD_LOGIC); END;ARCHITECTURE one OF notetabs ISCOMPONENT data1PORT (address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);clock: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT;SIGNAL Counter : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS (clk1, Counter,key)BEGIN IF key=1 thenIF Counter=11101000 THEN Counter =00000000;ELSIF (clk1EVENT AND clk1=1)THEN Counter counter, q=ToneIndex,clock=clk1); END;4.1.2仿真图及分析图4.1 音符播放仿真图可以看到当key为高电平的时候哦,音符陆续被读出。4.2ToneTaba模块4.2.1VHD源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba IS PORT ( Index: IN STD_LOGIC_VECTOR (3 DOWNTO 0); CODE: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); - HIGH: OUT STD_LOGIC;LED:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); Tone: OUT STD_LOGIC_VECTOR (10 DOWNTO 0);END;ARCHITECTURE one OF ToneTaba ISBEGINSearch : PROCESS(Index)BEGIN CASE Index ISWHEN0000=Tone=11111111111;CODE=0000;ledTone=01100000101;CODE=0001;ledTone=01110010000;CODE=0010;ledTone=10000001100;CODE=0011;ledTone=10010101101;CODE=0101;ledTone=10100001010;CODE=0110;ledTone=10101011100;CODE=0111;ledTone=10110000010;CODE=0001;ledTone=10111001000;CODE=0010;ledTone=11000000110;CODE=0011;ledTone=11001010110;CODE=0101;ledTone=11010000100;CODE=0110;ledTone=11011000000;CODE=0001;ledTone=11111111111;CODE=0000;led=00000001;-2047END CASE;END PROCESS;END;4.3按键输入模块4.3.1 VHD源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AJ IS PORT( CLK,S1,S2,S3,S4,S5,S6,S7,S8:IN STD_LOGIC; STATES:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); - SOUND:OUT STD_LOGIC; PL:OUT STD_LOGIC_VECTOR(10 DOWNTO 0); LED:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END AJ;ARCHITECTURE ONE OF AJ ISSIGNAL G:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(clk,S1,S2,S3,S4,S5,S6,S7,S8) BEGINIF CLKEVENT AND CLK=1 THENIF S8=0 THEN LED=00000000;G=00000000;IF ( S1=1AND S2=0AND S3=0AND S4=0AND S5=0AND S6=0AND S7=0) THEN G=00000001;LED=00000001; ELSIF ( S2=1AND S1=0AND S3=0AND S4=0AND S5=0AND S6=0AND S7=0)THENG=00000010;LED=00000011; ELSIF ( S3=1AND S1=0AND S2=0AND S4=0AND S5=0AND S6=0AND S7=0)THEN G=00000100;LED=00000111; ELSIF ( S4=1AND S1=0AND S2=0AND S3=0AND S5=0AND S6=0AND S7=0) THEN G=00001000;LED=00001111; ELSIF ( S5=1AND S1=0AND S2=0AND S3=0AND S4=0AND S6=0AND S7=0) THEN G=00010000; LED=00011111; ELSIF ( S6=1AND S1=0AND S2=0AND S3=0AND S4=0AND S5=0AND S7=0) THEN G=00100000;LED=00111111; ELSIF ( S7=1AND S1=0AND S2=0AND S3=0AND S4=0AND S5=0AND S6=0) THEN G=01000000;LEDSTATES=0001;PLSTATES=0010;PLSTATES=0011;PLSTATES=0100;PLSTATES=0101;PLSTATES=0110;PLSTATES=0111;PLSTATES=1000;PLSTATES=0000;PL=00000000000;END CASE;END PROCESS;END ARCHITECTURE ONE;4.4选择输出4.4.1VHD源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY xz ISport(so,st :in STD_LOGIC_VECTOR(3 DOWNTO 0); po,pt:in STD_LOGIC_VECTOR(10 DOWNTO 0);lo,lt :in STD_LOGIC_VECTOR(7 DOWNTO 0); s :out STD_LOGIC_VECTOR(3 DOWNTO 0); l :out STD_LOGIC_VECTOR(7 DOWNTO 0);P:out STD_LOGIC_VECTOR(10 DOWNTO 0); s9 :IN STD_LOGIC);end;architecture behav of xz isbeginprocess(s9,so,st,po,pt,lo,lt)beginif s9=1 then s=st;p=pt;l=lt;else s=so;p=po;l=lo;end if;end process;end architecture behav;4.5 数控分频模块4.5.1 VHDL源程序LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera IS PORT ( clk, S1,S2,S3,S4,S5,S6,S7,S8: 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;BEGINPROCESS(clk) VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ;BEGIN PreCLK 11 THEN PreCLK = 1; Count4 := 0000; ELSIF clkEVENT AND clk = 1 THEN Count4 := Count4 + 1; END IF; END PROCESS;PROCESS(PreCLK, Tone)- 11位可预置计数器 VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0);BEGINIF PreCLKEVENT AND PreCLK = 1 THENIF Count11 = 16#7FF# THEN Count11 := Tone ; FullSpkS = 1; ELSE Count11 := Count11 + 1; FullSpkS = 0;END IF; END IF; END PROCESS; PROCESS(FullSpkS,S1,S2,S3,S4,S5,S6,S7,S8)-将输出再2分频,展宽脉冲,使扬声器有足够功率发音 VARIABLE Count2 : STD_LOGIC;BEGINIF (S1=1 OR S2=1 OR S3=1 OR S4=1 OR S5=1 OR S6=1 OR S7=1 OR S8=1 ) THENIF FullSpkSEVENT AND FullSpkS = 1 THEN Count2 := NOT Count2; IF Count2 = 1 THEN SpkS = 1; ELSE SpkS = 0; END IF; END IF;END IF; END PROCESS;END;4.6 主电路连线图(图4.6)图4.6。0 主电路图4.6.1 仿真图及结果分析图4.6.1 主电路仿真图由仿真图可知,控制键s8为按下时且s1s7中有按键按下,此时states显示手动弹奏的音符输出,同时led灯显示弹奏的音符。当按键s8为高电平时,开始自动播放,states和led开始显示对应的音符。第五章编译、下载及调试中遇到的问题及解决办法在编译过程中,遇到的第一个问题也是最大的问题就是如何实现乐曲的演奏问题,如何令电路自动播放一首预先存储的乐曲。在解决这一问题时,我们采用ROM表将乐曲对应的音符存入ROM表中,ROM表中每个数对应相同的时间,设置一个8位二进制计数器,作为音符数据ROM的地址发生器。这个计数器的计数频率选为4HZ,即每一计数值的停留时间为0.25秒,当全音符设为1秒时,4分音符持续时间为0.25s, 2分音符持续的时间为0.5s等等。每来一个脉冲计一次数,每一计数值的停留时间为0.25s,即要输入一个全音符时需要计数4次才行,则应在Rom表格中输出相应音符四次,表示一个全音符的持续时间,要输入一个2分音符则需要计数2次,依次类推。第二个问题是频率信号的选取一开始不知道如何下手,之后通过查找资料知道了所有不同频率的信号都是从同一个基准频率f0分频而得到的。由于音节频率多为非整数,而分频系数又不能为小数,因此必须将计算所得的分频数四舍五入取整。若基准频率过高,则分频比太小,取整后误差较大。若基准频率过高,虽然误差减小,但分频数变大。综合这两方面因素,在尽量减小频率误差的前提下取合适的基准频率,在此取f0=6MHz。第三个问题是无输入是噪声问题。由于按键有限,没有设计单独控制无输入情况下噪声的控制按钮。所以一开始在没有按键下的情况会出现蜂鸣器发声的情况,为此我们在数控分频模块中单独添写了一段程序来控制无输入噪声,程序功能是在没有输入的情况下禁止脉冲输出,蜂鸣器不响。第四个问题是原件例化时对应端口赋值的问题,特别是在音符存储模块的设计中经常遇到这种问题。为此需要弄清楚外部信号与内部信号,需要仔细分辨。第六章总结经过努力, 乐曲硬件演奏电路的设计基本上完成了。在整个设计过程中,包括前期中期和后期。前期工作是通过组员之间的讨论达到明白此次课设的目的和要求,以及拿出一套初步的设计方案。中期工作是通过各种方式查阅资料并实际编写程序,在初步方案的指引下逐步实现我们的设计目标。后期工作主要是整个设计的查漏补缺和完成论
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高端便民市场建筑方案设计(3篇)
- 有功功率与无功功率课件
- 基于自然语言处理的影视评论与观众反馈的深度挖掘-洞察及研究
- 网格员内部安全知识培训课件课程
- 网格化课件教学课件
- 白酒代理合同条款解析与范本
- 月子会所专业知识培训课件
- 2025年学历类自考专业(护理)内科护理学(一)-医学心理学参考题库含答案解析(5套)
- 2025年学历类自考专业(护理)儿科护理学(一)-生物化学(三)参考题库含答案解析(5套)
- 2025年学历类自考专业(护理)-护理教育导论参考题库含答案解析(5套)
- 肿瘤患者的临终关怀及护理
- 2025年6月浙江省高考地理试卷真题(含答案解析)
- CCU护士进修出科汇报
- 解表药白芷讲课件
- 人行金库管理制度
- 供应链管理 课件 6-供应链生产管理
- 2025版权转让合同模板
- 口腔科台账护理工作规范
- T/CUWA 60054-2023饮用水纳滤阻垢剂性能试验方法
- 退兵移交协议书范本
- 经营管理岗位竞聘
评论
0/150
提交评论