《EDA简易电子琴设计报告.docx》由会员分享,可在线阅读,更多相关《EDA简易电子琴设计报告.docx(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、EDA简易电子琴设计报告 ,、题目分析 1、分析要求,确定总体方框图 本设计基本部分是用VHDL语言设计一个简易的八音符电子琴,在Quartus II 平台下下载到Cyclone系列的EP1C12Q240C芯片中,该电路设计能够实现DO RE Ml、FA等八个音调的电子琴,发挥部分是设计一乐曲自动演奏器,用户自己编制乐曲存入电子琴,电子琴可以完成自动演奏。 电子琴音乐产生原理及硬件设计由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了。 根据系统设计要求,系统设计采用自顶向下的设计方法,系统的整体组装设计原理图如图1所
2、示,它由乐曲自动演奏模块AUTO音调发生模块TONE和数控分频模块FENPIN三部分组成。 图1系统的整体组装设计原理图 2、最终完成的技能指标 (1)设计一个简易的八音符电子琴,它可通过按键输入来控制音响。 (2)演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存入的乐曲 】、选择方案 通过可编程逻辑器件(PLD和VHDL硬件描述引言来实现电子琴的基本部分和发挥部分的设计。对于基本部分,设计的主体是数控分频器,对输入的频率进行分频,得 到各个音阶对应的频率最为输出。当按下不同的键时发出不同的声音。对于发挥部分,则在原设计的基础上,增加一个乐曲存储模块,代替了键盘输入,产生节拍控制(ind
3、ex数据存留时间)和音阶选择信号,即在此模块中可存放一一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。 方案一:由单片机来完成设计。可用单片机控制键盘的输入,以及产生相应的频率信号作为输出。目前,单片机的功能已比较强大,集成度日益增高且其设计和控制比较容易。但是由于在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路,如锁存器,译码器等都需要单独的电路,因此整个系统显得十分复杂,抗干扰性差,在运行过程中容易死机或进入死循环,可靠性降低,而功耗费用增高。 方案二:利用PLC来完成设计。目
4、前利用PLC的技术已经比较成熟。PLC有其优点,其性能优异,体积小,可靠性和精度都比较好,在电子琴的设计中可 采用PLC来完成硬件的控制,但是用PLC实现编程相对比较复杂,对于电子琴这种小型设计来说成本过高。 方案三:利用可编程逻辑器件PLD来完成该设计。利用PLD可以很好的解决上述的问题。它的成品体积小,适合电子琴这种小型设计。其性能稳定,控制精度高(Xili nx公司的高密度,高速可预测延时,高性能系列芯片),易于管理和屏蔽,抗干扰能力强,可靠性高。 综上,在本设计中选择第三种方案最优。 三、各模块原理及其程序 1、乐曲自动演奏模块 乐曲自动演奏模块(AUTO.VHD的作用是产生8位发声控
5、制输入信号/当进行自动演奏时,由存储在此模块中的8位二进制数作为发声控制输入,从而自动演奏乐曲。 为了实现扩展部分的设计,便需要多加上一个音乐存储模块,该模块的作用是产生8位发声控制输入index,auto为0或1时可以选择自动演奏或者键盘输入,如果auto为0,则而由存储在此模块中的8位二进制数来作为发声控制输入,由此便可自动演奏乐曲。此模块的VHDL语言中包括两个进程,首先是对基准脉冲进行分频得到4Hz 的脉冲,作为第二个进程的时钟信号,它的目的是控制每个音阶之间的停顿时间,此处便是1/4=0.25s,第二个进程是音乐的存储,可根据需要编写不同的乐曲。 这段模块的原理图如图2所示: CLK
6、 AUTO INDEX07.0 图2乐曲自动演奏模块原理图 乐曲自动演奏模块可以由VHDL语言来实现,下面是一段主要代码: BEGIN IF AUTO =0 THEN CASE COUNT0 IS WHEN 0=INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0INDEX0NU
7、LL; END CASE; ELSE INDEX0T0NE0 T0NE0 T0NE0 T0NE0 T0NE0 T0NE0 T0NE0 T0NE0 T0NE0=2047;C0DE=0000001;HIGH=0; END CASE; END PROCESS; 3、数控分频模块 在对EDA 的学习中,我们知道数控分频器的功能是在输入端输入不同数据 时,对输入时钟产生不同的分频比,输出不同频率的时钟,以改变输出信号的频 率。本设计中数控分频模块是利用并行预置数的减法计数器对时基脉冲进行分 频,得到与1、2、 TONE10.0 INDEX7.0 3、4、5、6 7七个音符相对应的频率。 该模块的VHDL
8、描述中包含了三个进程。首先对32MHZ勺基准脉冲进行分频得到8MHz的脉冲,然后按照ton el输入的分频系数对4MHZ勺脉冲再次分频,得到的便是所需要的频率。而第三个进程的作用是在音调输出时再进行二分频,将脉冲展宽,以使扬声器有足够功率发音。 这段模块的原理图如图4所示: CLK1 SPKS 图4数控分频模块原理图 数控分频模块可以由VHDL语言来实现,下面是一段主要代码: BEGIN PROCESS(CLK1) VARIABLE COUNT:INTEGER RANGE 0 TO 8; BEGIN IF (CLK1EVENT AND CLK1=1)THEN COUNT:=COUNT +1;
9、IF COUNT=2 THEN PRECLK=1; ELSIF COUNT =4 THEN PRECLK=O;COUNT:=O; END IF ; END IF ; END PROCESS; PROCESS(PRECLK,TONE1) VARIABLE COUNT11:INTEGER RANGE 0 TO 2047; BEGIN IF (PRECLKEVENT AND PRECLK=1)THEN IF COUNT11TONE1 THEN COUNT11:=COUNT11+1;FULLSPKS=1; ELSE COUNT11:=0;FULLSPKS=0; END IF ; END IF ; EN
10、D PROCESS; PROCESS(FULLSPKS) VARIABLE COUNT2 :STD_LOGIC:=0; BEGIN IF (FULLSPKSEVENT AND FULLSPKS=1)THEN COUNT2:=NOT COUNT2; IF COUNT2=1THEN SPKS=1; ELSE SPKS=0; END IF ; END IF; END PROCESS; 4、顶层设计 该DIANZIQIN 模块是整个电子琴设计的核心,也是 VHDL 程序的主程序,前 面3个源程序都是作为子程序分别实现电子琴的某一功能, 而DIANZIQIN 模块则 通过调用子程序最终实现乐曲演奏的目的
11、,奏出美妙的乐曲。利用 VHDL 语言 COMPONE 将三个模块组合起来,其中3个模块和DIANZIQIN 模块的输入输出是 一一对应的,该模块的符号编辑图如图 5。 :定加 图5顶层设计模块符号编辑图 四、编程下载测试 1、功能仿真 功能仿真用于综合前检查设计的逻辑功能是否符合设计要求。仿真过程中可 az : 以通过观察检测设计的输入信号,输出信号以及内部信号以检测设计的逻辑功 能。如果仿真都通过的话就可以进行引脚锁定, 然后下载程序,在实验箱上可以 直观的看到结果。 (1)乐曲自动演奏模块的仿真(如图6所示) SirvulcLiori IzriiThC 图6乐曲自动演奏模块的仿真 该图输入系统时钟信号CLK 初值设为0,自动演奏AUTO 设为1,键盘输入信 号INDEX2为00, INDEX0为音符信号输出,是8位的二进制代码它根据 COUNT0 的值改变而改变。 (2)音调发生模块的仿真(如图7) 图7音调发生模块的仿真 该图输入音符信号INDEX 初值为00,输出是音符显示信号COD 为01,高低 音显示信号为0,音符的分频系数为11111111即2047Hz ? Pqrteir 5tift Ms 氏斎 rineE er 21皿心 llelu? 1 12 ut (1% f Ho z A
限制150内