module song_liangzhu(clk, up, down, beep, fast, slow); input clk; output beep; reg beep_r; input up; input down; input fast, slow; reg[8:0] state; reg[16:0]count,count_end; reg[24:0]count1; reg clk50; parameter L_0_0=18'd95556, L_0_5=18'd90193, L_1_0=18'd85131, L_1_5=18'd80353, L_2_0=18'd75843, L_3_0=18'd71586, L_3_5=18'd67569, L_4_0=18'd63776, L_4_5=18'd60197, L_5_0=18'd56805, L_5_5=18'd53629, L_6_0=18'd50619, M_0_0=18'd47778, M_0_5=18'd45097, M_1_0=18'd42566, M_1_5=18'd40177, M_2_0=18'd37922, M_3_0=18'd35793, M_3_5=18'd33784, M_4_0=18'd31888, M_4_5=18'd30098, M_5_0=18'd28409, M_5_5=18d26815,
M_6_0=18'd25310,
H_0_0=18'd23889,
H_0_5=18'd22548,
H_1_0=18'd21283,
H_1_5=18'd20088,
H_2_0=18'd18961,
H_3_0=18'd17897,
H_3_5=18'd16892,
H_4_0=18'd15944,
H_4_5=18'd15049,
H_5_0=18'd14205,
H_5_5=18'd13407,
H_6_0=18'd12655,
X_0_0=18'd11945,
X_0_5=18'd11274,
X_1_0=18'd10641,
X_1_5=18'd10044,
X_2_0=18'd9480,
X_3_0=18'd8948,
X_3_5=18'd8446,
X_4_0=18'd7972,
X_4_5=18'd7525,
X_5_0=18'd7102,
X_5_5=18'd6704,
X_6_0=18'd6327;
reg[24:0] TIME = 5000000;
always @(posedge clk) begin
if(fast && !slow)
TIME = 2500000;
else if(!fast && slow)
TIME = 10000000;
else
TIME = 5000000;
end
assign beep = beep_r;
always@(posedge clk) begin
clk50<=~clk50;
end
always@(posedge clk50) begin
count <= count + 1'b1;
if(count == count_end) begin
count <= 17'h0;
beep_r <= !beep_r;
end
end
always @(posedge clk50) begin
if(count1 < TIME)
count1 = count1 + 1'b1;
else begin
count1 = 25'd0;
if(state == 9'd323)
state = 9'd0;
else
state = state + 1'b1;
case(state)
9'd0: count_end = X_2_0;
9'd1: count_end = X_1_5;
9'd2: count_end = X_1_0;
9'd3: count_end = X_0_5;
9'd4: count_end = X_1_0;
9'd5: count_end = X_0_5;
9'd6: count_end = X_0_0;
9'd7: count_end = H_6_0;
9'd8: count_end = X_0_0;
9'd9: count_end = H_6_0;
9'd10: count_end = H_5_5;
9'd11: count_end = H_5_0;
9'd12: count_end = H_4_5;
9'd13: count_end = H_4_0;
9'd14: count_end = H_3_5;
9'd15: count_end = H_3_0;
9'd16: count_end = H_2_0;
9'd17: count_end = H_1_5;
9'd18: count_end = H_1_0;
9'd19: count_end = H_0_5;
9'd20: count_end = H_1_0;
9'd21: count_end = H_0_5;
9'd22: count_end = H_0_0;
9'd23: count_end = M_6_0;
9'd24: count_end = H_0_0;
9'd25: count_end = M_6_0;
9'd26: count_end = M_5_5;
9'd27: count_end = M_5_0;
9'd28: count_end = M_4_5;
9'd29: count_end = M_4_0;
9'd30: count_end = M_3_5;
9'd31: count_end = M_3_0;
9'd32: count_end = M_2_0;
9'd33: count_end = M_1_5;
9'd34: count_end = M_1_0;
9'd35: count_end = M_0_5;
9'd36: count_end = M_1_0;
9'd37: count_end = M_0_5;
9'd38: count_end = M_0_0;
9'd39: count_end = L_6_0;
9'd40: count_end = M_2_0;
9'd41: count_end = M_1_5;
9'd42: count_end = M_1_0;
9'd43: count_end = M_0_5;
9'd44: count_end = M_1_0;
9'd45: count_end = M_0_5;
9'd46: count_end = M_0_0;
9'd47: count_end = L_6_0;
9'd48: count_end = M_2_0;
9'd49: count_end = M_1_5;
9'd50: count_end = M_1_0;
9'd51: count_end = M_0_5;
9'd52: count_end = M_1_0;
9'd53: count_end = M_0_5;
9'd54: count_end = M_0_0;
9'd55: count_end = L_6_0;
9'd56: count_end = M_2_0;
9'd57: count_end = M_1_5;
9'd58: count_end = M_1_0;
9'd59: count_end = M_0_5;
9'd60: count_end = M_1_0;
9'd61: count_end = M_0_5;
9'd62: count_end = M_0_0;
9'd63: count_end = L_6_0;
9'd64: count_end = M_2_0;
9'd65: count_end = M_1_5;
9'd66: count_end = M_1_0;
9'd67: count_end = M_0_5;
9'd68: count_end = M_0_0;
9'd69: count_end = M_3_0;
9'd70: count_end = M_2_0;
9'd71: count_end = M_1_5;
9'd72: count_end = M_2_0;
9'd73: count_end = M_1_5;
9'd74: count_end = M_1_0;
9'd75: count_end = M_0_5;
9'd76: count_end = M_0_0;
9'd77: count_end = M_0_5;
9'd78: count_end = M_1_0;
9'd79: count_end = M_1_5;
9'd80: count_end = M_2_0;
9'd81: count_end = M_1_5;
9'd82: count_end = M_1_0;
9'd83: count_end = M_0_5;
9'd84: count_end = M_0_0;
9'd85: count_end = M_3_0;
9'd86: count_end = M_0_0;
9'd87: count_end = M_1_5;
9'd88: count_end = M_2_0;
9'd89: count_end = M_1_5;
9'd90: count_end = M_1_0;
9'd91: count_end = M_0_5;
9'd92: count_end = M_0_0;
9'd93: count_end = M_0_5;
9'd94: count_end = M_1_0;
9'd95: count_end = M_1_5;
9'd96: count_end = M_2_0;
9'd97: count_end = M_1_5;
9'd98: count_end = M_1_0;
9'd99: count_end = M_0_5;
9'd100: count_end = M_1_0;
9'd101: count_end = M_0_5;
9'd102: count_end = M_0_0;
9'd103: count_end = L_6_0;
9'd104: count_end = M_0_0;
9'd105: count_end = M_0_5;
9'd106: count_end = M_1_0;
9'd107: count_end = M_1_5;
9'd108: count_end = M_2_0;
9'd109: count_end = M_3_0;
9'd110: count_end = M_2_0;
9'd111: count_end = M_1_5;
9'd112: count_end = M_2_0;
9'd113: count_end = M_1_5;
9'd114: count_end = M_1_0;
9'd115: count_end = M_0_5;
9'd116: count_end = M_1_0;
9'd117: count_end = M_0_5;
9'd118: count_end = M_0_0;
9'd119: count_end = L_6_0;
9'd120: count_end = M_0_0;
9'd121: count_end = M_0_5;
9'd122: count_end = M_1_0;
9'd123: count_end = M_1_5;
9'd124: count_end = M_2_0;
9'd125: count_end = M_3_5;
9'd126: count_end = M_4_0;
9'd127: count_end = M_4_5;
9'd128: count_end = M_5_0;
9'd129: count_end = M_4_5;
9'd130: count_end = M_4_0;
9'd131: count_end = M_3_5;
9'd132: count_end = M_3_0;
9'd133: count_end = M_5_5;
9'd134: count_end = M_5_0;
9'd135: count_end = M_4_5;
9'd136: count_end = M_5_0;
9'd137: count_end = M_4_5;
9'd138: count_end = M_4_0;
9'd139: count_end = M_3_5;
9'd140: count_end = M_3_0;
9'd141: count_end = M_3_5;
9'd142: count_end = M_4_0;
9'd143: count_end = M_4_5;
9'd144: count_end = M_5_0;
9'd145: count_end = M_4_5;
9'd146: count_end = M_4_0;
9'd147: count_end = M_3_5;
9'd148: count_end = M_3_0;
9'd149: count_end = M_5_5;
9'd150: count_end = M_5_0;
9'd151: count_end = M_4_5;
9'd152: count_end = M_5_0;
9'd153: count_end = M_4_5;
9'd154: count_end = M_4_0;
9'd155: count_end = M_3_5;
9'd156: count_end = M_3_0;
9'd157: count_end = M_3_5;
9'd158: count_end = M_4_0;
9'd159: count_end = M_4_5;
9'd160: count_end = M_5_0;
9'd161: count_end = M_4_5;
9'd162: count_end = M_4_0;
9'd163: count_end = M_3_5;
9'd164: count_end = M_4_0;
9'd165: count_end = M_3_5;
9'd166: count_end = M_3_0;
9'd167: count_end = M_2_0;
9'd168: count_end = M_3_0;
9'd169: count_end = M_3_5;
9'd170: count_end = M_4_0;
9'd171: count_end = M_4_5;
9'd172: count_end = M_5_0;
9'd173: count_end = M_5_5;
9'd174: count_end = M_5_0;
9'd175: count_end = M_4_5;
9'd176: count_end = M_5_0;
9'd177: count_end = M_4_5;
9'd178: count_end = M_4_0;
9'd179: count_end = M_3_5;
9'd180: count_end = M_4_0;
9'd181: count_end = M_3_5;
9'd182: count_end = M_3_0;
9'd183: count_end = M_2_0;
9'd184: count_end = M_3_0;
9'd185: count_end = M_3_5;
9'd186: count_end = M_4_0;
9'd187: count_end = M_4_5;
9'd188: count_end = M_5_0;
9'd189: count_end = M_5_5;
9'd190: count_end = M_5_0;
9'd191: count_end = M_4_5;
9'd192: count_end = M_5_0;
9'd193: count_end = L_5_0;
9'd194: count_end = L_4_5;
9'd195: count_end = L_6_0;
9'd196: count_end = L_4_0;
9'd197: count_end = L_6_0;
9'd198: count_end = L_4_0;
9'd199: count_end = L_6_0;
9'd200: count_end = H_3_5;
9'd201: count_end = M_5_5;
9'd202: count_end = H_3_5;
9'd203: count_end = M_5_5;
9'd204: count_end = H_3_5;
9'd205: count_end = M_5_5;
9'd206: count_end = H_3_5;
9'd207: count_end = M_5_5;
9'd208: count_end = M_5_0;
9'd209: count_end = M_5_0;
9'd210: count_end = M_4_5;
9'd211: count_end = M_5_0;
9'd212: count_end = M_4_5;
9'd213: count_end = M_5_0;
9'd214: count_end = M_4_5;
9'd215: count_end = M_5_0;
9'd216: count_end = M_5_5;
9'd217: count_end = H_3_5;
9'd218: count_end = M_5_5;
9'd219: count_end = H_3_5;
9'd220: count_end = M_5_5;
9'd221: count_end = H_3_5;
9'd222: count_end = M_5_5;
9'd223: count_end = H_3_5;
9'd224: count_end = M_5_0;
9'd225: count_end = M_5_5;
9'd226: count_end = M_5_0;
9'd227: count_end = M_4_5;
9'd228: count_end = M_5_0;
9'd229: count_end = M_5_5;
9'd230: count_end = M_5_0;
9'd231: count_end = M_4_5;
9'd232: count_end = M_5_0;
9'd233: count_end = M_5_5;
9'd234: count_end = M_5_0;
9'd235: count_end = M_4_5;
9'd236: count_end = M_5_0;
9'd237: count_end = M_5_5;
9'd238: count_end = M_5_0;
9'd239: count_end = M_4_5;
9'd240: count_end = M_5_0;
9'd241: count_end = M_5_5;
9'd242: count_end = M_6_0;
9'd243: count_end = H_0_0;
9'd244: count_end = H_0_5;
9'd245: count_end = H_0_0;
9'd246: count_end = M_6_0;
9'd247: count_end = M_5_5;
9'd248: count_end = M_5_0;
9'd249: count_end = M_5_5;
9'd250: count_end = M_6_0;
9'd251: count_end = H_0_0;
9'd252: count_end = H_0_5;
9'd253: count_end = H_0_0;
9'd254: count_end = M_1_0;
9'd255: count_end = M_0_5;
9'd256: count_end = M_5_0;
9'd257: count_end = L_5_0;
9'd258: count_end = L_4_5;
9'd259: count_end = L_6_0;
9'd260: count_end = L_4_0;
9'd261: count_end = L_6_0;
9'd262: count_end = L_4_0;
9'd263: count_end = L_6_0;
9'd264: count_end = L_1_5;
9'd265: count_end = H_1_5;
9'd266: count_end = L_1_5;
9'd267: count_end = H_1_5;
9'd268: count_end = L_1_5;
9'd269: count_end = H_1_5;
9'd270: count_end = L_1_5;
9'd271: count_end = H_1_5;
9'd272: count_end = H_1_0;
9'd273: count_end = H_1_0;
9'd274: count_end = H_0_5;
9'd275: count_end = H_1_0;
9'd276: count_end = H_0_5;
9'd277: count_end = H_1_0;
9'd278: count_end = H_0_5;
9'd279: count_end = H_1_0;
9'd280: count_end = L_1_5;
9'd281: count_end = X_1_5;
9'd282: count_end = L_1_5;
9'd283: count_end = X_1_5;
9'd284: count_end = L_1_5;
9'd285: count_end = X_1_5;
9'd286: count_end = L_1_5;
9'd287: count_end = X_1_5;
9'd288: count_end = H_1_0;
9'd289: count_end = H_1_5;
9'd290: count_end = H_1_0;
9'd291: count_end = H_0_5;
9'd292: count_end = H_1_0;
9'd293: count_end = H_1_5;
9'd294: count_end = H_1_0;
9'd295: count_end = H_0_5;
9'd296: count_end = H_1_0;
9'd297: count_end = H_1_5;
9'd298: count_end = H_1_0;
9'd299: count_end = H_0_5;
9'd300: count_end = H_1_0;
9'd301: count_end = H_1_5;
9'd302: count_end = H_1_0;
9'd303: count_end = H_0_5;
9'd304: count_end = H_1_0;
9'd305: count_end = H_1_5;
9'd306: count_end = H_2_0;
9'd307: count_end = H_3_0;
9'd308: count_end = H_3_5;
9'd309: count_end = H_3_0;
9'd310: count_end = H_2_0;
9'd311: count_end = H_1_5;
9'd312: count_end = H_1_0;
9'd313: count_end = H_1_5;
9'd314: count_end = H_2_0;
9'd315: count_end = H_3_0;
9'd316: count_end = H_3_5;
9'd317: count_end = H_3_0;
9'd318: count_end = H_2_0;
9'd319: count_end = H_1_5;
9'd320: count_end = H_1_0;
9'd321: count_end = H_0_5;
9'd322: count_end = H_0_0;
9'd323: count_end = M_6_0;
endcase
count_end = count_end/(1+up)*(1+down);
end
end
endmodule