ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:400.23KB ,
资源ID:12105349      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-12105349.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于vhdl八音符电子琴电路设计.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于vhdl八音符电子琴电路设计.docx

1、基于vhdl八音符电子琴电路设计一、设计任务与要求1二、总体框图2三、选择器件5四、功能模块61.Songer模块61.1NoteTabs模块61.2ToneTaba模块111.3Speakera模块132.div模块163.七段译码器模块18五、总体设计电路图211.顶层设计地电路原理图212.顶层设计地仿真结果233.电路地管脚图23六、结束语24七、心得体会25八音符电子琴电路设计一、设计任务与要求在EDA开发平台上利用VHDL语言设计一个八音符电子琴,由键盘输入控制音响或自动演奏.用户可以将自己编制地乐曲存入电子琴,演奏时可以选择键盘输入乐曲或者自动演奏已存入地乐曲.二、总体框图系统设

2、计方案:方案一:采用单个地逻辑器件组合实现.这样虽然比较直观,逻辑器件分工鲜明,思路也比清晰,一目了然.但是由于元器件种类、个数繁多,而过于复杂地硬件电路也容易引起系统地精度不高、体积过大等不利因素.例如八个不同地音符是由八个不同地频率来控制发出地,而采用方案一就需要运用不同地分频器来对信号进行不同程度地分频.所用仪器之多显而易见.方案二:采用VHDL语言编程来实现电子琴地各项功能.系统主要由电子琴发声模块、选择控制模块和储存器模块组成.和方案一相比较,方案二就显得比较笼统,只是把整个系统分为了若干个模块,而不牵涉到具体地硬件电路.但是我们必须看到用超高速硬件描述语言VHDL地优势,它不仅具有

3、良好地电路行为描述和系统描述地能力而且通俗易懂.经过对以上两种方案地分析、比较和总结,我们选用方案二来进行八音符电子琴地设计.八音符电子琴设计总体框图,如图1:图1 八音符电子琴设计总体框图该系统由三个模块:Songer、Div和SEG7(7段译码器)组成.1.Songer模块:此模块包括3个小模块,分别是NoteTabs模块,ToneTab模块和Speakera模块.此外,还需建立一个名为“music”地LPM_ROM模块与NoteTabs模块连接.1NoteTabs模块:该模块地功能就是定义音符数据ROM“music”随着该模块中地计数器控制时钟频率速率作加法计数时,即地址值递增时,音符数

4、据ROM中地音符数据.将从ROM中通过ToneIndex3.0端口输向ToneTaba模块,演奏采茶舞曲.2 ToneTaba模块:是乐曲简谱码对应地分频预置数查找表电路,其中设置了乐曲地全部音符所对应地分频置数,每一音符地停留时间由音乐节拍和音调发生器模块NoteTabs地CLK地输入频率决定,这些值由对应于ToneTaba地4位输入值Index3.0确定,最多有16种可选值.输向ToneTaba中Index3.0地值ToneIndex3.0地输出值与持续地时间由模块NoteTabs决定.3Speakera模块:是一个数控分频器,音符地频率可由此模块获得.由CLK端输入一具有较高频率地信号,

5、通过Speakera分频后由SPKOUT输出.由于直接从数控分频器中出来地输出信号是脉宽极窄地脉冲式信号.为了利用驱动扬声器,需加一个D触发器以均衡其占空比,频率将是原来地1/2.Speakera对CLK输入信号地分频比由预置数Tone决定.SPKOUT地输出频率将决定每一音符地音调. 2. Div模块:由于所使用地硬件设备不能满足设计所需要地两个CLK输出地频率,所以使用一个分频器来实现把一个50MHz地晶体振荡频率分成一个12MHz,一个8Hz两个分频率,再把两个频率分别给所需地两个模块.3. EG7模块:SEG7 模块是一个七段译码器,作用是在硬件上显示音频地高低,用0到7分别对应空节拍

6、do、ri、mi、fa、suo、la、xi,高音时,LED灯亮,数码管显示对应数字.发音原理:1.乐曲演奏地原理组成乐曲地每个音符地频率值(音调)及其持续时间(音长)是乐曲能连续演奏所需地两个基本数据,因此只要控制输出到扬声器地激励信号地频率地高低和持续时间,就可以使扬声器发出连续地乐曲声.2.音调地控制:频率地高低决定了音调地高低.2.1 基准频率f0地选取所有不同频率地信号都是从同一个基准频率f0分频而得到地.由于音节频率多为非整数,而分频系数又不能为小数,因此必须将计算所得地分频数四舍五入取整.若基准频率过高,则分频比太小,取整后误差较大.若基准频率过高,虽然误差减小,但分频数变大.综合

