mirror of https://github.com/openXC7/prjxray.git
segprint: use prjxray.db lib
Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
parent
5532adac5b
commit
b44e9dd49f
|
|
@ -25,14 +25,15 @@ def get_available_databases(prjxray_root):
|
||||||
|
|
||||||
|
|
||||||
class Database(object):
|
class Database(object):
|
||||||
def __init__(self, db_root):
|
def __init__(self, db_root=None):
|
||||||
""" Create project x-ray Database at given db_root.
|
""" Create project x-ray Database at given db_root.
|
||||||
|
|
||||||
db_root: Path to directory containing settings.sh, *.db, tilegrid.json and
|
db_root: Path to directory containing settings.sh, *.db, tilegrid.json and
|
||||||
tileconn.json
|
tileconn.json
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self.db_root = db_root
|
self.db_root = db_root or os.path.join(
|
||||||
|
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"))
|
||||||
self.tilegrid = None
|
self.tilegrid = None
|
||||||
self.tileconn = None
|
self.tileconn = None
|
||||||
self.tile_types = None
|
self.tile_types = None
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ This output is intended for debugging and not directly related to FASM
|
||||||
|
|
||||||
import sys, os, json, re
|
import sys, os, json, re
|
||||||
from prjxray import bitstream
|
from prjxray import bitstream
|
||||||
|
from prjxray import db as prjxraydb
|
||||||
|
|
||||||
|
|
||||||
class NoDB(Exception):
|
class NoDB(Exception):
|
||||||
|
|
@ -18,26 +19,20 @@ segbitsdb = dict()
|
||||||
|
|
||||||
# int and sites are loaded together so that bit coverage can be checked together
|
# int and sites are loaded together so that bit coverage can be checked together
|
||||||
# however, as currently written, each segment is essentially printed twice
|
# however, as currently written, each segment is essentially printed twice
|
||||||
def process_db(tile_type, process):
|
def process_db(db, tile_type, process, verbose):
|
||||||
fns = [
|
print(db.get_tile_types())
|
||||||
# sites
|
ttdb = db.get_tile_type(tile_type)
|
||||||
"%s/%s/segbits_%s.db" % (
|
|
||||||
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"),
|
|
||||||
tile_type.lower()),
|
|
||||||
# interconnect
|
|
||||||
"%s/%s/segbits_int_%s.db" % (
|
|
||||||
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"),
|
|
||||||
tile_type[-1].lower()),
|
|
||||||
]
|
|
||||||
|
|
||||||
|
fns = [ttdb.tile_dbs.segbits, ttdb.tile_dbs.ppips]
|
||||||
|
verbose and print("process_db(%s): %s" % (tile_type, fns))
|
||||||
for fn in fns:
|
for fn in fns:
|
||||||
if os.path.exists(fn):
|
if fn:
|
||||||
with open(fn, "r") as f:
|
with open(fn, "r") as f:
|
||||||
for line in f:
|
for line in f:
|
||||||
process(line)
|
process(line)
|
||||||
|
|
||||||
|
|
||||||
def get_database(tile_type):
|
def get_database(db, tile_type, verbose=False):
|
||||||
tags = list()
|
tags = list()
|
||||||
|
|
||||||
if tile_type in segbitsdb:
|
if tile_type in segbitsdb:
|
||||||
|
|
@ -46,7 +41,7 @@ def get_database(tile_type):
|
||||||
def process(l):
|
def process(l):
|
||||||
tags.append(l.split())
|
tags.append(l.split())
|
||||||
|
|
||||||
process_db(tile_type, process)
|
process_db(db, tile_type, process, verbose=verbose)
|
||||||
|
|
||||||
if len(tags) == 0:
|
if len(tags) == 0:
|
||||||
raise NoDB(tile_type)
|
raise NoDB(tile_type)
|
||||||
|
|
@ -120,7 +115,7 @@ def tag_matched(entry, segbits):
|
||||||
decode_warnings = set()
|
decode_warnings = set()
|
||||||
|
|
||||||
|
|
||||||
def seg_decode(flag_decode_emit, seginfo, segbits, verbose=False):
|
def seg_decode(flag_decode_emit, db, seginfo, segbits, verbose=False):
|
||||||
segtags = set()
|
segtags = set()
|
||||||
|
|
||||||
# already failed?
|
# already failed?
|
||||||
|
|
@ -128,7 +123,7 @@ def seg_decode(flag_decode_emit, seginfo, segbits, verbose=False):
|
||||||
return segtags
|
return segtags
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for entry in get_database(seginfo["type"]):
|
for entry in get_database(db, seginfo["type"], verbose=verbose):
|
||||||
if not tagmatch(entry, segbits):
|
if not tagmatch(entry, segbits):
|
||||||
continue
|
continue
|
||||||
tag_matched(entry, segbits)
|
tag_matched(entry, segbits)
|
||||||
|
|
@ -142,6 +137,7 @@ def seg_decode(flag_decode_emit, seginfo, segbits, verbose=False):
|
||||||
|
|
||||||
|
|
||||||
def handle_segment(
|
def handle_segment(
|
||||||
|
db,
|
||||||
segname,
|
segname,
|
||||||
segments,
|
segments,
|
||||||
bitdata,
|
bitdata,
|
||||||
|
|
@ -161,7 +157,7 @@ def handle_segment(
|
||||||
|
|
||||||
if flag_decode_emit or flag_decode_omit:
|
if flag_decode_emit or flag_decode_omit:
|
||||||
segtags = seg_decode(
|
segtags = seg_decode(
|
||||||
flag_decode_emit, seginfo, segbits, verbose=verbose)
|
flag_decode_emit, db, seginfo, segbits, verbose=verbose)
|
||||||
else:
|
else:
|
||||||
segtags = set()
|
segtags = set()
|
||||||
|
|
||||||
|
|
@ -206,7 +202,6 @@ def mk_grid():
|
||||||
with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"),
|
with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"),
|
||||||
os.getenv("XRAY_DATABASE")), "r") as f:
|
os.getenv("XRAY_DATABASE")), "r") as f:
|
||||||
tiles = json.load(f)
|
tiles = json.load(f)
|
||||||
|
|
||||||
'''Load tilegrid, flattening all blocks into one dictionary'''
|
'''Load tilegrid, flattening all blocks into one dictionary'''
|
||||||
# TODO: Migrate to new tilegrid format via library.
|
# TODO: Migrate to new tilegrid format via library.
|
||||||
return tiles, mk_segments(tiles)
|
return tiles, mk_segments(tiles)
|
||||||
|
|
@ -237,6 +232,7 @@ def run(
|
||||||
flag_decode_omit=False,
|
flag_decode_omit=False,
|
||||||
verbose=False):
|
verbose=False):
|
||||||
tiles, segments = mk_grid()
|
tiles, segments = mk_grid()
|
||||||
|
db = prjxraydb.Database()
|
||||||
|
|
||||||
bitdata = bitstream.load_bitdata2(open(bits_file, "r"))
|
bitdata = bitstream.load_bitdata2(open(bits_file, "r"))
|
||||||
|
|
||||||
|
|
@ -257,6 +253,7 @@ def run(
|
||||||
# revisit?
|
# revisit?
|
||||||
for segname in segnames:
|
for segname in segnames:
|
||||||
handle_segment(
|
handle_segment(
|
||||||
|
db,
|
||||||
segname,
|
segname,
|
||||||
segments,
|
segments,
|
||||||
bitdata,
|
bitdata,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue