.. _Understanding:

Understanding the (deprecated) flow
###################################

.. IMPORTANT::
  This section describes the usage of the now deprecated ``symbiflow_*`` entrypoints/wrappers.
  It is provided for backwards compatibility, so that users of the *old* flow can keep using it.
  However, it is recommended for new users to use the approach explained in :ref:`pyF4PGA`.

This section provides valuable information on how each of the commands used to compile and build
designs in F4PGA work. It is especially helpful for debugging or for using methods
other than a makefile to build your designs, such as a bash or python script.

The following describes the commands for running each of the steps for a full design flow
(synthesis, place and route, and generate bitstream) as well as giving a description of the most
common flags for those commands. If you would like a more detailed break down of how the design
flow for F4PGA works take a look at the :ref:`Design Flows section <Flows>`.

.. note::

    Files created by synthesis, implementation, and bitstream generation will be dumped into
    the directory from which the command is run by default. To keep all of the files generated by
    the toolchain separate from your design files, you might consider running the toolchain
    commands in a separate directory from your design files.



Synthesis
=========

To synthesize your designs run the ``symbiflow_synth`` command. The command has the following
flags:

.. table:: symbiflow_synth

    +------+---------------------------------------------------------------+
    | Flag |                            Argument                           |
    +======+===============================================================+
    | -t   | Defines the name for the top level module                     |
    +------+---------------------------------------------------------------+
    | -v   | A list of paths to verilog files for the design               |
    +------+---------------------------------------------------------------+
    | -d   | FPGA family (i.e. artix7 or zynq7)                            |
    +------+---------------------------------------------------------------+
    | -p   | The part number for the FPGA (i.e xc7a35tcsg324-1)            |
    +------+---------------------------------------------------------------+
    | -x   | Optional command: path to xdc files for design                |
    +------+---------------------------------------------------------------+


An example of how to run synthesis on a design containing two separate
verilog HDL files is below. The design is built for a basys3 board which comes from the artix7
family and uses the xc7a35tcpg236-1 chip.

.. code-block:: bash

    symbiflow_synth -t top -v example.v top_example.v -d artix7 -p xc7a35tcpg236-1 -x design_constraint.xdc

Synthesis is carried out using the Yosys open source tool. ``symbiflow_synth`` generates
an .eblif file, a few verilog netlists that describe the gate level design for your project, and a log
file. For more information on Yosys and its relation to F4PGA go to :ref:`Flows:F4PGA:Yosys`.

.. note::
    The build files generated by the toolchain (for example .eblif from synthesis, .net from
    packing, .bit from generate bitstream) are named using the top module specified in
    symbiflow_synth. For example if you specified ``switch_top`` as the top level module name
    during synthesis using the ``-t`` flag, the build files generated by the toolchain would be
    named switch_top.eblif, switch_top.net, etc.


Place and Route
===============

The three steps for implementing a design are internally handled by the open source VPR
(Versatile Place and Route) tool. For more information go to `VPR ➚ <https://docs.verilogtorouting.org/en/latest/vpr/>`__.

Pack
----

Packing is run by the ``symbiflow_pack`` command and generates several files containing
a pin usage report, a timing report, a log file, and a netlist. The various flags for the
pack command are as follows:

.. table:: symbiflow_pack

    +------+--------------------------------------------------------------------+
    | Flag |                              Argument                              |
    +======+====================================================================+
    | -e   | Path to .eblif file generated by synthesis                         |
    +------+--------------------------------------------------------------------+
    | -d   | Fabric definition for the board (i.e. xc7a100t_test)               |
    +------+--------------------------------------------------------------------+
    | -s   | Optional: SDC file path                                            |
    +------+--------------------------------------------------------------------+

Note that the -d option for this step (defining the fabric definition) is different
from the -d from synthesis (defining the FPGA family).

The following example runs packing on the basys3 board:

.. code-block:: bash

    symbiflow_pack -e top.eblif -d xc7a35t_test

Place
-----

Placement generates several files describing the location of design elements
as well as a log file. Placement is run using ``symbiflow_place`` which utilizes
the following flags:

.. table:: symbiflow_place

    +------+----------------------------------------------------+
    | Flag |                      Argument                      |
    +======+====================================================+
    | -e   | Path to .eblif file generated by synthesis         |
    +------+----------------------------------------------------+
    | -d   | Fabric definition (xc7a50t_test)                   |
    +------+----------------------------------------------------+
    | -p   | Optional: PCF file path                            |
    +------+----------------------------------------------------+
    | -n   | Path to the .net file generated by pack step       |
    +------+----------------------------------------------------+
    | -P   | The part number for the FPGA (i.e xc7a35tcsg324-1) |
    +------+----------------------------------------------------+
    | -s   | Optional: SDC file path                            |
    +------+----------------------------------------------------+

For the basys3:

.. code-block:: bash

    symbiflow_pack -e top.eblif -d xc7a35t_test -p design.pcf -n top.net -P xc7a35tcpg236-1 -s design.sdc


Route
-----

Routing produces several timing reports as well as a post routing netlist and log file.
``symbiflow_route`` uses the -e, -d, and the optional -s flags. The arguments for these flags
are the same as in the placement step (.eblif, fabric definition, and SDC file path respectively).
The following is an example:

.. code-block:: bash

    symbiflow_route -e top.eblif -d xc7a35t_test -s design.sdc


Generating Bitstream
====================

Generating the bitstream consists of two steps. First, run ``symbiflow_write_fasm`` to generate
the .fasm file used to create the bitstream. ``symbiflow_write_fasm`` uses the -e and -d flags
with the same arguments as the placing and routing steps (.eblif path, and fabric definition).
Second, run ``symbiflow_write_bitstream`` which has the following flags:

.. table:: symbiflow_write_bitstream

    +------+-------------------------------------------------------+
    | Flag |                        Argument                       |
    +======+=======================================================+
    | -d   | FPGA family (i.e. artix7 or zynq7)                    |
    +------+-------------------------------------------------------+
    | -f   | The path to the .fasm file generated in by write_fasm |
    +------+-------------------------------------------------------+
    | -p   | The FPGA part number (i.e xc7a35tcsg324-1)            |
    +------+-------------------------------------------------------+
    | -b   | Name of the file to write the bitstream to            |
    +------+-------------------------------------------------------+

Notice that the specification for the part number is a lowercase ``-p`` instead of a capital
``-P`` as in the placement step. Also note that the ``-d`` in write_bitstream defines the FPGA
family instead of the fabric as in the write_fasm step.

.. warning::

   If you change the name of the output for your bitstream to something other than top.bit then the
   openFPGALoader command used in the examples would need to change too. For example if I used
   ``-b my_module_top`` in symbiflow_write_bitstream then my openFPGALoader command would change to:

   .. code-block:: bash

      openFPGALoader -b $OFL_BOARD my_module_top.bit

   Note that the only part of the command that changes is "<top module name>.bit;"

The following example generates a bitstream file named example.bit for the basys3 board:

.. code-block:: bash

    symbiflow_write_fasm -e top.eblif -d xc7a50t_test
    symbiflow_write_bitstream -d artix7 -f top.fasm -p xc7a35tcpg236-1 -b example.bit