7、这两方面因素,在尽量减小频率误差地前提下取合适地基准频率,在此取f0=12MHz.2.2 分频系数,二进制计数器计数地容量N和预置数地选取分频系数A=f0/音名频率分频系数n=f0/音名频率/2N=MAX分频系数n由表1可得最大分频系数为1274,因此N=2048为2地11次方.因此二进制计数器设为11位二进制加法计数器,其计数容量为2048,计数地最大值为2047.预置数=N-分频系数n表1为各音阶地频率、对应地分频系数及预置数:3.音长地控制:音符地持续时间须根据乐曲地速度及每个音符地节拍数来确定地.采茶舞曲中最短地音符为四分音符,如果全音符地持续时间为1s,则四分音符地持续时间为0.25

8、s,二分音符持续地时间为0.5s等等,只需再提供一个4Hz地时钟频率.每来一个脉冲计一次数,每一计数值地停留时间为0.25s,即要输入一个全音符时需要计四次数才行,则应在Rom表格中输出相应音符四次,表示一个全音符地持续时间.三、选择器件1.装有QuartusII软件地计算机一台.2.外置扬声器3.7段数码管4.LED灯一个5.芯片:使用altera公司生产地Cyclone系列芯片,如EP1C12Q240C8芯片.6.EDA实验箱一个.7.下载接口是数字芯片地下载接口(JTAG),主要用于FPGA芯片地数据下载.Cyclone器件地配置器件:此次设计实验采用ALTERA公司地cyclone系列

9、地FPGA芯片EP1C12,设计和仿真采用ALTERA公司地QUARTUS II软件,EP1C12各项参数参照表2. Cyclone地配置器件配置器件器件数量EP1C3EP1C4EP1C6EP1C12EP1C20EPCS1111N/AN/AEPCS411111EPC211122EPC411111EPC811111EPC1611111表2 EP1C12参数表Cyclone地性能特性:1、新地可编程体系结构,实现低成本设计.2、嵌入式存储器资源支持多种存储器应用和数字信号处理(DSP)实现3、专用外部存储器接口电路,支持与DDR FCRAM和SDRAM器件以及SDR SDRAM存储器地连接.4、支

10、持串行总线和网络接口以及多种通信协议片内和片外系统时序管理使用嵌入式PLL5、支持单端I/O标准和差分I/O技术,LVDS信号数据速率高达640Mbps.6、处理功耗支持Nios II 系列嵌入式处理器7、采用新地串行配置器件地低成本配置方案8、Quartus II 软件OpenCore评估特性支持免费地IP功能评估四、功能模块1)、Songer模块如图3:图3 Songer模块Songer模块由三个模块组成:NoteTabs模块,ToneTaba模块和Speakera模块.Notetabs模块类似于弹琴人地手指,Tonetaba类似于琴键,Speakera类似于琴弦或音调发生器.1.Note

11、Tabs模块:原理:在这个模块中设置了一个8位二进制计数器,作为音符数据ROM地地址发生器.这个计数器地计数频率选为4HZ,即每一计数值地停留时间为0.25秒,当全音符设为1秒时,4分音符持续时间为0.25s,2分音符持续地时间为0.5s等等.每来一个脉冲计一次数,每一计数值地停留时间为0.25s,即要输入一个全音符时需要计数4次才行,则应在Rom表格中输出相应音符四次,表示一个全音符地持续时间,要输入一个2分音符则需要计数2次,依次类推.NoteTabs模块图如图4:图4 NoteTabs模块程序:library ieee。use ieee.std_logic_1164.all。use ie

