Merge pull request #139 from litghost/integrate_new_tilegrid

Hack to make new tilegrid play nice with non-updated utilities
This commit is contained in:
litghost 2018-10-05 13:41:03 -07:00 committed by GitHub
commit d8d184454b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 127 additions and 15 deletions

View File

@ -226,11 +226,17 @@ for segment_name in database["segments"].keys():
# print(tile_type, offset) # print(tile_type, offset)
assert False assert False
database = database["tiles"] # TODO: Migrate to new tilegrid format via library. This data is added for
# compability with unconverted tools. Update tools then remove this data from
for tiledata in database.values(): # tilegrid.json.
for tiledata in database['tiles'].values():
if "segment" in tiledata: if "segment" in tiledata:
del tiledata["segment"] segment = tiledata['segment']
tiledata['frames'] = database['segments'][segment]['frames']
tiledata['words'] = database['segments'][segment]['words']
tiledata['segment_type'] = database['segments'][segment]['type']
database = database["tiles"]
####################################### #######################################
# Write # Write

View File

@ -12,3 +12,11 @@ python3 create_node_tree.py \
python3 reduce_site_types.py --output_dir output python3 reduce_site_types.py --output_dir output
python3 generate_grid.py --root_dir specimen_001/ --output_dir output \ python3 generate_grid.py --root_dir specimen_001/ --output_dir output \
--ignored_wires ${XRAY_DATABASE}_ignored_wires.txt --ignored_wires ${XRAY_DATABASE}_ignored_wires.txt
BASE_TILEGRID=../../database/${XRAY_DATABASE}/tilegrid.json
if [ -f $BASE_TILEGRID ]; then
mv output/tilegrid.json output/tilegrid_full.json.tmp
python3 ../../utils/merge_tilegrid.py \
--base_grid $BASE_TILEGRID \
--overlay_grid output/tilegrid_full.json.tm \
--output_grid output/tilegrid.json

View File

@ -489,10 +489,7 @@ def connect_wires(tiles, tileconn, wire_map):
def generate_tilegrid(pool, tiles): def generate_tilegrid(pool, tiles):
wire_map = {} wire_map = {}
grid = { grid = {}
'segments': {},
'tiles': {},
}
num_tiles = 0 num_tiles = 0
for tile_type in tiles: for tile_type in tiles:
@ -522,7 +519,7 @@ def generate_tilegrid(pool, tiles):
} }
del tile[tilename]['wires'] del tile[tilename]['wires']
grid['tiles'].update(tile) grid.update(tile)
idx += 1 idx += 1
bar.update(idx) bar.update(idx)
@ -543,8 +540,7 @@ def generate_tileconn(pool, node_tree, nodes, wire_map, grid):
bar.update(idx) bar.update(idx)
raw_node_data.append(node) raw_node_data.append(node)
process_node( process_node(
tileconn, key_history, node, wire_map, node_tree, tileconn, key_history, node, wire_map, node_tree, grid)
grid['tiles'])
bar.update(idx + 1) bar.update(idx + 1)
tileconn = flatten_tile_conn(tileconn) tileconn = flatten_tile_conn(tileconn)
@ -629,7 +625,7 @@ def main():
print( print(
"{} Connecting wires to verify tileconn".format( "{} Connecting wires to verify tileconn".format(
datetime.datetime.now())) datetime.datetime.now()))
wire_nodes = connect_wires(grid['tiles'], tileconn, wire_map) wire_nodes = connect_wires(grid, tileconn, wire_map)
with open(wire_nodes_file, 'wb') as f: with open(wire_nodes_file, 'wb') as f:
pickle.dump(wire_nodes, f) pickle.dump(wire_nodes, f)

View File

@ -157,7 +157,23 @@ def run(f_in, f_out, sparse=False, debug=False):
with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"), with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"),
os.getenv("XRAY_DATABASE")), "r") as f: os.getenv("XRAY_DATABASE")), "r") as f:
grid = json.load(f) new_grid = json.load(f)
# TODO: Migrate to new tilegrid format via library.
grid = {'tiles': new_grid, 'segments': {}}
for tile in grid['tiles'].values():
if 'segment' in tile:
segment = tile['segment']
grid['segments'][segment] = {
'baseaddr': [
tile['baseaddr'],
tile['offset'],
],
'type': tile['segment_type'],
'frames': tile['frames'],
'words': tile['words'],
}
if not sparse: if not sparse:
# Initiaize bitstream to 0 # Initiaize bitstream to 0

View File

@ -73,7 +73,37 @@ def tag2fasm(grid, seg, tag):
def run(f_in, f_out, sparse=False): def run(f_in, f_out, sparse=False):
with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"), with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"),
os.getenv("XRAY_DATABASE")), "r") as f: os.getenv("XRAY_DATABASE")), "r") as f:
grid = json.load(f) new_grid = json.load(f)
# TODO: Migrate to new tilegrid format via library.
grid = {'tiles': new_grid, 'segments': {}}
for tilename, tile in grid['tiles'].items():
if 'segment' in tile:
segment = tile['segment']
if segment not in grid['segments']:
grid['segments'][segment] = {
'baseaddr': (
tile['baseaddr'],
tile['offset'],
),
'type': tile['segment_type'],
'frames': tile['frames'],
'words': tile['words'],
'tiles': [tilename]
}
else:
assert grid['segments'][segment]['baseaddr'] == (
tile['baseaddr'],
tile['offset'],
)
assert grid['segments'][segment]['type'] == tile[
'segment_type']
assert grid['segments'][segment]['frames'] == tile['frames']
assert grid['segments'][segment]['words'] == tile['words']
grid['segments'][segment]['tiles'].append(tilename)
seg = None seg = None
for l in f_in: for l in f_in:

40
utils/merge_tilegrid.py Normal file
View File

@ -0,0 +1,40 @@
import json
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--base_grid', required=True)
parser.add_argument('--output_grid', required=True)
parser.add_argument('--overlay_grid', required=True)
parser.add_argument('--old_format', action='store_true')
args = parser.parse_args()
with open(args.base_grid) as f:
base_grid = json.load(f)
with open(args.overlay_grid) as f:
overlay_grid = json.load(f)
if args.old_format:
overlay_grid = overlay_grid['tiles']
for tile in overlay_grid:
if tile in base_grid:
for k in overlay_grid[tile]:
if k in base_grid[tile]:
assert base_grid[tile][k] == overlay_grid[tile][k], (
k, base_grid[tile][k], overlay_grid[tile][k])
else:
base_grid[tile][k] = overlay_grid[tile][k]
else:
base_grid[tile] = overlay_grid[tile]
with open(args.output_grid, 'w') as f:
json.dump(base_grid, f, indent=2)
if __name__ == '__main__':
main()

View File

@ -48,7 +48,23 @@ for o, a in opts:
with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"), with open("%s/%s/tilegrid.json" % (os.getenv("XRAY_DATABASE_DIR"),
os.getenv("XRAY_DATABASE")), "r") as f: os.getenv("XRAY_DATABASE")), "r") as f:
grid = json.load(f) new_grid = json.load(f)
# TODO: Migrate to new tilegrid format via library.
grid = {'tiles': new_grid, 'segments': {}}
for tile in grid['tiles'].values():
if 'segment' in tile:
segment = tile['segment']
grid['segments'][segment] = {
'baseaddr': [
tile['baseaddr'],
tile['offset'],
],
'type': tile['segment_type'],
'frames': tile['frames'],
'words': tile['words'],
}
bitdata = dict() bitdata = dict()