# Ch406 — deep request-FIFO timing repair (pre-fit gate) ## Trigger The owner Quartus 26.1 GUI compile for Ch405 fit in the device but failed the 310 MHz EMIF clock by 0.267 ns, with design-wide TNS of -4.802 ns. All 77 failing endpoints belong to `u_zc_emit|u_req`. The leading path is the registered empty flag through the 15-bit binary-pointer increment, Gray conversion, equality reduction, and back into the empty flag. Secondary violations are the same empty/pointer cone feeding the 16K FIFO RAM address, plus the asynchronous RAM bank mux feeding request-head decode. This is a local consequence of increasing the Ch405 request FIFO from 4K to 16K. Hold timing, Gray-pointer skew constraints, and all other clock domains pass. ## Structural repair - Treat `gs_async_fifo.rd` according to its existing interface contract: it is an accepted read, already qualified by `!rempty` in each wrapper. Remove the redundant internal `!rempty` gate from the read-pointer increment. This removes the empty-to-pointer feedback and the empty-to-RAM-address fanout. - Add an optional synchronous/registered read port to `gs_async_fifo`. - Enable that port only for the 16K x 92-bit Z/color request FIFO. Keep the smaller existing users on their original FWFT interface. - Add a one-cycle pending bit in `gs_lpddr_zc_emit` so its request-head stage captures the registered FIFO word on the following cycle and cannot issue a second pop while a word is in flight. - Make the standalone FIFO testbench explicitly qualify its randomized read requests, matching the documented production interface. No clock, SDC, FIFO depth, fixture, draw, texture, blend, or Z behavior changes. ## Pre-fit proof - Async FIFO scoreboard: 3,284 writes / 3,284 reads, zero order, duplicate, or drop errors, final empty asserted, PASS. - Ch405 worst three epochs, empty Z: 43,680 fed and passed, zero drops, high-water 12,953/16,384, exact color, exact Z, PASS. - Ch405 worst three epochs, checkerboard Z: 43,680 fed, 21,839 passed, zero drops, high-water 11,389/16,384, exact color, exact unchanged Z at all 307,200 pixels, PASS. - A sequential production sweep additionally replayed epochs 0 through 19: 291,597 fragments, zero drops, and every scene drain completed. It was stopped after this redundant prefix because the complete 287-epoch run would consume more than an hour; the maximum-pressure tail and both Z outcomes had already passed exact comparisons above. - Production RTL elaborates with the 16K request FIFO and registered-read path. ## Owner fit gate Run the next compile only in the owner-controlled Quartus 26.1 GUI. The fit must confirm that the request RAM remains inferred in device memory, resources still fit, setup and hold both pass, and the previous `rempty` feedback family is absent. Do not deploy an RBF unless those checks pass.