Fetch Target Queue
The fetch target queue (FTQ) is responsible for tracking all outstanding requests for instruction fetch.
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 cachelinesrc
: The event that generated this requestpassthru
: 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.
Emit a request to the fetch unit
Fetch unit responds with some status
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