An AXI slave read agent has two concurrent transaction flows:
- Address channel servicing
- Data channel serving
The address channel has its READY responses configured through the user environment. The data channel relies on the user environment for timing and payload generation. The transaction flows through the read agent in the following steps:
- Master read 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 slave driver waits for an ARADDR command.
- Only after the slave driver receives the completion ARADDR phase, it transfers the command object through the reactive port to the sequencer. The command information consists of the Command Information field with ARADDR, ARLEN, ARSIZE, ARID, and so on.
- The user environment creates a single transaction. The transaction
contains the following:
- RDATA byte array and RRESP array
- Slave Controlled Timing
- Inter-beat timing and data insertion delay
- The driver pops the transaction from the REQUEST port and places it on a queue to be processed and driven on the interface. If the system was idle at the time, the driver starts the slave data channel delay timer.
- After the expiration of the timer, the driver processes the beats of data to be driven on the interface. In the case of multiple transactions pending and the slave being configured to support read, it interleaves the beats of the pending transactions.
- Upon the acceptance of the last beat of a given command, if the transaction is configured to be returned to the user environment, the slave driver places it on the RESPONSE port to be sent.
- The user environment receives the completed transaction.