|
- “梁祝”樂曲演奏電路
- //信號(hào)定義與說明:
- //clk_4Hz: 用于控制音長(zhǎng)(節(jié)拍)的時(shí)鐘頻率;
- //clk_6MHz: 用于產(chǎn)生各種音階頻率的基準(zhǔn)頻率;
- //speaker: 用于激勵(lì)揚(yáng)聲器的輸出信號(hào),本例中為方波信號(hào);
- //high, med, low:分別用于顯示高音、中音和低音音符,各驅(qū)動(dòng)一個(gè)數(shù)碼管來顯示。
- module song(clk_6MHz,clk_4Hz,speaker,high,med,low);
- input clk_6MHz, clk_4Hz;
- output speaker;
- output[3:0] high,med,low;
- reg[3:0] high,med,low;
- reg[13:0] divider,origin;
- reg[7:0] counter;
- reg speaker;
- wire carry;
- assign carry=(divider==16383);
- always @(posedge clk_6MHz)
- begin if(carry) divider=origin;
- else divider=divider+1;
- end
- always @(posedge carry)
- begin
- speaker=~speaker; //2 分頻產(chǎn)生方波信號(hào)
- end
- always @(posedge clk_4Hz)
- begin
- case({high,med,low}) //分頻比預(yù)置
- '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;
- endcase
- end
- always @(posedge clk_4Hz)
- begin
- if(counter==63) counter=0; //計(jì)時(shí),以實(shí)現(xiàn)循環(huán)演奏
- else counter=counter+1;
- case(counter) //記譜
- 0: {high,med,low}='b000000000011; //低音“3”
- 1: {high,med,low}='b000000000011; //持續(xù)4 個(gè)時(shí)鐘節(jié)拍
- 2: {high,med,low}='b000000000011;
- 3: {high,med,low}='b000000000011;
- 4: {high,med,low}='b000000000101; //低音“5”
- 5: {high,med,low}='b000000000101; //發(fā)3 個(gè)時(shí)鐘節(jié)拍
- 6: {high,med,low}='b000000000101;
- 7: {high,med,low}='b000000000110; //低音“6”
- 8: {high,med,low}='b000000010000; //中音“1”
- 9: {high,med,low}='b000000010000; //發(fā)3 個(gè)時(shí)鐘節(jié)拍
- 10: {high,med,low}='b000000010000;
- 11: {high,med,low}='b000000100000; //中音“2”
- 12: {high,med,low}='b000000000110; //低音“6”
- 13: {high,med,low}='b000000010000;
- 14: {high,med,low}='b000000000101;
- 15: {high,med,low}='b000000000101;
- 16: {high,med,low}='b000001010000; //中音“5”
- 17: {high,med,low}='b000001010000; //發(fā)3 個(gè)時(shí)鐘節(jié)拍
- 18: {high,med,low}='b000001010000;
- 19: {high,med,low}='b000100000000; //高音“1”
- 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; //中音“2”
- 25: {high,med,low}='b000000100000; //持續(xù)11 個(gè)時(shí)鐘節(jié)拍
- 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;
- 34: {high,med,low}='b000000100000;
- 35: {high,med,low}='b000000110000; //中音“3”
- 36: {high,med,low}='b000000000111; //低音“7”
- 37: {high,med,low}='b000000000111;
- 38: {high,med,low}='b000000000110; //低音“6”
- 39: {high,med,low}='b000000000110;
- 40: {high,med,low}='b000000000101; //低音“5”
- 41: {high,med,low}='b000000000101;
- 42: {high,med,low}='b000000000101;
- 43: {high,med,low}='b000000000110; //低音“6”
- 44: {high,med,low}='b000000010000; //中音“1”
- 45: {high,med,low}='b000000010000;
- 46: {high,med,low}='b000000100000; //中音“2”
- 47: {high,med,low}='b000000100000;
- 48: {high,med,low}='b000000000011; //低音“3”
- 49: {high,med,low}='b000000000011;
- 50: {high,med,low}='b000000010000; //中音“1”
- 51: {high,med,low}='b000000010000;
- 52: {high,med,low}='b000000000110;
- 53: {high,med,low}='b000000000101; //低音“5”
- 54: {high,med,low}='b000000000110;
- 55: {high,med,low}='b000000010000; //中音“1”
- 56: {high,med,low}='b000000000101; //低音“5”
- 57: {high,med,low}='b000000000101; //持續(xù)8 個(gè)時(shí)鐘節(jié)拍
- 58: {high,med,low}='b000000000101;
- 59: {high,med,low}='b000000000101;
- 60: {high,med,low}='b000000000101;
- 61: {high,med,low}='b000000000101;
- 62: {high,med,low}='b000000000101;
- 63: {high,med,low}='b000000000101;
- endcase
- end
- endmodule
復(fù)制代碼
|
|