checkdb.py: now correctly using db and grid datastructures

Signed-off-by: Alessandro Comodi <acomodi@antmicro.com>
This commit is contained in:
Alessandro Comodi 2019-02-12 17:00:16 +01:00
parent 256ae2d1d9
commit 2a8587772d
2 changed files with 36 additions and 37 deletions

View File

@ -172,36 +172,6 @@ def addr2btype(base_addr):
return block_type_i2s[block_type_i] return block_type_i2s[block_type_i]
def gen_tile_bits(tile_segbits, tile, strict=False, verbose=False):
'''
For given tile and corresponding db_file structure yield
(absolute address, absolute FDRI bit offset, tag)
db_file:
{'<block_type_1>': [<bit lines>], '<block_type_2>': [<bit lines>], ...}
For each tag bit in the corresponding block_type entry, calculate absolute address and bit offsets
'''
for block_type in tile_segbits:
assert block_type.value in tile[
"bits"], "block type %s is not present in current tile" % block_type.value
block = tile["bits"][block_type.value]
baseaddr = int(block["baseaddr"], 0)
bitbase = 32 * block["offset"]
frames = block["frames"]
for tag in tile_segbits[block_type]:
for bit in tile_segbits[block_type][tag]:
# 31_06
word_column, word_bit, isset = bit
assert word_column <= frames, "ERROR: bit out of bound --> tag: %s; word_column = %s; frames = %s" % (
tag, word_column, frames)
yield word_column + baseaddr, word_bit + bitbase, tag
def specn(): def specn():
# ex: build/specimen_001 # ex: build/specimen_001
specdir = os.getenv("SPECDIR") specdir = os.getenv("SPECDIR")

View File

@ -17,8 +17,35 @@ import parsedb
import glob import glob
def gen_tile_bits(tile_segbits, tile_bits, strict=False, verbose=False):
'''
For given tile and corresponding db_file structure yield
(absolute address, absolute FDRI bit offset, tag)
For each tag bit in the corresponding block_type entry, calculate absolute address and bit offsets
'''
for block_type in tile_segbits:
assert block_type in tile_bits, "block type %s is not present in current tile" % block_type
block = tile_bits[block_type]
baseaddr = block.base_address
bitbase = 32 * block.offset
frames = block.frames
for tag in tile_segbits[block_type]:
for bit in tile_segbits[block_type][tag]:
# 31_06
word_column = bit.word_column
word_bit = bit.word_bit
assert word_column <= frames, "ERROR: bit out of bound --> tag: %s; word_column = %s; frames = %s" % (
tag, word_column, frames)
yield word_column + baseaddr, word_bit + bitbase, tag
def make_tile_mask( def make_tile_mask(
tile_segbits, tile_name, tilej, strict=False, verbose=False): tile_segbits, tile_name, tile_bits, strict=False, verbose=False):
''' '''
Return dict Return dict
key: (address, bit index) key: (address, bit index)
@ -30,8 +57,8 @@ def make_tile_mask(
# We may want this to build them anyway # We may want this to build them anyway
ret = dict() ret = dict()
for absaddr, bitaddr, tag in util.gen_tile_bits( for absaddr, bitaddr, tag in gen_tile_bits(tile_segbits, tile_bits,
tile_segbits, tilej, strict=strict, verbose=verbose): strict=strict, verbose=verbose):
name = "%s.%s" % (tile_name, tag) name = "%s.%s" % (tile_name, tag)
ret.setdefault((absaddr, bitaddr), name) ret.setdefault((absaddr, bitaddr), name)
return ret return ret
@ -67,11 +94,13 @@ def check_tile_overlap(db, db_root, strict=False, verbose=False):
mall = dict() mall = dict()
tiles_type_done = dict() tiles_type_done = dict()
tile_segbits = dict() tile_segbits = dict()
grid = db.grid()
tiles_checked = 0 tiles_checked = 0
for tile_name, tilej in db.tilegrid.items(): for tile_name in grid.tiles():
tile_type = tilej["type"] tile_info = grid.gridinfo_at_tilename(tile_name)
tile_type = tile_info.tile_type
tile_bits = tile_info.bits
if tile_type not in tiles_type_done: if tile_type not in tiles_type_done:
segbits = db.get_tile_segbits(tile_type).segbits segbits = db.get_tile_segbits(tile_type).segbits
@ -91,7 +120,7 @@ def check_tile_overlap(db, db_root, strict=False, verbose=False):
mtile = make_tile_mask( mtile = make_tile_mask(
tile_segbits[tile_type], tile_segbits[tile_type],
tile_name, tile_name,
tilej, tile_bits,
strict=strict, strict=strict,
verbose=verbose) verbose=verbose)
verbose and print( verbose and print(