diff --git a/fuzzers/005-tilegrid/generate.py b/fuzzers/005-tilegrid/generate.py
index 40c0a2fc..298515fc 100644
--- a/fuzzers/005-tilegrid/generate.py
+++ b/fuzzers/005-tilegrid/generate.py
@@ -8,6 +8,7 @@ import os, sys, json, re
tiles = list()
site_baseaddr = dict()
+tile_baseaddr = dict()
with open("tiles.txt") as f:
for line in f:
@@ -49,31 +50,119 @@ for record in tiles:
framebaseaddr = site_baseaddr[site_name]
database["tiles"][tile_name]["sites"][site_name] = site_type
+ if framebaseaddr is not None:
+ tile_baseaddr[tile_name] = [framebaseaddr, 0]
+
+
+#######################################
+# Add Segments
+
+for tile_name, tile_data in database["tiles"].items():
+ tile_type = tile_data["type"]
+ grid_x = tile_data["grid_x"]
+ grid_y = tile_data["grid_y"]
+
if tile_type in ["CLBLL_L", "CLBLL_R", "CLBLM_L", "CLBLM_R"]:
+ if tile_type in ["CLBLL_L", "CLBLM_L"]:
+ int_tile_name = tiles_by_grid[(grid_x+1, grid_y)]
+ else:
+ int_tile_name = tiles_by_grid[(grid_x-1, grid_y)]
+
segment_name = "SEG_" + tile_name
segtype = tile_type.lower()
+
database["segments"][segment_name] = dict()
- database["segments"][segment_name]["tiles"] = [tile_name]
+ database["segments"][segment_name]["tiles"] = [tile_name, int_tile_name]
database["segments"][segment_name]["type"] = segtype
database["segments"][segment_name]["frames"] = 36
database["segments"][segment_name]["words"] = 2
- if framebaseaddr is not None:
- database["segments"][segment_name]["baseaddr"] = [framebaseaddr, 0]
+
+ if tile_name in tile_baseaddr:
+ database["segments"][segment_name]["baseaddr"] = tile_baseaddr[tile_name]
+
database["tiles"][tile_name]["segment"] = segment_name
+ database["tiles"][int_tile_name]["segment"] = segment_name
if tile_type in ["HCLK_L", "HCLK_R"]:
segment_name = "SEG_" + tile_name
segtype = tile_type.lower()
+
database["segments"][segment_name] = dict()
database["segments"][segment_name]["tiles"] = [tile_name]
database["segments"][segment_name]["type"] = segtype
- database["segments"][segment_name]["frames"] = 36
+ database["segments"][segment_name]["frames"] = 26
database["segments"][segment_name]["words"] = 1
database["tiles"][tile_name]["segment"] = segment_name
+ if tile_type in ["BRAM_L", "DSP_L", "BRAM_R", "DSP_R"]:
+ for k in range(5):
+ if tile_type in ["BRAM_L", "DSP_L"]:
+ interface_tile_name = tiles_by_grid[(grid_x+1, grid_y-k)]
+ int_tile_name = tiles_by_grid[(grid_x+2, grid_y-k)]
+ else:
+ interface_tile_name = tiles_by_grid[(grid_x-1, grid_y-k)]
+ int_tile_name = tiles_by_grid[(grid_x-2, grid_y-k)]
+
+ segment_name = "SEG_" + tile_name.replace("_", "%d_" % k, 1)
+ segtype = tile_type.lower().replace("_", "%d_" % k, 1)
+
+ database["segments"][segment_name] = dict()
+ database["segments"][segment_name]["type"] = segtype
+ database["segments"][segment_name]["frames"] = 28
+ database["segments"][segment_name]["words"] = 1
+
+ if k == 0:
+ database["segments"][segment_name]["tiles"] = [tile_name, interface_tile_name, int_tile_name]
+ database["tiles"][tile_name]["segment"] = segment_name
+ database["tiles"][interface_tile_name]["segment"] = segment_name
+ database["tiles"][int_tile_name]["segment"] = segment_name
+ else:
+ database["segments"][segment_name]["tiles"] = [interface_tile_name, int_tile_name]
+ database["tiles"][interface_tile_name]["segment"] = segment_name
+ database["tiles"][int_tile_name]["segment"] = segment_name
+
#######################################
-# Pupulate segment base addresses
+# Populate segment base addresses: L/R along INT column
+
+for segment_name in database["segments"].keys():
+ if "baseaddr" in database["segments"][segment_name]:
+ framebase, wordbase = database["segments"][segment_name]["baseaddr"]
+ inttile = [tile for tile in database["segments"][segment_name]["tiles"] if database["tiles"][tile]["type"] in ["INT_L", "INT_R"]][0]
+ grid_x = database["tiles"][inttile]["grid_x"]
+ grid_y = database["tiles"][inttile]["grid_y"]
+
+ if database["tiles"][inttile]["type"] == "INT_L":
+ grid_x += 1
+ framebase = "0x%08x" % (int(framebase, 16) + 0x80)
+ else:
+ grid_x -= 1
+ framebase = "0x%08x" % (int(framebase, 16) - 0x80)
+
+ if (grid_x, grid_y) not in tiles_by_grid:
+ continue
+
+ tile = tiles_by_grid[(grid_x, grid_y)]
+
+ if database["tiles"][inttile]["type"] == "INT_L":
+ assert database["tiles"][tile]["type"] == "INT_R"
+ elif database["tiles"][inttile]["type"] == "INT_R":
+ assert database["tiles"][tile]["type"] == "INT_L"
+ else:
+ assert 0
+
+ assert "segment" in database["tiles"][tile]
+
+ seg = database["tiles"][tile]["segment"]
+
+ if "baseaddr" in database["segments"][seg]:
+ assert database["segments"][seg]["baseaddr"] == [framebase, wordbase]
+ else:
+ database["segments"][seg]["baseaddr"] = (framebase, wordbase)
+
+
+#######################################
+# Populate segment base addresses: Up along INT/HCLK columns
start_segments = list()
@@ -83,52 +172,20 @@ for segment_name in database["segments"].keys():
for segment_name in start_segments:
framebase, wordbase = database["segments"][segment_name]["baseaddr"]
- clbtile = [tile for tile in database["segments"][segment_name]["tiles"] if tile.startswith("CLBL")][0]
- grid_x = database["tiles"][clbtile]["grid_x"]
- grid_y = database["tiles"][clbtile]["grid_y"]
+ inttile = [tile for tile in database["segments"][segment_name]["tiles"] if database["tiles"][tile]["type"] in ["INT_L", "INT_R"]][0]
+ grid_x = database["tiles"][inttile]["grid_x"]
+ grid_y = database["tiles"][inttile]["grid_y"]
- for i in range(49):
- while True:
- grid_y -= 1
- clbtile = tiles_by_grid[(grid_x, grid_y)]
- if clbtile.startswith("CLBL"): break
+ for i in range(50):
+ grid_y -= 1
- wordbase += 2
- if wordbase == 50: wordbase += 1
-
- segname = database["tiles"][clbtile]["segment"]
- database["segments"][segname]["baseaddr"] = [framebase, wordbase]
-
-
-#######################################
-# Add INT tiles to segments
-
-for segment_name in database["segments"].keys():
- for clbtile in database["segments"][segment_name]["tiles"]:
- if not clbtile.startswith("CLBL"):
- continue
-
- grid_x = database["tiles"][clbtile]["grid_x"]
- grid_y = database["tiles"][clbtile]["grid_y"]
-
- if database["tiles"][clbtile]["type"] in ["CLBLL_L", "CLBLM_L"]:
- grid_x += 1
+ if wordbase == 50:
+ wordbase += 1
else:
- grid_x -= 1
+ wordbase += 2
- inttile = tiles_by_grid[(grid_x, grid_y)]
- assert inttile.startswith("INT_")
-
- database["tiles"][inttile]["segment"] = segment_name
- s = set(database["segments"][segment_name]["tiles"] + [inttile])
- database["segments"][segment_name]["tiles"] = list(sorted(s))
-
- if inttile.endswith("25") or inttile.endswith("75"):
- clktile = tiles_by_grid[(grid_x, grid_y+1)]
- assert clktile.startswith("HCLK_")
- clkseg = database["tiles"][clktile]["segment"]
- framebase, wordbase = database["segments"][segment_name]["baseaddr"]
- database["segments"][clkseg]["baseaddr"] = [framebase, wordbase-1]
+ segname = database["tiles"][tiles_by_grid[(grid_x, grid_y)]]["segment"]
+ database["segments"][segname]["baseaddr"] = [framebase, wordbase]
#######################################
diff --git a/fuzzers/019_ndi1mux/.gitignore b/fuzzers/019-ndi1mux/.gitignore
similarity index 100%
rename from fuzzers/019_ndi1mux/.gitignore
rename to fuzzers/019-ndi1mux/.gitignore
diff --git a/fuzzers/019_ndi1mux/Makefile b/fuzzers/019-ndi1mux/Makefile
similarity index 100%
rename from fuzzers/019_ndi1mux/Makefile
rename to fuzzers/019-ndi1mux/Makefile
diff --git a/fuzzers/019_ndi1mux/README.txt b/fuzzers/019-ndi1mux/README.txt
similarity index 100%
rename from fuzzers/019_ndi1mux/README.txt
rename to fuzzers/019-ndi1mux/README.txt
diff --git a/fuzzers/019_ndi1mux/generate.py b/fuzzers/019-ndi1mux/generate.py
similarity index 100%
rename from fuzzers/019_ndi1mux/generate.py
rename to fuzzers/019-ndi1mux/generate.py
diff --git a/fuzzers/019_ndi1mux/generate.sh b/fuzzers/019-ndi1mux/generate.sh
similarity index 100%
rename from fuzzers/019_ndi1mux/generate.sh
rename to fuzzers/019-ndi1mux/generate.sh
diff --git a/fuzzers/019_ndi1mux/generate.tcl b/fuzzers/019-ndi1mux/generate.tcl
similarity index 100%
rename from fuzzers/019_ndi1mux/generate.tcl
rename to fuzzers/019-ndi1mux/generate.tcl
diff --git a/fuzzers/019_ndi1mux/top.py b/fuzzers/019-ndi1mux/top.py
similarity index 100%
rename from fuzzers/019_ndi1mux/top.py
rename to fuzzers/019-ndi1mux/top.py
diff --git a/fuzzers/050-intpips/generate.tcl b/fuzzers/050-intpips/generate.tcl
index 6db75a91..ee52458f 100644
--- a/fuzzers/050-intpips/generate.tcl
+++ b/fuzzers/050-intpips/generate.tcl
@@ -18,6 +18,7 @@ set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]
+set_param tcl.collectionResultDisplayLimit 0
source ../../../utils/utils.tcl
randplace_pblock 100 roi
diff --git a/htmlgen/htmlgen.py b/htmlgen/htmlgen.py
index cea4f588..010bb6ef 100755
--- a/htmlgen/htmlgen.py
+++ b/htmlgen/htmlgen.py
@@ -258,6 +258,12 @@ with out_open("index.html") as f:
if tiledata["type"] in ["CLBLM_L", "CLBLM_R"]: bgcolor="#ffaaaa"
if tiledata["type"] in ["HCLK_L", "HCLK_R"]: bgcolor="#aaffaa"
+ if tiledata["type"] in ["BRAM_INT_INTERFACE_L", "BRAM_L"]: bgcolor="#aaffff"
+ if tiledata["type"] in ["BRAM_INT_INTERFACE_R", "BRAM_R"]: bgcolor="#aaffff"
+
+ if tiledata["type"] in ["INT_INTERFACE_L", "DSP_L"]: bgcolor="#ffaaff"
+ if tiledata["type"] in ["INT_INTERFACE_R", "DSP_R"]: bgcolor="#ffaaff"
+
title = [tilename]
if "segment" in tiledata:
@@ -276,6 +282,10 @@ with out_open("index.html") as f:
else:
print("Warning: no baseaddr in segment %s (via tile %s)." % (tiledata["segment"], tilename))
+ tilename = tilename.replace("INT_INTERFACE_", "INTF_")
+ tilename = tilename.replace("_X", "
X")
+ tilename = tilename.replace("B_TERM", "B
TERM")
+
print("