Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
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)