L1 Instruction Cache Fill
- class ember.front.ifill.L1IFillRequest(p: EmberParams)
L1 instruction cache fill request.
- Ports:
valid – This request is valid
addr – Physical address for this request
way – Target way in the L1I cache
- class ember.front.ifill.L1IFillResponse(p: EmberParams)
- class ember.front.ifill.L1IFillStatus(p: EmberParams)
- class ember.front.ifill.L1IMshrState(value, *args, **kwargs)
The state associated with an MSHR.
- Values:
NONE – No request is being serviced.
ACCESS – The request is being serviced by a remote memory device.
WRITEBACK – The request data is available and being written back to the L1I
COMPLETE – The request has been completed and is waiting to be released.
- class ember.front.ifill.L1IMissStatusHoldingRegister(*args, src_loc_at=0, **kwargs)
L1I cache “miss-status holding register” (MSHR)
The L1I fill unit includes MSHRs that are used to track fill requests generated by both demand fetch and prefetch requests that have missed in the L1I cache. An MSHR holds the request while data is being received from memory and written back to the L1I cache data/tag arrays.
An MSHR moves through the following sequence of states:
L1IMshrState.NONE
: Ready to accept a requestL1IMshrState.ACCESS
: Request is registered and being sent to memoryL1IMshrState.WRITEBACK
: Response from memory is registered and being sent to the IFU and L1I cache write portL1IMshrState.COMPLETE
: L1I cache write port response is acknowledged and the state of this MSHR is reset
Upon completion, the L1I fill unit signals the FTQ indicating that the FTQ entry which generated the fill request is eligible to be replayed.
- Ports:
ready – High when this MSHR is ready to accept a request
req – Incoming fill request to this MSHR
l1i_wp – L1I cache write port interface
fakeram – Memory interface
- class ember.front.ifill.L1IMshrArbiter(*args, src_loc_at=0, **kwargs)
Arbiter for controlling a set of MSHRs.
- Ports:
ready – High when at least one MSHR is available to service a request.
req – Fill request to-be-forwarded to an available MSHR.
resp – Fill response from an MSHR which has completed
mshr_ready – Array of ready signals for each MSHR
mshr_complete – Array of complete signals for each MSHR
mshr_req – Fill request wires for each MSHR
mshr_resp – Fill response wires for each MSHR
- class ember.front.ifill.L1IFillUnit(*args, src_loc_at=0, **kwargs)
Logic for moving bytes from remote memory into the L1I cache.
The L1I fill unit tracks outstanding cache misses until data has been written back to the L1I data/tag arrays. Each pending miss is held in an MSHR until L1I writeback is complete.
Handling multiple misses in parallel allows misses generated by prefetch requests to begin/complete without blocking for misses generated by demand fetch requests.
- Ports:
sts – Fill unit status driven [upstream] to instruction fetch logic
l1i_wp – L1I cache write port[s]
req – Fill request from instruction fetch logic
resp – Response to the FTQ
fakeram – Interface[s] to a mock RAM device