From e696339059f8d4bbd358e462deae8f9e0d37130c Mon Sep 17 00:00:00 2001 From: Keith Rothman <537074+litghost@users.noreply.github.com> Date: Thu, 24 Jan 2019 11:40:36 -0800 Subject: [PATCH 1/3] Add filtering to tilegrid report and options for reporting output. Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com> --- utils/tilegrid_report.py | 41 +++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/utils/tilegrid_report.py b/utils/tilegrid_report.py index 8b26bdc0..7b83f0b8 100755 --- a/utils/tilegrid_report.py +++ b/utils/tilegrid_report.py @@ -1,45 +1,60 @@ #!/usr/bin/env python3 -import simplejson as json import argparse +from prjxray.db import Database +from prjxray.grid import BlockType def main(): parser = argparse.ArgumentParser( description="Tool for checking which tiles have bits defined.") - parser.add_argument('tilegrid_json') + parser.add_argument('db_root') + parser.add_argument('--show-only-missing', action='store_true') + parser.add_argument('--verbose', action='store_true') args = parser.parse_args() - with open(args.tilegrid_json, 'r') as f: - tilegrid = json.load(f) + db = Database(args.db_root) + grid = db.grid() tile_types = {} + for tile in grid.tiles(): + gridinfo = grid.gridinfo_at_tilename(tile) + if gridinfo.tile_type not in tile_types: + tile_types[gridinfo.tile_type] = [] - for tile in tilegrid: - tile_type = tilegrid[tile]['type'] - if tile_type not in tile_types: - tile_types[tilegrid[tile]['type']] = [] - - tile_types[tile_type].append((tile, tilegrid[tile])) + tile_types[gridinfo.tile_type].append((tile, gridinfo)) total_tile_count = 0 total_have_bits = 0 for tile_type, tiles in sorted(tile_types.items()): - if 'NULL' in tile_type: + tile_type_info = db.get_tile_type(tile_type) + + # Skip empty tiles, as no base address is requied. + if len(tile_type_info.get_pips()) == 0 and len( + tile_type_info.get_sites()) == 0: continue have_bits = 0 - for tile_name, tile in tiles: + for tile_name, gridinfo in tiles: total_tile_count += 1 - if 'bits' in tile and 'CLB_IO_CLK' in tile['bits']: + if BlockType.CLB_IO_CLK in gridinfo.bits: have_bits += 1 total_have_bits += 1 + if args.show_only_missing and have_bits == total_tile_count: + continue + print( '{}: {}/{} ({:.2f} %)'.format( tile_type, have_bits, len(tiles), 100. * float(have_bits) / len(tiles))) + if args.verbose: + for tile_name, gridinfo in tiles: + total_tile_count += 1 + if BlockType.CLB_IO_CLK not in gridinfo.bits: + print('{} is missing CLB_IO_CLK'.format(tile_name)) + print('') print( 'Summary: {}/{} ({:.2f} %)'.format( From 1fb35164359773d3b754231e5eb9d18647fad8ed Mon Sep 17 00:00:00 2001 From: Keith Rothman <537074+litghost@users.noreply.github.com> Date: Thu, 24 Jan 2019 11:45:24 -0800 Subject: [PATCH 2/3] Fix show only missing and sort tiles on verbose. Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com> --- utils/tilegrid_report.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/utils/tilegrid_report.py b/utils/tilegrid_report.py index 7b83f0b8..3c43f0ef 100755 --- a/utils/tilegrid_report.py +++ b/utils/tilegrid_report.py @@ -41,7 +41,7 @@ def main(): have_bits += 1 total_have_bits += 1 - if args.show_only_missing and have_bits == total_tile_count: + if args.show_only_missing and have_bits == len(tiles): continue print( @@ -50,10 +50,14 @@ def main(): 100. * float(have_bits) / len(tiles))) if args.verbose: + tiles_with_missing_bits = [] for tile_name, gridinfo in tiles: total_tile_count += 1 if BlockType.CLB_IO_CLK not in gridinfo.bits: - print('{} is missing CLB_IO_CLK'.format(tile_name)) + tiles_with_missing_bits.append(tile_name) + + for tile_name in sorted(tiles_with_missing_bits): + print('{} is missing CLB_IO_CLK'.format(tile_name)) print('') print( From 0bc3d9097b248f7ef1f3003e469c933d76295ad5 Mon Sep 17 00:00:00 2001 From: Keith Rothman <537074+litghost@users.noreply.github.com> Date: Sun, 27 Jan 2019 07:04:09 -0800 Subject: [PATCH 3/3] Add INT_INTERFACE filtering. Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com> --- utils/tilegrid_report.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/utils/tilegrid_report.py b/utils/tilegrid_report.py index 3c43f0ef..08f4d984 100755 --- a/utils/tilegrid_report.py +++ b/utils/tilegrid_report.py @@ -34,6 +34,11 @@ def main(): tile_type_info.get_sites()) == 0: continue + # INT_INTERFACE tiles likely don't contain configuration? Remove this + # if this ends up false. + if 'INT_INTERFACE' in tile_type: + continue + have_bits = 0 for tile_name, gridinfo in tiles: total_tile_count += 1