prjxray/fuzzers/005-tilegrid/generate.py

80 lines
2.0 KiB
Python

#!/usr/bin/env python3
from utils import xjson
def load_tiles(tiles_fn):
'''
"$type $tile $grid_x $grid_y $typed_sites"
typed_sites: foreach t $site_types s $sites
'''
tiles = list()
with open(tiles_fn) as f:
for line in f:
# CLBLM_L CLBLM_L_X10Y98 30 106 SLICEL SLICE_X13Y98 SLICEM SLICE_X12Y98
record = line.split()
tile_type, tile_name, grid_x, grid_y = record[0:4]
grid_x, grid_y = int(grid_x), int(grid_y)
sites = {}
for i in range(4, len(record), 2):
site_type, site_name = record[i:i + 2]
sites[site_name] = site_type
tile = {
'type': tile_type,
'name': tile_name,
'grid_x': grid_x,
'grid_y': grid_y,
'sites': sites,
}
tiles.append(tile)
return tiles
def make_database(tiles):
# tile database with X, Y, and list of sites
# tile name as keys
database = dict()
for tile in tiles:
database[tile["name"]] = {
"type": tile["type"],
"sites": tile["sites"],
"grid_x": tile["grid_x"],
"grid_y": tile["grid_y"],
"bits": {},
}
return database
def run(tiles_fn, json_fn, verbose=False):
# Load input files
tiles = load_tiles(tiles_fn)
# Index input
database = make_database(tiles)
# Save
xjson.pprint(open(json_fn, 'w'), database)
def main():
import argparse
parser = argparse.ArgumentParser(
description='Generate tilegrid.json from bitstream deltas')
parser.add_argument('--verbose', action='store_true', help='')
parser.add_argument('--out', default='/dev/stdout', help='Output JSON')
parser.add_argument(
'--tiles', default='tiles.txt', help='Input tiles.txt tcl output')
args = parser.parse_args()
run(args.tiles, args.out, verbose=args.verbose)
if __name__ == '__main__':
main()