The following sequence will occur for each VBUSM read which is sent to the source interface:
- RINGACC extracts ring number from incoming read transaction address
- RINGACC looks up ring state using ring number
- RINGACC calculates effective read address using ring base + ring_index
- RINGACC increments hardware index and decrements hardware occupancy for ring
- RINGACC re-evaluates pending bit for ring
- RINGACC munges cid to add indicator in 4 MSBs to reconstitute routeid for returning read data
- RINGACC pushes altered caddress, cid and unaltered remainder of command attributes to output FIFO (note routeid is not included)
At a later time when read data returns:
- RINGACC recovers original cid, crouteid, and ring number from scoreboard
- RINGACC increments software index and decrements software occupancy for ring
- RINGACC pushes restored routeid, rid, and unaltered read data, status, and other control signals to output read FIFO