电子琴实验报告(基于乐曲《梁祝》)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1武夷学院实验报告课程名称:逻辑设计与FPGA项目名称:乐曲硬件演奏电路设计姓名:朱文卓专业:微电子学班级:14微电子学号:04实验日期一、实验预习部分:1.实验目的:学习利用数控分频器设计硬件乐曲演奏电路。2.实验原理:综合利用数控分频器、LPM_ROM、PLL等单元电路设计硬件乐曲演奏电路。系统框图如图1所示由三个模块组成,分别为NOTETABS、TONETABA、SPEAKERA。图1硬件乐曲演奏电路结构框图NOTETABS模块(把教材图9-4中的CNT138T和MUSIC模块合在一起即为此模块)类似于弹琴人的手指;TONETABA模块类似于琴键;SPEAKERA类似于琴弦或音调发生器。音符的频率由SPEAKERA模块(与教材图9-4中的SPKER模块对应)获得,这是一个数控分频器。由其CLK端输入一具有较高频率(12MHZ)的信号,通过SPEAKERA分频后由SPKOUT输出。SPEAKERA对CLK输入信号的分频比由11位预置数TONE[10..0]决定。SPKOUT的输出频率将决定每一音符的音调,这样,分频计数器的预置值TONE[10..0]与SPKOUT的输出频率就有了对应关系。例如在TONETABA模块(与教材图9-4中的F_CODE模块对应)中若取TONE[10..0]=1036,将发出音符“3”音的信号频率。2实验预习成绩(百分制)实验指导教师签字:音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,TONETABA模块的功能首先是为SPEAKERA提供决定所发音符的分频预置数,而此数在SPEAKERA输入口停留的时间即为此音符的节拍值。TONETABA模块是乐曲简谱码对应的分频预置数查表电路,其中需设置“梁祝”乐曲全部音符所对应的分频预置数,共13个,每一音符的停留时间由音乐节拍和音调发生器模块NOTATABS的CLK的输入频率决定,在此为4HZ。这13个值的输出由对应于TONETABA的4位输入值INDEX[3..0]确定。在NOTETABS中设置了一个8位二进制计数器(计数最大值为138),作为音符数据ROM的地址发生器。这个计数器的计数频率选为4HZ,即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。例如,“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间,相应地,所对应的“3”音符分频预置值为1036,在SPEAKERA的输入端停留了1秒。随着NOTETABS中的计数器按4HZ的时钟频率作加法计数时,即随地址递增时,音符数据ROM中的音符数据将从ROM通过TONEINDEX[3..0]端口输向TONETABA模块,乐曲就开始连续自然地演奏起来了。具体参考教材实验9-1中说明。3.实验仪器:PC机1台QuartusII系统开发板1块开发板外接扬声器4.实验步骤及方法:分模块设计和仿真测试,通过后联合仿真测试,最后下载到硬件中测试。5.注意事项:所有实验数据放入一个文件夹内,并且不要把文件夹放在系统盘上,实验结束后备份好实验数据,以备教师随时查阅。3二、实验过程记录部分:1.实验过程记录:1.1输入信号锁相环PLL0调节:图2.1锁相环管脚clk_50m(设置为B12)接入FPGA内部的50mhz的时钟信号,C0口为得到数控分屏器模块的输入时钟750KHZ,将分频比设置为1/67,即50000000HZ/67=74.6K约等于75K;c1口为2KHZ(配合下级的500分频模块),设置为:c1=50000000HZ/25000=2KHZ。1.2500分频模块count500(即500进制的计数器):图2.2分频电路程序设计如图2.2,因为梁祝歌曲只用低音和中音来演奏,为1/4拍,即四分之一拍,每个音符持续0.25秒的时间。因为前级电路已经实现了从50MHZ到2KHZ的转换,要得到4HZ的频率,则用500进制的计数器(0到499的计数)产生的进位信号对2KHZ实现500分频(输出波形分析见后)。41.3乐曲长度控制计数器cnt138设计:图2.3乐曲长度控制计数器程序及元件图经查阅《EDA技术实用教程(第五版)》可知,《梁祝》这首歌曲总共有139个音符,其中包含末尾的3个休止符。如图2.3,因此为了产生这139音符,因此想到开发一个139进制的计数器(计数值:0到138),实现用139状态代表139个音符。又因为要配合下一级音符谱码存储模块的输入(ROM的输入一般为偶数位),因此将原本用7路线就可以表示完成的输出端cnt8增加一位线宽。注:在本程序中,输出端cnt8由于定义成integer整型,在Quartus中被自动分配成了7根;也可以定义成vector型,而此时需要注意配合下级电路的权位最好写成cnt8:outstd_logic_vector(7downto0).1.4音符谱码存储模块设计构建:1.4.1ROM的设置:图2.4音符谱码存储模块ROM5音符谱码存储模的主体构想,是为了让前级模块所产生的139个状态与实际音符(DoReMiFaSoLaSi)构成映射。因此需要构建一个包含《梁祝》乐谱的mif文件。1.4.2构建《梁祝》乐谱.mif文件:图2.5《梁祝》乐谱(部分截取)因此综上所述,结合1.3的分析,音符谱码存储ROM,即输入为8位数据线,含256bit数据(实际只用了139bit);输出为4根线,这是由于《梁祝》这首歌曲只有低音的123567,以及中音的12356合高音部分的1,加上休止符一共13个状态,因此用4根数据线完全足够。出于简化电路设计原则以及综合考虑电路测试的难易程度,我将高音部分的1当做中音的7来处理,将13个状态音符分为低音音符,中音音符和休止符;这样的好处是:在测试时候,只需用一个LED的亮灭并结合七段数码管来具体表示播放的音符,此时若灯亮且七段数码管显示为“7”,实际代表输出为高音的“Do”。注:在以下的段落中,若出现“中音”,则用以表示“中音”的1235和“高音”的1.61.5分频预置查表电路f_code构建:图2.6f_code模块代码及原理图由前级电路可知,从mscicsionROM模块的输出端q输出了13个音符(13个状态),而扬声器发出声音的实质是通过播放不同的声音频率实现的,而要实现将统一的频率分为不同的频率则必须引入实现分频功能的模块,由《数字电子技术基础(第五版)》的“时序电路章节”知识可知:普通的实现分频功能的计数器实现分频的原理是当计数值达到计数器最大模值N时,跳转到“预置数M”,因此可以实现“N-M+1”分频的功能;由此,我想到,如果将原本固定的“预置数”端,用一个模块代替,进而产生可以随需求变化而变化的预置数,这样就可以实现对不同音符频率的分频功能。因此,本级模块最主要功能是将已有音符映射成对应的预置数。因为下级模块“数控分频器”的最大计数值为11位2进制数,因此本级模块的输出TOO也为11位线宽。因为下级模块数控分频器的最大计数值为2047,预置数为NT,计数模值为2047-NT+1=2048-NT,如NT=912,那么计数模值(分频系数)为2047-912=1135,因此将十进制的912改为十一位二进制的01110010000,赋值给TOO端(如图2.6),作为输出。同时CODE端输出对应的音符(1到7),送至下级电路“谱码指示模块”;同时为了区别输出的音符为“低音”的(1到7)还是“中音”的(1到7),因此定义输出端口H,并接到FPGA的一个LED,若灯不亮则表示为“低音”,若点亮则表示“高音”,再配合谱码指示模块中的“七段数码管”上显示的数值进而显示具体的音符。71.6数控分频器模块spker设计:图2.7数控分频器模块spker代码及原理图如图2.7,该模块主要作用是将预置数通过计数器与对应音符的频率构成映射。由于数控分频器所给的的输入时钟为750KHZ。由之前的分析,数控分频器的最大计数值为11位2进制数,即2^11=2047,逢2047后预置NT,为加法计数,输出为进位信号,进位信号总是取最大状态2047的译码。不妨取1.5的假设,当NT=912时,计数模值:2047-912=1135,数控分频器输出频率为750KHZ/1135=660HZ,再由下级电路模块对数控分频输出进行2分频,则输出频率为660HZ/2=330HZ,对应为低音的2(Re)。(其余见附录一)即,对应总公式:fo=[750KHZ/(2048-TN)]/2其中,f0为音符频率;TN即(TOO)为预置数。81.7谱码指示模块的设计:1.7.1七段数码管译码转换模块的设置:图2.8七段数码管译码转换模块代码及原理图如图13所示T’触发器由D触发器加非门电路组成,构成一个二分频电路,由于直接从数控分频器出来的信号是脉宽极窄的信号,为了有利于驱动扬声器而添加此电路。由1.5分析可知,f_code模块代的输出端CODE为4根线,而查阅PFGA开发板手册可知七段数码管的引脚有8个(包含一个小数点)。因此,若想在数码管上显示对应的音符,必须开发一个模块,将4位二进制数(13个状态音符)用七位二进制数表示,对应7个输出端。(因为本实验中用不到小数点,所以只考虑用数码管显示数值部分的7段LED)91.7.2七段数码管的设置:图2.9谱码指示模块总原理图如图2.9,因为译码电路属于组合电路,属于异步,不受CLK控制,所以本级模块不设CLK端。结合(附录二)由于FPGA的七段数码管是共阳极接法,所以输出为0则点亮,例如音符“0001”,对应输出“1111001”。1.8二分频模块的设计:图2.10二分频模块原理图由1.6可知,承接数控分频器模块的输出频率,为输出真正的音符频率,还需要一个二分频模块实现,直接调用D触发器,外接非门构成T’触发器,实现二分频功能。此外由于从数控分频器输出的某些音符的频率的占空比很小,如果不加本模块,会出现音符出现的声音非常短暂的情况,因此,本模块还起到提高占空比50%,进而提升功率的作用。102.实验现象及原始数据记录:2.1设计电路总图:图2.11总原理图2.2开发板管脚设置图:图2.12全体管脚映射图11实验操作成绩(百分制)__________实验指导教师签字:__________附录一附录二12三、实验结果与讨论:1.数据处理及实验结果分析:1.1实物图:图3.1实物图1.2500分频模块波形仿真图:图3.2500分频模块波形13由图3.2可见,计数器计数值从0到499,到达计数最大模值499时进位输出pm端由低电平转入高电平,即500进制实现500分频。1.3cnt138模块波形仿真图:图3.3138模块波形由图3.3,计数器从0计数到138,一共139个不同输出状态,从cnt8端输出。2.实验改进、心得体会及思考题:2.1实验心得体会:这次实验自己非常重视,花了很多时间,收获了很多。自己对模块化设计电路有了更深,更直观的感受。此外对用计数器来实现分频功能有了深刻的理解;在开发过程中也遇到了一系列的问题,例如在对“数控分频器”的VHDL代码编写中,开始不懂得signal和variable的区别,用前者时,信号在进程结束后才被改变,因此与所需音符状态无法及时对应;而后,我又发现如果在同一个进程中反复对variable所定义的变量进行赋值的话,软件只会把最后一次赋值的值赋给“变量”。诸如此类的不再一一赘述,希望日后继续努力。14实验报告成绩(百分制)实验指导教师签字:日期:2.2实验思考题:1.教材图9-4中由D触发器INST1和非门INST2构成的2分频电路对扬声器发声有什么影响?答:该电路模块实现对前级输出频率的二分频,让输出音符的频率全部处于人耳朵的听觉范围内。同时还起到提高占空比至50%,进而提升功率的作用。2.在电路上应该满足哪些条件,才能用数字器件直接输出的方波驱动扬声器发声?答:(1):输出频率要在扬声器工作范围内;(2):输出的电流要能驱动扬声器的正常工作。

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功