.. _running_vtr:

Running the VTR Flow
--------------------

VTR is a collection of tools that perform the full FPGA CAD flow from Verilog to routing.

The design flow consists of:

* :ref:`parmys` (Logic Synthesis & Partial Mapping)
* :ref:`abc` (Logic Optimization & Technology Mapping)
* :ref:`vpr` (Pack, Place & Route)

There is no single executable for the entire flow.

Instead, scripts are provided to allow the user to easily run the entire tool flow.
The following provides instructions on using these scripts to run VTR.

Running a Single Benchmark
~~~~~~~~~~~~~~~~~~~~~~~~~~
The :ref:`run_vtr_flow` script is provided to execute the VTR flow for a single benchmark and architecture.

.. note:: In the following :term:`$VTR_ROOT` means the root directory of the VTR source code tree.

.. code-block:: none

    $VTR_ROOT/vtr_flow/scripts/run_vtr_flow.py <circuit_file> <architecture_file>

It requires two arguments:

 * ``<circuit_file>`` A benchmark circuit, and
 * ``<architecture_file>`` an FPGA architecture file

Circuits can be found under::

    $VTR_ROOT/vtr_flow/benchmarks/

Architecture files can be found under::

    $VTR_ROOT/vtr_flow/arch/

The script can also be used to run parts of the VTR flow.

.. seealso:: :ref:`run_vtr_flow` for the detailed command line options of ``run_vtr_flow.py``.


Running Multiple Benchmarks & Architectures with Tasks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VTR also supports *tasks*, which manage the execution of the VTR flow for multiple benchmarks and architectures.
By default, tasks execute the :ref:`run_vtr_flow` for every circuit/architecture combination.

VTR provides a variety of standard tasks which can be found under::

    $VTR_ROOT/vtr_flow/tasks


Tasks can be executed using :ref:`run_vtr_task`::

    $VTR_ROOT/vtr_flow/scripts/run_vtr_task.py <task_name>

.. seealso:: :ref:`run_vtr_task` for the detailed command line options of ``run_vtr_task.py``.

.. seealso:: :ref:`vtr_tasks` for more information on creating, modifying and running tasks.


Extracting Information & Statistics
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VTR can also extract useful information and statistics from executions of the flow such as area, speed tool execution time etc.

For single benchmarks :ref:`parse_vtr_flow` extracts statistics from a single execution of the flow.

For a :ref:`Task <vtr_tasks>`, :ref:`parse_vtr_task` can be used to parse and assemble statistics for the entire task (i.e. multiple circuits and architectures).

For regression testing purposes these results can also be verified against a set of *golden* reference results.
See :ref:`parse_vtr_task` for details.
