Xilinx 7 Series F4PGA Partial Reconfiguration Flow
##################################################

.. Note::
  F4PGA currently does not support partial bitstream generation.
  This is a goal in the future, but at the moment partial FASM must be concatenated with an overlay to generate a full
  bitstream.

Background
==========

Partition Regions
-----------------

In this documentation the terms partition region and region of interest (ROI) are used interchangeably to refer to some
smaller portion of a larger FPGA architecture.
This region may or may not align with frame boundaries, but the most tested use-case is for partition regions that are
one clock region tall.

Overlay Architecture
--------------------

The overlay architecture is essentially the "inverse" of all the partition regions in a design; it includes everything
in the full device that is not in a partition region.
Typically this includes chip IOs and the PS region if the chip has one.

Synthetic IO Tiles (Synth IOs)
------------------------------

Synthetic IO tiles are "fake" IOs inserted into the partition region architecture so VPR will route top level IOs to a
specific graph node.
This method allows partition region architectures to interface with each other and the overlay.

Vivado Node vs Wire
-------------------

A wire is a small electrically connected part of the FPGA contained within a single tile.
A Vivado node is an electrically connected collection of wires that can span multiple tiles.

Flow Overview
=============

A simplified view of the partition region flow is as follows:

-  Define each partition region architecture

-  Define the overlay architecture based on the partition regions chosen

-  Build each architecture separately

-  Map a top level verilog file to each architecture

-  Generate FASM for each partition region and the overlay

-  Concatenate FASM for each architecture together and generate final bitstream

Partition Region Example (switch_processing)
============================================

This example contains two partition regions that are each about the size of one clock region.

The goal of this test is to have two partition regions with identical interfaces so switch "data" can be passed through
each region before being displayed on LEDs.
Each partition region can then have an arbitrary module mapped to it that processes the data in some way before the
output.
The example modules used currently are an add_1 module, a blink module, and an identity module.

Define the first partition region:

:ghsrc:`xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-pr1-roi-virt/design.json`

.. literalinclude:: ../../../xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-pr1-roi-virt/design.json
  :language: JSON

Here we see the info section defines the boundaries of the partition region.
It is important to use the prjxray grid, not the VPR grid or the Vivado grid, to define these boundaries.
The ports section is then used to define the interface pins for the region.
A synth IO will be placed to correspond to each of these interface pins.
Each pin must contain a name, pin name, type, and node name.
The name and pin name must be unique identifiers.
The type can be in, out or clk.
The node is the vivado node that a synth IO should be connected to.

Optionally, a wire name can be provided to give an exact location for the synth IO.
If a wire is not provided it will be inferred as the first wire outside of the partition region on the given node.
Providing an explicit wire name is especially important when using nodes that cross all the way through the partition
region, such as clock nodes.

Now the CMake files must be defined properly for the first partition region architecture:

:ghsrc:`xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-pr1-roi-virt/CMakeLists.txt`

.. literalinclude:: ../../../xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-pr1-roi-virt/CMakeLists.txt
  :language: cmake

The important argument here is ``ROI_DIR`` which points to the directory containing the ``design.json`` defined earlier.

Next, define the second partition region in a similar way as the first:

:ghsrc:`xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-pr2-roi-virt/design.json`

.. literalinclude:: ../../../xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-pr2-roi-virt/design.json
  :language: JSON

:ghsrc:`xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-pr2-roi-virt/CMakeLists.txt`

.. literalinclude:: ../../../xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-pr2-roi-virt/CMakeLists.txt
  :language: cmake

The last ``design.json`` that must be defined is for the overlay.
It is mostly a list of the json for the partition regions contained in the design.
One important change is the pin names must still be unique across all ports in the overlay.
Any explicit wires must also be changed to be on the other side of the partition region boundary.

:ghsrc:`xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-overlay-virt/design.json`

.. literalinclude:: ../../../xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-overlay-virt/design.json
  :language: JSON

:ghsrc:`xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-overlay-virt/CMakeLists.txt`

.. literalinclude:: ../../../xilinx/xc7/archs/artix7/devices/xc7a50t-arty-switch-processing-overlay-virt/CMakeLists.txt
  :language: cmake

The important argument here is ``OVERLAY_DIR`` which points to the directory containing the ``design.json`` for this
overlay.
Notice this ``CMakeLists.txt`` also contains more tile/pb types because it contains the real IOs.

Continuing on past ``design.json`` definitions, CMake needs to be informed these new architectures should be built.
This is done in another ``CMakeLists.txt`` by adding the following:

:ghsrc:`xilinx/xc7/archs/artix7/devices/CMakeLists.txt`

.. literalinclude:: ../../../xilinx/xc7/archs/artix7/devices/CMakeLists.txt
  :language: cmake

The last step before switching over to adding a test is adding to ``boards.cmake``:

:ghsrc:`xilinx/xc7/boards.cmake`

.. literalinclude:: ../../../xilinx/xc7/boards.cmake
  :language: cmake

This defines a separate board for each of the partition regions and overlay so they can be mapped to separately.

Now to define a test.
This part of the documentation will not go in detail on how to define a new test case in f4pga-arch-defs, but will
point out items of importance for using the partial reconfiguration flow.

All of the following snippets are from :ghsrc:`xilinx/xc7/tests/switch_processing/CMakeLists.txt`.

.. code-block:: cmake

	add_file_target(FILE switch_processing_add_1.v SCANNER_TYPE verilog)
	add_fpga_target(
	  NAME switch_processing_arty_add_1_pr1
	  BOARD arty-switch-processing-pr1
	  SOURCES switch_processing_add_1.v
	  INPUT_IO_FILE ${COMMON}/arty_switch_processing_pr1.pcf
	  EXPLICIT_ADD_FILE_TARGET
	  )

	add_file_target(FILE switch_processing_blink.v SCANNER_TYPE verilog)
	add_fpga_target(
	  NAME switch_processing_arty_blink_pr2
	  BOARD arty-switch-processing-pr2
	  SOURCES switch_processing_blink.v
	  INPUT_IO_FILE ${COMMON}/arty_switch_processing_pr2.pcf
	  EXPLICIT_ADD_FILE_TARGET
	  )

	add_file_target(FILE switch_processing_identity.v SCANNER_TYPE verilog)
	add_fpga_target(
	  NAME switch_processing_arty_identity_pr1
	  BOARD arty-switch-processing-pr1
	  SOURCES switch_processing_identity.v
	  INPUT_IO_FILE ${COMMON}/arty_switch_processing_pr1.pcf
	  EXPLICIT_ADD_FILE_TARGET
	  )

	add_fpga_target(
	  NAME switch_processing_arty_identity_pr2
	  BOARD arty-switch-processing-pr2
	  SOURCES switch_processing_identity.v
	  INPUT_IO_FILE ${COMMON}/arty_switch_processing_pr2.pcf
	  EXPLICIT_ADD_FILE_TARGET
	  )

Here the add_1 and blink modules are mapped to pr1 and pr2 respectively.
The identity function is then also mapped to each partition region.

.. code-block:: cmake

	add_file_target(FILE switch_processing_arty_overlay.v SCANNER_TYPE verilog)
	add_fpga_target(
	  NAME switch_processing_arty_overlay
	  BOARD arty-switch-processing-overlay
	  SOURCES switch_processing_arty_overlay.v
	  INPUT_IO_FILE ${COMMON}/arty_switch_processing_overlay.pcf
	  EXPLICIT_ADD_FILE_TARGET
	  )

Here the overlay verilog is mapped to the overlay architecture.
This overlay verilog connects switches to the input of the first partition region, connects the output of the first
partition region to the input of the second partition region, and then connects the output of the second partition
region to LEDs.

.. code-block:: cmake

	add_bitstream_target(
	  NAME switch_processing_arty_both_merged
	  USE_FASM
	  INCLUDED_TARGETS switch_processing_arty_add_1_pr1 switch_processing_arty_blink_pr2 switch_processing_arty_overlay
	  )

	add_bitstream_target(
	  NAME switch_processing_arty_add_1_merged
	  USE_FASM
	  INCLUDED_TARGETS switch_processing_arty_add_1_pr1 switch_processing_arty_identity_pr2 switch_processing_arty_overlay
	  )

	add_bitstream_target(
	  NAME switch_processing_arty_blink_merged
	  USE_FASM
	  INCLUDED_TARGETS switch_processing_arty_identity_pr1 switch_processing_arty_blink_pr2 switch_processing_arty_overlay
	  )

	add_bitstream_target(
	  NAME switch_processing_arty_identity_merged
	  USE_FASM
	  INCLUDED_TARGETS switch_processing_arty_identity_pr1 switch_processing_arty_identity_pr2 switch_processing_arty_overlay
	  )

Lastly, multiple merged bitstream targets are defined.
These targets will concatenate the FASM generated by each included target and produce the final bitstream.
By varying which targets are included different functionality is created without having to remap any new regions after
it has been done once.
Just concatenate the resulting FASM and get different functionality.

The last thing to cover related to the F4PGA partial reconfiguration flow is synthetic ibufs and obufs required in
the overlay verilog:

:ghsrc:`switch_processing_arty_overlay.v <xilinx/xc7/tests/switch_processing/switch_processing_arty_overlay.v>`

Currently the ``SYN_IBUF`` and ``SYN_OBUF`` must be explicitly defined for each top level IO that will be constrained to
a synth IO.
In the future this should be able to be resolved using a yosys io map pass, but currently if explicit synthetic buffers
are not defined the top level IOs will be packed into a real IO.
This will prevent constraining the top level IOs to the intended synthetic IO location.

The overlay pcf file can then be written to constrain real IOs to chip IOs and synthetic IOs to synthetic IOs.


Frequently Encountered Errors
=============================

SYN-IOPAD unroutable
--------------------

* Make sure the chosen node is driven in the correct direction for the I/O type it is being used as.

* Inputs to a partition region must be driven from outside the partition region and outputs must be driven from inside
  the partition region.
