| #!/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() |