-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmultiwave.v
129 lines (112 loc) · 2.22 KB
/
multiwave.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
module multiwave(
clk ,
rst_n ,
key_multiwave ,
dac_mode ,
dac_clka ,
dac_da ,
dac_wra ,
dac_sleep
);
input clk ;
input rst_n ;
input [2:0] key_multiwave ;
output dac_mode ;
output dac_clka ;
output [8-1 : 0] dac_da ;
output dac_wra ;
output dac_sleep ;
reg [7:0] addr_sin ;
reg [7:0] addr_juchi ;
reg [7:0] addr_rec ;
reg [7:0] addr_trig ;
wire [2:0] key_multiwave ;
wire [7:0] sin_q ;
wire [7:0] juchi_q ;
wire [7:0] rec_q ;
wire [7:0] trig_q ;
wire [7:0] q ;
reg [7:0] dac_da ;
wire dac_sleep ;
wire dac_wra ;
wire dac_clka ;
wire dac_mode ;
/*例化4个rom*/
my_sin mysin(
.address (addr_sin ),
.clock (clk ),
.q (sin_q )
);
my_juchi myjuchi(
.address (addr_juchi ),
.clock (clk ),
.q (juchi_q )
);
my_rec myrec(
.address (addr_rec ),
.clock (clk ),
.q (rec_q )
);
my_trig mytrig(
.address (addr_trig ),
.clock (clk ),
.q (trig_q )
);
/*rom地址加一*/
always @ (posedge clk or negedge rst_n) begin
if(rst_n == 1'b0) begin
addr_sin <= 8'b0;
end
else if(key_multiwave==0)
addr_sin <= addr_sin + 1;
else
addr_sin <= 0;
end
always @ (posedge clk or negedge rst_n) begin
if(rst_n == 1'b0) begin
addr_juchi <= 8'b0;
end
else if(key_multiwave==1)
addr_juchi <= addr_juchi + 1;
else
addr_juchi <= 0;
end
always @ (posedge clk or negedge rst_n) begin
if(rst_n == 1'b0) begin
addr_rec <= 8'b0;
end
else if(key_multiwave==2)
addr_rec <= addr_rec + 1;
else
addr_rec <= 0;
end
always @ (posedge clk or negedge rst_n) begin
if(rst_n == 1'b0) begin
addr_trig <= 8'b0;
end
else if(key_multiwave==3)
addr_trig <= addr_trig + 1;
else
addr_trig <= 0;
end
//assign q = sin_q | juchi_q | rec_q | trig_q;
always @ (posedge clk or negedge rst_n) begin
if(rst_n == 1'b0) begin
dac_da <= 0;
end
else if(key_multiwave==0)
dac_da <= sin_q;
else if(key_multiwave==1)
dac_da <= juchi_q;
else if(key_multiwave==2)
dac_da <= rec_q;
else if(key_multiwave==3)
dac_da <= trig_q;
else
dac_da <= sin_q;
end
assign dac_sleep = 0 ;
assign dac_wra = dac_clka;
assign dac_mode = 1 ;
assign dac_clka = ~clk ;
endmodule