EDA与VHDL课程设计论文-音乐节拍器_第1页
EDA与VHDL课程设计论文-音乐节拍器_第2页
EDA与VHDL课程设计论文-音乐节拍器_第3页
EDA与VHDL课程设计论文-音乐节拍器_第4页
EDA与VHDL课程设计论文-音乐节拍器_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沈阳理工大学课程设计专用纸沈阳理工大学课程设计专用纸-1-摘要音乐节拍器作为音乐初学者必备的辅助器材可以帮助演奏者在练习期间能将音符表达的更贴切,避免演奏难度及音乐情绪干扰演奏速度影响表演效果因此,节拍器的精度及质量至关重要。而传统基于机械时钟的节拍器要制作出高质量的成品成本很高,故制作工艺简单,体积小,功能全面,而且时钟稳定,无需维护的电子音节节拍器应运而生。随着电子技术的发展,应用系统向着的应用引起电子产品及系统开发的革命性变革。和其他的电子技术相比,VHDL语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强,在实际应用中越来越广泛。在这个阶段,人们开始追求贯彻整个系统设计的自动化,可以从繁重的设计工作中彻底解脱出来,把精力集中在创造性的方案与概念构思上,从而可以提高设计效率,缩短产品的研制周期。作为一种工业标准硬件描述语言。本文为广大的电子爱好者及音乐学习者提供了一份不同于传统音乐节开启的设计方案,利用向着小型化、快速化、大容量、重量轻的方向发展的EDA技术阐述了完整全面的设计方法及结果,从概念模型设计到详细的系统设计均图文并茂的展示了设计的思路与方式,并附ALTERA电子公司专用仿真设计环境QYARTUSII的波形仿真图及全部源码(VHDL语言),

