def write(bits_fn, fnout, tags): ''' seg 00020000_046 bit 18_20 bit 39_63 tag LIOB33.IOB_Y1.REFBIT 0 ''' fout = open(fnout, "w") def line(s): fout.write(s + "\n") # Everything relative to start of bitstream line("seg 00000000_000") bitdata = bitstream.load_bitdata2(open(bits_fn, "r")) for frame, words in bitdata.items(): for word, wbits in words.items(): for bitidx in sorted(list(wbits)): # Are the names arbitrary? Lets just re-create line("bit %08X_%03u_%02u" % (frame, word, bitidx)) for k, v in tags.items(): line("tag %s %u" % (k, v))
def run( db_root, part, bits_file, segnames, omit_empty_segs=False, flag_unknown_bits=False, flag_decode_emit=False, flag_decode_omit=False, bit_only=False, verbose=False): db = prjxraydb.Database(db_root, part) tiles = load_tiles(db_root, part) segments = mk_segments(tiles) bitdata = bitstream.load_bitdata2(open(bits_file, "r")) if flag_unknown_bits: print_unknown_bits(tiles, bitdata) print("") # Default: print all if segnames: for i, segname in enumerate(segnames): # Default to common tile config area if tile given without explicit block if ':' not in segname: segnames[i] = mksegment(segname, 'CLB_IO_CLK') else: segnames = sorted(tile_segnames(tiles)) print('Segments: %u' % len(segnames)) # XXX: previously this was sorted by address, not name # revisit? for segname in segnames: handle_segment( db, segname, bitdata, flag_decode_emit, flag_decode_omit, omit_empty_segs, segments, bit_only=bit_only, verbose=verbose)