#!/usr/bin/env python3 from prjxray import bitsmaker def run( bits_fn, design_fn, fnout, oneval, dframe, 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" 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( "--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), int(args.dword, 10), None if args.dbit == "" else int(args.dbit, 10), multi=args.multi, verbose=args.verbose) if __name__ == "__main__": main()