From 721ee34ba5129b496424c990a21867d0795ab0a3 Mon Sep 17 00:00:00 2001 From: Dr Jonathan Richard Robert Kimmitt Date: Wed, 19 Aug 2026 13:57:35 +0100 Subject: [PATCH] 005-tilegrid: XRAY_GTX_SITES to fuzz only the BONDED GTX quads 005-tilegrid skips GTX entirely on virtex7, and the reason is the package rather than the fuzzer: xc7vx485t-ffg1761 bonds only about half its GTX quads, an UNBONDED quad cannot be placed, and one unplaceable site fails the whole run. So the GT tiles a real design actually uses went unmeasured, and their tilegrid entries stayed empty -- which is the "key not found" / empty bits{} hole that fasm2frames then reports far downstream. XRAY_GTX_SITES takes a comma-separated site list and restricts the fuzz to it, so a bonded quad can be measured and the unbonded ones are left legitimately unmeasured instead of taking the run down with them. On this board the SGMII sits on GTXE2_CHANNEL_X1Y* / GTXE2_COMMON_X1Y0. Unset, behaviour is exactly as before. Co-Authored-By: Claude Opus 5 --- fuzzers/005-tilegrid/gtx_channel/top.py | 12 ++++++++++++ fuzzers/005-tilegrid/gtx_common/top.py | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/fuzzers/005-tilegrid/gtx_channel/top.py b/fuzzers/005-tilegrid/gtx_channel/top.py index bddc0c10..64e3de50 100644 --- a/fuzzers/005-tilegrid/gtx_channel/top.py +++ b/fuzzers/005-tilegrid/gtx_channel/top.py @@ -24,6 +24,18 @@ def gen_sites(): for site_name, site_type in gridinfo.sites.items(): if site_type in ['GTXE2_CHANNEL']: + # XRAY_GTX_SITES restricts the fuzz to a comma-separated list of + # site names. Needed on virtex7: the xc7vx485t-ffg1761 package + # bonds only about half its GTX quads, and an UNBONDED quad + # cannot be placed, so fuzzing every site fails the whole run -- + # which is why 005-tilegrid skips GTX for virtex7 entirely. + # Restricting to a bonded quad measures the tiles that a real + # design actually uses (this board's SGMII sits on + # GTXE2_CHANNEL_X1Y* / GTXE2_COMMON_X1Y0) and leaves the + # unbonded ones legitimately unmeasured. + want = os.getenv("XRAY_GTX_SITES") + if want and site_name not in want.split(','): + continue yield tile_name, site_name diff --git a/fuzzers/005-tilegrid/gtx_common/top.py b/fuzzers/005-tilegrid/gtx_common/top.py index c20ea2f0..6b765453 100644 --- a/fuzzers/005-tilegrid/gtx_common/top.py +++ b/fuzzers/005-tilegrid/gtx_common/top.py @@ -24,6 +24,18 @@ def gen_sites(): for site_name, site_type in gridinfo.sites.items(): if site_type in ['GTXE2_COMMON']: + # XRAY_GTX_SITES restricts the fuzz to a comma-separated list of + # site names. Needed on virtex7: the xc7vx485t-ffg1761 package + # bonds only about half its GTX quads, and an UNBONDED quad + # cannot be placed, so fuzzing every site fails the whole run -- + # which is why 005-tilegrid skips GTX for virtex7 entirely. + # Restricting to a bonded quad measures the tiles that a real + # design actually uses (this board's SGMII sits on + # GTXE2_CHANNEL_X1Y* / GTXE2_COMMON_X1Y0) and leaves the + # unbonded ones legitimately unmeasured. + want = os.getenv("XRAY_GTX_SITES") + if want and site_name not in want.split(','): + continue yield tile_name, site_name