dbfixup: db_root arg

Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
John McMaster 2018-11-06 17:32:52 -08:00
parent 2a19d56065
commit 3220cdc1ee
3 changed files with 63 additions and 43 deletions

View File

@ -38,3 +38,15 @@ def get_roi():
# we know that all bits for CLB MUXes are in frames 30 and 31, so filter all other bits # we know that all bits for CLB MUXes are in frames 30 and 31, so filter all other bits
def bitfilter_clb_mux(frame_idx, bit_idx): def bitfilter_clb_mux(frame_idx, bit_idx):
return frame_idx in [30, 31] return frame_idx in [30, 31]
def db_root_arg(parser):
database_dir = os.getenv("XRAY_DATABASE_DIR")
database = os.getenv("XRAY_DATABASE")
db_root_kwargs = {}
if database_dir is None or database is None:
db_root_kwargs['required'] = True
else:
db_root_kwargs['required'] = False
db_root_kwargs['default'] = os.path.join(database_dir, database)
parser.add_argument('--db_root', help="Database root.", **db_root_kwargs)

View File

@ -1,6 +1,7 @@
#/usr/bin/env python3 #/usr/bin/env python3
import sys, os, re import sys, os, re
from prjxray import util
zero_db = [ zero_db = [
"00_21 00_22 00_26 01_28|00_25 01_20 01_21 01_24", "00_21 00_22 00_26 01_28|00_25 01_20 01_21 01_24",
@ -32,10 +33,8 @@ zero_db = [
] ]
def add_zero_bits(tile_type): def add_zero_bits(db_root, tile_type):
assert os.getenv("XRAY_DATABASE") in ["artix7", "kintex7"] dbfile = "%s/segbits_%s.db" % (db_root, tile_type)
dbfile = "%s/%s/segbits_%s.db" % (
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), tile_type)
new_lines = set() new_lines = set()
llast = None llast = None
@ -87,10 +86,9 @@ def add_zero_bits(tile_type):
print(line, file=f) print(line, file=f)
def update_mask(mask_db, *src_dbs, offset=0): def update_mask(db_root, mask_db, src_dbs, offset=0):
bits = set() bits = set()
mask_db_file = "%s/%s/mask_%s.db" % ( mask_db_file = "%s/mask_%s.db" % (db_root, mask_db)
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), mask_db)
if os.path.exists(mask_db_file): if os.path.exists(mask_db_file):
with open(mask_db_file, "r") as f: with open(mask_db_file, "r") as f:
@ -101,8 +99,7 @@ def update_mask(mask_db, *src_dbs, offset=0):
bits.add(line[1]) bits.add(line[1])
for src_db in src_dbs: for src_db in src_dbs:
seg_db_file = "%s/%s/segbits_%s.db" % ( seg_db_file = "%s/segbits_%s.db" % (db_root, src_db)
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), src_db)
if not os.path.exists(seg_db_file): if not os.path.exists(seg_db_file):
continue continue
@ -125,27 +122,48 @@ def update_mask(mask_db, *src_dbs, offset=0):
print("bit %s" % bit, file=f) print("bit %s" % bit, file=f)
add_zero_bits("int_l") def run(db_root, verbose=False):
add_zero_bits("int_r") for tile_type in ["int_l", "int_r", "clbll_l", "clbll_r", "clblm_l",
add_zero_bits("clbll_l") "clblm_r"]:
add_zero_bits("clbll_r") add_zero_bits(db_root, tile_type)
add_zero_bits("clblm_l")
add_zero_bits("clblm_r")
update_mask("clbll_l", "clbll_l", "int_l") for mask_db, src_dbs in [
update_mask("clbll_r", "clbll_r", "int_r") ("clbll_l", ("clbll_l", "int_l")),
update_mask("clblm_l", "clblm_l", "int_l") ("clbll_r", ("clbll_r", "int_r")),
update_mask("clblm_r", "clblm_r", "int_r") ("clblm_l", ("clblm_l", "int_l")),
update_mask("hclk_l", "hclk_l") ("clblm_r", ("clblm_r", "int_r")),
update_mask("hclk_r", "hclk_r") ("hclk_l", ("hclk_l", )),
("hclk_r", ("hclk_r", )),
("bram_l", ("bram_l", )),
("bram_r", ("bram_r", )),
("dsp_l", ("dsp_l", )),
("dsp_r", ("dsp_r", )),
]:
update_mask(db_root, mask_db, src_dbs)
update_mask("bram_l", "bram_l") for mask_db, src_dbs in [
update_mask("bram_r", "bram_r") ("bram_l", ("int_l", )),
update_mask("dsp_l", "dsp_l") ("bram_r", ("int_r", )),
update_mask("dsp_r", "dsp_r") ("dsp_l", ("int_l", )),
("dsp_r", ("int_r", )),
]:
for k in range(5):
update_mask(db_root, mask_db, src_dbs, offset=64 * k)
for k in range(5):
update_mask("bram_l", "int_l", offset=64 * k) def main():
update_mask("bram_r", "int_r", offset=64 * k) import argparse
update_mask("dsp_l", "int_l", offset=64 * k)
update_mask("dsp_r", "int_r", offset=64 * k) parser = argparse.ArgumentParser(description='Create multi-bit entries')
util.db_root_arg(parser)
parser.add_argument('--verbose', action='store_true', help='')
args = parser.parse_args()
run(args.db_root, args.verbose)
if __name__ == '__main__':
main()
main()

View File

@ -9,6 +9,7 @@ Ex: BRAM_L_X6Y100:CLB_IO_CLK
import sys, os, json, re import sys, os, json, re
from prjxray import bitstream from prjxray import bitstream
from prjxray import db as prjxraydb from prjxray import db as prjxraydb
from prjxray import util
class NoDB(Exception): class NoDB(Exception):
@ -449,21 +450,10 @@ def run(
def main(): def main():
import argparse import argparse
# XXX: tool still works, but not well
# need to eliminate segments entirely
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description='XXX: does not print all data?') description="Decode bits within a tile's address space")
database_dir = os.getenv("XRAY_DATABASE_DIR") util.db_root_arg(parser)
database = os.getenv("XRAY_DATABASE")
db_root_kwargs = {}
if database_dir is None or database is None:
db_root_kwargs['required'] = True
else:
db_root_kwargs['required'] = False
db_root_kwargs['default'] = os.path.join(database_dir, database)
parser.add_argument('--db_root', help="Database root.", **db_root_kwargs)
parser.add_argument('--verbose', action='store_true', help='') parser.add_argument('--verbose', action='store_true', help='')
parser.add_argument( parser.add_argument(
'-z', '-z',