From 5b53ca0700189ebb98278a8081bdabf527f1bb12 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Wed, 15 Aug 2018 13:47:39 +0200 Subject: o Kintex-7. --- Kintex-7/run.py | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100755 Kintex-7/run.py (limited to 'Kintex-7/run.py') diff --git a/Kintex-7/run.py b/Kintex-7/run.py new file mode 100755 index 0000000..c15aec5 --- /dev/null +++ b/Kintex-7/run.py @@ -0,0 +1,129 @@ +#!/usr/bin/env python3 + +import csv +import os +import re +import shutil +import sys +from collections import defaultdict, namedtuple +from itertools import groupby +from jinja2 import Environment, FileSystemLoader, select_autoescape +from pathlib import Path + +env = Environment( + loader=FileSystemLoader("."), + trim_blocks=True, + lstrip_blocks=True, + autoescape=select_autoescape(['html', 'xml']) +) + +def index_by_header(rows): + item_keys = rows[0] + items = {k: {} for idx, k in enumerate(item_keys) if idx > 0} + fields = set() + for r_idx, row in enumerate(rows): + for c_idx, cell in enumerate(row): + if c_idx == 0: + field = cell + fields.add(field) + else: + key = item_keys[c_idx] + item = items[key] + item[field] = cell + return fields, items + +def table_to_map(table, keys_in: str = None): + if keys_in == "rows": + data = {} + fields = table[0] + for row in table[1:]: + key = row[0] + data[key] = o = {} + for idx, cell in enumerate(row): + field = fields[idx] + o[field] = cell + return data + else: + raise Exception("unknown keys_in value: {}".format(keys_in)) + +def read_csv(f, remove_notes = True): + table = [row for row in csv.reader(f) if not row[0].startswith("#") and len(row[0]) > 0] + if remove_notes: + r = r"\([0-9]+\)" + table[0] = [re.sub(r, "", name) for name in table[0]] + table[0] = [name.strip() for name in table[0]] + return table + +dbg = lambda x: '' +dbg = print +p = print + +Package = namedtuple("Package", "name size pitch") +PartPackage = namedtuple("PartPackage", "part package gtx hr hp") + +packages = {} +part_packages = {} + +with open("part-packages.csv") as f: + rows = read_csv(f) + +# for r in rows: +# print(r) + + package_indexes = [(idx, part) for idx, part in enumerate(rows[0]) if idx > 0 and len(part)] + + for idx, part in package_indexes: + name = rows[0][idx] + size = rows[1][idx] + pitch = rows[1][idx] + packages[name] = Package(name, size, pitch) + + print("Packages") + [print(" {}".format(p)) for p in packages] + + r = r"\([0-9]+\)" + + for row in rows[3:]: + part = row[0] + part_packages[part] = info = {} + + for idx, package in package_indexes: + gtx = row[idx] + hr = row[idx + 1] + hp = row[idx + 2] + if len(gtx) == 0: + continue + info[package] = PartPackage(part, package, gtx, hr, hp) + +print("Part/packages") +for part, packages in part_packages.items(): + print(" {}:".format(part)) + for pp in packages.values(): + print(" {}: gtx: {}, hr: {}, hp: {}".format(pp.package, pp.gtx, pp.hr, pp.hp)) + +if False: + sys.exit(1) + +with open("parts.csv") as f: + table = read_csv(f) + parts = table_to_map(table, keys_in="rows") + + out_dir = Path("mw") + if out_dir.exists(): + shutil.rmtree(out_dir) + out_dir.mkdir() + + print("parts") + for part, info in parts.items(): + print(info) + + for part in parts.values(): + part_number = part["Device"] + + print("--- PART: {} ---".format(part_number)) + path = out_dir / "Chip:{}.mw".format(part_number) + with open(path, "w") as out: + template = env.get_template("mw.j2") + out.write(template.render(part=part)) + for field in part: + print(field) -- cgit v1.2.3