#!/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 json from prjxray.segmaker import Segmaker from prjxray import verilog from prjxray import segmaker def bitfilter(frame, word): if frame < 26: return False return True def run(): segmk = Segmaker("design.bits") print("Loading tags") f = open('params.jl', 'r') design = json.load(f) for p in design: ps = p["params"] if p["site_type"] in "ICAP": param = verilog.unquote(ps["ICAP_WIDTH"]) segmaker.add_site_group_zero( segmk, p["site"], "ICAP_WIDTH_", ["X32", "X8", "X16"], "X32", param) elif p["site_type"] in "BSCAN": param = str(ps["JTAG_CHAIN"]) segmaker.add_site_group_zero( segmk, p["site"], "JTAG_CHAIN_", ["1", "2", "3", "4"], param, param) elif p["site_type"] in "CAPTURE": param = verilog.unquote(ps["ONESHOT"]) segmk.add_site_tag( p["site"], "ONESHOT", True if param in "TRUE" else False) elif p["site_type"] in "STARTUP": param = verilog.unquote(ps["PROG_USR"]) segmk.add_site_tag( p["site"], "PROG_USR", True if param in "TRUE" else False) elif p["site_type"] in "FRAME_ECC": param = verilog.unquote(ps["FARSRC"]) segmaker.add_site_group_zero( segmk, p["site"], "FARSRC_", ["FAR", "EFAR"], param, param) elif p["site_type"] in ["USR_ACCESS", "DCIRESET"]: feature = "ENABLED" segmk.add_site_tag( p["site"], feature, True if ps["ENABLED"] else False) segmk.compile(bitfilter=bitfilter) segmk.write() run()