Question about AHB-Lite interconnection

Hello to all AHB experts,

I have some question about AHB-Lite interconnection.

If I want to build 2 masters share 1 slave systems. I add a arbiter in the interconnect circuit, so that only one master could access the slave at a time.

My question is how the slave response mux to the masters?

1. If (HTRANS1==NONSEQ) for master1, (HTRANS2==NONSEQ) for master2, only a master will see the HREADY response at data phase whose grant by the arbiter?

2. If (HTRANS1==ILDE        ) for master1, (HTRANS2==IDLE        ) for master2, two masters will see the HREADY response at data phase at a time?

3. If (HTRANS1==NONSEQ) for master1, (HTRANS2==IDLE        ) for master2, two masters will see the HREADY response at data phase at a time?

Thanks a lot.

Parents
  • Hi Jacky,

    This could be quite a confusing answer as your mention of an "arbiter" normally would suggest an AHB system where there is a physical "arbiter" block with HBUSREQ and HGRANT signals to control which of multiple masters is granted access to the single shared AHB connecting to the slaves in your system.

    AHB-lite simplified AHB by removing all the multiple master features (so HBUSREQ and HGRANT, and the SPLIT and RETRY responses used by slaves), with the "interconnect" logic, or "BusMatrix" then handling systems where you have multiple masters trying to access multiple slaves.

    So inside this "BusMatrix" logic there needs to be some "arbitration" logic deciding which of two or more master transfer requests is passed through to a destination slave port (I'll try not to use the word "arbiter" here to avoid confusion).

    The first issue for a BusMatrix when connecting multiple masters requests through to a slave is that it cannot immediately stall one master request by driving HREADY low to that master, or at least it can't until that master has moved on to the data phase of that first transfer (when you can add wait states). So the BusMatrix needs to be able to register the first transfer from any master so that it can then add wait states if that master's transfer cannot immediately be passed through to the destination slave - when it fails to win the "arbitration" decision.

    So to your questions...

    1) it is likely that both masters would see an initial wait state added by the BusMatrix while it works out which slave is being addressed, and if there is any arbitration decision to be made, and after that point one master would see wait states from the destination slave while the other "stalled" master sees wait states added by the BusMatrix.

    2) when both masters are signalling IDLE transfers, no slave is being accessed and the BusMatrix would just return the mandatory HREADY=1 responses.

    3) where one master is signalling IDLE transfers it would receive the default HREADY=1 response from the BusMatrix described in Q2, while the other receives the initial wait state from Q1 while the BusMatrix works out which slave is being address, and then checks if an arbitration decision is required (not in this case).

    All of those replies are based on how I would expect a BusMatrix to function, with the wait states described meaning that no initial combinatorial "address phase" path exists (with the associated timing issues), but I guess it could be possible to design a combinatorial solution if timing issues were taken care of.

Reply
  • Hi Jacky,

    This could be quite a confusing answer as your mention of an "arbiter" normally would suggest an AHB system where there is a physical "arbiter" block with HBUSREQ and HGRANT signals to control which of multiple masters is granted access to the single shared AHB connecting to the slaves in your system.

    AHB-lite simplified AHB by removing all the multiple master features (so HBUSREQ and HGRANT, and the SPLIT and RETRY responses used by slaves), with the "interconnect" logic, or "BusMatrix" then handling systems where you have multiple masters trying to access multiple slaves.

    So inside this "BusMatrix" logic there needs to be some "arbitration" logic deciding which of two or more master transfer requests is passed through to a destination slave port (I'll try not to use the word "arbiter" here to avoid confusion).

    The first issue for a BusMatrix when connecting multiple masters requests through to a slave is that it cannot immediately stall one master request by driving HREADY low to that master, or at least it can't until that master has moved on to the data phase of that first transfer (when you can add wait states). So the BusMatrix needs to be able to register the first transfer from any master so that it can then add wait states if that master's transfer cannot immediately be passed through to the destination slave - when it fails to win the "arbitration" decision.

    So to your questions...

    1) it is likely that both masters would see an initial wait state added by the BusMatrix while it works out which slave is being addressed, and if there is any arbitration decision to be made, and after that point one master would see wait states from the destination slave while the other "stalled" master sees wait states added by the BusMatrix.

    2) when both masters are signalling IDLE transfers, no slave is being accessed and the BusMatrix would just return the mandatory HREADY=1 responses.

    3) where one master is signalling IDLE transfers it would receive the default HREADY=1 response from the BusMatrix described in Q2, while the other receives the initial wait state from Q1 while the BusMatrix works out which slave is being address, and then checks if an arbitration decision is required (not in this case).

    All of those replies are based on how I would expect a BusMatrix to function, with the wait states described meaning that no initial combinatorial "address phase" path exists (with the associated timing issues), but I guess it could be possible to design a combinatorial solution if timing issues were taken care of.

Children