mirror of https://github.com/openXC7/prjxray.git
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:
commit
d8d184454b
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue