Rework FIFO/CDC fixtures for D-092's one-cycle mem read latency
fifo.strata and cdc_bridge.strata were written before mem had real
semantics and assumed same-cycle (combinational) reads, which D-092
§2 predicted would need fixing once mem timing was enforced (7a7a154).
Both now use the standard look-ahead (skid) FIFO pattern: a fetch
pointer presents the read address to buf, and the registered result
lands in a head/head_valid pair via <- only, never combinationally.
fifo.strata gains reg head/head_valid/mem_count; cdc_bridge.strata's
'dst domain gets the same treatment (rd_gray_fetch decoupled from
rd_gray, which only advances on actual consumption). The 'src
domain was untouched — it never had a same-cycle-read problem.
epoch_soc.strata needed the same fix too: D-092 §2 predicted its
TxnTable.lookup was safe because it reads in a separate port call
from the alloc write, but that call itself returned entries[slot]
combinationally within the same lookup — the same violation shape,
just not aliased with a concurrent write. Fixed with a registered
lookup_result, D-092's own optimism corrected rather than left stale.
New crates/strata-cli/tests/fixtures/mem-read-ahead.strata isolates
the read-ahead register shape into the phase-1 checked-body algebra
(no generics/contract/handshake) and proves it directly: strata check
reports zero diagnostics, strata compile lowers the registered mem
read through a fetch_enable mux into a real seq.firreg, with no path
from mem to output that skips the register.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
5fb0097071versecafe committed on 8/20/2026, 3:09:09 AMparent596445a