To retrieve the SMID value from an AXI transaction arriving at the PS block, you insert an AXI Sideband Formatter Utility IP core between the fabric interconnect and one of the AXI fabric slave interfaces of the PS block. You then configure the IP to perform SMID extraction, again specifying the width of the SMID field to extract.
It is also acceptable to directly connect an AXI Sideband Formatter Utility IP core configured for SMID extraction to the output of another AXI Sideband Formatter Utility IP core configured for SMID insertion, if no intervening AXI interconnect is needed. (These two functions cannot be performed by the same instance of the core.)
For each AW or AR transfer, the SMID field is extracted from the low-order
position of awuser
or aruser
and the remainder (if any) is right-shifted and propagated.
The extracted SMID value is propagated as the out-bound awid
or arid
(and
wid
if AXI3), which is where the SMMU expects to
find the SMID.
Any in-bound value of awid
or arid
(if
S_ID_WIDTH>0) is pushed into a queue to be restored during the corresponding response
transfer.
-
During response transfers, received
rid
orbid
are discarded and replaced by the savedawid
andarid
(if any). -
AW and AR command traffic gets single-threaded according to SMID (disregarding any
awid
orarid
). Any transfer received while there is an outstanding transaction with a different SMID value gets stalled. This avoids any response reordering.
In AXI3, W-channel gets stalled until the corresponding AW is received so that
extracted SMID can be propagated as wid
.