This interface allows a stream of data to be transferred between two components, allowing for the upstream component to produce ticks of data at any rate it can sustain and allowing the downstream component to consume ticks of data at any rate it can sustain.
The upstream component drives two components of the interface:
DATA
- carries the data that is being transferred between the upstream and downstream;VALID
- qualifies when the data being transferred is ready to be sampled by the downstream.
The downstream component drives one component of the interface:
READY
- informs the upstream component when the downstream component is ready to sample the data.
Data is transferred between the upstream and downstream on the rising clock edge
following both VALID
and READY
being asserted, as shown in the diagram above.
- Once
VALID
has been asserted it may not be de-asserted untilREADY
is observed high at the subsequent rising clock edge; - Once
VALID
has been asserted theDATA
must be stable untilREADY
is observed high at the subsequent rising clock edge; READY
must not be driven by combinational logic that involves either theDATA
orVALID
signals to avoid creating problematic timing paths;- This interface is NOT inherently safe for clock domain crossings and therefore it must be correctly synchronised.
Upstream components should use the following naming convention for signals:
DATA
should be carried byo_<NAME>_data
;VALID
should be carried byo_<NAME>_valid
;READY
should be carried byi_<NAME>_ready
.
Downstream components should use the following naming convention for signals:
DATA
should be carried byi_<NAME>_data
;VALID
should be carried byi_<NAME>_valid
;READY
should be carried byo_<NAME>_ready
.
Where <NAME>
is a unique and consistent name for the interface, for example
o_decode_data
, o_decode_valid
, i_decode_ready
.