module Song(CLK_5MHz, CLK_4Hz, SP);
input wire[0:0] CLK_5MHz, CLK_4Hz;
output SP;
reg[13:0] divider,origin;
reg[5:0] melody;
reg[7:0] counter;
reg SP;
/******************************************
音色振動数セット
*******************************************/
always @(posedge CLK_5MHz)
begin
if(divider == 16383) //最大値
divider <= origin; //音色初期値セット
else
divider <= divider + 1; //振動数カウント
end
/*****************************************
音階作成 / 2
******************************************/
always @(posedge CLK_5MHz)
begin
if(divider == 16383)
SP <= ~SP;
end
/*****************************************
音色設定
******************************************/
always@(posedge CLK_4Hz)
begin
case(melody)
6'b000001: origin <= 6800;//4887; //ド 260.9
6'b000010: origin <= 7869;//6166; //レ 293.66
6'b000011: origin <= 8798;//7281; //ミ 329.63
6'b000101: origin <= 10005;//8730; //ソ 392
6'b000110: origin <= 10701;//9565; //ラ 440
6'b000111: origin <= 11321;//10310; //シ 493.88
6'b010001: origin <= 11605;//10647; //ド↑ 523.25
6'b100000: origin <= 12116;//11272; //レ↑ 586
/* 12'b000000100000: origin = 11272; //レ↑ 586
12'b000000110000: origin = 11831; //ミ↑ 659
12'b000001010000: origin = 12556; //ファ↑783
12'b000001100000: origin = 12974; //ラ↑880
12'b000100000000: origin = 13516; //ド↑↑ 1046
*/
6'b000000: origin <= 16383; //
endcase
end
/***************************************
シーケンサ作動
****************************************/
always@(posedge CLK_4Hz)
begin
if(counter == 10) //10番目まで演奏を行う
counter = 0; //最初から
else
counter = counter + 1; //次へ
case(counter)
0:melody <=6'b000010; //レ き
1:melody <=6'b000010;
2:melody <=6'b000010;
3:melody <=6'b000010;
4:melody <=6'b000001; //ド み
5:melody <=6'b000001;
6:melody <=6'b000001;
7:melody <=6'b000001;
8:melody <=6'b000010; //レ が
9:melody <=6'b000010;
10:melody <=6'b000010;
11:melody <=6'b000010;
12:melody <=6'b000011; //ミ
13:melody <=6'b000011;
14:melody <=6'b000011;
15:melody <=6'b000011;
16:melody <=6'b000101; //ソ
17:melody <=6'b000101;
18:melody <=6'b000101;
19:melody <=6'b000101;
20:melody <=6'b000011; //ミ
21:melody <=6'b000011;
22:melody <=6'b000011;
23:melody <=6'b000011;
24:melody <=6'b000010; //レ
25:melody <=6'b000010;
26:melody <=6'b000010;
27:melody <=6'b000010;
28:melody <=6'b000010; //レ
29:melody <=6'b000010;
30:melody <=6'b000010;
31:melody <=6'b000010;
32:melody <=6'b000011; //ミ
33:melody <=6'b000011;
34:melody <=6'b000011;
35:melody <=6'b000011;
36:melody <=6'b000101; //ソ
37:melody <=6'b000101;
38:melody <=6'b000101;
39:melody <=6'b000101;
40:melody <=6'b000110; //ラ
41:melody <=6'b000110;
42:melody <=6'b000110;
43:melody <=6'b000110;
44:melody <=6'b000101; //ソ
45:melody <=6'b000101;
46:melody <=6'b000110; //ラs
47:melody <=6'b000110;
default:{melody}<=6'b000000;
endcase
end
endmodule