From bc48baa30de40351de95f817a3c3ef185e479f2b Mon Sep 17 00:00:00 2001 From: Karol Gugala Date: Wed, 9 Jan 2019 22:27:06 +0100 Subject: [PATCH] fuzzers: add generic generate.py Signed-off-by: Karol Gugala --- fuzzers/int_generate.py | 85 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 fuzzers/int_generate.py diff --git a/fuzzers/int_generate.py b/fuzzers/int_generate.py new file mode 100644 index 00000000..9856503d --- /dev/null +++ b/fuzzers/int_generate.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 + +from prjxray.segmaker import Segmaker +import argparse + +parser = argparse.ArgumentParser(description="Generate int segfiles") +parser.add_argument( + '--todo', action='store', default='../../todo.txt', help='todo file path') +parser.add_argument( + '--design', + action='store', + default='design.txt', + help='design description file path') +parser.add_argument('--verbose', action='store_true', help='') +parser.add_argument( + '--bits', action='store', default='design.bits', help='bits file path') + +args = parser.parse_args() +segmk = Segmaker(args.bits) + +verbose = args.verbose + +tiledata = dict() +pipdata = dict() +ignpip = set() +todo = set() + +print("Loading todo from %s." % args.todo) +with open(args.todo, "r") as f: + for line in f: + line = tuple(line.strip().split(".")) + verbose and print('todo', line) + todo.add(line) + +print("Loading tags from %s." % args.design) +with open(args.design, "r") as f: + for line in f: + tile, pip, src, dst, pnum, pdir = line.split() + _, pip = pip.split(".") + _, src = src.split("/") + _, dst = dst.split("/") + pnum = int(pnum) + pdir = int(pdir) + + if tile not in tiledata: + tiledata[tile] = {"pips": set(), "srcs": set(), "dsts": set()} + + if pip in pipdata: + assert pipdata[pip] == (src, dst) + else: + pipdata[pip] = (src, dst) + + tiledata[tile]["pips"].add(pip) + tiledata[tile]["srcs"].add(src) + tiledata[tile]["dsts"].add(dst) + + if pdir == 0: + tiledata[tile]["srcs"].add(dst) + tiledata[tile]["dsts"].add(src) + + if pnum == 1 or pdir == 0: + verbose and print('ignore pnum == 1 or pdir == 0: ', pip) + ignpip.add(pip) + + t = ("_".join(tile.split("_")[0:2]), dst, src) + if t not in todo: + verbose and print('ignore not todo: ', t) + ignpip.add(pip) + +for tile, pips_srcs_dsts in tiledata.items(): + pips = pips_srcs_dsts["pips"] + srcs = pips_srcs_dsts["srcs"] + dsts = pips_srcs_dsts["dsts"] + + for pip, src_dst in pipdata.items(): + src, dst = src_dst + if pip in ignpip: + pass + elif pip in pips: + segmk.add_tile_tag(tile, "%s.%s" % (dst, src), 1) + elif src_dst[1] not in dsts: + segmk.add_tile_tag(tile, "%s.%s" % (dst, src), 0) + +segmk.compile() +segmk.write()