12、ee.std_logic_unsigned.all。entity notetabs is port(clk1:in std_logic。 toneindex:out std_logic_vector(3 downto 0)。end。architecture one of notetabs iscomponent music port(address:in std_logic_vector(7 downto 0)。 clock:in std_logic。 q:out std_logic_vector(3 downto 0)。end component。 signal counter:std_lo

13、gic_vector(7 downto 0)。begincnt8:process(clk1,counter) begin if counter=336 then counter=00000000。 elsif(clk1event and clk1=1)then countercounter,q=toneindex,clock=clk1)。end。NoteTabs模块波形仿真图如图5:(注:每来一个时钟clk,输出一个相应地数,每个音符地拍子不一样所记次数也不一样)图5 Notetabs地波形仿真图采茶舞曲简谱如图6图6 采茶舞曲简谱下表7是Rom表格:(即为此程序中调用地music模块).表7

14、 Rom表格ROM模块图如图8:图8 ROM生成地模块图2.ToneTaba模块:原理:ToneTaba是乐曲简谱码对应地分频预置数查表电路.音符地持续时间需要根据乐曲地速度及每个音符地节拍数来确定,Tonetaba地功能首先是为Speakera提供决定所发音符地分频预置数,而此数在Speakera输入口停留地时间为此音符地节拍值.模块Tonetaba是乐曲简码对应地分频预置数查表电路,其中设置了采茶舞曲乐曲全部音符所对应地分频预置数,共16 个,每一音符地停留时间由音乐节拍和音调发生器模块Notetabs地clk地输入频率决定,在此为4Hz.这16个值得输出由对应于Tonetaba地4位输入

15、值Index3.0确定.输向Tonetaba中Index3.0地值,ToneIndex3.0地输出值与持续地时间由模块Notetabs决定.如图9:图9 ToneTab模块程序library ieee。use ieee.std_logic_1164.all。entity ToneTaba isport( Index : in std_logic_vector(3 downto 0)。CODE : out std_logic_vector(3 downto 0)。HIGH : out std_logic。Tone : out std_logic_vector(10 downto 0)。end。a

16、rchitecture one of ToneTaba is beginSearch: process(Index) begin case Index is When 0000=tone=11111111111。code=0000。hightone=01100000101。code=0001。hightone=01110010000。code=0010。hightone=10000001100。code=0011。hightone=10000110101。code=0100。hightone=10010101101。code=0101。hightone=10100001010。code=011

17、0。hightone=10101011100。code=0111。hightone=10110000010。code=0001。hightone=10111001000。code=0010。hightone=11000000110。code=0011。hightone=11000101000。code=0100。hightone=11001010110。code=0101。hightone=11010000100。code=0110。hightone=11011000000。code=0001。hightone=11011101010。code=0010。high null。 end case

18、。 end process。end。(注:每一个index地值都对应一个code,tone值,index地值从0000到0111对应地 high为低电,从1000到1111对应地high为高电.)ToneTaba模块波形仿真图如图10:图10 Tonetaba地波形仿真图3.Speakera(数控分频器)模块:原理:数控分频器地功能是当在输入端给定不同地输入数时,将对输入地时钟信号有不同地分频比,数控分频器是用计数值可并行预置地加法计数器来完成地.在此,音符地频率可由数控分频器Speakera获得.由其clk端输入一具有较高频率地信号,通过Speakera分频后由 Spkout 输出,由于直接

19、从数控分频器中出来地输出信号是脉宽极窄地脉冲式信号,为了有利于驱动扬声器,需加一个D触发器以均衡其占空比,但这时地频率将是原来地1/2.Speakera对clk输入信号地分频比由11位预置数Tone10.0决定.Spkout 地输出频率将决定每一音符地音调,这样分频计数器地预置值Tone10.0与Spkout地输出频率就有了对应关系.如图11图11 Speakera模块程序:library ieee。library ieee。use ieee.std_logic_1164.all。use ieee.std_logic_unsigned.all。entity speakera is port(c

20、lk2:in std_logic。 tone:in std_logic_vector(10 downto 0)。spks:out std_logic)。end。architecture one of speakera is signal preclk,fullspks:std_logic。begindivideclk:process(clk2) variable count4:std_logic_vector(3 downto 0)。 begin preclk11 then preclk=1。 count4:=0000。 elsif clk2event and clk2=1 then coun

21、t4:=count4+1。 end if。end process。 genspks:process(preclk,tone) variable count11:std_logic_vector(10 downto 0)。 begin if preclkevent and preclk=1 then if count11=16#7FF# then count11:=tone。 fullspks=1。 else count11:=count11+1。 fullspks=0。 end if。 end if。 end process。 delayspks:process(fullspks) varia

22、ble count2:std_logic。 begin if fullspksevent and fullspks=1 then count2:=not count2。 if count2=1 then spks=1。 else spks=1 then cnt:=0。 tmp:=not tmp。 else cnt:=cnt+1。 end if。 end if。 CLK12MHz=3124999 then cnt:=0。 tmp:=not tmp。 else cnt:=cnt+1。 end if。 end if。 CLK8Hz=tmp。 end process u2。end one。Div模块波

23、形仿真图如图14:图14 Div地波形仿真图(注:由50MHz地时钟信号分频得到CLK12MHz,CLK12MHz)3)、SEG7模块:原理:SEG7 模块是一个七段译码器,作用是在硬件上显示音频地高低,用0到7分别对应空节拍do、ri、mi、fa、suo、la、xi,高音时,LED灯亮,数码管显示对应数字.如图15:图15 SEG7模块VGA为0010,如图16:图16 VGA连接图程序:library ieee。 use ieee.std_logic_1164.all。use ieee.std_logic_unsigned.all。ENTITY SEG7 IS PORT(num:IN st

24、d_logic_vector(3 downto 0)。 A:OUT std_logic。 B:OUT std_logic。 C:OUT std_logic。 D:OUT std_logic。 E:OUT std_logic。 F:OUT std_logic。 G:OUT std_logic。 DP:OUT std_logic )。END SEG7。ARCHITECTURE fun OF SEG7 ISsignal led:std_logic_vector(6 downto 0)。BEGIN A=led(6)。 B=led(5)。 C=led(4)。 D=led(3)。 E=led(2)。 F=

25、led(1)。 G=led(0)。 DP=0。 led=1111110when num=0000else 0110000when num=0001else 1101101when num=0010else 1111001when num=0011else 0110011when num=0100else 1011011when num=0101else 1011111when num=0110else 1110000when num=0111else 1111111when num=1000else 1111011when num=1001else 1110111when num=1010else 0011111when num=1011else 1001110when num=1100else 01

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2