Add filtering to tilegrid report and options for reporting output.

Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com>
This commit is contained in:
Keith Rothman 2019-01-24 11:40:36 -08:00
parent d77c6d8d6a
commit e696339059
1 changed files with 28 additions and 13 deletions

View File

@ -1,45 +1,60 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import simplejson as json
import argparse import argparse
from prjxray.db import Database
from prjxray.grid import BlockType
def main(): def main():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="Tool for checking which tiles have bits defined.") 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() args = parser.parse_args()
with open(args.tilegrid_json, 'r') as f: db = Database(args.db_root)
tilegrid = json.load(f) grid = db.grid()
tile_types = {} 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_types[gridinfo.tile_type].append((tile, gridinfo))
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]))
total_tile_count = 0 total_tile_count = 0
total_have_bits = 0 total_have_bits = 0
for tile_type, tiles in sorted(tile_types.items()): 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 continue
have_bits = 0 have_bits = 0
for tile_name, tile in tiles: for tile_name, gridinfo in tiles:
total_tile_count += 1 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 have_bits += 1
total_have_bits += 1 total_have_bits += 1
if args.show_only_missing and have_bits == total_tile_count:
continue
print( print(
'{}: {}/{} ({:.2f} %)'.format( '{}: {}/{} ({:.2f} %)'.format(
tile_type, have_bits, len(tiles), tile_type, have_bits, len(tiles),
100. * float(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('')
print( print(
'Summary: {}/{} ({:.2f} %)'.format( 'Summary: {}/{} ({:.2f} %)'.format(