请选择 进入手机版 | 继续访问电脑版

集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 889|回复: 1

基于FPGA板的音乐盒的设计

[复制链接]
fpga_feixiang 发表于 2018-12-11 15:38:43 | 显示全部楼层 |阅读模式
计数器:

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)
02=13;
12=13;
22=13;
32=13;
42=12;
52=12;
62=12;
72=12;
82=10;
92=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)
0rigin=50000000;
1rigin=95749; 
2rigin=85266;  
3rigin=75965;
4rigin=71695;      
5rigin=63857;  
6rigin=56883;    
7rigin=50669;   
8rigin=47819;
9rigin=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
zhangyukun 发表于 2018-12-12 09:45:09 | 显示全部楼层
基于FPGA板的音乐盒的设计
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-3-29 20:45 , Processed in 0.100242 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表