blob: 7c99eaddb7e8c3f84081fcba82492780ca1401da [file] [log] [blame]
#!/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
from prjxray import bitsmaker
def run(
bits_fn,
design_fn,
fnout,
oneval,
dframe,
auto_frame,
dword,
dbit,
multi=False,
verbose=False):
# mimicing tag names, wasn't sure if it would break things otherwise
metastr = "DWORD:%u" % dword
if dbit is not None:
metastr += ".DBIT:%u" % dbit
if dframe is not None:
metastr += ".DFRAME:%02x" % dframe
if multi:
metastr += ".MULTI"
if auto_frame:
metastr += ".AUTO_FRAME"
tags = dict()
f = open(design_fn, 'r')
f.readline()
for l in f:
l = l.strip()
# Additional values reserved / for debugging
tile, val = l.split(',')[0:2]
tags["%s.%s" % (tile, metastr)] = val == oneval
bitsmaker.write(bits_fn, fnout, tags)
def main():
import argparse
parser = argparse.ArgumentParser(
description=
"Solve bits (like segmaker) on raw .bits file without segments")
parser.add_argument("--bits-file", default="design.bits", help="")
parser.add_argument("--verbose", action="store_true", help="")
parser.add_argument("--design", default="design.csv", help="")
parser.add_argument("--fnout", default="/dev/stdout", help="")
parser.add_argument(
"--oneval",
required=True,
help="Parameter value that correspodns to a set bit")
#
parser.add_argument(
"--multi", action="store_true", help="Are multiple bits expected?")
parser.add_argument(
"--dframe",
type=str,
required=False,
default="",
help="Reference frame delta (base 16)")
parser.add_argument(
"--auto-frame",
action='store_true',
help="Auto align frame address to next lowest multiple of 0x80")
parser.add_argument(
"--dword",
type=str,
required=True,
help="Reference word delta (base 10)")
parser.add_argument(
"--dbit",
type=str,
required=False,
default="",
help="Reference bit delta (base 10)")
args = parser.parse_args()
run(
args.bits_file,
args.design,
args.fnout,
args.oneval,
None if args.dframe == "" else int(args.dframe, 16),
args.auto_frame,
int(args.dword, 10),
None if args.dbit == "" else int(args.dbit, 10),
multi=args.multi,
verbose=args.verbose)
if __name__ == "__main__":
main()