?? buzzer.v
字號(hào):
/*
向蜂鳴器發(fā)送一定頻率的方波可以使蜂鳴器發(fā)出相應(yīng)的音調(diào),該實(shí)驗(yàn)通過設(shè)計(jì)一個(gè)狀態(tài)機(jī)和分頻
器使蜂鳴器發(fā)出"多來咪發(fā)梭拉西多"的音調(diào)。
*/
module buzzer(clk,rst,out);
input clk,rst;
output out;
reg out;
reg[3:0] clk_div1; //基頻分頻計(jì)數(shù)器,基頻為4M
reg[12:0] clk_div2;//音階分頻計(jì)數(shù)器,由基頻分頻產(chǎn)生各個(gè)音階
reg[21:0] cnt;//各音階發(fā)聲時(shí)間長短計(jì)數(shù)器
reg[2:0] state;
parameter duo=3822, //各個(gè)音調(diào)的分頻系數(shù)
lai=3405,
mi=3034,
fa=2865,
suo=2551,
la=2273,
xi=2024,
duo1=1911;
always@(posedge clk)
begin
if(!rst) begin
clk_div1<=0;
end
else begin
if(clk_div1!=12)
clk_div1<=clk_div1+1'b1;
else
clk_div1<=0;
end
end
always@(posedge clk)
begin
if(!rst) begin
clk_div2<=0;
state<=0;
cnt<=0;
out<=0;
end
else if(clk_div1==9) begin
case(state)
3'b000: begin //發(fā)“多”
cnt<=cnt+1;
if(cnt==22'h3fffff)
state<=3'b001;
if(clk_div2!=duo)
clk_div2<=clk_div2+1;
else begin
clk_div2<=0;
out<=~out;
end
end
3'b001: begin //發(fā)“來”
cnt<=cnt+1;
if(cnt==22'h3fffff)
state<=3'b010;
if(clk_div2!=lai)
clk_div2<=clk_div2+1;
else begin
clk_div2<=0;
out<=~out;
end
end
3'b010:begin //發(fā)"米“
cnt<=cnt+1;
if(cnt==22'h3fffff)
state<=3'b011;
if(clk_div2!=mi)
clk_div2<=clk_div2+1;
else begin
clk_div2<=0;
out<=~out;
end
end
3'b011: begin //發(fā)"法“
cnt<=cnt+1;
if(cnt==22'h3fffff)
state<=3'b100;
if(clk_div2!=fa)
clk_div2<=clk_div2+1;
else begin
clk_div2<=0;
out<=~out;
end
end
3'b100: begin //發(fā)"梭“
cnt<=cnt+1;
if(cnt==22'h3fffff)
state<=3'b101;
if(clk_div2!=suo)
clk_div2<=clk_div2+1;
else begin
clk_div2<=0;
out<=~out;
end
end
3'b101: begin //發(fā)"拉“
cnt<=cnt+1;
if(cnt==22'h3fffff)
state<=3'b110;
if(clk_div2!=la)
clk_div2<=clk_div2+1;
else begin
clk_div2<=0;
out<=~out;
end
end
3'b110: begin //發(fā)"西“
cnt<=cnt+1;
if(cnt==22'h3fffff)
state<=3'b111;
if(clk_div2!=xi)
clk_div2<=clk_div2+1;
else begin
clk_div2<=0;
out<=~out;
end
end
3'b111: begin //發(fā)"多“(高音)
cnt<=cnt+1;
if(cnt==22'h3fffff)
state<=3'b000;
if(clk_div2!=duo1)
clk_div2<=clk_div2+1;
else begin
clk_div2<=0;
out<=~out;
end
end
endcase
end
end
endmodule
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -