Tools

SymbiFlow/prjxray/tools/

Here, you can find various programs to work with bitstreams, mainly to assist building fuzzers.

bitread:

Used to read a bitstream file to output a readable bitfile that can be than used to get the various FASM features.

segmatch:

Used in the fuzzing process to correlate the different bits and find which one belong to which feature.

gen_part_base_yaml:

Used to get a high level information on the device structure (number of configuration rows/columns and maximum frame addresses)

xc7frames2bit:

Used to write a bitstream file starting from a frames one. Where, in turn, the frames file can be generated starting from a FASM file.

xc7patch:

Used to patch a pre-existing bitstream with additional bits.

bittool:

???

bits2rbt:

???

frame_address_decoder:

???

segmatch

This tools takes input files of the format:

code::

seg 00000000_050 bit 38_15 bit 39_14 <….> tag HCLK_IOI3.LVDS_25_IN_USE 0 tag HCLK_IOI3.ONLY_DIFF_IN_USE 0 <…> seg 00001C80_050 bit 38_15 bit 38_26

where seg <base_frame_address>_<tile_offset> indicates how to address the tile, and bit <frame_address_offset>_<bit_position> indicates the position of the bit within the tile.

base_frame_address:

The frame address of the first frame that configures the tile.

tile_offset:

The word index of the first word that configures the tile within a frame.

frame_address_offset:

frame_address - base_frame_address

bit_position:

The index of the bit within the words of this frame that configure this tile.

The prjxray.segmaker.Segmaker is a helper class that can be used to write these files inside the fuzzer’s generate.py.