Introduction

Project X-Ray documents the Xilinx 7-Series FPGA architecture to enable the development of open-source tools. Our goal is to provide sufficient information to develop a free and open Verilog to bitstream toolchain for these devices.

The project is a part of SymbiFlow Toolchain. SymbiFlow uses the obtained information about the chip in Architecture Definitions project, which allows for creating bitstreams for many architectures including 7-Series devices.

Collected information

To allow the usage of Xilinx FPGAs in SymbiFlow toolchain we collect some important data about the Xilinx chips. The needed information includes:

  • Architecture description:

    • chip internals

    • timings

  • Bitstream format:

    • metadata (i.e. header, crc)

    • configuration bits

Final results are stored in the database which is further used by the Architecture Definitions project. The whole database is described in the dedicated chapter.

Methodology

The most important element of the project are fuzzers - scripts responsible for obtaining information about the chips. Their name comes from the fact that they use a similar idea to Fuzz testing. Firstly, they generate a huge amount of designs in which the examined chip property is either enabled or disabled. By comparing the differences in the final bitstream obtained from vendor tools, we can detect relations between bits in the bitstream and provided functionalities.

However, some of the fuzzers works differently, i.e. they just creating the database structure, the whole idea is similar and rely on the output produced by the vendor tools.

All fuzzers are described in the dedicated chapter.

Important Parts

The important parts of the Project X-Ray are:

  • minitests - designs that can be viewed by a human in Vivado to better understand how to generate more useful designs.

  • experiments - similar to minitests except for the fact that they are only useful for a short time.

  • tools & libs - they convert the resulting bitstreams into various formats.

  • utils - tools that are used but still require some testing