欢迎来到天天文库
浏览记录
ID:61426865
大小:366.50 KB
页数:13页
时间:2021-01-29
《硬件电子琴电路模块设计.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、西南科技大学实验报告课程名称:基于FPGA的现代数字系统设计实验名称:硬件电子琴电路模块设计姓名:陈岑学号:班级:电子1201指导教师:刘桂华西南科技大学信息工程学院制硬件电子琴电路模块设计一、实验原理一、节拍1、在音乐中,时间被分成均等的基本单位,每个单位叫做一个“拍子”或称一拍。2、拍子的时值是以音符的时值来表示的,一拍的时值可以是四分音符(即以四分音符为一拍),也可以是二分音符(以二分音符为一拍)或八分音符(以八分音符为一拍)。例2/4,3/4等任务分析:3、拍子的时值是一个相对的时间概念比如当乐曲的规定速度为每分
2、钟60拍时,每拍占用的时间是一秒,半拍是二分之一秒;当规定速度为每分钟120拍时,每拍的时间是半秒,半拍就是四分之一秒。在本次实验中,最小的节拍是1/4拍,规定速度是每拍1秒。可以得到,在我们把音符按照以1/4拍为单位存放到ROM里,而后以4HZ频率读取,则可以实现乐曲的节拍。二、音符与频率乐曲中不同的音符实质上表示的是不同频率的声音。 只要产生不同频率的脉冲,再通过喇叭等播放出来即可。又由于方波容易用定时器产生,故使用方波脉冲。要产生音频脉冲:1、算出某一音频的脉冲的周期(1/频率)2、然后将此周期除以2,即为半周期的
3、时间。3、利用定时器,计时这个半周期的时间,每当计时到后,就将输出脉冲的I/O反相。4、重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。例如,频率为523Hz,其周期为1/523 S=1912uS,因此只要令计数器计时956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。其计数值N可以根据以下公式得到:2N=Tr/Ti=Fi/Fr (Fi为内部时钟频率,Fr为对应音符频率)(Ti为内部时钟周期,Tr为对应音符周期)1、可以得到:如果以1MHZ为内部时钟频率,要发出低7SI音
4、(494HZ),我们需要计数2024个1MHZ时钟周期,其中,当计数到2024/2=1012个时钟时,将脉冲翻转一次。1、结合前述的节拍,如果要发出低7SI音1拍,则只要持续494HZ方波1秒钟即可,如果按1/4拍单位存放到ROM里,ROM的读出时钟是4HZ,那低7SI音应该装载几个存储单元?本实验用FP分四步1、将待播放的《梁祝》音乐音符存入ROM2、以4HZ频率读取ROM3、根据1MHZ的内部时钟要求,将读出的音符换算成应计数的数值4、以1MHZ为内部时钟,实现符合要求的方波信号。GA实现乐曲的播放原理。硬件电子琴电
5、路设计方案模块Speaker模块Speakera中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块Speakera由端口Tone获得一个2进制数后,将以此值为计数器的预置数,对端口Clk12MHZ输入的频率进行分频,之后由Spkout向扬声器输出发声。模块TONE模块Tone是音阶发生器,当8位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code输出对应该音阶简谱的显示数码,如‘5’,并由High输出指示音阶高8度显示。增加乐
6、曲自动演奏电路在原设计的基础上,增加一个Notetabs模块用于产生节拍控制(Index数据存留时间)和音阶选择信号,即在Notetabs模块放置一个乐曲曲谱真值表,乐曲曲谱真值表放置于名为Music的ROM模块中。由一个计数器来生成读取ROM所需的地址数据,对ROM以4HZ的频率进行读取,实现控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。需要说明:由于实验板上,只有50MHZ有源晶振,故将用50MHZ进行分频实现12.5MHZ的时钟,在后续模块Speak
7、era.v中再分频得到近似1MHZ时钟,要求自行设计50MHZ到12.5MHZ的分频模块:div_50_12M.v系统需要4HZ频率读ROM,于是用50MHZ,分频得到4HZ频率。根据下载板的情况,两个分频模块均设reset=0时,系统复位。由于这两个分频模块仿真时间较长,故这部分不要求进行仿真。一、实验步骤1、建立工程:file->NewProject。并且设置projectproperty。注意perfectlanuage应该选择Verilog。构建一个工程名为songer的工程,并放在E盘目录下。2、建立工程后,分
8、别输入ToneTaba.v和Speakera.v的VerilogHDL文本,进行综合和功能仿真,理解、验证模块功能。3、建立名为NoteTabs的Verilog文件后,编辑代码如下:moduleNoteTabs(Clk,ToneIndex);inputClk;output[3:0]ToneIndex;reg[7:0]
此文档下载收益归作者所有