| #!/usr/bin/env python3 | 
 | # -*- coding: utf-8 -*- | 
 | # | 
 | # Copyright (C) 2017-2020  The Project X-Ray Authors. | 
 | # | 
 | # Use of this source code is governed by a ISC-style | 
 | # license that can be found in the LICENSE file or at | 
 | # https://opensource.org/licenses/ISC | 
 | # | 
 | # SPDX-License-Identifier: ISC | 
 |  | 
 | import os | 
 |  | 
 | from prjxray.segmaker import Segmaker | 
 |  | 
 | segmk = Segmaker("design.bits") | 
 |  | 
 | tiledata = dict() | 
 | pipdata = set() | 
 |  | 
 | print("Loading tags from design.txt.") | 
 | with open("design.txt", "r") as f: | 
 |     for line in f: | 
 |         ab, dst, src = line.split() | 
 |         tile, dst = dst.split("/") | 
 |         _, src = src.split("/") | 
 |  | 
 |         if tile not in tiledata: | 
 |             tiledata[tile] = { | 
 |                 "pips": set(), | 
 |                 "nodes": set(), | 
 |             } | 
 |  | 
 |         if ab == "A": | 
 |             tiledata[tile]["pips"].add((dst, src)) | 
 |             pipdata.add((dst, src)) | 
 |         else: | 
 |             tiledata[tile]["nodes"].add(src) | 
 |             tiledata[tile]["nodes"].add(dst) | 
 |  | 
 | for tile, pips_nodes in tiledata.items(): | 
 |     pips = pips_nodes["pips"] | 
 |     nodes = pips_nodes["nodes"] | 
 |  | 
 |     for dst, src in pipdata: | 
 |         if (dst, src) in pips: | 
 |             segmk.add_tile_tag(tile, "%s.%s" % (dst, src), 1) | 
 |         elif dst not in nodes and src not in nodes: | 
 |             segmk.add_tile_tag(tile, "%s.%s" % (dst, src), 0) | 
 |  | 
 |  | 
 | def bitfilter(frame_idx, bit_idx): | 
 |     return frame_idx in [0, 1] | 
 |  | 
 |  | 
 | segmk.compile(bitfilter=bitfilter) | 
 | segmk.write(allow_empty=True) |