utils: segmaker: Use bits_per_word instead of hardcoding Signed-off-by: Tomasz Michalak <tmichalak@antmicro.com>
diff --git a/fuzzers/010-cle-lutinit/generate.py b/fuzzers/010-cle-lutinit/generate.py index 690a32c..5ddc356 100644 --- a/fuzzers/010-cle-lutinit/generate.py +++ b/fuzzers/010-cle-lutinit/generate.py
@@ -4,7 +4,7 @@ from utils.segmaker import Segmaker -segmk = Segmaker("design_%s.bits" % sys.argv[1]) +segmk = Segmaker("design_%s.bits" % sys.argv[1], bits_per_word=16) print("Loading tags from design_%s.txt." % sys.argv[1]) with open("design_%s.txt" % sys.argv[1], "r") as f:
diff --git a/utils/segmaker.py b/utils/segmaker.py index f0cd0d7..67f4267 100644 --- a/utils/segmaker.py +++ b/utils/segmaker.py
@@ -72,7 +72,7 @@ class Segmaker: - def __init__(self, bitsfile, verbose=None, db_root=None, part=None): + def __init__(self, bitsfile, verbose=False, db_root=None, part=None, bits_per_word=32): self.db_root = db_root if self.db_root is None: self.db_root = util.get_db_root() @@ -84,6 +84,7 @@ self.verbose = verbose if verbose is not None else os.getenv( 'VERBOSE', 'N') == 'Y' + self.bits_per_word = bits_per_word self.load_grid() self.load_bits(bitsfile) ''' @@ -146,10 +147,13 @@ # ex: bit_00020500_000_17 line = line.split("_") bit_frame = int(line[1], 16) - bit_wordidx = int(line[2], 10) * 2 + int(line[3], 10) // 16 - bit_bitidx = int(line[3], 10) % 16 - base_frame = bit_frame & ~0x7f - + # Word indexes in the .bits file for US+/US assume 32-bits per word + bit_wordidx = int(line[2], 10) * (32 / self.bits_per_word) + int(line[3], 10) // self.bits_per_word + bit_bitidx = int(line[3], 10) % self.bits_per_word + # Bit ranges in the Frame Address Register Description differs between US+ and US devices + # For US the ranges are identical to 7-series, but US+ is shifted 1 bit left + # Refer to UG570 Table 9-21 + base_frame = bit_frame & (~0xff if os.getenv("URAY_ARCH") in "UltraScalePlus" else ~0x7f) self.bits.setdefault(base_frame, dict()).setdefault( bit_wordidx, set()).add( (bit_frame, bit_wordidx, bit_bitidx)) @@ -229,7 +233,7 @@ for bit_frame, bit_wordidx, bit_bitidx in self.bits[ base_frame][wordidx]: bitname_frame = bit_frame - base_frame - bitname_bit = 16 * ( + bitname_bit = self.bits_per_word * ( bit_wordidx - bitj["offset"]) + bit_bitidx # Skip bits above the frame limit.