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.