KDI v0.3.0 — breaking: control registers moved off the addresses Rhythm writes
Breaking, and act on the register move first. KDI's control WireIns were sitting on registers the Rhythm host writes — 0x15 is WireInTtlOut, 0x16–0x1d are WireInDacSource1..8. Verified against the two hosts that actually speak this board's protocol: one writes arbitrary TTL state to 0x15, the other zeroes the whole word. A host doing nothing unusual could silently stop both KDI streams — and now that run_samples starts acquisition, the same write starts the engine.
| register | was | now |
|---|---|---|
run_digital |
0x15.0 |
0x11.0 |
run_samples |
0x15.1 |
0x11.1 |
lanes_samples |
0x16 |
0x12 |
burst_digital |
0x17 |
0x13[15:0] |
burst_samples |
0x18 |
0x13[31:16] |
0x0f–0x13 is the only gap in that map and 0x0f/0x10 are taken, so three words hold four registers and the burst bounds share 0x13.
Two things every host must change. Bindings can now name a field (wirein:0x13[31:16]) — a parser that only understands 0xNN and 0xNN.b will fail on this descriptor. And since two registers share each word, every write must be masked; an unmasked write to one field clears its neighbour, which was a real shipped bug against the old shared 0x15.
run_samples now acquires. It previously gated emission only — with the engine stopped the stream produced nothing. Measured on silicon: 0 words resident before, 1024 words and decodable frames after, legacy pipe staying empty. Still one shared engine and one row schedule, so two streams cannot run at different rates.
Wire format unchanged apart from contract_rev 1→3 at byte 0x1c and its CRC — exactly five bytes in the golden vector. A format-2 decoder needs no changes.
0.2 was staged and never released, because its register layout is the colliding one above. Everything it carried is in 0.3: the first_of_run semantics change (successive announcements must have strictly increasing timestamps, not timestamp 0), per-stream run/lane registers, bounded capture, per-stream status words, and the corrected rhd_matrix cadence.
conformance in the manifest is target: software-reference — the contract is self-consistent and the reference host obeys it, not a claim that any gateware conforms. The gateware verified on hardware for this revision is e8f7f60e: acceptance campaign 6/6, bounded capture exact on both streams, RHX unregressed.