case({high,med,low})
'b000000000101:origin=14447; 'b000000000110:origin=13636; 'b000000000111:origin=12149; 'b000000010000:origin=11466; 'b000000100000:origin=10216; 'b000000110000:origin=9101; 'b000001000000:origin=8590; 'b000001010000:origin=7653; 'b000001100000:origin=6818; 'b000001110000:origin=6074; 'b000100000000:origin=5733; 'b001000000000:origin=5108; 'b001100000000:origin=4551; endcase end
always @(posedge clk_4Hz) //歌曲 begin
if(state ==171) state = 0;//计时,以实现循环演奏 else
state = state + 1; case(state)
0: {high,med,low}='b000000000101;//5 1,2,3,4: {high,med,low}='b000000110000;//3 5: {high,med,low}='b000000100000;//2 6: {high,med,low}='b000000010000;//1
7,8,9,10,11,12,13,14,15,16: {high,med,low}='b000000100000;//2 17: {high,med,low}='b000000010000;//1 18: {high,med,low}='b000000000110;//6 19,20,21,22,23,24,25,26,27: {high,med,low}='b000000010000;//1
28: {high,med,low}='b000000000111;//7 29: {high,med,low}='b000000000110;//6 30,31,32,33,34,35,36,37,38: {high,med,low}='b000000000111;//7 39: {high,med,low}='b000000000110;//6 40: {high,med,low}='b000000000101;//5 41,42,43,44,45:
{high,med,low}='b000000000110;//6
24
46: {high,med,low}='b000000000101;//5 47,48,49,50: {high,med,low}='b000000110000;//3 51: {high,med,low}='b000000100000;//2 52: {high,med,low}='b000000010000;//1 53,54,55,56: {high,med,low}='b000000100000;//2
57: {high,med,low}='b000000000101;//5 58,59,60,61: {high,med,low}='b000000100000;//2 62: {high,med,low}='b000000010000;//1 63: {high,med,low}='b000000000110;//6 64,65,66,67: {high,med,low}='b000000010000;//1
68: {high,med,low}='b000000000101;//5 69,70,71,72: {high,med,low}='b000000000111;//7 73: {high,med,low}='b000000000110;//6 74: {high,med,low}='b000000000101;//5 75,76,77,78,79,80:
{high,med,low}='b000000000111;//7
81,82: {high,med,low}='b000000010000;//1 83: {high,med,low}='b000000000110;//6 84: {high,med,low}='b000000100000;//2 85: {high,med,low}='b000000010000;//1 86: {high,med,low}='b000000100000;//2 87,88,89,90,91,92,93,94,95: {high,med,low}='b000000110000;//3
96,97,98: {high,med,low}='b000000110000;//3 99,100,101,102:
{high,med,low}='b000001100000;//6
103: {high,med,low}='b000001010000;//5 104: {high,med,low}='b000001100000;//6 105,106,107,108,109,110: {high,med,low}='b000000110000;//3 111,112,113,114: {high,med,low}='b000001000000;//4 115: {high,med,low}='b000001010000;//5 116: {high,med,low}='b000001100000;//6 117,118,119,120,121,122: {high,med,low}='b000000110000;//3
123,124,125,126: {high,med,low}='b000000100000;//2 127: {high,med,low}='b000000110000;//3 128: {high,med,low}='b000001000000;//4 129,130: {high,med,low}='b000000110000;//3 131: {high,med,low}='b000001100000;//6
25
132: 133: 134:
{high,med,low}='b000000110000;//3 {high,med,low}='b000000100000;//2 {high,med,low}='b000000010000;//1 {high,med,low}='b000000100000;//2 {high,med,low}='b000000010000;//1 {high,med,low}='b000000000111;//7 {high,med,low}='b000000000101;//5 {high,med,low}='b000001010000;//5 {high,med,low}='b000000100000;//2 {high,med,low}='b000001010000;//5
135: 136: 137,138: 139: 140: 141: 142:
143,144,145,146,147,148: {high,med,low}='b000000110000;//3 149,150,151,152: {high,med,low}='b000001100000;//6 153: {high,med,low}='b000001110000;//7 154: {high,med,low}='b000100000000;//1 155,156,157,158,159,160: {high,med,low}='b001100000000;//3 161,162,163,164: {high,med,low}='b001000000000;//2 165: {high,med,low}='b000001110000;//7 166: {high,med,low}='b000100000000;//1 167,168,169,170,171: {high,med,low}='b000001100000;//6 default : {high,med,low}=12'bx; endcase end
三、曲目 二乐谱存储及循环播放模块
//bell2子模块《康定情歌》 module bell2 (inclk,beep3); input inclk; //系统时钟 output beep3; //蜂鸣器输出端 reg [3:0]high,med,low; reg [15:0]origin; reg beep_r; //寄存器 reg [7:0]state; reg [15:0]count;
assign beep3=beep_r; //输出音乐
//时钟频率6MHz reg clk_6MHz; reg [2:0] cnt1;
always@(posedge inclk) begin
if(cnt1<3'd4)
26
cnt1<=cnt1+3'b1; else
begin
cnt1<=3'b0;
clk_6MHz<=~clk_6MHz; end end
//时钟频率4MHz reg clk_4Hz;
reg [24:0] cnt2;
always@(posedge inclk) begin
if(cnt2<25'd6250000) cnt2<=cnt2+25'b1; else
begin cnt2<=25'b0; clk_4Hz<=~clk_4Hz; end end
always @(posedge clk_6MHz) begin
count <= count + 1'b1; if(count == origin) begin count <= 16'h0; beep_r <= !beep_r; end end
always@(posedge clk_4Hz) begin
case({high,med,low})
'b000000000011:origin<=7281; 'b000000000101:origin<=8730; 'b000000000110:origin<=9565; 'b000000000111:origin<=10310; 'b000000010000:origin<=10647; 'b000000100000:origin<=11272; 'b000000110000:origin<=11831; 'b000001010000:origin<=12556; 'b000001100000:origin<=12974; 'b000100000000:origin<=13516; 'b000000000000:origin<=16383; //计数器加1 //计数器清零 //输出取反 //低音3 //低音5 //低音6 //低音7 //中音1 //中音2 //中音3 //中音5 //中音6 //高音1 //休止符
27
endcase end
always @(posedge clk_4Hz) begin
if(state ==151) state = 0; else state = state + 1; //《梁祝》 case(state)
0: {high,med,low}<='b000000000011; 1: {high,med,low}<='b000000000011; 2: {high,med,low}<='b000000000011; 3: {high,med,low}<='b000000000011;
4: {high,med,low}<='b000000000101; 5: {high,med,low}<='b000000000101; 6: {high,med,low}<='b000000000101;
7: {high,med,low}<='b000000000110; 8: {high,med,low}<='b000000010000; 9: {high,med,low}<='b000000010000; 10: {high,med,low}<='b000000010000;
11: {high,med,low}<='b000000100000; 12: {high,med,low}<='b000000000110; 13: {high,med,low}<='b000000010000; 14: {high,med,low}<='b000000000101; 15: {high,med,low}<='b000000000101;
16: {high,med,low}<='b000001010000; 17: {high,med,low}<='b000001010000; 18: {high,med,low}<='b000001010000;
19: {high,med,low}<='b000100000000; 20: {high,med,low}<='b000001100000; 21: {high,med,low}<='b000001010000; 22: {high,med,low}<='b000000110000; 23: {high,med,low}<='b000001010000; 24: {high,med,low}<='b000000100000; 25: {high,med,low}<='b000000100000; 26: {high,med,low}<='b000000100000; 27: {high,med,low}<='b000000100000; 28: {high,med,low}<='b000000100000; 29: {high,med,low}<='b000000100000; 30: {high,med,low}<='b000000100000; 31: {high,med,low}<='b000000100000; 32: {high,med,low}<='b000000100000; 33: {high,med,low}<='b000000100000;
28
//低音“3”
//持续4个时钟节拍 //低音“5”
//发3个时钟节拍 //低音“6” //中音“1”
//发3个时钟节拍 //中音“2” //低音“6” //中音“1” //低音“5” //中音“5”
//发3个时钟节拍 //高音“1” //中音“6” //中音“5” //中音“3” //中音“5” //中音“2”
//持续11个时钟节拍