summaryrefslogtreecommitdiff
path: root/Kintex-7/run.py
diff options
context:
space:
mode:
Diffstat (limited to 'Kintex-7/run.py')
-rwxr-xr-xKintex-7/run.py129
1 files changed, 129 insertions, 0 deletions
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)