硬件连接
一首乐曲能够连续演奏须要两个基本条件:
1,组成乐曲的每个音符的发音频率值

2,每个音符持续的韶光
如果能通过FPGA利用纯硬件的手段来达到所需的条件,那么就可以实现乐曲的演奏效果。
生日快乐歌的简谱如下
生日快乐歌简谱
很明显这是一首G调,一个小节3个四分音符的曲子,那么如何得到这些音符的频率呢?我们先来看一下C调的音符频率对照表
C调音符频率对照
由于C调和G调有如下的关系
C调和G调关系
我们可以推算出生日快乐歌中所有音符的频率,低音5=587HZ,低音6=659HZ,低音7=740HZ,中音1=784HZ,中音2=880HZ,中音3=988HZ,中音4=1046HZ,中音5=1175HZ,休止符=0HZ
有了各音符频率,就可以开始构建播放电路。全体系统的构造如下图所示:
系统构造
先来看一下全体系统的事情事理:
系统由四个模块组成,Rhythm_clk模块,NoteTabs模块,ToneTabs模块,Speakera模块。
Rhythm_clk模块紧张代码如下
Rhythm_clk模块紧张代码
Rhythm_clk模块卖力将输入的12M时钟分频,产生一个2HZ的低频旗子暗记,作为NoteTabs模块的时钟,这个时钟将决定乐曲的演奏速率。
NoteTabs模块紧张代码如下
NoteTabs模块紧张代码
NoteTabs模块在Rhythm_clk模块产生的时钟的驱动下,产生每一个音符在查表电路中所对应的序列号,并将其送至ToneTabs模块
ToneTabs模块紧张代码如下
ToneTabs模块紧张代码
ToneTabs模块卖力将NoteTabs模块产生的音符对应的序列号转换身分频数,并将其送至Speakera模块
Speakera模块紧张代码如下
Speakera模块紧张代码
Speakera模块是一个数控分频器,它的浸染是将12M的主时钟按ToneTabs模块产生的分频数进行分频,天生相应频率的音符输出。
下面是利用Xilinx ISE仿真波形
仿真波形