prjxray/fuzzers/005-tilegrid
Dr Jonathan Richard Robert Kimmitt 1c63972bd2 005-tilegrid: propagate SING bits for HP-only LIOB18 / LIOI columns
propagate_IOB_SING and propagate_IOI_SING walk each IO column from a
parent IOB/IOI tile down to the SING half-tiles at the column endpoints
and alias the parent's CLB_IO_CLK bits into both halves (offset=0 for
the bottom SING, offset=99 for the top SING).  The parent-type
allowlists were missing the HP-bank L-column types:

    propagate_IOB_SING: ["LIOB33", "RIOB33", "RIOB18"]    # LIOB18 missing
    propagate_IOI_SING: ["LIOI3",  "RIOI3",  "RIOI"]      # LIOI   missing

On artix7 / kintex7 the leftmost HP column doesn't exist as a parent
LIOB18 / LIOI in the tilegrid, so the omission was latent.  On
virtex7 VX (HP-only) both LIOB18 and RIOB18 columns exist, and the
gap surfaces as half the SING IOB / IOI tiles (the L-column ones)
having empty bits in tilegrid.json:

    LIOB18_SING:  0/14 with bits  ->  14/14
    RIOB18_SING: 14/14 (unchanged)
    LIOI_SING:    0/14 with bits  ->  14/14
    RIOI_SING:   14/14 (unchanged)

Add the missing types.  Cross-checked against iob18's own measured
parent bases (e.g. LIOB18_X81Y2 -> 0x00421000 lines up with the
propagated LIOB18_SING_X81Y1 base 0x00421000 offset=0 and Y51 offset=99).

Also de-wire the iob18_sing sub-fuzzer from TILEGRID_TDB_DEPENDENCIES:
SING tiles aren't independently addressed (they share the parent IOB's
base with a word-offset variant), and half of iob18_sing's tdb entries
land at an unaligned frame (offset+1) that add_tdb's frame-alignment
assertion would reject anyway.  The build rule stays so the fuzzer can
be invoked manually as a Vivado-measurement guard for the propagation.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 16:02:48 +01:00
..
bram Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00
bram_block Add license headers to tcl files 2020-05-26 07:33:12 -07:00
bram_int add XC7K420T support 2024-10-25 09:58:51 +07:00
cfg Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00
cfg_int Add license headers to tcl files 2020-05-26 07:33:12 -07:00
clb Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00
clb_int Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00
clk_bufg Add license headers to tcl files 2020-05-26 07:33:12 -07:00
clk_hrow Add license headers to tcl files 2020-05-26 07:33:12 -07:00
dsp Add license headers to tcl files 2020-05-26 07:33:12 -07:00
dsp_int add XC7K420T support 2024-10-25 09:58:51 +07:00
fifo_int Add license headers to tcl files 2020-05-26 07:33:12 -07:00
fuzzaddr Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00
gtp_channel 005-tilegrid: allow auto-alignment of frame 2021-01-21 19:02:39 +01:00
gtp_common 005-tilegrid: allow auto-alignment of frame 2021-01-19 19:53:42 +01:00
gtp_int_interface 005-tilegrid: pcie-int-interface: address review comments 2021-02-04 12:35:36 +01:00
gtx_channel fix gtx_channel tilegrid fuzzer 2025-02-13 17:20:08 +07:00
gtx_common Fix 005-tilegrid/gtx_common 2025-02-13 17:20:08 +07:00
gtx_int_interface 005-tilegrid/gtx_int_interface fuzzer works 2025-02-13 17:20:08 +07:00
hclk_cmt Add license headers to tcl files 2020-05-26 07:33:12 -07:00
hclk_ioi Add license headers to tcl files 2020-05-26 07:33:12 -07:00
iob Add license headers to tcl files 2020-05-26 07:33:12 -07:00
iob18 add support for the kintex high performance banks 2024-01-08 14:00:20 +07:00
iob18_int Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00
iob18_sing 005-tilegrid: add iob18_sing sub-fuzzer for SING-row IOB18 sites 2026-05-30 15:53:15 +01:00
iob_int Add license headers to tcl files 2020-05-26 07:33:12 -07:00
ioi Add license headers to tcl files 2020-05-26 07:33:12 -07:00
ioi18 Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00
mmcm Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00
monitor Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00
monitor_int Add license headers to tcl files 2020-05-26 07:33:12 -07:00
orphan_int_column Add license headers to tcl files 2020-05-26 07:33:12 -07:00
pcie run make format-py 2021-01-13 15:02:42 +01:00
pcie_int_interface fuzzers/005-tilegrid/pcie_int_interface/top.py: fix PCIE_INT variable name 2025-02-13 17:20:08 +07:00
pll Add missing FREQ_BB active feature. 2020-10-01 17:31:50 -07:00
ps7_int Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00
Makefile 005-tilegrid: propagate SING bits for HP-only LIOB18 / LIOI columns 2026-05-30 16:02:48 +01:00
README.md 005-tilegrid: added comment on EXCLUDE_ROI env variable 2020-01-24 10:13:33 +01:00
add_tdb.py Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00
generate.py Add licensing header to fuzzers' python scripts 2020-05-26 07:33:12 -07:00
generate.sh Add licensing header to bash scripts 2020-05-26 07:33:12 -07:00
generate_full.py 005-tilegrid: propagate SING bits for HP-only LIOB18 / LIOI columns 2026-05-30 16:02:48 +01:00
generate_tiles.tcl Add license headers to tcl files 2020-05-26 07:33:12 -07:00
top.v tilegrid: fix IBUF define 2018-12-04 20:59:37 -08:00
util.py Merge remote-tracking branch 'upstream/master' 2025-02-19 13:33:09 +07:00
util.tcl Add Virtex-7 (xc7vx485t) family support 2026-05-24 07:21:23 +01:00

