29 #ifndef __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCONTROLLER_HH__
30 #define __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCONTROLLER_HH__
37 #include "mem/protocol/AccessPermission.hh"
47 #include "params/RubyController.hh"
56 virtual const char*
what()
const throw()
57 {
return "Port rejected message based on type"; }
83 virtual void print(std::ostream & out)
const = 0;
104 {
fatal(
"Prefetches not implemented!");}
110 {
fatal(
"collateStats() should be overridden!");}
206 const std::string &_label);
228 #endif // __MEM_RUBY_SLICC_INTERFACE_ABSTRACTCONTROLLER_HH__
std::map< Addr, MsgVecType * > WaitingBufType
bool recvTimingResp(PacketPtr pkt)
Receive a timing response from the slave port.
virtual MessageBuffer * getMemoryQueue() const =0
WaitingBufType m_waiting_buffers
Cycles is a wrapper class for representing cycle counts, i.e.
const unsigned int m_buffer_size
const PortID InvalidPortID
MachineType getType() const
void recvTimingResp(PacketPtr pkt)
virtual void regStats()
Register statistics for this object.
AbstractController(const Params *p)
The QueuedMasterPort combines two queues, a request queue and a snoop response queue, that both share the same port.
AbstractController * controller
std::map< Addr, MessageBuffer * > m_block_map
virtual void enqueuePrefetch(const Addr &, const RubyRequestType &)
Function for enqueuing a prefetch request.
virtual void functionalRead(const Addr &addr, PacketPtr)=0
These functions are used by ruby system to read/write the data blocks that exist with in the controll...
std::set< MessageBuffer * > MsgBufType
void queueMemoryRead(const MachineID &id, Addr addr, Cycles latency)
SnoopRespPacketQueue snoopRespQueue
std::vector< MessageBuffer * > MsgVecType
void init()
init() is called after all C++ SimObjects have been created and all ports are connected.
virtual void recordCacheTrace(int cntrl, CacheRecorder *tr)=0
virtual void print(std::ostream &out) const =0
virtual void initNetQueues()=0
Initialize the message buffers.
This is a simple scalar statistic, like a counter.
Port that forwards requests and receives responses from the memory controller.
void process()
virtual process function that is invoked when the callback queue is executed.
MachineID getMachineID() const
bool isBlocked(Addr) const
RubyControllerParams Params
void queueMemoryWrite(const MachineID &id, Addr addr, Cycles latency, const DataBlock &block)
Declaration of the queued port.
Callback class used for collating statistics from all the controller of this type.
virtual MessageBuffer * getMandatoryQueue() const =0
virtual void resetStats()=0
Reset statistics associated with this object.
MachineType getType() const
std::vector< Stats::Histogram * > m_delayVCHistogram
virtual int functionalWriteBuffers(PacketPtr &)=0
The return value indicates the number of messages written with the data from the packet.
void profileRequest(const std::string &request)
Profiles original cache requests including PUTs.
Stats::Histogram & getDelayVCHist(uint32_t index)
int functionalMemoryWrite(PacketPtr)
virtual void collateStats()
Function for collating statistics from all the controllers of this particular type.
SenderState(MachineID _id)
void profileMsgDelay(uint32_t virtualNetwork, Cycles delay)
Profiles the delay associated with messages.
Stats::Scalar m_fully_busy_cycles
Counter for the number of cycles when the transitions carried out were equal to the maximum allowed...
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
const int m_transitions_per_cycle
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
unsigned int m_cur_in_port
A virtual base opaque structure used to hold state associated with the packet (e.g., an MSHR), specific to a MemObject that sees the packet.
void blockOnQueue(Addr, MessageBuffer *)
virtual Sequencer * getCPUSequencer() const =0
Declaration of the Packet class.
MemoryPort(const std::string &_name, AbstractController *_controller, const std::string &_label)
void wakeUpBuffers(Addr addr)
const Params * params() const
The MemObject class extends the ClockedObject with accessor functions to get its master and slave por...
const int m_number_of_TBEs
virtual AccessPermission getAccessPermission(const Addr &addr)=0
A BaseMasterPort is a protocol-agnostic master port, responsible only for the structural connection t...
void queueMemoryWritePartial(const MachineID &id, Addr addr, Cycles latency, const DataBlock &block, int size)
Stats::Histogram & getDelayHist()
const SimObjectParams * _params
Cached copy of the object parameters.
void stallBuffer(MessageBuffer *buf, Addr addr)
virtual GPUCoalescer * getGPUCoalescer() const =0
StatsCallback(AbstractController *_ctr)
const MasterID m_masterId
virtual int functionalWrite(const Addr &addr, PacketPtr)=0
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
void initNetworkPtr(Network *net_ptr)
void functionalMemoryRead(PacketPtr)
virtual const char * what() const
NodeID getVersion() const
Stats::Histogram m_delayHistogram
Histogram for profiling delay for the messages this controller cares for.
BaseMasterPort & getMasterPort(const std::string &if_name, PortID idx=InvalidPortID)
A function used to return the port associated with this bus object.