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 request

  • L1IMshrState.ACCESS: Request is registered and being sent to memory

  • L1IMshrState.WRITEBACK: Response from memory is registered and being sent to the IFU and L1I cache write port

  • L1IMshrState.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