{
  "SPDX-License-Identifier": "AGPL-3.0-or-later",
  "schema_version": "2.0.0",
  "verifier": "tools/run_formal.py --suite all",
  "task_count": 11,
  "proof_inventory": {
    "basis": "curated semantic claims and non-vacuity witnesses from hdl/formal/property_catalogue.json; these stable IDs are the public proof inventory",
    "specification_target": {
      "safety": 30,
      "liveness": 25,
      "timing": 15,
      "total": 70
    },
    "catalogued_properties": {
      "safety": 25,
      "liveness": 8,
      "timing": 7,
      "total": 40
    },
    "meets_specification_target": false
  },
  "raw_statement_hygiene": {
    "basis": "assert/cover/assume statement count over each task's resolved SystemVerilog sources (including shared `include headers); a statement inside a generate loop or macro definition counts once, and shared definitions can appear in multiple tasks; these counts detect drift but do not identify proof claims",
    "per_suite": {
      "safety": {
        "asserts": 33,
        "covers": 12,
        "assumes": 3
      },
      "liveness": {
        "asserts": 28,
        "covers": 8,
        "assumes": 2
      },
      "timing": {
        "asserts": 16,
        "covers": 16,
        "assumes": 4
      }
    },
    "total": {
      "asserts": 77,
      "covers": 36,
      "assumes": 9
    }
  },
  "tasks": [
    {
      "suite": "safety",
      "name": "mif_adc_to_spike_quantiser_safety",
      "sby": "hdl/formal/safety/mif_adc_to_spike_quantiser_safety.sby",
      "mode": "prove",
      "depth": 12,
      "depth_interpretation": "k-induction horizon",
      "depth_rationale": "Prove mode uses k-induction. The properties need reset anchoring plus one defined $past cycle; depth 12 conservatively exceeds that two-cycle semantic horizon while exercising presentation, stall, acceptance, and queued-event state transitions.",
      "engines": [
        "smtbmc z3"
      ],
      "expected_status": "pass",
      "depends_on": [
        {
          "path": "hdl/formal/mif_adc_to_spike_quantiser_formal.sv",
          "sha256": "f877ea6043ba9cd31ab5d5b5d3a7a7994aa03ac59971169cb69097f9950020b1"
        },
        {
          "path": "hdl/formal/safety/mif_adc_to_spike_quantiser_safety.sby",
          "sha256": "a795db1e40a2eef3e04adfe2936250f83553438f77ac89f69ed221f03b710c7d"
        },
        {
          "path": "hdl/src/sensors/adc_to_spike_quantiser.sv",
          "sha256": "46683cd4be84e1f5306f490f2cc3ce6b677492b46b34998e7f19c178513d66fa"
        }
      ],
      "named_properties": [
        {
          "id": "mif.adc.backpressure.valid-held",
          "kind": "assertion",
          "statement": "A presented AER event remains valid while the sink is stalled."
        },
        {
          "id": "mif.adc.backpressure.address-stable",
          "kind": "assertion",
          "statement": "The presented AER address remains stable while the sink is stalled."
        },
        {
          "id": "mif.adc.address.legal",
          "kind": "assertion",
          "statement": "The AER address is always one of the configured positive or negative spike codes."
        },
        {
          "id": "mif.adc.handshake.withdraw-requires-ready",
          "kind": "assertion",
          "statement": "A valid event can be withdrawn only after an accepting ready cycle."
        },
        {
          "id": "mif.adc.handshake.address-change-requires-valid",
          "kind": "assertion",
          "statement": "The AER address changes only while a live event is presented."
        }
      ],
      "raw_statement_counts": {
        "asserts": 5,
        "covers": 3,
        "assumes": 1
      }
    },
    {
      "suite": "safety",
      "name": "mif_aer_cdc_synchroniser_safety",
      "sby": "hdl/formal/safety/mif_aer_cdc_synchroniser_safety.sby",
      "mode": "prove",
      "depth": 8,
      "depth_interpretation": "k-induction horizon",
      "depth_rationale": "Prove mode uses k-induction. Depth 8 covers the reset edge, the two-destination-cycle reference-pipeline warm-up, and the one-cycle registered-stage history with additional induction margin.",
      "engines": [
        "smtbmc z3"
      ],
      "expected_status": "pass",
      "depends_on": [
        {
          "path": "hdl/formal/mif_aer_cdc_synchroniser_formal.sv",
          "sha256": "f321d53a92323e7ee06e03282bf03ec380a5c85c00419779e61e2dce46534cc1"
        },
        {
          "path": "hdl/formal/safety/mif_aer_cdc_synchroniser_safety.sby",
          "sha256": "52d52d23ade97e9a912e99e5697c16de382467ed1c1a44b3e7fcec6c4f6609e6"
        },
        {
          "path": "hdl/formal/timing/timing_assertions.svh",
          "sha256": "d0a0a1f941364e523d58af4b5a4d272634d7f317264a5f2a30f9d53967c8246b"
        },
        {
          "path": "hdl/formal/timing/timing_wrapper_lib.sv",
          "sha256": "8434b442e7866a39fb9179a7dd093d78fd798e18efe59547afd4bf28e09381b2"
        },
        {
          "path": "hdl/src/aer/mif_aer_cdc_synchroniser.sv",
          "sha256": "bb8f70a177b4d8eac25a1412c86f97501bc932c80c688d341709b8159b9bb961"
        }
      ],
      "named_properties": [
        {
          "id": "mif.aer-cdc.output.exact-two-stage-delay",
          "kind": "assertion",
          "statement": "The synchronised output equals the asynchronous input delayed by exactly two destination flops after warm-up."
        },
        {
          "id": "mif.aer-cdc.output.registered-second-stage",
          "kind": "assertion",
          "statement": "The synchronised output is a pure registered copy of the first-stage sample, with no combinational bypass."
        },
        {
          "id": "mif.aer-cdc.input.registered-first-stage",
          "kind": "assertion",
          "statement": "The first synchroniser stage is the asynchronous input sampled on the preceding destination edge."
        }
      ],
      "raw_statement_counts": {
        "asserts": 5,
        "covers": 4,
        "assumes": 1
      }
    },
    {
      "suite": "safety",
      "name": "mif_fast_veto_gate_safety",
      "sby": "hdl/formal/safety/mif_fast_veto_gate_safety.sby",
      "mode": "prove",
      "depth": 2,
      "depth_interpretation": "k-induction horizon",
      "depth_rationale": "Prove mode uses k-induction, but the DUT and properties are combinational. Depth 2 supplies a solver scheduling edge and an induction step; no temporal state or $past history exists in this task.",
      "engines": [
        "smtbmc z3"
      ],
      "expected_status": "pass",
      "depends_on": [
        {
          "path": "hdl/formal/mif_fast_veto_gate_formal.sv",
          "sha256": "3981bc71002734cb9df548f86bec4639a81594657655215b276029a3b8a5d600"
        },
        {
          "path": "hdl/formal/safety/mif_fast_veto_gate_safety.sby",
          "sha256": "354fe9a2cd6c95882a363636c6d3e6eafe321d2734028a3f71cd0db0ed7eef9d"
        },
        {
          "path": "hdl/src/triggers/mif_fast_veto_gate.sv",
          "sha256": "8de67ed04240707ee6e7fca10ce44f74a32985b85f5c88722ee2507ae210cf7c"
        }
      ],
      "named_properties": [
        {
          "id": "mif.fast-veto.veto-dominance",
          "kind": "assertion",
          "statement": "An asserted safety veto immediately blocks permit and fire and raises the veto surface."
        },
        {
          "id": "mif.fast-veto.subtractive-origin",
          "kind": "assertion",
          "statement": "A fast fire can only pass through an existing qualified fire under a live permit."
        },
        {
          "id": "mif.fast-veto.permit.exact-gating",
          "kind": "assertion",
          "statement": "The permit exactly equals the armed, bank-ready, unvetoed threshold predicate."
        },
        {
          "id": "mif.fast-veto.interlock.exact-mirror",
          "kind": "assertion",
          "statement": "The exposed veto-active signal exactly mirrors the safety veto."
        },
        {
          "id": "mif.fast-veto.disarm-blocks-output",
          "kind": "assertion",
          "statement": "A disarmed lane emits neither permit nor fire."
        },
        {
          "id": "mif.fast-veto.bank-unready-blocks-permit",
          "kind": "assertion",
          "statement": "A bank that is not ready cannot receive a fast permit."
        }
      ],
      "raw_statement_counts": {
        "asserts": 10,
        "covers": 2,
        "assumes": 0
      }
    },
    {
      "suite": "safety",
      "name": "mif_trigger_fabric_safety",
      "sby": "hdl/formal/safety/mif_trigger_fabric_safety.sby",
      "mode": "prove",
      "depth": 14,
      "depth_interpretation": "k-induction horizon",
      "depth_rationale": "Prove mode uses k-induction. With LOCK_HOLD_CYCLES=5, depth 14 spans reset, a complete five-cycle debounce, the following one-shot latch, disarm/reload, and another full debounce horizon, while all $past properties have defined history.",
      "engines": [
        "smtbmc z3"
      ],
      "expected_status": "pass",
      "depends_on": [
        {
          "path": "hdl/formal/mif_trigger_fabric_formal.sv",
          "sha256": "2b34b84294f3fa5fe79271d022159beb9ae50a3f4d664f3f030917e3d2198b76"
        },
        {
          "path": "hdl/formal/safety/mif_trigger_fabric_safety.sby",
          "sha256": "d067743df3719c5ec8eeccbd7cd9cf00c96cdf5a4d7426cc84cd80e210dd6c32"
        },
        {
          "path": "hdl/src/triggers/mif_trigger_fabric.sv",
          "sha256": "03c09f3a60b84af3eb993143943bef332af3d34cb9763a685318acae50d9811d"
        }
      ],
      "named_properties": [
        {
          "id": "mif.trigger-fabric.veto-dominance",
          "kind": "assertion",
          "statement": "A safety veto prevents a trigger."
        },
        {
          "id": "mif.trigger-fabric.fire.exact-final-step",
          "kind": "assertion",
          "statement": "A trigger occurs only on the final debounce step before the one-shot is latched."
        },
        {
          "id": "mif.trigger-fabric.fire.full-gating",
          "kind": "assertion",
          "statement": "A trigger requires arm, bank readiness, no veto, and a current lock."
        },
        {
          "id": "mif.trigger-fabric.one-shot.blocks-retrigger",
          "kind": "assertion",
          "statement": "A latched one-shot blocks concurrent retriggering."
        },
        {
          "id": "mif.trigger-fabric.counter.legal-range",
          "kind": "assertion",
          "statement": "The debounce counter never exceeds its configured reload value."
        },
        {
          "id": "mif.trigger-fabric.lock.bounded-resolution",
          "kind": "assertion",
          "statement": "A sustained armed lock cannot exceed the debounce bound without the one-shot firing."
        },
        {
          "id": "mif.trigger-fabric.trigger.latches-one-shot",
          "kind": "assertion",
          "statement": "A trigger latches the fired state on the next cycle."
        },
        {
          "id": "mif.trigger-fabric.one-shot.persists-while-armed",
          "kind": "assertion",
          "statement": "Once fired, the one-shot remains latched throughout continuous arming."
        },
        {
          "id": "mif.trigger-fabric.disarm.reloads-and-clears",
          "kind": "assertion",
          "statement": "Disarming reloads the debounce counter and clears the one-shot on the next edge."
        },
        {
          "id": "mif.trigger-fabric.broken-lock.reloads",
          "kind": "assertion",
          "statement": "A broken lock reloads the full debounce requirement."
        },
        {
          "id": "mif.trigger-fabric.counter.monotone-countdown",
          "kind": "assertion",
          "statement": "A sustained armed lock decrements a nonzero debounce counter by exactly one per cycle."
        }
      ],
      "raw_statement_counts": {
        "asserts": 13,
        "covers": 3,
        "assumes": 1
      }
    },
    {
      "suite": "liveness",
      "name": "mif_adc_to_spike_quantiser_liveness",
      "sby": "hdl/formal/liveness/mif_adc_to_spike_quantiser_liveness.sby",
      "mode": "cover",
      "depth": 20,
      "depth_interpretation": "bounded witness horizon",
      "depth_rationale": "Cover mode uses bounded model checking. Depth 20 comfortably spans reset release, event accumulation and presentation, at least one stalled cycle, and the subsequent ready-cycle drain witness.",
      "engines": [
        "smtbmc z3"
      ],
      "expected_status": "pass",
      "depends_on": [
        {
          "path": "hdl/formal/liveness/mif_adc_to_spike_quantiser_liveness.sby",
          "sha256": "5ca5fa906bee512f384d825388c7bc0ae6958b3b8b0450ef92f4fa3b2e9164cd"
        },
        {
          "path": "hdl/formal/mif_adc_to_spike_quantiser_formal.sv",
          "sha256": "f877ea6043ba9cd31ab5d5b5d3a7a7994aa03ac59971169cb69097f9950020b1"
        },
        {
          "path": "hdl/src/sensors/adc_to_spike_quantiser.sv",
          "sha256": "46683cd4be84e1f5306f490f2cc3ce6b677492b46b34998e7f19c178513d66fa"
        }
      ],
      "named_properties": [
        {
          "id": "mif.adc.witness.event-presentable",
          "kind": "cover",
          "statement": "An AER event can be presented."
        },
        {
          "id": "mif.adc.witness.backpressure-reachable",
          "kind": "cover",
          "statement": "A presented event can encounter sink back-pressure."
        },
        {
          "id": "mif.adc.witness.stalled-event-drains",
          "kind": "cover",
          "statement": "A stalled event can be accepted when the sink returns ready."
        }
      ],
      "raw_statement_counts": {
        "asserts": 5,
        "covers": 3,
        "assumes": 1
      }
    },
    {
      "suite": "liveness",
      "name": "mif_fast_veto_gate_liveness",
      "sby": "hdl/formal/liveness/mif_fast_veto_gate_liveness.sby",
      "mode": "cover",
      "depth": 2,
      "depth_interpretation": "bounded witness horizon",
      "depth_rationale": "Cover mode uses bounded model checking. The DUT is combinational, so depth 2 is sufficient to schedule and witness both a permitted fire and a same-cycle veto suppression without temporal warm-up.",
      "engines": [
        "smtbmc z3"
      ],
      "expected_status": "pass",
      "depends_on": [
        {
          "path": "hdl/formal/liveness/mif_fast_veto_gate_liveness.sby",
          "sha256": "f016304d91537c9c92fe4c98edf4e8e82a73bc14d0e880a9b397304b01ac9acb"
        },
        {
          "path": "hdl/formal/mif_fast_veto_gate_formal.sv",
          "sha256": "3981bc71002734cb9df548f86bec4639a81594657655215b276029a3b8a5d600"
        },
        {
          "path": "hdl/src/triggers/mif_fast_veto_gate.sv",
          "sha256": "8de67ed04240707ee6e7fca10ce44f74a32985b85f5c88722ee2507ae210cf7c"
        }
      ],
      "named_properties": [
        {
          "id": "mif.fast-veto.witness.fire-reachable",
          "kind": "cover",
          "statement": "A qualified and permitted fast fire is reachable."
        },
        {
          "id": "mif.fast-veto.witness.veto-suppression-reachable",
          "kind": "cover",
          "statement": "A qualified fire suppressed by an asserted veto is reachable."
        }
      ],
      "raw_statement_counts": {
        "asserts": 10,
        "covers": 2,
        "assumes": 0
      }
    },
    {
      "suite": "liveness",
      "name": "mif_trigger_fabric_liveness",
      "sby": "hdl/formal/liveness/mif_trigger_fabric_liveness.sby",
      "mode": "cover",
      "depth": 20,
      "depth_interpretation": "bounded witness horizon",
      "depth_rationale": "Cover mode uses bounded model checking. Depth 20 exceeds reset plus the five-cycle debounce, trigger and one-shot latch, disarm clear, and a second arming horizon, so all three non-vacuity witnesses fit in one bound.",
      "engines": [
        "smtbmc z3"
      ],
      "expected_status": "pass",
      "depends_on": [
        {
          "path": "hdl/formal/liveness/mif_trigger_fabric_liveness.sby",
          "sha256": "91cc2f60a135b67b7959b2d25b3e3c49254d8a8f25ece0e6ab38ef8e96627961"
        },
        {
          "path": "hdl/formal/mif_trigger_fabric_formal.sv",
          "sha256": "2b34b84294f3fa5fe79271d022159beb9ae50a3f4d664f3f030917e3d2198b76"
        },
        {
          "path": "hdl/src/triggers/mif_trigger_fabric.sv",
          "sha256": "03c09f3a60b84af3eb993143943bef332af3d34cb9763a685318acae50d9811d"
        }
      ],
      "named_properties": [
        {
          "id": "mif.trigger-fabric.witness.trigger-reachable",
          "kind": "cover",
          "statement": "A trigger is reachable."
        },
        {
          "id": "mif.trigger-fabric.witness.fire-at-latency-bound",
          "kind": "cover",
          "statement": "The trigger can fire on the configured final debounce step."
        },
        {
          "id": "mif.trigger-fabric.witness.one-shot-clear-reachable",
          "kind": "cover",
          "statement": "The fired one-shot can clear, permitting a later re-arm."
        }
      ],
      "raw_statement_counts": {
        "asserts": 13,
        "covers": 3,
        "assumes": 1
      }
    },
    {
      "suite": "timing",
      "name": "mif_aer_cdc_synchroniser_stage_timing",
      "sby": "hdl/formal/timing/mif_aer_cdc_synchroniser_stage_timing.sby",
      "mode": "prove",
      "depth": 10,
      "depth_interpretation": "k-induction horizon",
      "depth_rationale": "Prove mode uses k-induction. Depth 10 exceeds reset, reference-history warm-up, both one-cycle stage deadlines, and their monitor-observation edges, leaving induction margin beyond the two-cycle end-to-end contract.",
      "engines": [
        "smtbmc z3"
      ],
      "expected_status": "pass",
      "depends_on": [
        {
          "path": "hdl/formal/timing/mif_aer_cdc_synchroniser_stage_timing.sby",
          "sha256": "14e70ae1a74dfbcb7872715fda5c94a8f4dd571164554eb1496c3b0afd6ad977"
        },
        {
          "path": "hdl/formal/timing/mif_aer_cdc_synchroniser_stage_timing.sv",
          "sha256": "7644a760a6cdf0b291472b3242b5eec61448981b22a6afded313a2c60fc07992"
        },
        {
          "path": "hdl/formal/timing/timing_assertions.svh",
          "sha256": "d0a0a1f941364e523d58af4b5a4d272634d7f317264a5f2a30f9d53967c8246b"
        },
        {
          "path": "hdl/formal/timing/timing_wrapper_lib.sv",
          "sha256": "8434b442e7866a39fb9179a7dd093d78fd798e18efe59547afd4bf28e09381b2"
        },
        {
          "path": "hdl/src/aer/mif_aer_cdc_synchroniser.sv",
          "sha256": "bb8f70a177b4d8eac25a1412c86f97501bc932c80c688d341709b8159b9bb961"
        }
      ],
      "named_properties": [
        {
          "id": "mif.aer-cdc.timing.stage-one-within-one-cycle",
          "kind": "assertion",
          "statement": "An input/first-stage disagreement is captured within one destination cycle."
        },
        {
          "id": "mif.aer-cdc.timing.stage-two-within-one-cycle",
          "kind": "assertion",
          "statement": "A first-stage/output disagreement advances into the second stage within one destination cycle."
        }
      ],
      "raw_statement_counts": {
        "asserts": 4,
        "covers": 4,
        "assumes": 1
      }
    },
    {
      "suite": "timing",
      "name": "mif_fast_veto_gate_timing",
      "sby": "hdl/formal/timing/mif_fast_veto_gate_timing.sby",
      "mode": "prove",
      "depth": 10,
      "depth_interpretation": "k-induction horizon",
      "depth_rationale": "Prove mode uses k-induction. Both monitored bounds are zero added cycles; depth 10 conservatively covers reset release, activation, monitor observation, and induction despite the stateless combinational DUT.",
      "engines": [
        "smtbmc z3"
      ],
      "expected_status": "pass",
      "depends_on": [
        {
          "path": "hdl/formal/timing/mif_fast_veto_gate_timing.sby",
          "sha256": "a6266b0712841d6731ae048ebf6cd92bc03b4ae9d77f613b5277b8529c3d1b4e"
        },
        {
          "path": "hdl/formal/timing/mif_fast_veto_gate_timing.sv",
          "sha256": "88e9a97f231b81544e6b750aacdc128cc41d7730ef96c32e2c1e629e38c75578"
        },
        {
          "path": "hdl/formal/timing/timing_assertions.svh",
          "sha256": "d0a0a1f941364e523d58af4b5a4d272634d7f317264a5f2a30f9d53967c8246b"
        },
        {
          "path": "hdl/formal/timing/timing_wrapper_lib.sv",
          "sha256": "8434b442e7866a39fb9179a7dd093d78fd798e18efe59547afd4bf28e09381b2"
        },
        {
          "path": "hdl/src/triggers/mif_fast_veto_gate.sv",
          "sha256": "8de67ed04240707ee6e7fca10ce44f74a32985b85f5c88722ee2507ae210cf7c"
        }
      ],
      "named_properties": [
        {
          "id": "mif.fast-veto.timing.veto-zero-added-cycles",
          "kind": "assertion",
          "statement": "A veto suppresses a pending qualified fire with zero added cycles."
        },
        {
          "id": "mif.fast-veto.timing.disarm-zero-added-cycles",
          "kind": "assertion",
          "statement": "A disarm suppresses a pending qualified fire with zero added cycles."
        }
      ],
      "raw_statement_counts": {
        "asserts": 4,
        "covers": 4,
        "assumes": 1
      }
    },
    {
      "suite": "timing",
      "name": "mif_trigger_fabric_response_timing",
      "sby": "hdl/formal/timing/mif_trigger_fabric_response_timing.sby",
      "mode": "prove",
      "depth": 20,
      "depth_interpretation": "k-induction horizon",
      "depth_rationale": "Prove mode uses k-induction. Depth 20 spans reset, arbitrary reachable debounce/one-shot state, each one-cycle control-response deadline, and more than two complete five-cycle debounce horizons.",
      "engines": [
        "smtbmc z3"
      ],
      "expected_status": "pass",
      "depends_on": [
        {
          "path": "hdl/formal/timing/mif_trigger_fabric_response_timing.sby",
          "sha256": "2d99cb2137c1e4f62591cf16ae68f2fd5904d4edfca44a666921a819c8f1962a"
        },
        {
          "path": "hdl/formal/timing/mif_trigger_fabric_response_timing.sv",
          "sha256": "8539aedea62048039161f0fc70afc40db1202e0311ef677d7c8c0129c9dec6c9"
        },
        {
          "path": "hdl/formal/timing/timing_assertions.svh",
          "sha256": "d0a0a1f941364e523d58af4b5a4d272634d7f317264a5f2a30f9d53967c8246b"
        },
        {
          "path": "hdl/formal/timing/timing_wrapper_lib.sv",
          "sha256": "8434b442e7866a39fb9179a7dd093d78fd798e18efe59547afd4bf28e09381b2"
        },
        {
          "path": "hdl/src/triggers/mif_trigger_fabric.sv",
          "sha256": "03c09f3a60b84af3eb993143943bef332af3d34cb9763a685318acae50d9811d"
        }
      ],
      "named_properties": [
        {
          "id": "mif.trigger-fabric.timing.disarm-response-within-one-cycle",
          "kind": "assertion",
          "statement": "A disarm reloads the debounce and clears the one-shot within one cycle."
        },
        {
          "id": "mif.trigger-fabric.timing.veto-reload-within-one-cycle",
          "kind": "assertion",
          "statement": "An armed veto reloads the debounce within one cycle."
        }
      ],
      "raw_statement_counts": {
        "asserts": 4,
        "covers": 4,
        "assumes": 1
      }
    },
    {
      "suite": "timing",
      "name": "mif_trigger_fabric_timing",
      "sby": "hdl/formal/timing/mif_trigger_fabric_timing.sby",
      "mode": "prove",
      "depth": 20,
      "depth_interpretation": "k-induction horizon",
      "depth_rationale": "Prove mode uses k-induction. The monitor bound is LOCK_HOLD_CYCLES+1 (six cycles at the harness default); depth 20 exceeds reset, one complete monitored resolution window, and a second full window for induction closure.",
      "engines": [
        "smtbmc z3"
      ],
      "expected_status": "pass",
      "depends_on": [
        {
          "path": "hdl/formal/timing/mif_trigger_fabric_timing.sby",
          "sha256": "9368849a0eab505415f93553346b89eebf0351f0af462e03232d822f833ba125"
        },
        {
          "path": "hdl/formal/timing/mif_trigger_fabric_timing.sv",
          "sha256": "3208cad33c2250e6b939326ea89883a94aa9dcc82d479593217a75fb721158b1"
        },
        {
          "path": "hdl/formal/timing/timing_assertions.svh",
          "sha256": "d0a0a1f941364e523d58af4b5a4d272634d7f317264a5f2a30f9d53967c8246b"
        },
        {
          "path": "hdl/formal/timing/timing_wrapper_lib.sv",
          "sha256": "8434b442e7866a39fb9179a7dd093d78fd798e18efe59547afd4bf28e09381b2"
        },
        {
          "path": "hdl/src/triggers/mif_trigger_fabric.sv",
          "sha256": "03c09f3a60b84af3eb993143943bef332af3d34cb9763a685318acae50d9811d"
        }
      ],
      "named_properties": [
        {
          "id": "mif.trigger-fabric.timing.lock-resolution-within-six-cycles",
          "kind": "assertion",
          "statement": "A qualified lock resolves by trigger, lock loss, or an existing one-shot within LOCK_HOLD_CYCLES+1 cycles."
        }
      ],
      "raw_statement_counts": {
        "asserts": 4,
        "covers": 4,
        "assumes": 1
      }
    }
  ]
}
