




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
此文档收集于网络,如有侵权,请联系网站删除目录一、绪论21.1设计目的21.2设计内容及要求2二、设计原理及方案32.1设计原理32.2设计方案3三、设计步骤53.1音乐流水灯模块53.2 16*16点阵及按键选择模块213.3音乐播放时间模块37四、设计结果49五、心得体会52六、参考文献53附录A 管脚分配表54附录B 动态时序仿真图56一、绪论1.1设计目的EDA是电子设计自动化(Electronic Design Automation)的缩写,EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性。本课程设计通过Altera公司的Quartus II软件配合武汉凌特电子技术有限公司生产的LTE-SOPC-02FD型OPC实验开发系统来完成设计。通过此实验让我们进一步了解,熟悉和掌握CPLD/FPGA开发软件的使用方法及VHDL的编程方法。1.2设计内容及要求在本课程设计中使用Altera公司的EP2C35系列的EP2C35F484C7 -FPGA芯片,利用SOPC-NIOSII-EP2C35开发板上的资源,实现一个音乐流水灯。本设计的任务要求通过编程实现一段音乐旋律的循环播放,在音乐播放的过程中,流水灯根据旋律闪烁。扩展内容:1 利用数码管显示播放时间2利用16*16点阵显示播放歌曲名称3利用44键盘阵列键盘实现播放歌曲的切换一、二、设计原理及方案2.1设计原理音乐流水灯主要是点缀公共场合的装饰品,音乐的播放和流水灯有节奏地闪烁,同时达到听觉和视觉的完美结合,成为构成其必不可少的条件。要了解如何产生不同音阶的音乐,首先要对乐音的特性有所了解。乐音实际上是有固定频率的信号。在乐曲的构成中,乐音的频率和持续的时间是其构成的要素。音阶的各个频率可以通过高频时钟进行分频得到。音频的高低可以通过外部的灯的闪烁来显示,这样在音乐和流水灯的配合下可以使人产生强烈的节奏感。总原理框图如图2.1所示。图2.1 原理框图2.2设计方案总体设计流程如下:(1)分频主要是通过一个可控分频器实现的。要得到不同频率的方波,就可以根据此频率计算出分频过程中需要计数的点数,从而通过改变可控分频器的计数初值,在达到计数最大值后对spk端口的信号取反输出不同频率的方波。采用时钟的频率越高,分频系数越大,分频后的音阶频率就越准确。但同时由于分频系数大使用的计数单元增加,从而耗费更多的硬件逻辑单元,本次设计采用1MHZ的时钟信号。音阶频率表如表1所示,各音阶计数初值表如表2所示:音阶频率(Hz)音阶频率(Hz)低音1262中音2578低音2294中音3659低音3330中音5784低音5392中音6880低音6440高音11046低音7494高音21175中音1523高音31318表1 音阶频率表音阶计数初值对应初始值低音101100000101773低音201110010000912低音3100000011001036低音5100101011011197低音6101000010101290低音7101010111001372中音1101100000101410中音2101110010001480中音3110000001101542中音5110010101101622中音6110100001001668高音1110110000001728高音2110111000111763高音3111000000101794表2 音阶初始值表(2)经过分频后的信号是一个脉宽极窄的时钟信号,必须对其进行脉冲宽度调整,增大占空比,才能有效地驱动蜂鸣器。在脉冲宽度调整时会对此信号再次二分频,所以在计算时,以乐音音阶的二倍频率去求取在特定时钟信号下的分频系数,以便在调整占空比后得到正确的音阶频率。(3)乐曲的频率变化多端,对应的分频系数也不断变化,因此需要将播放的乐曲的分频系数事先存放在中便于读取。如果将分频系数直接作为存储码存放在寄存器中,势必会占有更大的容量。因此在这里选取索引值来作为存储码以减小容量。音阶索引表如表3所示:音阶低音1低音2低音3低音5索引值1235音阶低音6低音7中音1中音2索引值6789音阶中音3中音5中音6高音1索引值10121315音阶高音2 高音3索引值16 17表3 音阶索引表(4)开发平台上的灯数量有限,可以选用有规律的闪烁。本次设计流水灯依次点亮的方式来闪烁。三、设计步骤3.1音乐流水灯模块3.1.1基本原理我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。而乐曲中的每一音符对应着一个确定的频率,因此,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个基本要素,获取这两个要素所对应的数值以及利用这些数值实现所希望乐曲的演奏效果是本实验的关键。因此要实现在蜂鸣器上播放出有一定规律节奏的简单歌曲,就需要了解各个音阶的频率,以及怎样将这些频率转换为开发系统以及蜂鸣器能够识别的代码。在LED0LED11引脚上按照简单音乐的节奏有规律的的输出流水数据,如原来输出的数据是000000000001则表示点亮LED1(共阴接法),流水一次后,输出的数据应该为00000000011,而此时则应点亮LED1LED2两个发光二极管。通过程序设置可以实现每个音阶对应一种点亮情况,从而实现音乐流水灯的律动。3.1.2程序及电路原理图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;-entity tb is port( clk : in std_logic; -Clock Signal spk : buffer std_logic; -speaker driver led : out std_logic_vector(11 downto 0); keyc : out std_logic_vector(15 downto 0); keyr : out std_logic_vector(15 downto 0); s1 : in std_logic);end tb;-architecture behave of tb is signal tone : std_logic_vector(10 downto 0); signal tone_count : std_logic_vector(10 downto 0); signal tone_index : integer range 0 to 18; signal clk10_count : std_logic_vector(17 downto 0); signal time : integer range 0 to 200; signal clk10 : std_logic; begin process(clk) begin if(clkevent and clk=1) then clk10_count=clk10_count+1; if(clk10_count=16#3fff#) then clk10=not clk10; end if; end if; end process; process(clk10) begin if(clk10event and clk10=1) then if(time=200) then time=0; else timetone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextonetonetonetonetonetonetonetonetonetonetonetonetonetonetonetone=11111111111; -others:no output end case; end process; process(clk) -control the frequence of the speaker begin if(clkevent and clk=1) then if(tone_count=16#7ff#) then tone_count=tone; if(tone2047) then spk=not spk; end if; else tone_count=tone_count+1; end if; end if; end process;end behave;architecture behave2 of tb is signal tone : std_logic_vector(10 downto 0); signal tone_count : std_logic_vector(10 downto 0); signal tone_index : integer range 0 to 18; signal clk10_count : std_logic_vector(17 downto 0); signal time : integer range 0 to 200; signal clk10 : std_logic; begin process(clk) -generate 10hz clock signal begin if(clkevent and clk=1) then clk10_count=clk10_count+1; if(clk10_count=16#3fff#) then clk10=not clk10; end if; end if; end process; process(clk10) begin if(clk10event and clk10=1) then if(time=200) then time=0; else timetone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indext
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第14课 誕生日 教学设计-2024-2025学年初中日语人教版第一册
- 《月相变化的规律》(教学设计)2023-2024学年教科版三年级下册科学
- 第四課 デジタルカメラ说课稿-2025-2026学年新编日语第三册重排本-新编日语
- 蒸汽清洗油烟机培训课件
- 常州国企专招考试真题及答案
- 消防干部国考题目及答案
- 2025关于汽车销售代理的合同范本
- 闲鱼题目大全及答案
- 餐饮加盟商培训考试题及答案
- 2025综合商品销售合同模板大全
- 作业条件危险性评价法(LEC法)介绍
- 项目部刻章申请书
- 版挖掘机租赁合同
- 语言学概论全套教学课件
- JJF 1265-2022生物计量术语及定义
- GB/T 8118-2010电弧焊机通用技术条件
- GB/T 17421.7-2016机床检验通则第7部分:回转轴线的几何精度
- 电工技能测试
- 药事管理学全套课件
- 社区心理学课件
- 质量整改通知单(样板)
评论
0/150
提交评论