`timescale 1ns / 1ps

module tb_order_token_bucket_throttle;
    reg clk;
    reg rst;
    reg [4:0] bucket_capacity;
    reg [8:0] refill_period;
    reg order_req;

    wire accept;
    wire reject;

    integer errors = 0;
    integer tests_run = 0;
    integer cycle_count = 0;

    order_token_bucket_throttle uut (
        .clk(clk),
        .rst(rst),
        .bucket_capacity(bucket_capacity),
        .refill_period(refill_period),
        .order_req(order_req),
        .accept(accept),
        .reject(reject)
    );

    initial begin
        clk = 1'b0;
        forever #5 clk = ~clk;
    end

    task step_cycle;
        input [255:0] tag;
        input next_rst;
        input [4:0] next_bucket_capacity;
        input [8:0] next_refill_period;
        input next_order_req;
        input expected_accept;
        input expected_reject;
        begin
            @(negedge clk);
            rst = next_rst;
            bucket_capacity = next_bucket_capacity;
            refill_period = next_refill_period;
            order_req = next_order_req;

            #1;

            cycle_count = cycle_count + 1;
            tests_run = tests_run + 1;

            if (accept !== expected_accept) begin
                $display("ERROR [cycle %0d][%0s]: accept mismatch. expected=%b got=%b rst=%b capacity=%0d period=%0d order_req=%b",
                         cycle_count, tag, expected_accept, accept,
                         next_rst, next_bucket_capacity, next_refill_period, next_order_req);
                errors = errors + 1;
            end

            if (reject !== expected_reject) begin
                $display("ERROR [cycle %0d][%0s]: reject mismatch. expected=%b got=%b rst=%b capacity=%0d period=%0d order_req=%b",
                         cycle_count, tag, expected_reject, reject,
                         next_rst, next_bucket_capacity, next_refill_period, next_order_req);
                errors = errors + 1;
            end

            if ((accept === 1'b1) && (reject === 1'b1)) begin
                $display("ERROR [cycle %0d][%0s]: accept and reject are both high", cycle_count, tag);
                errors = errors + 1;
            end

            if (!next_order_req && ((accept !== 1'b0) || (reject !== 1'b0))) begin
                $display("ERROR [cycle %0d][%0s]: outputs must both be zero when order_req=0", cycle_count, tag);
                errors = errors + 1;
            end

            @(posedge clk);
            #1;
        end
    endtask

    initial begin
        rst = 1'b1;
        bucket_capacity = 5'd4;
        refill_period = 9'd3;
        order_req = 1'b0;

        $display("=================================================");
        $display("  Single-Bucket Order Token Throttle Testbench");
        $display("=================================================");

        // Prime the DUT with a reset edge before checks begin.
        @(posedge clk);
        #1;

        // Generated offline by generate_golden.py and hardcoded here.
        step_cycle("rst_boot_0", 1'b1, 5'd4, 9'd3, 1'b0, 1'b0, 1'b0);
        step_cycle("rst_boot_1", 1'b1, 5'd4, 9'd3, 1'b1, 1'b0, 1'b0);
        step_cycle("post_rst_idle", 1'b0, 5'd4, 9'd3, 1'b0, 1'b0, 1'b0);
        step_cycle("drain_0", 1'b0, 5'd4, 9'd3, 1'b1, 1'b1, 1'b0);
        step_cycle("drain_1", 1'b0, 5'd4, 9'd3, 1'b1, 1'b1, 1'b0);
        step_cycle("drain_2", 1'b0, 5'd4, 9'd3, 1'b1, 1'b1, 1'b0);
        step_cycle("refill_then_take", 1'b0, 5'd4, 9'd3, 1'b1, 1'b1, 1'b0);
        step_cycle("drain_last", 1'b0, 5'd4, 9'd3, 1'b1, 1'b1, 1'b0);
        step_cycle("same_empty_refill_accept", 1'b0, 5'd4, 9'd3, 1'b1, 1'b1, 1'b0);
        step_cycle("empty_reject_after_refill", 1'b0, 5'd4, 9'd3, 1'b1, 1'b0, 1'b1);
        step_cycle("idle_refill", 1'b0, 5'd4, 9'd3, 1'b0, 1'b0, 1'b0);
        step_cycle("consume_after_idle", 1'b0, 5'd4, 9'd3, 1'b1, 1'b1, 1'b0);
        step_cycle("idle_to_full_0", 1'b0, 5'd4, 9'd3, 1'b0, 1'b0, 1'b0);
        step_cycle("idle_to_full_1", 1'b0, 5'd4, 9'd3, 1'b0, 1'b0, 1'b0);
        step_cycle("idle_to_full_2", 1'b0, 5'd4, 9'd3, 1'b0, 1'b0, 1'b0);
        step_cycle("idle_to_full_3", 1'b0, 5'd4, 9'd3, 1'b0, 1'b0, 1'b0);
        step_cycle("idle_to_full_4", 1'b0, 5'd4, 9'd3, 1'b0, 1'b0, 1'b0);
        step_cycle("cap_refill_and_req", 1'b0, 5'd4, 9'd3, 1'b1, 1'b1, 1'b0);
        step_cycle("rst_midstream", 1'b1, 5'd4, 9'd3, 1'b1, 1'b0, 1'b0);
        step_cycle("post_midrst_req", 1'b0, 5'd4, 9'd3, 1'b1, 1'b1, 1'b0);
        step_cycle("minp_rst", 1'b1, 5'd1, 9'd1, 1'b0, 1'b0, 1'b0);
        step_cycle("minp_req_0", 1'b0, 5'd1, 9'd1, 1'b1, 1'b1, 1'b0);
        step_cycle("minp_req_1", 1'b0, 5'd1, 9'd1, 1'b1, 1'b1, 1'b0);
        step_cycle("minp_idle", 1'b0, 5'd1, 9'd1, 1'b0, 1'b0, 1'b0);
        step_cycle("minp_req_2", 1'b0, 5'd1, 9'd1, 1'b1, 1'b1, 1'b0);
        step_cycle("minp_req_3", 1'b0, 5'd1, 9'd1, 1'b1, 1'b1, 1'b0);
        step_cycle("same_partial_rst", 1'b1, 5'd3, 9'd4, 1'b0, 1'b0, 1'b0);
        step_cycle("same_partial_take0", 1'b0, 5'd3, 9'd4, 1'b1, 1'b1, 1'b0);
        step_cycle("same_partial_take1", 1'b0, 5'd3, 9'd4, 1'b1, 1'b1, 1'b0);
        step_cycle("same_partial_idle0", 1'b0, 5'd3, 9'd4, 1'b0, 1'b0, 1'b0);
        step_cycle("same_partial_refillreq", 1'b0, 5'd3, 9'd4, 1'b1, 1'b1, 1'b0);
        step_cycle("same_partial_follow", 1'b0, 5'd3, 9'd4, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_rst", 1'b1, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_req_0", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_1", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_2", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_3", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_4", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_5", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_6", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_7", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_8", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_9", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_10", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_11", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_12", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_13", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_14", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_15", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_req_16_reject", 1'b0, 5'd16, 9'd256, 1'b1, 1'b0, 1'b1);
        step_cycle("maxp_idle_000", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_001", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_002", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_003", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_004", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_005", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_006", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_007", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_008", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_009", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_010", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_011", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_012", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_013", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_014", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_015", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_016", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_017", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_018", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_019", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_020", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_021", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_022", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_023", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_024", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_025", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_026", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_027", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_028", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_029", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_030", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_031", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_032", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_033", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_034", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_035", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_036", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_037", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_038", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_039", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_040", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_041", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_042", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_043", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_044", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_045", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_046", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_047", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_048", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_049", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_050", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_051", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_052", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_053", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_054", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_055", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_056", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_057", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_058", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_059", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_060", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_061", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_062", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_063", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_064", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_065", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_066", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_067", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_068", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_069", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_070", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_071", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_072", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_073", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_074", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_075", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_076", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_077", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_078", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_079", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_080", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_081", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_082", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_083", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_084", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_085", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_086", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_087", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_088", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_089", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_090", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_091", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_092", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_093", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_094", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_095", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_096", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_097", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_098", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_099", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_100", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_101", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_102", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_103", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_104", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_105", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_106", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_107", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_108", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_109", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_110", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_111", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_112", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_113", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_114", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_115", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_116", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_117", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_118", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_119", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_120", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_121", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_122", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_123", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_124", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_125", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_126", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_127", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_128", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_129", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_130", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_131", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_132", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_133", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_134", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_135", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_136", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_137", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_138", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_139", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_140", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_141", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_142", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_143", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_144", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_145", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_146", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_147", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_148", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_149", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_150", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_151", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_152", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_153", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_154", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_155", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_156", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_157", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_158", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_159", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_160", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_161", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_162", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_163", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_164", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_165", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_166", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_167", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_168", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_169", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_170", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_171", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_172", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_173", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_174", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_175", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_176", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_177", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_178", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_179", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_180", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_181", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_182", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_183", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_184", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_185", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_186", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_187", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_188", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_189", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_190", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_191", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_192", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_193", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_194", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_195", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_196", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_197", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_198", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_199", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_200", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_201", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_202", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_203", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_204", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_205", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_206", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_207", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_208", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_209", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_210", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_211", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_212", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_213", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_214", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_215", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_216", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_217", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_218", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_219", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_220", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_221", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_222", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_223", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_224", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_225", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_226", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_227", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_228", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_229", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_230", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_231", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_232", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_233", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_234", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_235", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_236", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_idle_237", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);
        step_cycle("maxp_refill_accept", 1'b0, 5'd16, 9'd256, 1'b1, 1'b1, 1'b0);
        step_cycle("maxp_post_refill_reject", 1'b0, 5'd16, 9'd256, 1'b1, 1'b0, 1'b1);
        step_cycle("maxp_idle_final", 1'b0, 5'd16, 9'd256, 1'b0, 1'b0, 1'b0);

        $display("");
        $display("=================================================");
        $display("  Tests Run: %0d", tests_run);
        $display("=================================================");

        if (errors == 0) begin
            $display("TEST_RESULT: PASS");
        end else begin
            $display("TEST_RESULT: FAIL (%0d errors)", errors);
        end

        $finish;
    end
endmodule
