版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目5乐曲自动演奏电路设计方案本项目基于FPGA设计乐曲演奏电路,能够自动播放编写好的音乐,通过硬件乐曲自动演奏电路设计,说明VHDL程序描述电路的方法,介绍VHDL程序顺序执行语句的使用方法。教学目标项目5乐曲自动演奏电路设计方案技能目标知识目标素质目标(1)能采用文本输入法,用VHDL程序设计一般复杂的数字系统。(2)能将系统板的晶振频率分为不同的频率。(3)能将实际的数字系统需求转化为数字电子系统硬件语言描述。(4)能基于FPGA在线调试VHDL程序。(5)能用蜂鸣器、数码管、LED灯等元件设计数字系统的输入与输出。(1)熟悉VHDL程序顺序语句的特点。(2)掌握顺序赋值语句用法。(3)熟悉if顺序描述语句的格式与用法。(4)熟悉case顺序描述语句的格式与用法。(1)培养获取新知识、新技能、新方法的能力。(2)培养在设计制作中发现问题、解决问题能力。(3)培养理性思维和科学精神。任务描述项目5乐曲自动演奏电路设计方案在QuartusPrime20.1软件平台上,用文本输入方法设计“康定情歌”乐曲自动演奏电路,“康定情歌”简谱,如图5.1所示。音乐演奏的同时用数码管显示简谱,音的高低用LED灯指示;用ModelSim-Altera2020.1仿真软件仿真检查设计结果;选用FPGA最小系统板、LED灯、数码管、蜂鸣器等硬件资源进行硬件测试。图5.1“康定情歌”简谱设计方案项目5乐曲自动演奏电路设计方案乐曲自动演奏电路,就是按照乐曲的乐谱节拍依次输出对应时间长短的音符的频率。用VHDL程序设计乐曲自动演奏电路,即利用VHDL程序的平行执行特点,设计二路控制电路,一路准确地控制输出的频率,控制音符音的高低;另一路准确地控制音符输出的节拍,控制音符输出时间的长短。1.音符频率的产生项目5乐曲自动演奏电路设计方案从“康定情歌”简谱中可知,该乐曲采用F调演奏,F调简谱的音符与频率的关系如表5.1所示。本设计基准时钟选取5MHz。5MHz频率通过带预置数的13位2进制计数器分频,产生频率随预置数变化的脉冲信号,由于该脉冲信号非等占空比,不具有驱动蜂鸣器的能力,故对此脉冲信号再次进行2分频以推动蜂鸣器发声。项目5乐曲自动演奏电路设计方案根据设计方案可控分频器的分频系数Tone=213-5000000/2f,f值为歌曲音符的频率。根据各音符的频率及计算公式可计算出F调各音符,基准频率为5MHz时的分频系数,如表5.2所示。2.乐曲节拍的控制项目5乐曲自动演奏电路设计方案一般乐曲的节拍是1/4拍的整数倍,若将1拍的时间定为0.8秒,则1/4拍的时长为0.2秒。若是占用时间较长的节拍(1/4拍的整数倍),则只需要将该音符连续输出相应的次数即可。由此可知,计数时钟信号可作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低。本设计采用5Hz的时钟信号(周期为0.2秒)来控制乐曲节拍。3.歌曲乐谱的设置项目5乐曲自动演奏电路设计方案歌曲乐谱中各音符所需的节拍有长有短,若某个音符需停留3个时钟节拍,只需连续3次输出相同的分频系数即可。因而,设置演奏歌曲的乐谱,就是根据歌曲乐谱的节拍存储每个音符的分频编码个数。演奏歌曲的乐谱可以存储在FPGA的LPM-ROM中,也可以直接用单元电路存储,本设计采用单元电路存储。设计流程项目5乐曲自动演奏电路设计方案VHDL的顺序语句只能出现在进程(process)、过程(procedure)和函数(function)中,利用顺序语句可以描述数字逻辑系统中的组合逻辑电路和时序逻辑电路。VHDL程序中常见的顺序语句有:赋值语句、流程控制语句、wait语句、子程序调用语句、空操作语句、断言语句、report语句等。项目5VHDL的顺序语句1.顺序赋值语句顺序赋值语句是出现在进程、过程和函数中的赋值语句,有信号赋值语句和变量赋值语句。它们的格式如下:
变量名:=表达式;
信号名<=表达式;变量赋值具有局部特征,它的赋值是立即发生的。信号赋值具有全局特征,它可以作为一个设计实体内部各单元之间数据传送的载体,还可通过信号进行实体间通信。信号在顺序语句中的赋值发生在一个进程结束或子程序调用完成以后,信号的赋值有一定的延时。项目5VHDL的顺序语句【例5.1】变量赋值和信号赋值的应用项目5VHDL的顺序语句信号“scnt”与变量“vcnt”都从0开始加1计数,但是信号计数输出“sigcnt”值比变量计数输出“varcnt”值延迟一个时钟周期。相当于信号赋值是通过寄存器赋值,而变量赋值是直接赋值。2.流程控制语句流程控制语句通过对条件的判断来决定执行哪一条或几条语句,常用的流程控制语句有if语句、case语句、loop语句等。(1)if语句if语句是通过对分支条件的判断决定执行哪个分支的顺序语句。if语句的常用格式有以下三种。①单分支if语句。单分支if语句格式如下:If条件判断表达式then
顺序执行语句;endif;当程序执行到单分支if语句时,如果if的判断条件为真,则if语句所包含的顺序执行语句将被执行;否则,不做任何操作。项目5VHDL的顺序语句【例5.2】单分支if语句的应用项目5VHDL的顺序语句在组合电路中使用单分支if语句,从“in_a”到“out_a”产生的是锁存器;在时序电路中使用单分支if语句,从“in_b”到“out_b”产生的是寄存器。②两分支if语句。两分支if语句格式:If条件判断表达式then
顺序执行语句1;else
顺序执行语句2;Endif;当if条件成立时,程序执行then和else之间的顺序执行语句;当if语句的条件不成立时,程序执行else和endif之间的顺序执行语句,即根据所指定的条件是否满足,程序可以选择两条不同的执行路径,可以看成是一个二选一数选择器。项目5VHDL的顺序语句【例5.3】两分支if语句的应用项目5VHDL的顺序语句从两分支if语句寄存器传输级综合效果图中可知,两分支if语句是一个二选一数据选择器。③多分支if语句。多分支if语句的格式:if条件判断表达式1then
顺序语句1;elsif条件判断表达式2then
顺序语句2; …elsif条件判断表达式nthen
顺序语句n;else
顺序语句n+1;endif;项目5VHDL的顺序语句没有else分支的格式:if条件判断表达式1then
顺序语句1;elsif条件判断表达式2then
顺序语句2; …elsif条件判断表达式nthen
顺序语句n;endif;多分支if语句执行多选择控制功能,允许在一个语句中出现多重条件,即条件嵌套。当满足所设置的多个条件之一时,就执行该条件后的顺序执行语句。【例5.4】多分支if语句的应用项目5VHDL的顺序语句从多分支if语句寄存器传输级综合效果图中可知,输出“out_a”的多分支if语句最后加了else分支,没有产生锁存器;输出“out_b”的多分支if语句最后没有加else分支,产生了锁存器,而且前面还产生了一个3输入的“或门”等资源消耗。(2)case语句case语句的格式如下:case判断表达式iswhen选择项值1=>顺序语句1;when选择项值2=>顺序语句2;
…when选择项值n=>顺序语句n;whenothers=>顺序语句n+1;endcase;当执行case语句时,首先计算判断表达式的值,然后根据条件句中与之相同的选择值对应的顺序语句执行,最后结束case语句。选择项可以是一个值,也可以是多个用“值|值|值”表示的值,还可用“值to值”约束一个范围,但选择项不能有重复。项目5VHDL的顺序语句使用case语句注意点:①条件句中的“=>”是操作符,它相当于if语句中的“then”。②条件句中的选择值,必须在“判断表达式”的取值范围之内。③case语句中每一条语句的选择值只能出现一次。④除非所有条件句中的选择值能完全覆盖case语句表达式的取值,否则最末一个条件句中的选择值,必须用“others”表示,它代表已给的所有条件句中未能列出的其他可能的取值。关键词“others”只能出现一次,且只能作为最后一条件取值。⑤与if语句相比,if语句是有序的,先处理最起始、最优先的条件,后处理次优先的条件。case语句是无序的,所有表达式的值都并行处理。项目5VHDL的顺序语句【例5.5】case语句与多分支if语句的差别项目5VHDL的顺序语句使用case语句从输入到输出“out_a”是一个数据选择器,只有一个数据选择器的延时。多分支if语句从输入到输出“out_b”由多级级连的二选一数据选择器组成,等级最低的if分支从输入到输出要经过多级二选一数据选择器的延时。(3)loop语句loop语句的功能是循环执行一条或多条顺序语句,主要有for循环、while循环和条件跳出等三种形式。①for/loop语句。for/loop语句格式如下:[标号]:for循环变量in循环变量的范围loop
顺序语句;endloop[标号];for循环语句中的循环变量是一个临时变量,是loop语句的局部变量,不必事先定义,由loop语句自动定义,它只能作为赋值源,不能被赋值。在同一loop语句中不能再使用与此变量同名的标识符。循环变量的循环范围从循环变量的初值开始,每执行一次,就改变一次,直到循环变量范围的终值。项目5VHDL的顺序语句【例5.6】for/loop语句的应用项目5VHDL的顺序语句例5.6VHDL程序是16位偶校验电路。从仿真结果可知,输入第1个“data”值的所有位中有4个1,校验结果“xoro”为“0”,与偶校验位相同,输入的“data”值中有偶数个“1”;输入第2个“data”值的所有位中有5个1,校验结果“xoro”为“1”,与偶校验位不相同,输入的“data”值中有奇数个“1”。同理,可分析图中其它输入数值的偶校验。②while/loop语句。while/loop语句格式如下:[标号]:while条件loop
顺序处理语句;endloop[标号];在while/loop语句中,没有给出循环次数的范围,而给出了循环执行顺序语句的条件,没有自动递增循环变量的功能。如果循环控制条件为真,则进行循环,否则结束循环。因而需要在顺序处理语句中有修改循环条件的语句,使循环条件不满足,从而结束循环。项目5VHDL的顺序语句【例5.7】while/loop语句的应用项目5VHDL的顺序语句例5.7的VHDL程序是16位奇校验电路。从仿真结果可知,输入第1个“data”值的所有位中有4个1,校验结果“xoro”为“1”,与奇校验位相同,说明输入的“data”值中有偶数个“1”;输入第2个“data”值的所有位中有5个1,校验结果“xoro”为“0”,与奇校验位不相同,说明输入的“data”值中有奇数个“1”;同理,可分析图中其它输入数值的奇校验。③条件跳出循环。循环语句中的next与exit语句,用来结束循环或跳出循环。next语句用于控制内循环的结束,其格式为:next[标号][when条件];exit语句用于结束loop循环状态,其格式为:exit[标号][when条件];next语句与exit语句具有相似的语句格式和跳转功能,它们都是loop语句的内部循环控制语句。next语句是跳向loop语句的起始点,而exit语句是跳向loop语句的终点。项目5VHDL的顺序语句3.wait语句wait语句的功能是把一个进程挂起,直到满足等待的条件成立才重新开始进程的执行,含wait语句的进程,process后不能加敏感信号,否则是非法的。wait语句使用形式通常有waiton(敏感信号列表)、waituntil(判断条件表达式)和waitfor(时间)等三种形式。项目5VHDL的顺序语句(1)waiton语句waiton语句的使用格式为:processbegin
顺序语句1;顺序语句2;
…顺序语句n;waiton信号[,信号];endprocess;waiton语句后的信号也可以称为敏感信号,如果信号发生变化,则执行,否则进程处于挂起状态。waiton语句有些综合工具不支持。3.wait语句项目5VHDL的顺序语句(2)waituntil语句waituntil语句的使用格式为:processbegin
顺序语句1;顺序语句2;
…顺序语句n;waituntil条件判断表达式;endprocess;当进程执行到waituntil语句时进程被挂起,若条件判断表达式为真,则进程将被启动。waituntil语句中,条件判断表达式隐式地建立了一个敏感信号量表。wait语句的功能是把一个进程挂起,直到满足等待的条件成立才重新开始进程的执行,含wait语句的进程,process后不能加敏感信号,否则是非法的。wait语句使用形式通常有waiton(敏感信号列表)、waituntil(判断条件表达式)和waitfor(时间)等三种形式。3.wait语句项目5VHDL的顺序语句(3)waitfor语句waitfor语句的格式为:processbegin
顺序语句1;顺序语句2;
…顺序语句n;waitfor时间t(一定要以时间为单位);endprocess;waitfor时间语句的功能是把进程挂起时间t后再起动进程,waitfor语句一般用于VHDL程序的测试文件中,综合工具一般不支持。wait语句的功能是把一个进程挂起,直到满足等待的条件成立才重新开始进程的执行,含wait语句的进程,process后不能加敏感信号,否则是非法的。wait语句使用形式通常有waiton(敏感信号列表)、waituntil(判断条件表达式)和waitfor(时间)等三种形式。项目5乐曲自动演奏电路编程下载编程下载的目的是将设计所生成的文件通过计算机下载到目标器件,验证设计是否满足实际要求或能否在实际中应用。乐曲自动演奏电路硬件测试基于EP4CE6E22C8-FPGA最小系统板,采用共阴数码显示音符的简谱值,用3LED表示发出音符不同八度音,用蜂鸣器发声。项目5乐曲自动演奏电路编程下载1.乐曲自动演奏电路控制模块基于FPGA利用VHDL程序设计完成的乐曲自动演奏电路输入输出端口,如图5.14所示。【clk】为系统时钟信号输入端,与FPGA最小系统板所提供的50MHz时钟信号相连接【smg[6..0]】为简谱显示信号输出端【led[2..0]】为高低音指示信号输出端【speaker】为音频信号输出端硬件电路连接图5.14乐曲自动演奏电路输入输出端口项目5乐曲自动演奏电路编程下载2.输出电路输出用3LED表示发出音符不同八度音,用数码管显示音符的简谱值,用蜂鸣器发声。乐曲自动演奏电路输出原理图,如图5.15所示。图5.15乐曲自动演奏电路输出原理图项目5乐曲自动演奏电路编程下载图5.16乐曲自动演奏电路输出PCB图2.输出电路输出用3LED表示发出音符不同八度音,用数码管显示音符的简谱值,用蜂鸣器发声。乐曲自动演奏电路输出PCB图,如图5.16所示。项目5乐曲自动演奏电路编程下载图5.17乐曲自动演奏电路输出模块实物图2.输出电路输出用3LED表示发出音符不同八度音,用数码管显示音符的简谱值,用蜂鸣器发声。乐曲自动演奏电路输出模块实物图,如图5.17所示。项目5乐曲自动演奏电路编程下载3.各元件连接表示发出音符不同八度音的3LED,显示音符的简谱值的数码管,发声元器件蜂鸣器与EP4CE6E22C8-FPGA最小系统板的20×2双排直插针连接原理图,如图5.18所示。图5.18乐曲自动演奏电路各元件连接原理图项目5乐曲自动演奏
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关于新学期工作计划模板
- 2021学校篮球训练计划例文
- 全县幼儿教师培养计划
- 2024上学期幼儿园园务工作计划
- 中学生班级学期安全工作计划
- 中心学校品德中心教研组活动计划品德教研
- 临沂大学《艺术设计赏析》2021-2022学年第一学期期末试卷
- 临沂大学《文学理论Ⅱ》2021-2022学年第一学期期末试卷
- 五年级上学期中队计划
- 聊城大学《艺术设计基础》2021-2022学年第一学期期末试卷
- Zarit照顾者负担量表
- 2021年全国质量奖现场汇报材料-财务资源、财务管理过程及结果课件
- 驾驶员交通安全知识培训ppt
- BCG矩阵图文详解
- 飞秒激光加工技术ppt课件(PPT 31页)
- 2020-2021学年广东省广州市天河区五年级上学期期末考试数学模拟试卷及答案解析
- 【双减资料】-双减背景下高效课堂教学实践研究课题总结结题报告
- 李震-数据中心节能关键技术研究PPT通用课件
- 中药饮片入库验收操作规程
- 正体五行择法
- 山东省济南市高新区2021-2022学年上学期八年级期末生物试卷(附答案)
评论
0/150
提交评论