Add gridinfo-txt2json.py

Signed-off-by: Clifford Wolf <clifford@clifford.at>
Signed-off-by: Tim 'mithro' Ansell <mithro@mithis.com>
This commit is contained in:
Clifford Wolf 2017-07-23 14:33:14 +02:00
parent 3362b92cb1
commit ebb1fae14e
3 changed files with 85 additions and 0 deletions

1
gridinfo/.gitignore vendored
View File

@ -8,3 +8,4 @@
/logicframes_SLICE_*.bit
/logicframes_SLICE_*.asc
/grid-*-db.txt
/grid-*-db.json

View File

@ -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)

View File

@ -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