EDA简易电子琴设计报告

上传人:栀**** 文档编号:60214467 上传时间:2022-03-07 格式:DOC 页数:18 大小:630KB
返回 下载 相关 举报
EDA简易电子琴设计报告_第1页
第1页 / 共18页
EDA简易电子琴设计报告_第2页
第2页 / 共18页
EDA简易电子琴设计报告_第3页
第3页 / 共18页
点击查看更多>>
资源描述
.一、题目分析1、分析要求,确定总体方框图本设计基本部分是用VHDL语言设计一个简易的八音符电子琴,在 Quartus II 平台下下载到 Cyclone 系列的 EP1C12Q240C8芯片中,该电路设计能够实现 DO、 RE、MI、 FA等八个音调的电子琴,发挥部分是设计一乐曲自动演奏器,用户自己编制乐曲存入电子琴,电子琴可以完成自动演奏。电子琴音乐产生原理及硬件设计由于一首音乐是许多不同的音阶组成的, 而每个音阶对应着不同的频率, 这样我们就可以利用不同的频率的组合, 即可构成我们所想要的音乐了。根据系统设计要求, 系统设计采用自顶向下的设计方法, 系统的整体组装设计原理图如图 1 所示,它由乐曲自动演奏模块 AUTO、音调发生模块 TONE和数控分频模块 FENPIN三部分组成。图 1 系统的整体组装设计原理图2、最终完成的技能指标( 1)设计一个简易的八音符电子琴,它可通过按键输入来控制音响。( 2)演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存入的乐曲。二、选择方案通过可编程逻辑器件 ( PLD)和 VHDL硬件描述引言来实现电子琴的基本部分和发挥部分的设计。 对于基本部分, 设计的主体是数控分频器, 对输入的频率进行分频,得到各个音阶对应的频率最为输出。 当按下不同的键时发出不同的声音。Word 资料.对于发挥部分,则在原设计的基础上, 增加一个乐曲存储模块, 代替了键盘输入,产生节拍控制( index 数据存留时间)和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表, 由一个计数器来控制此真值表的输出, 而由此计数器的计数时钟信号作为乐曲节拍控制信号, 从而可以设计出一个纯硬件的乐曲自动演奏电路。方案一:由单片机来完成设计。 可用单片机控制键盘的输入, 以及产生相应的频率信号作为输出。 目前,单片机的功能已比较强大, 集成度日益增高且其设计和控制比较容易。 但是由于在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路, 如锁存器,译码器等都需要单独的电路, 因此整个系统显得十分复杂,抗干扰性差,在运行过程中容易死机或进入死循环, 可靠性降低,而功耗费用增高。方案二:利用 PLC来完成设计。目前利用 PLC的技术已经比较成熟。 PLC有其优点, 其性能优异,体积小,可靠性和精度都比较好,在电子琴的设计中可采用 PLC来完成硬件的控制, 但是用 PLC实现编程相对比较复杂, 对于电子琴这种小型设计来说成本过高。方案三:利用可编程逻辑器件PLD来完成该设计。 利用 PLD可以很好的解决上述的问题。它的成品体积小,适合电子琴这种小型设计。其性能稳定,控制精度高( Xilinx公司的高密度,高速可预测延时,高性能系列芯片),易于管理和屏蔽,抗干扰能力强,可靠性高。综上,在本设计中选择第三种方案最优。三、各模块原理及其程序1、乐曲自动演奏模块乐曲自动演奏模块( AUTO.VHD)的作用是产生 8 位发声控制输入信号 / 当进行自动演奏时, 由存储在此模块中的 8 位二进制数作为发声控制输入, 从而自动演奏乐曲。为了实现扩展部分的设计, 便需要多加上一个音乐存储模块, 该模块的作用是产生 8 位发声控制输入 index ,auto 为 0 或 1 时可以选择自动演奏或者键盘输入,如果 auto 为 0,则而由存储在此模块中的 8 位二进制数来作为发声控制输入,由此便可自动演奏乐曲。此模块的 VHDL语言中包括两个进程,首先是对基准脉冲进行分频得到 4Hz 的脉冲,作为第二个进程的时钟信号, 它的目的是控制每个音阶之间的停顿时间,此处便是 1/4=0.25s ,第二个进程是音乐的存储,可根据需要编写不同的乐曲。这段模块的原理图如图2 所示:Word 资料.CLKAUTOINDEX07.0图 2 乐曲自动演奏模块原理图乐曲自动演奏模块可以由 VHDL语言来实现,下面是一段主要代码:BEGINIF AUTO =0 THENCASE COUNT0 ISWHEN 0=INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0NULL;END CASE;ELSE INDEX0TONE0 =773;CODE=1001111;HIGHTONE0 =912;CODE=0010010;HIGHTONE0 =1036;CODE=0000110;HIGHTONE0 =1116;CODE=1001100;HIGHTONE0 =1197;CODE=0100100;HIGHTONE0 =1290;CODE=0100000;HIGHTONE0 =1372;CODE=0001111;HIGHTONE0 =1410;CODE=0000000;HIGHTONE0=2047;CODE=0000001;HIGH=0;END CASE;END PROCESS;Word 资料.3、数控分频模块在对 EDA 的学习中,我们知道数控分频器的功能是在输入端输入不同数据时,对输入时钟产生不同的分频比, 输出不同频率的时钟, 以改变输出信号的频率。本设计中数控分频模块是利用并行预置数的减法计数器对时基脉冲进行分频,得到与 1、2、3、4、5、6、7 七个音符相对应的频率。该模块的 VHDL描述中包含了三个进程。首先对 32MHz的基准脉冲进行分频得到 8MHz的脉冲,然后按照 tone1 输入的分频系数对 4MHz的脉冲再次分频, 得到的便是所需要的频率。 而第三个进程的作用是在音调输出时再进行二分频, 将脉冲展宽,以使扬声器有足够功率发音。这段模块的原理图如图4 所示:CLK1SPKS图 4 数控分频模块原理图数控分频模块可以由 VHDL语言来实现,下面是一段主要代码:BEGINPROCESS(CLK1)VARIABLE COUNT:INTEGER RANGE 0 TO 8;BEGINIF (CLK1EVENT 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 (PRECLKEVENT AND PRECLK=1)THENIF COUNT11TONE1 THENCOUNT11:=COUNT11+1;FULLSPKS=1;ELSECOUNT11:=0;FULLSPKS=0;END IF ;END IF ;Word 资料.END PROCESS;PROCESS(FULLSPKS)VARIABLE COUNT2 :STD_LOGIC:=0;BEGINIF (FULLSPKSEVENT AND FULLSPKS=1)THENCOUNT2:=NOT COUNT2;IF COUNT2=1THENSPKS=1;ELSESPKS=0;END IF ;END IF;END PROCESS;4、顶层设计该 DIANZIQIN模块是整个电子琴设计的核心,也是 VHDL程序的主程序,前面 3 个源程序都是作为子程序分别实现电子琴的某一功能, 而 DIANZIQIN 模块则通过调用子程序最终实现乐曲演奏的目的,奏出美妙的乐曲。利用 VHDL语言COMPONENT将三个模块组合起来, 其中 3 个模块和 DIANZIQIN模块的输入输出是一一对应的,该模块的符号编辑图如图 5。图 5 顶层设计模块符号编辑图四、编程下载测试1、功能仿真功能仿真用于综合前检查设计的逻辑功能是否符合设计要求。 仿真过程中可以通过观察检测设计的输入信号,输出信号以及内部信号以检测设计的逻辑功Word 资料.能。如果仿真都通过的话就可以进行引脚锁定, 然后下载程序, 在实验箱上可以直观的看到结果。( 1)乐曲自动演奏模块的仿真(如图6 所示)图 6 乐曲自动演奏模块的仿真该图输入系统时钟信号CLK初值设为 0,自动演奏 AUTO设为 1,键盘输入信号 INDEX2为 00, INDEX0为音符信号输出,是 8 位的二进制代码它根据 COUNT0 的值改变而改变。( 2)音调发生模块的仿真(如图7)图 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初值为 0,键盘输入信号 INDEX1为 00000000;输出音符信号 CODE1则为 0110000,高低音节信号 HIGH1变为 1,即高音,音频信号 SPKOUT即输出 0,输出为 1 时 CODE1 变为 0110100。Word 资料.2、锁定引脚:图 10 引脚锁定3、硬件测试结果选择模式 3, PIO31 控制是否自动播放预置歌曲或手动键入歌曲,可通过按键 18 演奏歌曲。五、课程总结在整个设计过程中, 我通过查阅大量有关资料, 与同学交流经验和自学, 并向老师请教等方式, 使自己学到了不少知识, 也经历了不少艰辛, 但收获同样巨Word 资料.大。在整个设计中我懂得了许多东西, 也培养了我独立工作的能力, 树立了对自己工作能力的信心, 相信会对今后的学习工作生活有非常重要的影响。 同时大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好, 功能并没有完全实现, 但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。通过这次 VHDL课程设计,不仅增强了我们的实践动手能力,也让我们对课堂上所学到的理论知识的理解加深了许多, 这给我们提供了一个在学习生活中很难得的理论联系实际的机会。 能够借此机会了解到部分 EDA技术的知识和学习运用其中一种硬件描述语言 VHDL编程实现各种常用器件的功能,这是在任何课堂上都得不到的一笔财富。另一方面我们也发现了在平时学习过程中难于发现的许多缺点跟不足。 比如实践机会过少, 所学的理论知识不能灵活运用, 在遇到实际的问题时无法正确处理;再者在课堂上获得的专业知识过于浅显, 很多的有关基本操作原理、 操作方法都理解不了; 课外知识了解的也过少, 导致在课程设计初期, 面对完全陌生的设计课题无从下手, 不知所措。这就提醒我们在平时的学习生活中不能一味埋头于面前的课本知识, 毕竟当今社会竞争越发激烈, 而学校能教授的东西有限, 要想在人才市场中脱颖而出就只能靠我们自己。 当然,在学习之余我们更应该积极参加各种有关专业知识的实践活动和比赛, 巩固所学理论, 多注意培养初步的实际工作能力和专业技术能力,这样在以后的工作岗位上不会显得那么仓促与生疏。六、参考文献目录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;-系统时钟;键盘输入 / 自动演奏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的分频,得到 4Hz 的信号 clk2VARIABLE COUNT :INTEGER RANGE 0 TO 8;- 定义计数器变量,值从 0 到 8BEGINIF AUTO =1 THEN -键盘输入为 1COUNT := 0;CLK2=0; -计数器值指 0,时钟信号为 0ELSIF(CLKEVENT AND CLK =1)THEN - 时钟输入信号为 1COUNT :=COUNT +1; -计数器加 1IF COUNT =4 THENCLK2 =1;ELSIF COUNT =8 THENCLK2=0; COUNT:=0;END IF ;END IF ;END PROCESS;MUSIC:PROCESS(CLK2)-此进程完成自动演奏部分曲的地址累加BEGINIF (CLK2EVENT AND CLK2=1)THENIF (COUNT0=31)THENCOUNT0=0;ELSECOUNT0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0NULL;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;ARCHITECTURE ART OF FENPIN ISWord 资料.SIGNALPRECLK:STD_LOGIC;SIGNALFULLSPKS:STD_LOGIC;BEGINPROCESS(CLK1)VARIABLE COUNT:INTEGER RANGE 0 TO 8; -此进程对系统时钟进行 4 分频 BEGINIF (CLK1EVENT 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) 此-进程按照 tone1 输入=分频系数对 8MHz的脉冲再次分频,得到所需要的音符频率 VARIABLE COUNT11:INTEGER RANGE 0 TO 2047;BEGINIF (PRECLKEVENT AND PRECLK=1)THENIF COUNT11TONE1 THENCOUNT11:=COUNT11+1;FULLSPKS=1;ELSECOUNT11:=0;FULLSPKS=0; - 此进程对 FULLSPKS进行 2 分频END IF ;END IF ;END PROCESS;PROCESS(FULLSPKS)VARIABLE COUNT2 :STD_LOGIC:=0;BEGINIF (FULLSPKSEVENT AND FULLSPKS=1)THENCOUNT2:=NOT COUNT2;IF COUNT2=1THENSPKS=1;ELSESPKSTONE0 =773;CODE=1001111;HIGHTONE0 =912;CODE=0010010;HIGHTONE0 =1036;CODE=0000110;HIGHTONE0 =1116;CODE=1001100;HIGHTONE0 =1197;CODE=0100100;HIGHTONE0 =1290;CODE=0100000;HIGHTONE0 =1372;CODE=0001111;HIGHTONE0 =1410;CODE=0000000;HIGHTONE0=2047;CODE=0000001;HIGH=0;END CASE; END PROCESS;END ART;Word 资料
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿件


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!