// SPDX-License-Identifier: MIT module packet_gate #(parameter DEBUG = 0)( input clk, reset, request, release_slot, debug_request, input [3:0] length, output accepted, debug_accepted, full, empty, impossible, output [1:0] occupancy ); reg [1:0] used = 0; assign full = used == 3; assign empty = used == 0; assign impossible = full && empty; assign occupancy = used; assign accepted = request && !full && length != 0; assign debug_accepted = DEBUG && debug_request && accepted; always @(posedge clk) begin if (reset) used <= 0; else if (accepted && !release_slot) used <= used + 1'b1; else if (release_slot && !empty && !accepted) used <= used - 1'b1; end endmodule