可以帮忙看看这是哪首歌吗
module sysong(clk,beep,key1,r,duan,wei); //模块名称song
input key1;
input clk; //系统时钟50MHz
output beep; //蜂鸣器输出端
reg beep_r; //寄存器
reg[7:0] state; //乐谱状态机
reg[16:0]count,count_end;
reg[23:0]count1;
input r;
output [7:0] duan;
output [3:0] wei;
reg [7:0] duan;
reg [3:0] wei;
integer count2;
integer count3;
reg clk_1hz;
reg [3:0]ge;
reg [3:0]shi;
reg [3:0]bai;
reg [3:0]qian;
reg clk_scan;
reg [3:0]select;
//乐谱参数:D=F/2K (D:参数,F:时钟频率,K:音高频率)
parameter D_2 = 16'd95671, //低音2
D_3 = 16'd85130, //低音3
D_5 = 16'd63776, //低音5
D_6 = 16'd56818, //低音6
D_7 = 16'd50618, //低音7
M_1 = 16'd47774, //中音1
M_2 = 16'd42568, //中音2
M_3 = 16'd37919, //中音3
M_5 = 16'd31888, //中音5
M_6 = 16'd28409, //中音6
H_1 = 16'd23912; //高音1
parameter TIME = 12000000; //控制每一个音的长短(250ms)
assign beep = beep_r; //输出音乐
always@(posedge clk)
begin
if(key1)
begin count<=0;end
else begin
count <= count + 1'b1;end //计数器加1
if(count == count_end)
begin
count <= 16'h0; //计数器清零
beep_r <= !beep_r; //输出取反
end
end
always @(posedge clk)
begin
if(count1 < TIME) //一个节拍250mS
count1 = count1 + 1'b1;
else
begin
count1 = 24'd0;
if(state == 8'd52)
state = 8'd0;
else
state = state + 1'b1;
case(state)
8'd0,8'd1,8'd2,8'd3: count_end = D_3;//低音"3",持续4个节拍
8'd4,8'd5,8'd6: count_end = D_5;//低音"5",持续3个节拍
8'd7: count_end = D_6;//低音"6",持续1个节拍
8'd8,8'd9,8'd10: count_end = M_1;//中音"1",持续3个节拍
8'd11: count_end = M_2;//中音"2",持续1个节拍
8'd12: count_end = D_6;//低音"6",持续1个节拍
8'd13: count_end = M_1;//中音"1",持续1个节拍
8'd14,8'd15: count_end = D_5;//低音"5",持续2个节拍
8'd16: count_end = M_1;//中音"1",持续1个节拍
8'd17,8'd18: count_end = D_5;//低音"5",持续2个节拍
8'd19,8'd20,8'd21: count_end = M_5;//中音"5",持续3个节拍
8'd22: count_end = H_1;//高音"1",持续1个节拍
8'd23: count_end = M_6;//中音"6",持续1个节拍
8'd24: count_end = M_5;//中音"5",持续1个节拍
8'd25: count_end = M_3;//中音"3",持续1个节拍
8'd26: count_end = M_5;//中音"5",持续1个节拍
8'd27,8'd28,8'd29,8'd30,8'd31,
8'd32,8'd33,8'd34,8'd35,8'd36,8'd37:count_end = M_2;//中音"2",持续11个节拍
8'd38: count_end = M_3;//中音"3",持续1个节拍
8'd39,8'd40: count_end = D_7;//低音"7",持续2个节拍
8'd41,8'd42: count_end = D_6;//低音"6",持续2个节拍
8'd43,8'd44,8'd45: count_end = D_5;//低音"5",持续3个节拍
8'd46: count_end = D_6;//低音"6",持续1个节拍
8'd47,8'd48: count_end = M_1;//中音"1",持续2个节拍
8'd49,8'd50: count_end = M_2;//中音"2",持续2个节拍
8'd51,8'd52: count_end = D_3;//低音"3",持续2个节拍
endcase
end
end
always @(posedge clk)
begin
if(count2==1000000)
begin
clk_1hz<=~clk_1hz;
count2<=0;
end
else
count2<=count2+1'b1;
end
always @(posedge clk_1hz)
begin
if(!r)
begin
qian<=4'b0010;
bai<=4'b0100;
shi<=4'b0111;
ge<=4'b0011;
end
else
begin
qian<=4'b0010;
bai<=4'b0100;
shi<=4'b0111;
ge<=4'b0011;
end
end
always @(posedge clk)
begin
if(count3==10000)
begin
count3<=0;
clk_scan<=~clk_scan;
end
else
count3<=count3+1;
end
always @( posedge clk_scan)
begin
if(select==3'b100)
select<=3'b000;
else
select<=select+1'b1;
end
always @(ge or shi or bai or qian or select)
begin
if(select==3'b001)
begin
wei<=4'b1110;
case(ge)
4'b0000:begin duan<=8'b1100_0000;end
4'b0001:begin duan<=8'b1111_1001;end
4'b0010:begin duan<=8'b1010_0100;end
4'b0011:begin duan<=8'b1011_0000;end
4'b0100:begin duan<=8'b1001_1001;end
4'b0101:begin duan<=8'b1001_0010;end
4'b0110:begin duan<=8'b1000_0011;end
4'b0111:begin duan<=8'b1111_1000;end
4'b1000:begin duan<=8'b1000_0000;end
4'b1001:begin duan<=8'b1001_1000;end
default duan<=8'bx;
endcase
end
else if(select==3'b010)
begin
wei<=4'b1101;
case(shi)
4'b0000: duan<=8'b1100_0000;
4'b0001: duan<=8'b1111_1001;
4'b0010: duan<=8'b1010_0100;
4'b0011: duan<=8'b1011_0000;
4'b0100: duan<=8'b1001_1001;
4'b0101: duan<=8'b1001_0010;
4'b0110: duan<=8'b1000_0011;
4'b0111: duan<=8'b1111_1000;
4'b1000: duan<=8'b1000_0000;
4'b1001: duan<=8'b1001_1000;
4'b1010: duan<=8'b1010_0001;
default duan<=8'bx;
endcase
end
else if(select==3'b011)
begin
wei<=4'b1011;
case(bai)
4'b0000:begin duan<=8'b1100_0000;end
4'b0001:begin duan<=8'b1111_1001;end
4'b0010:begin duan<=8'b1010_0100;end
4'b0011:begin duan<=8'b1011_0000;end
4'b0100:begin duan<=8'b1001_1001;end
4'b0101:begin duan<=8'b1001_0010;end
4'b0110:begin duan<=8'b1000_0011;end
4'b0111:begin duan<=8'b1111_1000;end
4'b1000:begin duan<=8'b1000_0000;end
4'b1001:begin duan<=8'b1001_1000;end
4'b1010:begin duan<=8'b1011_0111;end
default duan<=8'bx;
endcase
end
else if(select==3'b100)
begin
wei<=4'b0111;
case(qian)
4'b0000: duan<=8'b1100_0000;
4'b0001: duan<=8'b1111_1001;
4'b0010: duan<=8'b1010_0100;
4'b0011: duan<=8'b1011_0000;
4'b0100: duan<=8'b1001_1001;
4'b0101: duan<=8'b1001_0010;
4'b0110: duan<=8'b1000_0011;
4'b0111: duan<=8'b1111_1000;
4'b1000: duan<=8'b1000_0000;
4'b1001: duan<=8'b1001_1000;
default duan<=8'bx;
endcase
end
end
endmodule
这曲子是《梁山伯与祝英台》