An AXI slave write agent has three concurrent transaction flows:
- Address channel servicing
- Data channel serving
- Response channel generation
Both the address and data channels have their READY responses configured independently from the user environment. Only the response channel, B, relies on communication with the user environment to make forward progress. The transaction flows through the write agent in the following steps:
- Master write response driver performs a blocking get to the user
environment through a
get_next_item. Because the command has not yet been received, the user environment must wait until the command has been received from the master
- The user environment performs a blocking get,
get_next_item, on the reactive port of the driver.
- The driver at this time can accept the incoming beats of WDATA and AWADDR and places them in a holding structure.
- Only after the slave driver receives the complete AWADDR phase and the WDATA phase, it transfers the command object through the reactive port to the user environment.
- The user environment determines the correct response to the request
and puts the complete transaction on the REQUEST port of the driver. The transaction
- Command Information
- AWADDR, AWLEN, AWSIZE, AWID, etc. From the original command passed to the user environment..
- Response Controlled Timing and Response
- Response delay, BRESP.
- The driver pops the transaction from the REQUEST port and places it on the queue to be processed on the response interface and starts the response channel delay timer. It is possible that before the response channel delay timer has expired more than one transaction can exist in the response list. When there is more than one item on the response list, the driver selects the next response to be sent.
- When the transaction has been configured to be returned following a BRESP acceptance event, the slave driver fills in the beats WDATA and places it on the RESPONSE port of the driver.
- The user environment receives the completed transaction.
Figure 1. Write Transaction Flow