tilegrid: database["segments"] => segments

Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
John McMaster 2018-10-09 11:21:49 -07:00
parent aeea0b9ef3
commit 209e59f9a9
1 changed files with 73 additions and 74 deletions

View File

@ -24,8 +24,8 @@ for arg in sys.argv[1:]:
# Create initial database
database = dict()
database["tiles"] = dict()
database["segments"] = dict()
database = dict()
segments = dict()
tiles_by_grid = dict()
for record in tiles:
@ -34,7 +34,7 @@ for record in tiles:
tiles_by_grid[(grid_x, grid_y)] = tile_name
framebaseaddr = None
database["tiles"][tile_name] = {
database[tile_name] = {
"type": tile_type,
"sites": dict(),
"grid_x": grid_x,
@ -46,7 +46,7 @@ for record in tiles:
site_type, site_name = record[i:i + 2]
if site_name in site_baseaddr:
framebaseaddr = site_baseaddr[site_name]
database["tiles"][tile_name]["sites"][site_name] = site_type
database[tile_name]["sites"][site_name] = site_type
if framebaseaddr is not None:
tile_baseaddr[tile_name] = [framebaseaddr, 0]
@ -54,7 +54,7 @@ for record in tiles:
#######################################
# Add Segments
for tile_name, tile_data in database["tiles"].items():
for tile_name, tile_data in database.items():
tile_type = tile_data["type"]
grid_x = tile_data["grid_x"]
grid_y = tile_data["grid_y"]
@ -68,31 +68,31 @@ for tile_name, tile_data in database["tiles"].items():
segment_name = "SEG_" + tile_name
segtype = tile_type.lower()
database["segments"][segment_name] = dict()
database["segments"][segment_name]["tiles"] = [
segments[segment_name] = dict()
segments[segment_name]["tiles"] = [
tile_name, int_tile_name
]
database["segments"][segment_name]["type"] = segtype
database["segments"][segment_name]["frames"] = 36
database["segments"][segment_name]["words"] = 2
segments[segment_name]["type"] = segtype
segments[segment_name]["frames"] = 36
segments[segment_name]["words"] = 2
if tile_name in tile_baseaddr:
database["segments"][segment_name]["baseaddr"] = tile_baseaddr[
segments[segment_name]["baseaddr"] = tile_baseaddr[
tile_name]
database["tiles"][tile_name]["segment"] = segment_name
database["tiles"][int_tile_name]["segment"] = segment_name
database[tile_name]["segment"] = segment_name
database[int_tile_name]["segment"] = segment_name
if tile_type in ["HCLK_L", "HCLK_R"]:
segment_name = "SEG_" + tile_name
segtype = tile_type.lower()
database["segments"][segment_name] = dict()
database["segments"][segment_name]["tiles"] = [tile_name]
database["segments"][segment_name]["type"] = segtype
database["segments"][segment_name]["frames"] = 26
database["segments"][segment_name]["words"] = 1
database["tiles"][tile_name]["segment"] = segment_name
segments[segment_name] = dict()
segments[segment_name]["tiles"] = [tile_name]
segments[segment_name]["type"] = segtype
segments[segment_name]["frames"] = 26
segments[segment_name]["words"] = 1
database[tile_name]["segment"] = segment_name
if tile_type in ["BRAM_L", "DSP_L", "BRAM_R", "DSP_R"]:
for k in range(5):
@ -106,41 +106,41 @@ for tile_name, tile_data in database["tiles"].items():
segment_name = "SEG_" + tile_name.replace("_", "%d_" % k, 1)
segtype = tile_type.lower().replace("_", "%d_" % k, 1)
database["segments"][segment_name] = dict()
database["segments"][segment_name]["type"] = segtype
database["segments"][segment_name]["frames"] = 28
database["segments"][segment_name]["words"] = 2
segments[segment_name] = dict()
segments[segment_name]["type"] = segtype
segments[segment_name]["frames"] = 28
segments[segment_name]["words"] = 2
if k == 0:
database["segments"][segment_name]["tiles"] = [
segments[segment_name]["tiles"] = [
tile_name, interface_tile_name, int_tile_name
]
database["tiles"][tile_name]["segment"] = segment_name
database["tiles"][interface_tile_name][
database[tile_name]["segment"] = segment_name
database[interface_tile_name][
"segment"] = segment_name
database["tiles"][int_tile_name]["segment"] = segment_name
database[int_tile_name]["segment"] = segment_name
else:
database["segments"][segment_name]["tiles"] = [
segments[segment_name]["tiles"] = [
interface_tile_name, int_tile_name
]
database["tiles"][interface_tile_name][
database[interface_tile_name][
"segment"] = segment_name
database["tiles"][int_tile_name]["segment"] = segment_name
database[int_tile_name]["segment"] = segment_name
#######################################
# Populate segment base addresses: L/R along INT column
for segment_name in database["segments"].keys():
if "baseaddr" in database["segments"][segment_name]:
framebase, wordbase = database["segments"][segment_name]["baseaddr"]
for segment_name in segments.keys():
if "baseaddr" in segments[segment_name]:
framebase, wordbase = segments[segment_name]["baseaddr"]
inttile = [
tile for tile in database["segments"][segment_name]["tiles"]
if database["tiles"][tile]["type"] in ["INT_L", "INT_R"]
tile for tile in segments[segment_name]["tiles"]
if database[tile]["type"] in ["INT_L", "INT_R"]
][0]
grid_x = database["tiles"][inttile]["grid_x"]
grid_y = database["tiles"][inttile]["grid_y"]
grid_x = database[inttile]["grid_x"]
grid_y = database[inttile]["grid_y"]
if database["tiles"][inttile]["type"] == "INT_L":
if database[inttile]["type"] == "INT_L":
grid_x += 1
framebase = "0x%08x" % (int(framebase, 16) + 0x80)
else:
@ -152,41 +152,41 @@ for segment_name in database["segments"].keys():
tile = tiles_by_grid[(grid_x, grid_y)]
if database["tiles"][inttile]["type"] == "INT_L":
assert database["tiles"][tile]["type"] == "INT_R"
elif database["tiles"][inttile]["type"] == "INT_R":
assert database["tiles"][tile]["type"] == "INT_L"
if database[inttile]["type"] == "INT_L":
assert database[tile]["type"] == "INT_R"
elif database[inttile]["type"] == "INT_R":
assert database[tile]["type"] == "INT_L"
else:
assert 0
assert "segment" in database["tiles"][tile]
assert "segment" in database[tile]
seg = database["tiles"][tile]["segment"]
seg = database[tile]["segment"]
if "baseaddr" in database["segments"][seg]:
assert database["segments"][seg]["baseaddr"] == [
if "baseaddr" in segments[seg]:
assert segments[seg]["baseaddr"] == [
framebase, wordbase
]
else:
database["segments"][seg]["baseaddr"] = [framebase, wordbase]
segments[seg]["baseaddr"] = [framebase, wordbase]
#######################################
# Populate segment base addresses: Up along INT/HCLK columns
start_segments = list()
for segment_name in database["segments"].keys():
if "baseaddr" in database["segments"][segment_name]:
for segment_name in segments.keys():
if "baseaddr" in segments[segment_name]:
start_segments.append(segment_name)
for segment_name in start_segments:
framebase, wordbase = database["segments"][segment_name]["baseaddr"]
framebase, wordbase = segments[segment_name]["baseaddr"]
inttile = [
tile for tile in database["segments"][segment_name]["tiles"]
if database["tiles"][tile]["type"] in ["INT_L", "INT_R"]
tile for tile in segments[segment_name]["tiles"]
if database[tile]["type"] in ["INT_L", "INT_R"]
][0]
grid_x = database["tiles"][inttile]["grid_x"]
grid_y = database["tiles"][inttile]["grid_y"]
grid_x = database[inttile]["grid_x"]
grid_y = database[inttile]["grid_y"]
for i in range(50):
grid_y -= 1
@ -196,33 +196,33 @@ for segment_name in start_segments:
else:
wordbase += 2
segname = database["tiles"][tiles_by_grid[(grid_x, grid_y)]]["segment"]
database["segments"][segname]["baseaddr"] = [framebase, wordbase]
segname = database[tiles_by_grid[(grid_x, grid_y)]]["segment"]
segments[segname]["baseaddr"] = [framebase, wordbase]
#######################################
# Transfer segment data into tiles
for segment_name in database["segments"].keys():
for segment_name in segments.keys():
try:
baseaddr, offset = database["segments"][segment_name]["baseaddr"]
baseaddr, offset = segments[segment_name]["baseaddr"]
except:
print('Failed on segment name %s' % segment_name)
raise
for tile_name in database["segments"][segment_name]["tiles"]:
tile_type = database["tiles"][tile_name]["type"]
for tile_name in segments[segment_name]["tiles"]:
tile_type = database[tile_name]["type"]
if tile_type in ["CLBLL_L", "CLBLL_R", "CLBLM_L", "CLBLM_R", "INT_L",
"INT_R"]:
database["tiles"][tile_name]["baseaddr"] = baseaddr
database["tiles"][tile_name]["offset"] = offset
database["tiles"][tile_name]["height"] = 2
database[tile_name]["baseaddr"] = baseaddr
database[tile_name]["offset"] = offset
database[tile_name]["height"] = 2
elif tile_type in ["HCLK_L", "HCLK_R"]:
database["tiles"][tile_name]["baseaddr"] = baseaddr
database["tiles"][tile_name]["offset"] = offset
database["tiles"][tile_name]["height"] = 1
database[tile_name]["baseaddr"] = baseaddr
database[tile_name]["offset"] = offset
database[tile_name]["height"] = 1
elif tile_type in ["BRAM_L", "BRAM_R", "DSP_L", "DSP_R"]:
database["tiles"][tile_name]["baseaddr"] = baseaddr
database["tiles"][tile_name]["offset"] = offset
database["tiles"][tile_name]["height"] = 10
database[tile_name]["baseaddr"] = baseaddr
database[tile_name]["offset"] = offset
database[tile_name]["height"] = 10
elif tile_type in ["INT_INTERFACE_L", "INT_INTERFACE_R",
"BRAM_INT_INTERFACE_L", "BRAM_INT_INTERFACE_R"]:
continue
@ -233,14 +233,13 @@ for segment_name in database["segments"].keys():
# TODO: Migrate to new tilegrid format via library. This data is added for
# compability with unconverted tools. Update tools then remove this data from
# tilegrid.json.
for tiledata in database['tiles'].values():
for tiledata in database.values():
if "segment" in tiledata:
segment = tiledata['segment']
tiledata['frames'] = database['segments'][segment]['frames']
tiledata['words'] = database['segments'][segment]['words']
tiledata['segment_type'] = database['segments'][segment]['type']
tiledata['frames'] = segments[segment]['frames']
tiledata['words'] = segments[segment]['words']
tiledata['segment_type'] = segments[segment]['type']
database = database["tiles"]
#######################################
# Write