Cosim timing
Concept
Cycle-timing validation compares Python timing measurements against Vitis cosim reports and records a structured verdict. The flow combines Python-side extraction, cosim report parsing, and tolerance-based comparison.
This keeps timing checks reproducible and machine-readable: build runs always produce JSON artifacts, and failures halt with explicit delta/tolerance diagnostics.
API
ExtractPyTimingStepproduces Python timing JSON.ExtractCosimTimingStepparses cosim report data.ValidateTimingStepemitstiming_verdictand enforces tolerance.CosimReportParserhandles 2025.1+*_cosim.rptand legacycosim.log.
Example
From examples/stream_inband/poly_build.py, the timing-check segment wires the three-step chain:
outer_dag.add(ExtractPyTimingStep(...))
outer_dag.add(ExtractCosimTimingStep(top=top_name, report_dir_artifact="report_dir"))
outer_dag.add(ValidateTimingStep(tolerance_cycles=timing_tol_cycles))
On the poly reference run from PR #31, the recorded result reports a delta=4 cycle difference between Python and RTL cosim.
Quick reference
- Cosim parser prefers
<top>_cosim.rpt, then falls back tocosim.log. ValidateTimingStepalways writestiming_verdict.json.- Pass rule:
abs(py_cycles - cosim_cycles) <= tolerance_cycles. - Failure raises
RuntimeErrorafter writing verdict output. - Use structured artifacts for regression tracking and future model fitting.