mirror of https://github.com/openXC7/prjxray.git
tilegrid: database["segments"] => segments
Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
parent
aeea0b9ef3
commit
209e59f9a9
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue