编曲部分
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: m=3;
28: m=6;
29: m=6;
30: m=4;
31: m=6;
32: m=9;
33: m=8;
34: m=7;
35: m=8;
36: