Skip to content
heliaEstimator
Reference
HELIA HUB

Result bundle reference (run_summary.json, schema_version 4)

Every declared block and field of a result bundle’s run_summary.json, as helx show and helx validate bundle read it. Fields with default none are left out of the file when the run did not produce them. run_summary.schema.json next to this page is the same contract as JSON Schema.

Generated by scripts/render_references.py from the models; do not edit by hand.

run_summary.json: the whole bundle, one case per file.

Field Type Default Meaning
schema_version one of 4 required Always 4 for this contract.
generated_at datetime required When the bundle was written; timezone-aware, so two bundles can be ordered without guessing the writer’s clock.
config block ConfigRecord required The config the run was made from.
provenance block Provenance required Everything the numbers rest on: software, platform, target and values status.
contract block ContractBlock required The fixed promises of this result.
run block RunBlock required The case: names, memory mode, platform mode, runtime and NPU size.
source block SourceBlock required Where the model came from.
vela block VelaBlock or null none Vela’s compile-time figures; absent when Vela was bypassed.
fvp block FvpBlock required The FVP stage and its measurements.
memory block MemoryBlock required Placement and footprint.
tensors block TensorEvidence or null none Opt-in fixed input bytes, output specifications and reference comparison context.
measurements block Measurements or null none Indexed measured invocations and explicit population statistics; absent before execution.
vela_energy block EnergyBlock or null none Experimental energy, power and efficiency predicted from Vela’s estimates; never a measurement.
energy_errors dict[one of measured_fvp_pmu, vela_compile_time_estimate, str] or null none Energy estimates that were attempted and failed, keyed by basis (measured_fvp_pmu, vela_compile_time_estimate) with the reason. Absent when every attempted estimate succeeded; a basis listed here has no block above.
per_layer block PerLayerBlock or null none Per-layer attribution artifacts, when requested.
per_segment block PerSegmentBlock or null none Fenced per-segment measurements, when requested.
artifacts block ArtifactsBlock required The files the bundle carries.

The config the run was made from: where it was, and the name of its copy in the bundle.

Field Type Default Meaning
path str required Resolved absolute path of the config the run was made from.
copied_as str required File name of the copy of that config inside the bundle.

Everything a number rests on: software, platform definition, target, and the values’ status.

Field Type Default Meaning
software block SoftwareVersions required Versions of the tools that produced the numbers.
platform block PlatformProvenance or null none The platform definition and the SoC revision behind it.
target block TargetProvenance or null none The realization of the SoC the measurement is attributed to.
values block ValuesProvenance or null none How far the stored hardware values behind the run can be trusted.

The tools that produced the numbers.

Field Type Default Meaning
helx str or null none helx version that wrote the bundle.
helia_npu str or null none helia-npu version (SoC definitions, Vela system config, PMU programs).
vela str or null none Vela compiler version.
python str required Python interpreter version.
fvp_subsystem str or null none Corstone FVP subsystem the runner was built for (corstone_300 or corstone_320), when the FVP stage ran.
fvp_home str or null none The FVP install root (FVP_HOME) the model binary was taken from, so its exact version can be found.

Which platform definition, at which revision, from which kind of source.

Field Type Default Meaning
name str required Platform the run was attributed to: a shipped name or the path the config gave.
revision str or null none The platform history’s current revision label, or the SoC revision when no wrapper history is recorded. Energy-profile identity is recorded separately; compare both when comparing runs.
origin str or null none golden, derived or custom, so a what-if number cannot pass as silicon.
soc_id str or null none Canonical id of the SoC definition the platform rests on, e.g. atomiq110.
soc_revision str or null none Which drop or stepping of the SoC the timing describes: the label with its date, e.g. v8 (2026-09-22).
soc_stage str or null none Where that SoC revision sits in the part’s life: spec, rtl, silicon or released.
energy_profile_id str or null none Selected platform energy-profile id; absent for inline energy or run.energy_model overrides.
energy_profile_revision str or null none Revision of the selected energy characterization.
energy_profile_sha256 str or null none SHA-256 of the captured energy-profile file bytes.

Which realization of the SoC the measurement is attributed to, and whether its timing stands for the part.

Field Type Default Meaning
id str or null none helia-npu target id with its kind, e.g. atomiq110-fvp-corstone-320 (simulator).
timing_is_representative bool or null none True when cycle counts on this target stand for the SoC’s timing; false for FPGA drops at other clock ratios and for simulators.

How far the stored hardware values behind this run can be trusted.

Field Type Default Meaning
status one of confirmed, fitted, unverified or null none The least trusted status among the hardware values the run depends on: confirmed, fitted or unverified.
fitted list[str] or null none Values tuned to reproduce RTL or FPGA measurements, by dotted path; absent when there are none.
unverified list[str] or null none Values that are a specification figure, estimate or placeholder, by dotted path; absent when there are none.

What the bundle promises: one result per config, and the bases every energy number rests on.

Field Type Default Meaning
result one of one_config_one_result required The bundle holds exactly one result for one config.
placement str required Always exact: the placement recorded is the one compiled and run, not a nearest match.
energy_model str required Shape of the energy model: NPU core energy per clocked cycle plus per-bit transfer energy.
core_energy_basis str required Formula for core energy: npu_total_cycles times the reference core energy times the mode scaling.
memory_energy_basis str required Formula for memory energy: completed data beats times per-bit energy times beat width times (1 + logic_overhead).

What was run, on what.

Field Type Default Meaning
case_name str required The case directory name: the model name and the memory mode joined by two underscores.
model str required Model name from the config, or the source file’s stem.
memory_mode str required The Vela [Memory_Mode.*] section compiled: Sram_Only, Shared_Sram, Dedicated_Sram, or const_X__arena_Y__cache_Z for a custom placement.
fvp_memory_mode str required The standard mode the runtime executed; differs from memory_mode only for a custom placement.
mode str or null none Platform operating mode, i.e. the NPU clock: ULP or HP on AT110.
runtime str or null none Inference runtime linked into the runner (tflite_micro, helia_rt or helia_aot), when the FVP stage built.
runtime_backend str or null none Retained heliaRT backend: helia (heliaCORE); unset when the field does not apply.
npu_mac_units int required The NPU’s MAC array size (MAC units per cycle), e.g. 256 for an Ethos-U85-256.
npu_clock_hz float or null none The NPU clock of the mode the run used, Hz; measured cycles divided by it are the inference time.

Where the model came from and where it was cached.

Field Type Default Meaning
given str required The source as the config or the command line spelled it.
uri str required The resolved source URI (file, http, https or s3).
scheme str required URI scheme of the source: file, http, https or s3.
cached_path str required Local path of the model file the run compiled.
cache_mode str required Whether downloaded models survive the run: persistent (kept under the cache root) or ephemeral.
cache_root str required Root directory of the model cache.
bytes int required Size of the model file, bytes.
sha256 str or null none Observed source-model byte digest, distinct from the Vela/runner model digest.

What Vela reported for the compile. Cycles and bytes are Vela’s estimates, not measurements.

Field Type Default Meaning
profile str required helx’s label for the Vela run: the SoC id and mode, the same string as system_config.
system_config str required The [System_Config.*] section of the generated ini: SoC id and mode, e.g. atomiq110_HP.
accelerator str or null none Vela’s accelerator configuration, e.g. Ethos_U85_256.
memory_mode str or null none Vela’s own memory_mode column: the [Memory_Mode.*] section it compiled with.
arena_cache_configured_bytes int required The –arena-cache-size handed to Vela, bytes.
arena_cache_kib float or null none Vela’s own arena_cache_size column, KiB.
core_clock_hz float or null none NPU clock Vela assumed, Hz.
nn_macs float or null none MAC operations in one inference as Vela counted them.
inference_time_s float or null none Vela’s own inference time, seconds: cycles_total over core_clock_hz, so it carries Vela’s memory model.
cycles_total float or null none Vela’s total for one inference: per operation the slowest of its NPU and memory-access estimates, summed. Its Its memory estimate can exceed hardware costs at HP; compare cycles_npu with each sample’s active cycles.
cycles_npu float or null none Vela’s estimate of NPU busy cycles; compare with measurements.samples[i].cycles.active.
cycles_sram_access float or null none Vela’s estimate of the cycles bound by port 0 (Vela Sram) access.
cycles_dram_access float or null none Vela’s estimate of the cycles bound by port 1 (Vela Dram) access.
sram_total_bytes float or null none Bytes Vela expects to move over port 0 in one inference.
dram_total_bytes float or null none Bytes Vela expects to move over port 1 in one inference.
sram_bandwidth_gbps float or null none Port 0 bandwidth Vela assumed, GB/s.
dram_bandwidth_gbps float or null none Port 1 bandwidth Vela assumed, GB/s.
sram_used_kib float or null none Port 0 memory Vela’s plan occupies (arena plus weight cache), KiB.
dram_used_kib float or null none Port 1 memory Vela’s plan occupies, KiB.
on_chip_flash_kib float or null none Vela’s OnChipFlash usage, KiB; always 0 because helx assigns nothing to that area.
off_chip_flash_kib float or null none Vela’s OffChipFlash usage, KiB; always 0 because helx assigns nothing to that area.
weights_original_bytes float or null none Weight bytes in the input model.
weights_encoded_bytes float or null none Weight bytes after Vela’s encoding and compression.
command_stream_bytes int or null none Size of the Ethos-U command stream Vela emitted, bytes.

The FVP stage: how far it got, and the measurements when it ran.

Field Type Default Meaning
stage one of disabled, configured-built, ran required How far the FVP stage got: disabled, configured-built, or ran.
requested_acquisition block AcquisitionPolicy or null none Resolved build-time request; null warmup means automatic, not zero. Distinct from observed counts.
enabled bool required Whether the config enabled the FVP stage.
run_enabled bool or null none Whether the config asked to run the runner, not only build it.
subsystem str or null none Corstone FVP subsystem: corstone_300 (its U55 or U65 model, as vela.accelerator says) or corstone_320.
build_type str or null none Runner build type: Debug or Release.
host_transport str or null none How the host collected the runner’s report from the FVP, from the subsystem’s profile.
beat_bits int or null none Width of one AXI data beat on this SoC, bits, so traffic_beats can be turned into bytes.
sram_burst_bytes int or null none AXI SRAM-port burst split the runner’s driver was built with (U85 AXI_LIMIT_SRAM_MAX_BEATS, U55/U65 AXI_LIMIT0/1_MAX_BEATS_BYTES), bytes: the platform’s, or a -DHELX_AXI_SRAM_MAX_BEATS in fvp.cmake_args.
ext_burst_bytes int or null none AXI EXT-port burst split the runner’s driver was built with (U85 AXI_LIMIT_EXT_MAX_BEATS, U55/U65 AXI_LIMIT2/3_MAX_BEATS_BYTES), bytes: the platform’s, or a -DHELX_AXI_EXT_MAX_BEATS in fvp.cmake_args.
sram_port_hash int or null none Address mask that picked the NPU’s SRAM port in the run (the FVP’s sram_hash0): the platform’s, or a -C ...sram_hash0 in fvp.fvp_args; absent when the FVP default (0x100, address bit 8) applied, and on build-only runs, since the FVP takes it at launch. U85 only.
contention dict[str, block FvpContention] or null none Emulated application traffic the run was configured with (run.contention), keyed by memory name; absent when there was none or nothing saw it.
bus_trace block FvpBusTrace or null none The NPU bus trace summary; absent unless fvp.bus_trace was enabled and the FVP ran.
exit_code int or null none Exit code of the FVP process.
warmup_invokes int or null none Inferences the runner ran, uncounted, before the measured one: 1 when the model has a CALL_ONCE init subgraph (resource-variable initialisation runs inside the first inference), else 0 by default. Explicit carry warmups can select another count; AOT reports its actual count, default 0.

Build-time lifecycle controls; None warmup preserves the runner’s automatic choice.

Field Type Default Meaning
state one of carry, single carry carry retains variables across invokes; single permits one invoke on the initialized instance.
warmup_invokes int or null none Uncounted warmup invokes. Unset: carry warms up once when CALL_ONCE is present; single uses zero.
measured_invokes int 1 Measured invokes on one initialized instance; single requires one.

One memory’s emulated application traffic (run.contention): what was asked for and what its port’s timing adapter was programmed with as a result.

Field Type Default Meaning
port int required AXI port it was on in this run: 0 (SRAM class) or 1 (EXT).
share_taken float required Fraction of the memory’s bandwidth other traffic took, 0 to below 1.
extra_latency_ns float required Queueing latency added to reads and writes, ns.
rate_window_cycles int required Timing-adapter window over which the reduced rate is enforced, NPU cycles (the run’s own unless the entry set one).
applies_to_vela bool required Whether Vela compiled for the contended timing too (otherwise only the FVP saw it).
bandwidth float required Beats per NPU cycle the port’s adapter was programmed with after contention (rounded to whole beats per window, as the adapter is built; not reflected if fvp.cmake_args overrides that adapter’s BWCAP or PULSE).
read_latency int required Read latency after contention, NPU cycles.
write_latency int required Write latency after contention, NPU cycles.

The NPU bus trace (fvp.bus_trace): every AXI transaction the NPU made on the FVP, summarised. The timeline, transfer sizes and a Perfetto trace are in the artifacts; the raw trace only when the config kept it.

Field Type Default Meaning
status one of pass, fail required pass when every check agrees.
transactions int required AXI transactions traced.
raw_trace_bytes int required Size of the trace the FVP wrote, bytes.
step_cycles float or null none NPU cycles per FVP step: the FVP advances the NPU in steps and stamps each step’s transactions with one time, so this is the timeline’s finest resolution.
fvp_time_scale float or null none FVP simulated seconds per second of NPU time, from the traced steps and the PMU cycle count (about 20 at a 500 MHz NPU clock on FVP 11.27). The timeline is in NPU time.
npu_segments int required NPU invocations the trace shows: more than one when the model runs operators on the CPU between NPU segments. The timeline leaves the CPU time between them out, as the PMU leaves it out of the NPU’s cycles.
timeline_rows int required Rows in the timeline CSV: one per FVP step, or whole steps merged so there are at most 2000.
sram_port_hash int required Address mask whose parity assigned each SRAM-class transaction to SRAM0 or SRAM1 (the FVP default 0x100 when the run set none).
stripe_bytes int or null none The SRAM interface changes at every multiple of this many bytes: the hash’s lowest set bit; absent for a zero hash, which puts every SRAM-class transaction on SRAM0.
sram_transfers_crossing_stripe int required SRAM-class transactions that cross a multiple of stripe_bytes (with a one-bit hash, as on AT110, that is a transaction starting in one interface’s stripe and ending in the other’s); 0 when every burst fits a stripe.
interfaces dict[str, block FvpBusTraceInterface] required Per interface: sram0, sram1, ext.
activity block FvpBusTraceActivity or null none Which interfaces were active together; absent without both ports’ rates.
checks dict[str, block FvpBusTraceCheck] required The trace against the PMU (data beats per port and direction, SRAM0 reads), against the driver build (largest transfer within the burst), and against itself (time never goes back).

What one NPU memory interface carried over the inference, from the bus trace.

Field Type Default Meaning
read_transfers int required Read transactions.
write_transfers int required Write transactions.
read_bytes int required Bytes read.
write_bytes int required Bytes written.
read_beats int required Read data beats, counting a partial beat as a whole one as the PMU does.
write_beats int required Write data beats on the same basis.
largest_transfer_bytes int required The largest single transaction, bytes: at most the burst the driver was built with.
mean_busy_fraction float or null none Beats moved over the beats the port’s timing adapter allows in the inference’s NPU cycles (the fvp.port_utilization basis, with each interface’s writes counted exactly); absent without the port’s rate.
peak_busy_fraction float or null none The busiest row of the timeline on the same basis. It can exceed 1 when a row is shorter than the port’s timing-adapter rate window, since the adapter caps the beats per window, not per cycle.

How the inference’s cycles divide by which interfaces were active (moving at least 5% of their rate) in each timeline row.

Field Type Default Meaning
sram_only_fraction float required SRAM0 or SRAM1 active, EXT not.
ext_only_fraction float required EXT active, neither SRAM interface.
sram_and_ext_fraction float required EXT and at least one SRAM interface active together.
idle_fraction float required No interface active.

One comparison of the trace with an independent source.

Field Type Default Meaning
status one of pass, fail required pass when the trace agrees.
trace int required The figure from the trace.
expected int required What it is checked against: the PMU’s count, the burst the driver was built with, or 0 for something that should not happen.

Footprint: where the regions live and how many bytes each thing takes.

Field Type Default Meaning
const_placement str or null none Physical memory holding the weights.
arena_placement str or null none Physical memory holding the tensor arena (activations).
cache_placement str or null none Physical memory holding Vela’s weight cache.
runtime_model_bytes int required Size of the model the runtime loaded (Vela’s output, or the original when Vela was bypassed), bytes.
tensor_arena_configured_bytes int required Tensor arena size the runner was built with, bytes.
tensor_arena_used_bytes int or null none Arena bytes the runtime reported using.
aot block AotArenas or null none The heliaAOT module’s arenas, when that engine linked the runner.

The heliaAOT module’s arenas, when that engine linked the runner.

Field Type Default Meaning
constant_bytes int required Cold constants and generated staged-constant source storage, including source guards, bytes.
mutable_bytes int required Writable runtime arenas: scratch, persistent and staged-constant destinations, bytes.
total_bytes int required Constant plus mutable arena, bytes.
constant_regions int required Number of constant regions the module declares.
mutable_regions int required Number of writable runtime regions, including staged-constant destinations.

Build-bound input bytes and comparison context for opt-in tensor capture.

Field Type Default Meaning
request_sha256 str required Canonical tensor-request digest reported by the compiled runner.
inputs_explicit bool required Whether the request supplied input bytes rather than selecting implicit zeros.
inputs tuple required Effective input bytes refilled before every invoke, including warmups.
output_specs tuple required Fixed output metadata read from the actual runner model.
references tuple () One reference set per measured sample, or empty when only capturing outputs.
comparison ComparisonPolicy required Numerical tolerance and NaN policy in stored-value units.

A fixed tensor whose raw bytes are retained in the result manifest.

Field Type Default Meaning
spec TensorSpec required Exact model tensor index, name, dtype and fixed shape.
path str required Bundle-relative binary artifact, with size/hash supplied by the manifest.

Reference output bytes for one measured invocation, with caller-declared provenance.

Field Type Default Meaning
tensors tuple required All reference outputs in model-index order.
origin one of files, host_litert, producer required Declared source of these reference bytes.
description str required Identifying reference context supplied by the caller.

A complete ordered sequence and statistics derived from that sequence.

Field Type Default Meaning
acquisition block AcquisitionFacts required The runner-observed lifecycle and measured count.
samples tuple required All measured invocations in their execution order.
statistics block MeasurementStatistics required Population statistics recomputed from every retained sample.

Runner-reported lifecycle for the measured invocation sequence, excluding warmup counters.

Field Type Default Meaning
state one of carry, single carry carry retains variables across invokes; single permits one invoke on the initialized instance.
warmup_invokes int required Completed unmeasured invokes before the measured sequence.
measured_invokes int 1 Measured invokes on one initialized instance; single requires one.
schema_id one of helx.acquisition helx.acquisition Runner acquisition protocol identifier.
version one of 1 1 Runner acquisition protocol version.
call_once_present bool or null required Interpreter CALL_ONCE detection; null for generated AOT initialization.
initialization one of before_measurement, interpreter_allocate_and_first_invoke required Where runtime state initialization occurred relative to measurement.

Counters and derived estimates for one indexed measured invocation, excluding warmups.

Field Type Default Meaning
index int required Zero-based measured invocation index; warmups are excluded.
pmu_profile one of default, ext_stall, default_ext_rd_stall, dv_align, port_stall, sram_stall, sram_transactions required The event selection programmed for this invocation.
output_tensors tuple () Opt-in retained output bytes, in model-index order.
verification block TensorVerification or null none Optional numerical comparison against this sample’s retained reference set.
outputs tuple () Ordered output byte signatures captured after the measured invoke.
cycles block FvpCycles or null none NPU cycle counters from the PMU.
traffic_beats block FvpTrafficBeats or null none AXI data beats per port and direction from the PMU.
traffic_transactions block FvpTrafficTransactions or null none Accepted aggregate SRAM transactions in the same PMU window as traffic_beats; sram_transactions profile.
port_utilization block FvpPortUtilization or null none Average busy fraction of each NPU memory interface over the inference, from traffic_beats and the cycles; absent when the run had no counters, no cycles or no timing-adapter rates.
latency_s float or null none NPU total cycles at the mode’s NPU clock: the latency one inference took on the NPU, seconds.
utilization_fraction float or null none MACs performed over MACs the array could have performed: nn_macs / (npu_total_cycles * npu_mac_units), 0 to 1.
pmu_overflow int or null none The NPU’s PMU overflow flag as the runner reported it; nonzero means a counter wrapped and the counts are short.
energy block EnergyBlock or null none Energy derived from this invocation’s PMU counters.
sanity block SanityBlock or null none Validation checks for this invocation’s counters.
energy_error str or null none Why configured energy could not be estimated for this invocation.

Numerical comparison against the matching retained reference set; separate from integrity.

Field Type Default Meaning
reference_index int required Index of the reference set in the bundle’s tensor evidence.
matched bool required Whether all elements met the recorded comparison policy.
tensors tuple required Mismatch counts and exact maximum finite absolute error for each output.

NPU cycle counters from the PMU; the stall and MAC counters depend on the PMU profile.

Field Type Default Meaning
total int or null none NPU_TOTAL: cycles the NPU was clocked during the inference.
active int or null none NPU_ACTIVE: cycles the NPU was executing work.
idle int or null none NPU_IDLE: cycles the NPU was clocked but idle.
elapsed int or null none NPU elapsed cycles between the driver starting and finishing the inference.
mac_active int or null none MAC_ACTIVE: cycles the MAC array was busy (dv_align and port_stall profiles).
mac_stalled_by_ib int or null none Cycles the MAC array stalled waiting on the input buffer (dv_align profile).
mac_stalled_by_w_or_acc int or null none Cycles the MAC array stalled on weights or the accumulator (dv_align profile).
sram_rd_stall_limit int or null none SRAM read outstanding-limit stall count (port_stall/sram_stall); U85 sums AXI ports, not exclusive lost time.
sram_rd_tran_req_stalled int or null none SRAM read address-request backpressure (port_stall/sram_stall); U85 sums AXI ports, may overlap NPU work.
sram_wr_stall_limit int or null none SRAM write outstanding-limit stall count (sram_stall); summed over AXI ports, not exclusive lost time.
sram_wr_tran_req_stalled int or null none SRAM write address-request backpressure (sram_stall); summed over AXI ports, may overlap NPU work/read stalls. Does not count write-data backpressure; SRAM_WR_DATA_BEAT_STALLED is a separate event.
ext_rd_stall_limit int or null none Cycles port 1 reads were stalled by the outstanding-transaction limit (ext_stall and port_stall profiles).
ext_rd_tran_req_stalled int or null none Cycles a port 1 read request was stalled by the fabric (ext_stall, default_ext_rd_stall and port_stall profiles).
cpu_wall int or null none Cortex-M DWT cycle count across the inference; only the heliaAOT runner emits it.
mcu_systick_ticks int or null none SysTick ticks across the inference; only a runner built with HELX_MCU_WALL_PROBE emits it.

AXI data beats per port and direction, as the PMU counted them; fvp.beat_bits is the beat width.

Field Type Default Meaning
sram_rd int or null none Read data beats received on port 0 (Arm AXI_SRAM class).
sram_wr int or null none Write data beats written on port 0.
sram0_rd int or null none Read data beats on the first SRAM-class interface alone (Ethos-U85).
ext_rd int or null none Read data beats received on port 1 (Arm AXI_EXT class).
ext_wr int or null none Write data beats written on port 1.
ext0_rd int or null none Read data beats on the first EXT-class interface (Ethos-U85).
ext1_rd int or null none Read data beats on the second EXT-class interface (Ethos-U85).

Accepted SRAM-class AXI transactions, summed across its interfaces in one invocation window.

Field Type Default Meaning
sram_rd int or null none Accepted read requests, in transactions; null means not counted, zero means counted with no requests.
sram_wr int or null none Accepted write requests, in transactions; not a completed-write count or a queue-depth measurement.

How busy each NPU memory interface was, averaged over the inference: data beats moved over the beats the port’s timing adapter allows in the NPU cycles the inference took. 1 = saturated at this clock; normally 0 to 1, not clipped (a figure above 1 means the counters exceed the programmed rate). A figure the counters cannot support is absent, and basis says why.

Field Type Default Meaning
sram0 float or null none First SRAM-class interface: SRAM0 read beats plus its share of SRAM writes, over total cycles x the port 0 beats per cycle (each SRAM interface is capped at that rate).
sram1 float or null none Second SRAM-class interface: the remaining SRAM read beats plus its share of writes, on the same basis.
ext float or null none EXT (port 1): EXT read and write beats over total cycles x the port 1 beats per cycle, treated as one interface (AT110 traffic uses one; basis says when both EXT interfaces carried reads).
sram0_read_share float or null none SRAM0’s share of SRAM read beats: 0.5 is an even split between the two SRAM interfaces.
saturated list[str] or null none Interfaces at or above 98% of their rate (SRAM0, SRAM1, EXT). Their figures stay exact here, and can exceed 1 at very low rates because the timing adapter admits whole transactions; people-facing views show them capped at 100% and marked saturated.
basis str or null none Which counters the figures come from, what was assumed (helx’s PMU programs split SRAM reads, not writes, by interface, so writes are assumed to split like reads), and why any figure is absent.

Experimental energy by mode; basis identifies the simulator counter or compiler estimate source.

Field Type Default Meaning
basis one of measured_fvp_pmu, vela_compile_time_estimate required measured_fvp_pmu (from simulator PMU counters) or vela_compile_time_estimate (from Vela’s estimates). Neither identifies measured device energy or qualifies the energy model’s accuracy.
modes dict[str, block EnergyMode] required Energy by platform mode name. The measured block holds only the mode that ran; the Vela-estimate block projects every mode from the same counters.
active_mode str or null none The mode the run executed in.
model str or null none The energy model file, relative to the bundle, when it was kept.

Experimental energy, power and efficiency estimates for one inference in one operating mode.

Field Type Default Meaning
total_mj float required Energy of one inference in this mode, mJ.
core_uj float required NPU core energy, uJ.
sram_uj float required Transfer energy over port 0 (Vela Sram class), uJ.
ext_uj float required Transfer energy over port 1 (Vela Dram class), uJ.
pj_per_mac float or null none Total energy over MAC operations, pJ per MAC; null for a network that does no MACs.
gmacs_per_w float or null none Efficiency: giga-MACs per second per watt; null for a network that does no MACs.
power_mw float or null none Average power over the inference time, mW. In energy that is measurements.samples[i].latency_s; in vela_energy it is vela.cycles_npu over vela.core_clock_hz, not vela.inference_time_s (which carries Vela’s memory model), except for a graph Vela gives no NPU cycles, where it falls back to vela.inference_time_s.
share_core_fraction float required Core share of the total energy, 0 to 1.
share_sram_fraction float required Port 0 transfer share of the total energy, 0 to 1.
share_ext_fraction float required Port 1 transfer share of the total energy, 0 to 1.

Outcome of the post-run consistency checks on the PMU report.

Check names are those of helia_estimator.runtime.pmu_report.SanityCheck.

Field Type Default Meaning
status one of pass, fail required pass when every check held, else fail.
checks dict[str, bool] required Each consistency check by name and whether it held.

Explicit population summaries; counter means and variances retain exact integer ratios.

Field Type Default Meaning
counters dict[str, IntegerStatistics or null] required Exact summaries keyed by cycle or traffic field; null if any sample lacks the field.
latency_s FloatStatistics or null none NPU latency population statistics in seconds, excluding warmups.
energy_total_mj dict[str, FloatStatistics or null] required Modeled total-energy population statistics in millijoules for each mode.

Per-layer attribution artifacts, relative to the bundle.

Field Type Default Meaning
per_layer_csv str or null none Per-layer cycle attribution from Vela’s verbose performance output.
vela_verbose_log str or null none Vela’s stdout carrying the per-layer table.
per_original_op_csv str or null none Per-layer figures folded back onto the original model’s operators.
model_explorer_overlay str or null none JSON overlay for Model Explorer with per-operator figures.
unavailable_reason str or null none Why calibrated attribution was omitted; raw Vela diagnostics remain available when present.

Fenced per-segment measurement artifacts, relative to the bundle.

Field Type Default Meaning
segments int required Number of segments the fences cut the model into.
tensor_arena_bytes int required Arena size of the fenced model, bytes.
per_segment_csv str or null none Measured cycles per segment.
fenced_model_tflite str or null none The model with ETHOS_U_STREAM_SPLIT fences inserted.
fenced_vela_tflite str or null none The fenced model after Vela.
fenced_vela_summary_csv str or null none Vela’s summary for the fenced compile.
fenced_per_layer_csv str or null none Per-layer attribution of the fenced compile.
estimated_vs_measured_csv str or null none Vela’s estimate against the measured cycles, per segment.
npu_invocations int or null none NPU invocations measured, one row each in per_segment_csv. Fewer than segments when some fence segments hold only operators Vela left on the CPU (they start no invocation) or Vela removed fences after operators it folded into constants (the segments either side run as one invocation). Each row’s segment_index is the first fence segment it covers and its op range spans all of them.
pmu_profile one of default, ext_stall, default_ext_rd_stall, dv_align, port_stall, sram_stall, sram_transactions or null none The PMU program the fenced run counted with (fvp.pmu_profile): which counters per_segment_csv carries, e.g. the read-stall and MAC-active cycles of port_stall. All per-segment figures come from this one run.
counters_check one of pass, fail or null none pass when every counter the run reports sums over the segments to the run’s total, so no segment line was lost or misread; fail names the counters in counters_not_summing, including any only some segments carry, and all of them when the fenced log had no segment lines. Absent when there was nothing to compare (no run totals).
counters_summed list[str] or null none The counters compared and found equal, by their run-total names (npu_total_cycles is the segments’ ccnt; npu_sram_rd_tran_req_stalled their sram_rd_tran_req_stalled_cycles).
counters_not_summing list[str] or null none Counters, by run-total name, whose segment sum differs from the total or that some segments lack; absent when all agree.
bus_trace_csv str or null none Each NPU invocation’s traffic from the fenced run’s bus trace (fvp.bus_trace), keyed as per_segment_csv is: the FVP steps it spans, transfers, bytes and beats per interface (SRAM0, SRAM1, EXT) and direction, and whether its beats equal its PMU counts. Absent without a trace, or when the trace’s segments could not be paired with the invocations (bus_trace_segments says how many it found).
bus_trace_check one of pass, fail or null none pass when the run printed segment lines, the trace splits into one segment per NPU invocation, each one’s beats equal that invocation’s PMU beat counts, and the whole-trace checks pass (beats against the run’s totals, time order, transfers within the burst). The trace’s segments come from its own timestamps, so this checks the split and the counts independently. Absent without fvp.bus_trace.
bus_trace_segments int or null none NPU segments the fenced trace splits into; equal to npu_invocations when it is read right.
bus_trace_invocations_not_matching list[int] or null none Invocations (npu_invocation) whose beats the trace does not reproduce: every one when the segment counts differ. Absent when all match.
bus_trace_checks_failed list[str] or null none Whole-trace checks of the fenced trace that failed, by their fvp.bus_trace.checks names, or trace_read when the trace could not be read (the PMU results stand without it); absent when all pass.
bus_trace_raw str or null none The fenced run’s raw bus trace, when the config kept it (fvp.bus_trace.keep_raw).
layers_csv str or null none The fenced run layer by layer, one row per NPU invocation: its original operators, measured cycles and counters, traffic per port (from the bus trace when one was taken), busy and stall shares, Vela’s estimate, and its likely limit with the reason.
layers_perfetto_json str or null none The same layers as a timeline to open at ui.perfetto.dev: end to end in fenced NPU time, a lane per likely limit, and a counter track per measured figure.
cycles_by_limit dict[one of ext_bandwidth, sram_bandwidth, sram_latency, npu_engine, not_counted, int] or null none Fenced NPU-active cycles of the layers on each likely-limit lane. The lanes are a heuristic: the busier port when at least 60% busy, else SRAM reads queued in at least 30% of the cycles (SRAM latency, mostly overlapped by other work), else the NPU engine when both ports and the SRAM read stalls were measured, else not_counted.

Paths of the files the bundle carries, relative to the bundle root; a file outside the bundle is not named.

Field Type Default Meaning
root str required The artifacts directory, relative to the bundle.
vela_tflite str or null none The Vela-compiled model.
vela_summary_csv str or null none Vela’s summary CSV.
vela_config str or null none The generated Vela ini the compile used.
energy_model str or null none The energy model YAML the run used.
runner_axf str or null none The built runner image.
runner_input_tflite str or null none The model the runner was built with.
fvp_stdout_log str or null none The FVP process’s stdout.
fvp_stderr_log str or null none The FVP process’s stderr.
fvp_uart_log str or null none The runner’s UART output, including the PMU report.
runner_build_log str or null none The runner build’s CMake and compiler output, kept out of the terminal.
bus_trace_timeline_csv str or null none Bus trace timeline: bytes and busy fraction per interface per slice of the inference.
bus_trace_transfers_csv str or null none Bus trace transfer sizes: transactions per size, interface and direction.
bus_trace_perfetto_json str or null none Bus trace timeline as a Chrome trace with one lane per interface; open it at ui.perfetto.dev.
bus_trace_raw str or null none The FVP’s raw bus trace, when the config kept it (fvp.bus_trace.keep_raw).