blob: 79e9d206355a3555783679c00b29b464ca580dda [file] [log] [blame] [edit]
#!/usr/bin/env python3
import argparse
import pickle
# =============================================================================
def generate_clkmap_csv(connections, tile_grid):
"""
Generates a map of GMUX locations for CLOCK pad locations
"""
csv_lines = []
# Get connection objects representing CLOCK to GMUX, extract location of
# the cells
for connection in connections:
# Filter connections
if connection.is_direct is not True:
continue
if "CLOCK" not in connection.src.pin or \
"GMUX" not in connection.dst.pin:
continue
# Get the CLOCK tile
if connection.src.loc not in tile_grid:
print("ERROR: No tile for the connection endpoint", connection.src)
continue
tile = tile_grid[connection.src.loc]
# Get the CLOCK cell
for c in tile.cells:
if c.type == "CLOCK":
cell = c
break
else:
print(
"ERROR: No CLOCK cell in tile at {}".format(
connection.src.loc
)
)
continue
# Format the CSV line
line = [
cell.alias,
str(connection.src.loc.x),
str(connection.src.loc.y),
str(connection.src.loc.z),
str(connection.dst.loc.x),
str(connection.dst.loc.y),
str(connection.dst.loc.z),
]
csv_lines.append(",".join(line))
return csv_lines
# =============================================================================
def main():
# Parse arguments
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter
)
parser.add_argument(
"--db",
type=argparse.FileType("rb"),
required=True,
help="Input VPR database file of the device"
)
parser.add_argument(
"-o",
type=argparse.FileType("w"),
default="clkmap.csv",
help="Output CLOCK to GMUX map CSV file"
)
args = parser.parse_args()
# Load data from the database
db = pickle.load(args.db)
connections = db["connections"]
vpr_tile_grid = db["vpr_tile_grid"]
# Generate the CSV data
csv_lines = generate_clkmap_csv(connections, vpr_tile_grid)
# Write the CSV file
args.o.write("name,src.x,src.y,src.z,dst.x,dst.y,dst.z\n")
args.o.write("\n".join(csv_lines) + "\n")
# =============================================================================
if __name__ == "__main__":
main()