|  | # BEL timings fuzzer | 
|  |  | 
|  | This fuzzer is suppose to extract all the BEL timings for Xilinx 7-series FPGAs. | 
|  | The extracted timings are saved as SDF files. | 
|  | Single SDF file is produced for every FPGA tile type. | 
|  |  | 
|  | ## Fuzzer flow | 
|  |  | 
|  | Fuzzer flow is the following: | 
|  |  | 
|  | Vivado/`runme.tcl` -> `fixup_timings_txt.py` -> `tim2json.py` -> `makesdf.py` -> `sdfmerge.py` | 
|  |  | 
|  | The fuzzer uses Vivado tcl script to read all the FPGA timings data. | 
|  | This data is dumped to a text file. | 
|  | Beside timings data the tcl scipt dumps the following information: | 
|  |  | 
|  | * Sites pins | 
|  | * BELs pins | 
|  | * BELs attributes | 
|  |  | 
|  | The tcl script iterates over every BEL for all the sites in each tile type. | 
|  | The timings, pins and attributes are dumped in the same hierarchy. | 
|  | This hierarchy is used by the `tim2json` script to process the txt dump. | 
|  | Main task of the `tim2json` script is to figure out what the dumped timings mean and what paths do they describe. | 
|  | This is done by parsing the string timings, searching the BEL/Sites pins and BEL attributes. | 
|  | Since for some pins there was no naming convention, the names are provided directly via `pin_alias_map.json`. | 
|  |  | 
|  | Some BELs (e.g. BRAMs) reports the timings with incorrect site name. | 
|  | To work around this issue the `fixup_timings_txt.py` script is used to flatten the timings dump file. | 
|  | As a result all the timings for a selected tile are squashed into one site. | 
|  |  | 
|  | ### Text files format | 
|  |  | 
|  | The files dumped by the Vivado scrips have the following format: | 
|  |  | 
|  | Each line starts with a tile name, proceeded by a number of sites in the tile. | 
|  | After the tiles count, each tile info is placed. | 
|  | The tile info starts with a tile name followed by number of BELs in the tile. | 
|  | The bels number is followed by BEL entries. | 
|  | Each BEL entry starts with BEL name followed by a number of entries. | 
|  | The entries differ between the file types: | 
|  |  | 
|  | * timings file: each timing entry starts with entry name followed by 5 timings values | 
|  | * properties file: each properties entry starts with property name followed by a number of possible property values, followed by a list of the possible property values | 
|  | * pins file: each pin entry starts with pin name, followed by pin direction (IN/OUT), followed by 0 or 1 flag saying if the pin is a clock pin |