




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简易电子琴的设计报告学院: 物电学院班级: 08(27)姓名: 孟倩学号: 08417642日期: 2011-6-28指导老师:康素成目 录一实验目的2二设计要求2三设计的基本内容2四简易电子琴设计过程21.简易电子琴的工作原理22.简易电子琴的工作流程图23.简易电子琴中各模块的设计23.1 乐曲自动演奏模块23.2 音调器发生模块23.3 数控分频模块23.4 顶层设计2五程序代码分析21.顶层vhdl程序22.音阶发生器vhdl程序23. 数控分频模块vhdl程序24. 自动演奏模块vhdl程序2六实验操作内容及步骤:21、打开quartus,创建jtxhd工程22.引脚分配2七设计心得
2、和体会2八、参考文献2一实验目的1. 在掌握计算机组成原理理论的基础上,了解eda技术。2. 掌握vhdl硬件描述语言的设计方法和思想,并设计一个八音符简易电子琴。3.掌握quartus ii软件的使用;二设计要求本系统是采用eda技术设计的一个简易的八音符电子琴,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,由键盘输入控制音响,同时可自动演奏乐曲。用户可以将自己编制的乐曲存入电子琴,演奏时可选择键盘输入乐曲或者已存入的乐曲。系统由乐曲自动演奏模块、音调发生模块和数控分频模块三个部分组成。系统实现是用硬件描述语言vhdl按模块化方式进行设计,然后进行编程、时序仿真、整合。本
3、系统功能比较齐全,有一定的使用价值。三设计的基本内容基于max+plus平台,运用vhdl语言对简易电子琴的各个模块进行设计,并使用eda 工具对各模块进行仿真验证。本设计包含如下三个模块:乐曲自动演奏模块,音调发生模块,数控分频模块,最后把各个模块整合后,通过电路的输入输出对应关系连接起来。四简易电子琴设计过程1.简易电子琴的工作原理音乐产生原理及硬件设计由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器来产生这样方波频率信号,因此,我们只要把
4、一首歌曲的音阶对应频率关系弄正确即可。本次设计中单片机晶振为12mhz,那么定时器的计数周期为1mhz,假如选择工作方式1,那t值便为t= 216-5105/相应的频率 ,那么根据不同的频率计算出应该赋给定时器的计数值,电子琴的具体工作原理图如图下图所示。图为:简易电子琴的工作原理图2.简易电子琴的工作流程图开始按键按下是否成功to初始化并开中断允放to中断识别按键功能根据按键功能,装入音符t到to中启动to工作2简易电子琴的工作流程图按键释放是否成功?停止to工作to中断入口重装tho,tlo初值p1.0取反中断返回图为: 简易电子琴的工作流程图3.简易电子琴中各模块的设计为了更清楚的了解电
5、子琴的工作过程,我们利用eda工具(本课程设计max+plus)对各个模块实施时序仿真(timing simulation),由自顶向下的设计方式,最后将三个模块进行整合,做出简易电子琴整个系统的时序仿真图。3.1 乐曲自动演奏模块乐曲自动演奏模块的作用是产生8位发声控制输入信号。当进行自动演奏时,由存储在此模块中的8位二进制作为发声控制输入,从而自动演奏乐曲。这段模块的原理图如图3.1所示:clkauto index07.0index27.0 3.1 乐曲自动演奏模块原理图3.2 音调器发生模块音调发生模块的作用是产生音阶的分频预置值。当8位发声控制输入信号中的某一位为高电平时,则对应某一音
6、阶的数值将输出,该数值即为该音阶的分频预置值,分频预置值控制数控分频模块进行分频,由此可得到每个音阶对应的频率。这段模块的原理图如图3.2所示: tone10.0index7.0 high code6.0图 3.2 音调发生器模块原理图3.3 数控分频模块数控分频模块对时基脉冲进行分频,得到1、2、3、4、5、6、7七个音符对应的频率。该模块的vhdl程序中包含了三个过程。首先对fpga的32mhz的时基脉冲进行分频得到8mhz的脉冲,然后按照tonel输入的分频系数对8mhz的脉冲再次分频,得到所需要的音符频率。第三个进程的作用是音调输出时再进行二分频,将脉冲展宽,使扬声器有足够发声功率。这
7、段模块的原理图如图3.3所示:clk1 spkstone110.0图 3.3 数控分频模块原理图3.4 顶层设计顶层模块由乐曲自动演奏、音调发生器和数控分频器三个模块组成,把以上各个模块进行整合,最后我们得到了系统的整个工作原理图,如图3.4:34 简易电子琴的顶层设计原理图五程序代码分析1.顶层vhdl程序-文件名:top.vhd-功能:顶层文件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity top isport ( clk
8、32mhz :in std_logic; -32mhz系统时钟handtoauto : in std_logic; -键盘输入/自动演奏code1 :out std_logic_vector(6 downto 0); -音符显示信号index1 :in std_logic_vector(7 downto 0); -键盘输入信号high1 :out std_logic; -高低音节信号spkout :out std_logic); -音频信号end top;architecture behavioral of top iscomponent automusicport ( clk :in std
9、_logic; auto: in std_logic; index2:in std_logic_vector(7 downto 0); index0 : out std_logic_vector(7 downto 0); end component;component toneport ( index : in std_logic_vector(7 downto 0); code : out std_logic_vector(6 downto 0); high : out std_logic; tone0 : out integer range 0 to 2047);end component
10、;component speakerport ( clk1 : in std_logic;tone1 : in integer range 0 to 2047;spks : out std_logic);end component;signal tone2: integer range 0 to 2047;signal indx:std_logic_vector(7 downto 0);beginu0:automusic port map(clk=clk32mhz,index2=index1,index0=indx,auto=handtoauto);u1: tone port map(inde
11、x=indx,tone0=tone2,code=code1,high=high1);u2: speaker port map(clk1=clk32mhz,tone1=tone2,spks=spkout);end behavioral; 2.音阶发生器vhdl程序-文件名:tone.vhd。-功能:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity tone isport ( index : in std_logic_vector(
12、7 downto 0); -音符输入信号code : out std_logic_vector(6 downto 0); -音符显示信号high : out std_logic; -高低音显示信号tone0 : out integer range 0 to 2047); -音符的分频系数end tone;architecture behavioral of tone isbeginsearch :process(index) -此进程完成音符到音符的分频系数译码,音符的显示,高低音阶begincase index iswhen 00000001 = tone0=773;code=1001111
13、;high tone0=912;code=0010010;high tone0=1036;code=0000110;high tone0=1116;code=1001100;high tone0=1197;code=0100100;high tone0=1290;code=0100000;high tone0=1372;code=0001111;high tone0=1410;code=0000000;high tone0=2047;code=0000001;high=0;end case;end process;end behavioral;3. 数控分频模块vhdl程序-文件名:speak
14、er.vhd。-功 能:实现数控分频。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity speaker isport ( clk1 : in std_logic; -系统时钟tone1 : in integer range 0 to 30624; -音符分频系数spks : out std_logic); -驱动扬声器的音频信号end speaker;architecture behavioral of speaker issi
15、gnal preclk,fullspks:std_logic;beginpulse1:process(clk1) -此进程对系统时钟进行4分频variable count:integer range 0 to 8;beginif clk1event and clk1=1 then count:=count+1;if count=2 then preclk=1; elsif count=4 then preclk=0;count:=0;end if;end if;end process pulse1;genspks:process(preclk,tone1)-此进程按照tone1输入的分频系数对
16、8mhz的脉冲再次分频,得到所需要的音符频率variable count11:integer range 0 to 30624;beginif preclkevent and preclk=1 thenif count11tone1 then count11:=count11+1;fullspks=1;else count11:=0;fullspks=0;end if;end if;end process;delaysps:process(fullspks) -此进程对fullspks进行2分频variable count2 :std_logic:=0;beginif fullspkseven
17、t and fullspks=1 then count2:=not count2;if count2=1 then spks=1;else spks=0;end if;end if;end process;end behavioral;4. 自动演奏模块vhdl程序-文件名:automusic.vhd-功 能:实现自动演奏功能。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity automusic isport ( clk,aut
18、o : in std_logic; -系统时钟;键盘输入/自动演奏index2 : in std_logic_vector(7 downto 0); -键盘输入信号index0 : out std_logic_vector(7 downto 0); -音符信号输出end automusic;architecture behavioral of automusic issignal count0:integer range 0 to 31;-changesignal clk2:std_logic;beginpulse0:process(clk,auto) -此进程完成对系统时钟8m的分频,得到4
19、hz的信号clk2variable count:integer range 0 to 8000000;beginif auto=1 then count:=0;clk2=0;elsif clkevent and clk=1 then count:=count+1;if count=4000000(4) then clk2=1; elsif count=8000000 (8)then clk2=0;count:=0;end if;end if;end process;music:process(clk2) -此进程完成自动演奏部分曲的地址累加beginif clk2event and clk2=
20、1 thenif count0=31 then count0=0;else count0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 index0 null;end case;else index0“程序”alt
21、era quartus 6.1(2) 选择filenew project wizard 界面,单击next按钮,进入工程名称的设定、工程目录的选择。(3) 在对话框中,指定工程存放的目录、工程名和顶层实体名,工程名和顶层实体名要求相同,工程目录可以随意设置,但必须是英文的目录,单击next按钮如下图1所示。(4) 在如下图所示的对话框中,用户指定目标器件,根据开发板所使用的期间来选择,单击next按钮,见如下步骤:(5) 新建一个vhdl语言,见下图:(6) 把程序代码输入,编译、运行程序,单击processingstart comilation,运行程序,见下图:2.引脚分配(1)单击assignmentstiming analysis setting进行引脚分配(2)直接导入引脚分配,单击assignmentsimport assignments(3)引脚分配完成3产生波形图(1)创建波形文件,单击fileother filesvecto
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子商务战略合作框架协议
- 电商托盘采购合同
- 企业文化建设与员工活动策划方案书
- 在厂员工免责协议书
- 建筑安装工程承包合同
- 工程项目合作协议书人
- 办公大楼物业服务合同
- 医疗器械产品分销代理合同
- 小学二年级机械结构课程教学设计 29独轮车走钢管
- 第21课 世界殖民体系的瓦解与新兴国家的发展 教学设计-2023-2024学年高中历史统编版(2019)必修中外历史纲要下册
- 2024年全国统一高考数学试卷(新高考Ⅰ)含答案
- 安装承包免责协议书模板
- 《智能风控实践指南:从模型、特征到决策》记录
- 砌筑工理论试题库
- 新疆建设项目交通影响评价技术标准
- 新学期新学期开学第一课课件
- 锅炉水处理行业竞争分析及发展前景预测报告
- 2024年成都市中考数学试卷(含详细解析)
- 2024年湖北省武汉市中考语文试卷真题(含答案)
- 2023-2024学年浙江省温州市七年级(上)期末英语试卷
- GMP附录《无菌药品》试卷测试题库含答案
评论
0/150
提交评论