diff --git a/gridinfo/.gitignore b/gridinfo/.gitignore index ee33be77..4af748d9 100644 --- a/gridinfo/.gitignore +++ b/gridinfo/.gitignore @@ -8,3 +8,4 @@ /logicframes_SLICE_*.bit /logicframes_SLICE_*.asc /grid-*-db.txt +/grid-*-db.json diff --git a/gridinfo/gridinfo-txt2json.py b/gridinfo/gridinfo-txt2json.py new file mode 100644 index 00000000..92957303 --- /dev/null +++ b/gridinfo/gridinfo-txt2json.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 + +import sys +import json +import re + +db_tiles = set() +db_tile_prop = dict() +db_tile_sites = dict() + +db_sites = set() +db_site_prop = dict() +db_site_tile = dict() +db_site_bit = dict() + +def add_tile(tile): + if tile not in db_tiles: + db_tiles.add(tile) + db_tile_prop[tile] = dict() + db_tile_sites[tile] = list() + +def add_site(site): + if site not in db_sites: + db_sites.add(site) + db_site_prop[site] = dict() + +with open("%s.txt" % sys.argv[1]) as f: + for line in f: + line = line.split() + + if line[0] == "TILEPROP": + add_tile(line[1]) + db_tile_prop[line[1]][line[2]] = " ".join(line[3:]) + continue + + if line[0] == "TILESITE": + add_tile(line[1]) + add_site(line[2]) + db_tile_sites[line[1]].append(line[2]) + db_site_tile[line[2]] = line[1] + continue + + if line[0] == "SITEPROP": + add_site(line[1]) + db_site_prop[line[1]][line[2]] = " ".join(line[3:]) + continue + + if line[0] == "SLICEBIT": + for i in range(50): + assert line[1] not in db_site_bit + db_site_bit[line[1]] = line[2] + ("" if i == 0 else " ?") + m = re.match("(.*)Y([0-9]+)", line[1]) + line[1] = "%sY%d" % (m.group(1), int(m.group(2))+1) + continue + + assert False + +print("Number of tiles: %d" % len(db_tiles)) +print("Number of sites: %d" % len(db_sites)) +print("Number of sites with bit: %d" % len(db_site_bit)) + +database = dict() + +database["tiles"] = dict() +for tile in db_tiles: + entry = dict() + entry["props"] = db_tile_prop[tile] + entry["sites"] = db_tile_sites[tile] + database["tiles"][tile] = entry + +database["sites"] = dict() +for site in db_sites: + entry = dict() + entry["props"] = db_site_prop[site] + entry["tile"] = db_site_tile[site] + if site in db_site_bit: + entry["bit"] = db_site_bit[site] + database["sites"][site] = entry + +with open("%s.json" % sys.argv[1], "w") as f: + print(json.dumps(database, sort_keys=True, indent="\t"), file=f) + diff --git a/gridinfo/runme.sh b/gridinfo/runme.sh index e27f557b..da3a3100 100644 --- a/gridinfo/runme.sh +++ b/gridinfo/runme.sh @@ -69,3 +69,5 @@ vivado -nojournal -log design.log -mode batch -source design.tcl done } > grid-${XRAY_PART}-db.txt +python3 gridinfo-txt2json.py grid-${XRAY_PART}-db +