link
In the pipelined protocols, the handling of response requires a different approach as compared to other non-pipelined protocols. In other protocols, the Driver and Sequencer synchronization can be implemented in a simpler way, where the Driver gets the transaction item from the Sequencer, drives it on the interface and then sends the response back to the Sequencer just after calling the item done and before getting the new transaction item again from the Sequencer. However, the same method of sending response cannot be used while dealing with the protocols where the response is pipelined.
In case of pipelined response, the Driver cannot send the response to the Sequencer at the time when no response has been driven on the bus by the Slave. If Driver waits for sampling the response at the right clock cycle before sending it to the Sequencer then it will get the next packet from the Sequencer with some delay. During the time when Driver is waiting for the response and also it has not fetched the new transaction packet from the Sequencer, it has to drive Idle transfers on the interface. If we want the scenario of continuous back to back transactions on the interface without Idle transfers in between, it cannot be achieved in this case.
Let us take the example of AHB protocol, according to AHB a simple transfer proceeds with the below given steps (also shown in figure 1):
The master drives the address and control signals onto the bus after the rising edge of HCLK.
The slave then samples the address and control information on the next rising edge of HCLK.
After the slave has sampled the address and control it can start