The waitrequest is a mechanism for throttling the source of traffic to the IO Slave port. If the waitrequest is asserted High, it means the IO slave port does not have enough resources to keep accepting the write burst. It requests some time to wait for data processing. If the waitrequest is Low, it means the IO slave port has enough resources and is ready to accept the write burst. The resources are the following:
- The transmit buffer in the Physical Layer. If the Physical Layer is running out of space in the transmit buffer, then the IO slave cannot push anymore transactions. The reason that the Physical Layer could be running out of transmit buffer space could be do to congestion in the link partner which could be due to congestion in the system.
- The number of outstanding transaction supported by the IO slave module has reached its maximum. This effects transactions that require a RESPONSE such as NREADs and NWRITE_Rs. The IO slave module can support up to 12 outstanding NWRITE_Rs and 14 NREADs.
All transactions are subject to the first item above. Only NREADs and NWRITE_Rs are subject to the second reason above.