Fuzzer for the PIPs of CMT_TOP_[LR]_LOWER_B tiles.

The fuzzer instantiates a MMCM in each available site with 2/3 probability of using it. Once used it is connected randomly to various clock and logic resources.

For some nets a randomized “manual” route is chosen to cover as many routing scenarios as possible.

The information whether a MMCM is used or not is stored in a file ("design.txt") along with the randomized route (route.txt)

After the design synthesis the generate.py sets fixed routes on some nets which is read from the route.txt file. The rest of the design is routed in the regular way. The script also dumps all used PIPs (as reported by Vivado) to the design_pips.txt.

The tag generation is done in the following way:

  • If a MMCM site is occupied then tags for all active PIPs are emitted as 1s. No tags are emitted for inactive PIPs.

  • When a MMCM site is not occupied (IN_USE=0) then tags for all PIPs for the CMT tile are emitted as 0s.

  • The IN_USE tag is emitted directly.

The raw solution of tag bits is postprocessed via the custom script fixup_and_group.py. The script does two things:

  • Clears all bits found for the IN_USE tag in all other tags. Those bits are common to all of them.

  • Groups tags according to the group definitions read from the tag_groups.txt file. Bits that are common to the group are set as 0 in each tag that belongs to it (tags within a group are exclusive).