| #!/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 sys |
| import re |
| |
| from prjxray.segmaker import Segmaker |
| |
| tags = dict() |
| en_tags = dict() |
| |
| print("Preload all tags.") |
| for arg in sys.argv[1:]: |
| with open(arg + ".txt", "r") as f: |
| for line in f: |
| tile, pip = line.split() |
| _, pip = pip.split("/") |
| tile_type, pip = pip.split(".") |
| src, dst = pip.split("->>") |
| tag = "%s.%s" % (dst, src) |
| tags[tag] = dst |
| if "HCLK_CK_BUFH" in src: |
| en_tag = "ENABLE_BUFFER.%s" % src |
| en_tags[en_tag] = src |
| |
| for arg in sys.argv[1:]: |
| print("Processing %s." % arg) |
| segmk = Segmaker(arg + ".bits") |
| |
| tiledata = dict() |
| pipdata = dict() |
| ignpip = set() |
| |
| with open(arg + ".txt", "r") as f: |
| for line in f: |
| tile, pip = line.split() |
| _, pip = pip.split("/") |
| tile_type, pip = pip.split(".") |
| src, dst = pip.split("->>") |
| |
| # FIXME: workaround for https://github.com/SymbiFlow/prjxray/issues/392 |
| if "CLB_IO_CLK" not in segmk.grid[tile]["bits"]: |
| print("WARNING: dropping tile %s" % tile) |
| continue |
| tag = "%s.%s" % (dst, src) |
| |
| def add_tile_tag(tag, val): |
| # Workaround for https://github.com/SymbiFlow/prjxray/issues/396 |
| # TODO: drop from tcl or make an ignpip |
| if re.match(r"HCLK_CK_INOUT_.*", tag): |
| # print("Dropping %s %s" % (tag, val)) |
| return |
| segmk.add_tile_tag(tile, tag, val) |
| |
| add_tile_tag(tag, 1) |
| if "HCLK_CK_BUFH" in src: |
| en_tag = "ENABLE_BUFFER.%s" % src |
| add_tile_tag(en_tag, 1) |
| for tag, tag_dst in tags.items(): |
| if tag_dst != dst: |
| add_tile_tag(tag, 0) |
| for en_tag, en_tag_src in en_tags.items(): |
| if en_tag_src != src: |
| add_tile_tag(en_tag, 0) |
| |
| segmk.compile() |
| segmk.write(arg) |