gem5
v20.1.0.0
|
#include <lsq.hh>
Classes | |
class | BarrierDataRequest |
Request for doing barrier accounting in the store buffer. More... | |
class | DcachePort |
Exposable data port. More... | |
class | FailedDataRequest |
FailedDataRequest represents requests from instructions that failed their predicates but need to ride the requests/transfers queues to maintain trace ordering. More... | |
class | LSQRequest |
Derived SenderState to carry data access info. More... | |
class | SingleDataRequest |
SingleDataRequest is used for requests that don't fragment. More... | |
class | SpecialDataRequest |
Special request types that don't actually issue memory requests. More... | |
class | SplitDataRequest |
class | StoreBuffer |
Store buffer. More... | |
Public Types | |
typedef LSQRequest * | LSQRequestPtr |
typedef Queue< LSQRequestPtr, ReportTraitsPtrAdaptor< LSQRequestPtr >, NoBubbleTraits< LSQRequestPtr > > | LSQQueue |
The LSQ consists of three queues: requests, transfers and the store buffer storeBuffer. More... | |
Public Member Functions | |
LSQ (std::string name_, std::string dcache_port_name_, MinorCPU &cpu_, Execute &execute_, unsigned int max_accesses_in_memory_system, unsigned int line_width, unsigned int requests_queue_size, unsigned int transfers_queue_size, unsigned int store_buffer_size, unsigned int store_buffer_cycle_store_limit) | |
virtual | ~LSQ () |
void | step () |
Step checks the queues to see if their are issuable transfers which were not otherwise picked up by tests at the end of other events. More... | |
bool | canRequest () |
Is their space in the request queue to be able to push a request by issuing an isMemRef instruction. More... | |
LSQRequestPtr | findResponse (MinorDynInstPtr inst) |
Returns a response if it's at the head of the transfers queue and it's either complete or can be sent on to the store buffer. More... | |
void | popResponse (LSQRequestPtr response) |
Sanity check and pop the head response. More... | |
bool | canPushIntoStoreBuffer () const |
Must check this before trying to insert into the store buffer. More... | |
void | sendStoreToStoreBuffer (LSQRequestPtr request) |
A store has been committed, please move it to the store buffer. More... | |
bool | accessesInFlight () const |
Are there any accesses other than normal cached loads in the memory system or having received responses which need to be handled for their instruction's to be completed. More... | |
void | issuedMemBarrierInst (MinorDynInstPtr inst) |
A memory barrier instruction has been issued, remember its execSeqNum that we can avoid issuing memory ops until it is committed. More... | |
InstSeqNum | getLastMemBarrier (ThreadID thread_id) const |
Get the execSeqNum of the last issued memory barrier. More... | |
bool | isDrained () |
Is there nothing left in the LSQ. More... | |
bool | needsToTick () |
May need to be ticked next cycle as one of the queues contains an actionable transfers or address translation. More... | |
void | completeMemBarrierInst (MinorDynInstPtr inst, bool committed) |
Complete a barrier instruction. More... | |
Fault | pushRequest (MinorDynInstPtr inst, bool isLoad, uint8_t *data, unsigned int size, Addr addr, Request::Flags flags, uint64_t *res, AtomicOpFunctorPtr amo_op, const std::vector< bool > &byte_enable=std::vector< bool >()) |
Single interface for readMem/writeMem/amoMem to issue requests into the LSQ. More... | |
void | pushFailedRequest (MinorDynInstPtr inst) |
Push a predicate failed-representing request into the queues just to maintain commit order. More... | |
bool | recvTimingResp (PacketPtr pkt) |
Memory interface. More... | |
void | recvReqRetry () |
void | recvTimingSnoopReq (PacketPtr pkt) |
MinorCPU::MinorCPUPort & | getDcachePort () |
Return the raw-bindable port. More... | |
void | minorTrace () const |
Public Member Functions inherited from Named | |
Named (const std::string &name_) | |
const std::string & | name () const |
Public Attributes | |
MemoryState | state |
Retry state of last issued memory transfer. More... | |
const unsigned int | inMemorySystemLimit |
Maximum number of in-flight accesses issued to the memory system. More... | |
const unsigned int | lineWidth |
Memory system access width (and snap) in bytes. More... | |
LSQQueue | requests |
requests contains LSQRequests which have been issued to the TLB by calling ExecContext::readMem/writeMem (which in turn calls LSQ::pushRequest and LSQRequest::startAddrTranslation). More... | |
LSQQueue | transfers |
Once issued to memory (or, for stores, just had their state changed to StoreToStoreBuffer) LSQRequests pass through transfers waiting for memory responses. More... | |
StoreBuffer | storeBuffer |
Protected Types | |
enum | MemoryState { MemoryRunning, MemoryNeedsRetry } |
State of memory access for head access. More... | |
enum | AddrRangeCoverage { PartialAddrRangeCoverage, FullAddrRangeCoverage, NoAddrRangeCoverage } |
Coverage of one address range with another. More... | |
Protected Member Functions | |
void | tryToSendToTransfers (LSQRequestPtr request) |
Try and issue a memory access for a translated request at the head of the requests queue. More... | |
bool | tryToSend (LSQRequestPtr request) |
Try to send (or resend) a memory request's next/only packet to the memory system. More... | |
void | clearMemBarrier (MinorDynInstPtr inst) |
Clear a barrier (if it's the last one marked up in lastMemBarrier) More... | |
void | moveFromRequestsToTransfers (LSQRequestPtr request) |
Move a request between queues. More... | |
bool | canSendToMemorySystem () |
Can a request be sent to the memory system. More... | |
void | threadSnoop (LSQRequestPtr request) |
Snoop other threads monitors on memory system accesses. More... | |
Protected Attributes | |
MinorCPU & | cpu |
My owner(s) More... | |
Execute & | execute |
DcachePort | dcachePort |
std::vector< InstSeqNum > | lastMemBarrier |
Most recent execSeqNum of a memory barrier instruction or 0 if there are no in-flight barriers. More... | |
unsigned int | numAccessesInMemorySystem |
Count of the number of mem. More... | |
unsigned int | numAccessesInDTLB |
Number of requests in the DTLB in the requests queue. More... | |
unsigned int | numStoresInTransfers |
The number of stores in the transfers queue. More... | |
unsigned int | numAccessesIssuedToMemory |
The number of accesses which have been issued to the memory system but have not been committed/discarded excluding cacheable normal loads which don't need to be tracked. More... | |
LSQRequestPtr | retryRequest |
The request (from either requests or the store buffer) which is currently waiting have its memory access retried. More... | |
Addr | cacheBlockMask |
Address Mask for a cache block (e.g. More... | |
Protected Attributes inherited from Named | |
const std::string | _name |
Friends | |
std::ostream & | operator<< (std::ostream &os, MemoryState state) |
Print MemoryState values as shown in the enum definition. More... | |
std::ostream & | operator<< (std::ostream &os, AddrRangeCoverage state) |
std::ostream & | operator<< (std::ostream &os, LSQRequest::LSQRequestState state) |
typedef LSQRequest* Minor::LSQ::LSQRequestPtr |
|
protected |
|
protected |
LSQ< Impl >::LSQ | ( | std::string | name_, |
std::string | dcache_port_name_, | ||
MinorCPU & | cpu_, | ||
Execute & | execute_, | ||
unsigned int | max_accesses_in_memory_system, | ||
unsigned int | line_width, | ||
unsigned int | requests_queue_size, | ||
unsigned int | transfers_queue_size, | ||
unsigned int | store_buffer_size, | ||
unsigned int | store_buffer_cycle_store_limit | ||
) |
Definition at line 1405 of file lsq.cc.
References fatal, lineWidth, and Named::name().
|
inline |
Are there any accesses other than normal cached loads in the memory system or having received responses which need to be handled for their instruction's to be completed.
Definition at line 681 of file lsq.hh.
References numAccessesIssuedToMemory.
Referenced by Minor::Execute::isInbetweenInsts(), and Minor::Execute::takeInterrupt().
|
inline |
Must check this before trying to insert into the store buffer.
Definition at line 673 of file lsq.hh.
References Minor::LSQ::StoreBuffer::canInsert(), and storeBuffer.
Referenced by Minor::Execute::commitInst().
|
inline |
Is their space in the request queue to be able to push a request by issuing an isMemRef instruction.
Definition at line 661 of file lsq.hh.
References requests, and Minor::Queue< ElemType, ReportTraits, BubbleTraits >::unreservedRemainingSpace().
Referenced by Minor::Execute::commit(), Minor::Execute::executeMemRefInst(), and Minor::Execute::getCommittingThread().
|
protected |
Can a request be sent to the memory system.
Definition at line 1292 of file lsq.cc.
References inMemorySystemLimit, MemoryRunning, numAccessesInMemorySystem, and state.
Referenced by needsToTick(), tryToSend(), and tryToSendToTransfers().
|
protected |
Clear a barrier (if it's the last one marked up in lastMemBarrier)
Definition at line 255 of file lsq.cc.
References DPRINTF, and lastMemBarrier.
Referenced by completeMemBarrierInst().
void LSQ< Impl >::completeMemBarrierInst | ( | MinorDynInstPtr | inst, |
bool | committed | ||
) |
Complete a barrier instruction.
Where committed, makes a BarrierDataRequest and pushed it into the store buffer
Definition at line 916 of file lsq.cc.
References clearMemBarrier(), Minor::LSQ::StoreBuffer::insert(), and storeBuffer.
Referenced by Minor::Execute::commit().
LSQ::LSQRequestPtr LSQ< Impl >::findResponse | ( | MinorDynInstPtr | inst | ) |
Returns a response if it's at the head of the transfers queue and it's either complete or can be sent on to the store buffer.
After calling, the request still remains on the transfer queue until popResponse is called
Definition at line 1489 of file lsq.cc.
References Minor::LSQ::StoreBuffer::canInsert(), DPRINTF, Minor::Queue< ElemType, ReportTraits, BubbleTraits >::empty(), Minor::Queue< ElemType, ReportTraits, BubbleTraits >::front(), Minor::LSQ::LSQRequest::inst, Minor::LSQ::LSQRequest::isBarrier(), Minor::LSQ::LSQRequest::isComplete(), Minor::LSQ::LSQRequest::state, storeBuffer, Minor::LSQ::LSQRequest::StoreToStoreBuffer, and transfers.
Referenced by Minor::Execute::commit(), Minor::Execute::evaluate(), and Minor::Execute::getCommittingThread().
|
inline |
Return the raw-bindable port.
Definition at line 723 of file lsq.hh.
References dcachePort.
Referenced by Minor::Execute::getDcachePort().
|
inline |
Get the execSeqNum of the last issued memory barrier.
Definition at line 690 of file lsq.hh.
References lastMemBarrier.
Referenced by Minor::Execute::commit(), and Minor::Execute::issue().
bool LSQ< Impl >::isDrained | ( | ) |
Is there nothing left in the LSQ.
Definition at line 1559 of file lsq.cc.
References Minor::Queue< ElemType, ReportTraits, BubbleTraits >::empty(), Minor::LSQ::StoreBuffer::isDrained(), requests, storeBuffer, and transfers.
Referenced by Minor::Execute::isDrained().
void LSQ< Impl >::issuedMemBarrierInst | ( | MinorDynInstPtr | inst | ) |
A memory barrier instruction has been issued, remember its execSeqNum that we can avoid issuing memory ops until it is committed.
Definition at line 1712 of file lsq.cc.
References lastMemBarrier.
Referenced by Minor::Execute::issue().
void LSQ< Impl >::minorTrace | ( | ) | const |
Definition at line 1668 of file lsq.cc.
References lastMemBarrier, MINORTRACE, Minor::Queue< ElemType, ReportTraits, BubbleTraits >::minorTrace(), Minor::LSQ::StoreBuffer::minorTrace(), numAccessesInDTLB, numAccessesInMemorySystem, numStoresInTransfers, requests, state, storeBuffer, and transfers.
Referenced by Minor::Execute::minorTrace().
|
protected |
Move a request between queues.
Definition at line 1275 of file lsq.cc.
References Minor::Queue< ElemType, ReportTraits, BubbleTraits >::empty(), Minor::Queue< ElemType, ReportTraits, BubbleTraits >::front(), Minor::LSQ::LSQRequest::isLoad, numStoresInTransfers, Minor::Queue< ElemType, ReportTraits, BubbleTraits >::pop(), Minor::Queue< ElemType, ReportTraits, BubbleTraits >::push(), requests, transfers, and Minor::Queue< ElemType, ReportTraits, BubbleTraits >::unreservedRemainingSpace().
Referenced by recvReqRetry(), and tryToSendToTransfers().
bool LSQ< Impl >::needsToTick | ( | ) |
May need to be ticked next cycle as one of the queues contains an actionable transfers or address translation.
Definition at line 1566 of file lsq.cc.
References canSendToMemorySystem(), DPRINTF, Minor::Queue< ElemType, ReportTraits, BubbleTraits >::empty(), Minor::Queue< ElemType, ReportTraits, BubbleTraits >::front(), Minor::LSQ::LSQRequest::InTranslation, Minor::LSQ::StoreBuffer::numUnissuedStores(), requests, Minor::LSQ::LSQRequest::state, storeBuffer, transfers, and Minor::Queue< ElemType, ReportTraits, BubbleTraits >::unreservedRemainingSpace().
Referenced by Minor::Execute::evaluate().
void LSQ< Impl >::popResponse | ( | LSQ::LSQRequestPtr | response | ) |
Sanity check and pop the head response.
Definition at line 1524 of file lsq.cc.
References DPRINTF, Minor::Queue< ElemType, ReportTraits, BubbleTraits >::empty(), Minor::Queue< ElemType, ReportTraits, BubbleTraits >::front(), Minor::LSQ::LSQRequest::inst, Minor::LSQ::LSQRequest::isLoad, Minor::LSQ::LSQRequest::issuedToMemory, numAccessesIssuedToMemory, numStoresInTransfers, Minor::Queue< ElemType, ReportTraits, BubbleTraits >::pop(), Minor::LSQ::LSQRequest::state, Minor::LSQ::LSQRequest::StoreInStoreBuffer, and transfers.
Referenced by Minor::Execute::commit(), and Minor::Execute::handleMemResponse().
void LSQ< Impl >::pushFailedRequest | ( | MinorDynInstPtr | inst | ) |
Push a predicate failed-representing request into the queues just to maintain commit order.
Definition at line 1661 of file lsq.cc.
References Minor::Queue< ElemType, ReportTraits, BubbleTraits >::push(), and requests.
Referenced by Minor::Execute::executeMemRefInst().
Fault LSQ< Impl >::pushRequest | ( | MinorDynInstPtr | inst, |
bool | isLoad, | ||
uint8_t * | data, | ||
unsigned int | size, | ||
Addr | addr, | ||
Request::Flags | flags, | ||
uint64_t * | res, | ||
AtomicOpFunctorPtr | amo_op, | ||
const std::vector< bool > & | byte_enable = std::vector<bool>() |
||
) |
Single interface for readMem/writeMem/amoMem to issue requests into the LSQ.
Definition at line 1586 of file lsq.cc.
References addr, cpu, data, BaseCPU::dataRequestorId(), DPRINTF, lineWidth, NoFault, panic, Minor::Queue< ElemType, ReportTraits, BubbleTraits >::push(), Minor::LSQ::LSQRequest::request, requests, Minor::LSQ::LSQRequest::startAddrTranslation(), Request::STORE_NO_DATA, MinorCPU::threads, and transferNeedsBurst().
Referenced by Minor::ExecContext::initiateMemAMO(), Minor::ExecContext::initiateMemRead(), and Minor::ExecContext::writeMem().
void LSQ< Impl >::recvReqRetry | ( | ) |
Definition at line 1359 of file lsq.cc.
References Minor::LSQ::StoreBuffer::countIssuedStore(), DPRINTF, MemoryNeedsRetry, MemoryRunning, moveFromRequestsToTransfers(), panic, Minor::LSQ::LSQRequest::RequestIssuing, Minor::LSQ::LSQRequest::RequestNeedsRetry, retryRequest, Minor::LSQ::LSQRequest::setState(), Minor::LSQ::LSQRequest::state, state, storeBuffer, Minor::LSQ::LSQRequest::StoreBufferIssuing, Minor::LSQ::LSQRequest::StoreBufferNeedsRetry, Minor::LSQ::LSQRequest::StoreInStoreBuffer, Minor::LSQ::LSQRequest::Translated, and tryToSend().
Referenced by Minor::LSQ::DcachePort::recvReqRetry().
Memory interface.
Definition at line 1299 of file lsq.cc.
References Packet::cmd, cpu, Minor::LSQ::StoreBuffer::deleteRequest(), DPRINTF, Minor::Pipeline::ExecuteStageId, Packet::getAddr(), Minor::LSQ::LSQRequest::hasPacketsInMemSystem(), Minor::LSQ::LSQRequest::inst, Minor::LSQ::LSQRequest::isBarrier(), Minor::LSQ::LSQRequest::isComplete(), Packet::isError(), numAccessesInMemorySystem, panic, Packet::popSenderState(), Minor::LSQ::LSQRequest::RequestIssuing, Minor::LSQ::LSQRequest::RequestNeedsRetry, Minor::LSQ::LSQRequest::retireResponse(), Minor::LSQ::LSQRequest::state, storeBuffer, Minor::LSQ::LSQRequest::StoreBufferIssuing, Minor::LSQ::LSQRequest::StoreBufferNeedsRetry, MemCmd::toString(), and MinorCPU::wakeupOnEvent().
Referenced by Minor::LSQ::DcachePort::recvTimingResp().
Definition at line 1757 of file lsq.cc.
References cacheBlockMask, cpu, AddressMonitor::doMonitor(), BaseCPU::getContext(), BaseCPU::getCpuAddrMonitor(), ArmISA::handleLockedSnoop(), Packet::isInvalidate(), Packet::isWrite(), BaseCPU::numThreads, and MinorCPU::wakeup().
Referenced by Minor::LSQ::DcachePort::recvTimingSnoopReq().
void LSQ< Impl >::sendStoreToStoreBuffer | ( | LSQRequestPtr | request | ) |
A store has been committed, please move it to the store buffer.
Definition at line 1546 of file lsq.cc.
References DPRINTF, Minor::LSQ::StoreBuffer::insert(), Minor::LSQ::LSQRequest::inst, Minor::LSQ::LSQRequest::state, storeBuffer, and Minor::LSQ::LSQRequest::StoreToStoreBuffer.
Referenced by Minor::Execute::handleMemResponse().
void LSQ< Impl >::step | ( | ) |
Step checks the queues to see if their are issuable transfers which were not otherwise picked up by tests at the end of other events.
Step the memory access mechanism on to its next state.
Steppable actions include deferred actions which couldn't be cascaded on the end of a memory response/TLB response event because of resource congestion.
In reality, most of the stepping is done by the callbacks on the LSQ but this function is responsible for issuing memory requests lodged in the requests queue.
Definition at line 1478 of file lsq.cc.
References Minor::Queue< ElemType, ReportTraits, BubbleTraits >::empty(), Minor::Queue< ElemType, ReportTraits, BubbleTraits >::front(), requests, Minor::LSQ::StoreBuffer::step(), storeBuffer, and tryToSendToTransfers().
Referenced by Minor::Execute::evaluate().
|
protected |
Snoop other threads monitors on memory system accesses.
Definition at line 1777 of file lsq.cc.
References cacheBlockMask, cpu, AddressMonitor::doMonitor(), BaseCPU::getContext(), BaseCPU::getCpuAddrMonitor(), ArmISA::handleLockedSnoop(), Minor::LSQ::LSQRequest::inst, Packet::isInvalidate(), Packet::isWrite(), BaseCPU::numThreads, Minor::LSQ::LSQRequest::packet, and MinorCPU::wakeup().
Referenced by tryToSend().
|
protected |
Try to send (or resend) a memory request's next/only packet to the memory system.
Returns true if the request was successfully sent to memory (and was also the last packet in a transfer)
Definition at line 1177 of file lsq.cc.
References canSendToMemorySystem(), Minor::LSQ::LSQRequest::Complete, BaseCPU::contextToThread(), cpu, dcachePort, DPRINTF, Packet::findNextSenderState(), BaseCPU::getContext(), Minor::LSQ::LSQRequest::getHeadPacket(), Minor::LSQ::LSQRequest::inst, Minor::LSQ::LSQRequest::isLoad, MemoryNeedsRetry, MemoryRunning, numAccessesInMemorySystem, panic, Packet::req, Minor::LSQ::LSQRequest::request, Minor::LSQ::LSQRequest::RequestIssuing, Minor::LSQ::LSQRequest::RequestNeedsRetry, retryRequest, RequestPort::sendTimingReq(), Minor::LSQ::LSQRequest::sentAllPackets(), Minor::LSQ::LSQRequest::setState(), Minor::LSQ::LSQRequest::state, state, Minor::LSQ::LSQRequest::stepToNextPacket(), Minor::LSQ::LSQRequest::StoreBufferIssuing, Minor::LSQ::LSQRequest::StoreBufferNeedsRetry, Minor::LSQ::LSQRequest::StoreInStoreBuffer, threadSnoop(), and Minor::LSQ::LSQRequest::Translated.
Referenced by recvReqRetry(), and tryToSendToTransfers().
|
protected |
Try and issue a memory access for a translated request at the head of the requests queue.
Also tries to move the request between queues
Definition at line 962 of file lsq.cc.
References cacheBlockMask, Minor::LSQ::StoreBuffer::canForwardDataToLoad(), canSendToMemorySystem(), Minor::LSQ::LSQRequest::Complete, cpu, DPRINTF, Minor::Queue< ElemType, ReportTraits, BubbleTraits >::empty(), execute, Minor::LSQ::LSQRequest::Failed, Minor::LSQ::StoreBuffer::forwardStoreData(), Minor::Queue< ElemType, ReportTraits, BubbleTraits >::front(), FullAddrRangeCoverage, ArmISA::handleLockedRead(), ArmISA::handleLockedWrite(), Minor::LSQ::LSQRequest::hasPacketsInMemSystem(), Minor::LSQ::LSQRequest::inst, Minor::Execute::instIsHeadInst(), Minor::Execute::instIsRightStream(), Minor::LSQ::LSQRequest::InTranslation, Minor::LSQ::LSQRequest::isComplete(), Minor::LSQ::StoreBuffer::isDrained(), Minor::LSQ::LSQRequest::isLoad, Minor::LSQ::LSQRequest::issuedToMemory, Packet::makeResponse(), MemoryNeedsRetry, moveFromRequestsToTransfers(), NoAddrRangeCoverage, NoFault, numAccessesIssuedToMemory, numStoresInTransfers, Minor::LSQ::LSQRequest::packet, PartialAddrRangeCoverage, SimpleThread::pcState(), Minor::LSQ::LSQRequest::request, Minor::LSQ::LSQRequest::RequestIssuing, requests, Minor::LSQ::LSQRequest::setSkipped(), Minor::LSQ::LSQRequest::setState(), Minor::LSQ::LSQRequest::state, state, storeBuffer, Minor::LSQ::LSQRequest::StoreToStoreBuffer, MinorCPU::threads, transfers, Minor::LSQ::LSQRequest::Translated, tryToSend(), and Minor::Queue< ElemType, ReportTraits, BubbleTraits >::unreservedRemainingSpace().
Referenced by step().
|
friend |
|
friend |
|
friend |
|
protected |
Address Mask for a cache block (e.g.
~(cache_block_size-1))
Definition at line 614 of file lsq.hh.
Referenced by recvTimingSnoopReq(), threadSnoop(), and tryToSendToTransfers().
|
protected |
My owner(s)
Definition at line 63 of file lsq.hh.
Referenced by pushRequest(), recvTimingResp(), recvTimingSnoopReq(), threadSnoop(), tryToSend(), and tryToSendToTransfers().
|
protected |
Definition at line 112 of file lsq.hh.
Referenced by getDcachePort(), and tryToSend().
|
protected |
Definition at line 64 of file lsq.hh.
Referenced by tryToSendToTransfers().
const unsigned int Minor::LSQ::inMemorySystemLimit |
Maximum number of in-flight accesses issued to the memory system.
Definition at line 540 of file lsq.hh.
Referenced by canSendToMemorySystem().
|
protected |
Most recent execSeqNum of a memory barrier instruction or 0 if there are no in-flight barriers.
Useful as a dependency for early-issued memory operations
Definition at line 533 of file lsq.hh.
Referenced by clearMemBarrier(), getLastMemBarrier(), issuedMemBarrierInst(), and minorTrace().
const unsigned int Minor::LSQ::lineWidth |
Memory system access width (and snap) in bytes.
Definition at line 543 of file lsq.hh.
Referenced by LSQ(), and pushRequest().
|
protected |
Number of requests in the DTLB in the requests queue.
Definition at line 598 of file lsq.hh.
Referenced by minorTrace().
|
protected |
Count of the number of mem.
accesses which have left the requests queue and are in the 'wild' in the memory system and who must not be interrupted as they are not normal cacheable accesses. This is a count of the number of in-flight requests with issuedToMemory set who have visited tryToSendRequest at least once
Definition at line 595 of file lsq.hh.
Referenced by canSendToMemorySystem(), minorTrace(), recvTimingResp(), and tryToSend().
|
protected |
The number of accesses which have been issued to the memory system but have not been committed/discarded excluding cacheable normal loads which don't need to be tracked.
Definition at line 607 of file lsq.hh.
Referenced by accessesInFlight(), popResponse(), and tryToSendToTransfers().
|
protected |
The number of stores in the transfers queue.
Useful when testing if the store buffer contains all the forwardable stores
Definition at line 602 of file lsq.hh.
Referenced by minorTrace(), moveFromRequestsToTransfers(), popResponse(), and tryToSendToTransfers().
LSQQueue Minor::LSQ::requests |
requests contains LSQRequests which have been issued to the TLB by calling ExecContext::readMem/writeMem (which in turn calls LSQ::pushRequest and LSQRequest::startAddrTranslation).
Once they have a physical address, requests at the head of requests can be issued to the memory system. At this stage, it cannot be clear that memory accesses must happen (that there are no preceding faults or changes of flow of control) and so only cacheable reads are issued to memory. Cacheable stores are not issued at all (and just pass through 'transfers' in order) and all other transfers are stalled in requests until their corresponding instructions are at the head of the inMemInsts instruction queue and have the right streamSeqNum.
Definition at line 566 of file lsq.hh.
Referenced by canRequest(), isDrained(), minorTrace(), moveFromRequestsToTransfers(), needsToTick(), pushFailedRequest(), pushRequest(), step(), and tryToSendToTransfers().
|
protected |
The request (from either requests or the store buffer) which is currently waiting have its memory access retried.
Definition at line 611 of file lsq.hh.
Referenced by recvReqRetry(), and tryToSend().
MemoryState Minor::LSQ::state |
Retry state of last issued memory transfer.
Definition at line 537 of file lsq.hh.
Referenced by canSendToMemorySystem(), Minor::LSQ::LSQRequest::isComplete(), minorTrace(), Minor::LSQ::LSQRequest::needsToBeSentToStoreBuffer(), Minor::operator<<(), recvReqRetry(), Minor::LSQ::LSQRequest::reportData(), Minor::LSQ::LSQRequest::setState(), tryToSend(), and tryToSendToTransfers().
StoreBuffer Minor::LSQ::storeBuffer |
Definition at line 586 of file lsq.hh.
Referenced by canPushIntoStoreBuffer(), completeMemBarrierInst(), findResponse(), isDrained(), minorTrace(), needsToTick(), recvReqRetry(), recvTimingResp(), sendStoreToStoreBuffer(), step(), and tryToSendToTransfers().
LSQQueue Minor::LSQ::transfers |
Once issued to memory (or, for stores, just had their state changed to StoreToStoreBuffer) LSQRequests pass through transfers waiting for memory responses.
At the head of transfers, Execute::commitInst can pick up the memory response for a request using LSQ::findResponse. Responses to be committed can then have ExecContext::completeAcc on them. Stores can then be pushed into the store buffer. All other transfers will then be complete.
Definition at line 575 of file lsq.hh.
Referenced by findResponse(), isDrained(), minorTrace(), moveFromRequestsToTransfers(), needsToTick(), popResponse(), and tryToSendToTransfers().