mirror of https://github.com/openXC7/prjxray.git
Finish tilegrid fuzzer
Signed-off-by: Clifford Wolf <clifford@clifford.at> Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
This commit is contained in:
parent
3c955e6216
commit
1fc9871346
|
|
@ -1,2 +1,2 @@
|
|||
/specimen_[0-9][0-9][0-9]/
|
||||
/database.txt
|
||||
/tilegrid.json
|
||||
|
|
|
|||
|
|
@ -3,18 +3,18 @@ N := 1
|
|||
SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N)))
|
||||
SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS))
|
||||
|
||||
database.txt: $(SPECIMENS_OK)
|
||||
: ../../tools/segmatch -o database.txt \
|
||||
$(addsuffix /segdata_0.txt,$(SPECIMENS)) \
|
||||
$(addsuffix /segdata_1.txt,$(SPECIMENS)) \
|
||||
$(addsuffix /segdata_2.txt,$(SPECIMENS))
|
||||
database: $(SPECIMENS_OK)
|
||||
cp specimen_001/tilegrid.json tilegrid.json
|
||||
|
||||
pushdb:
|
||||
cp tilegrid.json ../../database/$(XRAY_DATABASE)/tilegrid.json
|
||||
|
||||
$(SPECIMENS_OK):
|
||||
bash generate.sh $(subst /OK,,$@)
|
||||
touch $@
|
||||
|
||||
clean:
|
||||
rm -rf $(SPECIMENS)
|
||||
rm -rf $(SPECIMENS) tilegrid.json
|
||||
|
||||
.PHONY: clean
|
||||
.PHONY: database pushdb clean
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
import os, sys, json, re
|
||||
|
||||
database = dict()
|
||||
|
||||
#######################################
|
||||
# Read
|
||||
|
||||
tiles = list()
|
||||
site_baseaddr = dict()
|
||||
|
|
@ -18,7 +20,98 @@ for arg in sys.argv[1:]:
|
|||
frame = int(line[5:5+8], 16)
|
||||
site_baseaddr[site] = "0x%08x" % (frame & ~0x7f)
|
||||
|
||||
# print(json.dumps(database, sort_keys=True, indent="\t"))
|
||||
# print(json.dumps(tiles, sort_keys=True, indent="\t"))
|
||||
print(json.dumps(site_baseaddr, sort_keys=True, indent="\t"))
|
||||
|
||||
#######################################
|
||||
# Create initial database
|
||||
|
||||
database = dict()
|
||||
database["tiles"] = dict()
|
||||
database["segments"] = dict()
|
||||
tiles_by_grid = dict()
|
||||
|
||||
for record in tiles:
|
||||
tile_type, tile_name, grid_x, grid_y = record[0:4]
|
||||
grid_x, grid_y = int(grid_x), int(grid_y)
|
||||
tiles_by_grid[(grid_x, grid_y)] = tile_name
|
||||
framebaseaddr = None
|
||||
|
||||
database["tiles"][tile_name] = {
|
||||
"type": tile_type,
|
||||
"grid_x": grid_x,
|
||||
"grid_y": grid_y
|
||||
}
|
||||
|
||||
if len(record) > 4:
|
||||
database["tiles"][tile_name]["sites"] = dict()
|
||||
for i in range(4, len(record), 2):
|
||||
site_type, site_name = record[i:i+2]
|
||||
if site_name in site_baseaddr:
|
||||
framebaseaddr = site_baseaddr[site_name]
|
||||
database["tiles"][tile_name]["sites"][site_name] = site_type
|
||||
|
||||
if tile_type in ["CLBLL_L", "CLBLL_R", "CLBLM_L", "CLBLM_R"]:
|
||||
segment_name = "SEG_" + tile_name
|
||||
database["segments"][segment_name] = dict()
|
||||
database["segments"][segment_name]["tiles"] = [tile_name]
|
||||
if framebaseaddr is not None:
|
||||
database["segments"][segment_name]["baseaddr"] = [framebaseaddr, 0]
|
||||
database["tiles"][tile_name]["segment"] = segment_name
|
||||
|
||||
|
||||
#######################################
|
||||
# Pupulate segment base addresses
|
||||
|
||||
start_segments = list()
|
||||
|
||||
for segment_name in database["segments"].keys():
|
||||
if "baseaddr" in database["segments"][segment_name]:
|
||||
start_segments.append(segment_name)
|
||||
|
||||
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"]
|
||||
|
||||
for i in range(49):
|
||||
while True:
|
||||
grid_y -= 1
|
||||
clbtile = tiles_by_grid[(grid_x, grid_y)]
|
||||
if clbtile.startswith("CLBL"): break
|
||||
|
||||
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
|
||||
else:
|
||||
grid_x -= 1
|
||||
|
||||
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))
|
||||
|
||||
|
||||
#######################################
|
||||
# Write
|
||||
|
||||
print(json.dumps(database, sort_keys=True, indent="\t"))
|
||||
|
||||
|
|
|
|||
|
|
@ -18,5 +18,5 @@ for x in design_*.bits; do
|
|||
diff -u design.bits $x | grep '^[-+]bit' > ${x%.bits}.delta
|
||||
done
|
||||
|
||||
python3 ../generate.py design_*.delta
|
||||
python3 ../generate.py design_*.delta > tilegrid.json
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue