// credit_counter.sv — tracks free buffer credits (contains a deliberate bug) module credit_counter #( parameter int MAX = 12 ) ( input logic clk, input logic rst, // synchronous, active-high input logic inc, // a credit is returned input logic dec, // a credit is consumed output logic [3:0] credits ); always_ff @(posedge clk) begin if (rst) begin credits <= 4'(MAX); // all slots free after reset end else begin case ({inc, dec}) 2'b10: if (credits != 4'(MAX)) credits <= credits + 4'd1; 2'b01: credits <= credits - 4'd1; // BUG: no guard at zero default: credits <= credits; // both or neither: no change endcase end end endmodule