-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontroller.sv
More file actions
47 lines (40 loc) · 993 Bytes
/
Copy pathcontroller.sv
File metadata and controls
47 lines (40 loc) · 993 Bytes
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
module controller (
input rclk, wclk, arst, ren, wen,
output rclken, wclken, full, empty,
output reg [5:0] rptr, wptr,
output reg [5:0] gauge
);
logic f, e;
always_ff @ (posedge rclk, posedge arst)
if (arst) rptr <= 0;
else if (ren && !e && rptr==6'h20) rptr <= 0;
else if (ren && !e) rptr <= rptr + 1;
always_ff @ (posedge wclk, posedge arst)
if (arst) wptr <= 0;
else if (wen && !f && wptr==6'h20) wptr <= 0;
else if (wen && !f) wptr <= wptr + 1;
always_comb
if (wptr+1==rptr || (wptr==6'h20 && rptr==0))
begin
f <= 1;
e <= 0;
end
else
if (rptr == wptr)
begin
f <= 0;
e <= 1;
end
else
begin
f <= 0;
e <= 0;
end
always_comb
if (wptr >= rptr) gauge = wptr - rptr;
else gauge = 6'd33 + wptr - rptr;
assign full = f;
assign empty = e;
assign wclken = !f;
assign rclken = !e;
endmodule