pluto_hdl_adi/docs/library/spi_engine/spi_engine_interconnect.rst

83 lines
3.2 KiB
ReStructuredText

.. _spi_engine interconnect:
SPI Engine Interconnect Module
================================================================================
.. hdl-component-diagram::
The :git-hdl:`SPI Engine Interconnect <library/spi_engine/spi_engine_interconnect>`
allows connecting multiple :ref:`spi_engine control-interface` managers to a single
:ref:`spi_engine control-interface` subordinate.
This enables multiple command stream generators to connect to a single
:ref:`spi_engine execution` and consequential give them access to the same SPI bus.
The interconnect modules take care of properly arbitrating between the different
command streams.
Combining multiple command stream generators in a design and connecting them to
a single execution module allows for the creation of flexible and efficient
designs using standard components.
Files
--------------------------------------------------------------------------------
.. list-table::
:widths: 25 75
:header-rows: 1
* - Name
- Description
* - :git-hdl:`library/spi_engine/spi_engine_interconnect/spi_engine_interconnect.v`
- Verilog source for the peripheral.
* - :git-hdl:`library/spi_engine/spi_engine_interconnect/spi_engine_interconnect_ip.tcl`
- TCL script to generate the Vivado IP-integrator project for the
peripheral.
Configuration Parameters
--------------------------------------------------------------------------------
.. hdl-parameters::
* - DATA_WIDTH
- Data width of the parallel SDI/SDO data interfaces.
* - NUM_OF_SDI
- Number of SDI lines on the physical SPI interface.
Signal and Interface Pins
--------------------------------------------------------------------------------
.. hdl-interfaces::
* - clk
- A signals of the module are synchronous to this clock.
* - resetn
- Synchronous active-low reset.
Resets the internal state of the module.
* - s0_ctrl
- | :ref:`spi_engine control-interface` subordinate.
| Connects to the first control interface manager.
* - s1_ctrl
- | :ref:`spi_engine control-interface` subordinate.
| Connects to the second control interface manager.
* - m_ctrl
- | :ref:`spi_engine control-interface` manager.
| Connects to the control interface subordinate.
Theory of Operation
--------------------------------------------------------------------------------
The SPI Engine Interconnect module has multiple
:ref:`spi_engine control-interface` subordinate ports and a single
:ref:`spi_engine control-interface` manager port.
It can be used to connect multiple command stream generators to a single command
execution engine. Arbitration between the streams is done on a priority
basis, streams with a lower index have higher priority. This means if commands
are present on two streams arbitration will be granted to the one with the lower
index. Once arbitration has been granted the port it was granted to stays in
control until it sends a SYNC command. When the interconnect module sees a SYNC
command arbitration will be re-evaluated after the SYNC command has been
completed. This makes sure that once a SPI transaction consisting of multiple
commands has been started it is able to complete without being interrupted by a
higher priority stream.