Reusable Modules
August 19, 2021 ยท View on GitHub
A collection of reusable, intercompatible modules which can be used to flexibly connect peripherals, hosts, and SpiNNaker boards together.
Common Interface
SpiNNaker speaks 'SpiNNaker Packets' which are described in the SpiNNaker datasheet. As a result, all attempts to interface with SpiNNaker must be able to sensibly express and expose themselves in this form. Higher-level protocols built on top of SpiNNaker packets are also available such as the SpiNNaker Datagram Protocol (SDP) if required, but ultimately everything ends up just being SpiNNaker packets. As a result, all modules in this library share the following common interface designed to communicate SpiNNaker packets.
To send packets from A to B, the following interface is used:
,--------, ,--------,
| | data[71:0] | |
| |======/=====>| |
| | | |
| A | vld | B |
| |------------>| |
| | | |
| | rdy | |
| /\ |<------------| /\ |
'--'--`--' '--'--`--'
| |
clk ----+-----------------------'
The data bus is 72-bits wide, the width of a SpiNNaker packet with a payload.
Devices which never produce packets with payloads may tie the upper 32 bits to
any value (but not be left floating). Devices that cannot consume packets with
payloads may safely ignore these upper 32 bits.
If the vld signal is asserted then the data that A wishes to transfer is on the
data bus. The rdy signal is asserted whenever B is capable of accepting new
data. If rdy and vld are asserted in the same cycle, the value on the data
bus is captured by B. In the next cycle, if both signals are still asserted then
the new data on the bus is considered transferred.
The vld/rdy handshake must follow the following rules:
- The source device must not wait for an asserted
rdyto assertvld. - Once the
vldsignal has been asserted it must not be deasserted untilrdyhas gone high (i.e. until the value is transferred).