编曲部分
clk_out是周期为0.5s的时钟信号
M是使能段,当M为1时演奏歌曲
m表示不同音调,1-7对应中音do、ri、mi、fa、so、la、xi ,8-14对应高音 ,14-21对应低音
state表示状态,一共157个状态,每个状态为0.5s,全歌时长78.5s
module state(
input clk_out, //周期0.5s的时钟信号
input M,
output reg [4:0] m=0,
output reg [7:0] state=0
);
always@(posedge clk_out)
if(~M|state>=157)
state=0;
else
state=state+1;
always@(M,state) //国际歌乐谱
if(M)
begin
case(state)
0: m=5;
1: m=8;
2: m=7;
3: m=9;
4: m=8;
5: m=5;
6: m=3;
7: m=6;
8: m=6;
9: m=4;
10: m=0;
11: m=6;
12: m=9;
13: m=8;
14: m=7;
15: m=6;
16: m=5;
17: m=4;
18: m=3;
19: m=3;
20: m=3;
21: m=5;
22: m=8;
23: m=7;
24: m=9;
25: m=8;
26: m=5;
27:

本文介绍如何使用FPGA来演奏歌曲,以国际歌为例。通过设置不同的参数,如clk_out时钟信号、使能段M、音调m及状态state,实现了音乐的编曲和播放。音调部分利用蜂鸣器并改变其时钟频率来产生不同音调。最终,在FPGA上成功演示了国际歌的演奏效果。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



