41 #ifndef __MEM_MEM_CHECKER_HH__
42 #define __MEM_MEM_CHECKER_HH__
47 #include <unordered_map>
53 #include "debug/MemChecker.hh"
54 #include "params/MemChecker.hh"
188 std::unordered_map<Serial, Transaction>
writes;
208 :
Named((parent != NULL ? parent->
name() :
"") +
322 template <
class TList>
331 for (--it; it != l->begin() && it->complete >= before; --it);
485 std::make_pair(addr,
ByteTracker(addr,
this))).first;
520 "starting read: serial = %d, start = %d, addr = %#llx, "
521 "size = %d\n",
nextSerial, start, addr , size);
523 for (
size_t i = 0;
i <
size; ++
i) {
534 "starting write: serial = %d, start = %d, addr = %#llx, "
535 "size = %d\n",
nextSerial, start, addr, size);
537 for (
size_t i = 0;
i <
size; ++
i) {
549 "completing write: serial = %d, complete = %d, "
550 "addr = %#llx, size = %d\n", serial, complete, addr, size);
552 for (
size_t i = 0;
i <
size; ++
i) {
561 "aborting write: serial = %d, addr = %#llx, size = %d\n",
564 for (
size_t i = 0;
i <
size; ++
i) {
569 #endif // __MEM_MEM_CHECKER_HH__
std::list< WriteCluster > WriteClusterList
static const Serial SERIAL_INITIAL
Initial serial.
void completeWrite(Serial serial, Tick complete, Addr addr, size_t size)
Completes a previously started write transaction.
const std::string & name() const
void abortWrite(Serial serial)
Aborts a write transaction.
ByteTracker(Addr addr=0, const MemChecker *parent=NULL)
static const uint8_t DATA_INITIAL
Initial data value.
Tick complete
Completion tick.
void abortWrite(Serial serial, Addr addr, size_t size)
Aborts a previously started write transaction.
bool completeRead(Serial serial, Tick complete, Addr addr, size_t size, uint8_t *data)
Completes a previously started read transaction.
TransactionList readObservations
List of completed reads, i.e.
ByteTracker * getByteTracker(Addr addr)
Returns the instance of ByteTracker for the requested location.
WriteClusterList writeClusters
List of write clusters for this address.
std::vector< uint8_t > _lastExpectedData
See lastExpectedData().
The Transaction class captures the lifetimes of read and write operations, and the values they consum...
std::unordered_map< Serial, Transaction > writes
Map of Serial –> Transaction of all writes in cluster; contains all, in-flight or already completed...
void completeWrite(Serial serial, Tick _complete)
Completes a write transaction.
Serial nextSerial
Next distinct serial to be assigned to the next transaction to be started.
uint64_t Serial
The Serial type is used to be able to uniquely identify a transaction as it passes through the system...
MemChecker(const MemCheckerParams *p)
std::string csprintf(const char *format, const Args &...args)
std::unordered_map< Addr, ByteTracker > byte_trackers
Maintain a map of address –> byte-tracker.
uint64_t Tick
Tick count type.
The ByteTracker keeps track of transactions for the same byte – all outstanding reads, the completed reads (and what they observed) and write clusters (see WriteCluster).
void reset()
Resets the entire checker.
const std::string & getErrorMessage() const
In completeRead, if an error is encountered, this does not print nor cause an error, but instead should be handled by the caller.
std::string errorMessage
Detailed error message of the last violation in completeRead.
void completeWrite(Serial serial, Tick complete)
Completes a write transaction.
WriteCluster * getIncompleteWriteCluster()
Convenience function to return the most recent incomplete write cluster.
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
const std::vector< uint8_t > & lastExpectedData() const
This function returns the expected data that inExpectedData iterated through in the last call...
TList::iterator lastCompletedTransaction(TList *l, Tick before)
Helper function to return an iterator to the entry of a container of Transaction compatible classes...
void startWrite(Serial serial, Tick start, uint8_t data)
Starts a write transaction.
bool operator<(const Transaction &rhs) const
Orders Transactions for use with std::map.
bool inExpectedData(Tick start, Tick complete, uint8_t data)
Given a start and end time (of any read transaction), this function iterates through all data that su...
static const Tick TICK_INITIAL
The initial tick the system starts with.
The WriteCluster class captures sets of writes where all writes are overlapping with at least one oth...
Tick start
Start of earliest write in cluster.
bool completeRead(Serial serial, Tick complete, uint8_t data)
Completes a read transaction that is still outstanding.
std::list< Transaction > TransactionList
void abortWrite(Serial serial)
Aborts a write transaction.
Serial startWrite(Tick start, Addr addr, size_t size, const uint8_t *data)
Starts a write transaction.
uint8_t data
Depending on the memory operation, the data value either represents: for writes, the value written up...
void startWrite(Serial serial, Tick _start, uint8_t data)
Starts a write transaction.
void pruneTransactions()
Prunes no longer needed transactions.
Transaction(Serial _serial, Tick _start, Tick _complete, uint8_t _data=DATA_INITIAL)
std::map< Serial, Transaction > outstandingReads
Maintains a map of Serial -> Transaction for all outstanding reads.
Serial serial
Unique identifying serial.
static const Tick TICK_FUTURE
The maximum value that curTick() could ever return.
Tick complete
Completion of last write in cluster.
Serial startRead(Tick start, Addr addr, size_t size)
Starts a read transaction.
Abstract superclass for simulation objects.
void startRead(Serial serial, Tick start)
Starts a read transaction.