2019-04-05 10:56:47 -04:00
|
|
|
Introduction
|
|
|
|
============
|
|
|
|
|
2019-08-30 10:19:54 -04:00
|
|
|
SymbiFlow is a Open Source Verilog-to-Bitstream FPGA synthesis flow,
|
|
|
|
currently targeting Xilinx 7-Series, Lattice iCE40 and Lattice ECP5 FPGAs.
|
|
|
|
Think of it as the GCC of FPGAs.
|
2019-04-05 10:56:47 -04:00
|
|
|
|
2019-08-30 10:19:54 -04:00
|
|
|
The project aim is to design tools that are highly extendable and multiplatform.
|
2019-04-05 10:56:47 -04:00
|
|
|
|
2019-08-30 10:19:54 -04:00
|
|
|
EDA Tooling Ecosystem
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
For both ASIC- and FPGA-oriented EDA tooling, there are three major areas that
|
|
|
|
the workflow needs to cover: hardware description, frontend and backend.
|
|
|
|
|
|
|
|
Hardware description languages are generally open, with both established HDLs
|
|
|
|
such as Verilog and VHDL and emerging software-inspired paradigms like
|
|
|
|
`Chisel <https://chisel.eecs.berkeley.edu/>`_,
|
|
|
|
`SpinalHDL <https://spinalhdl.github.io/SpinalDoc-RTD/>`_ or
|
|
|
|
`Migen <https://m-labs.hk/gateware/migen/>`_.
|
|
|
|
The major problem lies however in the front- and backend, where previously
|
|
|
|
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 SymbiFlow focuses
|
|
|
|
on the latter (some parts of SymbiFlow will also be useful in the former).
|
|
|
|
|
|
|
|
.. figure:: images/EDA.svg
|
|
|
|
|
|
|
|
Project structure
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
To achieve SymbiFlow'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. Thus, SymbiFlow serves as an umbrella
|
|
|
|
project for several activities, the central of which pertains to the
|
|
|
|
creation of so-called FPGA "architecture definitions",
|
|
|
|
i.e. documentation of how specific FPGAs work internally.
|
|
|
|
More information can be found in the :doc:`Symbiflow Architecture Definitions
|
2022-02-09 19:45:12 -05:00
|
|
|
<arch-defs:index>` project.
|
2019-08-30 10:19:54 -04:00
|
|
|
|
|
|
|
Those definitions and serve as input to backend tools like
|
|
|
|
`nextpnr <https://github.com/YosysHQ/nextpnr>`_ and
|
|
|
|
`Verilog to Routing <https://verilogtorouting.org/>`_, and frontend tools
|
|
|
|
like `Yosys <http://www.clifford.at/yosys/>`_. They are created within separate
|
|
|
|
collaborating projects targeting different FPGAs - :doc:`Project X-Ray
|
2022-02-09 19:45:12 -05:00
|
|
|
<prjxray:index>` for Xilinx 7-Series, `Project IceStorm
|
2019-08-30 10:19:54 -04:00
|
|
|
<http://www.clifford.at/icestorm/>`_ for Lattice iCE40 and :doc:`Project Trellis
|
2022-02-09 19:45:12 -05:00
|
|
|
<prjtrellis:index>` for Lattice ECP5 FPGAs.
|
2019-08-30 10:19:54 -04:00
|
|
|
|
|
|
|
.. figure:: images/parts.svg
|
|
|
|
|
|
|
|
Current status of bitstream documentation
|
|
|
|
-----------------------------------------
|
|
|
|
|
|
|
|
.. table::
|
|
|
|
:align: center
|
|
|
|
:widths: 40 20 20 20
|
|
|
|
|
|
|
|
+-----------------+----------+----------+---------+
|
|
|
|
| Projects | IceStorm | X-Ray | Trellis |
|
|
|
|
+=================+==========+==========+=========+
|
|
|
|
| **Basic Tiles** |
|
|
|
|
+-----------------+----------+----------+---------+
|
|
|
|
| Logic | Yes | Yes | Yes |
|
|
|
|
+-----------------+----------+----------+---------+
|
|
|
|
| Block RAM | Yes | Partial | N/A |
|
|
|
|
+-----------------+----------+----------+---------+
|
|
|
|
| **Advanced Tiles** |
|
|
|
|
+-----------------+----------+----------+---------+
|
|
|
|
| DSP | Yes | No | Yes |
|
|
|
|
+-----------------+----------+----------+---------+
|
|
|
|
| Hard Blocks | Yes | No | Yes |
|
|
|
|
+-----------------+----------+----------+---------+
|
|
|
|
| Clock Tiles | Yes | Partial | Yes |
|
|
|
|
+-----------------+----------+----------+---------+
|
|
|
|
| IO Tiles | Yes | Partial | Yes |
|
|
|
|
+-----------------+----------+----------+---------+
|
|
|
|
| **Routing** |
|
|
|
|
+-----------------+----------+----------+---------+
|
|
|
|
| Logic | Yes | Yes | Yes |
|
|
|
|
+-----------------+----------+----------+---------+
|
|
|
|
| Clock | Yes | Partial | Yes |
|
|
|
|
+-----------------+----------+----------+---------+
|