目录引言 -1-1.系统的设计要求 -1-2.系统分析 -1-2.1系统构成 -1-2.2系统实现过程 -2-3.具体模块设计 -3-3.1数控分频电路TimeCLK -3-3.2数码管驱动显电路LED8 -3-3.3声光输出电路OutputTem -3-4.程序设计 -4-4.1数控分频电路TimeCLK源代码 -4-4.2数码管驱动显电路LED8源代码 -4-4.4顶层文件设计模块 -2-5.运行结果与分析 -2-5.1数控分频电路TimeCLK -2-5.2数码管驱动显电路LED8 -2-5.3声光输出电路OutputTem -2-6.结束语 -2-参考文献 -3-引言随着当前科学技术的发展以及人民的思想愈加开放,使用电子产品不再是一种可以谋生的特殊技术,相反技术走进生活成为新时代的口号和发展动向,越来越多的人致力于设计出更巧妙的电子产品以帮助我们更好的生活、工作、学习。多年来,音乐节拍器作为音乐初学者必备的辅助器材,一直备受争议:好的音乐节拍器节奏精准,音色润美,可以帮助演奏者在练习期间能将音符表达的更贴切,避免演奏难度及音乐情绪干扰演奏速度影响表演效果;但劣质节拍器的频率不准,反而会打乱学习者本身的节奏感,且使演奏者很难专注地将感情融入到演奏之中。因此,节拍器的精度及质量至关重要。然而,传统的节拍器多基于机械时钟,不仅防震防磁效果差、体积大、维护困难,且要制作出高精度的成品成本很高,与此相比,基于晶振时钟的电子音节节拍器,制作工艺简单,体积小,功能全面,而且时钟稳定,无需维护,且音量音速音色可调,能满足几乎全部学习者的需求。随着电子技术的发展,应用系统向着小型化、快速化、大容量、重量轻的方向发展,EDA技术的应用引起电子产品及系统开发的革命性变革。和其他的电子技术相比,VHDL语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强,在实际应用中越来越广泛。在这个阶段,人们开始追求贯彻整个系统设计的自动化,可以从繁重的设计工作中彻底解脱出来,把精力集中在创造性的方案与概念构思上,从而可以提高设计效率,缩短产品的研制周期。作为一种工业标准硬件描述语言。1.系统的设计要求设计一个音乐节拍器,三种可选拍号(2/4,3/4,4/4),能准确声光同步显示拍强(即拍显),可连续调整并用数码管显示拍速,可连续调整音量。2.系统分析2.1系统构成CPU(CPLD)部分的逻辑功能:检测按钮输入模块的信息(拍号、拍速、音量),并按相应信息进行分频调整得到正确频率的输出信号,并驱动扬声器,数码管及LED灯以显示所需信息。外围电路有两部分,一部分为输出(声光模块),一部分为输入(按钮模块),系统框图如图2.1:按钮输入模块按钮输入模块CPU(CPLD)拍号调节TK拍速调节TS[0,1]音量调节VM[0,1]数码管片选CS[3…0]数码管字形控制S[8…0]声信号输出Speaker声光输出模块图2.1系统构成框图本文着重讲述系统设计中的CPLD程序设计部分,故“CPLD芯片的输入信号”、“CPLD芯片的输出信号”、“CPLD芯片的逻辑结构”等词语均省略为“输入信号”、“输出信号”、“逻辑结构”等,特此声明,不再赘述。2.2系统实现过程用VHDL进行设计,首先应该了解,VHDL语言一种全方位硬件描述语言,包括系统行为级描述,寄存器传输级和逻辑门阵列等多个设计层次。充分利用VHDL“自顶向下”的设计优点以及层次化的设计概层次概念对于设计复杂的数字系统非常有用,能使得再复杂的系统设计也可从简单的单元入手,简化设计过程,降低设计难度,且提高了程序的可读性,并降低了程序的维护难度。根据本系统设计要求知(如图2.1)——整个系统共有三个输入信号:控制拍号(2/4、3/4、4/4)的逻辑输入信号TK;控制拍速(20…400)的调节信号TS[0,1],分别为“增加”、“减小”;控制音量的上下调节信号(1…20);整个系统共有四个输出信号:扬声器驱动信号Speaker;拍显LED驱动信号LED[1…3];数码管驱动信号S[1…8];数码管片选信号CS[1…2]。据此,我们可以将整个节拍产生电路分为三大部分:数控分频电路TimeCLK;数码管驱动显示LED8;声光输出OutputTem电路。综上,系统的工作原理便可简述如下:数码管驱动根据输入信号拍速TS结合字形码(按数码管类型分为共阴极或共阳极)动态扫描三位数码管即可;数控分频电路根据输入信号TS、CLK,可产生无可察觉干扰指定频率的,可供声光输出电路使用的时钟信号(节拍信号)CLK1;声光输出电路则是根据拍号TK及CLK1则可以产生能驱动扬声器发出不同音调的波形,输出给扬声器,同时按拍强让三个同色不同亮度的LED灯依次亮起,产生声光同步的拍显效果。完整的音乐节拍系统的逻辑结构图如图2.2所示:CSS[0…7]CSSpd数码管驱动电路CSS[0…7]CSSpd数码管驱动电路TSS[0…7]TSS[0…7]输出信号输入信号CLK1SpdCLKSpeakerSpeakerCLKCLK1数控分频 CLK1SpdCLKSpeakerSpeakerCLKCLK1数控分频TKLED[0…2]LED[TKLED[0…2]LED[0…2]声光输出TKVMTSVMVMTSVM图2.2逻辑结构图3.具体模块设计3.1数控分频电路TimeCLK数控分频电路功能:利用计数器,结合输入信号TS、CLK,实现分频,产生无可察觉干扰指定频率的,可供声光输出电路使用的时钟信号(节拍信号)CLK1;3.2数码管驱动显电路LED8数码管驱动电路功能:根据输入信号——拍速调节信号TS计算当前拍速并输出;根据当前拍速按字形码(共阴极或共阳极)动态扫描三位数码管;3.3声光输出电路OutputTem声光输出电路功能:根据拍号TK及CLK1产生能驱动扬声器发出不同音调的波形,输出给扬声器;按拍强让三个同色不同亮度的LED灯依次亮起,产生声光同步的拍显效果。4.程序设计4.1数控分频电路TimeCLK源代码libraryIEEE;UseIEEE.STD_LOGIC_1164.ALL;UseIEEE.STD_LOGIC_ARITH.ALL;UseIEEE.STD_LOGIC_UNSIGNED.ALL;entityTimeCLKis PORT( CLK :INSTD_LOGIC; SPEED :ININTEGERRANGE24TO400; CLK1 :bufferSTD_LOGIC );ENDENTITY;ARCHITECTUREBHVOFTimeCLKIS SIGNALflag:STD_LOGIC:='0'; SIGNALSUM:INTEGERRANGE0TO1000:=1000;BEGIN SUM<=24000/SPEED; process(CLK) variablecot:INTEGERRANGE0to5000; BEGIN IF(clk='1')THEN IF(COT<SUM)THEN cot:=cot+1; CLK1<='0'; ELSIF(COT<2*SUM)THEN cot:=cot+1; CLK1<='1'; ELSE cot:=0; ENDIF; ENDIF; ENDPROCESS; ENDARCHITECTURE;4.2数码管驱动显电路LED8源代码LibraryIEEE;UseIEEE.STD_LOGIC_1164.ALL;UseIEEE.STD_LOGIC_ARITH.ALL;UseIEEE.STD_LOGIC_UNSIGNED.ALL;entityLED8is PORT(CLK:INSTD_LOGIC;TS:INSTD_LOGIC_VECTOR(0TO1);S :bufferSTD_LOGIC_VECTOR(0TO7);CS :bufferSTD_LOGIC_VECTOR(0TO3);SPEED1:BUFFERINTEGERRANGE24TO400);ENDENTITY;ARCHITECTUREBHVOFLED8ISSIGNALShun:STD_LOGIC_VECTOR(0TO7):="00000110";SIGNALSten:STD_LOGIC_VECTOR(0TO7):="00111111";SIGNALSone:STD_LOGIC_VECTOR(0TO7):="00111111"; SIGNALSPEED:INTEGERRANGE24TO400:=100;BEGINPROCESS(TS) variablehun:integerrange0to4; variableten:integerrange0to9; variableone:integerrange0to9; BEGINhun:=Speed/100;ten:=(Speed-hun*100)/10;one:=Speed-hun*100-ten*10;CASEhunIS WHEN0=>Shun<="00111111"; WHEN1=>Shun<="00000110";WHEN2=>Shun<="01011011";WHEN3=>Shun<="01001111";WHEN4=>Shun<="01100110";WHENOTHERS=>Shun<="11111111";ENDCASE;CASE(ten)ISWHEN0=>Sten<="00111111";WHEN1=>Sten<="00000110";WHEN2=>Sten<="01011011";WHEN3=>Sten<="01001111";WHEN4=>Sten<="01100110";WHEN5=>Sten<="01101110";WHEN6=>Sten<="01111110";WHEN7=>Sten<="00000111";WHEN8=>Sten<="01111111";WHEN9=>Sten<="01101111";WHENOTHERS=>Sten<="11111111";ENDCASE;CASE(one)ISWHEN0=>Sone<="00111111";WHEN1=>Sone<="00000110";WHEN2=>Sone<="01011011";WHEN3=>Sone<="01001111";WHEN4=>Sone<="01100110";WHEN5=>Sone<="01101110";WHEN6=>Sone<="01111110";WHEN7=>Sone<="00000111";WHEN8=>Sone<="01111111";WHEN9=>Sone<="01101111";WHENOTHERS=>Sone<="11111111"; ENDCASE; ENDPROCESS; PROCESS(CLK) BEGIN if(clk'eventandclk='1')then CASECSIS WHEN"0001"=>S<=Sone; CS<="0010"; WHEN"0010"=>S<=Sten; CS<="0100"; WHEN"0100"=>S<=Shun; CS<="0001"; WHENOTHERS=>S<="11000011"; CS<="0001"; ENDCASE; SPEED1<=SPEED; endif; ENDPROCESS; PROCESS(TS) BEGIN IF(TS(0)='1')THEN Speed<=Speed+1; ENDIF; IF(TS(1)='1')THEN Speed<=Speed-1; ENDIF; ENDPROCESS;ENDARCHITECTURE; 4.3声光输出电路OutputTem源代码libraryIEEE;UseIEEE.STD_LOGIC_1164.ALL;UseIEEE.STD_LOGIC_ARITH.ALL;UseIEEE.STD_LOGIC_UNSIGNED.ALL;entityOutputTemisPORT(CLK :INSTD_LOGIC;CLK1 :INSTD_LOGIC;TK :INSTD_LOGIC; Speaker:BUFFERSTD_LOGIC;LED :OUTSTD_LOGIC_VECTOR(0TO2) );ENDENTITY;ARCHITECTUREBHVOFOutputTemIS SIGNALTemKind:integerrange2to4:=2;BEGIN PROCESS(CLK) variablecount:integerrange0to4; variableSPKBuf:STD_LOGIC; BEGIN IF(CLK1='1')THEN Speaker<=notCLK; count:=0; ELSE Speaker<='0'; ENDIF; ENDPROCESS; PROCESS(CLK1) variablecount1:integerrange0to4; BEGINIFCLK1='0'THENCASE(TemKind)iswhen2=>case(count1)iswhen1=> LED<="001";whenOTHERS=> count1:=0;LED<="100"; endcase;when3=>case(count1)iswhen1=>LED<="010";when2=>LED<="001";whenOTHERS=>count1:=0;LED<="100";endcase;when4=>case(count1)iswhen1=>LED<="001";when2=>LED<="010";when3=>LED<="001";whenOTHERS=>count1:=0;LED<="100";endcase;whenothers=>LED<="111";ENDCASE;count1:=count1+1;ENDIF;ENDPROCESS;PROCESS(TK)BEGINif(TK='1')then CASE(TemKind)is when2=>TemKind<=3; when3=>TemKind<=4; when4=>TemKind<=2; whenothers=>TemKind<=2; endcase; endif;ENDPROCESS;ENDARCHITECTURE; 4.4顶层文件设计模块libraryIEEE;UseIEEE.STD_LOGIC_1164.ALL;UseIEEE.STD_LOGIC_ARITH.ALL;UseIEEE.STD_LOGIC_UNSIGNED.ALL;entitySimTemisPORT( CLK :INSTD_LOGIC; TK :INSTD_LOGIC; TS :INSTD_LOGIC_VECTOR(0TO1); Speaker:OUTSTD_LOGIC; LED :OUTSTD_LOGIC_VECTOR(0TO2);S:OUTSTD_LOGIC_VECTOR(0TO7);CS:OUTSTD_LOGIC_VECTOR(0TO3));ENDENTITY;ARCHITECTUREBHVOFSimTemISComponentTimeCLKPORT(CLK:INSTD_LOGIC; SPEED:ININTEGERRANGE24TO400;CLK1:OUTSTD_LOGIC);ENDComponent;ComponentLED8PORT(CLK :INSTD_LOGIC;TS :INSTD_LOGIC_VECTOR(0TO1);S :BUFFERSTD_LOGIC_VECTOR(0TO7);CS :BUFFERSTD_LOGIC_VECTOR(0TO3);SPEED1:BUFFERINTEGERRANGE24TO400 ); ENDComponent; ComponentOutputTemPORT( CLK :INSTD_LOGIC; CLK1 :INSTD_LOGIC; TK :INSTD_LOGIC; Speaker:OUTSTD_LOGIC; LED :OUTSTD_LOGIC_VECTOR(0TO2)); ENDComponent; SIGNALCLK1:STD_LOGIC; SIGNALSPEED:INTEGERRANGE24TO400;BEGIN U0:TimeCLKPORTMAP(CLK,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论