summaryrefslogtreecommitdiff
path: root/rtl/gfx/gfx_fifo_overflow.sv
blob: c9cb3def4a8cfc2968cea3cdd82054d7ffd53949 (plain)
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
`include "gfx/gfx_defs.sv"

module gfx_fifo_overflow
#(parameter DEPTH=0)
(
	input  logic clk,
	             rst_n,

	input  logic down,
	             out_ready,
	             out_valid,

	output logic empty,
	             down_safe
);

	logic up;
	logic[$clog2(DEPTH + 1) - 1:0] pending;

	assign up = out_ready && out_valid;
	assign empty = pending == 0;
	assign down_safe = up || pending < DEPTH - 1;

	always_ff @(posedge clk or negedge rst_n)
		if (!rst_n)
			pending <= 0;
		else begin
			if (up && !down)
				pending <= pending - 1;
			else if (!up && down)
				pending <= pending + 1;
		end

endmodule