From 3220cdc1ee472d9d9af5925a8b9b3ccecbf4282b Mon Sep 17 00:00:00 2001 From: John McMaster Date: Tue, 6 Nov 2018 17:32:52 -0800 Subject: [PATCH] dbfixup: db_root arg Signed-off-by: John McMaster --- prjxray/util.py | 12 ++++++++ utils/dbfixup.py | 78 +++++++++++++++++++++++++++++------------------ utils/segprint.py | 16 ++-------- 3 files changed, 63 insertions(+), 43 deletions(-) diff --git a/prjxray/util.py b/prjxray/util.py index 70ed3427..facb89b3 100644 --- a/prjxray/util.py +++ b/prjxray/util.py @@ -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) diff --git a/utils/dbfixup.py b/utils/dbfixup.py index eb71a1b0..18a848ea 100755 --- a/utils/dbfixup.py +++ b/utils/dbfixup.py @@ -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() diff --git a/utils/segprint.py b/utils/segprint.py index 3442e5c8..fabad99b 100755 --- a/utils/segprint.py +++ b/utils/segprint.py @@ -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',