Files
rebbarb/exi_bba
Roflin 8825cfb3d6 bba_top: document the integration, and retract a comment claiming an open bug
778 -> 837 lines, 25% -> 17% comment-only.  The module docstring now carries
what was scattered or missing: a data-flow diagram, all four clock domains with
what each hosts, and the three remaining crossings with their primitives.

The worst thing in this file was a testbench comment asserting a bug that no
longer exists:

    "at 27 MHz reads currently come back shifted right by one bit
     (04 02 02 00 -> 02 01 01 00, NWAYS 0x17 -> 0x0B), which is an open bug."

That is the MISO latency solved by the full-cycle-early launch.  EXI_HALF=1
passes, and has for some time.  A stale comment claiming a KNOWN FAILURE is
worse than a verbose one: it tells the next reader the suite's hardest case is
expected to be wrong.

Other stale text: the class docstring documented only the W5500 pins while
W5100 is the default back-end; "Pulse synchronizer connections" and
"reg exi->sync FIFO read side" described clock domains that were merged; the
testbench header claimed "all three clock domains" and a "capture domain"; and
the RX loop's model was called a W5500 when it is the W5100 bus model.

Structure: elaborate() is now _clock_domains, _submodules, _wire_pins,
_wire_datapath and _wire_bringup, with the submodules passed as a bundle.

Also documented, from an AST audit of the tree: w5500_clk/mosi/cs_n are
written and read by nothing, because synth.py declares only W5100 pins.  They
are not dead -- they are the alternate back-end's interface, exercised by
w5500_spi_master's own testbench -- so the docstring now says that wiring them
up is a synth.py change rather than leaving a reader to wonder.

MEASURED AND REJECTED: the FFSynchronizer on cs_active into the status panel
is NOT a clock-domain crossing, since ExiCapture already synchronises CS, so I
removed it as redundant.  Building it showed why it should stay -- area went
4305 -> 4330 LC, because the panel's combinational cone then reaches back to
ExiCapture's own synchroniser.  `sync` is the binding timing domain here, so
25 LC is not worth two flip-flops.  Reverted, and the comment now explains
what those registers actually buy instead of mislabelling them as a CDC.

VERIFIED EQUIVALENT: synthesised cell counts identical to the original in
every category (5971 cells; 134 SB_DFF, 3382 SB_LUT4, 669 SB_CARRY, 70
SB_RAM40_4K), so this commit changes no hardware at all.  Full module suite
passes and bba_top T9 is 6/6 at EXI_HALF=1, 2 and 8.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-10 20:17:22 +02:00
..
2026-06-13 19:02:58 +02:00
2026-06-14 09:37:59 +02:00