From 3d27095c2b3103f091b1d09bfac6fc2a4d65002d Mon Sep 17 00:00:00 2001 From: thejayman77 Date: Tue, 21 Jul 2026 04:36:42 -0400 Subject: [PATCH] QSF: revert to AGGRESSIVE AREA + surgical MAX_FANOUT on Z-req raddr (close EMIF, keep design clk) Fit data: AGGRESSIVE AREA gives design clk +0.631 / EMIF -0.103; global BALANCED flipped it to EMIF +0.084 / design clk -6.119 (vert_count->texcache swung 6.7ns). AGGRESSIVE AREA is far closer to closing, so keep it and fix the one 310MHz EMIF miss surgically: MAX_FANOUT 3 on u_zc_emit|u_req|raddr_hi1_q forces the register duplication Quartus asked for (TMC-20551) without the global placement disruption. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../de25_nano_psmct32_raster_demo_top.qsf | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/synth/de25_nano/top_psmct32_raster_demo/de25_nano_psmct32_raster_demo_top.qsf b/synth/de25_nano/top_psmct32_raster_demo/de25_nano_psmct32_raster_demo_top.qsf index 9ad62dc..04f51f9 100644 --- a/synth/de25_nano/top_psmct32_raster_demo/de25_nano_psmct32_raster_demo_top.qsf +++ b/synth/de25_nano/top_psmct32_raster_demo/de25_nano_psmct32_raster_demo_top.qsf @@ -984,13 +984,16 @@ set_global_assignment -name HPS_INITIALIZATION "HPS FIRST" # AUTO_RESOURCE_SHARING=OFF from fresh synthesis through route and produced an # identical netlist, resource count, placement, and timing path; sharing was # therefore not the source of the tap-to-texture-cache STA arc. -# Ch415: was "AGGRESSIVE AREA" (a leftover from the pre-useg-strip LAB-overflow era). That mode -# suppresses register duplication, which left the 8K Z-req FIFO's read-address register (u_zc_emit| -# u_req|raddr_hi1_q) fanning out to 6 spread M20K blocks and failing 310 MHz EMIF setup by ~103 ps -# (Quartus TMC-20551: "duplication candidate likely requires more duplication"). Utilization has ample -# headroom now (ALM 85%, DSP 45%, RAM unaffected by opt mode), so BALANCED lets the fitter duplicate -# that address register to close the path. Revert to AGGRESSIVE AREA only if a future build re-overflows ALMs. -set_global_assignment -name OPTIMIZATION_MODE "BALANCED" +# AGGRESSIVE AREA keeps the long texture-address combinational paths (e.g. vert_count -> u_texcache RAM) +# placed compactly enough to meet the 25 MHz design clock (+0.631 ns). A global switch to BALANCED closed +# the EMIF path but blew that design-clock path to -6.119 ns (a 6.7 ns placement swing), so DON'T change the +# global mode. Instead close the one 310 MHz EMIF miss surgically via the MAX_FANOUT below. +set_global_assignment -name OPTIMIZATION_MODE "AGGRESSIVE AREA" +# Ch415: the 8K Z-req FIFO read-address register u_zc_emit|u_req|raddr_hi1_q fans out to ~6 spread M20K blocks +# and missed 310 MHz EMIF setup by 103 ps (Quartus TMC-20551 asked for more register duplication, which the +# AGGRESSIVE AREA global mode suppresses). Force duplication of JUST this register so each copy drives a nearby +# block cluster -> shorter routing. Surgical (no global area/placement disruption); ~a few ALMs. +set_instance_assignment -name MAX_FANOUT 3 -to "u_zc_emit|u_req|raddr_hi1_q*" set_global_assignment -name AUTO_RESOURCE_SHARING ON # Ch357 (Codex) — SEED left at default (1): seed 1 gave -0.019 (quasi-static EMIF-lock ONLY, all real datapaths met); # seed 2 was worse (-0.155, exposed a different marginal path). The last sliver is closed via the scoped false-path in the SDC.