This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How should a AXI MASTER or SLAVE behave when a xREADY signal is never asserted?

Hi all,

I was trying to extract this information from the AXI specification but I didn't find any clear answer.

I wonder how should an AXI component behave if an input xREADY signal is never asserted.

Example 1: a master starts a write transaction by asserting AWVALID (and the other needed signals). That should be legal since the AWVALID is not allowed to depend AWREADY. And is also legal for the slave (even if not recommended) to assert AWREADY after AWVALID has been asserted. What happens now if AWREADY is never asserted?

Example 2: a master starts a write transaction by asserting AWVALID and the slave acknowledges it with AWREADY. Then the master asserts WVALID to write the data, but the slave hangs and never asserts WREADY. Should the master timeout? Is it possible to abort a transaction after it's started?

Thanks for the help

A

Parents
  • Hi A,

    In both your examples you are looking at having to reset one or both components involved in the transfer.

    For example 1 where the AWVALID transfer is stalled by the slave not asserting AWREADY, if that is the only transfer ongoing you could think of just resetting the slave, and then hopefully when it comes out of reset it will accept the AW transfer still waiting to be acknowledged. However if the slave has other write transfers ongoing (for an earlier accepted write address), either WDATA transfers or BRESP responses still to complete, or if the slave also has read accesses ongoing, you wouldn't be able to reset just the slave as other transactions would then be lost, so you could wait for those other transfers to complete before resetting the slave, or just reset both master and slave.

    For example 2 where the slave now has an active write transfer, you would then need to reset both the master and the slave (the slave because it has hung, and the master because it has issued a transaction that will never be completed).

    The AXI protocol doesn't have any concept of "timeout", if a channel source asserts xVALID, that xVALID indication must remain asserted until the corresponding xREADY is asserted. If the channel destination component has failed for any reason, the transfer will remain pending indefinitely, so reset is the only solution.

    Note that in anything other than the simplest master connected directly to a slave scenario, there will be some sort of interconnect structure involved to connect multiple masters and slaves. In that sort of scenario it is much more difficult to determine when it might be safe to reset just one component, so when one component hangs you usually have to be looking at resetting all components.

    So basically validate your components so that there is no possibility of them ever hanging

    JD

Reply
  • Hi A,

    In both your examples you are looking at having to reset one or both components involved in the transfer.

    For example 1 where the AWVALID transfer is stalled by the slave not asserting AWREADY, if that is the only transfer ongoing you could think of just resetting the slave, and then hopefully when it comes out of reset it will accept the AW transfer still waiting to be acknowledged. However if the slave has other write transfers ongoing (for an earlier accepted write address), either WDATA transfers or BRESP responses still to complete, or if the slave also has read accesses ongoing, you wouldn't be able to reset just the slave as other transactions would then be lost, so you could wait for those other transfers to complete before resetting the slave, or just reset both master and slave.

    For example 2 where the slave now has an active write transfer, you would then need to reset both the master and the slave (the slave because it has hung, and the master because it has issued a transaction that will never be completed).

    The AXI protocol doesn't have any concept of "timeout", if a channel source asserts xVALID, that xVALID indication must remain asserted until the corresponding xREADY is asserted. If the channel destination component has failed for any reason, the transfer will remain pending indefinitely, so reset is the only solution.

    Note that in anything other than the simplest master connected directly to a slave scenario, there will be some sort of interconnect structure involved to connect multiple masters and slaves. In that sort of scenario it is much more difficult to determine when it might be safe to reset just one component, so when one component hangs you usually have to be looking at resetting all components.

    So basically validate your components so that there is no possibility of them ever hanging

    JD

Children