README.md

Tilegrid Fuzzer

This fuzzer creates the tilegrid.json bitstream database. This database contains segment definitions including base frame address and frame offsets.

Example workflow for CLB

generate.tcl LOCs one LUT per segment column towards generating frame base addresses.

A reference bitstream is generated and then:

  • a series of bitstreams are generated each with one LUT bit toggled; then
  • these are compared to find a toggled bit in the CLB segment column; then
  • the resulting address is truncated to get the base frame address.

Finally, generate.py calculates the segment word offsets based on known segment column structure

Environment variables

XRAY_ROI

This environment variable must be set with a valid ROI. See database for example values

XRAY_EXCLUDE_ROI_TILEGRID

This environment variable must be set in case the part selected does not allow some tiles to be locked.

Error example (when using the artix 200T part): ERROR: [Place 30-25] Component carry4_SLICE_X82Y249 has been locked to a prohibited site SLICE_X82Y249.

To avoid this error, the XRAY_EXCLUDE_ROI_TILEGRID defines an ROI that is not taken into account when building the tilegrid, therefore excluding the problematic un-lockable sites.

As the resulting output file, tilegrid.json, is going to be checked against the one produced in the 074-dump_all fuzzer, also the latter one needs to produce a reduced tilegrid, with the excluded tiles specified with the environment variable.

XRAY_ROI_FRAMES

This can be set to a specific value to speed up processing and reduce disk space If you don't know where your ROI is, just set to to include all values (0x00000000:0xfffffff)

XRAY_ROI_GRID_*

Optionally, use these as a small performance optimization:

  • XRAY_ROI_GRID_X1
  • XRAY_ROI_GRID_X2
  • XRAY_ROI_GRID_Y1
  • XRAY_ROI_GRID_Y2

These should, if unused, be set to -1, with this caveat:

WARNING: CLB test generates this based on CLBs but implicitly includes INT

Therefore, if you don't set an explicit XRAY_ROI_GRID_* it may fail if you don't have a CLB*_L at left and a CLB*_R at right.