| How it works | |
| ############ | |
| To understand how F4PGA works, it is best to start with an overview of the general EDA tooling ecosystem and then | |
| proceed to see what the F4PGA project consists of. | |
| For both ASIC- and FPGA-oriented EDA tooling, there are three major areas that the workflows need to cover: description, | |
| frontend and backend. | |
| .. image:: _static/images/EDA.svg | |
| :align: center | |
| Hardware description languages are either established (such as Verilog and `VHDL ➚ <https://IEEE-P1076.gitlab.io/>`__) or | |
| emerging software-inspired paradigms like | |
| `Chisel ➚ <https://chisel.eecs.berkeley.edu/>`_, | |
| `SpinalHDL ➚ <https://spinalhdl.github.io/SpinalDoc-RTD/>`_, | |
| `Migen ➚ <https://m-labs.hk/gateware/migen/>`_, or | |
| :gh:`Amaranth ➚ <amaranth-lang>`. | |
| Since early 2000s, free and open source tools allow simulating HDLs. | |
| However, for several decades the major problem lay in the frontend and backend, where there was no established | |
| standard vendor-neutral tooling that would cover all the necessary components for an end-to-end flow. | |
| This pertains both to ASIC and FPGA workflows. | |
| Although F4PGA focuses on the latter, some parts of F4PGA will also be useful in the former. | |
| To achieve F4PGA's goal of a complete FOSS FPGA toolchain, a number of tools and projects are necessary to provide all | |
| the needed components of an end-to-end flow. | |
| The F4PGA toolchains consist of logic synthesis and implementation tools, as well as chip documentation projects for | |
| chips of various vendors. | |
| Thus, F4PGA serves as an umbrella project for several activities. | |
| .. image:: _static/images/parts.svg | |
| :align: center | |
| The central resources are the so-called FPGA "architecture definitions" (i.e. documentation of how specific FPGAs work | |
| internally) and the "interchange schema" (for logical and physical netlists). | |
| Those definitions serve as input to frontend and backend tools, such as | |
| `Yosys ➚ <https://yosyshq.net/yosys/>`__, | |
| :gh:`nextpnr ➚ <YosysHQ/nextpnr>` and `Verilog to Routing ➚ <https://verilogtorouting.org/>`_. | |
| They are created within separate collaborating projects targeting different FPGAs: | |
| * :doc:`Project X-Ray ➚ <prjxray:index>` for Xilinx 7-Series | |
| * `Project IceStorm ➚ <http://bygone.clairexen.net/icestorm/>`__ for Lattice iCE40 | |
| * :doc:`Project Trellis ➚ <prjtrellis:index>` for Lattice ECP5 FPGAs | |
| More information can be found at :doc:`F4PGA Architecture Definitions ➚ <arch-defs:index>` and :doc:`FPGA Interchange ➚ <interchange:index>`. | |
| To prepare a working bitstream for a particular FPGA chip, the toolchain goes through the following stages: | |
| * A description of the FPGA chip is created with the information from the relevant bitstream documentation | |
| project. | |
| This part is done within the :gh:`F4PGA Architecture Definitions ➚ <f4pga/f4pga-arch-defs>`. | |
| The project prepares information about the timings and resources available in the chip needed at the implementation | |
| stage, as well as techmaps for the synthesis tools. | |
| .. NOTE:: | |
| This stage is typically pre-built and installed as assets. | |
| However, developers contributing to the bitstream documentation might build it. | |
| * Then, logic synthesis is carried out in the `Yosys ➚ <https://yosyshq.net/yosys/>`__ framework, which expresses the | |
| user-provided hardware description by means of the block and connection types available in the chosen chip. | |
| * The next step is implementation. | |
| Placement and routing tools put individual blocks from the synthesis description in specific chip locations and create | |
| paths between them. | |
| To do that, F4PGA uses either :gh:`nextpnr ➚ <YosysHQ/nextpnr>` or :gh:`Verilog to Routing ➚ <verilog-to-routing/vtr-verilog-to-routing>`. | |
| * Finally, the design properties are translated into a set of features available in the given FPGA chip. | |
| These features are saved in the :gh:`FASM format ➚ <chipsalliance/fasm>`, which is developed as part of F4PGA. | |
| The FASM file is then translated to a bitstream, using the information from the bitstream documentation projects. |