Avalon® Interface Specifications

ID 683091
Date 9/26/2022
Public
Document Table of Contents

3.5.4.1. Pipelined Read Transfer with Variable Latency

After capturing address and control signals, an Avalon® -MM pipelined agent takes one or more cycles to produce data. A pipelined agent may have multiple pending read transfers at any given time.

Variable-latency pipelined read transfers:
  • Require one additional signal, readdatavalid, that indicates when read data is valid.
  • Include the same set of signals as non-pipelined read transfers.
In variable-latency pipelined read transfers, Agent peripherals that use readdatavalid are considered pipelined with variable latency. The readdata and readdatavalid signals corresponding to a read command can be asserted the cycle after that read command is asserted, at the earliest.

The agent must return readdata in the same order that the read commands are accepted. Pipelined agent ports with variable latency must use waitrequest. The agent can assert waitrequest to stall transfers to maintain an acceptable number of pending transfers. An agent may assert readdatavalid to transfer data to the host independently of whether the agent is stalling a new command with waitrequest.

Note: The maximum number of pending transfers is a property of the agent interface. The interconnect fabric builds logic to route readdata to requesting hosts using this number. The agent interface, not the interconnect fabric, must track the number of pending reads. The agent must assert waitrequest to prevent the number of pending reads from exceeding the maximum number. If an agent has waitrequestAllowance > 0, the agent must assert waitrequest early enough so that the total pending transfers, including those accepted while waitrequest is asserted, does not exceed the maximum number of pending transfers specified.
Figure 12. Pipelined Read Transfers with Variable Latency

The following figure shows several agent read transfers. The agent is pipelined with variable latency. In this figure, the agent can accept a maximum of two pending transfers. The agent uses waitrequest to avoid overrunning this maximum.

The numbers in this timing diagram, mark the following transitions:

  1. The host asserts address and read, initiating a read transfer.
  2. The agent captures addr1.
  3. The agent captures addr2.
  4. The agent asserts waitrequest because the agent has already accepted a maximum of two pending reads, causing the third transfer to stall.
  5. The agent asserts data1, the response to addr1. The agent deasserts waitrequest.
  6. The agent captures addr3. The interconnect captures data1.
  7. The agent captures addr4. The interconnect captures data2.
  8. The agent drives readdatavalid and readdata in response to the third read transfer.
  9. The agent captures addr5. The interconnect captures data3. The read signal is deasserted. The value of waitrequest is no longer relevant.
  10. The interconnect captures data4.
  11. The agent drives data5 and asserts readdatavalid completing the data phase for the final pending read transfer.

If the agent cannot handle a write transfer while processing pending read transfers, the agent must assert waitrequest and stall the write operation until the pending read transfers have completed. The Avalon® -MM specification does not define the value of readdata in the event that an agent accepts a write transfer to the same address as a currently pending read transfer.