首页 VHDL乐曲硬件电路

VHDL乐曲硬件电路

举报
开通vip

VHDL乐曲硬件电路 《能力拓展训练》报告 题 目:基于VHDL的乐曲硬件演奏电路的设计 专业班级: 学生姓名: 指导教师: 武汉理工大学信息工程学院 2011 年 7 月 6 日 能力拓展训练任务书 学生姓名: 鄢婷 专业班级:通信0803 指导教师: 赵宁 ...

VHDL乐曲硬件电路
《能力拓展训练》报告 题 目:基于VHDL的乐曲硬件演奏电路的设计 专业班级: 学生姓名: 指导教师: 武汉理工大学信息工程学院 2011 年 7 月 6 日 能力拓展训练任务书 学生姓名: 鄢婷 专业班级:通信0803 指导教师: 赵宁 工作单位: 信息工程学院 题 目: 基于VHDL的乐曲硬件演奏电路设计 能力拓展训练目的 1 开展专题调研、探索、研究和设计; 2 培养学生综合应用所学知识分析问题、解决问题的能力; 3 掌握基本的文献检索和文献阅读的方法; 4 提高正确地撰写论文的基本能力。 训练内容和要求 1 利用数控分频器设计硬件乐曲演奏电路; 2 利用给定的音符数据定制ROM“music”; 3 在QuartusII上完成全部设计; 初始条件 1 VHDL的基础知识 2 QuartusII 软件仿真环境 时间安排: 第21周,安排任务(鉴3-204,7月4日) 第21周,仿真设计(鉴主13楼计算机实验室) 第21周,完成(答辩,提交报告,演示) 指导教师签名: 2011年 7月4 日 系主任(或责任教师)签名: 年 月 日 目 录 1摘要 Abstract 2 1 开发环境Quartus II 3 1.1 Quartus II简介 3 1.2 Quartus II设计流程 3 2 VHDL 常用语法简介 5 2 设计思路 6 3 各模块电路及顶层文件 7 3.1 音乐数据ROM模块 7 3.2音符控制输出模块NOTETABS 7 3.3音符译码电路TONETABS 9 3.4数控分频器输出模块SPEAKERA 11 3.5顶层设计VHDL描述 songer 模块 12 4 总结(心得体会) 15 参考文献 16 摘要 在这次能力拓展训练中,我用VHDL语言完整的描述了乐曲硬件演奏电路的设计,该设计由一个给定的音符数据定制ROM“music”和三个模块组成,这三个模块分别类似于弹琴人的手指,琴键和琴弦,采用分层次的语言描述结构,通过一个顶层设计将各个模块综合起来,并在QuartusII上完成了时序仿真。通过这次能力拓展训练,我不仅对VHDL语言运用得更加灵活,而且对Quartts II软件的操作也更加熟练。 Abstract Ability to expand in this training, I used a full description of the VHDL language music playing hardware circuit design, which consists of a custom note data given ROM "music" and three modules, three modules were similar to piano man's fingers, keys and strings, with different levels of language to describe the structure, through a top-level design of the various modules together, and QuartusII completed the timing simulation. Through the ability to develop training, I not only use of the VHDL language was more flexible, and the operation of Quartts II software and more skilled. 1 开发环境Quartus II 1.1 Quartus II简介 Quartus II是Altera公司推出的CPLD/F[GA开发工具,Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:     可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件; 芯片(电路)平面布局连线编辑;  LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块; 功能强大的逻辑综合工具; 完备的电路功能仿真与时序逻辑仿真工具; 定时/时序分析与关键路径延时分析; 可使用SignalTap II逻辑分析工具进行嵌入式的逻辑分析; 支持软件源文件的添加和创建,并将它们链接起来生成编程文件; 使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具; 可读入 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的EDIF网表文件、VHDL网表文件和Verilog网表文件;  能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。 1.2 Quartus II设计流程 设计输入:完成期间的硬件描述,包括文本编辑器、块与符号编辑器、MegaWizard插件管理器、约束编辑器和布局编辑器等工具;     综合:包括分析和综合器以、辅助工具和RTL查看器等工具;     布局连线:将设计综合后的网表文件映射到实体器件的过程,包括Fitter工具、约束编辑器、布局图编辑器、芯片编辑器和增量布局连线工具;     时序分析;     仿真:Quartus II提供了功能仿真和时序仿真两种工具;     器件编程与配置:包括四种编程模式,即被动串行模式、JTAG模式、主动串行模式和插座内编程模式。 使用New Project Wizard新建一个工程的过程:     1.制定工程的文件存放目录、工程名以及最顶层的设计实体名,在默认情况下,工程名与最顶层的设计实体名是相同的。     2.添加文件,包括最顶层的设计实体文件以及一些额外的电路模块描述文件或定制的功能库。     3.选择目标芯片,具体芯片最好让编译器根据工程设计的实际情况自动选择。     4.第三方EDA工具设定,包括设计输入与综合工具、仿真工具、时序分析工具等,默认为Quartus II自带的仿真器、综合器以及时序分析器。     5.最后一步系统将整体工程的各项参数和设置总结并显示出来,这时即可完成工程的创建。 图1.2.1 Quartus II的启动画面 2 VHDL 常用语法简介 VHDL的语法规则比较多,我介绍下在我所编写的程序中所涉及到的语法规则。 1 实体语句结构 ENTITY 实体名 IS [GENERIC (参数名:数据类型);] [PORT (端口表);] END TNTITY 实体名; 实体应以语句“ENTITY实体名IS”开始,以语句“END TNTITY 实体名;”结束,其中实体名可以由设计者自己添加。中间在方括号内的语句描述,在特定的情况下并非是必须的,一个设计实体无论多大多复杂,均可在实体中定义实体名,即这个设计实体的名称,或者说是这个设计实体所描述芯片的名称。 2 结构体语句 ARCHITECTURE 结构体名 OF 实体名 IS [说明语句] BEGIN [功能描述语句] END ARCHITECTURE 结构体名; 结构体名由设计者自己选择,但当一个实体具有多个结构体时,结构体得取名不可相重。结构体的说明语句部分必须放在关键词ARCHITECTURE和BEGIN之间。 3 进程语句 [进程标号:]PROCESS[(敏感参数表)] [IS] [进程说明部分] BEGIN 顺序说明部分 END PROCESS [进程标号]; 每一个PROCESS语句结构可以赋予一个进程标号。进程说明部分定义该进程所需的局部数据环境。顺序描述语句部分是一段顺序执行的语句,描述该进程的行为。一个结构体中可以含有多个PROCESS结构,每一PROCESS结构对于其敏感信号参数表中定义的任一敏感参量的变化,可以在任何时刻被激活或者称为启动。而在一结构体中,所有被激活的进程都是并行运行的。 2 设计思路 与用微处理器来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使是最简单的演奏电路也难以实现。本次能力拓展训练,正是借助于Quartus II强大的仿真功能,来完成本实验的仿真设计。 图2.1 总体设计框图 乐曲硬件电路由三个模块组成,模块U1类似于人的手指,将指定的音符输入到电路中,ROM中的音乐数据文件可由编辑好的音符填入MIF文件中再定制LPM_ROM将音符数据加载入ROM中,并通过U1模块在程序运行时自动读取ROM中的文件并置入模块U2中。 模块U2类似于琴键,决定所选择音符的频率,为模块U3提供决定所发音符的分频预置数,即能够将乐曲中的音符逐一以对应的频率以预置数的形式置入数控分频计中。当采用四四拍曲子时,每节拍持续时间为1秒。置入数控分频器的速度也应与此同步或一致,避免音乐过快或过快慢而失真。 模块U3类似于琴弦,发出美妙的声音。其功能实际为一个数控分频器,即输入不同的预置数即可发出不同频率的声音,演奏出设定好的音乐。在编写数控分频器时,不仅要考虑预置数的输入方式,还要考虑输入的速度,以及驱动蜂鸣器发声的频率。 3 各模块电路及顶层文件 3.1 音乐数据ROM模块 该模块为音乐曲谱的存放文件。首先在Quartus II中选择ROM数据文件编辑窗口,即再File菜单中选择New,并在New窗中选择Other files页,再选择Mermory Initialization File项,单击OK按钮后产生ROM数据文件大小选择窗口,根据乐谱的情况,可选择ROM数据Number为64,数据宽Word size去4位,单击OK按钮,将出现空的.mif数据表格,位“梁祝”乐曲填入数据表格中,文件名保存为music.mif,以待音符控制输出模块调用。 图3.1.1 ROM数据模块 3.2音符控制输出模块NOTETABS noteblack中设置了一个8位二进制计数器(计数最大值为138),作为音符数据ROM的地址发生器。这个计数器的频率选为4HZ,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒,四四拍的4分音符持续时间。实验程序如下所示: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity notetabs is port(clk:in std_logic; toneindex:out std_logic_vector (3 downto 0)); end; architecture one of notetabs is component music port(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); begin cnt8: process(clk,counter) --ROM地址控制输出进程 begin if counter=138 then counter<="00000000"; elsif (clk'event and clk='1') then counter<=counter+1; end if; end process; u1:music port map(address=>counter,q=>toneindex,clock=>clk); end; 该程序由两部分组成,一个为实体部分,一个为结构体部分。实体部分定义的该模块的外接端口,clk为该模块的输入信号端口,toneindex为该模块的输出信号端口。结构体部分 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 了该模块的功能,该模块调用了music元件,并进行了端口匹配。当信号clk和counter发生变化时,就会启动进程process,每当clk时钟信号的上升沿到来时,counter计数值加1,即ROM地址递增一位,ROM中所存储的内容通过toneindex输出,当counter计数值慢138时,计数值清零,循环输出。 图3.2.1 音符控制输出模块时序仿真图 从时序仿真图中可得: notetabs中的clk信号为计数器信号,随着clk按4HZ的时钟频率做加法计数时,即随地址值递增时,音符数据ROM将从ROM中通过toneindex[3.:0]端口输向tonetaba模块。 3.3音符译码电路TONETABS 音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,模块tonetaba的功能首先是为speakera提供决定所发音符的分频预置数,而此数在speakera输入口停留时间即为此音符的节拍值。模块tonebata是乐曲简谱码对应的分频预置数查表电路,其中设置了“梁祝”乐曲全部音符所对应的分频预置数,共13个,每一个音符的停留时间由音乐节拍和音调发生器模块notetabs的clk频率决定。 其 计算公式 六西格玛计算公式下载结构力学静力计算公式下载重复性计算公式下载六西格玛计算公式下载年假计算公式 如下:由于所设计的数控分频计采用12MHZ作为时钟源,并通过一次12分频给出频率为1MHZ的脉冲溢出信号,再对该1MHZ的溢出信号进行11位2进制码的带预置数进行计数,并给出一个频率随预置数变化的脉冲信号。由于该脉冲信号不具有驱动蜂鸣器的能力,故对此脉冲信号进行2分频以推动蜂鸣器发声,故最终输出信号的频率与预置数的关系如下: 公式(3-3-1) 其中 为音阶对应的频率,根据不同的音阶得到的频率如下表所示: 表 3-3-1 各音阶初始值 音阶 频率 计数值初值 音阶 频率 计数值初值 休止符 375.000 2047 中音1 588.697 1410 低音1 294.349 773 中音2 638.84 1480 低音2 330.369 912 中音3 742.574 1542 低音3 370.92 1036 中音5 882.353 1622 低音5 394.737 1197 中音6 989.446 1668 低音6 495.376 1290 中音7 1136.363 1717 低音7 555.56 1372 高音1 1175.549 1728 模块程序如下所示: 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); high0:out std_logic; tone:out std_logic_vector(10 downto 0)); end; architecture one of tonetaba is begin search:process(index) begin case index is when"0000"=>tone<="11111111111";code<="0000";high0<='0';--2047 when"0001"=>tone<="01100000101";code<="0001";high0<='0';--773 when"0010"=>tone<="01110010000";code<="0010";high0<='0';--912 when"0011"=>tone<="10000001100";code<="0011";high0<='0';--1036 when"0101"=>tone<="10010101101";code<="0101";high0<='0';--1197 when"0110"=>tone<="10100001010";code<="0110";high0<='0';--1290 when"0111"=>tone<="10101011100";code<="0111";high0<='0';--1372 when"1000"=>tone<="10110000010";code<="0001";high0<='1';--1410 when"1001"=>tone<="10111001000";code<="0010";high0<='1';--1480 when"1010"=>tone<="11000000110";code<="0011";high0<='1';--1542 when"1100"=>tone<="11001010110";code<="0101";high0<='1';--1622 when"1101"=>tone<="11010000100";code<="0110";high0<='1';--1668 when"1111"=>tone<="11011000000";code<="0001";high0<='1';--1728 when others=>null; end case; end process; end; 该程序也是由两部分组成,实体部分定义了该模块的外接端口,index为输入信号,代表输入的音符,code,high0,tone为输出信号,code代表该音符的编码模式,high0代表该音符的音阶的高低,tone为该音符发声的预置计数初始值。结构体部分给出了在乐谱“梁祝”中出现每个音符所对应的编码模式,音阶的高低以及预置计数初始值。 图 3.3.1 音符译码电路时序仿真图 从时序仿真图可得,当音符发生变化时,其编码模式,音阶的高低以及预置计数初始值都随之而变,故该程序的功能符合要求。 3.4数控分频器输出模块SPEAKERA 音符的频率可以由speakera获得,这是一个数控分频器,由其clk一端输入较高的频率的信号,通过speakera后由spkout输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/2,speakera对clk输入信号的分频比由11位预置数tone[10..0]决定。spkout的输出频率将决定每一音符的音调。这样,分频计数器的预置值tone[10..0]与spkout的输出频率就有了对应关系。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity speakera is port(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; begin divideclk:process(clk)--对12MHZ时钟源进行12分频,输出1MHZ的脉冲信号。 variable count4:std_logic_vector(3 downto 0); begin preclk<='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)--12位预置数数控分频器 variable count11:std_logic_vector(10 downto 0); begin if preclk'event and preclk='1' then if count11="1111" 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; begin if 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; 该程序的实体部分中的clk和tone为输入信号,clk为高频率的时钟信号,tone为对应音符的预置初始值,spks为该音符的输出频率。结构体部分,具体的描述了该功能模块的作用,divideclk 进程实现clk信号的12分频,preclk为clk信号12分频后的时钟脉冲,通过对count4的计数实现分频功能。genspks进程实现对12位数控分频器进行预置数据,预置数为tone,计数器从tone计数到7FF,preclk信号进行分频,得到不同的时钟脉冲信号,delayspks进程为蜂鸣器推动电路,对genspks得到的时钟信号再次进行2分频,得到足够宽的脉冲波形,以驱动扬声器电路。从该时序仿真图可得:当预置数tone不同时,spks输出脉冲的频率也有规律性的变化。 图 3.4.1 数控分频器输出模块时序仿真图 3.5顶层设计VHDL描述 songer 模块 library ieee; use ieee.std_logic_1164.all; entity songer is port(clk12mhz:in std_logic; clk8hz:in std_logic; code1:out std_logic_vector(3 downto 0); high1:out std_logic; spkout:out std_logic); end; architecture one of songer is component notetabs port(clk:in std_logic; toneindex:out std_logic_vector (3 downto 0)); end component; component tonetaba port(index:in std_logic_vector (3 downto 0); code:out std_logic_vector (3 downto 0); high0: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); begin u1:notetabs port map (clk=>clk8hz,toneindex=>toneindex); u2:tonetaba port map(index=>toneindex,tone=>tone,code=>code1,high0=>high1); u3:speakera port map (clk=>clk12mhz,tone=>tone,spks=>spkout); end; 该程序的实体部分中的clk12mhz和clk8hz为输出信号,分别为speakera模块和notetabs模块的时钟输入信号,code1,high1和spkout为输出信号,code1为正在发声音符的编码模式,high1为该音符的音阶,spkout输出该音符。结构体部分主要用元件例化语句component将上述三个模块定义为三个元件,通过端口映射语句将各个元件连接起来,实现乐曲硬件演奏电路。 时序仿真图中,随着clk8hz时钟信号的输入,在每个上升沿,音符就会从ROM中输入到电路中,并通过spkout发声,high1也会显示该音符的高低度。 图3.5.1 顶层设计时序仿真图 综合后的电路图如下图所示: 图3.5.2 综合电路图 当一个8Hz的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系数模块,分频系数模块输出此音符相应的分频系数,将分频系数送给数控分频器模块,当12MHz的时钟脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连续的8Hz的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发出音符数据所对应的声音来。 4 总结(心得体会) 通过这一周的努力,终于完成了此次能力拓展训练。我们这学期刚学习了EDA的设计,在做EDA的实验时,觉得这门课很有意思,所以在这次能力拓展训练中也选择了与EDA有关的方面。 此次能力拓展训练主要参考了教材中硬件演奏电路的设计,通过这次实验,我也学习到了如何利用可编程逻辑设计器件进行设计,并学习了宏模块的设计与应用的基础,并能够在LPM_ROM中写入自己需要的数据。宏模块在课堂上老师并没有讲过,因此刚开始接触时有点困难,在应用宏模块这方面花了点时间。我也意识到老师的重要性,虽然有些东西我们自学也可以学通,但是如果有老师的帮助,我们可以在尽量短的时间内学习到更多的知识。 在分频计的设计过程中,由于经验不足,未意识到,分频计在溢出后输出的仅为一单脉冲波,该脉冲波不足以驱动蜂鸣器,故需要再加一分频电路,拓宽信号的脉冲,使其拥有驱动蜂鸣器的能力 在向ROM中填写音乐文件数据时,应当首选了解乐谱中每个音符的持续时间。再根据程序中设定好的节拍速度,适当修改乐谱,使音乐的演奏能够连贯,并不失真。 这次的课程设计不单是做出一个硬件演奏乐曲电路出来,更重要的是锻炼自己学习的能力。能够自己学习QUARTUS的新功能,或结合其他电路仿真设计电路一同设计。或是自己编写VHDL语言,实现扬需功能。同时,可以利用网上的资源,查找相关资料,以帮助自己完成电路的设计。所以,一个人的学习能力,对其能否设计出好的电路或是新的功能电路有很大的帮助。 可编程逻辑设计是一项发展性很强的应用型学科。在学习时,尤其需要实践。个人的实践对学习EDA技术将起到相当大的帮助。 参考文献 [1] 潘松、黄继业. 《EDA技术使用 教程 人力资源管理pdf成真迷上我教程下载西门子数控教程protel99se入门教程fi6130z安装使用教程 (第三版)》. 科学出版社. 2007年9月 [2]郑家龙王小海.章安元.《集成电子技术基础教程》.高等教育出版社,2002 [3] 宋万杰、罗丰.吴顺君.《CPLD技术及其应用》.西安电子科技大学出版社.1999 [4] 张昌凡、龙永红、彭涛.《可编程逻辑器件及VHDL设计技术》.华南工学院出版社.2001 [5] 黄正瑾.《在系统编程技术及其应用》.东南大学出版社.1997 [6]彭介华.《电子技术课程设计指导》.高等教育出版社.1997 [7] 李国丽、朱维勇.《电子技术实验指导书》.中国科技大学出版社.2000 [8]卢杰、赖毅.《VHDL与数字电路设计》.科学出版社.2001 [9] 王金明.杨吉斌.《数字系统设计与Verilog HDL》.电子工业出版社.2002 本科生能力拓展训练成绩评定表 姓 名 性 别 专业、班级 题 目:基于VHDL的乐曲硬件演奏电路设计 答辩或质疑记录: 成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字: 年 月 日 PAGE _1371053703.unknown _1323794815.unknown
本文档为【VHDL乐曲硬件电路】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_814638
暂无简介~
格式:doc
大小:252KB
软件:Word
页数:20
分类:互联网
上传时间:2011-11-15
浏览量:25