版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.一、题目分析1、分析要求,确定总体方框图本设计基本部分是用VHDL语言设计一个简易的八音符电子琴,在 Quartus II 平台下下载到 Cyclone 系列的 EP1C12Q240C8芯片中,该电路设计能够实现 DO、 RE、MI、 FA等八个音调的电子琴,发挥部分是设计一乐曲自动演奏器,用户自己编制乐曲存入电子琴,电子琴可以完成自动演奏。电子琴音乐产生原理及硬件设计由于一首音乐是许多不同的音阶组成的, 而每个音阶对应着不同的频率, 这样我们就可以利用不同的频率的组合, 即可构成我们所想要的音乐了。根据系统设计要求, 系统设计采用自顶向下的设计方法, 系统的整体组装设计原理图如图 1 所示
2、,它由乐曲自动演奏模块 AUTO、音调发生模块 TONE和数控分频模块 FENPIN三部分组成。图 1 系统的整体组装设计原理图2、最终完成的技能指标( 1)设计一个简易的八音符电子琴,它可通过按键输入来控制音响。( 2)演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存入的乐曲。二、选择方案通过可编程逻辑器件 ( PLD)和 VHDL硬件描述引言来实现电子琴的基本部分和发挥部分的设计。 对于基本部分, 设计的主体是数控分频器, 对输入的频率进行分频,得到各个音阶对应的频率最为输出。 当按下不同的键时发出不同的声音。Word 资料.对于发挥部分,则在原设计的基础上, 增加一个乐曲存储模块,
3、 代替了键盘输入,产生节拍控制( index 数据存留时间)和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表, 由一个计数器来控制此真值表的输出, 而由此计数器的计数时钟信号作为乐曲节拍控制信号, 从而可以设计出一个纯硬件的乐曲自动演奏电路。方案一:由单片机来完成设计。 可用单片机控制键盘的输入, 以及产生相应的频率信号作为输出。 目前,单片机的功能已比较强大, 集成度日益增高且其设计和控制比较容易。 但是由于在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路, 如锁存器,译码器等都需要单独的电路, 因此整个系统显得十分复杂,抗干扰性差,在运行过程中容易死机或进入死循环, 可
4、靠性降低,而功耗费用增高。方案二:利用 PLC来完成设计。目前利用 PLC的技术已经比较成熟。 PLC有其优点, 其性能优异,体积小,可靠性和精度都比较好,在电子琴的设计中可采用 PLC来完成硬件的控制, 但是用 PLC实现编程相对比较复杂, 对于电子琴这种小型设计来说成本过高。方案三:利用可编程逻辑器件PLD来完成该设计。 利用 PLD可以很好的解决上述的问题。它的成品体积小,适合电子琴这种小型设计。其性能稳定,控制精度高( Xilinx公司的高密度,高速可预测延时,高性能系列芯片),易于管理和屏蔽,抗干扰能力强,可靠性高。综上,在本设计中选择第三种方案最优。三、各模块原理及其程序1、乐曲自
5、动演奏模块乐曲自动演奏模块( AUTO.VHD)的作用是产生 8 位发声控制输入信号 / 当进行自动演奏时, 由存储在此模块中的 8 位二进制数作为发声控制输入, 从而自动演奏乐曲。为了实现扩展部分的设计, 便需要多加上一个音乐存储模块, 该模块的作用是产生 8 位发声控制输入 index ,auto 为 0 或 1 时可以选择自动演奏或者键盘输入,如果 auto 为 0,则而由存储在此模块中的 8 位二进制数来作为发声控制输入,由此便可自动演奏乐曲。此模块的 VHDL语言中包括两个进程,首先是对基准脉冲进行分频得到 4Hz 的脉冲,作为第二个进程的时钟信号, 它的目的是控制每个音阶之间的停顿
6、时间,此处便是 1/4=0.25s ,第二个进程是音乐的存储,可根据需要编写不同的乐曲。这段模块的原理图如图2 所示:Word 资料.CLKAUTOINDEX07.0图 2 乐曲自动演奏模块原理图乐曲自动演奏模块可以由 VHDL语言来实现,下面是一段主要代码:BEGINIF AUTO ='0' THENCASE COUNT0 ISWHEN 0=>INDEX0<="00000100" -3WHEN 1=>INDEX0<="00000100" -3WHEN 2=>INDEX0<="00000100
7、" -3WHEN 3=>INDEX0<="00000100" -3WHEN 4=>INDEX0<="00010000" -5WHEN 5=>INDEX0<="00010000" -5WHEN 6=>INDEX0<="00010000" -5WHEN 7=>INDEX0<="00100000" -6WHEN 8=>INDEX0<="10000000" -8WHEN 9=>INDEX0<
8、="10000000" -8WHEN 10=>INDEX0<="10000000" -8WHEN 11=>INDEX0<="00000100" -3WHEN 12=>INDEX0<="00000010" -2WHEN 13=>INDEX0<="00000010" -2WHEN 14=>INDEX0<="00000001" -1WHEN 15=>INDEX0<="00000001" -1
9、WHEN 16=>INDEX0<="00010000" -5WHEN 17=>INDEX0<="00010000" -5WHEN 18=>INDEX0<="00001000" -4WHEN 19=>INDEX0<="00001000" -4WHEN 20=>INDEX0<="00001000" -4WHEN 21=>INDEX0<="00000100" -3WHEN 22=>INDEX0<=&
10、quot;00000010" -2WHEN 23=>INDEX0<="00000010" -2WHEN 24=>INDEX0<="00010000" -5WHEN 25=>INDEX0<="00010000" -5WHEN 26=>INDEX0<="00001000" -4WHEN 27=>INDEX0<="00001000" -4WHEN 28=>INDEX0<="00000100" -3WH
11、EN 29=>INDEX0<="00000100" -3WHEN 30=>INDEX0<="00000010" -2WHEN 31=>INDEX0<="00000010" -2Word 资料.WHEN OTHERS =>NULL;END CASE;ELSE INDEX0<=INDEX2;END IF;END PROCESS;END BEHAVIORAL;2、音调发生模块音调发生模块 (TONE.VDL)的作用是产生获得音阶的分频预置值。当 8 位发声控制输入 index 中的某一位为高电
12、平时,则对应某一音阶的数值将以端口tone输出,作为获得该音阶的分频预置值,该值作为数控分频器的输入,来对4MHz的脉冲进行分频,由此得到每个音阶相应的频率,例如输入index="00000010" ,即对应的按键是 2,产生的分频系数便是 6809;由 code 输出对应该音阶简谱的显示数码;由 high 输出指示音阶高 8 度的显示,低电平有效。这段模块的原理图如图3 所示:TONE10.0INDEX7.0图 3 音调发生模块原理图音调发生模块可以由 VHDL语言来实现,下面是一段主要代码:BEGINCASE INDEX ISWHEN "00000001&qu
13、ot;=>TONE0 <=773;CODE<="1001111"HIGH<='1'WHEN "00000010"=>TONE0 <=912;CODE<="0010010"HIGH<='1'WHEN "00000100"=>TONE0 <=1036;CODE<="0000110"HIGH<='1'WHEN "00001000"=>TONE0 <=1
14、116;CODE<="1001100"HIGH<='1'WHEN "00010000"=>TONE0 <=1197;CODE<="0100100"HIGH<='1'WHEN "00100000"=>TONE0 <=1290;CODE<="0100000"HIGH<='0'WHEN "01000000"=>TONE0 <=1372;CODE<="
15、;0001111"HIGH<='0'WHEN "10000000"=>TONE0 <=1410;CODE<="0000000"HIGH<='0'WHEN OTHERS =>TONE0<=2047;CODE<="0000001"HIGH<='0'END CASE;END PROCESS;Word 资料.3、数控分频模块在对 EDA 的学习中,我们知道数控分频器的功能是在输入端输入不同数据时,对输入时钟产生不同的分频比, 输出不
16、同频率的时钟, 以改变输出信号的频率。本设计中数控分频模块是利用并行预置数的减法计数器对时基脉冲进行分频,得到与 1、2、3、4、5、6、7 七个音符相对应的频率。该模块的 VHDL描述中包含了三个进程。首先对 32MHz的基准脉冲进行分频得到 8MHz的脉冲,然后按照 tone1 输入的分频系数对 4MHz的脉冲再次分频, 得到的便是所需要的频率。 而第三个进程的作用是在音调输出时再进行二分频, 将脉冲展宽,以使扬声器有足够功率发音。这段模块的原理图如图4 所示:CLK1SPKS图 4 数控分频模块原理图数控分频模块可以由 VHDL语言来实现,下面是一段主要代码:BEGINPROCESS(C
17、LK1)VARIABLE COUNT:INTEGER RANGE 0 TO 8;BEGINIF (CLK1'EVENT AND CLK1='1')THENCOUNT:=COUNT +1;IF COUNT=2 THENPRECLK<='1'ELSIF COUNT =4 THENPRECLK<='0'COUNT:=0;END IF ;END IF ;END PROCESS;PROCESS(PRECLK,TONE1)VARIABLE COUNT11:INTEGER RANGE 0 TO 2047;BEGINIF (PRECLK
18、9;EVENT AND PRECLK='1')THENIF COUNT11<TONE1 THENCOUNT11:=COUNT11+1;FULLSPKS<='1'ELSECOUNT11:=0;FULLSPKS<='0'END IF ;END IF ;Word 资料.END PROCESS;PROCESS(FULLSPKS)VARIABLE COUNT2 :STD_LOGIC:='0'BEGINIF (FULLSPKS'EVENT AND FULLSPKS='1')THENCOUNT2:=NO
19、T COUNT2;IF COUNT2='1'THENSPKS<='1'ELSESPKS<='0'END IF ;END IF;END PROCESS;4、顶层设计该 DIANZIQIN模块是整个电子琴设计的核心,也是 VHDL程序的主程序,前面 3 个源程序都是作为子程序分别实现电子琴的某一功能, 而 DIANZIQIN 模块则通过调用子程序最终实现乐曲演奏的目的,奏出美妙的乐曲。利用 VHDL语言COMPONENT将三个模块组合起来, 其中 3 个模块和 DIANZIQIN模块的输入输出是一一对应的,该模块的符号编辑图如图 5。图
20、5 顶层设计模块符号编辑图四、编程下载测试1、功能仿真功能仿真用于综合前检查设计的逻辑功能是否符合设计要求。 仿真过程中可以通过观察检测设计的输入信号,输出信号以及内部信号以检测设计的逻辑功Word 资料.能。如果仿真都通过的话就可以进行引脚锁定, 然后下载程序, 在实验箱上可以直观的看到结果。( 1)乐曲自动演奏模块的仿真(如图6 所示)图 6 乐曲自动演奏模块的仿真该图输入系统时钟信号CLK初值设为 0,自动演奏 AUTO设为 1,键盘输入信号 INDEX2为 00, INDEX0为音符信号输出,是 8 位的二进制代码它根据 COUNT0 的值改变而改变。( 2)音调发生模块的仿真(如图7
21、)图 7 音调发生模块的仿真该图输入音符信号 INDEX初值为 00,输出是音符显示信号 CODE为 01,高低音显示信号为 0,音符的分频系数为 11111111 即 2047Hz。( 3)数控分频模块的仿真(如图8)Word 资料.图 8 数控分频模块的仿真该图输入系统时钟信号CLK1 初值为 0(各输出值都是在时钟信号的下降沿有效),音符分频系数 TONE1为 00100000 即 1290Hz,驱动扬声器的音频信号SPKS输出为 1。( 4)简易电子琴整个系统的仿真(如图9)图 9 简易电子琴整个系统的仿真该图输入系统时钟信号 CLK初值为 0,自动演奏信号 HANDTOAUTO初值为
22、 0,键盘输入信号 INDEX1为 00000000;输出音符信号 CODE1则为 0110000,高低音节信号 HIGH1变为 1,即高音,音频信号 SPKOUT即输出 0,输出为 1 时 CODE1 变为 0110100。Word 资料.2、锁定引脚:图 10 引脚锁定3、硬件测试结果选择模式 3, PIO31 控制是否自动播放预置歌曲或手动键入歌曲,可通过按键 18 演奏歌曲。五、课程总结在整个设计过程中, 我通过查阅大量有关资料, 与同学交流经验和自学, 并向老师请教等方式, 使自己学到了不少知识, 也经历了不少艰辛, 但收获同样巨Word 资料.大。在整个设计中我懂得了许多东西, 也
23、培养了我独立工作的能力, 树立了对自己工作能力的信心, 相信会对今后的学习工作生活有非常重要的影响。 同时大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好, 功能并没有完全实现, 但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。通过这次 VHDL课程设计,不仅增强了我们的实践动手能力,也让我们对课堂上所学到的理论知识的理解加深了许多, 这给我们提供了一个在学习生活中很难得的理论联系实际的机会。 能够借此机会了解到部分 EDA技术的知识和学习运用其中一种硬件描述语言 VHDL编程实现各种常用器件的功能,这是在任何课堂上
24、都得不到的一笔财富。另一方面我们也发现了在平时学习过程中难于发现的许多缺点跟不足。 比如实践机会过少, 所学的理论知识不能灵活运用, 在遇到实际的问题时无法正确处理;再者在课堂上获得的专业知识过于浅显, 很多的有关基本操作原理、 操作方法都理解不了; 课外知识了解的也过少, 导致在课程设计初期, 面对完全陌生的设计课题无从下手, 不知所措。这就提醒我们在平时的学习生活中不能一味埋头于面前的课本知识, 毕竟当今社会竞争越发激烈, 而学校能教授的东西有限, 要想在人才市场中脱颖而出就只能靠我们自己。 当然,在学习之余我们更应该积极参加各种有关专业知识的实践活动和比赛, 巩固所学理论, 多注意培养初
25、步的实际工作能力和专业技术能力,这样在以后的工作岗位上不会显得那么仓促与生疏。六、参考文献目录1 黄正谨,在系统编程技术及其应用,东南大学出版社2 刘江海 . ,EDA技术课程设计 . 华中科技大学出版社3 王诚,吴继华, Altera FPGA/CPLD 设计,人民邮电出版社4 张红润,张亚凡, FPGA/CPLD应用设计 200 例,北京航空航天大学出版社5 王锁萍,电子设计自动化( EDA)教程,电子科技大学出版社七、附录源程序如下:1、自动演奏模块程序( AUTO.VHD):LIBRARY IEEE;ENTITY AUTO ISPORT ( CLK : IN STD_LOGIC;-系统
26、时钟;键盘输入 / 自动演奏AUTO : IN STD_LOGIC;- 键盘输入信号Word 资料.CLK2 : BUFFER STD_LOGIC; -音符信号输出INDEX2 : IN STD_LOGIC_VECTOR(7 DOWNTO 0);INDEX0 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END AUTO;ARCHITECTURE BEHAVIORAL OF AUTO IS SIGNAL COUNT0: INTEGER RANGE 0 TO 31;BEGINPULSE0 :PROCESS(CLK,AUTO)- 此进程完成对系统时钟 8M的分频,得到 4H
27、z 的信号 clk2VARIABLE COUNT :INTEGER RANGE 0 TO 8;- 定义计数器变量,值从 0 到 8BEGINIF AUTO ='1' THEN -键盘输入为 1COUNT := 0;CLK2<='0' -计数器值指 0,时钟信号为 0ELSIF(CLK'EVENT AND CLK ='1')THEN - 时钟输入信号为 1COUNT :=COUNT +1; -计数器加 1IF COUNT =4 THENCLK2 <='1'ELSIF COUNT =8 THENCLK2<=&
28、#39;0' COUNT:=0;END IF ;END IF ;END PROCESS;MUSIC:PROCESS(CLK2)-此进程完成自动演奏部分曲的地址累加BEGINIF (CLK2'EVENT AND CLK2='1')THENIF (COUNT0=31)THENCOUNT0<=0;ELSECOUNT0<=COUNT0+1;END IF ;END IF ;END PROCESS;COM1:PROCESS(COUNT0,AUTO,INDEX2)BEGINIF AUTO ='0' THENCASE COUNT0 IS - 此 ca
29、se 语句:存储自动演奏部分的曲 WHEN 0=>INDEX0<="00000100" -3WHEN 1=>INDEX0<="00000100" -3WHEN 2=>INDEX0<="00000100" -3WHEN 3=>INDEX0<="00000100" -3WHEN 4=>INDEX0<="00010000" -5WHEN 5=>INDEX0<="00010000" -5WHEN 6=>IN
30、DEX0<="00010000" -5Word 资料.WHEN 7=>INDEX0<="00100000" -6WHEN 8=>INDEX0<="10000000" -8WHEN 9=>INDEX0<="10000000" -8WHEN 10=>INDEX0<="10000000" -8WHEN 11=>INDEX0<="00000100" -3WHEN 12=>INDEX0<="0000
31、0010" -2WHEN 13=>INDEX0<="00000010" -2WHEN 14=>INDEX0<="00000001" -1WHEN 15=>INDEX0<="00000001" -1WHEN 16=>INDEX0<="00010000" -5WHEN 17=>INDEX0<="00010000" -5WHEN 18=>INDEX0<="00001000" -4WHEN 19=>
32、;INDEX0<="00001000" -4WHEN 20=>INDEX0<="00001000" -4WHEN 21=>INDEX0<="00000100" -3WHEN 22=>INDEX0<="00000010" -2WHEN 23=>INDEX0<="00000010" -2WHEN 24=>INDEX0<="00010000" -5WHEN 25=>INDEX0<="000100
33、00" -5WHEN 26=>INDEX0<="00001000" -4WHEN 27=>INDEX0<="00001000" -4WHEN 28=>INDEX0<="00000100" -3WHEN 29=>INDEX0<="00000100" -3WHEN 30=>INDEX0<="00000010" -2WHEN 31=>INDEX0<="00000010" -2WHEN OTHERS =
34、>NULL;END CASE;ELSE INDEX0<=INDEX2; - 此进程完成自动演奏部分曲的地址累加 END IF;END PROCESS;END BEHAVIORAL;2、数控分频模块程序( FENPIN.VHD):LIBRARY IEEE;ENTITY FENPIN ISPORT(CLK1: IN STD_LOGIC; -定义系统时钟TONE1: IN INTEGER RANGE 0 TO 2047;- 定义音符分频系数,从 0 到 2047HzSPKS:OUT STD_LOGIC); -定义驱动扬声器的音频信号END ENTITY FENPIN;ARCHITECTU
35、RE ART OF FENPIN ISWord 资料.SIGNALPRECLK:STD_LOGIC;SIGNALFULLSPKS:STD_LOGIC;BEGINPROCESS(CLK1)VARIABLE COUNT:INTEGER RANGE 0 TO 8; -此进程对系统时钟进行 4 分频 BEGINIF (CLK1'EVENT AND CLK1='1')THENCOUNT:=COUNT +1;IF COUNT=2 THENPRECLK<='1'ELSIF COUNT =4 THENPRECLK<='0'COUNT:=0;E
36、ND IF ;END IF ;END PROCESS;PROCESS(PRECLK,TONE1) 此-进程按照 tone1 输入=分频系数对 8MHz的脉冲再次分频,得到所需要的音符频率 VARIABLE COUNT11:INTEGER RANGE 0 TO 2047;BEGINIF (PRECLK'EVENT AND PRECLK='1')THENIF COUNT11<TONE1 THENCOUNT11:=COUNT11+1;FULLSPKS<='1'ELSECOUNT11:=0;FULLSPKS<='0' - 此进程
37、对 FULLSPKS进行 2 分频END IF ;END IF ;END PROCESS;PROCESS(FULLSPKS)VARIABLE COUNT2 :STD_LOGIC:='0'BEGINIF (FULLSPKS'EVENT AND FULLSPKS='1')THENCOUNT2:=NOT COUNT2;IF COUNT2='1'THENSPKS<='1'ELSESPKS<='0'END IF ;END IF;END PROCESS;END ART;3、音调发生模块程序( TONE.VHD)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 会议管理制度
- 吉水县综合交通运输事业发展中心2026年面向社会公开招聘1名司机及1名系统操作员的备考题库及参考答案详解1套
- 2026年莆田市城厢法院招聘备考题库及一套参考答案详解
- 2026年长沙水业集团有限公司社会招聘备考题库含答案详解
- 2026年达州这家国企招聘备考题库完整答案详解
- 2026年浙江舟山群岛新区浙东化工科技产业有限公司招聘备考题库及一套参考答案详解
- 2026年黑河辰阳矿业投资开发有限公司招聘备考题库及一套参考答案详解
- 企业员工培训与职业发展目标路径素质制度
- 企业内部控制与合规制度
- 2026年黄山市歙州农文旅发展集团有限公司招聘8人备考题库及一套完整答案详解
- 四川省南充市2024-2025学年高二上学期1月期末考试化学试题
- 产前筛查档案管理制度
- 口腔科智齿培训
- 2025年pmp项目管理考试试题及答案
- 合同款转为借款协议
- 北京市2025年高二第二次普通高中学业水平合格性考试数学试卷+答案
- 2026 中考【初中道法时政热点】
- 2025年上半年山东高速集团有限公司校园招聘(255人)笔试参考题库附答案
- 胆管狭窄护理
- 消防操作员其他实操技能
- 2025年高考数学试题分类汇编:数列解析版
评论
0/150
提交评论