Snapshot: fog implementation + fidelity tooling baseline (pre bilinear-clamp fix)
Per-vertex GS fog end-to-end (gs_stub emit incl. persp_emit5, gs_prim_list_feeder XYZ2->XYZF2 on PRIM.FGE, gs_make_sh3_scheduler_fixture.py F/FGE packing), new fog TBs, fidelity attribution tooling. Functional baseline before removing the dead bilinear lerp8 clamps (Codex: 161-node comb loop -> -0.042ns setup fail). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user