| #!/usr/bin/env python3 |
| """ |
| Convert the tile grid for a given family and device to HTML format |
| """ |
| import sys, re |
| import argparse |
| import database |
| import tiles as tilelib |
| |
| parser = argparse.ArgumentParser(description=__doc__) |
| parser.add_argument('family', type=str, |
| help="FPGA family (e.g. ECP5)") |
| parser.add_argument('device', type=str, |
| help="FPGA device (e.g. LFE5U-85F)") |
| parser.add_argument('outfile', type=argparse.FileType('w'), |
| help="output HTML file") |
| |
| |
| def get_colour(ttype): |
| colour = "#FFFFFF" |
| if ttype.startswith("PIO"): |
| colour = "#88FF88" |
| elif ttype.startswith("PIC"): |
| colour = "#88FFFF" |
| elif ttype.startswith("CIB"): |
| colour = "#FF8888" |
| elif ttype.startswith("PLC"): |
| colour = "#8888FF" |
| elif ttype.startswith("DUMMY"): |
| colour = "#FFFFFF" |
| elif ttype.startswith("MIB_EBR") or ttype.startswith("EBR_SPINE"): |
| colour = "#FF88FF" |
| elif ttype.find("DSP") != -1: |
| colour = "#FFFF88" |
| elif ttype.find("TAP") != -1: |
| colour = "#DDDDDD" |
| else: |
| colour = "#888888" |
| return colour |
| |
| |
| def main(argv): |
| args = parser.parse_args(argv[1:]) |
| tilegrid = database.get_tilegrid(args.family, args.device) |
| device_info = database.get_devices()["families"][args.family]["devices"][args.device] |
| |
| max_row = device_info["max_row"] |
| max_col = device_info["max_col"] |
| |
| tiles = [] |
| for i in range(max_row + 1): |
| row = [] |
| for j in range(max_col + 1): |
| row.append([]) |
| tiles.append(row) |
| |
| for identifier, data in sorted(tilegrid.items()): |
| name = identifier.split(":")[0] |
| row, col = tilelib.pos_from_name(name, (max_row, max_col), 0) |
| colour = get_colour(data["type"]) |
| tiles[row][col].append((name, data["type"], colour)) |
| |
| f = args.outfile |
| print( |
| """<html> |
| <head><title>{} Tiles</title></head> |
| <body> |
| <h1>{} Tilegrid</h1> |
| <table style='font-size: 8pt; border: 2px solid black; text-align: center'> |
| """.format(args.device, args.device), file=f) |
| for trow in tiles: |
| print("<tr>", file=f) |
| row_max_height = 0 |
| for tloc in trow: |
| row_max_height = max(row_max_height, len(tloc)) |
| row_height = max(75, 30 * row_max_height) |
| for tloc in trow: |
| print("<td style='border: 2px solid black; height: {}px'>".format(row_height), file=f) |
| for tile in tloc: |
| print( |
| "<div style='height: {}%; background-color: {}'><em>{}</em><br/><strong><a href='../tilehtml/{}.html' style='color: black'>{}</a></strong></div>".format( |
| 100 / len(tloc), tile[2], tile[0], tile[1], tile[1]), file=f) |
| print("</td>", file=f) |
| print("</tr>", file=f) |
| print("</table></body></html>", file=f) |
| |
| |
| if __name__ == "__main__": |
| main(sys.argv) |