ARM AMBA 2.0 AHB Split and Retry

What is the diffrence between split and retry ?

Both the Split and Retry responses are used by slaves which require a large number of cycles to complete a transfer. These responses allow a data phase transfer to appear completed to avoid stalling the bus, but at the same time indicate that the transfer should be re-attempted when the master is next granted the bus.

The difference between them is that a SPLIT response tells the Arbiter to give priority to all other masters until the SPLIT transfer can be completed (effectively ignoring all further requests from this master until the SPLIT slave indicates it can complete the SPLIT transfer), whereas the RETRY response only tells the Arbiter to give priority to higher priority masters.

A SPLIT response is more complicated to implement than a RETRY, but has the advantage that it allows the maximum efficiency to be made of the bus bandwidth.

The master behaviour is identical to both SPLIT and RETRY responses, the master has to cancel the next access and re-attempt the current failed access.

Do all slaves have to support the SPLIT and RETRY responses ?

No. A slave is only required to support the response types that it needs to use. For example, a simple on-chip memory block which can respond to all transfers in just a few wait states does not need to use either the SPLIT or RETRY responses.

Do all masters have to support SPLIT and RETRY ?

Yes. All masters must support SPLIT and RETRY responses to ensure they are compatible with any bus slave. A master will handle both SPLIT and RETRY responses in an identical manner.

Note that if the system is based on AHB-Lite, SPLIT and RETRY responses are not supported. AHB-lite is a single master solution, so SPLIT and RETRY responses would have no meaning.

Can a SPLIT or RETRY response be given at any point during a burst ?

Yes. A SPLIT, RETRY or ERROR response can be given by a slave to any transfer during a burst. The slave is not restricted to only giving these responses to the first transfer.

Can a slave assert HSPLITx in the same cycle that it gives a SPLIT response ?

No. The specification requires that HSPLITx can only be asserted after the slave has given a SPLIT response.

The 1KB restriction you refer to is not a restriction on maximum slave size but a constraint within AHB that says that a burst must not cross a 1KB boundary. The limit is designed to prevent bursts crossing from one device to another and to give a reasonable trade-off between burst size and efficiency. In practise, this means that a master must ALWAYS break a burst that would otherwise cross the 1KB boundary and restart it with a non-sequential transfer, thus:

Address: 0x3F0 0x3F4 0x3F8 0x3FC 0x400 0x404 0x408
Transfer: NSEQ SEQ SEQ SEQ NSEQ SEQ SEQ


Can a slave use both SPLIT and RETRY responses ?

Normally a slave will not use both the SPLIT and RETRY responses. The SPLIT response should be used by any slave that may be accessed by many different masters at the same time. The RETRY response is intended to be used by peripherals that are only accessed by one bus master.

What address should be on the bus during the IDLE cycle after a SPLIT or RETRY ?

It does not matter what address is driven onto the bus during this cycle. The slave selected by the driven address should not take any action and must respond with a zero wait state OKAY response.

In many cases it will be simpler for the master to leave the address unaltered during this cycle, so that it remains at the address of the next transfer that the master wishes to perform and only in the following cycle does the master return the address to that of the transfer that must be repeated because of the SPLIT or RETRY response.

In some designs it may be possible for the master to return the address to that required to repeat the previous transfer during the IDLE cycle and this behaviour is also perfectly acceptable.

What value should be used for HTRANS when an AHB master gets a RETRY response from a slave in the middle of burst ?

Whenever a transfer is restarted it must use HTRANS set to NONSEQ and it may also be necessary to adjust the HBURST information (usually just to indicate INCR).

Will a master always lose the bus after a SPLIT response ?

Yes. A slave must not assert the relevant bit of the HSPLIT bus in the same cycle that it gives the SPLIT response and therefore the master will always lose the bus.