# Ch419 — request-path timing root cut plus rabbit/bench completion (prefit)

## Objective

Make one owner compile carry two concrete advances:

1. remove the actual Ch418 310 MHz setup topology instead of rerolling placement;
2. append a bounded set of authentic missing rabbit/bench draws to the accepted
   Ch417 framebuffer, without regenerating or perturbing its 263 accepted epochs.

Ch418's captured 512x448-to-640x480 presentation mapping is retained unchanged.

## Ch418 fit diagnosis

The 2026-07-18 owner fit completed placement and routing but failed only the
EMIF setup domain:

- setup WNS `-0.388 ns`, TNS `-7.218 ns` at 310 MHz;
- hold `0.000 ns` and every other reported timing check clean;
- 38,328 / 46,800 ALMs (82%), 336 / 358 RAM blocks (94%).

The first nine setup endpoints are the same structural family:

```
u_zc_emit|req_rd
  -> u_zc_emit|u_req|mem...ram_block...~reg1 (RAM enable)
```

`req_rd` has netlist fan-out 747.  The worst paths contain no logic levels:
`3.370 ns` data delay is almost entirely the `3.035 ns` interconnect route to
the wide request FIFO's physical RAM enables.  This is not a scanout-mapping
path and is not a seed-quality diagnosis.

The next distinct setup family is `-0.331 ns` inside `u_lpddr_rd_arb`, from a
duplicated encoded `grant` bit back into `grant` through response-completion
selection.

## Structural timing cuts

### Request FIFO RAM enable

In `gs_async_fifo` registered-read mode, the inferred synchronous RAM head is
now sampled every read clock instead of qualifying every physical RAM bank with
`rd`.  The read pointer still advances only on an accepted pop and `rdata`
retains its one-cycle registered-read contract.

This removes `req_rd` from the 747-load RAM-enable net entirely; it is a
topology change, not a fitter hint or another seed roll.

### Read-arbiter grant release

`gs_lpddr_rd_arb` now registers the terminal accepted `RLAST` handshake and
releases ownership on the following cycle.  `ARVALID/ARREADY` are masked after
the address handshake and throughout the deliberate release bubble, so a
selected requester cannot accidentally issue a second address.

This breaks the requester-`RREADY` selection cone out of the encoded grant
register's direct D path while preserving AXI ownership through response
acceptance.

## Fidelity batch

The accepted `zsrt139f17` fixture remains byte-for-byte intact.  Ch419 appends
21 authentic opaque PSMT8 draw runs missing between the accepted group heads in
the PCSX2 rabbit/bench region:

```
71361, 71574, 72000, 72213, 72639, 72852, 73278,
73491, 73917, 74130, 74556, 74769, 75195, 75408,
75834, 76047, 76473, 76686, 77112, 77325, 77538
```

Capacity-safe grouping produces 20 appended epochs and 7,496 independently
covered reference pixels.  The merged `zsrt139f18` scene has 283 epochs total.
Persistent authentic Z decides visibility against the accepted base.

This is deliberately bounded.  An exhaustive supported-draw plan expanded to
6,977 epochs and was rejected as operationally useless before deployment.

## Prefit verification

The full production-control replay uses the exact board gradient-divider
selection and settle FSM, the modified request FIFO, the modified read arbiter,
one persistent color/Z memory, and all 283 chronological epochs:

- 1,177,489 fragments fed;
- 984,845 fragments passed authentic Z;
- 283 ordered markers and 283 fresh drains;
- zero fragment drops, color overflow, or AXI response errors;
- final Z mismatch `0 / 307,200`;
- final color mismatch `0 / 235,963` written pixels;
- testbench `PASS` with `errors=0`.

Final framebuffer SHA-256:

`a88f1f6c926dd0db2b72ae2873c399e7dc5666f8003190184c34d360b13a5f44`

Relative to the accepted Ch417 production replay, the tail changes 4,446
framebuffer pixels at `x=342..416, y=214..363`, the intended right-center
rabbit/bench region.  Twelve pixels add previously empty coverage; the rest
replace Z-visible surface color/detail.  Ch417's prior hash was:

`3d22b4421194d444677f3bc9f938e43fd856c6615b92585a10209093d982a625`

Supporting regressions also pass:

- async FIFO: 3,284 exact writes/reads, no duplicate/drop;
- read arbiter contention/priority: PASS;
- Z/color emit: 1,500 fragments across three epochs, exact;
- horizontal-stretch scanout: 600 pixels exact, no underflow/read errors;
- PSMCT32 linebuffer: 49,152 pixels exact, no underflow/read errors;
- full-frame scanout: 105,968 pixels checked, exact beat count, no errors;
- concurrent scanout/reload/probe: 16,384 pixels exact;
- host scheduler build and complete 283-epoch asset dry-run: PASS;
- board staging set: 323 unique assets, 21,733,472 bytes (duplicates removed);
- relevant `git diff --check`: PASS.

## Owner fit gate

This is ready for one owner-controlled Quartus 26.1 GUI compile.  It is not
claimed timing-clean until that report exists.

Acceptance for the fit:

- the `req_rd -> request RAM enable` family is absent (not merely moved down);
- the encoded read-arbiter `grant -> grant` response family is absent or clean;
- setup, hold, recovery, removal, and minimum pulse all close;
- synthesis still infers the request FIFO RAM and remains inside device limits.

After a clean fit, deploy the RBF, stage `zsrt139f18`, run the 283-epoch board
scene, and require board framebuffer equality with the production replay hash
above before accepting the chapter.

## Owner fit result — 2026-07-18 11:07

The fit was successful, but setup remained narrowly red:

- setup improved from `-0.388 ns / -7.218 ns` to
  `-0.115 ns / -1.150 ns`;
- hold improved to `+0.001 ns`; all other timing checks remained clean;
- ALMs decreased from 38,328 to 38,234; RAM use remained 336 / 358.

Both Ch419 targets disappeared completely from the violated top ten:

- no `req_rd -> request RAM enable` path;
- no encoded read-arbiter `grant -> grant` path.

All ten remaining violations are one newly exposed zero-logic family:

```
u_zc_emit|u_req|rbin[6]
  -> u_zc_emit|u_req|mem...ram_block...portbaddr[6]
```

The launch bit has fan-out 713.  Of the `3.192 ns` data delay, `2.892 ns`
(91%) is routing.  Ch419 therefore succeeded as a structural peel, but is not
accepted for deployment.  Ch420 applies the corresponding dedicated read-RAM
address stage before the next owner fit.
