基于FPGA板的音乐盒的设计

基于FPGA板的音乐盒的设计

本实验室基于Cyclone IV E:EP4CE6E22C8的FPGA板的音乐盒设计,播放的音乐是《世上只有妈妈好》,根据模块化设计的思想,我们需要先设计底层模块,大概需要计数器,4分频,任意分频器,音调译码器,分频器预置数译码器。

以下是各个子模块:

计数器:

module count(clk4,num,full);

input clk4;

output[7:0]num;
output full;
reg full;
reg[7:0]num;
always@(posedge clk4)
begin
if(num==127)
begin
full=1;
num=0;
end
else
begin
num=num+1;
full=0;
end
end

endmodule

音调译码器:

module decodeA(Qin,Q2);
input [7:0]Qin;
output [4:0]Q2;
reg [4:0]Q2;
always@(Qin)
begin 
case(Qin)
0:Q2=13;
1:Q2=13;
2:Q2=13;
3:Q2=13;
4:Q2=12;
5:Q2=12;
6:Q2=12;
7:Q2=12;
8:Q2=10;
9:Q2=10;  
10:Q2=10; 
11:Q2=10; 
12:Q2=12;   
13:Q2=12;    
14:Q2=12;   
15:Q2=12; 
16:Q2=15;
17:Q2=15;
18:Q2=15;  
19:Q2=15; 
20:Q2=13; 
21:Q2=13; 
22:Q2=12; 
23:Q2=12;
24:Q2=13; 
25:Q2=13;
26:Q2=13;
27:Q2=13;
28:Q2=10;
29:Q2=10;
30:Q2=10;
31:Q2=10; 
32:Q2=12;
33:Q2=12;
34:Q2=13;
35:Q2=13;
36:Q2=12;
37:Q2=12;
38:Q2=12;
39:Q2=12;
40:Q2=10;
41:Q2=10;
42:Q2=9;
43:Q2=9;
44:Q2=8;
45:Q2=8;  
46:Q2=6; 
47:Q2=6; 
48:Q2=12; 
49:Q2=12; 
50:Q2=10;   
51:Q2=10;  
52:Q2=9;  
53:Q2=9;  
54:Q2=9;  
55:Q2=9;
56:Q2=9; 
57:Q2=9; 
58:Q2=9;  
59:Q2=9; 
60:Q2=10;  
61:Q2=10;  
62:Q2=10; 
63:Q2=10; 
64:Q2=12; 
65:Q2=12; 
66:Q2=12;  
67:Q2=12;  
68:Q2=12;  
69:Q2=12;  
70:Q2=13;  
71:Q2=13;
72:Q2=10;
73:Q2=10; 
74:Q2=10;  
75:Q2=10;  
76:Q2=9;   
77:Q2=9;   
78:Q2=9;   
79:Q2=9; 
80:Q2=8; 
81:Q2=8; 
82:Q2=8;  
83:Q2=8;   
84:Q2=12;  
85:Q2=12;  
86:Q2=12;  
87:Q2=12;
88:Q2=10;  
89:Q2=10; 
90:Q2=10; 
91:Q2=10;   
92:Q2=9;   
93:Q2=9;   
94:Q2=8;  
95:Q2=8; 
96:Q2=6;  
97:Q2=6;  
98:Q2=8;  
99:Q2=8;   
100:Q2=5; 
101:Q2=5;  
102:Q2=5;  
103:Q2=5;
default:Q2=0;
endcase
end

endmodule

4分频:module div4(clk1,clkout4);
input clk1;
output clkout4;
reg clkout4;
reg [31:0]q1;
always @(posedge clk1)
begin 
if (q1==6249999)
begin q1=0;
clkout4=!clkout4;
end
else
q1=q1+1;
end

endmodule

预置数译码器:module dcodec(din,origin);
input [4:0]din;
output [31:0]origin;
reg [31:0]origin;
always@(din)
begin
case(din)
0:origin=50000000;
1:origin=95749; 
2:origin=85266;  
3:origin=75965;
4:origin=71695;      
5:origin=63857;  
6:origin=56883;    
7:origin=50669;   
8:origin=47819;
9:origin=42604;  
10:origin=37948; 
11:origin=35817;
12:origin=31908;
13:origin=28425; 
14:origin=25332; 
15:origin=23901;
16:origin=21291; 
17:origin=18962; 
18:origin=17903;  
19:origin=15949;
20:origin=14209;  
21:origin=12658; 
default :origin=50000000;
endcase
end

endmodule

任意分频器:module divb(clk2,clkoutb,origin);
input clk2;
input[31:0]origin;
output clkoutb;
reg clkoutb;
reg [31:0]q2;
always @(posedge clk2)
begin 
if (q2==origin)
begin q2=0;
clkoutb=!clkoutb;
end
else
q2<=q2+1;
end

endmodule

顶层模块:module song(clk,speaker);
input clk;
output speaker;
wire A1,A2,A3;
wire[7:0]B1;
wire[4:0]B2;
wire[31:0]C3;
reg speaker;
div4 u1(.clk1(clk),.clkout4(A1));
count u2(.clk4(A1),.num(B1),.full(A2));
decodeA u3(.Qin(B1),.Q2(B2));
dcodec u4(.din(B2),.origin(C3));
divb u5(.clk2(clk),.clkoutb(A3),.origin(C3));
always@(posedge A3)
begin
speaker=!speaker;
end
endmodule


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值