Fetch Target Queue

The fetch target queue (FTQ) is responsible for tracking all outstanding requests for instruction fetch.

  1. Fetch requests that result in an L1I miss or TLB miss can be parked and subsequently replayed after the associated L1I fill or PTW request has been completed. This effectively makes many interactions with the L1I non-blocking.

class ember.front.ftq.FTQEntryState(value, *args, **kwargs)

State of an FTQ entry.

Values:
  • NONE – FTQ entry is empty

  • PENDING – Request is eligible for service by the IFU

  • FETCH – Request is moving through the IFU

  • FILL – Request stalled for L1I miss

  • XLAT – Request stalled for TLB miss

  • COMPLETE – Request completed

class ember.front.ftq.FTQEntry(param: EmberParams)

Layout of an entry in the Fetch Target Queue.

class ember.front.ftq.FTQAllocRequest(param: EmberParams)

A request to allocate an FTQ entry.

  • vaddr: Virtual address of the requested cacheline

  • src: The event that generated this request

  • passthru: Treat this virtual address as a physical address

class ember.front.ftq.FTQFreeRequest(param: EmberParams)

A request to free an FTQ entry.

class ember.front.ftq.FetchTargetQueue(*args, src_loc_at=0, **kwargs)

Logic for tracking outstanding fetch requests.

  1. Emit a request to the fetch unit

  2. Fetch unit responds with some status

  3. Entries associated with L1I/TLB misses are parked until signals from the L1I fill unit or PTW cause them to replay

Rationale & Notes

  • FTQ entries are MSHRs for the L1I, makes IFU non-blocking

  • Decouples branch retire from the IFU

  • Decouples branch prediction from the IFU

  • Opportunistic prefetch for pending requests that are expected to miss

  • Opportunistic prefetch for predicted branch targets (!!)

Ports:
  • alloc_req – Request to allocate a new FTQ entry

  • free_req – Request to free an FTQ entry

  • fetch_req – Instruction fetch request

  • fetch_resp – Instruction fetch response

  • ifill_resp – L1I fill unit response