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
def bitfilter_clb_mux(frame_idx, bit_idx):
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
import sys, os, re
from prjxray import util
zero_db = [
"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):
assert os.getenv("XRAY_DATABASE") in ["artix7", "kintex7"]
dbfile = "%s/%s/segbits_%s.db" % (
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), tile_type)
def add_zero_bits(db_root, tile_type):
dbfile = "%s/segbits_%s.db" % (db_root, tile_type)
new_lines = set()
llast = None
@ -87,10 +86,9 @@ def add_zero_bits(tile_type):
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()
mask_db_file = "%s/%s/mask_%s.db" % (
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), mask_db)
mask_db_file = "%s/mask_%s.db" % (db_root, mask_db)
if os.path.exists(mask_db_file):
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])
for src_db in src_dbs:
seg_db_file = "%s/%s/segbits_%s.db" % (
os.getenv("XRAY_DATABASE_DIR"), os.getenv("XRAY_DATABASE"), src_db)
seg_db_file = "%s/segbits_%s.db" % (db_root, src_db)
if not os.path.exists(seg_db_file):
continue
@ -125,27 +122,48 @@ def update_mask(mask_db, *src_dbs, offset=0):
print("bit %s" % bit, file=f)
add_zero_bits("int_l")
add_zero_bits("int_r")
add_zero_bits("clbll_l")
add_zero_bits("clbll_r")
add_zero_bits("clblm_l")
add_zero_bits("clblm_r")
def run(db_root, verbose=False):
for tile_type in ["int_l", "int_r", "clbll_l", "clbll_r", "clblm_l",
"clblm_r"]:
add_zero_bits(db_root, tile_type)
update_mask("clbll_l", "clbll_l", "int_l")
update_mask("clbll_r", "clbll_r", "int_r")
update_mask("clblm_l", "clblm_l", "int_l")
update_mask("clblm_r", "clblm_r", "int_r")
update_mask("hclk_l", "hclk_l")
update_mask("hclk_r", "hclk_r")
for mask_db, src_dbs in [
("clbll_l", ("clbll_l", "int_l")),
("clbll_r", ("clbll_r", "int_r")),
("clblm_l", ("clblm_l", "int_l")),
("clblm_r", ("clblm_r", "int_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")
update_mask("bram_r", "bram_r")
update_mask("dsp_l", "dsp_l")
update_mask("dsp_r", "dsp_r")
for mask_db, src_dbs in [
("bram_l", ("int_l", )),
("bram_r", ("int_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)
update_mask("bram_r", "int_r", offset=64 * k)
update_mask("dsp_l", "int_l", offset=64 * k)
update_mask("dsp_r", "int_r", offset=64 * k)
def main():
import argparse
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
from prjxray import bitstream
from prjxray import db as prjxraydb
from prjxray import util
class NoDB(Exception):
@ -449,21 +450,10 @@ def run(
def main():
import argparse
# XXX: tool still works, but not well
# need to eliminate segments entirely
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")
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)
util.db_root_arg(parser)
parser.add_argument('--verbose', action='store_true', help='')
parser.add_argument(
'-z',